From f683bedb81fadba50680a2322d6b51f855164ad5 Mon Sep 17 00:00:00 2001 From: Ivan Malison Date: Thu, 9 Jul 2026 16:36:19 -0700 Subject: [PATCH 1/2] Add cached player-window leaderboards --- .../src/api/leaderboards.rs | 612 ++++++++++++++++-- .../src/api/leaderboards_tests.rs | 95 ++- crates/rocket-sense-server/src/app.rs | 14 +- .../src/leaderboard_cache.rs | 567 ++++++++++++++++ .../src/leaderboard_cache_tests.rs | 130 ++++ crates/rocket-sense-server/src/main.rs | 1 + crates/rocket-sense-server/src/settings.rs | 18 + .../0086_leaderboard_player_window_cache.sql | 131 ++++ web/src/stats/leaderboards.tsx | 202 +++--- 9 files changed, 1581 insertions(+), 189 deletions(-) create mode 100644 crates/rocket-sense-server/src/leaderboard_cache.rs create mode 100644 crates/rocket-sense-server/src/leaderboard_cache_tests.rs create mode 100644 migrations/0086_leaderboard_player_window_cache.sql diff --git a/crates/rocket-sense-server/src/api/leaderboards.rs b/crates/rocket-sense-server/src/api/leaderboards.rs index 133c7bf5..0692eb14 100644 --- a/crates/rocket-sense-server/src/api/leaderboards.rs +++ b/crates/rocket-sense-server/src/api/leaderboards.rs @@ -22,6 +22,7 @@ mod tests; const DEFAULT_LIMIT: u32 = 50; const MAX_LIMIT: u32 = 200; +const ALL_SCOPE: &str = "*"; pub fn router() -> Router { Router::new() @@ -42,6 +43,219 @@ struct LeaderboardPaging { offset: u32, } +/// Standard windows backed by disposable player/window aggregates. The cache +/// is only a read model: live replay/fact queries remain the correctness +/// fallback and the cache is expected to be fully rebuilt often. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum LeaderboardWindow { + Daily, + TrailingSevenDays, + Season, +} + +impl LeaderboardWindow { + fn from_params(params: &QueryParams) -> Result, ApiError> { + match params + .first(&["window"]) + .map(|value| value.trim().to_ascii_lowercase()) + .as_deref() + { + None | Some("") => Ok(None), + Some("daily") | Some("day") => Ok(Some(Self::Daily)), + Some("trailing-7d") | Some("trailing_7d") | Some("7d") => { + Ok(Some(Self::TrailingSevenDays)) + } + Some("season") => Ok(Some(Self::Season)), + Some(_) => Err(ApiError::bad_request( + "window must be one of: daily, trailing-7d, season", + )), + } + } + + fn kind(self) -> &'static str { + match self { + Self::Daily => "daily", + Self::TrailingSevenDays => "trailing-7d", + Self::Season => "season", + } + } +} + +#[derive(Debug, Clone)] +struct CachedLeaderboardScope { + window: LeaderboardWindow, + season: Option, + game_type: String, + team_size: i16, + playlist: String, +} + +impl CachedLeaderboardScope { + fn from_filters(window: Option, filters: &ReplaySetFilters) -> Option { + let window = window?; + let only_standard_dimensions = filters.search_pattern.is_none() + && filters.player_name_patterns.is_empty() + && filters.replay_ids.is_empty() + && filters.file_sha256s.is_empty() + && filters.group_id.is_none() + && filters.project_id.is_none() + && filters.maps.is_empty() + && filters.pro.is_none() + && filters.uploader_user_id.is_none() + && filters.status.is_none() + && filters.created_after.is_none() + && filters.created_before.is_none() + && filters.replay_date_after.is_none() + && filters.replay_date_before.is_none() + && filters.min_rank_tier.is_none() + && filters.max_rank_tier.is_none() + && filters.rank_scope_player.is_none() + && filters.min_season_ord.is_none() + && filters.max_season_ord.is_none() + && filters.playlist_group_key.is_none() + && filters.player_outcome.is_none() + && filters.playlists.len() <= 1 + && filters.game_types.len() <= 1 + && filters.team_sizes.len() <= 1 + && filters.seasons.len() <= 1; + if !only_standard_dimensions { + return None; + } + if window != LeaderboardWindow::Season && !filters.seasons.is_empty() { + return None; + } + + Some(Self { + window, + season: filters.seasons.first().cloned(), + game_type: filters + .game_types + .first() + .cloned() + .unwrap_or_else(|| ALL_SCOPE.to_owned()), + team_size: filters + .team_sizes + .first() + .copied() + .and_then(|value| i16::try_from(value).ok()) + .unwrap_or(0), + playlist: filters + .playlists + .first() + .cloned() + .unwrap_or_else(|| ALL_SCOPE.to_owned()), + }) + } +} + +fn push_live_window_filter<'args>( + builder: &mut QueryBuilder<'args, Postgres>, + window: Option, + filters: &'args ReplaySetFilters, + replay_alias: &str, +) { + let Some(window) = window else { + return; + }; + match window { + LeaderboardWindow::Daily => { + builder.push(" AND COALESCE("); + builder.push(replay_alias); + builder.push(".replay_date, "); + builder.push(replay_alias); + builder.push( + ".created_at) >= date_trunc('day', now() AT TIME ZONE 'UTC') AT TIME ZONE 'UTC'", + ); + } + LeaderboardWindow::TrailingSevenDays => { + builder.push(" AND COALESCE("); + builder.push(replay_alias); + builder.push(".replay_date, "); + builder.push(replay_alias); + builder.push(".created_at) >= now() - interval '7 days'"); + } + LeaderboardWindow::Season if filters.seasons.is_empty() => { + builder.push(" AND lower(btrim("); + builder.push(replay_alias); + builder.push( + ".season)) = (SELECT lower(btrim(current_replay.season)) \ + FROM replays current_replay \ + WHERE current_replay.season IS NOT NULL \ + AND btrim(current_replay.season) <> '' \ + AND current_replay.canonical_analysis_run_id IS NOT NULL \ + ORDER BY COALESCE(current_replay.replay_date, current_replay.created_at) DESC \ + LIMIT 1)", + ); + } + LeaderboardWindow::Season => {} + } +} + +async fn cache_scope_available( + pool: &sqlx::PgPool, + scope: &CachedLeaderboardScope, +) -> Result { + let available = match scope.window { + LeaderboardWindow::Daily => { + sqlx::query_scalar::<_, bool>( + "SELECT EXISTS (SELECT 1 FROM leaderboard_cache_windows WHERE window_key = 'daily')", + ) + .fetch_one(pool) + .await? + } + LeaderboardWindow::TrailingSevenDays => { + sqlx::query_scalar::<_, bool>( + "SELECT EXISTS (SELECT 1 FROM leaderboard_cache_windows WHERE window_key = 'trailing-7d')", + ) + .fetch_one(pool) + .await? + } + LeaderboardWindow::Season => { + sqlx::query_scalar::<_, bool>( + "SELECT EXISTS (\ + SELECT 1 FROM leaderboard_cache_windows \ + WHERE window_kind = 'season' \ + AND (($1::text IS NULL AND is_current) OR season = $1))", + ) + .bind(scope.season.as_deref()) + .fetch_one(pool) + .await? + } + }; + Ok(available) +} + +fn push_cached_scope_filter<'args>( + builder: &mut QueryBuilder<'args, Postgres>, + scope: &'args CachedLeaderboardScope, + row_alias: &str, +) { + builder.push(" JOIN leaderboard_cache_windows cache_window ON cache_window.window_key = "); + builder.push(row_alias); + builder.push(".window_key WHERE cache_window.window_kind = "); + builder.push_bind(scope.window.kind()); + if scope.window == LeaderboardWindow::Season { + if let Some(season) = &scope.season { + builder.push(" AND cache_window.season = "); + builder.push_bind(season); + } else { + builder.push(" AND cache_window.is_current"); + } + } + builder.push(" AND "); + builder.push(row_alias); + builder.push(".scope_game_type = "); + builder.push_bind(&scope.game_type); + builder.push(" AND "); + builder.push(row_alias); + builder.push(".scope_team_size = "); + builder.push_bind(scope.team_size); + builder.push(" AND "); + builder.push(row_alias); + builder.push(".scope_playlist = "); + builder.push_bind(&scope.playlist); +} + impl LeaderboardPaging { fn from_params(params: &QueryParams) -> Result { let count = params @@ -67,12 +281,20 @@ impl LeaderboardPaging { fn parse_filters( raw_query: Option<&str>, auth_user_id: Option, -) -> Result<(ReplaySetFilters, LeaderboardPaging), ApiError> { +) -> Result< + ( + ReplaySetFilters, + LeaderboardPaging, + Option, + ), + ApiError, +> { let params = QueryParams::from_raw(raw_query); let paging = LeaderboardPaging::from_params(¶ms)?; + let window = LeaderboardWindow::from_params(¶ms)?; let input = ReplaySetFilterInput::from_query_params(¶ms)?; let filters = ReplaySetFilters::from_input(input, auth_user_id)?; - Ok((filters, paging)) + Ok((filters, paging, window)) } #[derive(Debug, Serialize, ToSchema)] @@ -119,6 +341,7 @@ pub struct AppearancesLeaderboardRowResponse { path = "/api/v1/leaderboards/uploads", tag = "leaderboards", params( + ("window" = Option, Query, description = "Standard cached window: daily, trailing-7d, or season"), ("game-type" = Option>, Query, description = "Competitive context filter (ranked, casual, tournament, ...)"), ("team-size" = Option>, Query, description = "Team size filter (1-4 or 1v1/2v2/3v3/4v4)"), ("playlist" = Option>, Query, description = "Playlist/game-mode filter"), @@ -140,11 +363,12 @@ pub async fn get_uploads_leaderboard( RawQuery(raw_query): RawQuery, ) -> Result, ApiError> { let db = require_db(&state)?; - let (filters, paging) = parse_filters(raw_query.as_deref(), auth_user.as_ref().map(|u| u.id))?; + let (filters, paging, window) = + parse_filters(raw_query.as_deref(), auth_user.as_ref().map(|u| u.id))?; let (total, rows) = tokio::try_join!( - load_uploads_total(db, &filters), - load_uploads_rows(db, &filters, &paging), + load_uploads_total(db, &filters, window), + load_uploads_rows(db, &filters, window, &paging), ) .map_err(ApiError::internal)?; @@ -163,6 +387,7 @@ pub async fn get_uploads_leaderboard( path = "/api/v1/leaderboards/appearances", tag = "leaderboards", params( + ("window" = Option, Query, description = "Standard cached window: daily, trailing-7d, or season"), ("game-type" = Option>, Query, description = "Competitive context filter (ranked, casual, tournament, ...)"), ("team-size" = Option>, Query, description = "Team size filter (1-4 or 1v1/2v2/3v3/4v4)"), ("playlist" = Option>, Query, description = "Playlist/game-mode filter"), @@ -184,11 +409,21 @@ pub async fn get_appearances_leaderboard( RawQuery(raw_query): RawQuery, ) -> Result, ApiError> { let db = require_db(&state)?; - let (filters, paging) = parse_filters(raw_query.as_deref(), auth_user.as_ref().map(|u| u.id))?; + let (filters, paging, window) = + parse_filters(raw_query.as_deref(), auth_user.as_ref().map(|u| u.id))?; + let mut cached_scope = CachedLeaderboardScope::from_filters(window, &filters); + if let Some(scope) = &cached_scope { + if !cache_scope_available(db, scope) + .await + .map_err(ApiError::internal)? + { + cached_scope = None; + } + } let (total, rows) = tokio::try_join!( - load_appearances_total(db, &filters), - load_appearances_rows(db, &filters, &paging), + load_appearances_total(db, &filters, window, cached_scope.as_ref()), + load_appearances_rows(db, &filters, window, cached_scope.as_ref(), &paging), ) .map_err(ApiError::internal)?; @@ -205,8 +440,9 @@ pub async fn get_appearances_leaderboard( async fn load_uploads_total( pool: &sqlx::PgPool, filters: &ReplaySetFilters, + window: Option, ) -> Result { - let total: i64 = uploads_total_query(filters) + let total: i64 = uploads_total_query(filters, window) .build() .fetch_one(pool) .await? @@ -217,9 +453,10 @@ async fn load_uploads_total( async fn load_uploads_rows( pool: &sqlx::PgPool, filters: &ReplaySetFilters, + window: Option, paging: &LeaderboardPaging, ) -> Result, sqlx::Error> { - let rows = uploads_rows_query(filters, paging) + let rows = uploads_rows_query(filters, window, paging) .build() .fetch_all(pool) .await?; @@ -238,17 +475,22 @@ async fn load_uploads_rows( .collect::, sqlx::Error>>() } -fn uploads_total_query(filters: &ReplaySetFilters) -> QueryBuilder<'_, Postgres> { +fn uploads_total_query( + filters: &ReplaySetFilters, + window: Option, +) -> QueryBuilder<'_, Postgres> { let mut builder = QueryBuilder::::new( "SELECT COUNT(DISTINCT r.uploaded_by_user_id) AS total FROM replays r \ WHERE r.uploaded_by_user_id IS NOT NULL", ); append_replay_set_filters(&mut builder, filters, "r"); + push_live_window_filter(&mut builder, window, filters, "r"); builder } fn uploads_rows_query<'args>( filters: &'args ReplaySetFilters, + window: Option, paging: &LeaderboardPaging, ) -> QueryBuilder<'args, Postgres> { let mut builder = QueryBuilder::::new( @@ -258,6 +500,7 @@ fn uploads_rows_query<'args>( WHERE r.uploaded_by_user_id IS NOT NULL", ); append_replay_set_filters(&mut builder, filters, "r"); + push_live_window_filter(&mut builder, window, filters, "r"); builder.push( " GROUP BY r.uploaded_by_user_id, u.display_name \ ORDER BY upload_count DESC, u.display_name ASC NULLS LAST, r.uploaded_by_user_id \ @@ -272,24 +515,34 @@ fn uploads_rows_query<'args>( async fn load_appearances_total( pool: &sqlx::PgPool, filters: &ReplaySetFilters, + window: Option, + cached_scope: Option<&CachedLeaderboardScope>, ) -> Result { - let total: i64 = appearances_total_query(filters) - .build() - .fetch_one(pool) - .await? - .try_get("total")?; + let total: i64 = match cached_scope { + Some(scope) => cached_appearances_total_query(scope), + None => appearances_total_query(filters, window), + } + .build() + .fetch_one(pool) + .await? + .try_get("total")?; Ok(total.max(0) as u64) } async fn load_appearances_rows( pool: &sqlx::PgPool, filters: &ReplaySetFilters, + window: Option, + cached_scope: Option<&CachedLeaderboardScope>, paging: &LeaderboardPaging, ) -> Result, sqlx::Error> { - let rows = appearances_rank_query(filters, paging) - .build() - .fetch_all(pool) - .await?; + let rows = match cached_scope { + Some(scope) => cached_appearances_rank_query(scope, paging), + None => appearances_rank_query(filters, window, paging), + } + .build() + .fetch_all(pool) + .await?; let mut entries = rows .into_iter() @@ -317,7 +570,7 @@ async fn load_appearances_rows( .iter() .map(|entry| (entry.platform.clone(), entry.platform_player_id.clone())) .collect(); - let profiles = load_player_profiles(pool, &pairs, filters).await?; + let profiles = load_player_profiles(pool, &pairs, filters, window).await?; for entry in &mut entries { if let Some(profile) = profiles.get(&(entry.platform.clone(), entry.platform_player_id.clone())) @@ -350,6 +603,7 @@ async fn load_player_profiles( pool: &sqlx::PgPool, pairs: &[PlayerKey], filters: &ReplaySetFilters, + window: Option, ) -> Result, sqlx::Error> { if pairs.is_empty() { return Ok(std::collections::HashMap::new()); @@ -369,7 +623,7 @@ async fn load_player_profiles( builder.push(" GROUP BY rp.platform, rp.platform_player_id"); let rows = builder.build().fetch_all(pool).await?; - let estimated_ranks = load_estimated_player_ranks(pool, pairs, filters).await?; + let estimated_ranks = load_estimated_player_ranks(pool, pairs, filters, window).await?; let mut profiles = HashMap::with_capacity(rows.len()); for row in rows { let platform: String = row.try_get("platform")?; @@ -400,6 +654,7 @@ async fn load_estimated_player_ranks( pool: &sqlx::PgPool, pairs: &[PlayerKey], filters: &ReplaySetFilters, + window: Option, ) -> Result, sqlx::Error> { let playlist_ids = rank_playlist_ids_for_filters(filters); if playlist_ids.len() != 1 { @@ -432,6 +687,7 @@ async fn load_estimated_player_ranks( ); builder.push_bind(playlist_ids[0]); append_replay_set_filters(&mut builder, filters, "r"); + push_live_window_filter(&mut builder, window, filters, "r"); builder.push( " ORDER BY s.platform_player_id, \ COALESCE(r.replay_date, r.created_at) DESC NULLS LAST, s.updated_at DESC", @@ -505,8 +761,9 @@ fn ranked_playlist_id_for_team_size(team_size: i32) -> Option { fn append_appearances_from_where<'args>( builder: &mut QueryBuilder<'args, Postgres>, filters: &'args ReplaySetFilters, + window: Option, ) { - if filters.is_empty() { + if filters.is_empty() && window.is_none() { builder.push( " FROM replay_players rp \ WHERE rp.platform IS NOT NULL AND btrim(rp.platform) <> '' \ @@ -523,10 +780,12 @@ fn append_appearances_from_where<'args>( ); push_aggregate_excluded_player_filter(builder, "rp.platform", "rp.platform_player_id"); append_replay_set_filters(builder, filters, "r"); + push_live_window_filter(builder, window, filters, "r"); } fn appearances_rank_query<'args>( filters: &'args ReplaySetFilters, + window: Option, paging: &LeaderboardPaging, ) -> QueryBuilder<'args, Postgres> { // Deliberately lean: only the columns the existing @@ -538,7 +797,7 @@ fn appearances_rank_query<'args>( "SELECT rp.platform AS platform, rp.platform_player_id AS platform_player_id, \ COUNT(DISTINCT rp.replay_id) AS appearance_count", ); - append_appearances_from_where(&mut builder, filters); + append_appearances_from_where(&mut builder, filters, window); builder.push( " GROUP BY rp.platform, rp.platform_player_id \ ORDER BY appearance_count DESC, rp.platform, rp.platform_player_id \ @@ -550,13 +809,43 @@ fn appearances_rank_query<'args>( builder } -fn appearances_total_query(filters: &ReplaySetFilters) -> QueryBuilder<'_, Postgres> { +fn appearances_total_query( + filters: &ReplaySetFilters, + window: Option, +) -> QueryBuilder<'_, Postgres> { let mut builder = QueryBuilder::::new("SELECT COUNT(*) AS total FROM (SELECT 1"); - append_appearances_from_where(&mut builder, filters); + append_appearances_from_where(&mut builder, filters, window); builder.push(" GROUP BY rp.platform, rp.platform_player_id) ranked_players"); builder } +fn cached_appearances_rank_query<'args>( + scope: &'args CachedLeaderboardScope, + paging: &LeaderboardPaging, +) -> QueryBuilder<'args, Postgres> { + let mut builder = QueryBuilder::::new( + "SELECT cached.platform, cached.platform_player_id, \ + cached.replay_count AS appearance_count \ + FROM leaderboard_player_window_totals cached", + ); + push_cached_scope_filter(&mut builder, scope, "cached"); + builder.push( + " ORDER BY cached.replay_count DESC, cached.platform, cached.platform_player_id LIMIT ", + ); + builder.push_bind(i64::from(paging.count)); + builder.push(" OFFSET "); + builder.push_bind(i64::from(paging.offset)); + builder +} + +fn cached_appearances_total_query(scope: &CachedLeaderboardScope) -> QueryBuilder<'_, Postgres> { + let mut builder = QueryBuilder::::new( + "SELECT COUNT(*) AS total FROM leaderboard_player_window_totals cached", + ); + push_cached_scope_filter(&mut builder, scope, "cached"); + builder +} + // --------------------------------------------------------------------------- // Event leaderboard: rank players by an arbitrary event type, per unit time, // under arbitrary replay filters. @@ -648,6 +937,7 @@ pub struct EventLeaderboardRowResponse { #[derive(Debug, Clone)] struct EventLeaderboardFilters { replay: ReplaySetFilters, + window: Option, stat_terms: Vec, sort: EventSort, min_games: i64, @@ -660,6 +950,7 @@ impl EventLeaderboardFilters { ) -> Result<(Self, LeaderboardPaging), ApiError> { let params = QueryParams::from_raw(raw_query); let paging = LeaderboardPaging::from_params(¶ms)?; + let window = LeaderboardWindow::from_params(¶ms)?; let replay = ReplaySetFilters::from_input( ReplaySetFilterInput::from_query_params(¶ms)?, auth_user_id, @@ -680,6 +971,7 @@ impl EventLeaderboardFilters { Ok(( Self { replay, + window, stat_terms, sort, min_games, @@ -707,6 +999,14 @@ impl EventLeaderboardFilters { _ => EventCountSource::AnySubject, } } + + fn qualifying_min_games(&self) -> i64 { + if self.sort == EventSort::PerMinute { + self.min_games + } else { + 1 + } + } } #[utoipa::path( @@ -714,6 +1014,7 @@ impl EventLeaderboardFilters { path = "/api/v1/leaderboards/event", tag = "leaderboards", params( + ("window" = Option, Query, description = "Standard cached window: daily, trailing-7d, or season"), ("event-type" = Option>, Query, description = "Event-type filter (alias stat-term); fuzzy-matches event_types key/display/category. Empty = all user-facing events"), ("sort" = Option, Query, description = "Ranking metric: total (default), per-game, or per-minute"), ("min-games" = Option, Query, description = "Minimum replay appearances to qualify (default 1)"), @@ -743,14 +1044,32 @@ pub async fn get_event_leaderboard( auth_user.as_ref().map(|u| u.id), )?; - let (total, rows, matched) = tokio::try_join!( - load_event_total(db, &filters), - load_event_rows(db, &filters, &paging), - async { - resolve_matched_event_types(db, &filters.stat_terms) - .await - .map_err(ApiError::internal) - }, + let matched = resolve_matched_event_types(db, &filters.stat_terms) + .await + .map_err(ApiError::internal)?; + let mut cached_scope = CachedLeaderboardScope::from_filters(filters.window, &filters.replay); + if let Some(scope) = &cached_scope { + if !cache_scope_available(db, scope) + .await + .map_err(ApiError::internal)? + { + cached_scope = None; + } + } + let cached_metric_key = (matched.len() == 1).then(|| matched[0].key.as_str()); + let use_cache = cached_scope.is_some() + && cached_metric_key.is_some() + && matches!(filters.sort, EventSort::Total | EventSort::PerMinute); + let cached_scope_ref = if use_cache { + cached_scope.as_ref() + } else { + None + }; + let cached_metric_key = if use_cache { cached_metric_key } else { None }; + + let (total, rows) = tokio::try_join!( + load_event_total(db, &filters, cached_scope_ref, cached_metric_key), + load_event_rows(db, &filters, cached_scope_ref, cached_metric_key, &paging,), )?; let next_offset = paging.next_offset(rows.len(), total); @@ -774,27 +1093,39 @@ pub async fn get_event_leaderboard( async fn load_event_total( pool: &sqlx::PgPool, filters: &EventLeaderboardFilters, + cached_scope: Option<&CachedLeaderboardScope>, + cached_metric_key: Option<&str>, ) -> Result { - let total: i64 = event_total_query(filters) - .build() - .fetch_one(pool) - .await - .map_err(ApiError::internal)? - .try_get("total") - .map_err(ApiError::internal)?; + let total: i64 = match (cached_scope, cached_metric_key) { + (Some(scope), Some(metric_key)) => cached_event_total_query(filters, scope, metric_key), + _ => event_total_query(filters), + } + .build() + .fetch_one(pool) + .await + .map_err(ApiError::internal)? + .try_get("total") + .map_err(ApiError::internal)?; Ok(total.max(0) as u64) } async fn load_event_rows( pool: &sqlx::PgPool, filters: &EventLeaderboardFilters, + cached_scope: Option<&CachedLeaderboardScope>, + cached_metric_key: Option<&str>, paging: &LeaderboardPaging, ) -> Result, ApiError> { - let rows = event_rank_query(filters, paging) - .build() - .fetch_all(pool) - .await - .map_err(ApiError::internal)?; + let rows = match (cached_scope, cached_metric_key) { + (Some(scope), Some(metric_key)) => { + cached_event_rank_query(filters, scope, metric_key, paging) + } + _ => event_rank_query(filters, paging), + } + .build() + .fetch_all(pool) + .await + .map_err(ApiError::internal)?; let mut entries = rows .into_iter() @@ -825,7 +1156,7 @@ async fn load_event_rows( .iter() .map(|entry| (entry.platform.clone(), entry.platform_player_id.clone())) .collect(); - let profiles = load_player_profiles(pool, &pairs, &filters.replay) + let profiles = load_player_profiles(pool, &pairs, &filters.replay, filters.window) .await .map_err(ApiError::internal)?; for entry in &mut entries { @@ -869,6 +1200,7 @@ fn push_event_ctes<'args>( ); push_aggregate_excluded_player_filter(builder, "rp.platform", "rp.platform_player_id"); append_replay_set_filters(builder, &filters.replay, "r"); + push_live_window_filter(builder, filters.window, &filters.replay, "r"); builder.push( " GROUP BY rp.platform, rp.platform_player_id \ HAVING COALESCE(SUM(rp.", @@ -889,6 +1221,7 @@ fn push_event_ctes<'args>( ); push_aggregate_excluded_player_filter(builder, "rp.platform", "rp.platform_player_id"); append_replay_set_filters(builder, &filters.replay, "r"); + push_live_window_filter(builder, filters.window, &filters.replay, "r"); builder.push(" GROUP BY rp.platform, rp.platform_player_id)"); return; } @@ -920,6 +1253,7 @@ fn push_event_ctes<'args>( ); push_aggregate_excluded_player_filter(builder, "rp.platform", "rp.platform_player_id"); append_replay_set_filters(builder, &filters.replay, "r"); + push_live_window_filter(builder, filters.window, &filters.replay, "r"); builder.push( " GROUP BY rp.platform, rp.platform_player_id), \ denominators AS (\ @@ -935,6 +1269,7 @@ fn push_event_ctes<'args>( ); push_aggregate_excluded_player_filter(builder, "rp.platform", "rp.platform_player_id"); append_replay_set_filters(builder, &filters.replay, "r"); + push_live_window_filter(builder, filters.window, &filters.replay, "r"); builder.push(" GROUP BY rp.platform, rp.platform_player_id)"); } @@ -955,7 +1290,7 @@ fn event_rank_query<'args>( JOIN denominators d ON d.platform = e.platform AND d.platform_player_id = e.platform_player_id \ WHERE d.replay_count >= ", ); - builder.push_bind(filters.min_games); + builder.push_bind(filters.qualifying_min_games()); builder.push(" ORDER BY "); builder.push(filters.sort.order_sql()); builder.push(", e.platform, e.platform_player_id LIMIT "); @@ -973,7 +1308,59 @@ fn event_total_query(filters: &EventLeaderboardFilters) -> QueryBuilder<'_, Post JOIN denominators d ON d.platform = e.platform AND d.platform_player_id = e.platform_player_id \ WHERE d.replay_count >= ", ); - builder.push_bind(filters.min_games); + builder.push_bind(filters.qualifying_min_games()); + builder +} + +fn cached_event_rank_query<'args>( + filters: &'args EventLeaderboardFilters, + scope: &'args CachedLeaderboardScope, + metric_key: &'args str, + paging: &LeaderboardPaging, +) -> QueryBuilder<'args, Postgres> { + let mut builder = QueryBuilder::::new( + "SELECT cached.platform, cached.platform_player_id, \ + ROUND(cached.total_value)::bigint AS event_count, \ + cached.replay_count, cached.active_time_seconds, \ + cached.total_value / NULLIF(cached.replay_count, 0) AS count_per_game, \ + cached.value_per_5_minutes / 5.0 AS per_active_minute \ + FROM leaderboard_player_window_metrics cached", + ); + push_cached_scope_filter(&mut builder, scope, "cached"); + builder.push(" AND cached.metric_kind = 'event' AND cached.metric_key = "); + builder.push_bind(metric_key); + if filters.sort == EventSort::PerMinute { + builder.push(" AND cached.replay_count >= "); + builder.push_bind(filters.min_games); + } + match filters.sort { + EventSort::Total => builder.push(" ORDER BY cached.total_value DESC"), + EventSort::PerMinute => builder + .push(" ORDER BY cached.value_per_5_minutes DESC NULLS LAST, cached.total_value DESC"), + EventSort::PerGame => unreachable!("per-game event rankings use the live query"), + }; + builder.push(", cached.platform, cached.platform_player_id LIMIT "); + builder.push_bind(i64::from(paging.count)); + builder.push(" OFFSET "); + builder.push_bind(i64::from(paging.offset)); + builder +} + +fn cached_event_total_query<'args>( + filters: &'args EventLeaderboardFilters, + scope: &'args CachedLeaderboardScope, + metric_key: &'args str, +) -> QueryBuilder<'args, Postgres> { + let mut builder = QueryBuilder::::new( + "SELECT COUNT(*) AS total FROM leaderboard_player_window_metrics cached", + ); + push_cached_scope_filter(&mut builder, scope, "cached"); + builder.push(" AND cached.metric_kind = 'event' AND cached.metric_key = "); + builder.push_bind(metric_key); + if filters.sort == EventSort::PerMinute { + builder.push(" AND cached.replay_count >= "); + builder.push_bind(filters.min_games); + } builder } @@ -1375,6 +1762,7 @@ pub struct StatLeaderboardRowResponse { #[derive(Debug, Clone)] struct StatLeaderboardFilters { replay: ReplaySetFilters, + window: Option, metric: StatLeaderboardMetric, sort: StatLeaderboardSort, min_games: i64, @@ -1387,6 +1775,7 @@ impl StatLeaderboardFilters { ) -> Result<(Self, LeaderboardPaging), ApiError> { let params = QueryParams::from_raw(raw_query); let paging = LeaderboardPaging::from_params(¶ms)?; + let window = LeaderboardWindow::from_params(¶ms)?; let replay = ReplaySetFilters::from_input( ReplaySetFilterInput::from_query_params(¶ms)?, auth_user_id, @@ -1408,6 +1797,7 @@ impl StatLeaderboardFilters { Ok(( Self { replay, + window, metric, sort, min_games, @@ -1415,6 +1805,14 @@ impl StatLeaderboardFilters { paging, )) } + + fn qualifying_min_games(&self) -> i64 { + if self.sort == StatLeaderboardSort::PerMinute { + self.min_games + } else { + 1 + } + } } #[utoipa::path( @@ -1422,6 +1820,7 @@ impl StatLeaderboardFilters { path = "/api/v1/leaderboards/stat", tag = "leaderboards", params( + ("window" = Option, Query, description = "Standard cached window: daily, trailing-7d, or season"), ("stat" = Option, Query, description = "Materialized stat metric: ball-opponent-half (default), possession-time, ball-advance, touches-per-possession, avg-possession-duration, high-aerial-touch-count, control-touch-count, big-boost-pad-count, small-boost-pad-count, big-boost-amount, or small-boost-amount"), ("sort" = Option, Query, description = "Ranking metric: total (default), per-game, per-minute, share, or average"), ("min-games" = Option, Query, description = "Minimum replay appearances to qualify (default 1)"), @@ -1448,10 +1847,29 @@ pub async fn get_stat_leaderboard( let db = require_db(&state)?; let (filters, paging) = StatLeaderboardFilters::from_query(raw_query.as_deref(), auth_user.as_ref().map(|u| u.id))?; + let mut cached_scope = CachedLeaderboardScope::from_filters(filters.window, &filters.replay); + if let Some(scope) = &cached_scope { + if !cache_scope_available(db, scope) + .await + .map_err(ApiError::internal)? + { + cached_scope = None; + } + } + let use_cache = cached_scope.is_some() + && matches!( + filters.sort, + StatLeaderboardSort::Total | StatLeaderboardSort::PerMinute + ); + let cached_scope = if use_cache { + cached_scope.as_ref() + } else { + None + }; let (total, rows) = tokio::try_join!( - load_stat_total(db, &filters), - load_stat_rows(db, &filters, &paging), + load_stat_total(db, &filters, cached_scope), + load_stat_rows(db, &filters, cached_scope, &paging), )?; let next_offset = paging.next_offset(rows.len(), total); @@ -1474,27 +1892,35 @@ pub async fn get_stat_leaderboard( async fn load_stat_total( pool: &sqlx::PgPool, filters: &StatLeaderboardFilters, + cached_scope: Option<&CachedLeaderboardScope>, ) -> Result { - let total: i64 = stat_total_query(filters) - .build() - .fetch_one(pool) - .await - .map_err(ApiError::internal)? - .try_get("total") - .map_err(ApiError::internal)?; + let total: i64 = match cached_scope { + Some(scope) => cached_stat_total_query(filters, scope), + None => stat_total_query(filters), + } + .build() + .fetch_one(pool) + .await + .map_err(ApiError::internal)? + .try_get("total") + .map_err(ApiError::internal)?; Ok(total.max(0) as u64) } async fn load_stat_rows( pool: &sqlx::PgPool, filters: &StatLeaderboardFilters, + cached_scope: Option<&CachedLeaderboardScope>, paging: &LeaderboardPaging, ) -> Result, ApiError> { - let rows = stat_rank_query(filters, paging) - .build() - .fetch_all(pool) - .await - .map_err(ApiError::internal)?; + let rows = match cached_scope { + Some(scope) => cached_stat_rank_query(filters, scope, paging), + None => stat_rank_query(filters, paging), + } + .build() + .fetch_all(pool) + .await + .map_err(ApiError::internal)?; let mut entries = rows .into_iter() @@ -1528,7 +1954,7 @@ async fn load_stat_rows( .iter() .map(|entry| (entry.platform.clone(), entry.platform_player_id.clone())) .collect(); - let profiles = load_player_profiles(pool, &pairs, &filters.replay) + let profiles = load_player_profiles(pool, &pairs, &filters.replay, filters.window) .await .map_err(ApiError::internal)?; for entry in &mut entries { @@ -1582,6 +2008,7 @@ fn push_stat_fact_cte<'args>( "possession.platform_player_id", ); append_replay_set_filters(builder, &filters.replay, "r"); + push_live_window_filter(builder, filters.window, &filters.replay, "r"); builder.push( " GROUP BY possession.platform, possession.platform_player_id \ HAVING SUM(possession.possession_count) > 0)", @@ -1615,6 +2042,7 @@ fn push_stat_fact_cte<'args>( "boost.platform_player_id", ); append_replay_set_filters(builder, &filters.replay, "r"); + push_live_window_filter(builder, filters.window, &filters.replay, "r"); builder.push( " GROUP BY boost.platform, boost.platform_player_id \ HAVING COALESCE(SUM(", @@ -1639,6 +2067,7 @@ fn push_stat_fact_cte<'args>( builder.push_bind(definition.fact_key()); push_aggregate_excluded_player_filter(builder, "fact.platform", "fact.platform_player_id"); append_replay_set_filters(builder, &filters.replay, "r"); + push_live_window_filter(builder, filters.window, &filters.replay, "r"); builder.push( " GROUP BY fact.platform, fact.platform_player_id \ HAVING COALESCE(SUM(fact.value), 0.0) > 0)", @@ -1675,7 +2104,7 @@ fn stat_rank_query<'args>( " FROM metric_values m \ WHERE m.replay_count >= ", ); - builder.push_bind(filters.min_games); + builder.push_bind(filters.qualifying_min_games()); builder.push(" ORDER BY "); builder.push(filters.sort.order_sql()); builder.push(", m.platform, m.platform_player_id LIMIT "); @@ -1692,6 +2121,57 @@ fn stat_total_query(filters: &StatLeaderboardFilters) -> QueryBuilder<'_, Postgr " SELECT COUNT(*) AS total FROM metric_values m \ WHERE m.replay_count >= ", ); - builder.push_bind(filters.min_games); + builder.push_bind(filters.qualifying_min_games()); + builder +} + +fn cached_stat_rank_query<'args>( + filters: &'args StatLeaderboardFilters, + scope: &'args CachedLeaderboardScope, + paging: &LeaderboardPaging, +) -> QueryBuilder<'args, Postgres> { + let mut builder = QueryBuilder::::new( + "SELECT cached.platform, cached.platform_player_id, \ + cached.total_value AS value, cached.replay_count, \ + cached.active_time_seconds, cached.sample_count, \ + cached.total_value / NULLIF(cached.replay_count, 0) AS value_per_game, \ + cached.value_per_5_minutes / 5.0 AS value_per_active_minute, \ + NULL::float8 AS share_of_active_time \ + FROM leaderboard_player_window_metrics cached", + ); + push_cached_scope_filter(&mut builder, scope, "cached"); + builder.push(" AND cached.metric_kind = 'stat' AND cached.metric_key = "); + builder.push_bind(filters.metric.definition().key); + if filters.sort == StatLeaderboardSort::PerMinute { + builder.push(" AND cached.replay_count >= "); + builder.push_bind(filters.min_games); + } + match filters.sort { + StatLeaderboardSort::Total => builder.push(" ORDER BY cached.total_value DESC"), + StatLeaderboardSort::PerMinute => builder + .push(" ORDER BY cached.value_per_5_minutes DESC NULLS LAST, cached.total_value DESC"), + _ => unreachable!("unsupported cached stat sort uses the live query"), + }; + builder.push(", cached.platform, cached.platform_player_id LIMIT "); + builder.push_bind(i64::from(paging.count)); + builder.push(" OFFSET "); + builder.push_bind(i64::from(paging.offset)); + builder +} + +fn cached_stat_total_query<'args>( + filters: &'args StatLeaderboardFilters, + scope: &'args CachedLeaderboardScope, +) -> QueryBuilder<'args, Postgres> { + let mut builder = QueryBuilder::::new( + "SELECT COUNT(*) AS total FROM leaderboard_player_window_metrics cached", + ); + push_cached_scope_filter(&mut builder, scope, "cached"); + builder.push(" AND cached.metric_kind = 'stat' AND cached.metric_key = "); + builder.push_bind(filters.metric.definition().key); + if filters.sort == StatLeaderboardSort::PerMinute { + builder.push(" AND cached.replay_count >= "); + builder.push_bind(filters.min_games); + } builder } diff --git a/crates/rocket-sense-server/src/api/leaderboards_tests.rs b/crates/rocket-sense-server/src/api/leaderboards_tests.rs index ca8fa7ce..ce7773c5 100644 --- a/crates/rocket-sense-server/src/api/leaderboards_tests.rs +++ b/crates/rocket-sense-server/src/api/leaderboards_tests.rs @@ -53,7 +53,7 @@ fn uploads_rows_query_groups_and_paginates() { count: 25, offset: 50, }; - let sql = uploads_rows_query(&filters, &paging).into_sql(); + let sql = uploads_rows_query(&filters, None, &paging).into_sql(); assert!(sql.contains("FROM replays r JOIN users u ON u.id = r.uploaded_by_user_id")); assert!(sql.contains("r.uploaded_by_user_id IS NOT NULL")); @@ -69,7 +69,7 @@ fn uploads_rows_query_groups_and_paginates() { #[test] fn uploads_total_query_counts_distinct_uploaders() { let filters = filters_from_query(""); - let sql = uploads_total_query(&filters).into_sql(); + let sql = uploads_total_query(&filters, None).into_sql(); assert!(sql.contains("COUNT(DISTINCT r.uploaded_by_user_id)")); assert!(sql.contains("r.uploaded_by_user_id IS NOT NULL")); assert!(sql.contains("NOT r.exclude_from_aggregates")); @@ -82,7 +82,7 @@ fn appearances_rank_query_counts_distinct_replays() { count: 50, offset: 0, }; - let sql = appearances_rank_query(&filters, &paging).into_sql(); + let sql = appearances_rank_query(&filters, None, &paging).into_sql(); assert!(sql.contains("COUNT(DISTINCT rp.replay_id) AS appearance_count")); assert!(sql.contains("FROM replay_players rp JOIN replays r ON r.id = rp.replay_id")); @@ -101,7 +101,7 @@ fn appearances_rank_query_joins_replays_for_default_incomplete_game_exclusion() count: 50, offset: 0, }; - let sql = appearances_rank_query(&filters, &paging).into_sql(); + let sql = appearances_rank_query(&filters, None, &paging).into_sql(); assert!(sql.contains("FROM replay_players rp JOIN replays r ON r.id = rp.replay_id")); assert!(sql.contains("NOT r.exclude_from_aggregates")); @@ -130,7 +130,7 @@ fn appearances_rank_query_omits_replays_join_when_incomplete_games_are_explicitl #[test] fn appearances_total_query_wraps_grouped_subquery() { let filters = filters_from_query(""); - let sql = appearances_total_query(&filters).into_sql(); + let sql = appearances_total_query(&filters, None).into_sql(); assert!(sql.contains("SELECT COUNT(*) AS total FROM (SELECT 1")); assert!(sql.contains("GROUP BY rp.platform, rp.platform_player_id) ranked_players")); } @@ -144,7 +144,7 @@ fn appearances_rank_query_rejects_invalid_game_type() { #[test] fn leaderboard_filters_parse_exact_season_and_replay_date_range() { - let (filters, _) = parse_filters( + let (filters, _, _) = parse_filters( Some( "season=f18&replay-date-after=2026-01-01T00%3A00%3A00Z&replay-date-before=2026-01-31T23%3A59%3A59.999Z", ), @@ -157,6 +157,42 @@ fn leaderboard_filters_parse_exact_season_and_replay_date_range() { assert!(filters.replay_date_before.is_some()); } +#[test] +fn leaderboard_window_parses_standard_windows() { + for (raw, expected) in [ + ("window=daily", LeaderboardWindow::Daily), + ("window=trailing-7d", LeaderboardWindow::TrailingSevenDays), + ("window=season", LeaderboardWindow::Season), + ] { + let params = QueryParams::from_raw(Some(raw)); + assert_eq!( + LeaderboardWindow::from_params(¶ms).unwrap(), + Some(expected) + ); + } + + let params = QueryParams::from_raw(Some("window=forever")); + assert!(LeaderboardWindow::from_params(¶ms).is_err()); +} + +#[test] +fn cached_scope_accepts_only_single_standard_dimensions() { + let filters = filters_from_query("game-type=ranked&team-size=2&playlist=ranked-doubles"); + let scope = + CachedLeaderboardScope::from_filters(Some(LeaderboardWindow::TrailingSevenDays), &filters) + .expect("standard scope should use the cache"); + assert_eq!(scope.game_type, "ranked"); + assert_eq!(scope.team_size, 2); + assert_eq!(scope.playlist, "ranked-doubles"); + + let filters = filters_from_query("game-type=ranked&game-type=casual"); + assert!(CachedLeaderboardScope::from_filters( + Some(LeaderboardWindow::TrailingSevenDays), + &filters + ) + .is_none()); +} + #[test] fn leaderboard_rank_playlist_ids_use_ranked_playlist_filter() { let filters = filters_from_query("playlist=ranked-doubles"); @@ -324,6 +360,30 @@ fn event_total_query_counts_qualifying_players() { assert!(sql.contains("d.replay_count >= ")); } +#[test] +fn cached_event_rate_query_is_an_ordered_player_window_read() { + let (filters, paging) = event_filters( + "window=trailing-7d&event-type=goal&sort=per-minute&min-games=10&game-type=ranked&team-size=2", + ); + let scope = CachedLeaderboardScope::from_filters(filters.window, &filters.replay).unwrap(); + let sql = cached_event_rank_query(&filters, &scope, "goal", &paging).into_sql(); + + assert!(sql.contains("FROM leaderboard_player_window_metrics cached")); + assert!(sql.contains("cache_window.window_kind")); + assert!(sql.contains("cached.metric_kind = 'event'")); + assert!(sql.contains("cached.replay_count >=")); + assert!(sql.contains("ORDER BY cached.value_per_5_minutes DESC NULLS LAST")); + assert!(!sql.contains("GROUP BY")); +} + +#[test] +fn event_min_games_only_changes_per_five_minute_eligibility() { + let (total, _) = event_filters("sort=total&min-games=50"); + assert_eq!(total.qualifying_min_games(), 1); + let (rate, _) = event_filters("sort=per-minute&min-games=50"); + assert_eq!(rate.qualifying_min_games(), 50); +} + fn stat_filters(raw_query: &str) -> (StatLeaderboardFilters, LeaderboardPaging) { StatLeaderboardFilters::from_query(Some(raw_query), None).expect("filters should parse") } @@ -518,3 +578,26 @@ fn stat_rank_query_reads_average_possession_duration() { assert!(sql.contains("SUM(possession.duration_seconds)::float8")); assert!(sql.contains("ORDER BY value DESC")); } + +#[test] +fn cached_stat_rate_query_is_an_ordered_player_window_read() { + let (filters, paging) = + stat_filters("window=season&season=f23&stat=possession-time&sort=per-minute&min-games=25"); + let scope = CachedLeaderboardScope::from_filters(filters.window, &filters.replay).unwrap(); + let sql = cached_stat_rank_query(&filters, &scope, &paging).into_sql(); + + assert!(sql.contains("FROM leaderboard_player_window_metrics cached")); + assert!(sql.contains("cache_window.season")); + assert!(sql.contains("cached.metric_kind = 'stat'")); + assert!(sql.contains("cached.replay_count >=")); + assert!(sql.contains("ORDER BY cached.value_per_5_minutes DESC NULLS LAST")); + assert!(!sql.contains("GROUP BY")); +} + +#[test] +fn stat_min_games_only_changes_per_five_minute_eligibility() { + let (total, _) = stat_filters("sort=total&min-games=50"); + assert_eq!(total.qualifying_min_games(), 1); + let (rate, _) = stat_filters("sort=per-minute&min-games=50"); + assert_eq!(rate.qualifying_min_games(), 50); +} diff --git a/crates/rocket-sense-server/src/app.rs b/crates/rocket-sense-server/src/app.rs index 175922f5..1ee21824 100644 --- a/crates/rocket-sense-server/src/app.rs +++ b/crates/rocket-sense-server/src/app.rs @@ -1,5 +1,5 @@ use crate::{ - api, processing, + api, leaderboard_cache, processing, rank_benchmark::{BenchmarkWindow, CalcStyle}, settings, telemetry, }; @@ -93,6 +93,12 @@ pub async fn build(settings: settings::Settings) -> Result { state.storage.clone(), settings.background_processing_concurrency, ); + if settings.leaderboard_cache_enabled { + leaderboard_cache::start_refresh_job( + pool.clone(), + settings.leaderboard_cache_refresh_interval, + ); + } if let Some(api_key) = &state.ballchasing_api_key { crate::ballchasing_sync::start_ballchasing_group_sync_workers( pool.clone(), @@ -148,6 +154,12 @@ pub async fn run_worker(settings: settings::Settings) -> Result<()> { storage.clone(), settings.background_processing_concurrency, ); + if settings.leaderboard_cache_enabled { + leaderboard_cache::start_refresh_job( + pool.clone(), + settings.leaderboard_cache_refresh_interval, + ); + } if let Some(api_key) = &settings.ballchasing_api_key { crate::ballchasing_sync::start_ballchasing_group_sync_workers( pool.clone(), diff --git a/crates/rocket-sense-server/src/leaderboard_cache.rs b/crates/rocket-sense-server/src/leaderboard_cache.rs new file mode 100644 index 00000000..f0545162 --- /dev/null +++ b/crates/rocket-sense-server/src/leaderboard_cache.rs @@ -0,0 +1,567 @@ +//! Disposable player/window aggregates for fast leaderboard reads. +//! +//! These rows are emphatically not sources of truth. Canonical replay metadata +//! and per-replay/player facts own the data; this module is expected to throw +//! away and recompute the cache often. Keeping the rebuild idempotent and +//! boring is more important than preserving cache rows across refreshes. + +use anyhow::{Context, Result}; +use sqlx::{PgPool, Row}; +use std::time::Duration; + +#[cfg(test)] +#[path = "leaderboard_cache_tests.rs"] +mod tests; + +const REFRESH_INITIAL_DELAY: Duration = Duration::from_secs(15); +const ADVISORY_LOCK_KEY: i64 = 0x5253_4c42; // "RSLB" + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct LeaderboardCacheRefreshSummary { + pub windows: u64, + pub player_rows: u64, + pub metric_rows: u64, +} + +/// Start the recurring full rebuild on the process that owns background work. +/// +/// A full rebuild is intentional: this cache must stay disposable, and a replay +/// reprocess or identity-exclusion change should heal without bespoke repair +/// logic. The transaction keeps readers on the previous generation until the +/// replacement is complete. +pub fn start_refresh_job(pool: PgPool, refresh_interval: Duration) { + tokio::spawn(async move { + tokio::time::sleep(REFRESH_INITIAL_DELAY).await; + loop { + match refresh(&pool).await { + Ok(Some(summary)) => tracing::info!( + windows = summary.windows, + player_rows = summary.player_rows, + metric_rows = summary.metric_rows, + "leaderboard player/window cache refresh complete" + ), + Ok(None) => tracing::debug!( + "leaderboard player/window cache refresh skipped because another refresh is running" + ), + Err(error) => tracing::warn!( + error = %format!("{error:#}"), + "leaderboard player/window cache refresh failed" + ), + } + tokio::time::sleep(refresh_interval).await; + } + }); +} + +/// Rebuild every cached window from authoritative replay/fact data. +/// +/// Returns `None` when another process holds the refresh lock. Cache contents +/// are replaced transactionally; no incremental state is required for repair. +pub async fn refresh(pool: &PgPool) -> Result> { + let mut tx = pool + .begin() + .await + .context("starting leaderboard cache refresh transaction")?; + let locked: bool = sqlx::query_scalar("SELECT pg_try_advisory_xact_lock($1)") + .bind(ADVISORY_LOCK_KEY) + .fetch_one(&mut *tx) + .await + .context("acquiring leaderboard cache refresh lock")?; + if !locked { + return Ok(None); + } + + // One canonical appearance can feed three disposable windows: current UTC + // day, trailing 168 hours, and its replay season. Scope values are normalized + // before CUBE; `*` / 0 are reserved for the generated all-scope rows. + sqlx::query( + r#" + CREATE TEMP TABLE leaderboard_refresh_appearances ON COMMIT DROP AS + WITH replay_scope AS ( + SELECT + r.id AS replay_id, + r.canonical_analysis_run_id AS analysis_run_id, + COALESCE(NULLIF(lower(btrim(r.replay_game_type)), ''), '') AS game_type, + COALESCE(NULLIF(btrim(r.playlist), ''), '') AS playlist, + NULLIF(lower(btrim(r.season)), '') AS season, + COALESCE(r.replay_date, r.created_at) AS replay_time, + COALESCE(team_size.value, -1)::smallint AS team_size + FROM replays r + LEFT JOIN LATERAL ( + SELECT MAX(team_count)::integer AS value + FROM ( + SELECT COUNT(*) AS team_count + FROM replay_players size_player + WHERE size_player.replay_id = r.id + AND size_player.team IS NOT NULL + AND ( + size_player.active_time_seconds IS NULL + OR size_player.active_time_seconds > 0 + ) + GROUP BY size_player.team + ) team_counts + ) team_size ON true + WHERE r.canonical_analysis_run_id IS NOT NULL + AND COALESCE(r.replay_date, r.created_at) <= now() + ), + canonical_appearances AS ( + SELECT DISTINCT ON ( + scope.analysis_run_id, + rp.platform, + rp.platform_player_id + ) + scope.*, + rp.platform, + rp.platform_player_id, + GREATEST(COALESCE(rp.active_time_seconds, 0.0), 0.0) AS active_time_seconds + FROM replay_scope scope + JOIN replay_players rp ON rp.replay_id = scope.replay_id + WHERE rp.platform IS NOT NULL + AND btrim(rp.platform) <> '' + AND rp.platform_player_id IS NOT NULL + AND btrim(rp.platform_player_id) <> '' + AND NOT EXISTS ( + SELECT 1 + FROM player_identity_tags excluded + WHERE excluded.platform = rp.platform + AND excluded.platform_player_id = rp.platform_player_id + AND excluded.exclude_from_aggregates + ) + ORDER BY + scope.analysis_run_id, + rp.platform, + rp.platform_player_id, + rp.active_time_seconds DESC NULLS LAST + ) + SELECT + appearance.analysis_run_id, + appearance.replay_id, + appearance.platform, + appearance.platform_player_id, + appearance.active_time_seconds, + appearance.game_type, + appearance.team_size, + appearance.playlist, + appearance.replay_time, + win.window_key, + win.window_kind, + win.window_season, + win.window_start, + win.window_end + FROM canonical_appearances appearance + CROSS JOIN LATERAL ( + SELECT + 'daily'::text AS window_key, + 'daily'::text AS window_kind, + NULL::text AS window_season, + date_trunc('day', now() AT TIME ZONE 'UTC') AT TIME ZONE 'UTC' AS window_start, + now() AS window_end + WHERE appearance.replay_time >= + date_trunc('day', now() AT TIME ZONE 'UTC') AT TIME ZONE 'UTC' + + UNION ALL + + SELECT + 'trailing-7d', + 'trailing-7d', + NULL::text, + now() - interval '7 days', + now() + WHERE appearance.replay_time >= now() - interval '7 days' + + UNION ALL + + SELECT + 'season:' || appearance.season, + 'season', + appearance.season, + NULL::timestamptz, + NULL::timestamptz + WHERE appearance.season IS NOT NULL + ) win + "#, + ) + .execute(&mut *tx) + .await + .context("building leaderboard refresh appearances")?; + + sqlx::query( + r#" + CREATE INDEX leaderboard_refresh_appearances_join_idx + ON leaderboard_refresh_appearances ( + analysis_run_id, + replay_id, + platform, + platform_player_id + ) + "#, + ) + .execute(&mut *tx) + .await + .context("indexing leaderboard refresh appearances")?; + + // Contributions retain the per-replay grain. The next step aggregates them + // into every standard scope combination. Scoreboard core events preserve the + // existing leaderboard semantics; role-sensitive events use their actor role + // rather than counting both participants from the generic event-count fact. + sqlx::query( + r#" + CREATE TEMP TABLE leaderboard_refresh_metric_contributions ON COMMIT DROP AS + SELECT + fact.analysis_run_id, + fact.replay_id, + fact.platform, + fact.platform_player_id, + 'stat'::text AS metric_kind, + fact.stat_key AS metric_key, + SUM(fact.value)::float8 AS total_value, + NULL::bigint AS sample_count + FROM player_replay_stat_facts fact + JOIN replays r + ON r.id = fact.replay_id + AND r.canonical_analysis_run_id = fact.analysis_run_id + WHERE fact.stat_key IN ( + 'ball-opponent-half', + 'possession-time', + 'ball-advance', + 'high-aerial-touch-count', + 'control-touch-count' + ) + GROUP BY + fact.analysis_run_id, + fact.replay_id, + fact.platform, + fact.platform_player_id, + fact.stat_key + + UNION ALL + + SELECT + possession.analysis_run_id, + possession.replay_id, + possession.platform, + possession.platform_player_id, + 'stat', + metric.metric_key, + metric.total_value, + possession.possession_count + FROM player_replay_possession possession + JOIN replays r + ON r.id = possession.replay_id + AND r.canonical_analysis_run_id = possession.analysis_run_id + CROSS JOIN LATERAL ( + VALUES + ('touches-per-possession'::text, possession.touch_count::float8), + ('avg-possession-duration'::text, possession.duration_seconds::float8) + ) metric(metric_key, total_value) + WHERE possession.possession_count > 0 + + UNION ALL + + SELECT + boost.analysis_run_id, + boost.replay_id, + boost.platform, + boost.platform_player_id, + 'stat', + metric.metric_key, + metric.total_value, + NULL::bigint + FROM player_replay_boost boost + JOIN replays r + ON r.id = boost.replay_id + AND r.canonical_analysis_run_id = boost.analysis_run_id + CROSS JOIN LATERAL ( + VALUES + ('big-boost-pad-count'::text, boost.big_pads::float8), + ('small-boost-pad-count'::text, boost.small_pads::float8), + ('big-boost-amount'::text, boost.boost_collected_big::float8), + ('small-boost-amount'::text, boost.boost_collected_small::float8) + ) metric(metric_key, total_value) + WHERE metric.total_value > 0 + + UNION ALL + + SELECT + r.canonical_analysis_run_id, + rp.replay_id, + rp.platform, + rp.platform_player_id, + 'event', + metric.metric_key, + metric.total_value, + NULL::bigint + FROM replay_players rp + JOIN replays r ON r.id = rp.replay_id + CROSS JOIN LATERAL ( + VALUES + ('goal'::text, COALESCE(rp.goals, 0)::float8), + ('assist'::text, COALESCE(rp.assists, 0)::float8), + ('save'::text, COALESCE(rp.saves, 0)::float8), + ('shot'::text, COALESCE(rp.shots, 0)::float8) + ) metric(metric_key, total_value) + WHERE r.canonical_analysis_run_id IS NOT NULL + AND rp.platform IS NOT NULL + AND btrim(rp.platform) <> '' + AND rp.platform_player_id IS NOT NULL + AND btrim(rp.platform_player_id) <> '' + AND metric.total_value > 0 + + UNION ALL + + SELECT + counts.analysis_run_id, + counts.replay_id, + counts.platform, + counts.platform_player_id, + 'event', + event_type.key, + counts.event_count::float8, + NULL::bigint + FROM player_replay_event_counts counts + JOIN replays r + ON r.id = counts.replay_id + AND r.canonical_analysis_run_id = counts.analysis_run_id + JOIN event_types event_type ON event_type.id = counts.event_type_id + WHERE event_type.key NOT IN ( + 'goal', 'assist', 'save', 'shot', 'bump', 'demolition', 'pass' + ) + + UNION ALL + + SELECT + event.analysis_run_id, + event.replay_id, + rp.platform, + rp.platform_player_id, + 'event', + event_type.key, + COUNT(DISTINCT event.id)::float8, + NULL::bigint + FROM play_events event + JOIN event_types event_type ON event_type.id = event.event_type_id + JOIN play_event_subjects subject ON subject.event_id = event.id + JOIN replay_players rp ON rp.id = subject.replay_player_id + JOIN replays r + ON r.id = event.replay_id + AND r.canonical_analysis_run_id = event.analysis_run_id + WHERE (event_type.key = 'bump' AND subject.role = 'initiator') + OR (event_type.key = 'demolition' AND subject.role = 'attacker') + OR (event_type.key = 'pass' AND subject.role = 'passer') + GROUP BY + event.analysis_run_id, + event.replay_id, + rp.platform, + rp.platform_player_id, + event_type.key + "#, + ) + .execute(&mut *tx) + .await + .context("building leaderboard metric contributions")?; + + sqlx::query( + r#" + CREATE TEMP TABLE leaderboard_refresh_metric_sums ON COMMIT DROP AS + SELECT + appearance.window_key, + CASE WHEN GROUPING(appearance.game_type) = 1 + THEN '*' ELSE appearance.game_type END AS scope_game_type, + CASE WHEN GROUPING(appearance.team_size) = 1 + THEN 0 ELSE appearance.team_size END AS scope_team_size, + CASE WHEN GROUPING(appearance.playlist) = 1 + THEN '*' ELSE appearance.playlist END AS scope_playlist, + appearance.platform, + appearance.platform_player_id, + contribution.metric_kind, + contribution.metric_key, + SUM(contribution.total_value)::float8 AS total_value, + SUM(contribution.sample_count)::bigint AS sample_count + FROM leaderboard_refresh_appearances appearance + JOIN leaderboard_refresh_metric_contributions contribution + ON contribution.analysis_run_id = appearance.analysis_run_id + AND contribution.replay_id = appearance.replay_id + AND contribution.platform = appearance.platform + AND contribution.platform_player_id = appearance.platform_player_id + GROUP BY + appearance.window_key, + appearance.platform, + appearance.platform_player_id, + contribution.metric_kind, + contribution.metric_key, + CUBE(appearance.game_type, appearance.team_size, appearance.playlist) + HAVING SUM(contribution.total_value) > 0 + "#, + ) + .execute(&mut *tx) + .await + .context("aggregating leaderboard metric scopes")?; + + // Replace the prior generation only after all expensive source work has + // succeeded. Readers continue seeing the old committed rows until commit. + sqlx::query("DELETE FROM leaderboard_player_window_metrics") + .execute(&mut *tx) + .await + .context("clearing old leaderboard metric cache")?; + sqlx::query("DELETE FROM leaderboard_player_window_totals") + .execute(&mut *tx) + .await + .context("clearing old leaderboard player cache")?; + sqlx::query("DELETE FROM leaderboard_cache_windows") + .execute(&mut *tx) + .await + .context("clearing old leaderboard window metadata")?; + + sqlx::query( + r#" + INSERT INTO leaderboard_cache_windows ( + window_key, + window_kind, + season, + window_start, + window_end, + is_current, + refreshed_at + ) + SELECT + window_key, + MAX(window_kind), + MAX(window_season), + COALESCE(MAX(window_start), MIN(replay_time)), + COALESCE(MAX(window_end), MAX(replay_time)), + MAX(window_kind) <> 'season', + now() + FROM leaderboard_refresh_appearances + GROUP BY window_key + "#, + ) + .execute(&mut *tx) + .await + .context("inserting leaderboard window metadata")?; + + sqlx::query( + r#" + UPDATE leaderboard_cache_windows cached_window + SET is_current = cached_window.window_key = ( + SELECT current_window.window_key + FROM leaderboard_cache_windows current_window + WHERE current_window.window_kind = 'season' + ORDER BY current_window.window_end DESC NULLS LAST, current_window.season DESC + LIMIT 1 + ) + WHERE cached_window.window_kind = 'season' + "#, + ) + .execute(&mut *tx) + .await + .context("marking current leaderboard season")?; + + let player_rows = sqlx::query( + r#" + INSERT INTO leaderboard_player_window_totals ( + window_key, + scope_game_type, + scope_team_size, + scope_playlist, + platform, + platform_player_id, + replay_count, + active_time_seconds, + refreshed_at + ) + SELECT + appearance.window_key, + CASE WHEN GROUPING(appearance.game_type) = 1 + THEN '*' ELSE appearance.game_type END, + CASE WHEN GROUPING(appearance.team_size) = 1 + THEN 0 ELSE appearance.team_size END, + CASE WHEN GROUPING(appearance.playlist) = 1 + THEN '*' ELSE appearance.playlist END, + appearance.platform, + appearance.platform_player_id, + COUNT(DISTINCT appearance.replay_id), + SUM(appearance.active_time_seconds), + now() + FROM leaderboard_refresh_appearances appearance + GROUP BY + appearance.window_key, + appearance.platform, + appearance.platform_player_id, + CUBE(appearance.game_type, appearance.team_size, appearance.playlist) + "#, + ) + .execute(&mut *tx) + .await + .context("inserting leaderboard player/window totals")? + .rows_affected(); + + let metric_rows = sqlx::query( + r#" + INSERT INTO leaderboard_player_window_metrics ( + window_key, + scope_game_type, + scope_team_size, + scope_playlist, + platform, + platform_player_id, + metric_kind, + metric_key, + total_value, + replay_count, + active_time_seconds, + value_per_5_minutes, + sample_count, + average_value, + refreshed_at + ) + SELECT + metric.window_key, + metric.scope_game_type, + metric.scope_team_size, + metric.scope_playlist, + metric.platform, + metric.platform_player_id, + metric.metric_kind, + metric.metric_key, + metric.total_value, + totals.replay_count, + totals.active_time_seconds, + CASE WHEN totals.active_time_seconds > 0 + THEN metric.total_value * 300.0 / totals.active_time_seconds + ELSE NULL END, + metric.sample_count, + CASE WHEN metric.sample_count > 0 + THEN metric.total_value / metric.sample_count::float8 + ELSE NULL END, + now() + FROM leaderboard_refresh_metric_sums metric + JOIN leaderboard_player_window_totals totals + ON totals.window_key = metric.window_key + AND totals.scope_game_type = metric.scope_game_type + AND totals.scope_team_size = metric.scope_team_size + AND totals.scope_playlist = metric.scope_playlist + AND totals.platform = metric.platform + AND totals.platform_player_id = metric.platform_player_id + "#, + ) + .execute(&mut *tx) + .await + .context("inserting leaderboard player/window metrics")? + .rows_affected(); + + let windows: i64 = sqlx::query("SELECT COUNT(*) AS count FROM leaderboard_cache_windows") + .fetch_one(&mut *tx) + .await + .context("counting refreshed leaderboard windows")? + .try_get("count")?; + + tx.commit() + .await + .context("committing leaderboard cache refresh")?; + + Ok(Some(LeaderboardCacheRefreshSummary { + windows: windows.max(0) as u64, + player_rows, + metric_rows, + })) +} diff --git a/crates/rocket-sense-server/src/leaderboard_cache_tests.rs b/crates/rocket-sense-server/src/leaderboard_cache_tests.rs new file mode 100644 index 00000000..21485605 --- /dev/null +++ b/crates/rocket-sense-server/src/leaderboard_cache_tests.rs @@ -0,0 +1,130 @@ +use super::*; +use uuid::Uuid; + +#[tokio::test] +async fn refresh_rebuilds_an_empty_database() { + let Ok(database_url) = std::env::var("ROCKET_SENSE_TEST_DATABASE_URL") else { + return; + }; + let pool = rocket_sense_db::connect(&database_url) + .await + .expect("test database should connect"); + rocket_sense_db::run_migrations(&pool) + .await + .expect("test migrations should run"); + + let summary = refresh(&pool) + .await + .expect("empty cache refresh should succeed") + .expect("test should acquire the refresh lock"); + + assert_eq!(summary.windows, 0); + assert_eq!(summary.player_rows, 0); + assert_eq!(summary.metric_rows, 0); + + let replay_id = Uuid::now_v7(); + let analysis_run_id = Uuid::now_v7(); + sqlx::query( + r#" + INSERT INTO replays ( + id, file_sha256, byte_size, storage_byte_size, storage_key, playlist, + replay_game_type, season, replay_date + ) + VALUES ($1, 'leaderboard-cache-test', 1, 1, 'test.replay', + 'ranked-duels', 'ranked', 'f23', now()) + "#, + ) + .bind(replay_id) + .execute(&pool) + .await + .expect("test replay should insert"); + sqlx::query( + r#" + INSERT INTO analysis_runs ( + id, replay_id, status, extractor_name, extractor_version, + input_file_sha256, event_stream_schema_version, finished_at + ) + VALUES ($1, $2, 'succeeded', 'test', '1', + 'leaderboard-cache-test', 'test', now()) + "#, + ) + .bind(analysis_run_id) + .bind(replay_id) + .execute(&pool) + .await + .expect("test analysis run should insert"); + sqlx::query("UPDATE replays SET canonical_analysis_run_id = $2 WHERE id = $1") + .bind(replay_id) + .bind(analysis_run_id) + .execute(&pool) + .await + .expect("test replay should become canonical"); + + let player_id = Uuid::now_v7(); + for (id, platform_player_id, team, goals) in [ + (player_id, "player-one", 0, 2), + (Uuid::now_v7(), "player-two", 1, 0), + ] { + sqlx::query( + r#" + INSERT INTO replay_players ( + id, replay_id, name, platform, platform_player_id, + team, active_time_seconds, goals, assists, saves, shots + ) + VALUES ($1, $2, $3, 'steam', $3, $4, 300.0, $5, 0, 0, 0) + "#, + ) + .bind(id) + .bind(replay_id) + .bind(platform_player_id) + .bind(team) + .bind(goals) + .execute(&pool) + .await + .expect("test replay player should insert"); + } + sqlx::query( + r#" + INSERT INTO player_replay_stat_facts ( + analysis_run_id, replay_id, replay_player_id, player_subject_id, + platform, platform_player_id, team, stat_key, value, unit, + active_time_seconds, denominator_key, denominator_value + ) + VALUES ($1, $2, $3, 'steam:player-one', 'steam', 'player-one', 0, + 'possession-time', 30.0, 'seconds', 300.0, 'active_time', 300.0) + "#, + ) + .bind(analysis_run_id) + .bind(replay_id) + .bind(player_id) + .execute(&pool) + .await + .expect("test stat fact should insert"); + + let summary = refresh(&pool) + .await + .expect("populated cache refresh should succeed") + .expect("test should reacquire the refresh lock"); + assert_eq!(summary.windows, 3); + assert_eq!(summary.player_rows, 48); + assert_eq!(summary.metric_rows, 48); + + let cached_goal: (f64, i64, f64) = sqlx::query_as( + r#" + SELECT total_value, replay_count, value_per_5_minutes + FROM leaderboard_player_window_metrics + WHERE window_key = 'trailing-7d' + AND scope_game_type = '*' + AND scope_team_size = 0 + AND scope_playlist = '*' + AND platform = 'steam' + AND platform_player_id = 'player-one' + AND metric_kind = 'event' + AND metric_key = 'goal' + "#, + ) + .fetch_one(&pool) + .await + .expect("goal cache row should exist"); + assert_eq!(cached_goal, (2.0, 1, 2.0)); +} diff --git a/crates/rocket-sense-server/src/main.rs b/crates/rocket-sense-server/src/main.rs index 2f1500db..f1d02863 100644 --- a/crates/rocket-sense-server/src/main.rs +++ b/crates/rocket-sense-server/src/main.rs @@ -7,6 +7,7 @@ mod app; mod auth; mod ballchasing; mod ballchasing_sync; +mod leaderboard_cache; mod processing; mod rank_benchmark; mod ranks; diff --git a/crates/rocket-sense-server/src/settings.rs b/crates/rocket-sense-server/src/settings.rs index f02f80d0..e01abb09 100644 --- a/crates/rocket-sense-server/src/settings.rs +++ b/crates/rocket-sense-server/src/settings.rs @@ -124,6 +124,12 @@ pub struct Settings { /// `play_event_subjects`/`play_events` scan. Default false so the page stays /// correct until the reprocess backfill has populated the table. pub materialized_stat_counts: bool, + /// Enables the disposable player/window leaderboard read-model refresh. + /// Canonical replay facts remain authoritative; this cache is expected to + /// be deleted and fully rebuilt frequently. + pub leaderboard_cache_enabled: bool, + /// Cadence for full leaderboard cache rebuilds. Defaults to ten minutes. + pub leaderboard_cache_refresh_interval: Duration, /// Gates the rank-median benchmark cohort: the recurring refresh job, the /// admin trigger, and the `rank_benchmark_*` read-path fields. Default false /// until the first refresh has populated `rank_benchmark_stats`. @@ -206,6 +212,16 @@ impl Settings { let materialized_stat_counts = env::var("ROCKET_SENSE_MATERIALIZED_STAT_COUNTS") .map(|value| value == "1" || value.to_lowercase() == "true") .unwrap_or(true); + let leaderboard_cache_enabled = env::var("ROCKET_SENSE_LEADERBOARD_CACHE") + .map(|value| value != "0" && value.to_lowercase() != "false") + .unwrap_or(true); + let leaderboard_cache_refresh_interval = Duration::from_secs( + env::var("ROCKET_SENSE_LEADERBOARD_CACHE_REFRESH_SECS") + .ok() + .and_then(|value| value.parse::().ok()) + .unwrap_or(10 * 60) + .max(60), + ); let rank_benchmark_enabled = env::var("ROCKET_SENSE_RANK_BENCHMARK") .map(|value| value == "1" || value.to_lowercase() == "true") .unwrap_or(false); @@ -248,6 +264,8 @@ impl Settings { run_replay_processing_workers, background_processing_concurrency, materialized_stat_counts, + leaderboard_cache_enabled, + leaderboard_cache_refresh_interval, rank_benchmark_enabled, rank_benchmark_windows, rank_benchmark_default_window, diff --git a/migrations/0086_leaderboard_player_window_cache.sql b/migrations/0086_leaderboard_player_window_cache.sql new file mode 100644 index 00000000..0e6cffd1 --- /dev/null +++ b/migrations/0086_leaderboard_player_window_cache.sql @@ -0,0 +1,131 @@ +-- Disposable read models for cross-player leaderboards. +-- +-- IMPORTANT: these tables are caches, not sources of truth. Canonical replay +-- metadata plus the per-replay/player fact tables remain authoritative. The +-- refresh job intentionally deletes and rebuilds these rows often; callers and +-- future migrations must never rely on cache rows surviving a refresh. + +CREATE TABLE leaderboard_cache_windows ( + window_key text PRIMARY KEY, + window_kind text NOT NULL, + season text, + window_start timestamptz, + window_end timestamptz, + is_current boolean NOT NULL DEFAULT false, + refreshed_at timestamptz NOT NULL DEFAULT now(), + CHECK (window_key <> ''), + CHECK (window_kind IN ('daily', 'trailing-7d', 'season')), + CHECK ((window_kind = 'season') = (season IS NOT NULL)) +); + +COMMENT ON TABLE leaderboard_cache_windows IS + 'Disposable leaderboard refresh metadata; canonical replay data is authoritative and this table is rebuilt often.'; + +-- One row per player and fully materialized scope. `*` / 0 mean that dimension +-- is unfiltered. Refresh uses a CUBE over the three dimensions, so normal UI +-- reads never need to GROUP BY the population before ordering it. +CREATE TABLE leaderboard_player_window_totals ( + window_key text NOT NULL REFERENCES leaderboard_cache_windows(window_key) ON DELETE CASCADE, + scope_game_type text NOT NULL, + scope_team_size smallint NOT NULL, + scope_playlist text NOT NULL, + platform text NOT NULL, + platform_player_id text NOT NULL, + replay_count bigint NOT NULL, + active_time_seconds double precision NOT NULL, + refreshed_at timestamptz NOT NULL DEFAULT now(), + PRIMARY KEY ( + window_key, + scope_game_type, + scope_team_size, + scope_playlist, + platform, + platform_player_id + ), + CHECK (platform <> ''), + CHECK (platform_player_id <> ''), + CHECK (replay_count > 0), + CHECK (active_time_seconds >= 0.0) +); + +COMMENT ON TABLE leaderboard_player_window_totals IS + 'Disposable player/window leaderboard cache rebuilt from canonical replay appearances; never a source of truth.'; + +CREATE INDEX leaderboard_player_window_totals_rank_idx + ON leaderboard_player_window_totals ( + window_key, + scope_game_type, + scope_team_size, + scope_playlist, + replay_count DESC, + platform, + platform_player_id + ); + +-- Metric rows carry their already-matched appearance/time denominators. This +-- duplicates a little data deliberately: total and per-5-minute leaderboards +-- become bounded ordered-index reads rather than population-wide aggregates. +CREATE TABLE leaderboard_player_window_metrics ( + window_key text NOT NULL REFERENCES leaderboard_cache_windows(window_key) ON DELETE CASCADE, + scope_game_type text NOT NULL, + scope_team_size smallint NOT NULL, + scope_playlist text NOT NULL, + platform text NOT NULL, + platform_player_id text NOT NULL, + metric_kind text NOT NULL, + metric_key text NOT NULL, + total_value double precision NOT NULL, + replay_count bigint NOT NULL, + active_time_seconds double precision NOT NULL, + value_per_5_minutes double precision, + sample_count bigint, + average_value double precision, + refreshed_at timestamptz NOT NULL DEFAULT now(), + PRIMARY KEY ( + window_key, + scope_game_type, + scope_team_size, + scope_playlist, + platform, + platform_player_id, + metric_kind, + metric_key + ), + CHECK (metric_kind IN ('event', 'stat')), + CHECK (metric_key <> ''), + CHECK (total_value >= 0.0), + CHECK (replay_count > 0), + CHECK (active_time_seconds >= 0.0), + CHECK (sample_count IS NULL OR sample_count >= 0) +); + +COMMENT ON TABLE leaderboard_player_window_metrics IS + 'Disposable player/window metric cache rebuilt often from canonical per-replay facts; never a source of truth.'; + +CREATE INDEX leaderboard_player_window_metrics_total_rank_idx + ON leaderboard_player_window_metrics ( + window_key, + metric_kind, + metric_key, + scope_game_type, + scope_team_size, + scope_playlist, + total_value DESC, + platform, + platform_player_id + ); + +CREATE INDEX leaderboard_player_window_metrics_rate_rank_idx + ON leaderboard_player_window_metrics ( + window_key, + metric_kind, + metric_key, + scope_game_type, + scope_team_size, + scope_playlist, + value_per_5_minutes DESC, + total_value DESC, + platform, + platform_player_id + ) + WHERE value_per_5_minutes IS NOT NULL; diff --git a/web/src/stats/leaderboards.tsx b/web/src/stats/leaderboards.tsx index ef96b31d..956ac19a 100644 --- a/web/src/stats/leaderboards.tsx +++ b/web/src/stats/leaderboards.tsx @@ -22,16 +22,33 @@ import { StatPlayerLabel } from "./shared"; type MetricKind = "appearances" | "uploads" | "event" | "stat"; type Aggregation = "total" | "per-game" | "per-minute" | "share" | "average"; +type LeaderboardWindow = "daily" | "trailing-7d" | "season"; const PAGE_SIZE = 50; const RATE_WINDOW_MINUTES = 5; -const DEFAULT_MIN_GAMES = "10"; const DEFAULT_BOARD = "event:goal"; -const EVENT_AGGREGATIONS: Aggregation[] = ["total", "per-game", "per-minute"]; -const STAT_AGGREGATIONS: Aggregation[] = ["total", "per-game", "per-minute", "share"]; +const EVENT_AGGREGATIONS: Aggregation[] = ["total", "per-minute"]; +const STAT_AGGREGATIONS: Aggregation[] = ["total", "per-minute"]; const AVERAGE_STAT_AGGREGATIONS: Aggregation[] = ["average"]; +const windowOptions: Array<{ value: LeaderboardWindow; label: string }> = [ + { value: "daily", label: "Today" }, + { value: "trailing-7d", label: "Last 7 days" }, + { value: "season", label: "Season" }, +]; + +function defaultMinGames(window: LeaderboardWindow): string { + switch (window) { + case "daily": + return "3"; + case "trailing-7d": + return "10"; + case "season": + return "25"; + } +} + // A leaderboard is one METRIC ranked by an AGGREGATION within a SCOPE. Every // rankable thing — counted events, accumulated stats, plain activity counts — // is described by a single CatalogMetric, so the picker, the URL, and the table @@ -148,7 +165,7 @@ const statOptions: Array<{ label: "Ball advance", category: "possession", unit: "uu", - aggregations: ["total", "per-game", "per-minute"], + aggregations: STAT_AGGREGATIONS, description: "Distance the player advanced the ball during possessions.", }, { @@ -172,7 +189,7 @@ const statOptions: Array<{ label: "High aerial touches", category: "mechanic", unit: "count", - aggregations: ["total", "per-game", "per-minute"], + aggregations: STAT_AGGREGATIONS, description: "Touches classified as high aerial contacts.", }, { @@ -180,7 +197,7 @@ const statOptions: Array<{ label: "Control touches", category: "possession", unit: "count", - aggregations: ["total", "per-game", "per-minute"], + aggregations: STAT_AGGREGATIONS, description: "Touches classified as controlled contacts.", }, { @@ -188,7 +205,7 @@ const statOptions: Array<{ label: "Big boost pad count", category: "boost", unit: "count", - aggregations: ["total", "per-game", "per-minute"], + aggregations: STAT_AGGREGATIONS, description: "Big boost pads collected by the player.", }, { @@ -196,7 +213,7 @@ const statOptions: Array<{ label: "Small boost pad count", category: "boost", unit: "count", - aggregations: ["total", "per-game", "per-minute"], + aggregations: STAT_AGGREGATIONS, description: "Small boost pads collected by the player.", }, { @@ -204,7 +221,7 @@ const statOptions: Array<{ label: "Boost from big pads", category: "boost", unit: "boost", - aggregations: ["total", "per-game", "per-minute"], + aggregations: STAT_AGGREGATIONS, description: "Boost amount collected from big pads.", }, { @@ -212,7 +229,7 @@ const statOptions: Array<{ label: "Boost from small pads", category: "boost", unit: "boost", - aggregations: ["total", "per-game", "per-minute"], + aggregations: STAT_AGGREGATIONS, description: "Boost amount collected from small pads.", }, ]; @@ -248,16 +265,18 @@ function defaultAggregation(metric: CatalogMetric): Aggregation | null { // Build the full metric catalog: static activity + stat metrics, plus one entry // per countable event type from the live registry. function buildCatalog(eventTypes: EventTypeResponse[]): CatalogMetric[] { - const statMetrics: CatalogMetric[] = statOptions.map((option) => ({ - id: `stat:${option.value}`, - kind: "stat", - label: option.label, - category: option.category, - param: option.value, - unit: option.unit, - aggregations: option.aggregations, - description: option.description, - })); + const statMetrics: CatalogMetric[] = statOptions + .filter((option) => !isAverageStat(option.value)) + .map((option) => ({ + id: `stat:${option.value}`, + kind: "stat", + label: option.label, + category: option.category, + param: option.value, + unit: option.unit, + aggregations: option.aggregations, + description: option.description, + })); const eventMetrics: CatalogMetric[] = eventTypes.map((eventType) => ({ id: `event:${eventType.key}`, kind: "event", @@ -309,14 +328,6 @@ function formatRate(value: number | null): string { return value == null ? "-" : value.toLocaleString(undefined, { maximumFractionDigits: 2 }); } -function formatPercent(value: number | null): string { - if (value == null || !Number.isFinite(value)) return "-"; - return value.toLocaleString(undefined, { - maximumFractionDigits: 1, - style: "percent", - }); -} - function formatDurationCompact(value: number | null): string { if (value == null || !Number.isFinite(value)) return "-"; const totalSeconds = Math.max(0, Math.round(value)); @@ -405,19 +416,7 @@ const playlistOptions = [ { value: "tournament", label: "Tournament" }, ]; -const seasonOptions = buildSeasonOptions("Any season", { newestFirst: true }); - -function dateInputFromParam(value: string | null): string { - if (!value) return ""; - const date = new Date(value); - if (Number.isNaN(date.getTime())) return ""; - return date.toISOString().slice(0, 10); -} - -function replayDateParam(value: string, edge: "start" | "end"): string { - const suffix = edge === "start" ? "T00:00:00" : "T23:59:59.999"; - return new Date(`${value}${suffix}`).toISOString(); -} +const seasonOptions = buildSeasonOptions("Current season", { newestFirst: true }); // Read the selected board id, migrating the legacy metric/event-type/stat params // so old links and bookmarks still resolve. @@ -688,7 +687,6 @@ function EventLeaderboard({ Rank Total Games - Per game {rateColumnLabel} @@ -716,7 +714,6 @@ function EventLeaderboard({ {row.event_count.toLocaleString()} {row.replay_count.toLocaleString()} - {formatRate(row.count_per_game)} {formatRate(perRateWindow(row.per_active_minute, rateWindowMinutes))} ); @@ -750,7 +747,6 @@ function StatLeaderboard({ useLeaderboard(getStatLeaderboard, filterKey); const rateColumnLabel = rateWindowMinutes === 1 ? "Per min" : `Per ${rateWindowMinutes} min`; const averageStat = isAverageStat(statKey); - const showShare = unit === "seconds" && !averageStat; if (loading) return
Loading leaderboard…
; if (error) return
Failed to load leaderboard: {error}
; @@ -810,9 +806,7 @@ function StatLeaderboard({ Player Rank Total - {showShare ? Share : null} Games - Per game {rateColumnLabel} @@ -839,9 +833,7 @@ function StatLeaderboard({ /> {formatStatValue(row.value, unit)} - {showShare ? {formatPercent(row.share_of_active_time)} : null} {row.replay_count.toLocaleString()} - {formatStatValue(row.value_per_game, unit)} {perStatWindow(row.value_per_active_minute, rateWindowMinutes, unit)} ); @@ -1072,9 +1064,10 @@ export function LeaderboardsPage() { const gameType = params.get("game-type") ?? ""; const playlist = params.get("playlist") ?? ""; const season = params.get("season") ?? ""; - const replayDateAfter = dateInputFromParam(params.get("replay-date-after")); - const replayDateBefore = dateInputFromParam(params.get("replay-date-before")); - const minGames = params.get("min-games") ?? DEFAULT_MIN_GAMES; + const windowParam = params.get("window"); + const window: LeaderboardWindow = + windowParam === "daily" || windowParam === "season" ? windowParam : "trailing-7d"; + const minGames = params.get("min-games") ?? defaultMinGames(window); const selectedEventType = metric.kind === "event" ? eventTypes.find((option) => option.key === metric.param) : undefined; @@ -1087,7 +1080,8 @@ export function LeaderboardsPage() { : metric.aggregations.includes(sortParam as Aggregation) ? (sortParam as Aggregation) : defaultAggregation(metric); - const showMinGames = metric.kind === "event" || metric.kind === "stat"; + const showMinGames = + activeSort === "per-minute" && (metric.kind === "event" || metric.kind === "stat"); const setParam = useCallback( (key: string, value: string) => { @@ -1103,20 +1097,6 @@ export function LeaderboardsPage() { [location.pathname, location.search, navigate], ); - const setReplayDateParam = useCallback( - (key: "replay-date-after" | "replay-date-before", value: string, edge: "start" | "end") => { - const next = new URLSearchParams(location.search); - if (value) { - next.set(key, replayDateParam(value, edge)); - } else { - next.delete(key); - } - const query = next.toString(); - navigate(query ? `${location.pathname}?${query}` : location.pathname, { replace: true }); - }, - [location.pathname, location.search, navigate], - ); - const selectBoard = useCallback( (id: string) => { const next = new URLSearchParams(location.search); @@ -1141,44 +1121,45 @@ export function LeaderboardsPage() { // own metric param, ranking, and min-games threshold on top. const replayFilterKey = useMemo(() => { const filters = new URLSearchParams(); + filters.set("window", window); if (teamSize) filters.set("team-size", teamSize); if (gameType) filters.set("game-type", gameType); if (playlist) filters.set("playlist", playlist); - if (season) { + if (window === "season" && season) { filters.set("season", season); - // Production leaderboards already support season ranges. Keep the exact - // `season` param for replay-list links, and encode the same choice as a - // one-season range for leaderboard API reads. - filters.set("min-season", season); - filters.set("max-season", season); } - const rawReplayDateAfter = params.get("replay-date-after"); - const rawReplayDateBefore = params.get("replay-date-before"); - if (rawReplayDateAfter) filters.set("replay-date-after", rawReplayDateAfter); - if (rawReplayDateBefore) filters.set("replay-date-before", rawReplayDateBefore); return filters.toString(); - }, [gameType, params, playlist, season, teamSize]); + }, [gameType, playlist, season, teamSize, window]); const boardFilterKey = useMemo(() => { const filters = new URLSearchParams(replayFilterKey); if (metric.kind === "event") { if (metric.param) filters.set("event-type", metric.param); if (activeSort && activeSort !== "total") filters.set("sort", activeSort); - if (minGames) filters.set("min-games", minGames); + if (activeSort === "per-minute" && minGames) filters.set("min-games", minGames); } else if (metric.kind === "stat") { if (metric.param) filters.set("stat", metric.param); if (activeSort) filters.set("sort", activeSort); - if (minGames) filters.set("min-games", minGames); + if (activeSort === "per-minute" && minGames) filters.set("min-games", minGames); } return filters.toString(); }, [activeSort, metric.kind, metric.param, minGames, replayFilterKey]); const replayBrowseFilterKey = useMemo(() => { const filters = new URLSearchParams(replayFilterKey); - filters.delete("min-season"); - filters.delete("max-season"); + filters.delete("window"); + if (window === "daily") { + const start = new Date(); + start.setUTCHours(0, 0, 0, 0); + filters.set("replay-date-after", start.toISOString()); + } else if (window === "trailing-7d") { + filters.set( + "replay-date-after", + new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(), + ); + } return filters.toString(); - }, [replayFilterKey]); + }, [replayFilterKey, window]); return (
@@ -1192,6 +1173,13 @@ export function LeaderboardsPage() {
+ setParam("window", value)} + /> - - - + {window === "season" ? ( + + ) : null} {showMinGames ? (
--
-`}const en="#3b82f6",tn="#f59e0b",h3=new Set(["wavedash"]),f3=new Set(["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"]);function Ci(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function Dv(n){return f3.has(n)&&!h3.has(n)}function ef(n){return n===!0?en:n===!1?tn:null}const FT=["timeline","core_player","player_possession","possession","loose_possession","ball_half","ball_third","territorial_pressure","movement","player_activity","field_third","field_half","ball_depth","depth_role","ball_proximity","shadow_defense","rotation_role","first_man_change","goal_context","backboard","ceiling_shot","wall_aerial","wall_aerial_shot","center","flick","flip_reset","dodge_reset","double_tap","fifty_fifty","kickoff","one_timer","pass","ball_carry","controlled_play","rush","dodge","speed_flip","half_flip","half_volley","wavedash","whiff","powerslide","touch","boost_pickups","boost_respawn","bump","demolition"],NT=["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"],Lg=[...new Set([...FT,...NT])],p3=new Set(NT);function io(){return Object.fromEntries(Lg.map(n=>[n,0]))}function Cp(n){return{...n??io()}}function wu(n,e){n[e]+=1}function m3(n){return Lg.includes(n)}function UT(n){if(n==null)return null;if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function Bm(n){return UT(n.meta.primary_player)}function _3(n){return n.meta.team_is_team_0??null}function g3(n){const e=n.meta.stream;return!p3.has(e)||!m3(e)?null:e}function zm(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_frame:n.meta.timing.frame;return typeof e=="number"&&Number.isFinite(e)?e:null}function Hm(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_time:n.meta.timing.time;return typeof e=="number"&&Number.isFinite(e)?e:null}function y3(n,e){const t=zm(n);if(t!==null)return t<=e.frame_number;const i=Hm(n);return i!==null&&i<=e.time}function v3(n){return[...n].sort((e,t)=>{const i=zm(e),s=zm(t);if(i!==s)return(i??Number.POSITIVE_INFINITY)-(s??Number.POSITIVE_INFINITY);const a=Hm(e),r=Hm(t);return a!==r?(a??Number.POSITIVE_INFINITY)-(r??Number.POSITIVE_INFINITY):(Bm(e)??"").localeCompare(Bm(t)??"")})}function BT(n){const e=zT(n);for(const t of n.frames)e.applyFrame(t);return n}function zT(n){const e=Lg.map(s=>({eventType:s,events:v3(jl(n).filter(a=>a.meta.stream===s)),index:0})),t=new Map,i={teamZero:io(),teamOne:io()};return{applyFrame(s){for(const a of e)for(;a.index({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function x3(n,e,t,i){n.is_last_backboard=i,n.time_since_last_backboard=n.last_backboard_time==null?null:Math.max(0,t-n.last_backboard_time),n.frames_since_last_backboard=n.last_backboard_frame==null?null:Math.max(0,e-n.last_backboard_frame)}function w3(n,e,t,i){n.count+=1,n.last_backboard_time=e.time,n.last_backboard_frame=e.frame,n.time_since_last_backboard=Math.max(0,i-e.time),n.frames_since_last_backboard=Math.max(0,t-e.frame)}function S3(n,e){Object.assign(n,e??HT())}function Ov(n,e){n.count=e}function T3(n){const e=VT(n);for(const t of n.frames)e.applyFrame(t);return n}function VT(n){const e=b3(ve(n,"backboard"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)x3(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Vm(n){return`${n.key}\0${n.value}`}function Su(n){return n.map(Vm).join("")}function GT(n,e){e.sort((s,a)=>Vm(s).localeCompare(Vm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Su(s.labels)===Su(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Su(s.labels).localeCompare(Su(a.labels))))}function Nv(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="origin"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function $T(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function WT(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Uv(n,e){GT(n,[{key:"kind",value:"carry"}]),n.carry_count=$T(n),n.total_carry_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_carry_time=Math.max(n.longest_carry_time,e.duration),n.furthest_carry_distance=Math.max(n.furthest_carry_distance,e.straight_line_distance),n.fastest_carry_speed=Math.max(n.fastest_carry_speed,e.average_speed),n.carry_speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap}function Bv(n,e){e.air_dribble_origin!=null&>(n,[{key:"origin",value:e.air_dribble_origin}]),n.count=$T(n),n.ground_to_air_count=Nv(n,"ground_to_air"),n.wall_to_air_count=Nv(n,"wall_to_air"),n.total_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_time=Math.max(n.longest_time,e.duration),n.furthest_distance=Math.max(n.furthest_distance,e.straight_line_distance),n.fastest_speed=Math.max(n.fastest_speed,e.average_speed),n.speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap,n.total_touch_count+=e.touch_count,n.max_touch_count=Math.max(n.max_touch_count,e.touch_count)}function Ap(n,e){Object.assign(n,e??Xu()),e?.labeled_event_counts?n.labeled_event_counts=WT(e.labeled_event_counts):delete n.labeled_event_counts}function Rp(n,e){Object.assign(n,e??Ku()),e?.labeled_event_counts?n.labeled_event_counts=WT(e.labeled_event_counts):delete n.labeled_event_counts}function E3(n){const e=XT(n);for(const t of n.frames)e.applyFrame(t);return n}function XT(n){const e=M3(ve(n,"ball_carry"));let t=0;const i=new Map,s=new Map,a=Xu(),r=Xu(),o=Ku(),l=Ku();return{applyFrame(c){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function A3(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1),n.last_bump_time=e.time,n.last_bump_frame=e.frame,n.last_bump_strength=e.strength,n.max_bump_strength=Math.max(n.max_bump_strength,e.strength),n.cumulative_bump_strength+=e.strength}function R3(n,e){n.bumps_taken+=1,e.is_team_bump&&(n.team_bumps_taken+=1)}function P3(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1)}function I3(n,e){Object.assign(n,e??Gm())}function Hv(n,e){Object.assign(n,e)}function L3(n){const e=KT(n);for(const t of n.frames)e.applyFrame(t);return n}function KT(n){const e=C3(ve(n,"bump"));let t=0;const i=new Map,s=zv(),a=zv();return{applyFrame(r){for(;t=t&&n0&&(s.overfill_total=sn(s.overfill_total,i),e.field_half==="opponent"&&(s.overfill_from_stolen=sn(s.overfill_from_stolen,i)))}function $v(n,e){e.boost_granted!=null&&(n.stats.amount_respawned=sn(n.stats.amount_respawned,rn(e.boost_granted)))}class U3{constructor(e){this.points=e}index=0;sample(e){for(;this.index+1e?0:rn(t.value)}}function Km(n,e){return`${n}:${e}`}function B3(n){const e=new Map,t=n.accumulation_tracks;for(const i of t??[]){const s=pl(i.player_id);e.set(Km(s,i.quantity),new U3(i.points))}return e}function z3(n){return[...ve(n,"boost_pickup")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function H3(n){return[...ve(n,"respawn")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function Lp(n,e){for(const t of qT)n[t]=e[t]}function YT(n){const e=z3(n),t=H3(n),i=B3(n);let s=0,a=0;const r=new Map,o=Ip(),l=Ip(),c=(d,h)=>{const f=pl(d);let p=r.get(f);return p||(p=Ip(),r.set(f,p)),p.isTeamZero=h,p},u=(d,h,f)=>{const p=g=>i.get(Km(h,g))?.sample(f)??0;d.amount_used=p("boost_used"),d.amount_used_while_grounded=p("boost_used_grounded"),d.amount_used_while_airborne=p("boost_used_airborne"),d.amount_used_while_supersonic=p("boost_used_supersonic")};return{applyFrame(d,h){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function qm(n){return`${n.key}\0${n.value}`}function Mu(n){return n.map(qm).join("")}function K3(n,e){e.sort((s,a)=>qm(s).localeCompare(qm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Mu(s.labels)===Mu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Mu(s.labels).localeCompare(Mu(a.labels))))}function q3(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function Y3(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function j3(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Z3(n,e,t,i){n.is_last_ceiling_shot=i,n.time_since_last_ceiling_shot=n.last_ceiling_shot_time==null?null:Math.max(0,jT(t,n.last_ceiling_shot_time)),n.frames_since_last_ceiling_shot=n.last_ceiling_shot_frame==null?null:Math.max(0,e-n.last_ceiling_shot_frame)}function J3(n,e,t,i){K3(n,[{key:"confidence_band",value:e.confidence>=$3?"high":"standard"}]),n.count=Y3(n),n.high_confidence_count=q3(n,"high"),n.is_last_ceiling_shot=!0,n.last_ceiling_shot_time=e.time,n.last_ceiling_shot_frame=e.frame,n.time_since_last_ceiling_shot=Math.max(0,jT(i,e.time)),n.frames_since_last_ceiling_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=W3(n.cumulative_confidence,e.confidence)}function Q3(n,e){Object.assign(n,e??ZT()),e?.labeled_event_counts?n.labeled_event_counts=j3(e.labeled_event_counts):delete n.labeled_event_counts}function eU(n){const e=JT(n);for(const t of n.frames)e.applyFrame(t);return n}function JT(n){const e=X3(ve(n,"ceiling_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)Z3(o,a.frame_number,a.time,i===r);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function sU(n,e){Object.assign(n,e??Dg())}function Kv(n,e){Object.assign(n,e)}function qv(n,e){n.score+=e.score_delta,n.goals+=e.goals_delta,n.assists+=e.assists_delta,n.saves+=e.saves_delta,n.shots+=e.shots_delta}function QT(n,e){if(e.time_after_kickoff!=null){const t=Math.max(0,e.time_after_kickoff);t<10?n.kickoff_goal_count+=1:t<20?n.short_goal_count+=1:t<40?n.medium_goal_count+=1:n.long_goal_count+=1}if(e.goal_buildup==="counter_attack"?n.counter_attack_goal_count+=1:e.goal_buildup==="sustained_pressure"?n.sustained_pressure_goal_count+=1:e.goal_buildup!=null&&(n.other_buildup_goal_count+=1),e.ball_air_time_before_goal!=null){const t=Math.max(0,e.ball_air_time_before_goal);n.goal_ball_air_time_sample_count+=1,n.cumulative_goal_ball_air_time=ns(n.cumulative_goal_ball_air_time,t),n.last_goal_ball_air_time=t}}function Dp(n,e){return n!=null&&e!=null&&ql(n)===ql(e)}function Yv(n,e){return n?e.y:-e.y}function aU(n,e){if(n.ball_position==null||e.position==null)return!1;const t=!n.scoring_team_is_team_0,i=Yv(t,n.ball_position);if(i>tU)return!1;const s=Yv(t,e.position);return s=iU}function rU(n,e,t){const i=t.is_team_0===e.scoring_team_is_team_0,s=Dp(t.player,e.defending_team_most_back_player),a=Dp(t.player,e.scoring_team_most_back_player);s&&(n.goals_conceded_while_last_defender+=1),a&&(n.goals_for_while_most_back+=1),s&&(n.goals_against_while_most_back+=1),!i&&aU(e,t)&&(n.caught_ahead_of_play_on_conceded_goals+=1),!i&&t.boost_amount!=null&&(n.goal_against_boost_sample_count+=1,n.cumulative_boost_on_goals_against=ns(n.cumulative_boost_on_goals_against,t.boost_amount),n.last_boost_on_goal_against=t.boost_amount),!i&&t.average_boost_in_leadup!=null&&t.min_boost_in_leadup!=null&&(n.goal_against_boost_leadup_sample_count+=1,n.cumulative_average_boost_in_goal_against_leadup=ns(n.cumulative_average_boost_in_goal_against_leadup,t.average_boost_in_leadup),n.cumulative_min_boost_in_goal_against_leadup=ns(n.cumulative_min_boost_in_goal_against_leadup,t.min_boost_in_leadup),n.last_average_boost_in_goal_against_leadup=t.average_boost_in_leadup,n.last_min_boost_in_goal_against_leadup=t.min_boost_in_leadup),!i&&t.position!=null&&(n.goal_against_position_sample_count+=1,n.cumulative_goal_against_position_x=ns(n.cumulative_goal_against_position_x,t.position.x),n.cumulative_goal_against_position_y=ns(n.cumulative_goal_against_position_y,t.position.y),n.cumulative_goal_against_position_z=ns(n.cumulative_goal_against_position_z,t.position.z),n.last_goal_against_position={...t.position});const r=Dp(t.player,e.scorer),o=r?e.scorer_last_touch?.ball_position:null;o!=null&&(n.scoring_goal_last_touch_position_sample_count+=1,n.cumulative_scoring_goal_last_touch_position_x=ns(n.cumulative_scoring_goal_last_touch_position_x,o.x),n.cumulative_scoring_goal_last_touch_position_y=ns(n.cumulative_scoring_goal_last_touch_position_y,o.y),n.cumulative_scoring_goal_last_touch_position_z=ns(n.cumulative_scoring_goal_last_touch_position_z,o.z),n.last_scoring_goal_last_touch_position={...o}),r&&QT(n,e)}function oU(n,e,t,i){QT(i.scoring_team_is_team_0?e:t,i);for(const s of i.players){const a=ql(s.player),r=n.get(a)??Dg();n.set(a,r),rU(r,i,s)}}function lU(n){const e=eM(n);for(const t of n.frames)e.applyFrame(t);return n}function eM(n){const e=Xv(ve(n,"core_player")),t=Xv(ve(n,"goal_context"));let i=0,s=0;const a=new Map,r=Ym(),o=Ym();return{applyFrame(l){for(;i({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Jv(n,e){n.count+=1,n.total_time=jv(n.total_time,e.duration),n.longest_time=Math.max(n.longest_time,e.duration),n.touch_count+=e.touch_count,n.total_advance_distance=jv(n.total_advance_distance,e.total_advance_distance)}function Op(n,e){Object.assign(n,e??qu())}function uU(n){const e=tM(n);for(const t of n.frames)e.applyFrame(t);return n}function tM(n){const e=cU(ve(n,"controlled_play"));let t=0;const i=new Map,s=qu(),a=qu();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function hU(n,e){n.count+=1,e.on_ball&&(n.on_ball_count+=1)}function fU(n,e){Object.assign(n,e??nM())}function pU(n){const e=iM(n);for(const t of n.frames)e.applyFrame(t);return n}function iM(n){const e=dU(ve(n,"dodge_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function _U(n,e,t,i){n.is_last_double_tap=i,n.time_since_last_double_tap=n.last_double_tap_time==null?null:Math.max(0,t-n.last_double_tap_time),n.frames_since_last_double_tap=n.last_double_tap_frame==null?null:Math.max(0,e-n.last_double_tap_frame)}function gU(n,e,t,i){n.count+=1,n.last_double_tap_time=e.time,n.last_double_tap_frame=e.frame,n.time_since_last_double_tap=Math.max(0,i-e.time),n.frames_since_last_double_tap=Math.max(0,t-e.frame)}function yU(n,e){Object.assign(n,e??sM())}function tb(n,e){n.count=e}function vU(n){const e=aM(n);for(const t of n.frames)e.applyFrame(t);return n}function aM(n){const e=mU(ve(n,"double_tap"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)_U(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function xU(n,e){Object.assign(n,e??rM())}function sb(n,e){Object.assign(n,e)}function wU(n){const e=oM(n);for(const t of n.frames)e.applyFrame(t);return n}function oM(n){const e=bU(ve(n,"demolition"));let t=0;const i=new Map,s=ib(),a=ib();function r(o){const l=nb(o),c=i.get(l)??rM();return i.set(l,c),c}return{applyFrame(o){for(;t({event:e,index:t})).sort((e,t)=>e.event.resolve_frame!==t.event.resolve_frame?e.event.resolve_frame-t.event.resolve_frame:e.event.resolve_time!==t.event.resolve_time?e.event.resolve_time-t.event.resolve_time:e.index-t.index).map(({event:e})=>e)}function TU(n){return{key:"phase",value:n?"kickoff":"open_play"}}function MU(n,e){return e==null?{key:"outcome",value:"neutral"}:{key:"outcome",value:e===n?"win":"loss"}}function EU(n,e){return e==null?{key:"possession_after",value:"neutral"}:{key:"possession_after",value:e===n?"self":"opponent"}}function CU(n,e){return{key:"dodge_state",value:(n?e.team_zero_dodge_contact:e.team_one_dodge_contact)?"dodge":"no_dodge"}}function Zm(n){return`${n.key}\0${n.value}`}function Eu(n){return n.map(Zm).join("")}function AU(n,e){e.sort((s,a)=>Zm(s).localeCompare(Zm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Eu(s.labels)===Eu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Eu(s.labels).localeCompare(Eu(a.labels))))}function RU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function rb(n,e,t){n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0==null?n.neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.possession_after_count+=1:n.opponent_possession_after_count+=1,t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0==null?n.kickoff_neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.kickoff_possession_after_count+=1:n.kickoff_opponent_possession_after_count+=1)}function ob(n,e,t){AU(n,[TU(t.is_kickoff),MU(e,t.winning_team_is_team_0),EU(e,t.possession_team_is_team_0),CU(e,t)]),n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0===e&&(n.possession_after_count+=1),t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0===e&&(n.kickoff_possession_after_count+=1))}function PU(n,e){Object.assign(n,e??jm()),e?.labeled_event_counts?n.labeled_event_counts=RU(e.labeled_event_counts):delete n.labeled_event_counts}function lb(n,e){Object.assign(n,e)}function IU(n){const e=lM(n);for(const t of n.frames)e.applyFrame(t);return n}function lM(n){const e=SU(ve(n,"fifty_fifty"));let t=0;const i=ab(),s=ab(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Jm(n){return`${n.key}\0${n.value}`}function Cu(n){return n.map(Jm).join("")}function dM(n,e){e.sort((s,a)=>Jm(s).localeCompare(Jm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Cu(s.labels)===Cu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Cu(s.labels).localeCompare(Cu(a.labels))))}function DU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function kU(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"taker_outcome",value:n.outcome},{key:"kickoff_approach",value:n.approach},{key:"approach_flip_direction",value:n.approach_flip_direction}]}function OU(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"support_behavior",value:n.support_behavior}]}function ub(n,e,t){n.count+=1,t.outcome==="neutral"?n.neutral_outcomes+=1:t.outcome===(e?"team_zero_win":"team_one_win")?n.wins+=1:t.outcome===(e?"team_one_win":"team_zero_win")&&(n.losses+=1),t.kickoff_possession_outcome==="contested"?n.contested_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_possession":"team_one_possession")?n.kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_one_possession":"team_zero_possession")?n.opponent_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_advantage":"team_one_advantage")?n.kickoff_possession_advantages+=1:n.opponent_kickoff_possession_advantages+=1,t.kickoff_goal&&(n.kickoff_goal_count+=1,t.scoring_team_is_team_0===e?n.kickoff_goals_for+=1:t.scoring_team_is_team_0!=null&&(n.kickoff_goals_against+=1)),t.win_strength!=null&&(n.win_strength_sample_count+=1,n.cumulative_win_strength+=t.win_strength)}function db(n,e,t){t&&(t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after,e.boost_after_sample_count+=1,e.cumulative_boost_after+=t.boost_after),t.outcome==="fake"?(n.fake_count+=1,e.fake_count+=1):t.outcome==="missed"&&(n.missed_count+=1,e.missed_count+=1))}function FU(n,e,t){n.count+=1,dM(n,kU(t)),t.outcome==="touched"?n.touches+=1:t.outcome==="fake"?n.fakes+=1:t.outcome==="missed"&&(n.misses+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function NU(n,e,t){n.count+=1,dM(n,OU(t)),t.first_touch_time!=null&&(n.touches+=1),t.support_behavior==="go_for_boost"?n.support_go_for_boosts+=1:t.support_behavior==="cheat"?n.support_cheats+=1:t.support_behavior==="other"&&(n.support_other+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function Au(n,e,t){const i=cM(t.player),s=n.get(i)??uM();n.set(i,s),"outcome"in t?FU(s,e,t):NU(s,e,t)}function hb(n,e){Object.assign(n,e)}function UU(n,e){Object.assign(n,e??uM()),e?.labeled_event_counts?n.labeled_event_counts=DU(e.labeled_event_counts):delete n.labeled_event_counts}function BU(n){const e=hM(n);for(const t of n.frames)e.applyFrame(t);return n}function hM(n){const e=LU(ve(n,"kickoff"));let t=0;const i=cb(),s=cb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function Qm(n){return`${n.key}\0${n.value}`}function Ru(n){return n.map(Qm).join("")}function VU(n,e){e.sort((s,a)=>Qm(s).localeCompare(Qm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Ru(s.labels)===Ru(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Ru(s.labels).localeCompare(Ru(a.labels))))}function GU(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function $U(n){return n==="forward"||n==="reverse"||n==="side"?n:"other"}function WU(n){return n==="left"||n==="right"?n:"center"}function XU(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function KU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function qU(n,e,t,i){n.is_last_flick=i,n.time_since_last_flick=n.last_flick_time==null?null:Math.max(0,fM(t,n.last_flick_time)),n.frames_since_last_flick=n.last_flick_frame==null?null:Math.max(0,e-n.last_flick_frame)}function YU(n,e,t,i){VU(n,[{key:"confidence_band",value:e.confidence>=zU?"high":"standard"},{key:"kind",value:$U(e.kind)},{key:"direction",value:WU(e.direction)}]),n.count=XU(n),n.high_confidence_count=GU(n,"high"),n.is_last_flick=!0,n.last_flick_time=e.time,n.last_flick_frame=e.frame,n.time_since_last_flick=Math.max(0,fM(i,e.time)),n.frames_since_last_flick=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Np(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=Np(n.cumulative_setup_duration,e.setup_duration),n.cumulative_ball_speed_change=Np(n.cumulative_ball_speed_change,e.ball_speed_change)}function jU(n,e){Object.assign(n,e??pM()),e?.labeled_event_counts?n.labeled_event_counts=KU(e.labeled_event_counts):delete n.labeled_event_counts}function ZU(n){const e=mM(n);for(const t of n.frames)e.applyFrame(t);return n}function mM(n){const e=HU(ve(n,"flick"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)qU(o,a.frame_number,a.time,r===i);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function QU(n,e){n.count+=1,n.total_time_to_use+=e.time_since_reset,n.min_time_to_use=n.min_time_to_use===null?e.time_since_reset:Math.min(n.min_time_to_use,e.time_since_reset)}function eB(n,e){Object.assign(n,e??_M())}function tB(n){const e=gM(n);for(const t of n.frames)e.applyFrame(t);return n}function gM(n){const e=JU(ve(n,"flip_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function iB(n,e,t,i){n.is_last_half_volley=i,n.time_since_last_half_volley=n.last_half_volley_time==null?null:Math.max(0,vM(t,n.last_half_volley_time)),n.frames_since_last_half_volley=n.last_half_volley_frame==null?null:Math.max(0,e-n.last_half_volley_frame)}function sB(n,e,t,i){n.count+=1,n.total_ball_speed=yM(n.total_ball_speed,e.ball_speed),n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.last_half_volley_time=e.time,n.last_half_volley_frame=e.frame,n.time_since_last_half_volley=Math.max(0,vM(i,e.time)),n.frames_since_last_half_volley=Math.max(0,t-e.frame)}function aB(n,e){Object.assign(n,e??bM())}function _b(n,e){Object.assign(n,e)}function rB(n){const e=xM(n);for(const t of n.frames)e.applyFrame(t);return n}function xM(n){const e=nB(ve(n,"half_volley"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)iB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;te.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:Gi(e.player).localeCompare(Gi(t.player)))}function uB(n){return[...n].sort((e,t)=>e.resolved_frame!==t.resolved_frame?e.resolved_frame-t.resolved_frame:e.resolved_time!==t.resolved_time?e.resolved_time-t.resolved_time:e.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:Gi(e.player).localeCompare(Gi(t.player)))}function Up(){return{count:0,highConfidenceCount:0,lastTime:null,lastFrame:null,lastResolvedTime:null,lastResolvedFrame:null,lastQuality:null,bestQuality:0,cumulativeQuality:0,labeledCounts:{entries:[]}}}function oo(n){return Math.fround(n)}function dB(n,e){return oo(oo(n)+oo(e))}function hB(n,e){return{key:"confidence_band",value:n>=e?"high":"standard"}}function fB(n,e){const t=e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key)),i=n.entries.find(s=>s.labels.length===t.length&&s.labels.every((a,r)=>a.key===t[r]?.key&&a.value===t[r]?.value));if(i){i.count+=1;return}n.entries.push({labels:t,count:1}),n.entries.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels)))}function Oo(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Bp(n,e,t,i,s){n.count+=1,e.confidence>=s&&(n.highConfidenceCount+=1),fB(n.labeledCounts,[hB(e.confidence,s)]),n.lastTime=e.time,n.lastFrame=e.frame,n.lastResolvedTime=i,n.lastResolvedFrame=t,n.lastQuality=e.confidence,n.bestQuality=Math.max(n.bestQuality,e.confidence),n.cumulativeQuality=dB(n.cumulativeQuality,e.confidence)}function kg(n,e){return n?.lastTime==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,oo(oo(e.time)-oo(n.lastTime)))}function Og(n,e){return n?.lastFrame==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,e.frame_number-n.lastFrame)}function wM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_speed_flip=i,n.last_speed_flip_time=e?.lastTime??null,n.last_speed_flip_frame=e?.lastFrame??null,n.time_since_last_speed_flip=kg(e,t),n.frames_since_last_speed_flip=Og(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Oo(e.labeledCounts):delete n.labeled_event_counts}function SM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_half_flip=i,n.last_half_flip_time=e?.lastTime??null,n.last_half_flip_frame=e?.lastFrame??null,n.time_since_last_half_flip=kg(e,t),n.frames_since_last_half_flip=Og(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Oo(e.labeledCounts):delete n.labeled_event_counts}function TM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_wavedash=i,n.last_wavedash_time=e?.lastTime??null,n.last_wavedash_frame=e?.lastFrame??null,n.time_since_last_wavedash=kg(e,t),n.frames_since_last_wavedash=Og(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Oo(e.labeledCounts):delete n.labeled_event_counts}function pB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Oo(n.labeled_event_counts):delete e.labeled_event_counts,e}function mB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Oo(n.labeled_event_counts):delete e.labeled_event_counts,e}function _B(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Oo(n.labeled_event_counts):delete e.labeled_event_counts,e}function gB(n,e){if(e){Object.assign(n,e);return}wM(n,void 0,{frame_number:0,time:0},!1)}function yB(n,e){if(e){Object.assign(n,e);return}SM(n,void 0,{frame_number:0,time:0},!1)}function vB(n,e){if(e){Object.assign(n,e);return}TM(n,void 0,{frame_number:0,time:0},!1)}function bB(n){return n.is_live_play||n.ball_has_been_hit===!1}function xB(n){const e=MM(n);for(const t of n.frames)e.applyFrame(t);return n}function MM(n){const e=uB(ve(n,"speed_flip")),t=gb(ve(n,"half_flip")),i=gb(ve(n,"wavedash"));let s=0,a=0,r=0,o=null,l=null,c=null;const u=new Map,d=new Map,h=new Map,f=new Map,p=new Map,g=new Map;return{applyFrame(_){if(bB(_)){for(;swB.map(e=>({labels:[{key:"height_band",value:n},{key:"speed_band",value:e}],value:0}))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function Yu(n=!1){return{tracked_time:0,total_distance:0,speed_integral:0,time_slow_speed:0,time_boost_speed:0,time_supersonic_speed:0,time_on_ground:0,time_low_air:0,time_high_air:0,labeled_tracked_time:n?MB():{entries:[]}}}function EB(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function CB(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function AB(n,e,t){const i=CB(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=is(s.value,t):(n.entries.push({labels:i,value:ra(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function RB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),value:e.value}))}}function vb(n,e){const t=ra(e.dt);n.tracked_time=is(n.tracked_time,t),n.total_distance=is(n.total_distance,e.distance),n.speed_integral=is(n.speed_integral,TB(e.speed,t)),e.speed_band==="slow"?n.time_slow_speed=is(n.time_slow_speed,t):e.speed_band==="boost"?n.time_boost_speed=is(n.time_boost_speed,t):e.speed_band==="supersonic"&&(n.time_supersonic_speed=is(n.time_supersonic_speed,t)),e.height_band==="ground"?n.time_on_ground=is(n.time_on_ground,t):e.height_band==="low_air"?n.time_low_air=is(n.time_low_air,t):e.height_band==="high_air"&&(n.time_high_air=is(n.time_high_air,t));const i=n.labeled_tracked_time??{entries:[]};n.labeled_tracked_time=i,AB(i,[{key:"speed_band",value:e.speed_band},{key:"height_band",value:e.height_band}],t)}function zp(n,e){const t=e??Yu(!0),i=t.labeled_tracked_time;Object.assign(n,t,{labeled_tracked_time:i?RB(i):void 0}),i?.entries.length||delete n.labeled_tracked_time}function PB(n){const e=EM(n);for(const t of n.frames)e.applyFrame(t);return n}function EM(n){const e=EB(ve(n,"movement"));let t=0;const i=new Map,s=Yu(),a=Yu();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function LB(n,e,t,i){n.is_last_one_timer=i,n.time_since_last_one_timer=n.last_one_timer_time==null?null:Math.max(0,t-n.last_one_timer_time),n.frames_since_last_one_timer=n.last_one_timer_frame==null?null:Math.max(0,e-n.last_one_timer_frame)}function DB(n,e,t,i){n.count+=1,n.total_ball_speed+=e.ball_speed,n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.total_pass_distance+=e.pass_travel_distance,n.last_one_timer_time=e.time,n.last_one_timer_frame=e.frame,n.time_since_last_one_timer=Math.max(0,i-e.time),n.frames_since_last_one_timer=Math.max(0,t-e.frame)}function kB(n,e){Object.assign(n,e??CM())}function xb(n,e){Object.assign(n,e)}function OB(n){const e=AM(n);for(const t of n.frames)e.applyFrame(t);return n}function AM(n){const e=IB(ve(n,"one_timer"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)LB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.index-t.index}).map(({event:e})=>e)}function NB(n,e,t,i){n.is_last_completed_pass=i,n.time_since_last_completed_pass=n.last_completed_pass_time==null?null:Math.max(0,t-n.last_completed_pass_time),n.frames_since_last_completed_pass=n.last_completed_pass_frame==null?null:Math.max(0,e-n.last_completed_pass_frame)}function UB(n,e,t,i){n.completed_pass_count+=1,n.total_pass_distance+=e.ball_travel_distance,n.total_pass_advance+=e.ball_advance_distance,n.longest_pass_distance=Math.max(n.longest_pass_distance,e.ball_travel_distance),n.last_completed_pass_time=e.time,n.last_completed_pass_frame=e.frame,n.time_since_last_completed_pass=Math.max(0,i-e.time),n.frames_since_last_completed_pass=Math.max(0,t-e.frame)}function BB(n,e){Object.assign(n,e??e_())}function wb(n,e){Object.assign(n,e)}function zB(n){const e=RM(n);for(const t of n.frames)e.applyFrame(t);return n}function RM(n){const e=FB(ve(n,"pass"));let t=0,i=null;const s=new Map,a={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0},r={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0};return{applyFrame(o){for(const[l,c]of s)NB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function GB(n){return t_(n)}function $B(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function PM(n,e,t){const i=$B(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=ml(s.value,t):(n.entries.push({labels:i,value:Ll(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function WB(n,e){return n.key==="possession_state"&&n.value==="team_zero"?{key:"possession_state",value:e?"own":"opponent"}:n.key==="possession_state"&&n.value==="team_one"?{key:"possession_state",value:e?"opponent":"own"}:n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Sb(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)PM(t,i.labels.map(s=>WB(s,e)),i.value);return{tracked_time:n.tracked_time,possession_time:e?n.team_zero_time:n.team_one_time,opponent_possession_time:e?n.team_one_time:n.team_zero_time,neutral_time:n.neutral_time,labeled_time:t}}function XB(n,e){n.active=e.active,n.possessionState=e.possession_state}function KB(n,e,t){if(!e.active)return;const i=Ll(t.dt);n.tracked_time=ml(n.tracked_time,i),e.possessionState==="team_zero"?n.team_zero_time=ml(n.team_zero_time,i):e.possessionState==="team_one"?n.team_one_time=ml(n.team_one_time,i):n.neutral_time=ml(n.neutral_time,i);const s=[{key:"possession_state",value:e.possessionState}];e.fieldThird!=null&&s.push({key:"field_third",value:e.fieldThird}),e.fieldHalf!=null&&s.push({key:"field_half",value:e.fieldHalf}),PM(n.labeled_time,s,i)}function Tb(n,e){Object.assign(n,e??VB())}function qB(n){const e=IM(n);for(const t of n.frames)e.applyFrame(t);return n}function IM(n){const e=GB(ve(n,"possession")),t=t_(ve(n,"ball_third")),i=t_(ve(n,"ball_half"));let s=0,a=0,r=0;const o=HB(),l={active:!1,possessionState:"neutral",fieldThird:null,fieldHalf:null};return{applyFrame(c){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function ka(n,e){const t=eh(e.player),i=n.get(t)??LM();return n.set(t,i),i}function jB(n,e){switch(n.active_game_time=Xt(n.active_game_time,e.duration),e.state){case"tracked":n.tracked_time=Xt(n.tracked_time,e.duration);break;case"demolished":n.time_demolished=Xt(n.time_demolished,e.duration);break}}function ZB(n,e){switch(e.state){case"defensive":n.time_defensive_third=Xt(n.time_defensive_third,e.duration);break;case"neutral":n.time_neutral_third=Xt(n.time_neutral_third,e.duration);break;case"offensive":n.time_offensive_third=Xt(n.time_offensive_third,e.duration);break}}function JB(n,e){switch(e.state){case"defensive":n.time_defensive_half=Xt(n.time_defensive_half,e.duration);break;case"offensive":n.time_offensive_half=Xt(n.time_offensive_half,e.duration);break}}function QB(n,e){switch(e.state){case"behind_ball":n.time_behind_ball=Xt(n.time_behind_ball,e.duration);break;case"level_with_ball":n.time_level_with_ball=Xt(n.time_level_with_ball,e.duration);break;case"ahead_of_ball":n.time_in_front_of_ball=Xt(n.time_in_front_of_ball,e.duration);break}}function ez(n,e){switch(e.state){case"no_teammates":n.time_no_teammates=Xt(n.time_no_teammates,e.duration);break;case"most_back":n.time_most_back=Xt(n.time_most_back,e.duration);break;case"most_forward":n.time_most_forward=Xt(n.time_most_forward,e.duration);break;case"mid":n.time_mid_role=Xt(n.time_mid_role,e.duration);break;case"other":n.time_other_role=Xt(n.time_other_role,e.duration);break}}function tz(n,e,t){t.state.closest_to_ball_team&&(e.tracked_time=Xt(e.tracked_time,t.duration),e.time_closest_to_ball_team=Xt(e.time_closest_to_ball_team,t.duration),n.time_closest_to_ball_team=Xt(n.time_closest_to_ball_team,t.duration)),t.state.closest_to_ball_absolute&&(e.time_closest_to_ball_absolute=Xt(e.time_closest_to_ball_absolute,t.duration),n.time_closest_to_ball_absolute=Xt(n.time_closest_to_ball_absolute,t.duration)),t.state.farthest_from_ball&&(n.time_farthest_from_ball=Xt(n.time_farthest_from_ball,t.duration))}function nz(n,e){e.state==="shadowing"&&(n.time_shadow_defense=Xt(n.time_shadow_defense,e.duration))}function iz(n,e){Object.assign(n,e??LM())}function Mb(n,e){Object.assign(n,e??n_())}function Oa(n,e){const t=YB(n),i=new Array(t.length).fill(0);return{applyThroughFrame(s){for(let a=0;as.frame_number)break;const o=sz(r,s),l=o-i[a];l>0&&(i[a]=o,e({...r,duration:l}))}}}}function sz(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function az(n){const e=DM(n);for(const t of n.frames)e.applyFrame(t);return n}function DM(n){const e=new Map,t=n_(),i=n_(),s=[Oa(ve(n,"player_activity"),a=>jB(ka(e,a),a)),Oa(ve(n,"field_third"),a=>ZB(ka(e,a),a)),Oa(ve(n,"field_half"),a=>JB(ka(e,a),a)),Oa(ve(n,"ball_depth"),a=>QB(ka(e,a),a)),Oa(ve(n,"depth_role"),a=>ez(ka(e,a),a)),Oa(ve(n,"ball_proximity"),a=>tz(ka(e,a),a.is_team_0?t:i,a)),Oa(ve(n,"shadow_defense"),a=>nz(ka(e,a),a))];return{applyFrame(a){for(const r of s)r.applyThroughFrame(a);Mb(a.team_zero.positioning,t),Mb(a.team_one.positioning,i);for(const r of a.players)iz(r.positioning,e.get(eh(r.player_id))),rz(r.positioning,n,r.player_id)}}}function rz(n,e,t){const i=e.positioning_summary;if(!Array.isArray(i))return;const s=eh(t),a=i.find(r=>!r||typeof r!="object"?!1:eh(r.player_id)===s);a?.distance&&Object.assign(n,a.distance)}function Vp(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function _l(){return{total_duration:0,press_count:0}}function oz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function lz(n){return n.gameplay_phase==="active_play"||n.gameplay_phase==="kickoff_waiting_for_touch"}function Gp(n,e){Object.assign(n,e??_l())}function cz(n){const e=kM(n);for(const t of n.frames)e.applyFrame(t);return n}function kM(n){const e=oz(ve(n,"powerslide"));let t=0;const i=new Map,s=new Map,a=_l(),r=_l();return{applyFrame(o){const l=lz(o);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function fz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function OM(n,e,t){const i=fz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=gl(s.value,t):(n.entries.push({labels:i,value:Dl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function pz(n,e){return n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Eb(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)OM(t,i.labels.map(s=>pz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_half_time:e?n.team_zero_side_time:n.team_one_side_time,offensive_half_time:e?n.team_one_side_time:n.team_zero_side_time,neutral_time:n.neutral_time,labeled_time:t}}function mz(n,e){n.active=e.active,n.fieldHalf=e.field_half}function _z(n,e,t){if(!e.active)return;const i=Dl(t.dt);n.tracked_time=gl(n.tracked_time,i),e.fieldHalf==="team_zero_side"?n.team_zero_side_time=gl(n.team_zero_side_time,i):e.fieldHalf==="team_one_side"?n.team_one_side_time=gl(n.team_one_side_time,i):n.neutral_time=gl(n.neutral_time,i),OM(n.labeled_time,[{key:"field_half",value:e.fieldHalf}],i)}function Cb(n,e){Object.assign(n,e??dz())}function gz(n){const e=FM(n);for(const t of n.frames)e.applyFrame(t);return n}function FM(n){const e=hz(ve(n,"ball_half"));let t=0;const i=uz(),s={active:!1,fieldHalf:"neutral"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function xz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function NM(n,e,t){const i=xz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=yl(s.value,t):(n.entries.push({labels:i,value:kl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function wz(n,e){return n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:{...n}}function Ab(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)NM(t,i.labels.map(s=>wz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_third_time:e?n.team_zero_third_time:n.team_one_third_time,neutral_third_time:n.neutral_third_time,offensive_third_time:e?n.team_one_third_time:n.team_zero_third_time,labeled_time:t}}function Sz(n,e){n.active=e.active,n.fieldThird=e.field_third}function Tz(n,e,t){if(!e.active)return;const i=kl(t.dt);n.tracked_time=yl(n.tracked_time,i),e.fieldThird==="team_zero_third"?n.team_zero_third_time=yl(n.team_zero_third_time,i):e.fieldThird==="team_one_third"?n.team_one_third_time=yl(n.team_one_third_time,i):n.neutral_third_time=yl(n.neutral_third_time,i),NM(n.labeled_time,[{key:"field_third",value:e.fieldThird}],i)}function Rb(n,e){Object.assign(n,e??vz())}function Mz(n){const e=UM(n);for(const t of n.frames)e.applyFrame(t);return n}function UM(n){const e=bz(ve(n,"ball_third"));let t=0;const i=yz(),s={active:!1,fieldThird:"neutral_third"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Cz(n,e,t){n.session_count+=1,n.session_time=Pu(n.session_time,t.duration),n.offensive_half_time=Pu(n.offensive_half_time,t.offensive_half_time),n.offensive_third_time=Pu(n.offensive_third_time,t.offensive_third_time),n.longest_session_time=Math.max(n.longest_session_time,t.duration),n.average_session_time=n.session_count===0?0:ju(n.session_time/n.session_count),e.opponent_session_count+=1,e.opponent_session_time=Pu(e.opponent_session_time,t.duration),e.opponent_longest_session_time=Math.max(e.opponent_longest_session_time,t.duration)}function Ib(n,e){Object.assign(n,e)}function Az(n){const e=BM(n);for(const t of n.frames)e.applyFrame(t);return n}function BM(n){const e=Ez(ve(n,"territorial_pressure"));let t=0;const i=Pb(),s=Pb();return{applyFrame(a){for(;t=e[t].end_frame;){const r=e[t];Cz(r.team_is_team_0?i:s,r.team_is_team_0?s:i,r),t+=1}Ib(a.team_zero.territorial_pressure,i),Ib(a.team_one.territorial_pressure,s)}}}function Kr(n,e){return Math.fround(Math.fround(n)+Math.fround(e))}function zM(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function HM(){return{active_game_time:0,time_first_man:0,time_second_man:0,time_third_man:0,time_ambiguous_role:0,longest_first_man_stint_time:0,first_man_stint_count:0,became_first_man_count:0,lost_first_man_count:0,current_role_state:"unknown"}}function Lb(){return{first_man_changes_for_team:0,rotation_count:0}}function Db(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Rz(n,e,t,i,s){const a=n.stats;switch(a.active_game_time=Kr(a.active_game_time,t),a.current_role_state=e.state,e.state){case"first_man":{n.lastFirstManEndTime!==null&&e.time-n.lastFirstManEndTime<=s?n.currentFirstManStintTime=Kr(n.currentFirstManStintTime,t):(n.currentFirstManStintTime=t,a.first_man_stint_count+=1),n.lastFirstManEndTime=i,a.longest_first_man_stint_time=Math.max(a.longest_first_man_stint_time,n.currentFirstManStintTime),a.time_first_man=Kr(a.time_first_man,t);break}case"second_man":a.time_second_man=Kr(a.time_second_man,t);break;case"third_man":a.time_third_man=Kr(a.time_third_man,t);break;case"ambiguous":a.time_ambiguous_role=Kr(a.time_ambiguous_role,t);break}}function Pz(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function i_(n,e){const t=zM(e),i=n.get(t)??{currentFirstManStintTime:0,lastFirstManEndTime:null,stats:HM()};return n.set(t,i),i}function Iz(n,e,t){n.first_man_changes_for_team+=1,n.rotation_count+=1,i_(e,t.previous_first_man).stats.lost_first_man_count+=1,i_(e,t.next_first_man).stats.became_first_man_count+=1}function Lz(n,e){Object.assign(n,e??HM())}function kb(n,e){Object.assign(n,e)}function Dz(n){const e=VM(n);for(const t of n.frames)e.applyFrame(t);return n}function VM(n){const e=Db(ve(n,"rotation_role")),t=Db(ve(n,"first_man_change")),i=n.config.rotation_first_man_stint_end_grace_seconds,s=new Array(e.length).fill(0);let a=0;const r=new Map,o=Lb(),l=Lb();return{applyFrame(c){for(let u=0;uc.frame_number)break;const h=Pz(d,c),f=h-s[u];if(f>0){s[u]=h;const p=c.frame_number>=d.end_frame?d.end_time:Math.min(c.time,d.end_time);Rz(i_(r,d.player),d,f,p,i)}}for(;a({event:e,index:t})).sort((e,t)=>e.event.start_frame!==t.event.start_frame?e.event.start_frame-t.event.start_frame:e.event.start_time!==t.event.start_time?e.event.start_time-t.event.start_time:e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.index-t.index).map(({event:e})=>e)}function Oz(n,e){n.count+=1,e.attackers===2&&e.defenders===1?n.two_v_one_count+=1:e.attackers===2&&e.defenders===2?n.two_v_two_count+=1:e.attackers===2&&e.defenders===3?n.two_v_three_count+=1:e.attackers===3&&e.defenders===1?n.three_v_one_count+=1:e.attackers===3&&e.defenders===2?n.three_v_two_count+=1:e.attackers===3&&e.defenders===3&&(n.three_v_three_count+=1)}function Fb(n,e){Object.assign(n,e)}function Fz(n){const e=GM(n);for(const t of n.frames)e.applyFrame(t);return n}function GM(n){const e=kz(ve(n,"rush"));let t=0;const i=Ob(),s=Ob(),a=n.config.rush_min_possession_retained_seconds;return{applyFrame(r){for(;t=e[t].start_frame&&r.time-e[t].start_time>=a;){const o=e[t];Oz(o.is_team_0?i:s,o),t+=1}Fb(r.team_zero.rush,i),Fb(r.team_one.rush,s)}}}const Nz=["control","hard_hit","medium_hit"],Uz=["ground","high_air","low_air"],Bz=["air","ground","wall"],zz=["dodge","no_dodge"];function lo(n){return Math.fround(n)}function Zu(n,e){return lo(lo(n)+lo(e))}function $M(n,e){return lo(lo(n)-lo(e))}function $p(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function Hz(){return{entries:zz.flatMap(n=>Uz.flatMap(e=>Nz.flatMap(t=>Bz.map(i=>({labels:[{key:"dodge_state",value:n},{key:"height_band",value:e},{key:"kind",value:t},{key:"surface",value:i}],count:0}))))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function WM(){return{touch_count:0,control_touch_count:0,medium_hit_count:0,hard_hit_count:0,aerial_touch_count:0,high_aerial_touch_count:0,wall_touch_count:0,first_touch_count:0,is_last_touch:!1,last_touch_time:null,last_touch_frame:null,time_since_last_touch:null,frames_since_last_touch:null,last_ball_speed_change:null,max_ball_speed_change:0,cumulative_ball_speed_change:0,total_ball_travel_distance:0,total_ball_advance_distance:0,total_ball_retreat_distance:0,labeled_touch_counts:Hz()}}const Vz=WM();function Nb(){return{stats:WM(),labeledCountsVersion:0,labeledCountsSnapshot:void 0,labeledCountsSnapshotVersion:-1}}function Gz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function $z(n,e){e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key));const t=n.labeled_touch_counts?.entries??[];n.labeled_touch_counts={entries:t};const i=t.find(s=>s.labels.length===e.length&&s.labels.every((a,r)=>a.key===e[r]?.key&&a.value===e[r]?.value));i?i.count+=1:(t.push({labels:e,count:1}),t.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels))))}function Wz(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Iu(n,e){return n.tags?.find(t=>t.group===e)?.value??null}function Xz(n,e,t){const i=Iu(e,"kind")??"control",s=Iu(e,"height_band")??"ground",a=Iu(e,"surface")??"ground",r=Iu(e,"dodge_state")??"no_dodge",o=n.stats;o.touch_count+=1,i==="control"?o.control_touch_count+=1:i==="medium_hit"?o.medium_hit_count+=1:i==="hard_hit"&&(o.hard_hit_count+=1),s==="low_air"?o.aerial_touch_count+=1:s==="high_air"&&(o.aerial_touch_count+=1,o.high_aerial_touch_count+=1),a==="wall"&&(o.wall_touch_count+=1),$z(o,[{key:"kind",value:i},{key:"height_band",value:s},{key:"surface",value:a},{key:"dodge_state",value:r}]),n.labeledCountsVersion+=1,o.last_touch_time=e.time,o.last_touch_frame=e.frame,o.time_since_last_touch=Math.max(0,$M(t.time,e.time)),o.frames_since_last_touch=Math.max(0,t.frame_number-e.frame),o.last_ball_speed_change=e.ball_speed_change,o.max_ball_speed_change=Math.max(o.max_ball_speed_change,e.ball_speed_change),o.cumulative_ball_speed_change=Zu(o.cumulative_ball_speed_change,e.ball_speed_change)}function Kz(n){return n.labeledCountsSnapshotVersion!==n.labeledCountsVersion&&(n.labeledCountsSnapshot=n.stats.labeled_touch_counts?Wz(n.stats.labeled_touch_counts):void 0,n.labeledCountsSnapshotVersion=n.labeledCountsVersion),n.labeledCountsSnapshot}function qz(n,e){if(!e){Object.assign(n,Vz);return}Object.assign(n,e.stats,{labeled_touch_counts:Kz(e)})}function Yz(n){const e=XM(n);for(const t of n.frames)e.applyFrame(t);return n}function XM(n){const e=Gz(ve(n,"touch")),t=e.flatMap(o=>o.ball_movement?[{player:o.player,movement:o.ball_movement}]:[]).sort((o,l)=>o.movement.end_frame!==l.movement.end_frame?o.movement.end_frame-l.movement.end_frame:o.movement.end_time-l.movement.end_time);let i=0,s=0,a=null;const r=new Map;return{applyFrame(o){if(!o.is_live_play)a=null;else{for(const l of r.values()){const c=l.stats;c.is_last_touch=!1,c.last_touch_time!=null&&(c.time_since_last_touch=Math.max(0,$M(o.time,c.last_touch_time))),c.last_touch_frame!=null&&(c.frames_since_last_touch=Math.max(0,o.frame_number-c.last_touch_frame))}for(;i({event:e,index:t})).sort((e,t)=>e.event.resolved_frame!==t.event.resolved_frame?e.event.resolved_frame-t.event.resolved_frame:e.event.resolved_time!==t.event.resolved_time?e.event.resolved_time-t.event.resolved_time:e.index-t.index).map(({event:e})=>e)}function Jz(n,e,t){n.is_last_whiff=!1,n.time_since_last_whiff=n.last_whiff_time==null?null:Math.max(0,t-n.last_whiff_time),n.frames_since_last_whiff=n.last_whiff_frame==null?null:Math.max(0,e-n.last_whiff_frame)}function Qz(n,e,t,i){if((e.kind??"whiff")==="beaten_to_ball"){n.beaten_to_ball_count+=1;return}n.whiff_count+=1,e.aerial?n.aerial_whiff_count+=1:n.grounded_whiff_count+=1,e.dodge_active&&(n.dodge_whiff_count+=1),n.is_last_whiff=!0,n.last_whiff_time=e.time,n.last_whiff_frame=e.frame,n.time_since_last_whiff=Math.max(0,i-e.time),n.frames_since_last_whiff=Math.max(0,t-e.frame),n.last_closest_approach_distance=e.closest_approach_distance,n.best_closest_approach_distance=n.best_closest_approach_distance==null?e.closest_approach_distance:Math.min(n.best_closest_approach_distance,e.closest_approach_distance),n.cumulative_closest_approach_distance+=e.closest_approach_distance}function Ub(n,e){Object.assign(n,e??s_())}function eH(n){const e=KM(n);for(const t of n.frames)e.applyFrame(t);return n}function KM(n){const e=Zz(ve(n,"whiff"));let t=0,i=null;const s=new Map,a=new Map;return{applyFrame(r){if(r.is_live_play){for(const o of s.values())Jz(o,r.frame_number,r.time);for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function iH(n,e,t,i){n.is_last_wall_aerial=i,n.time_since_last_wall_aerial=n.last_wall_aerial_time==null?null:Math.max(0,qM(t,n.last_wall_aerial_time)),n.frames_since_last_wall_aerial=n.last_wall_aerial_frame==null?null:Math.max(0,e-n.last_wall_aerial_frame)}function sH(n,e,t,i){n.count+=1,e.confidence>=tH&&(n.high_confidence_count+=1),n.is_last_wall_aerial=!0,n.last_wall_aerial_time=e.time,n.last_wall_aerial_frame=e.frame,n.time_since_last_wall_aerial=Math.max(0,qM(i,e.time)),n.frames_since_last_wall_aerial=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Lu(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=Lu(n.cumulative_setup_duration,e.setup_duration),n.cumulative_takeoff_to_touch_time=Lu(n.cumulative_takeoff_to_touch_time,e.time_since_takeoff),n.cumulative_touch_height=Lu(n.cumulative_touch_height,e.player_position[2]??0)}function aH(n,e){Object.assign(n,e??YM())}function rH(n){const e=jM(n);for(const t of n.frames)e.applyFrame(t);return n}function jM(n){const e=nH(ve(n,"wall_aerial"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)iH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function cH(n,e,t,i){n.is_last_wall_aerial_shot=i,n.time_since_last_wall_aerial_shot=n.last_wall_aerial_shot_time==null?null:Math.max(0,ZM(t,n.last_wall_aerial_shot_time)),n.frames_since_last_wall_aerial_shot=n.last_wall_aerial_shot_frame==null?null:Math.max(0,e-n.last_wall_aerial_shot_frame)}function uH(n,e,t,i){n.count+=1,e.confidence>=oH&&(n.high_confidence_count+=1),n.is_last_wall_aerial_shot=!0,n.last_wall_aerial_shot_time=e.time,n.last_wall_aerial_shot_frame=e.frame,n.time_since_last_wall_aerial_shot=Math.max(0,ZM(i,e.time)),n.frames_since_last_wall_aerial_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Xp(n.cumulative_confidence,e.confidence),n.cumulative_takeoff_to_shot_time=Xp(n.cumulative_takeoff_to_shot_time,e.time_since_takeoff),n.cumulative_shot_height=Xp(n.cumulative_shot_height,e.player_position[2]??0)}function dH(n,e){Object.assign(n,e??JM())}function hH(n){const e=QM(n);for(const t of n.frames)e.applyFrame(t);return n}function QM(n){const e=lH(ve(n,"wall_aerial_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)cH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{let r=!1;for(;t[f.frame_number,p])),a=new Map,r={...n,frames:[]},o=_H.flatMap(f=>f.createFrameAccumulator?[f.createFrameAccumulator(r)]:[]),l=Math.max(1,t.materializationChunkSize??fH),c=Math.max(l,t.maxMaterializationChunkSize??pH);let u=-1,d=l;const h=f=>{if(f<=u)return;const p=Math.min(i.length-1,Math.max(f,u+d));for(let g=u+1;g<=p;g+=1){const _=i[g],m=_?bH(vH(_)):void 0;if(m){for(const v of o)v.applyFrame(m);a.set(m.frame_number,m)}}u=p,d=Math.min(c,i.length,d*mH)};return{get(f){const p=s.get(f);if(p!==void 0)return h(p),a.get(f)}}}function yH(n){return!n||typeof n!="object"?n:{...n}}function vH(n){return{...n,team_zero:{...n.team_zero},team_one:{...n.team_one},players:n.players.map(e=>({...e,player_id:yH(e.player_id)}))}}function bH(n){return{...n,team_zero:Yl(n.team_zero??{}),team_one:Yl(n.team_one??{}),players:n.players.map(t=>eE(t))}}function jl(n){return n.events?.events??[]}function ve(n,e){return jl(n).filter(t=>t.payload.kind===e).map(t=>t.payload.payload)}const xH=new Set(["is_team_0","name","player_id"]);function Hb(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0}function wH(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.keys(n).every(e=>xH.has(e))}function SH(n){return Hb(n.team_zero)&&Hb(n.team_one)&&n.players.every(e=>wH(e))}function TH(n){return new Map(BT(n).frames.map(e=>[e.frame_number,e]))}function MH(n,e,t){const i=n.frames.filter(s=>SH(s)).length;if(i===n.frames.length)return gH(n,e,t);if(i>0)throw new Error("stats timeline frames must be either all compact scaffolds or all materialized snapshots");return TH(n)}function zt(n,e){return n.get(e)??null}const Ng=[{stage:"validating",index:1,total:9,label:"Parse replay",start:0,end:.08},{stage:"processing",index:2,total:9,label:"Process replay frames",start:.08,end:.62},{stage:"building-stats",index:3,total:9,label:"Build stats events",start:.62,end:.7},{stage:"serializing-replay",index:4,total:9,label:"Serialize replay data",start:.7,end:.76},{stage:"serializing-stats",index:5,total:9,label:"Serialize stats timeline",start:.76,end:.86},{stage:"normalizing",index:6,total:9,label:"Normalize replay model",start:.86,end:.91},{stage:"decoding-replay",index:7,total:9,label:"Decode replay data",start:.91,end:.94},{stage:"decoding-stats",index:8,total:9,label:"Decode stats chunks",start:.94,end:.96},{stage:"deriving-stats",index:9,total:9,label:"Derive stats snapshots",start:.96,end:1}];function tE(n){return Math.max(0,Math.min(1,n))}function Kp(n,e,t){if(n!==void 0)return tE((n-e)/(t-e))}function Ug(n){if(n.stage!=="stats-timeline")return n;const e=n.progress;return e===void 0?{...n,stage:"building-stats"}:e<.35?{...n,stage:"building-stats",progress:Kp(e,0,.35)}:e<.55?{...n,stage:"serializing-replay",progress:Kp(e,.35,.55)}:{...n,stage:"serializing-stats",progress:Kp(e,.55,.92)}}function nE(n){const e=Ug(n);return Ng.find(t=>t.stage===e.stage)}function EH(){return Ng.map(({stage:n,index:e,total:t,label:i})=>({stage:n,index:e,total:t,label:i}))}function CH(n){const e=nE(n);return{stage:e.stage,index:e.index,total:e.total,label:e.label}}function AH(n){const e=Ug(n),t=nE(e);return Ng.map(({stage:i,index:s,total:a,label:r})=>{if(st.index)return{stage:i,index:s,total:a,label:r,state:"pending",completion:0,indeterminate:!1};const o=e.progress!==void 0;return{stage:i,index:s,total:a,label:r,state:"active",completion:o?tE(e.progress??0):1,indeterminate:!o}})}function tf(n){const e=Ug(n),t=e.progress===void 0?null:Math.round(e.progress*100);switch(e.stage){case"validating":return"Parsing replay...";case"processing":return t!==null&&e.totalFrames!==void 0?`Processing replay frames... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:"Processing replay frames...";case"building-stats":return t!==null?e.totalFrames!==void 0?`Building stats events... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:`Building stats events... ${t}%`:"Building stats events...";case"serializing-replay":return t!==null?`Serializing replay data... ${t}%`:"Serializing replay data...";case"serializing-stats":return t!==null?`Serializing stats timeline... ${t}%`:"Serializing stats timeline...";case"decoding-replay":return t!==null?`Decoding replay data... ${t}%`:"Decoding replay data...";case"decoding-stats":return t!==null?e.totalChunks!==void 0?`Decoding stats chunks... ${t}% (${e.processedChunks??0}/${e.totalChunks})`:`Decoding stats chunks... ${t}%`:"Decoding stats chunks...";case"deriving-stats":return t!==null?`Deriving stats snapshots... ${t}%`:"Deriving stats snapshots...";case"normalizing":return t!==null?`Normalizing replay model... ${t}%`:"Normalizing replay model...";default:return"Loading replay..."}}function RH(n){return n instanceof Error?n:new Error(String(n))}function Rs(n,e){return JSON.parse(n.decode(new Uint8Array(e)))}async function PH(n,e,t){t?.({stage:"decoding-stats",progress:0});const i=Rs(n,e.configBuffer);t?.({stage:"decoding-stats",progress:.05}),await Za();const s=Rs(n,e.replayMetaBuffer);t?.({stage:"decoding-stats",progress:.1}),await Za();const a=Rs(n,e.eventsBuffer),r=Rs(n,e.activitySummaryBuffer),o=Rs(n,e.positioningSummaryBuffer),l=Rs(n,e.accumulationTracksBuffer);t?.({stage:"decoding-stats",progress:.15}),await Za();const c=[],u=e.frameChunkBuffers.length;for(let d=0;d{let t=!1,i=null;const s=()=>{t||(t=!0,i!==null&&clearTimeout(i),e())};i=setTimeout(s,n),requestAnimationFrame(()=>s())})}async function iE(n,e={}){if(typeof Worker>"u")throw new Error("Replay loading worker is not available in this environment");const t=new Worker(new URL(""+new URL("replayLoader.worker-D3pjMe81.js",import.meta.url).href,import.meta.url),{type:"module"}),i=n.slice(),s=e.reportEveryNFrames??100;return new Promise((a,r)=>{const o=()=>{t.terminate()};t.onmessage=async c=>{const u=c.data;if(u.type==="progress"){e.onProgress?.(u.progress);return}if(u.type==="error"){o(),r(new Error(u.error));return}o();try{const d=new TextDecoder;e.onProgress?.({stage:"decoding-replay",progress:0}),await Za();const h=Rs(d,u.replayBuffer);e.onProgress?.({stage:"decoding-replay",progress:.5}),await Za();const f=Rs(d,u.rawReplayBuffer);e.onProgress?.({stage:"decoding-replay",progress:1}),await Za();const p=await PH(d,u.statsTimelineParts,e.onProgress),g=MH(p);a({replay:h,raw:f,statsTimeline:p,statsFrameLookup:g})}catch(d){r(RH(d))}},t.onerror=c=>{o(),r(new Error(c.message||"Replay loading worker failed"))};const l={type:"load-replay",bytes:i.buffer,reportEveryNFrames:s};t.postMessage(l,[i.buffer])})}function IH(n){const e=document.createElement("div");e.className="replay-load-modal",e.hidden=!0;const t=document.createElement("div");t.className="replay-load-modal__dialog",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","replay-load-modal-title");const i=document.createElement("p");i.className="replay-load-modal__eyebrow",i.textContent="Replay loading";const s=document.createElement("h2");s.id="replay-load-modal-title",s.className="replay-load-modal__title",s.textContent="Preparing replay pipeline";const a=document.createElement("p");a.className="replay-load-modal__status",a.textContent="Preparing replay...";const r=document.createElement("div");r.className="replay-load-modal__phase-list";const o=new Map;for(const f of EH()){const p=document.createElement("div");p.className="replay-load-modal__phase-row",p.dataset.state="pending";const g=document.createElement("p");g.className="replay-load-modal__phase-label",g.textContent=`${f.index}. ${f.label}`;const _=document.createElement("div");_.className="replay-load-modal__phase-bar";const m=document.createElement("div");m.className="replay-load-modal__phase-fill",m.dataset.indeterminate="false",_.append(m),p.append(g,_),r.append(p),o.set(f.stage,{row:p,fill:m})}const l=document.createElement("p");l.className="replay-load-modal__meta",t.append(i,s,a,r,l),e.append(t),n.append(e);let c="";const u=()=>{for(const{row:f,fill:p}of o.values())f.dataset.state="pending",p.style.width="0%",p.dataset.indeterminate="false"},d=f=>{for(const p of AH(f)){const g=o.get(p.stage);g&&(g.row.dataset.state=p.state,g.fill.dataset.indeterminate=p.indeterminate?"true":"false",g.fill.style.width=`${Math.round(p.completion*100)}%`)}},h=f=>{e.hidden=!f};return{show(f,p="Preparing replay..."){c=f,h(!0),u(),s.textContent="Preparing replay pipeline",a.textContent=p,l.textContent=`Loading ${f}`},update(f){h(!0);const p=CH(f);if(d(f),s.textContent=`Phase ${p.index} of ${p.total}: ${p.label}`,a.textContent=tf(f),f.stage==="processing"&&f.totalFrames!==void 0){l.textContent=`${f.processedFrames??0}/${f.totalFrames} frames`;return}if(f.stage==="decoding-stats"&&f.totalChunks!==void 0){l.textContent=`${f.processedChunks??0}/${f.totalChunks} chunks`;return}l.textContent=c?`Loading ${c}`:""},hide(){h(!1)},destroy(){e.remove()}}}const LH=["free","follow"];function sE(n){return n.useReplayBallCam??!1?"player":n.ballCamEnabled?"on":"off"}function Vb(n){return n.useReplayBallCam?"player":n.ballCam===!0?"on":n.ballCam===!1?"off":"player"}const aE={fov:110,height:100,pitch:-4,distance:270,stiffness:0,swivelSpeed:1,transitionSpeed:1};class Bg{constructor(e){this.options=e}lastFreeCameraPreset=null;get freeCameraPreset(){return this.lastFreeCameraPreset}set freeCameraPreset(e){this.lastFreeCameraPreset=e}ballCamModeValue="player";get ballCamMode(){return this.ballCamModeValue}autoPossessionEnabledValue=!1;get autoPossessionEnabled(){return this.autoPossessionEnabledValue}static ballCamEnabledForMode(e){return e==="player"?null:e==="on"}followPlayerWithReplayCamera(e,t={}){const i=this.options.getReplayPlayer();i&&(t.preserveAutoPossession||this.setAutoPossessionEnabled(!1,{requestConfigSync:!1}),i.setAttachedPlayer(e),i.setCameraViewMode("follow"),t.usePlayerCameraSettings!==!1&&i.setCustomCameraSettings(null),this.setBallCamMode(t.ballCam??"player"),this.lastFreeCameraPreset=null,t.requestConfigSync!==!1&&this.options.requestConfigSync())}setAutoPossessionEnabled(e,t={}){if(this.autoPossessionEnabledValue===e){this.renderAutoPossessionButton();return}this.autoPossessionEnabledValue=e,this.renderAutoPossessionButton(),t.notify!==!1&&this.options.onAutoPossessionChange?.(e),t.requestConfigSync!==!1&&this.options.requestConfigSync()}renderBallCamButtons(){const{ballCamOffButton:e,ballCamOnButton:t,ballCamPlayerButton:i}=this.options.elements,s=[["off",e],["on",t],["player",i]];for(const[a,r]of s){const o=a===this.ballCamModeValue;r.dataset.active=o?"true":"false",r.setAttribute("aria-pressed",o?"true":"false")}}renderAutoPossessionButton(){this.options.elements.cameraViewAutoPossession.checked=this.autoPossessionEnabledValue}disableAutoPossessionForManualCameraControl(){this.setAutoPossessionEnabled(!1,{requestConfigSync:!1})}setBallCamMode(e){this.ballCamModeValue=e,this.options.getReplayPlayer()?.setBallCamEnabled(Bg.ballCamEnabledForMode(e)),this.renderBallCamButtons()}get nameplateLiftUu(){const e=Number(this.options.elements.nameplateLift.value);return Number.isFinite(e)?e:Um}applyNameplateLiftUu(e){const{nameplateLift:t,nameplateLiftReadout:i}=this.options.elements,s=e??Um;t.value=`${s}`,i.textContent=qn(s,"",0)}installEventListeners(e){const{elements:t}=this.options;t.usePlayerCameraSettings.addEventListener("change",()=>{const s=t.usePlayerCameraSettings.checked;t.cameraSettingsControls.hidden=s,this.options.getReplayPlayer()?.setCustomCameraSettings(s?null:this.readCustomCameraSettings()),this.options.requestConfigSync()},{signal:e});for(const s of[t.customCameraFov,t.customCameraHeight,t.customCameraPitch,t.customCameraDistance,t.customCameraStiffness,t.customCameraSwivelSpeed,t.customCameraTransitionSpeed])s.addEventListener("input",()=>{const a=this.readCustomCameraSettings();this.syncCustomCameraSettingControls(a),this.options.getReplayPlayer()?.setCustomCameraSettings(a),this.options.requestConfigSync()},{signal:e});t.attachedPlayer.addEventListener("change",()=>{const s=this.options.getReplayPlayer(),a=t.attachedPlayer.value||null;this.disableAutoPossessionForManualCameraControl(),s?.setAttachedPlayer(a),a&&(s?.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFreeButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setCameraViewMode("free"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFollowButton.addEventListener("click",()=>{const s=this.options.getReplayPlayer();this.disableAutoPossessionForManualCameraControl(),s?.setCameraViewMode("follow"),s?.getState().attachedPlayerId&&(s.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewOverheadButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("overhead"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="overhead",this.options.requestConfigSync()},{signal:e}),t.cameraViewSideButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("side"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="side",this.options.requestConfigSync()},{signal:e});const i=[["off",t.ballCamOffButton],["on",t.ballCamOnButton],["player",t.ballCamPlayerButton]];for(const[s,a]of i)a.addEventListener("click",()=>{this.setBallCamMode(s),this.options.requestConfigSync()},{signal:e});t.cameraViewAutoPossession.addEventListener("change",()=>{this.setAutoPossessionEnabled(t.cameraViewAutoPossession.checked)},{signal:e}),t.nameplateLift.addEventListener("input",()=>{t.nameplateLiftReadout.textContent=qn(this.nameplateLiftUu,"",0),this.options.requestConfigSync()},{signal:e})}setTransportEnabled(e,t){this.options.elements.attachedPlayer.disabled=!e,this.syncModeButtons(e?t:void 0)}syncState(e){const{elements:t}=this.options;t.usePlayerCameraSettings.checked=e.customCameraSettings===null,t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,this.syncCustomCameraSettingControls(e.customCameraSettings??this.getFallbackCameraSettings()),this.ballCamModeValue=sE(e),this.renderBallCamButtons(),t.attachedPlayer.value=e.attachedPlayerId??"",this.syncAvailability(e),this.renderProfile(e)}syncAvailability(e){this.syncModeButtons(e);const i=this.options.getReplayPlayer()!==null&&e?.cameraViewMode==="follow"&&(e.attachedPlayerId??null)!==null;this.options.elements.usePlayerCameraSettings.disabled=!i,this.setCameraSettingControlsEnabled(i&&e?.customCameraSettings!==null),this.options.elements.ballCamOffButton.disabled=!i,this.options.elements.ballCamOnButton.disabled=!i,this.options.elements.ballCamPlayerButton.disabled=!i,this.renderBallCamButtons()}syncModeButtons(e){const t=e?.cameraViewMode??"free",i=this.options.getReplayPlayer()!==null&&e!==void 0,s=(e?.attachedPlayerId??null)!==null;for(const l of LH){const c=this.getCameraViewButton(l);c.disabled=!i||l==="follow"&&!s;const u=l===t;c.dataset.active=u?"true":"false",c.setAttribute("aria-pressed",u?"true":"false")}const{cameraViewOverheadButton:a,cameraViewSideButton:r}=this.options.elements,{cameraViewAutoPossession:o}=this.options.elements;a.disabled=!i,r.disabled=!i,o.disabled=!i,a.dataset.active="false",r.dataset.active="false",this.renderAutoPossessionButton(),a.setAttribute("aria-pressed","false"),r.setAttribute("aria-pressed","false")}populateAttachedPlayerOptions(e){const{attachedPlayer:t}=this.options.elements;t.replaceChildren(),t.append(new Option("Free camera",""));for(const i of e)t.append(new Option(`${i.name} (${i.isTeamZero?"Blue":"Orange"})`,i.id))}renderProfile(e){const t=this.options.elements,i=this.options.getReplayPlayer(),s=e?.attachedPlayerId??null;if(!i||e?.cameraViewMode!=="follow"||s===null){this.renderEmptyProfile("Free camera");return}const a=i.replay.players.find(o=>o.id===s);if(!a){this.renderEmptyProfile("Unknown");return}const r=this.getEffectiveCameraSettings(e);t.cameraProfileReadout.textContent=e.customCameraSettings===null?a.name:`${a.name} custom`,t.cameraFovReadout.textContent=qn(r.fov,"",0),t.cameraHeightReadout.textContent=qn(r.height,"",0),t.cameraPitchReadout.textContent=qn(r.pitch,"",0),t.cameraBaseDistanceReadout.textContent=qn(r.distance,"",0),t.cameraStiffnessReadout.textContent=qn(r.stiffness,"",2)}getFallbackCameraSettings(){return aE}getAttachedPlayerCameraSettings(e){const t=this.options.getReplayPlayer();return!t||e===null?null:t.replay.players.find(i=>i.id===e)?.cameraSettings??null}getEffectiveCameraSettings(e){return{...this.getFallbackCameraSettings(),...this.getAttachedPlayerCameraSettings(e.attachedPlayerId)??{},...e.customCameraSettings??{}}}readCustomCameraSettings(){const e=this.options.elements;return{fov:Number(e.customCameraFov.value),height:Number(e.customCameraHeight.value),pitch:Number(e.customCameraPitch.value),distance:Number(e.customCameraDistance.value),stiffness:Number(e.customCameraStiffness.value),swivelSpeed:Number(e.customCameraSwivelSpeed.value),transitionSpeed:Number(e.customCameraTransitionSpeed.value)}}setCameraSettingControlsEnabled(e){const t=this.options.elements;t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,t.customCameraFov.disabled=!e,t.customCameraHeight.disabled=!e,t.customCameraPitch.disabled=!e,t.customCameraDistance.disabled=!e,t.customCameraStiffness.disabled=!e,t.customCameraSwivelSpeed.disabled=!e,t.customCameraTransitionSpeed.disabled=!e}syncCustomCameraSettingControls(e){const t=this.options.elements,i=this.getFallbackCameraSettings(),s=e.fov??i.fov,a=e.height??i.height,r=e.pitch??i.pitch,o=e.distance??i.distance,l=e.stiffness??i.stiffness,c=e.swivelSpeed??i.swivelSpeed,u=e.transitionSpeed??i.transitionSpeed;t.customCameraFov.value=`${s}`,t.customCameraHeight.value=`${a}`,t.customCameraPitch.value=`${r}`,t.customCameraDistance.value=`${o}`,t.customCameraStiffness.value=`${l}`,t.customCameraSwivelSpeed.value=`${c}`,t.customCameraTransitionSpeed.value=`${u}`,t.customCameraFovReadout.textContent=qn(s,"",0),t.customCameraHeightReadout.textContent=qn(a,"",0),t.customCameraPitchReadout.textContent=qn(r,"",0),t.customCameraDistanceReadout.textContent=qn(o,"",0),t.customCameraStiffnessReadout.textContent=qn(l,"",2),t.customCameraSwivelSpeedReadout.textContent=qn(c,"",1),t.customCameraTransitionSpeedReadout.textContent=qn(u,"",2)}getCameraViewButton(e){switch(e){case"free":return this.options.elements.cameraViewFreeButton;case"follow":return this.options.elements.cameraViewFollowButton}}renderEmptyProfile(e){const t=this.options.elements;t.cameraProfileReadout.textContent=e,t.cameraFovReadout.textContent="--",t.cameraHeightReadout.textContent="--",t.cameraPitchReadout.textContent="--",t.cameraBaseDistanceReadout.textContent="--",t.cameraStiffnessReadout.textContent="--"}}function qn(n,e="",t=0){return n===void 0||Number.isNaN(n)?"--":`${n.toFixed(t)}${e}`}function DH(n){return new Bg(n)}const Gb="subtr-actor-touch-overlay-styles",zg=5882879,Hg=16761180,$b=120,Wb=4,kH=196,qp=24,Xb=210,Kb=5,OH=.1,FH=48,NH=["team","intention","kind","height_band","surface","dodge_state","flag"],UH=[{label:"Blue team",color:zg},{label:"Orange team",color:Hg}],rE=[{label:"Shot",color:16711880},{label:"Save",color:58998},{label:"Clear",color:16764928},{label:"Boom",color:16020150},{label:"Pass",color:47103},{label:"Control",color:0},{label:"Advance",color:16486972}],Ju=[{label:"Control",color:0},{label:"Medium hit",color:16436245},{label:"Hard hit",color:16735596}],Qu=[{label:"Ground",color:10741301},{label:"Low air",color:3718648},{label:"High air",color:8490232}],oE=[{label:"Ground",color:8702998},{label:"Air",color:6333946},{label:"Wall",color:16347926}],a_=[{label:"No dodge",color:9741240},{label:"Dodge",color:15235577}],r_=[{label:"First touch",color:16777215},{label:"Contested",color:15680580}],BH=[{title:"Team",entries:UH},{title:"Intention",entries:rE},{title:"Hit strength",entries:Ju},{title:"Height",entries:Qu},{title:"Surface",entries:oE},{title:"Dodge",entries:a_},{title:"Flags",entries:r_}];function fc(n){return Object.fromEntries(n.map(e=>[e.label.toLowerCase().replaceAll(" ","_"),e.color]))}const lE=fc(rE),cE={...fc(Ju),medium_hit:Ju[1].color,hard_hit:Ju[2].color},uE={...fc(Qu),low_air:Qu[1].color,high_air:Qu[2].color},dE=fc(oE),hE={...fc(a_),no_dodge:a_[0].color},o_={first_touch:r_[0].color,contested:r_[1].color},Vi=10134961;function jn(n,e){const t=n.tags;if(!Array.isArray(t))return null;const i=t.find(s=>s.group===e);return i?i.value:null}function fE(n){return jn(n,"possession")??jn(n,"action")}function At(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function Yp(n,e){return Math.max(0,n-e)}function ed(n){return n==="team"||n==="intention"||n==="kind"||n==="height_band"||n==="surface"||n==="dodge_state"||n==="flag"}function ho(n){const e=Array.isArray(n)?n:n?[n]:["team"],t=new Set,i=[];for(const s of e)ed(s)&&!t.has(s)&&(t.add(s),i.push(s));return i.length>0?i:["team"]}function pE(n){return n[n.length-1]??"team"}function zH(n,e,t){const i=HH(n,pE(t)),s=i?` · ${i.replaceAll("_"," ")}`:"";if(e==="markers")return`${n.playerName}${s}`;const a=Math.round(n.totalBallAdvanceDistance),r=Math.round(n.totalBallRetreatDistance);return a>0&&r>0?`${n.playerName} +${a} / -${r} uu${s}`:r>0?`${n.playerName} -${r} uu${s}`:`${n.playerName} +${a} uu${s}`}function HH(n,e){return e==="intention"?n.intention:e==="kind"?n.kind:e==="height_band"?n.heightBand:e==="surface"?n.surface:e==="dodge_state"?n.dodgeState:e==="flag"?n.contested?"contested":n.firstTouch?"first_touch":null:null}function VH(n){return n.split("_").filter(Boolean).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function sl(n,e,t){return typeof e!="string"||e.length===0?null:{key:n,value:e,label:VH(e),color:t[e]??Vi}}function qb(n,e,t){return e!==!0?null:{key:n,value:"true",label:t,color:o_[n]??Vi}}function GH(n){const e=jn(n,"reception")==="first_touch",t=jn(n,"contested")!=null;return[sl("intention",fE(n),lE),sl("kind",jn(n,"kind"),cE),sl("height_band",jn(n,"height_band"),uE),sl("surface",jn(n,"surface"),dE),sl("dodge_state",jn(n,"dodge_state"),hE),qb("first_touch",e,"First touch"),qb("contested",t,"Contested")].filter(i=>i!=null)}function mE(n,e){return e==="intention"?lE[n.intention??""]??Vi:e==="kind"?cE[n.kind??""]??Vi:e==="height_band"?uE[n.heightBand??""]??Vi:e==="surface"?dE[n.surface??""]??Vi:e==="dodge_state"?hE[n.dodgeState??""]??Vi:e==="flag"?n.contested?o_.contested??Vi:n.firstTouch?o_.first_touch??Vi:Vi:n.isTeamZero?zg:Hg}function $H(n,e){return(e.length>0?e:["team"]).map(i=>mE(n,i))}function _E(n,e){const t=[],i=[...ve(n,"touch")].sort((s,a)=>s.frame!==a.frame?s.frame-a.frame:s.time!==a.time?s.time-a.time:0);for(const s of i){const a=At(s.player),r=e.ballFrames[s.frame]?.position;if(!r)continue;const o=s.ball_movement,c=(o?e.ballFrames[o.end_frame]?.position:null)??r,u=t.length,d=GH(s);t.push({id:`touch-stat:${s.frame}:${a}:${u+1}`,time:e.frames[s.frame]?.time??s.time,frame:s.frame,isTeamZero:s.is_team_0,playerId:a,playerName:e.players.find(h=>h.id===a)?.name??a,kind:jn(s,"kind"),intention:fE(s),heightBand:jn(s,"height_band"),surface:jn(s,"surface"),dodgeState:jn(s,"dodge_state"),firstTouch:jn(s,"reception")==="first_touch",contested:jn(s,"contested")!=null,classifications:d,position:{x:r.x,y:r.y,z:r.z},endPosition:{x:c.x,y:c.y,z:c.z},totalBallTravelDistance:o?Yp(o.travel_distance,0):0,totalBallAdvanceDistance:o?Yp(o.advance_distance,0):0,totalBallRetreatDistance:o?Yp(o.retreat_distance,0):0})}return t}function WH(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function XH(){if(document.getElementById(Gb))return;const n=document.createElement("style");n.id=Gb,n.textContent=` +`}const en="#3b82f6",tn="#f59e0b",G3=new Set(["wavedash"]),$3=new Set(["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"]);function Ai(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function Hv(n){return $3.has(n)&&!G3.has(n)}function of(n){return n===!0?en:n===!1?tn:null}const XT=["timeline","core_player","player_possession","possession","loose_possession","ball_half","ball_third","territorial_pressure","movement","player_activity","field_third","field_half","ball_depth","depth_role","ball_proximity","shadow_defense","rotation_role","first_man_change","goal_context","backboard","ceiling_shot","wall_aerial","wall_aerial_shot","center","flick","flip_reset","dodge_reset","double_tap","fifty_fifty","kickoff","one_timer","pass","ball_carry","controlled_play","rush","dodge","speed_flip","half_flip","half_volley","wavedash","whiff","powerslide","touch","boost_pickups","boost_respawn","bump","demolition"],KT=["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"],Bg=[...new Set([...XT,...KT])],W3=new Set(KT);function ao(){return Object.fromEntries(Bg.map(n=>[n,0]))}function Dp(n){return{...n??ao()}}function Eu(n,e){n[e]+=1}function X3(n){return Bg.includes(n)}function qT(n){if(n==null)return null;if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function Xm(n){return qT(n.meta.primary_player)}function K3(n){return n.meta.team_is_team_0??null}function q3(n){const e=n.meta.stream;return!W3.has(e)||!X3(e)?null:e}function Km(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_frame:n.meta.timing.frame;return typeof e=="number"&&Number.isFinite(e)?e:null}function qm(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_time:n.meta.timing.time;return typeof e=="number"&&Number.isFinite(e)?e:null}function Y3(n,e){const t=Km(n);if(t!==null)return t<=e.frame_number;const i=qm(n);return i!==null&&i<=e.time}function j3(n){return[...n].sort((e,t)=>{const i=Km(e),s=Km(t);if(i!==s)return(i??Number.POSITIVE_INFINITY)-(s??Number.POSITIVE_INFINITY);const a=qm(e),r=qm(t);return a!==r?(a??Number.POSITIVE_INFINITY)-(r??Number.POSITIVE_INFINITY):(Xm(e)??"").localeCompare(Xm(t)??"")})}function YT(n){const e=jT(n);for(const t of n.frames)e.applyFrame(t);return n}function jT(n){const e=Bg.map(s=>({eventType:s,events:j3(ec(n).filter(a=>a.meta.stream===s)),index:0})),t=new Map,i={teamZero:ao(),teamOne:ao()};return{applyFrame(s){for(const a of e)for(;a.index({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function J3(n,e,t,i){n.is_last_backboard=i,n.time_since_last_backboard=n.last_backboard_time==null?null:Math.max(0,t-n.last_backboard_time),n.frames_since_last_backboard=n.last_backboard_frame==null?null:Math.max(0,e-n.last_backboard_frame)}function Q3(n,e,t,i){n.count+=1,n.last_backboard_time=e.time,n.last_backboard_frame=e.frame,n.time_since_last_backboard=Math.max(0,i-e.time),n.frames_since_last_backboard=Math.max(0,t-e.frame)}function eU(n,e){Object.assign(n,e??ZT())}function Gv(n,e){n.count=e}function tU(n){const e=JT(n);for(const t of n.frames)e.applyFrame(t);return n}function JT(n){const e=Z3(ve(n,"backboard"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)J3(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Ym(n){return`${n.key}\0${n.value}`}function Cu(n){return n.map(Ym).join("")}function QT(n,e){e.sort((s,a)=>Ym(s).localeCompare(Ym(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Cu(s.labels)===Cu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Cu(s.labels).localeCompare(Cu(a.labels))))}function Wv(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="origin"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function eM(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function tM(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Xv(n,e){QT(n,[{key:"kind",value:"carry"}]),n.carry_count=eM(n),n.total_carry_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_carry_time=Math.max(n.longest_carry_time,e.duration),n.furthest_carry_distance=Math.max(n.furthest_carry_distance,e.straight_line_distance),n.fastest_carry_speed=Math.max(n.fastest_carry_speed,e.average_speed),n.carry_speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap}function Kv(n,e){e.air_dribble_origin!=null&&QT(n,[{key:"origin",value:e.air_dribble_origin}]),n.count=eM(n),n.ground_to_air_count=Wv(n,"ground_to_air"),n.wall_to_air_count=Wv(n,"wall_to_air"),n.total_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_time=Math.max(n.longest_time,e.duration),n.furthest_distance=Math.max(n.furthest_distance,e.straight_line_distance),n.fastest_speed=Math.max(n.fastest_speed,e.average_speed),n.speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap,n.total_touch_count+=e.touch_count,n.max_touch_count=Math.max(n.max_touch_count,e.touch_count)}function Op(n,e){Object.assign(n,e??Zu()),e?.labeled_event_counts?n.labeled_event_counts=tM(e.labeled_event_counts):delete n.labeled_event_counts}function Fp(n,e){Object.assign(n,e??Ju()),e?.labeled_event_counts?n.labeled_event_counts=tM(e.labeled_event_counts):delete n.labeled_event_counts}function iU(n){const e=nM(n);for(const t of n.frames)e.applyFrame(t);return n}function nM(n){const e=nU(ve(n,"ball_carry"));let t=0;const i=new Map,s=new Map,a=Zu(),r=Zu(),o=Ju(),l=Ju();return{applyFrame(c){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function aU(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1),n.last_bump_time=e.time,n.last_bump_frame=e.frame,n.last_bump_strength=e.strength,n.max_bump_strength=Math.max(n.max_bump_strength,e.strength),n.cumulative_bump_strength+=e.strength}function rU(n,e){n.bumps_taken+=1,e.is_team_bump&&(n.team_bumps_taken+=1)}function oU(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1)}function lU(n,e){Object.assign(n,e??jm())}function Yv(n,e){Object.assign(n,e)}function cU(n){const e=iM(n);for(const t of n.frames)e.applyFrame(t);return n}function iM(n){const e=sU(ve(n,"bump"));let t=0;const i=new Map,s=qv(),a=qv();return{applyFrame(r){for(;t=t&&n0&&(s.overfill_total=sn(s.overfill_total,i),e.field_half==="opponent"&&(s.overfill_from_stolen=sn(s.overfill_from_stolen,i)))}function Jv(n,e){e.boost_granted!=null&&(n.stats.amount_respawned=sn(n.stats.amount_respawned,rn(e.boost_granted)))}class mU{constructor(e){this.points=e}index=0;sample(e){for(;this.index+1e?0:rn(t.value)}}function e_(n,e){return`${n}:${e}`}function _U(n){const e=new Map,t=n.accumulation_tracks;for(const i of t??[]){const s=gl(i.player_id);e.set(e_(s,i.quantity),new mU(i.points))}return e}function gU(n){return[...ve(n,"boost_pickup")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function yU(n){return[...ve(n,"respawn")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function Bp(n,e){for(const t of sM)n[t]=e[t]}function aM(n){const e=gU(n),t=yU(n),i=_U(n);let s=0,a=0;const r=new Map,o=Up(),l=Up(),c=(d,h)=>{const f=gl(d);let p=r.get(f);return p||(p=Up(),r.set(f,p)),p.isTeamZero=h,p},u=(d,h,f)=>{const p=g=>i.get(e_(h,g))?.sample(f)??0;d.amount_used=p("boost_used"),d.amount_used_while_grounded=p("boost_used_grounded"),d.amount_used_while_airborne=p("boost_used_airborne"),d.amount_used_while_supersonic=p("boost_used_supersonic")};return{applyFrame(d,h){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function t_(n){return`${n.key}\0${n.value}`}function Ru(n){return n.map(t_).join("")}function TU(n,e){e.sort((s,a)=>t_(s).localeCompare(t_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Ru(s.labels)===Ru(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Ru(s.labels).localeCompare(Ru(a.labels))))}function MU(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function EU(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function CU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function AU(n,e,t,i){n.is_last_ceiling_shot=i,n.time_since_last_ceiling_shot=n.last_ceiling_shot_time==null?null:Math.max(0,rM(t,n.last_ceiling_shot_time)),n.frames_since_last_ceiling_shot=n.last_ceiling_shot_frame==null?null:Math.max(0,e-n.last_ceiling_shot_frame)}function RU(n,e,t,i){TU(n,[{key:"confidence_band",value:e.confidence>=xU?"high":"standard"}]),n.count=EU(n),n.high_confidence_count=MU(n,"high"),n.is_last_ceiling_shot=!0,n.last_ceiling_shot_time=e.time,n.last_ceiling_shot_frame=e.frame,n.time_since_last_ceiling_shot=Math.max(0,rM(i,e.time)),n.frames_since_last_ceiling_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=wU(n.cumulative_confidence,e.confidence)}function PU(n,e){Object.assign(n,e??oM()),e?.labeled_event_counts?n.labeled_event_counts=CU(e.labeled_event_counts):delete n.labeled_event_counts}function IU(n){const e=lM(n);for(const t of n.frames)e.applyFrame(t);return n}function lM(n){const e=SU(ve(n,"ceiling_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)AU(o,a.frame_number,a.time,i===r);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function OU(n,e){Object.assign(n,e??zg())}function tb(n,e){Object.assign(n,e)}function nb(n,e){n.score+=e.score_delta,n.goals+=e.goals_delta,n.assists+=e.assists_delta,n.saves+=e.saves_delta,n.shots+=e.shots_delta}function cM(n,e){if(e.time_after_kickoff!=null){const t=Math.max(0,e.time_after_kickoff);t<10?n.kickoff_goal_count+=1:t<20?n.short_goal_count+=1:t<40?n.medium_goal_count+=1:n.long_goal_count+=1}if(e.goal_buildup==="counter_attack"?n.counter_attack_goal_count+=1:e.goal_buildup==="sustained_pressure"?n.sustained_pressure_goal_count+=1:e.goal_buildup!=null&&(n.other_buildup_goal_count+=1),e.ball_air_time_before_goal!=null){const t=Math.max(0,e.ball_air_time_before_goal);n.goal_ball_air_time_sample_count+=1,n.cumulative_goal_ball_air_time=is(n.cumulative_goal_ball_air_time,t),n.last_goal_ball_air_time=t}}function zp(n,e){return n!=null&&e!=null&&Jl(n)===Jl(e)}function ib(n,e){return n?e.y:-e.y}function FU(n,e){if(n.ball_position==null||e.position==null)return!1;const t=!n.scoring_team_is_team_0,i=ib(t,n.ball_position);if(i>LU)return!1;const s=ib(t,e.position);return s=DU}function NU(n,e,t){const i=t.is_team_0===e.scoring_team_is_team_0,s=zp(t.player,e.defending_team_most_back_player),a=zp(t.player,e.scoring_team_most_back_player);s&&(n.goals_conceded_while_last_defender+=1),a&&(n.goals_for_while_most_back+=1),s&&(n.goals_against_while_most_back+=1),!i&&FU(e,t)&&(n.caught_ahead_of_play_on_conceded_goals+=1),!i&&t.boost_amount!=null&&(n.goal_against_boost_sample_count+=1,n.cumulative_boost_on_goals_against=is(n.cumulative_boost_on_goals_against,t.boost_amount),n.last_boost_on_goal_against=t.boost_amount),!i&&t.average_boost_in_leadup!=null&&t.min_boost_in_leadup!=null&&(n.goal_against_boost_leadup_sample_count+=1,n.cumulative_average_boost_in_goal_against_leadup=is(n.cumulative_average_boost_in_goal_against_leadup,t.average_boost_in_leadup),n.cumulative_min_boost_in_goal_against_leadup=is(n.cumulative_min_boost_in_goal_against_leadup,t.min_boost_in_leadup),n.last_average_boost_in_goal_against_leadup=t.average_boost_in_leadup,n.last_min_boost_in_goal_against_leadup=t.min_boost_in_leadup),!i&&t.position!=null&&(n.goal_against_position_sample_count+=1,n.cumulative_goal_against_position_x=is(n.cumulative_goal_against_position_x,t.position.x),n.cumulative_goal_against_position_y=is(n.cumulative_goal_against_position_y,t.position.y),n.cumulative_goal_against_position_z=is(n.cumulative_goal_against_position_z,t.position.z),n.last_goal_against_position={...t.position});const r=zp(t.player,e.scorer),o=r?e.scorer_last_touch?.ball_position:null;o!=null&&(n.scoring_goal_last_touch_position_sample_count+=1,n.cumulative_scoring_goal_last_touch_position_x=is(n.cumulative_scoring_goal_last_touch_position_x,o.x),n.cumulative_scoring_goal_last_touch_position_y=is(n.cumulative_scoring_goal_last_touch_position_y,o.y),n.cumulative_scoring_goal_last_touch_position_z=is(n.cumulative_scoring_goal_last_touch_position_z,o.z),n.last_scoring_goal_last_touch_position={...o}),r&&cM(n,e)}function UU(n,e,t,i){cM(i.scoring_team_is_team_0?e:t,i);for(const s of i.players){const a=Jl(s.player),r=n.get(a)??zg();n.set(a,r),NU(r,i,s)}}function BU(n){const e=uM(n);for(const t of n.frames)e.applyFrame(t);return n}function uM(n){const e=eb(ve(n,"core_player")),t=eb(ve(n,"goal_context"));let i=0,s=0;const a=new Map,r=n_(),o=n_();return{applyFrame(l){for(;i({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function rb(n,e){n.count+=1,n.total_time=sb(n.total_time,e.duration),n.longest_time=Math.max(n.longest_time,e.duration),n.touch_count+=e.touch_count,n.total_advance_distance=sb(n.total_advance_distance,e.total_advance_distance)}function Vp(n,e){Object.assign(n,e??Qu())}function HU(n){const e=dM(n);for(const t of n.frames)e.applyFrame(t);return n}function dM(n){const e=zU(ve(n,"controlled_play"));let t=0;const i=new Map,s=Qu(),a=Qu();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function GU(n,e){n.count+=1,e.on_ball&&(n.on_ball_count+=1)}function $U(n,e){Object.assign(n,e??hM())}function WU(n){const e=fM(n);for(const t of n.frames)e.applyFrame(t);return n}function fM(n){const e=VU(ve(n,"dodge_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function KU(n,e,t,i){n.is_last_double_tap=i,n.time_since_last_double_tap=n.last_double_tap_time==null?null:Math.max(0,t-n.last_double_tap_time),n.frames_since_last_double_tap=n.last_double_tap_frame==null?null:Math.max(0,e-n.last_double_tap_frame)}function qU(n,e,t,i){n.count+=1,n.last_double_tap_time=e.time,n.last_double_tap_frame=e.frame,n.time_since_last_double_tap=Math.max(0,i-e.time),n.frames_since_last_double_tap=Math.max(0,t-e.frame)}function YU(n,e){Object.assign(n,e??pM())}function cb(n,e){n.count=e}function jU(n){const e=mM(n);for(const t of n.frames)e.applyFrame(t);return n}function mM(n){const e=XU(ve(n,"double_tap"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)KU(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function JU(n,e){Object.assign(n,e??_M())}function hb(n,e){Object.assign(n,e)}function QU(n){const e=gM(n);for(const t of n.frames)e.applyFrame(t);return n}function gM(n){const e=ZU(ve(n,"demolition"));let t=0;const i=new Map,s=db(),a=db();function r(o){const l=ub(o),c=i.get(l)??_M();return i.set(l,c),c}return{applyFrame(o){for(;t({event:e,index:t})).sort((e,t)=>e.event.resolve_frame!==t.event.resolve_frame?e.event.resolve_frame-t.event.resolve_frame:e.event.resolve_time!==t.event.resolve_time?e.event.resolve_time-t.event.resolve_time:e.index-t.index).map(({event:e})=>e)}function tB(n){return{key:"phase",value:n?"kickoff":"open_play"}}function nB(n,e){return e==null?{key:"outcome",value:"neutral"}:{key:"outcome",value:e===n?"win":"loss"}}function iB(n,e){return e==null?{key:"possession_after",value:"neutral"}:{key:"possession_after",value:e===n?"self":"opponent"}}function sB(n,e){return{key:"dodge_state",value:(n?e.team_zero_dodge_contact:e.team_one_dodge_contact)?"dodge":"no_dodge"}}function s_(n){return`${n.key}\0${n.value}`}function Pu(n){return n.map(s_).join("")}function aB(n,e){e.sort((s,a)=>s_(s).localeCompare(s_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Pu(s.labels)===Pu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Pu(s.labels).localeCompare(Pu(a.labels))))}function rB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function pb(n,e,t){n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0==null?n.neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.possession_after_count+=1:n.opponent_possession_after_count+=1,t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0==null?n.kickoff_neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.kickoff_possession_after_count+=1:n.kickoff_opponent_possession_after_count+=1)}function mb(n,e,t){aB(n,[tB(t.is_kickoff),nB(e,t.winning_team_is_team_0),iB(e,t.possession_team_is_team_0),sB(e,t)]),n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0===e&&(n.possession_after_count+=1),t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0===e&&(n.kickoff_possession_after_count+=1))}function oB(n,e){Object.assign(n,e??i_()),e?.labeled_event_counts?n.labeled_event_counts=rB(e.labeled_event_counts):delete n.labeled_event_counts}function _b(n,e){Object.assign(n,e)}function lB(n){const e=yM(n);for(const t of n.frames)e.applyFrame(t);return n}function yM(n){const e=eB(ve(n,"fifty_fifty"));let t=0;const i=fb(),s=fb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function a_(n){return`${n.key}\0${n.value}`}function Iu(n){return n.map(a_).join("")}function xM(n,e){e.sort((s,a)=>a_(s).localeCompare(a_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Iu(s.labels)===Iu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Iu(s.labels).localeCompare(Iu(a.labels))))}function uB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function dB(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"taker_outcome",value:n.outcome},{key:"kickoff_approach",value:n.approach},{key:"approach_flip_direction",value:n.approach_flip_direction}]}function hB(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"support_behavior",value:n.support_behavior}]}function yb(n,e,t){n.count+=1,t.outcome==="neutral"?n.neutral_outcomes+=1:t.outcome===(e?"team_zero_win":"team_one_win")?n.wins+=1:t.outcome===(e?"team_one_win":"team_zero_win")&&(n.losses+=1),t.kickoff_possession_outcome==="contested"?n.contested_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_possession":"team_one_possession")?n.kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_one_possession":"team_zero_possession")?n.opponent_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_advantage":"team_one_advantage")?n.kickoff_possession_advantages+=1:n.opponent_kickoff_possession_advantages+=1,t.kickoff_goal&&(n.kickoff_goal_count+=1,t.scoring_team_is_team_0===e?n.kickoff_goals_for+=1:t.scoring_team_is_team_0!=null&&(n.kickoff_goals_against+=1)),t.win_strength!=null&&(n.win_strength_sample_count+=1,n.cumulative_win_strength+=t.win_strength)}function vb(n,e,t){t&&(t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after,e.boost_after_sample_count+=1,e.cumulative_boost_after+=t.boost_after),t.outcome==="fake"?(n.fake_count+=1,e.fake_count+=1):t.outcome==="missed"&&(n.missed_count+=1,e.missed_count+=1))}function fB(n,e,t){n.count+=1,xM(n,dB(t)),t.outcome==="touched"?n.touches+=1:t.outcome==="fake"?n.fakes+=1:t.outcome==="missed"&&(n.misses+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function pB(n,e,t){n.count+=1,xM(n,hB(t)),t.first_touch_time!=null&&(n.touches+=1),t.support_behavior==="go_for_boost"?n.support_go_for_boosts+=1:t.support_behavior==="cheat"?n.support_cheats+=1:t.support_behavior==="other"&&(n.support_other+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function Lu(n,e,t){const i=vM(t.player),s=n.get(i)??bM();n.set(i,s),"outcome"in t?fB(s,e,t):pB(s,e,t)}function bb(n,e){Object.assign(n,e)}function mB(n,e){Object.assign(n,e??bM()),e?.labeled_event_counts?n.labeled_event_counts=uB(e.labeled_event_counts):delete n.labeled_event_counts}function _B(n){const e=wM(n);for(const t of n.frames)e.applyFrame(t);return n}function wM(n){const e=cB(ve(n,"kickoff"));let t=0;const i=gb(),s=gb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function r_(n){return`${n.key}\0${n.value}`}function ku(n){return n.map(r_).join("")}function vB(n,e){e.sort((s,a)=>r_(s).localeCompare(r_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>ku(s.labels)===ku(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>ku(s.labels).localeCompare(ku(a.labels))))}function bB(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function xB(n){return n==="forward"||n==="reverse"||n==="side"?n:"other"}function wB(n){return n==="left"||n==="right"?n:"center"}function SB(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function TB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function MB(n,e,t,i){n.is_last_flick=i,n.time_since_last_flick=n.last_flick_time==null?null:Math.max(0,SM(t,n.last_flick_time)),n.frames_since_last_flick=n.last_flick_frame==null?null:Math.max(0,e-n.last_flick_frame)}function EB(n,e,t,i){vB(n,[{key:"confidence_band",value:e.confidence>=gB?"high":"standard"},{key:"kind",value:xB(e.kind)},{key:"direction",value:wB(e.direction)}]),n.count=SB(n),n.high_confidence_count=bB(n,"high"),n.is_last_flick=!0,n.last_flick_time=e.time,n.last_flick_frame=e.frame,n.time_since_last_flick=Math.max(0,SM(i,e.time)),n.frames_since_last_flick=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=$p(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=$p(n.cumulative_setup_duration,e.setup_duration),n.cumulative_ball_speed_change=$p(n.cumulative_ball_speed_change,e.ball_speed_change)}function CB(n,e){Object.assign(n,e??TM()),e?.labeled_event_counts?n.labeled_event_counts=TB(e.labeled_event_counts):delete n.labeled_event_counts}function AB(n){const e=MM(n);for(const t of n.frames)e.applyFrame(t);return n}function MM(n){const e=yB(ve(n,"flick"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)MB(o,a.frame_number,a.time,r===i);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function PB(n,e){n.count+=1,n.total_time_to_use+=e.time_since_reset,n.min_time_to_use=n.min_time_to_use===null?e.time_since_reset:Math.min(n.min_time_to_use,e.time_since_reset)}function IB(n,e){Object.assign(n,e??EM())}function LB(n){const e=CM(n);for(const t of n.frames)e.applyFrame(t);return n}function CM(n){const e=RB(ve(n,"flip_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function DB(n,e,t,i){n.is_last_half_volley=i,n.time_since_last_half_volley=n.last_half_volley_time==null?null:Math.max(0,RM(t,n.last_half_volley_time)),n.frames_since_last_half_volley=n.last_half_volley_frame==null?null:Math.max(0,e-n.last_half_volley_frame)}function OB(n,e,t,i){n.count+=1,n.total_ball_speed=AM(n.total_ball_speed,e.ball_speed),n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.last_half_volley_time=e.time,n.last_half_volley_frame=e.frame,n.time_since_last_half_volley=Math.max(0,RM(i,e.time)),n.frames_since_last_half_volley=Math.max(0,t-e.frame)}function FB(n,e){Object.assign(n,e??PM())}function Tb(n,e){Object.assign(n,e)}function NB(n){const e=IM(n);for(const t of n.frames)e.applyFrame(t);return n}function IM(n){const e=kB(ve(n,"half_volley"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)DB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;te.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:$i(e.player).localeCompare($i(t.player)))}function HB(n){return[...n].sort((e,t)=>e.resolved_frame!==t.resolved_frame?e.resolved_frame-t.resolved_frame:e.resolved_time!==t.resolved_time?e.resolved_time-t.resolved_time:e.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:$i(e.player).localeCompare($i(t.player)))}function Wp(){return{count:0,highConfidenceCount:0,lastTime:null,lastFrame:null,lastResolvedTime:null,lastResolvedFrame:null,lastQuality:null,bestQuality:0,cumulativeQuality:0,labeledCounts:{entries:[]}}}function co(n){return Math.fround(n)}function VB(n,e){return co(co(n)+co(e))}function GB(n,e){return{key:"confidence_band",value:n>=e?"high":"standard"}}function $B(n,e){const t=e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key)),i=n.entries.find(s=>s.labels.length===t.length&&s.labels.every((a,r)=>a.key===t[r]?.key&&a.value===t[r]?.value));if(i){i.count+=1;return}n.entries.push({labels:t,count:1}),n.entries.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels)))}function Uo(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Xp(n,e,t,i,s){n.count+=1,e.confidence>=s&&(n.highConfidenceCount+=1),$B(n.labeledCounts,[GB(e.confidence,s)]),n.lastTime=e.time,n.lastFrame=e.frame,n.lastResolvedTime=i,n.lastResolvedFrame=t,n.lastQuality=e.confidence,n.bestQuality=Math.max(n.bestQuality,e.confidence),n.cumulativeQuality=VB(n.cumulativeQuality,e.confidence)}function Hg(n,e){return n?.lastTime==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,co(co(e.time)-co(n.lastTime)))}function Vg(n,e){return n?.lastFrame==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,e.frame_number-n.lastFrame)}function LM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_speed_flip=i,n.last_speed_flip_time=e?.lastTime??null,n.last_speed_flip_frame=e?.lastFrame??null,n.time_since_last_speed_flip=Hg(e,t),n.frames_since_last_speed_flip=Vg(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Uo(e.labeledCounts):delete n.labeled_event_counts}function kM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_half_flip=i,n.last_half_flip_time=e?.lastTime??null,n.last_half_flip_frame=e?.lastFrame??null,n.time_since_last_half_flip=Hg(e,t),n.frames_since_last_half_flip=Vg(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Uo(e.labeledCounts):delete n.labeled_event_counts}function DM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_wavedash=i,n.last_wavedash_time=e?.lastTime??null,n.last_wavedash_frame=e?.lastFrame??null,n.time_since_last_wavedash=Hg(e,t),n.frames_since_last_wavedash=Vg(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Uo(e.labeledCounts):delete n.labeled_event_counts}function WB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Uo(n.labeled_event_counts):delete e.labeled_event_counts,e}function XB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Uo(n.labeled_event_counts):delete e.labeled_event_counts,e}function KB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Uo(n.labeled_event_counts):delete e.labeled_event_counts,e}function qB(n,e){if(e){Object.assign(n,e);return}LM(n,void 0,{frame_number:0,time:0},!1)}function YB(n,e){if(e){Object.assign(n,e);return}kM(n,void 0,{frame_number:0,time:0},!1)}function jB(n,e){if(e){Object.assign(n,e);return}DM(n,void 0,{frame_number:0,time:0},!1)}function ZB(n){return n.is_live_play||n.ball_has_been_hit===!1}function JB(n){const e=OM(n);for(const t of n.frames)e.applyFrame(t);return n}function OM(n){const e=HB(ve(n,"speed_flip")),t=Mb(ve(n,"half_flip")),i=Mb(ve(n,"wavedash"));let s=0,a=0,r=0,o=null,l=null,c=null;const u=new Map,d=new Map,h=new Map,f=new Map,p=new Map,g=new Map;return{applyFrame(_){if(ZB(_)){for(;sQB.map(e=>({labels:[{key:"height_band",value:n},{key:"speed_band",value:e}],value:0}))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function ed(n=!1){return{tracked_time:0,total_distance:0,speed_integral:0,time_slow_speed:0,time_boost_speed:0,time_supersonic_speed:0,time_on_ground:0,time_low_air:0,time_high_air:0,labeled_tracked_time:n?nz():{entries:[]}}}function iz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function sz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function az(n,e,t){const i=sz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=ss(s.value,t):(n.entries.push({labels:i,value:oa(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function rz(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),value:e.value}))}}function Cb(n,e){const t=oa(e.dt);n.tracked_time=ss(n.tracked_time,t),n.total_distance=ss(n.total_distance,e.distance),n.speed_integral=ss(n.speed_integral,tz(e.speed,t)),e.speed_band==="slow"?n.time_slow_speed=ss(n.time_slow_speed,t):e.speed_band==="boost"?n.time_boost_speed=ss(n.time_boost_speed,t):e.speed_band==="supersonic"&&(n.time_supersonic_speed=ss(n.time_supersonic_speed,t)),e.height_band==="ground"?n.time_on_ground=ss(n.time_on_ground,t):e.height_band==="low_air"?n.time_low_air=ss(n.time_low_air,t):e.height_band==="high_air"&&(n.time_high_air=ss(n.time_high_air,t));const i=n.labeled_tracked_time??{entries:[]};n.labeled_tracked_time=i,az(i,[{key:"speed_band",value:e.speed_band},{key:"height_band",value:e.height_band}],t)}function Kp(n,e){const t=e??ed(!0),i=t.labeled_tracked_time;Object.assign(n,t,{labeled_tracked_time:i?rz(i):void 0}),i?.entries.length||delete n.labeled_tracked_time}function oz(n){const e=FM(n);for(const t of n.frames)e.applyFrame(t);return n}function FM(n){const e=iz(ve(n,"movement"));let t=0;const i=new Map,s=ed(),a=ed();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function cz(n,e,t,i){n.is_last_one_timer=i,n.time_since_last_one_timer=n.last_one_timer_time==null?null:Math.max(0,t-n.last_one_timer_time),n.frames_since_last_one_timer=n.last_one_timer_frame==null?null:Math.max(0,e-n.last_one_timer_frame)}function uz(n,e,t,i){n.count+=1,n.total_ball_speed+=e.ball_speed,n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.total_pass_distance+=e.pass_travel_distance,n.last_one_timer_time=e.time,n.last_one_timer_frame=e.frame,n.time_since_last_one_timer=Math.max(0,i-e.time),n.frames_since_last_one_timer=Math.max(0,t-e.frame)}function dz(n,e){Object.assign(n,e??NM())}function Rb(n,e){Object.assign(n,e)}function hz(n){const e=UM(n);for(const t of n.frames)e.applyFrame(t);return n}function UM(n){const e=lz(ve(n,"one_timer"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)cz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.index-t.index}).map(({event:e})=>e)}function pz(n,e,t,i){n.is_last_completed_pass=i,n.time_since_last_completed_pass=n.last_completed_pass_time==null?null:Math.max(0,t-n.last_completed_pass_time),n.frames_since_last_completed_pass=n.last_completed_pass_frame==null?null:Math.max(0,e-n.last_completed_pass_frame)}function mz(n,e,t,i){n.completed_pass_count+=1,n.total_pass_distance+=e.ball_travel_distance,n.total_pass_advance+=e.ball_advance_distance,n.longest_pass_distance=Math.max(n.longest_pass_distance,e.ball_travel_distance),n.last_completed_pass_time=e.time,n.last_completed_pass_frame=e.frame,n.time_since_last_completed_pass=Math.max(0,i-e.time),n.frames_since_last_completed_pass=Math.max(0,t-e.frame)}function _z(n,e){Object.assign(n,e??o_())}function Pb(n,e){Object.assign(n,e)}function gz(n){const e=BM(n);for(const t of n.frames)e.applyFrame(t);return n}function BM(n){const e=fz(ve(n,"pass"));let t=0,i=null;const s=new Map,a={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0},r={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0};return{applyFrame(o){for(const[l,c]of s)pz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function bz(n){return l_(n)}function xz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function zM(n,e,t){const i=xz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=yl(s.value,t):(n.entries.push({labels:i,value:Fl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function wz(n,e){return n.key==="possession_state"&&n.value==="team_zero"?{key:"possession_state",value:e?"own":"opponent"}:n.key==="possession_state"&&n.value==="team_one"?{key:"possession_state",value:e?"opponent":"own"}:n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Ib(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)zM(t,i.labels.map(s=>wz(s,e)),i.value);return{tracked_time:n.tracked_time,possession_time:e?n.team_zero_time:n.team_one_time,opponent_possession_time:e?n.team_one_time:n.team_zero_time,neutral_time:n.neutral_time,labeled_time:t}}function Sz(n,e){n.active=e.active,n.possessionState=e.possession_state}function Tz(n,e,t){if(!e.active)return;const i=Fl(t.dt);n.tracked_time=yl(n.tracked_time,i),e.possessionState==="team_zero"?n.team_zero_time=yl(n.team_zero_time,i):e.possessionState==="team_one"?n.team_one_time=yl(n.team_one_time,i):n.neutral_time=yl(n.neutral_time,i);const s=[{key:"possession_state",value:e.possessionState}];e.fieldThird!=null&&s.push({key:"field_third",value:e.fieldThird}),e.fieldHalf!=null&&s.push({key:"field_half",value:e.fieldHalf}),zM(n.labeled_time,s,i)}function Lb(n,e){Object.assign(n,e??vz())}function Mz(n){const e=HM(n);for(const t of n.frames)e.applyFrame(t);return n}function HM(n){const e=bz(ve(n,"possession")),t=l_(ve(n,"ball_third")),i=l_(ve(n,"ball_half"));let s=0,a=0,r=0;const o=yz(),l={active:!1,possessionState:"neutral",fieldThird:null,fieldHalf:null};return{applyFrame(c){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Oa(n,e){const t=rh(e.player),i=n.get(t)??VM();return n.set(t,i),i}function Cz(n,e){switch(n.active_game_time=Xt(n.active_game_time,e.duration),e.state){case"tracked":n.tracked_time=Xt(n.tracked_time,e.duration);break;case"demolished":n.time_demolished=Xt(n.time_demolished,e.duration);break}}function Az(n,e){switch(e.state){case"defensive":n.time_defensive_third=Xt(n.time_defensive_third,e.duration);break;case"neutral":n.time_neutral_third=Xt(n.time_neutral_third,e.duration);break;case"offensive":n.time_offensive_third=Xt(n.time_offensive_third,e.duration);break}}function Rz(n,e){switch(e.state){case"defensive":n.time_defensive_half=Xt(n.time_defensive_half,e.duration);break;case"offensive":n.time_offensive_half=Xt(n.time_offensive_half,e.duration);break}}function Pz(n,e){switch(e.state){case"behind_ball":n.time_behind_ball=Xt(n.time_behind_ball,e.duration);break;case"level_with_ball":n.time_level_with_ball=Xt(n.time_level_with_ball,e.duration);break;case"ahead_of_ball":n.time_in_front_of_ball=Xt(n.time_in_front_of_ball,e.duration);break}}function Iz(n,e){switch(e.state){case"no_teammates":n.time_no_teammates=Xt(n.time_no_teammates,e.duration);break;case"most_back":n.time_most_back=Xt(n.time_most_back,e.duration);break;case"most_forward":n.time_most_forward=Xt(n.time_most_forward,e.duration);break;case"mid":n.time_mid_role=Xt(n.time_mid_role,e.duration);break;case"other":n.time_other_role=Xt(n.time_other_role,e.duration);break}}function Lz(n,e,t){t.state.closest_to_ball_team&&(e.tracked_time=Xt(e.tracked_time,t.duration),e.time_closest_to_ball_team=Xt(e.time_closest_to_ball_team,t.duration),n.time_closest_to_ball_team=Xt(n.time_closest_to_ball_team,t.duration)),t.state.closest_to_ball_absolute&&(e.time_closest_to_ball_absolute=Xt(e.time_closest_to_ball_absolute,t.duration),n.time_closest_to_ball_absolute=Xt(n.time_closest_to_ball_absolute,t.duration)),t.state.farthest_from_ball&&(n.time_farthest_from_ball=Xt(n.time_farthest_from_ball,t.duration))}function kz(n,e){e.state==="shadowing"&&(n.time_shadow_defense=Xt(n.time_shadow_defense,e.duration))}function Dz(n,e){Object.assign(n,e??VM())}function kb(n,e){Object.assign(n,e??c_())}function Fa(n,e){const t=Ez(n),i=new Array(t.length).fill(0);return{applyThroughFrame(s){for(let a=0;as.frame_number)break;const o=Oz(r,s),l=o-i[a];l>0&&(i[a]=o,e({...r,duration:l}))}}}}function Oz(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function Fz(n){const e=GM(n);for(const t of n.frames)e.applyFrame(t);return n}function GM(n){const e=new Map,t=c_(),i=c_(),s=[Fa(ve(n,"player_activity"),a=>Cz(Oa(e,a),a)),Fa(ve(n,"field_third"),a=>Az(Oa(e,a),a)),Fa(ve(n,"field_half"),a=>Rz(Oa(e,a),a)),Fa(ve(n,"ball_depth"),a=>Pz(Oa(e,a),a)),Fa(ve(n,"depth_role"),a=>Iz(Oa(e,a),a)),Fa(ve(n,"ball_proximity"),a=>Lz(Oa(e,a),a.is_team_0?t:i,a)),Fa(ve(n,"shadow_defense"),a=>kz(Oa(e,a),a))];return{applyFrame(a){for(const r of s)r.applyThroughFrame(a);kb(a.team_zero.positioning,t),kb(a.team_one.positioning,i);for(const r of a.players)Dz(r.positioning,e.get(rh(r.player_id))),Nz(r.positioning,n,r.player_id)}}}function Nz(n,e,t){const i=e.positioning_summary;if(!Array.isArray(i))return;const s=rh(t),a=i.find(r=>!r||typeof r!="object"?!1:rh(r.player_id)===s);a?.distance&&Object.assign(n,a.distance)}function Yp(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function vl(){return{total_duration:0,press_count:0}}function Uz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Bz(n){return n.gameplay_phase==="active_play"||n.gameplay_phase==="kickoff_waiting_for_touch"}function jp(n,e){Object.assign(n,e??vl())}function zz(n){const e=$M(n);for(const t of n.frames)e.applyFrame(t);return n}function $M(n){const e=Uz(ve(n,"powerslide"));let t=0;const i=new Map,s=new Map,a=vl(),r=vl();return{applyFrame(o){const l=Bz(o);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function $z(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function WM(n,e,t){const i=$z(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=bl(s.value,t):(n.entries.push({labels:i,value:Nl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function Wz(n,e){return n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Db(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)WM(t,i.labels.map(s=>Wz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_half_time:e?n.team_zero_side_time:n.team_one_side_time,offensive_half_time:e?n.team_one_side_time:n.team_zero_side_time,neutral_time:n.neutral_time,labeled_time:t}}function Xz(n,e){n.active=e.active,n.fieldHalf=e.field_half}function Kz(n,e,t){if(!e.active)return;const i=Nl(t.dt);n.tracked_time=bl(n.tracked_time,i),e.fieldHalf==="team_zero_side"?n.team_zero_side_time=bl(n.team_zero_side_time,i):e.fieldHalf==="team_one_side"?n.team_one_side_time=bl(n.team_one_side_time,i):n.neutral_time=bl(n.neutral_time,i),WM(n.labeled_time,[{key:"field_half",value:e.fieldHalf}],i)}function Ob(n,e){Object.assign(n,e??Vz())}function qz(n){const e=XM(n);for(const t of n.frames)e.applyFrame(t);return n}function XM(n){const e=Gz(ve(n,"ball_half"));let t=0;const i=Hz(),s={active:!1,fieldHalf:"neutral"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Jz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function KM(n,e,t){const i=Jz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=xl(s.value,t):(n.entries.push({labels:i,value:Ul(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function Qz(n,e){return n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:{...n}}function Fb(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)KM(t,i.labels.map(s=>Qz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_third_time:e?n.team_zero_third_time:n.team_one_third_time,neutral_third_time:n.neutral_third_time,offensive_third_time:e?n.team_one_third_time:n.team_zero_third_time,labeled_time:t}}function eH(n,e){n.active=e.active,n.fieldThird=e.field_third}function tH(n,e,t){if(!e.active)return;const i=Ul(t.dt);n.tracked_time=xl(n.tracked_time,i),e.fieldThird==="team_zero_third"?n.team_zero_third_time=xl(n.team_zero_third_time,i):e.fieldThird==="team_one_third"?n.team_one_third_time=xl(n.team_one_third_time,i):n.neutral_third_time=xl(n.neutral_third_time,i),KM(n.labeled_time,[{key:"field_third",value:e.fieldThird}],i)}function Nb(n,e){Object.assign(n,e??jz())}function nH(n){const e=qM(n);for(const t of n.frames)e.applyFrame(t);return n}function qM(n){const e=Zz(ve(n,"ball_third"));let t=0;const i=Yz(),s={active:!1,fieldThird:"neutral_third"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function sH(n,e,t){n.session_count+=1,n.session_time=Du(n.session_time,t.duration),n.offensive_half_time=Du(n.offensive_half_time,t.offensive_half_time),n.offensive_third_time=Du(n.offensive_third_time,t.offensive_third_time),n.longest_session_time=Math.max(n.longest_session_time,t.duration),n.average_session_time=n.session_count===0?0:td(n.session_time/n.session_count),e.opponent_session_count+=1,e.opponent_session_time=Du(e.opponent_session_time,t.duration),e.opponent_longest_session_time=Math.max(e.opponent_longest_session_time,t.duration)}function Bb(n,e){Object.assign(n,e)}function aH(n){const e=YM(n);for(const t of n.frames)e.applyFrame(t);return n}function YM(n){const e=iH(ve(n,"territorial_pressure"));let t=0;const i=Ub(),s=Ub();return{applyFrame(a){for(;t=e[t].end_frame;){const r=e[t];sH(r.team_is_team_0?i:s,r.team_is_team_0?s:i,r),t+=1}Bb(a.team_zero.territorial_pressure,i),Bb(a.team_one.territorial_pressure,s)}}}function Yr(n,e){return Math.fround(Math.fround(n)+Math.fround(e))}function jM(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function ZM(){return{active_game_time:0,time_first_man:0,time_second_man:0,time_third_man:0,time_ambiguous_role:0,longest_first_man_stint_time:0,first_man_stint_count:0,became_first_man_count:0,lost_first_man_count:0,current_role_state:"unknown"}}function zb(){return{first_man_changes_for_team:0,rotation_count:0}}function Hb(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function rH(n,e,t,i,s){const a=n.stats;switch(a.active_game_time=Yr(a.active_game_time,t),a.current_role_state=e.state,e.state){case"first_man":{n.lastFirstManEndTime!==null&&e.time-n.lastFirstManEndTime<=s?n.currentFirstManStintTime=Yr(n.currentFirstManStintTime,t):(n.currentFirstManStintTime=t,a.first_man_stint_count+=1),n.lastFirstManEndTime=i,a.longest_first_man_stint_time=Math.max(a.longest_first_man_stint_time,n.currentFirstManStintTime),a.time_first_man=Yr(a.time_first_man,t);break}case"second_man":a.time_second_man=Yr(a.time_second_man,t);break;case"third_man":a.time_third_man=Yr(a.time_third_man,t);break;case"ambiguous":a.time_ambiguous_role=Yr(a.time_ambiguous_role,t);break}}function oH(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function u_(n,e){const t=jM(e),i=n.get(t)??{currentFirstManStintTime:0,lastFirstManEndTime:null,stats:ZM()};return n.set(t,i),i}function lH(n,e,t){n.first_man_changes_for_team+=1,n.rotation_count+=1,u_(e,t.previous_first_man).stats.lost_first_man_count+=1,u_(e,t.next_first_man).stats.became_first_man_count+=1}function cH(n,e){Object.assign(n,e??ZM())}function Vb(n,e){Object.assign(n,e)}function uH(n){const e=JM(n);for(const t of n.frames)e.applyFrame(t);return n}function JM(n){const e=Hb(ve(n,"rotation_role")),t=Hb(ve(n,"first_man_change")),i=n.config.rotation_first_man_stint_end_grace_seconds,s=new Array(e.length).fill(0);let a=0;const r=new Map,o=zb(),l=zb();return{applyFrame(c){for(let u=0;uc.frame_number)break;const h=oH(d,c),f=h-s[u];if(f>0){s[u]=h;const p=c.frame_number>=d.end_frame?d.end_time:Math.min(c.time,d.end_time);rH(u_(r,d.player),d,f,p,i)}}for(;a({event:e,index:t})).sort((e,t)=>e.event.start_frame!==t.event.start_frame?e.event.start_frame-t.event.start_frame:e.event.start_time!==t.event.start_time?e.event.start_time-t.event.start_time:e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.index-t.index).map(({event:e})=>e)}function hH(n,e){n.count+=1,e.attackers===2&&e.defenders===1?n.two_v_one_count+=1:e.attackers===2&&e.defenders===2?n.two_v_two_count+=1:e.attackers===2&&e.defenders===3?n.two_v_three_count+=1:e.attackers===3&&e.defenders===1?n.three_v_one_count+=1:e.attackers===3&&e.defenders===2?n.three_v_two_count+=1:e.attackers===3&&e.defenders===3&&(n.three_v_three_count+=1)}function $b(n,e){Object.assign(n,e)}function fH(n){const e=QM(n);for(const t of n.frames)e.applyFrame(t);return n}function QM(n){const e=dH(ve(n,"rush"));let t=0;const i=Gb(),s=Gb(),a=n.config.rush_min_possession_retained_seconds;return{applyFrame(r){for(;t=e[t].start_frame&&r.time-e[t].start_time>=a;){const o=e[t];hH(o.is_team_0?i:s,o),t+=1}$b(r.team_zero.rush,i),$b(r.team_one.rush,s)}}}const pH=["control","hard_hit","medium_hit"],mH=["ground","high_air","low_air"],_H=["air","ground","wall"],gH=["dodge","no_dodge"];function uo(n){return Math.fround(n)}function nd(n,e){return uo(uo(n)+uo(e))}function eE(n,e){return uo(uo(n)-uo(e))}function Zp(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function yH(){return{entries:gH.flatMap(n=>mH.flatMap(e=>pH.flatMap(t=>_H.map(i=>({labels:[{key:"dodge_state",value:n},{key:"height_band",value:e},{key:"kind",value:t},{key:"surface",value:i}],count:0}))))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function tE(){return{touch_count:0,control_touch_count:0,medium_hit_count:0,hard_hit_count:0,aerial_touch_count:0,high_aerial_touch_count:0,wall_touch_count:0,first_touch_count:0,is_last_touch:!1,last_touch_time:null,last_touch_frame:null,time_since_last_touch:null,frames_since_last_touch:null,last_ball_speed_change:null,max_ball_speed_change:0,cumulative_ball_speed_change:0,total_ball_travel_distance:0,total_ball_advance_distance:0,total_ball_retreat_distance:0,labeled_touch_counts:yH()}}const vH=tE();function Wb(){return{stats:tE(),labeledCountsVersion:0,labeledCountsSnapshot:void 0,labeledCountsSnapshotVersion:-1}}function bH(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function xH(n,e){e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key));const t=n.labeled_touch_counts?.entries??[];n.labeled_touch_counts={entries:t};const i=t.find(s=>s.labels.length===e.length&&s.labels.every((a,r)=>a.key===e[r]?.key&&a.value===e[r]?.value));i?i.count+=1:(t.push({labels:e,count:1}),t.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels))))}function wH(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Ou(n,e){return n.tags?.find(t=>t.group===e)?.value??null}function SH(n,e,t){const i=Ou(e,"kind")??"control",s=Ou(e,"height_band")??"ground",a=Ou(e,"surface")??"ground",r=Ou(e,"dodge_state")??"no_dodge",o=n.stats;o.touch_count+=1,i==="control"?o.control_touch_count+=1:i==="medium_hit"?o.medium_hit_count+=1:i==="hard_hit"&&(o.hard_hit_count+=1),s==="low_air"?o.aerial_touch_count+=1:s==="high_air"&&(o.aerial_touch_count+=1,o.high_aerial_touch_count+=1),a==="wall"&&(o.wall_touch_count+=1),xH(o,[{key:"kind",value:i},{key:"height_band",value:s},{key:"surface",value:a},{key:"dodge_state",value:r}]),n.labeledCountsVersion+=1,o.last_touch_time=e.time,o.last_touch_frame=e.frame,o.time_since_last_touch=Math.max(0,eE(t.time,e.time)),o.frames_since_last_touch=Math.max(0,t.frame_number-e.frame),o.last_ball_speed_change=e.ball_speed_change,o.max_ball_speed_change=Math.max(o.max_ball_speed_change,e.ball_speed_change),o.cumulative_ball_speed_change=nd(o.cumulative_ball_speed_change,e.ball_speed_change)}function TH(n){return n.labeledCountsSnapshotVersion!==n.labeledCountsVersion&&(n.labeledCountsSnapshot=n.stats.labeled_touch_counts?wH(n.stats.labeled_touch_counts):void 0,n.labeledCountsSnapshotVersion=n.labeledCountsVersion),n.labeledCountsSnapshot}function MH(n,e){if(!e){Object.assign(n,vH);return}Object.assign(n,e.stats,{labeled_touch_counts:TH(e)})}function EH(n){const e=nE(n);for(const t of n.frames)e.applyFrame(t);return n}function nE(n){const e=bH(ve(n,"touch")),t=e.flatMap(o=>o.ball_movement?[{player:o.player,movement:o.ball_movement}]:[]).sort((o,l)=>o.movement.end_frame!==l.movement.end_frame?o.movement.end_frame-l.movement.end_frame:o.movement.end_time-l.movement.end_time);let i=0,s=0,a=null;const r=new Map;return{applyFrame(o){if(!o.is_live_play)a=null;else{for(const l of r.values()){const c=l.stats;c.is_last_touch=!1,c.last_touch_time!=null&&(c.time_since_last_touch=Math.max(0,eE(o.time,c.last_touch_time))),c.last_touch_frame!=null&&(c.frames_since_last_touch=Math.max(0,o.frame_number-c.last_touch_frame))}for(;i({event:e,index:t})).sort((e,t)=>e.event.resolved_frame!==t.event.resolved_frame?e.event.resolved_frame-t.event.resolved_frame:e.event.resolved_time!==t.event.resolved_time?e.event.resolved_time-t.event.resolved_time:e.index-t.index).map(({event:e})=>e)}function RH(n,e,t){n.is_last_whiff=!1,n.time_since_last_whiff=n.last_whiff_time==null?null:Math.max(0,t-n.last_whiff_time),n.frames_since_last_whiff=n.last_whiff_frame==null?null:Math.max(0,e-n.last_whiff_frame)}function PH(n,e,t,i){if((e.kind??"whiff")==="beaten_to_ball"){n.beaten_to_ball_count+=1;return}n.whiff_count+=1,e.aerial?n.aerial_whiff_count+=1:n.grounded_whiff_count+=1,e.dodge_active&&(n.dodge_whiff_count+=1),n.is_last_whiff=!0,n.last_whiff_time=e.time,n.last_whiff_frame=e.frame,n.time_since_last_whiff=Math.max(0,i-e.time),n.frames_since_last_whiff=Math.max(0,t-e.frame),n.last_closest_approach_distance=e.closest_approach_distance,n.best_closest_approach_distance=n.best_closest_approach_distance==null?e.closest_approach_distance:Math.min(n.best_closest_approach_distance,e.closest_approach_distance),n.cumulative_closest_approach_distance+=e.closest_approach_distance}function Xb(n,e){Object.assign(n,e??d_())}function IH(n){const e=iE(n);for(const t of n.frames)e.applyFrame(t);return n}function iE(n){const e=AH(ve(n,"whiff"));let t=0,i=null;const s=new Map,a=new Map;return{applyFrame(r){if(r.is_live_play){for(const o of s.values())RH(o,r.frame_number,r.time);for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function DH(n,e,t,i){n.is_last_wall_aerial=i,n.time_since_last_wall_aerial=n.last_wall_aerial_time==null?null:Math.max(0,sE(t,n.last_wall_aerial_time)),n.frames_since_last_wall_aerial=n.last_wall_aerial_frame==null?null:Math.max(0,e-n.last_wall_aerial_frame)}function OH(n,e,t,i){n.count+=1,e.confidence>=LH&&(n.high_confidence_count+=1),n.is_last_wall_aerial=!0,n.last_wall_aerial_time=e.time,n.last_wall_aerial_frame=e.frame,n.time_since_last_wall_aerial=Math.max(0,sE(i,e.time)),n.frames_since_last_wall_aerial=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Fu(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=Fu(n.cumulative_setup_duration,e.setup_duration),n.cumulative_takeoff_to_touch_time=Fu(n.cumulative_takeoff_to_touch_time,e.time_since_takeoff),n.cumulative_touch_height=Fu(n.cumulative_touch_height,e.player_position[2]??0)}function FH(n,e){Object.assign(n,e??aE())}function NH(n){const e=rE(n);for(const t of n.frames)e.applyFrame(t);return n}function rE(n){const e=kH(ve(n,"wall_aerial"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)DH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function zH(n,e,t,i){n.is_last_wall_aerial_shot=i,n.time_since_last_wall_aerial_shot=n.last_wall_aerial_shot_time==null?null:Math.max(0,oE(t,n.last_wall_aerial_shot_time)),n.frames_since_last_wall_aerial_shot=n.last_wall_aerial_shot_frame==null?null:Math.max(0,e-n.last_wall_aerial_shot_frame)}function HH(n,e,t,i){n.count+=1,e.confidence>=UH&&(n.high_confidence_count+=1),n.is_last_wall_aerial_shot=!0,n.last_wall_aerial_shot_time=e.time,n.last_wall_aerial_shot_frame=e.frame,n.time_since_last_wall_aerial_shot=Math.max(0,oE(i,e.time)),n.frames_since_last_wall_aerial_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Qp(n.cumulative_confidence,e.confidence),n.cumulative_takeoff_to_shot_time=Qp(n.cumulative_takeoff_to_shot_time,e.time_since_takeoff),n.cumulative_shot_height=Qp(n.cumulative_shot_height,e.player_position[2]??0)}function VH(n,e){Object.assign(n,e??lE())}function GH(n){const e=cE(n);for(const t of n.frames)e.applyFrame(t);return n}function cE(n){const e=BH(ve(n,"wall_aerial_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)zH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{let r=!1;for(;t[f.frame_number,p])),a=new Map,r={...n,frames:[]},o=KH.flatMap(f=>f.createFrameAccumulator?[f.createFrameAccumulator(r)]:[]),l=Math.max(1,t.materializationChunkSize??$H),c=Math.max(l,t.maxMaterializationChunkSize??WH);let u=-1,d=l;const h=f=>{if(f<=u)return;const p=Math.min(i.length-1,Math.max(f,u+d));for(let g=u+1;g<=p;g+=1){const _=i[g],m=_?ZH(jH(_)):void 0;if(m){for(const v of o)v.applyFrame(m);a.set(m.frame_number,m)}}u=p,d=Math.min(c,i.length,d*XH)};return{get(f){const p=s.get(f);if(p!==void 0)return h(p),a.get(f)}}}function YH(n){return!n||typeof n!="object"?n:{...n}}function jH(n){return{...n,team_zero:{...n.team_zero},team_one:{...n.team_one},players:n.players.map(e=>({...e,player_id:YH(e.player_id)}))}}function ZH(n){return{...n,team_zero:Ql(n.team_zero??{}),team_one:Ql(n.team_one??{}),players:n.players.map(t=>uE(t))}}function ec(n){return n.events?.events??[]}function ve(n,e){return ec(n).filter(t=>t.payload.kind===e).map(t=>t.payload.payload)}const JH=new Set(["is_team_0","name","player_id"]);function Yb(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0}function QH(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.keys(n).every(e=>JH.has(e))}function eV(n){return Yb(n.team_zero)&&Yb(n.team_one)&&n.players.every(e=>QH(e))}function tV(n){return new Map(YT(n).frames.map(e=>[e.frame_number,e]))}function nV(n,e,t){const i=n.frames.filter(s=>eV(s)).length;if(i===n.frames.length)return qH(n,e,t);if(i>0)throw new Error("stats timeline frames must be either all compact scaffolds or all materialized snapshots");return tV(n)}function zt(n,e){return n.get(e)??null}const $g=[{stage:"validating",index:1,total:9,label:"Parse replay",start:0,end:.08},{stage:"processing",index:2,total:9,label:"Process replay frames",start:.08,end:.62},{stage:"building-stats",index:3,total:9,label:"Build stats events",start:.62,end:.7},{stage:"serializing-replay",index:4,total:9,label:"Serialize replay data",start:.7,end:.76},{stage:"serializing-stats",index:5,total:9,label:"Serialize stats timeline",start:.76,end:.86},{stage:"normalizing",index:6,total:9,label:"Normalize replay model",start:.86,end:.91},{stage:"decoding-replay",index:7,total:9,label:"Decode replay data",start:.91,end:.94},{stage:"decoding-stats",index:8,total:9,label:"Decode stats chunks",start:.94,end:.96},{stage:"deriving-stats",index:9,total:9,label:"Derive stats snapshots",start:.96,end:1}];function dE(n){return Math.max(0,Math.min(1,n))}function em(n,e,t){if(n!==void 0)return dE((n-e)/(t-e))}function Wg(n){if(n.stage!=="stats-timeline")return n;const e=n.progress;return e===void 0?{...n,stage:"building-stats"}:e<.35?{...n,stage:"building-stats",progress:em(e,0,.35)}:e<.55?{...n,stage:"serializing-replay",progress:em(e,.35,.55)}:{...n,stage:"serializing-stats",progress:em(e,.55,.92)}}function hE(n){const e=Wg(n);return $g.find(t=>t.stage===e.stage)}function iV(){return $g.map(({stage:n,index:e,total:t,label:i})=>({stage:n,index:e,total:t,label:i}))}function sV(n){const e=hE(n);return{stage:e.stage,index:e.index,total:e.total,label:e.label}}function aV(n){const e=Wg(n),t=hE(e);return $g.map(({stage:i,index:s,total:a,label:r})=>{if(st.index)return{stage:i,index:s,total:a,label:r,state:"pending",completion:0,indeterminate:!1};const o=e.progress!==void 0;return{stage:i,index:s,total:a,label:r,state:"active",completion:o?dE(e.progress??0):1,indeterminate:!o}})}function lf(n){const e=Wg(n),t=e.progress===void 0?null:Math.round(e.progress*100);switch(e.stage){case"validating":return"Parsing replay...";case"processing":return t!==null&&e.totalFrames!==void 0?`Processing replay frames... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:"Processing replay frames...";case"building-stats":return t!==null?e.totalFrames!==void 0?`Building stats events... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:`Building stats events... ${t}%`:"Building stats events...";case"serializing-replay":return t!==null?`Serializing replay data... ${t}%`:"Serializing replay data...";case"serializing-stats":return t!==null?`Serializing stats timeline... ${t}%`:"Serializing stats timeline...";case"decoding-replay":return t!==null?`Decoding replay data... ${t}%`:"Decoding replay data...";case"decoding-stats":return t!==null?e.totalChunks!==void 0?`Decoding stats chunks... ${t}% (${e.processedChunks??0}/${e.totalChunks})`:`Decoding stats chunks... ${t}%`:"Decoding stats chunks...";case"deriving-stats":return t!==null?`Deriving stats snapshots... ${t}%`:"Deriving stats snapshots...";case"normalizing":return t!==null?`Normalizing replay model... ${t}%`:"Normalizing replay model...";default:return"Loading replay..."}}function rV(n){return n instanceof Error?n:new Error(String(n))}function Rs(n,e){return JSON.parse(n.decode(new Uint8Array(e)))}async function oV(n,e,t){t?.({stage:"decoding-stats",progress:0});const i=Rs(n,e.configBuffer);t?.({stage:"decoding-stats",progress:.05}),await Ja();const s=Rs(n,e.replayMetaBuffer);t?.({stage:"decoding-stats",progress:.1}),await Ja();const a=Rs(n,e.eventsBuffer),r=Rs(n,e.activitySummaryBuffer),o=Rs(n,e.positioningSummaryBuffer),l=Rs(n,e.accumulationTracksBuffer);t?.({stage:"decoding-stats",progress:.15}),await Ja();const c=[],u=e.frameChunkBuffers.length;for(let d=0;d{let t=!1,i=null;const s=()=>{t||(t=!0,i!==null&&clearTimeout(i),e())};i=setTimeout(s,n),requestAnimationFrame(()=>s())})}async function fE(n,e={}){if(typeof Worker>"u")throw new Error("Replay loading worker is not available in this environment");const t=new Worker(new URL(""+new URL("replayLoader.worker-BOmyAjmY.js",import.meta.url).href,import.meta.url),{type:"module"}),i=n.slice(),s=e.reportEveryNFrames??100;return new Promise((a,r)=>{const o=()=>{t.terminate()};t.onmessage=async c=>{const u=c.data;if(u.type==="progress"){e.onProgress?.(u.progress);return}if(u.type==="error"){o(),r(new Error(u.error));return}o();try{const d=new TextDecoder;e.onProgress?.({stage:"decoding-replay",progress:0}),await Ja();const h=Rs(d,u.replayBuffer);e.onProgress?.({stage:"decoding-replay",progress:.5}),await Ja();const f=Rs(d,u.rawReplayBuffer);e.onProgress?.({stage:"decoding-replay",progress:1}),await Ja();const p=await oV(d,u.statsTimelineParts,e.onProgress),g=nV(p);a({replay:h,raw:f,statsTimeline:p,statsFrameLookup:g})}catch(d){r(rV(d))}},t.onerror=c=>{o(),r(new Error(c.message||"Replay loading worker failed"))};const l={type:"load-replay",bytes:i.buffer,reportEveryNFrames:s};t.postMessage(l,[i.buffer])})}function lV(n){const e=document.createElement("div");e.className="replay-load-modal",e.hidden=!0;const t=document.createElement("div");t.className="replay-load-modal__dialog",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","replay-load-modal-title");const i=document.createElement("p");i.className="replay-load-modal__eyebrow",i.textContent="Replay loading";const s=document.createElement("h2");s.id="replay-load-modal-title",s.className="replay-load-modal__title",s.textContent="Preparing replay pipeline";const a=document.createElement("p");a.className="replay-load-modal__status",a.textContent="Preparing replay...";const r=document.createElement("div");r.className="replay-load-modal__phase-list";const o=new Map;for(const f of iV()){const p=document.createElement("div");p.className="replay-load-modal__phase-row",p.dataset.state="pending";const g=document.createElement("p");g.className="replay-load-modal__phase-label",g.textContent=`${f.index}. ${f.label}`;const _=document.createElement("div");_.className="replay-load-modal__phase-bar";const m=document.createElement("div");m.className="replay-load-modal__phase-fill",m.dataset.indeterminate="false",_.append(m),p.append(g,_),r.append(p),o.set(f.stage,{row:p,fill:m})}const l=document.createElement("p");l.className="replay-load-modal__meta",t.append(i,s,a,r,l),e.append(t),n.append(e);let c="";const u=()=>{for(const{row:f,fill:p}of o.values())f.dataset.state="pending",p.style.width="0%",p.dataset.indeterminate="false"},d=f=>{for(const p of aV(f)){const g=o.get(p.stage);g&&(g.row.dataset.state=p.state,g.fill.dataset.indeterminate=p.indeterminate?"true":"false",g.fill.style.width=`${Math.round(p.completion*100)}%`)}},h=f=>{e.hidden=!f};return{show(f,p="Preparing replay..."){c=f,h(!0),u(),s.textContent="Preparing replay pipeline",a.textContent=p,l.textContent=`Loading ${f}`},update(f){h(!0);const p=sV(f);if(d(f),s.textContent=`Phase ${p.index} of ${p.total}: ${p.label}`,a.textContent=lf(f),f.stage==="processing"&&f.totalFrames!==void 0){l.textContent=`${f.processedFrames??0}/${f.totalFrames} frames`;return}if(f.stage==="decoding-stats"&&f.totalChunks!==void 0){l.textContent=`${f.processedChunks??0}/${f.totalChunks} chunks`;return}l.textContent=c?`Loading ${c}`:""},hide(){h(!1)},destroy(){e.remove()}}}const cV=["free","follow"];function pE(n){return n.useReplayBallCam??!1?"player":n.ballCamEnabled?"on":"off"}function jb(n){return n.useReplayBallCam?"player":n.ballCam===!0?"on":n.ballCam===!1?"off":"player"}const mE={fov:110,height:100,pitch:-4,distance:270,stiffness:0,swivelSpeed:1,transitionSpeed:1};class Xg{constructor(e){this.options=e}lastFreeCameraPreset=null;get freeCameraPreset(){return this.lastFreeCameraPreset}set freeCameraPreset(e){this.lastFreeCameraPreset=e}ballCamModeValue="player";get ballCamMode(){return this.ballCamModeValue}autoPossessionEnabledValue=!1;get autoPossessionEnabled(){return this.autoPossessionEnabledValue}static ballCamEnabledForMode(e){return e==="player"?null:e==="on"}followPlayerWithReplayCamera(e,t={}){const i=this.options.getReplayPlayer();i&&(t.preserveAutoPossession||this.setAutoPossessionEnabled(!1,{requestConfigSync:!1}),i.setAttachedPlayer(e),i.setCameraViewMode("follow"),t.usePlayerCameraSettings!==!1&&i.setCustomCameraSettings(null),this.setBallCamMode(t.ballCam??"player"),this.lastFreeCameraPreset=null,t.requestConfigSync!==!1&&this.options.requestConfigSync())}setAutoPossessionEnabled(e,t={}){if(this.autoPossessionEnabledValue===e){this.renderAutoPossessionButton();return}this.autoPossessionEnabledValue=e,this.renderAutoPossessionButton(),t.notify!==!1&&this.options.onAutoPossessionChange?.(e),t.requestConfigSync!==!1&&this.options.requestConfigSync()}renderBallCamButtons(){const{ballCamOffButton:e,ballCamOnButton:t,ballCamPlayerButton:i}=this.options.elements,s=[["off",e],["on",t],["player",i]];for(const[a,r]of s){const o=a===this.ballCamModeValue;r.dataset.active=o?"true":"false",r.setAttribute("aria-pressed",o?"true":"false")}}renderAutoPossessionButton(){this.options.elements.cameraViewAutoPossession.checked=this.autoPossessionEnabledValue}disableAutoPossessionForManualCameraControl(){this.setAutoPossessionEnabled(!1,{requestConfigSync:!1})}setBallCamMode(e){this.ballCamModeValue=e,this.options.getReplayPlayer()?.setBallCamEnabled(Xg.ballCamEnabledForMode(e)),this.renderBallCamButtons()}get nameplateLiftUu(){const e=Number(this.options.elements.nameplateLift.value);return Number.isFinite(e)?e:Wm}applyNameplateLiftUu(e){const{nameplateLift:t,nameplateLiftReadout:i}=this.options.elements,s=e??Wm;t.value=`${s}`,i.textContent=qn(s,"",0)}installEventListeners(e){const{elements:t}=this.options;t.usePlayerCameraSettings.addEventListener("change",()=>{const s=t.usePlayerCameraSettings.checked;t.cameraSettingsControls.hidden=s,this.options.getReplayPlayer()?.setCustomCameraSettings(s?null:this.readCustomCameraSettings()),this.options.requestConfigSync()},{signal:e});for(const s of[t.customCameraFov,t.customCameraHeight,t.customCameraPitch,t.customCameraDistance,t.customCameraStiffness,t.customCameraSwivelSpeed,t.customCameraTransitionSpeed])s.addEventListener("input",()=>{const a=this.readCustomCameraSettings();this.syncCustomCameraSettingControls(a),this.options.getReplayPlayer()?.setCustomCameraSettings(a),this.options.requestConfigSync()},{signal:e});t.attachedPlayer.addEventListener("change",()=>{const s=this.options.getReplayPlayer(),a=t.attachedPlayer.value||null;this.disableAutoPossessionForManualCameraControl(),s?.setAttachedPlayer(a),a&&(s?.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFreeButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setCameraViewMode("free"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFollowButton.addEventListener("click",()=>{const s=this.options.getReplayPlayer();this.disableAutoPossessionForManualCameraControl(),s?.setCameraViewMode("follow"),s?.getState().attachedPlayerId&&(s.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewOverheadButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("overhead"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="overhead",this.options.requestConfigSync()},{signal:e}),t.cameraViewSideButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("side"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="side",this.options.requestConfigSync()},{signal:e});const i=[["off",t.ballCamOffButton],["on",t.ballCamOnButton],["player",t.ballCamPlayerButton]];for(const[s,a]of i)a.addEventListener("click",()=>{this.setBallCamMode(s),this.options.requestConfigSync()},{signal:e});t.cameraViewAutoPossession.addEventListener("change",()=>{this.setAutoPossessionEnabled(t.cameraViewAutoPossession.checked)},{signal:e}),t.nameplateLift.addEventListener("input",()=>{t.nameplateLiftReadout.textContent=qn(this.nameplateLiftUu,"",0),this.options.requestConfigSync()},{signal:e})}setTransportEnabled(e,t){this.options.elements.attachedPlayer.disabled=!e,this.syncModeButtons(e?t:void 0)}syncState(e){const{elements:t}=this.options;t.usePlayerCameraSettings.checked=e.customCameraSettings===null,t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,this.syncCustomCameraSettingControls(e.customCameraSettings??this.getFallbackCameraSettings()),this.ballCamModeValue=pE(e),this.renderBallCamButtons(),t.attachedPlayer.value=e.attachedPlayerId??"",this.syncAvailability(e),this.renderProfile(e)}syncAvailability(e){this.syncModeButtons(e);const i=this.options.getReplayPlayer()!==null&&e?.cameraViewMode==="follow"&&(e.attachedPlayerId??null)!==null;this.options.elements.usePlayerCameraSettings.disabled=!i,this.setCameraSettingControlsEnabled(i&&e?.customCameraSettings!==null),this.options.elements.ballCamOffButton.disabled=!i,this.options.elements.ballCamOnButton.disabled=!i,this.options.elements.ballCamPlayerButton.disabled=!i,this.renderBallCamButtons()}syncModeButtons(e){const t=e?.cameraViewMode??"free",i=this.options.getReplayPlayer()!==null&&e!==void 0,s=(e?.attachedPlayerId??null)!==null;for(const l of cV){const c=this.getCameraViewButton(l);c.disabled=!i||l==="follow"&&!s;const u=l===t;c.dataset.active=u?"true":"false",c.setAttribute("aria-pressed",u?"true":"false")}const{cameraViewOverheadButton:a,cameraViewSideButton:r}=this.options.elements,{cameraViewAutoPossession:o}=this.options.elements;a.disabled=!i,r.disabled=!i,o.disabled=!i,a.dataset.active="false",r.dataset.active="false",this.renderAutoPossessionButton(),a.setAttribute("aria-pressed","false"),r.setAttribute("aria-pressed","false")}populateAttachedPlayerOptions(e){const{attachedPlayer:t}=this.options.elements;t.replaceChildren(),t.append(new Option("Free camera",""));for(const i of e)t.append(new Option(`${i.name} (${i.isTeamZero?"Blue":"Orange"})`,i.id))}renderProfile(e){const t=this.options.elements,i=this.options.getReplayPlayer(),s=e?.attachedPlayerId??null;if(!i||e?.cameraViewMode!=="follow"||s===null){this.renderEmptyProfile("Free camera");return}const a=i.replay.players.find(o=>o.id===s);if(!a){this.renderEmptyProfile("Unknown");return}const r=this.getEffectiveCameraSettings(e);t.cameraProfileReadout.textContent=e.customCameraSettings===null?a.name:`${a.name} custom`,t.cameraFovReadout.textContent=qn(r.fov,"",0),t.cameraHeightReadout.textContent=qn(r.height,"",0),t.cameraPitchReadout.textContent=qn(r.pitch,"",0),t.cameraBaseDistanceReadout.textContent=qn(r.distance,"",0),t.cameraStiffnessReadout.textContent=qn(r.stiffness,"",2)}getFallbackCameraSettings(){return mE}getAttachedPlayerCameraSettings(e){const t=this.options.getReplayPlayer();return!t||e===null?null:t.replay.players.find(i=>i.id===e)?.cameraSettings??null}getEffectiveCameraSettings(e){return{...this.getFallbackCameraSettings(),...this.getAttachedPlayerCameraSettings(e.attachedPlayerId)??{},...e.customCameraSettings??{}}}readCustomCameraSettings(){const e=this.options.elements;return{fov:Number(e.customCameraFov.value),height:Number(e.customCameraHeight.value),pitch:Number(e.customCameraPitch.value),distance:Number(e.customCameraDistance.value),stiffness:Number(e.customCameraStiffness.value),swivelSpeed:Number(e.customCameraSwivelSpeed.value),transitionSpeed:Number(e.customCameraTransitionSpeed.value)}}setCameraSettingControlsEnabled(e){const t=this.options.elements;t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,t.customCameraFov.disabled=!e,t.customCameraHeight.disabled=!e,t.customCameraPitch.disabled=!e,t.customCameraDistance.disabled=!e,t.customCameraStiffness.disabled=!e,t.customCameraSwivelSpeed.disabled=!e,t.customCameraTransitionSpeed.disabled=!e}syncCustomCameraSettingControls(e){const t=this.options.elements,i=this.getFallbackCameraSettings(),s=e.fov??i.fov,a=e.height??i.height,r=e.pitch??i.pitch,o=e.distance??i.distance,l=e.stiffness??i.stiffness,c=e.swivelSpeed??i.swivelSpeed,u=e.transitionSpeed??i.transitionSpeed;t.customCameraFov.value=`${s}`,t.customCameraHeight.value=`${a}`,t.customCameraPitch.value=`${r}`,t.customCameraDistance.value=`${o}`,t.customCameraStiffness.value=`${l}`,t.customCameraSwivelSpeed.value=`${c}`,t.customCameraTransitionSpeed.value=`${u}`,t.customCameraFovReadout.textContent=qn(s,"",0),t.customCameraHeightReadout.textContent=qn(a,"",0),t.customCameraPitchReadout.textContent=qn(r,"",0),t.customCameraDistanceReadout.textContent=qn(o,"",0),t.customCameraStiffnessReadout.textContent=qn(l,"",2),t.customCameraSwivelSpeedReadout.textContent=qn(c,"",1),t.customCameraTransitionSpeedReadout.textContent=qn(u,"",2)}getCameraViewButton(e){switch(e){case"free":return this.options.elements.cameraViewFreeButton;case"follow":return this.options.elements.cameraViewFollowButton}}renderEmptyProfile(e){const t=this.options.elements;t.cameraProfileReadout.textContent=e,t.cameraFovReadout.textContent="--",t.cameraHeightReadout.textContent="--",t.cameraPitchReadout.textContent="--",t.cameraBaseDistanceReadout.textContent="--",t.cameraStiffnessReadout.textContent="--"}}function qn(n,e="",t=0){return n===void 0||Number.isNaN(n)?"--":`${n.toFixed(t)}${e}`}function uV(n){return new Xg(n)}const Zb="subtr-actor-touch-overlay-styles",Kg=5882879,qg=16761180,Jb=120,Qb=4,dV=196,tm=24,ex=210,tx=5,hV=.1,fV=48,pV=["team","intention","kind","height_band","surface","dodge_state","flag"],mV=[{label:"Blue team",color:Kg},{label:"Orange team",color:qg}],_E=[{label:"Shot",color:16711880},{label:"Save",color:58998},{label:"Clear",color:16764928},{label:"Boom",color:16020150},{label:"Pass",color:47103},{label:"Control",color:0},{label:"Advance",color:16486972}],id=[{label:"Control",color:0},{label:"Medium hit",color:16436245},{label:"Hard hit",color:16735596}],sd=[{label:"Ground",color:10741301},{label:"Low air",color:3718648},{label:"High air",color:8490232}],gE=[{label:"Ground",color:8702998},{label:"Air",color:6333946},{label:"Wall",color:16347926}],h_=[{label:"No dodge",color:9741240},{label:"Dodge",color:15235577}],f_=[{label:"First touch",color:16777215},{label:"Contested",color:15680580}],_V=[{title:"Team",entries:mV},{title:"Intention",entries:_E},{title:"Hit strength",entries:id},{title:"Height",entries:sd},{title:"Surface",entries:gE},{title:"Dodge",entries:h_},{title:"Flags",entries:f_}];function gc(n){return Object.fromEntries(n.map(e=>[e.label.toLowerCase().replaceAll(" ","_"),e.color]))}const yE=gc(_E),vE={...gc(id),medium_hit:id[1].color,hard_hit:id[2].color},bE={...gc(sd),low_air:sd[1].color,high_air:sd[2].color},xE=gc(gE),wE={...gc(h_),no_dodge:h_[0].color},p_={first_touch:f_[0].color,contested:f_[1].color},Gi=10134961;function jn(n,e){const t=n.tags;if(!Array.isArray(t))return null;const i=t.find(s=>s.group===e);return i?i.value:null}function SE(n){return jn(n,"possession")??jn(n,"action")}function At(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function nm(n,e){return Math.max(0,n-e)}function ad(n){return n==="team"||n==="intention"||n==="kind"||n==="height_band"||n==="surface"||n==="dodge_state"||n==="flag"}function po(n){const e=Array.isArray(n)?n:n?[n]:["team"],t=new Set,i=[];for(const s of e)ad(s)&&!t.has(s)&&(t.add(s),i.push(s));return i.length>0?i:["team"]}function TE(n){return n[n.length-1]??"team"}function gV(n,e,t){const i=yV(n,TE(t)),s=i?` · ${i.replaceAll("_"," ")}`:"";if(e==="markers")return`${n.playerName}${s}`;const a=Math.round(n.totalBallAdvanceDistance),r=Math.round(n.totalBallRetreatDistance);return a>0&&r>0?`${n.playerName} +${a} / -${r} uu${s}`:r>0?`${n.playerName} -${r} uu${s}`:`${n.playerName} +${a} uu${s}`}function yV(n,e){return e==="intention"?n.intention:e==="kind"?n.kind:e==="height_band"?n.heightBand:e==="surface"?n.surface:e==="dodge_state"?n.dodgeState:e==="flag"?n.contested?"contested":n.firstTouch?"first_touch":null:null}function vV(n){return n.split("_").filter(Boolean).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function ol(n,e,t){return typeof e!="string"||e.length===0?null:{key:n,value:e,label:vV(e),color:t[e]??Gi}}function nx(n,e,t){return e!==!0?null:{key:n,value:"true",label:t,color:p_[n]??Gi}}function bV(n){const e=jn(n,"reception")==="first_touch",t=jn(n,"contested")!=null;return[ol("intention",SE(n),yE),ol("kind",jn(n,"kind"),vE),ol("height_band",jn(n,"height_band"),bE),ol("surface",jn(n,"surface"),xE),ol("dodge_state",jn(n,"dodge_state"),wE),nx("first_touch",e,"First touch"),nx("contested",t,"Contested")].filter(i=>i!=null)}function ME(n,e){return e==="intention"?yE[n.intention??""]??Gi:e==="kind"?vE[n.kind??""]??Gi:e==="height_band"?bE[n.heightBand??""]??Gi:e==="surface"?xE[n.surface??""]??Gi:e==="dodge_state"?wE[n.dodgeState??""]??Gi:e==="flag"?n.contested?p_.contested??Gi:n.firstTouch?p_.first_touch??Gi:Gi:n.isTeamZero?Kg:qg}function xV(n,e){return(e.length>0?e:["team"]).map(i=>ME(n,i))}function EE(n,e){const t=[],i=[...ve(n,"touch")].sort((s,a)=>s.frame!==a.frame?s.frame-a.frame:s.time!==a.time?s.time-a.time:0);for(const s of i){const a=At(s.player),r=e.ballFrames[s.frame]?.position;if(!r)continue;const o=s.ball_movement,c=(o?e.ballFrames[o.end_frame]?.position:null)??r,u=t.length,d=bV(s);t.push({id:`touch-stat:${s.frame}:${a}:${u+1}`,time:e.frames[s.frame]?.time??s.time,frame:s.frame,isTeamZero:s.is_team_0,playerId:a,playerName:e.players.find(h=>h.id===a)?.name??a,kind:jn(s,"kind"),intention:SE(s),heightBand:jn(s,"height_band"),surface:jn(s,"surface"),dodgeState:jn(s,"dodge_state"),firstTouch:jn(s,"reception")==="first_touch",contested:jn(s,"contested")!=null,classifications:d,position:{x:r.x,y:r.y,z:r.z},endPosition:{x:c.x,y:c.y,z:c.z},totalBallTravelDistance:o?nm(o.travel_distance,0):0,totalBallAdvanceDistance:o?nm(o.advance_distance,0):0,totalBallRetreatDistance:o?nm(o.retreat_distance,0):0})}return t}function wV(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function SV(){if(document.getElementById(Zb))return;const n=document.createElement("style");n.id=Zb,n.textContent=` .sap-touch-overlay-root { position: absolute; inset: 0; @@ -5504,45 +5569,45 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function KH(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}function gE(n){return[n.line.material,n.cone.material].flatMap(e=>Array.isArray(e)?e:[e])}function Yb(n,e){for(const t of gE(n))t.transparent=!0,t.opacity=e,t.depthWrite=!1,t.depthTest=!1}function jb(n){n.removeFromParent(),n.line.geometry.dispose(),n.cone.geometry.dispose();for(const e of gE(n))e.dispose()}function l_(n){for(const e of n.ringSegments){e.removeFromParent(),e.geometry.dispose();const t=Array.isArray(e.material)?e.material:[e.material];for(const i of t)i.dispose()}n.ringSegments=[],n.ringColorsKey=""}function qH(n,e,t){const i=new ni(e,t,48,1),s=new Ye({color:n,transparent:!0,opacity:.7,side:ct,depthWrite:!1,depthTest:!1}),a=new we(i,s);return a.rotation.x=-Math.PI/2,a.renderOrder=40,a}function YH(n,e){const t=e.length>0?e:[Vi],i=t.join("|");if(n.ringColorsKey===i)return;l_(n);const s=t.length,a=Wb*Math.max(0,s-1),r=(kH-$b-a)/s,o=t.map((l,c)=>{const u=$b+c*(r+Wb);return qH(l,u,u+r)});for(const l of o)n.ring.add(l),n.ringSegments.push(l);n.ringColorsKey=i}function jH(n,e){for(const t of n.ringSegments){const i=Array.isArray(t.material)?t.material:[t.material];for(const s of i)s.opacity=e}}class ZH{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;arrowStart=new S;arrowEnd=new S;arrowDirection=new S;labelOffset=new S(0,0,Xb);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=Kb;mode="markers";colorModes=["team"];constructor(e,t,i,s,a){XH(),this.scene=e,this.container=t,this.decaySeconds=Math.max(.1,a?.decaySeconds??Kb),this.mode=a?.mode??"markers",this.colorModes=ho(a?.colorModes??a?.colorMode),this.labelOffset.set(0,0,Xb),this.markers=_E(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="touch-event-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-touch-overlay-root",this.container.append(this.labelRoot)}getDecaySeconds(){return this.decaySeconds}setDecaySeconds(e){this.decaySeconds=Math.max(.1,e)}getMode(){return this.mode}setMode(e){this.mode=e}getColorModes(){return[...this.colorModes]}setColorMode(e){this.setColorModes([e])}setColorModes(e){this.colorModes=ho([...e])}update(e){const t=WH(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),l_(a),jb(a.arrow),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.1+.6*r,c=.95+(1-r)*.28,u=pE(this.colorModes),d=mE(s,u),h=$H(s,this.colorModes);YH(o,h),jH(o,l),o.arrow.setColor(d),o.ring.position.set(s.position.x,s.position.y,s.position.z+qp),o.ring.scale.setScalar(c),o.label.textContent=zH(s,this.mode,this.colorModes),o.label.classList.toggle("sap-touch-overlay-label-advancement",this.mode==="advancement");const f=u==="team";o.label.classList.toggle("sap-touch-overlay-label-blue",f&&s.isTeamZero),o.label.classList.toggle("sap-touch-overlay-label-orange",f&&!s.isTeamZero),o.label.style.borderColor=f?"":`#${d.toString(16).padStart(6,"0")}cc`,o.label.style.background=f?"":`#${d.toString(16).padStart(6,"0")}66`,this.updateArrow(o,s,l),this.worldPosition.set(s.position.x,s.position.y,s.position.z),this.worldPosition.add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),KH(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.22+.78*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),l_(e),jb(e.arrow),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Mt;i.renderOrder=40,this.group.add(i);const s=new Tg(new S(0,1,0),new S,1,e.isTeamZero?zg:Hg,1,1);s.visible=!1,s.renderOrder=45,s.line.renderOrder=45,s.cone.renderOrder=45,Yb(s,.7),this.group.add(s);const a=document.createElement("div");a.className=`sap-touch-overlay-label ${e.isTeamZero?"sap-touch-overlay-label-blue":"sap-touch-overlay-label-orange"}`,a.textContent=e.playerName,a.hidden=!0,this.labelRoot.append(a);const r={marker:e,ring:i,ringSegments:[],ringColorsKey:"",arrow:s,label:a};return this.views.set(e.id,r),r}updateArrow(e,t,i){if(this.mode!=="advancement"||t.totalBallTravelDistance<=OH){e.arrow.visible=!1;return}this.arrowStart.set(t.position.x,t.position.y,t.position.z+qp*2),this.arrowEnd.set(t.endPosition.x,t.endPosition.y,t.endPosition.z+qp*2),this.arrowDirection.copy(this.arrowEnd).sub(this.arrowStart);const s=this.arrowDirection.length();if(s0&&r>0)return a/r}const t=n.frames[0],i=n.frames.at(-1);if(t&&i){const s=i.frame_number-t.frame_number,a=i.time-t.time;if(s>0&&a>0)return s/a}return tV}function iV(n,e={}){if(!n)return[];const t=e.preRollSeconds??JH,i=e.minPossessionSeconds??QH,s=e.samePlayerBridgeSeconds??eV,a=ve(n,"player_possession").map(d=>({playerId:At(d.player_id),startFrame:Math.max(0,Math.trunc(al(d.start_frame))),endFrame:Math.max(0,Math.trunc(al(d.end_frame))),startTime:al(d.start_time),endTime:al(d.end_time),duration:al(d.duration),sustainedControl:d.sustained_control})).filter(d=>d.endFrame>d.startFrame&&(d.sustainedControl||d.duration>=i)).sort((d,h)=>d.startFrame-h.startFrame||d.endFrame-h.endFrame),r=nV(n,a),o=Math.max(0,Math.round(t*r)),l=Math.max(0,Math.round(s*r)),c=[];let u=null;for(const d of a){let h=Math.max(0,d.startFrame-o);u&&u.playerId!==d.playerId&&(h=Math.max(h,u.endFrame));const f=c.at(-1);if(f&&f.playerId===d.playerId&&h<=f.endFrame+l){c[c.length-1]={...f,endFrame:Math.max(f.endFrame,d.endFrame),possessionEndFrame:Math.max(f.possessionEndFrame,d.endFrame)},u=d;continue}c.push({playerId:d.playerId,startFrame:h,endFrame:d.endFrame,possessionStartFrame:d.startFrame,possessionEndFrame:d.endFrame}),u=d}return c.map((d,h)=>({...d,endFrame:c[h+1]?.startFrame??Number.POSITIVE_INFINITY}))}function sV(n,e){const t=Math.max(0,Math.trunc(e));return n.find(s=>t>=s.startFrame&&tthis.update(i))))}reset(){this.unsubscribeBeforeRender?.(),this.unsubscribeBeforeRender=null,this.sourcePlayer=null,this.sourceTimeline=null,this.spans=[]}syncCurrentFrame(){const e=this.options.getReplayPlayer();if(!e)return;const t=e.getState();this.update({frameIndex:t.frameIndex,nextFrameIndex:t.frameIndex,alpha:0,currentTime:t.currentTime})}update(e){const t=this.options.getCameraControlsController(),i=this.options.getReplayPlayer();if(!t?.autoPossessionEnabled||!i)return;const s=sV(this.spans,e.frameIndex);if(!s||!i.replay.players.some(r=>r.id===s))return;const a=i.getState();a.cameraViewMode==="follow"&&a.attachedPlayerId===s||t.followPlayerWithReplayCamera(s,{ballCam:"player",preserveAutoPossession:!0,requestConfigSync:!1,usePlayerCameraSettings:!1})}}function rV(n){return new aV(n)}const oV=236,Zl=4120,lV=2300,cV=16185075,uV=.18,dV=1118481,td=5882879,nd=16761180,hV=.55,jp=.12,Zb=.28,fV=3,pV=4,Jb=5,Qb=2,mV=6,_V=856343,gV=.42,yV=18,vV=.24,bV=10,ex=220,xV=200,yE=140,wV=220,SV=100,TV=120;function MV(n){const e=xV/2;if(n){const s=-Zl+ex,a=-e;return{minX:s,maxX:a,centerX:(s+a)/2,width:a-s}}const t=e,i=Zl-ex;return{minX:t,maxX:i,centerX:(t+i)/2,width:i-t}}function EV(n,e,t){if(n.length<2)return[];const i=Math.min(...n),s=Math.max(...n),a=s-i,r=e?-1:1,o=-r;return a<=t?[{kind:"other",centerY:(i+s)/2,halfDepth:Math.max(t-a/2,t*.35),directions:[r,o]}]:[{kind:"back",centerY:e?i:s,halfDepth:t,directions:[r]},{kind:"forward",centerY:e?s:i,halfDepth:t,directions:[o]}]}function CV(n,e){const t=new Ns;return t.moveTo(0,e/2),t.lineTo(n/2,-e/2),t.lineTo(-n/2,-e/2),t.closePath(),new ur(t)}function tx(n){const e=SV*n,t=new Ye({color:dV,transparent:!0,opacity:.9,side:ct,depthWrite:!1,depthTest:!1}),i=new Mt;i.visible=!1;const s=new Dn(yE*.55*n,1),a=new we(s,t);a.position.z=Jb,a.renderOrder=22,i.add(a);const r=CV(TV*n,e),o=new we(r,t);return o.position.z=Jb,o.renderOrder=23,i.add(o),{group:i,shaftGeom:s,shaftMesh:a,headGeom:r,headMesh:o,material:t,headLength:e}}function Zp(n,e,t,i){const s=Math.max(t-n.headLength,n.headLength*.2);n.group.position.x=e,n.group.rotation.z=i>0?0:Math.PI,n.shaftMesh.scale.y=s,n.shaftMesh.position.y=-n.headLength/2,n.headMesh.position.y=t/2-n.headLength/2,n.group.visible=!0}function th(n){n.group.visible=!1}function qr(n,e){const t=new Mt;t.visible=!1;const i=new Ye({color:cV,transparent:!0,opacity:uV,side:ct,depthWrite:!1,depthTest:!1}),s=new Dn(1,1),a=new we(s,i);a.position.z=fV,a.renderOrder=20,t.add(a);const r=new Ye({color:e,transparent:!0,opacity:hV,side:ct,depthWrite:!1,depthTest:!1}),o=new Dn(1,1),l=new we(o,r);l.position.z=pV,l.renderOrder=21,t.add(l);const c=tx(n),u=tx(n);return t.add(c.group),t.add(u.group),{group:t,floorGeom:s,floorMesh:a,floorMaterial:i,stripeGeom:o,stripeMesh:l,stripeMaterial:r,primaryMarker:c,secondaryMarker:u}}function AV(n){n.group.visible=!1,th(n.primaryMarker),th(n.secondaryMarker)}function RV(n,e,t,i){const s=e.halfDepth*2*i,a=Zl*2*i,r=t.width*i,o=t.centerX*i,l=yE*i,c=Math.max(s-32*i,n.primaryMarker.headLength*1.15),u=Math.min(c,Math.max(wV*i,s*.6));if(n.group.position.y=e.centerY*i,n.floorMesh.position.x=0,n.floorMesh.scale.set(a,s,1),n.stripeMesh.position.x=o,n.stripeMesh.scale.set(l,s,1),th(n.primaryMarker),th(n.secondaryMarker),e.directions.length===1)Zp(n.primaryMarker,o,u,e.directions[0]);else{const d=r*.18;Zp(n.primaryMarker,o-d,u,e.directions[0]),Zp(n.secondaryMarker,o+d,u,e.directions[1])}n.group.visible=!0}function nx(n){n.group.removeFromParent(),n.shaftGeom.dispose(),n.headGeom.dispose(),n.material.dispose()}class PV{replay;blueBack;blueForward;blueOther;orangeBack;orangeForward;orangeOther;constructor(e,t,i){this.replay=t,this.blueBack=qr(i,td),this.blueForward=qr(i,td),this.blueOther=qr(i,td),this.orangeBack=qr(i,nd),this.orangeForward=qr(i,nd),this.orangeOther=qr(i,nd);for(const s of this.getZones())e.add(s.group)}update(e,t){const{frameIndex:i}=e,s=oV;for(const a of[!0,!1]){const r=this.replay.players.filter(d=>d.isTeamZero===a).length,o=[];for(const d of this.replay.players){if(d.isTeamZero!==a)continue;const h=d.frames[i];h?.position&&o.push(h.position.y)}const l=MV(a),c=this.getTeamZones(a);for(const d of c.values())AV(d);if(r<2||o.length!==r)continue;const u=EV(o,a,s);for(const d of u){const h=c.get(d.kind);h&&RV(h,d,l,t)}}}dispose(){for(const e of this.getZones())e.group.removeFromParent(),e.floorGeom.dispose(),e.floorMaterial.dispose(),e.stripeGeom.dispose(),e.stripeMaterial.dispose(),nx(e.primaryMarker),nx(e.secondaryMarker)}getTeamZones(e){return e?new Map([["back",this.blueBack],["forward",this.blueForward],["other",this.blueOther]]):new Map([["back",this.orangeBack],["forward",this.orangeForward],["other",this.orangeOther]])}getZones(){return[this.blueBack,this.blueForward,this.blueOther,this.orangeBack,this.orangeForward,this.orangeOther]}}function IV(n){return n==null||Number.isNaN(n)?null:n<0?"team-zero":"team-one"}class LV{group;teamZeroSide;teamOneSide;constructor(e,t){this.group=new Mt,this.teamZeroSide=this.createHalfFieldSide(td),this.teamOneSide=this.createHalfFieldSide(nd);const i=Zl*t,s=5120*t;this.teamZeroSide.mesh.position.set(0,-s/2,Qb),this.teamZeroSide.mesh.scale.set(i*2,s,1),this.teamOneSide.mesh.position.set(0,s/2,Qb),this.teamOneSide.mesh.scale.set(i*2,s,1),this.group.add(this.teamZeroSide.mesh),this.group.add(this.teamOneSide.mesh),e.add(this.group)}update(e){const t=IV(e);this.teamZeroSide.material.opacity=t==="team-zero"?Zb:jp,this.teamOneSide.material.opacity=t==="team-one"?Zb:jp}dispose(){this.group.removeFromParent(),this.teamZeroSide.mesh.geometry.dispose(),this.teamZeroSide.material.dispose(),this.teamOneSide.mesh.geometry.dispose(),this.teamOneSide.material.dispose()}createHalfFieldSide(e){const t=new Dn(1,1),i=new Ye({color:e,transparent:!0,opacity:jp,side:ct,depthWrite:!1,depthTest:!1}),s=new we(t,i);return s.renderOrder=18,{mesh:s,material:i}}}function DV(n,e){const t=new Mt,i=Zl*2*e,s=(a,r,o)=>{const l=new Dn(i,r*e),c=new Ye({color:_V,transparent:!0,opacity:o,side:ct,depthWrite:!1,depthTest:!1}),u=new we(l,c);return u.position.set(0,a,mV),u.renderOrder=24,u};for(const a of[-1,1]){const r=a*lV*e;t.add(s(r,yV,gV))}return t.add(s(0,bV,vV)),n.add(t),t}function cn(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function c_(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Oi(n,e){return`
${n}${e}
`}function kV(n,e){return` - ${Oi("50s",cn(n?.count))} - ${Oi("Blue wins",`${cn(n?.wins)} (${c_(n?.wins,n?.count)})`)} - ${Oi("Orange wins",`${cn(n?.losses)} (${c_(n?.losses,n?.count)})`)} - ${Oi("Neutral",cn(n?.neutral_outcomes))} - ${Oi("Blue poss after",cn(n?.possession_after_count))} - ${Oi("Orange poss after",cn(n?.opponent_possession_after_count))} - ${Oi("Kickoff 50s",cn(n?.kickoff_count))} - ${Oi("Blue kickoff wins",cn(n?.kickoff_wins))} - ${Oi("Orange kickoff wins",cn(n?.kickoff_losses))} - ${Oi("Blue kickoff poss",cn(n?.kickoff_possession_after_count))} - ${Oi("Orange kickoff poss",cn(n?.kickoff_opponent_possession_after_count))} - `}function ix(n){return` + `,document.head.append(n)}function TV(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}function CE(n){return[n.line.material,n.cone.material].flatMap(e=>Array.isArray(e)?e:[e])}function ix(n,e){for(const t of CE(n))t.transparent=!0,t.opacity=e,t.depthWrite=!1,t.depthTest=!1}function sx(n){n.removeFromParent(),n.line.geometry.dispose(),n.cone.geometry.dispose();for(const e of CE(n))e.dispose()}function m_(n){for(const e of n.ringSegments){e.removeFromParent(),e.geometry.dispose();const t=Array.isArray(e.material)?e.material:[e.material];for(const i of t)i.dispose()}n.ringSegments=[],n.ringColorsKey=""}function MV(n,e,t){const i=new ni(e,t,48,1),s=new Ye({color:n,transparent:!0,opacity:.7,side:ct,depthWrite:!1,depthTest:!1}),a=new we(i,s);return a.rotation.x=-Math.PI/2,a.renderOrder=40,a}function EV(n,e){const t=e.length>0?e:[Gi],i=t.join("|");if(n.ringColorsKey===i)return;m_(n);const s=t.length,a=Qb*Math.max(0,s-1),r=(dV-Jb-a)/s,o=t.map((l,c)=>{const u=Jb+c*(r+Qb);return MV(l,u,u+r)});for(const l of o)n.ring.add(l),n.ringSegments.push(l);n.ringColorsKey=i}function CV(n,e){for(const t of n.ringSegments){const i=Array.isArray(t.material)?t.material:[t.material];for(const s of i)s.opacity=e}}class AV{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;arrowStart=new S;arrowEnd=new S;arrowDirection=new S;labelOffset=new S(0,0,ex);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=tx;mode="markers";colorModes=["team"];constructor(e,t,i,s,a){SV(),this.scene=e,this.container=t,this.decaySeconds=Math.max(.1,a?.decaySeconds??tx),this.mode=a?.mode??"markers",this.colorModes=po(a?.colorModes??a?.colorMode),this.labelOffset.set(0,0,ex),this.markers=EE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="touch-event-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-touch-overlay-root",this.container.append(this.labelRoot)}getDecaySeconds(){return this.decaySeconds}setDecaySeconds(e){this.decaySeconds=Math.max(.1,e)}getMode(){return this.mode}setMode(e){this.mode=e}getColorModes(){return[...this.colorModes]}setColorMode(e){this.setColorModes([e])}setColorModes(e){this.colorModes=po([...e])}update(e){const t=wV(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),m_(a),sx(a.arrow),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.1+.6*r,c=.95+(1-r)*.28,u=TE(this.colorModes),d=ME(s,u),h=xV(s,this.colorModes);EV(o,h),CV(o,l),o.arrow.setColor(d),o.ring.position.set(s.position.x,s.position.y,s.position.z+tm),o.ring.scale.setScalar(c),o.label.textContent=gV(s,this.mode,this.colorModes),o.label.classList.toggle("sap-touch-overlay-label-advancement",this.mode==="advancement");const f=u==="team";o.label.classList.toggle("sap-touch-overlay-label-blue",f&&s.isTeamZero),o.label.classList.toggle("sap-touch-overlay-label-orange",f&&!s.isTeamZero),o.label.style.borderColor=f?"":`#${d.toString(16).padStart(6,"0")}cc`,o.label.style.background=f?"":`#${d.toString(16).padStart(6,"0")}66`,this.updateArrow(o,s,l),this.worldPosition.set(s.position.x,s.position.y,s.position.z),this.worldPosition.add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),TV(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.22+.78*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),m_(e),sx(e.arrow),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Mt;i.renderOrder=40,this.group.add(i);const s=new Ig(new S(0,1,0),new S,1,e.isTeamZero?Kg:qg,1,1);s.visible=!1,s.renderOrder=45,s.line.renderOrder=45,s.cone.renderOrder=45,ix(s,.7),this.group.add(s);const a=document.createElement("div");a.className=`sap-touch-overlay-label ${e.isTeamZero?"sap-touch-overlay-label-blue":"sap-touch-overlay-label-orange"}`,a.textContent=e.playerName,a.hidden=!0,this.labelRoot.append(a);const r={marker:e,ring:i,ringSegments:[],ringColorsKey:"",arrow:s,label:a};return this.views.set(e.id,r),r}updateArrow(e,t,i){if(this.mode!=="advancement"||t.totalBallTravelDistance<=hV){e.arrow.visible=!1;return}this.arrowStart.set(t.position.x,t.position.y,t.position.z+tm*2),this.arrowEnd.set(t.endPosition.x,t.endPosition.y,t.endPosition.z+tm*2),this.arrowDirection.copy(this.arrowEnd).sub(this.arrowStart);const s=this.arrowDirection.length();if(s0&&r>0)return a/r}const t=n.frames[0],i=n.frames.at(-1);if(t&&i){const s=i.frame_number-t.frame_number,a=i.time-t.time;if(s>0&&a>0)return s/a}return LV}function DV(n,e={}){if(!n)return[];const t=e.preRollSeconds??RV,i=e.minPossessionSeconds??PV,s=e.samePlayerBridgeSeconds??IV,a=ve(n,"player_possession").map(d=>({playerId:At(d.player_id),startFrame:Math.max(0,Math.trunc(ll(d.start_frame))),endFrame:Math.max(0,Math.trunc(ll(d.end_frame))),startTime:ll(d.start_time),endTime:ll(d.end_time),duration:ll(d.duration),sustainedControl:d.sustained_control})).filter(d=>d.endFrame>d.startFrame&&(d.sustainedControl||d.duration>=i)).sort((d,h)=>d.startFrame-h.startFrame||d.endFrame-h.endFrame),r=kV(n,a),o=Math.max(0,Math.round(t*r)),l=Math.max(0,Math.round(s*r)),c=[];let u=null;for(const d of a){let h=Math.max(0,d.startFrame-o);u&&u.playerId!==d.playerId&&(h=Math.max(h,u.endFrame));const f=c.at(-1);if(f&&f.playerId===d.playerId&&h<=f.endFrame+l){c[c.length-1]={...f,endFrame:Math.max(f.endFrame,d.endFrame),possessionEndFrame:Math.max(f.possessionEndFrame,d.endFrame)},u=d;continue}c.push({playerId:d.playerId,startFrame:h,endFrame:d.endFrame,possessionStartFrame:d.startFrame,possessionEndFrame:d.endFrame}),u=d}return c.map((d,h)=>({...d,endFrame:c[h+1]?.startFrame??Number.POSITIVE_INFINITY}))}function OV(n,e){const t=Math.max(0,Math.trunc(e));return n.find(s=>t>=s.startFrame&&tthis.update(i))))}reset(){this.unsubscribeBeforeRender?.(),this.unsubscribeBeforeRender=null,this.sourcePlayer=null,this.sourceTimeline=null,this.spans=[]}syncCurrentFrame(){const e=this.options.getReplayPlayer();if(!e)return;const t=e.getState();this.update({frameIndex:t.frameIndex,nextFrameIndex:t.frameIndex,alpha:0,currentTime:t.currentTime})}update(e){const t=this.options.getCameraControlsController(),i=this.options.getReplayPlayer();if(!t?.autoPossessionEnabled||!i)return;const s=OV(this.spans,e.frameIndex);if(!s||!i.replay.players.some(r=>r.id===s))return;const a=i.getState();a.cameraViewMode==="follow"&&a.attachedPlayerId===s||t.followPlayerWithReplayCamera(s,{ballCam:"player",preserveAutoPossession:!0,requestConfigSync:!1,usePlayerCameraSettings:!1})}}function NV(n){return new FV(n)}const UV=236,tc=4120,BV=2300,zV=16185075,HV=.18,VV=1118481,rd=5882879,od=16761180,GV=.55,im=.12,ax=.28,$V=3,WV=4,rx=5,ox=2,XV=6,KV=856343,qV=.42,YV=18,jV=.24,ZV=10,lx=220,JV=200,AE=140,QV=220,e5=100,t5=120;function n5(n){const e=JV/2;if(n){const s=-tc+lx,a=-e;return{minX:s,maxX:a,centerX:(s+a)/2,width:a-s}}const t=e,i=tc-lx;return{minX:t,maxX:i,centerX:(t+i)/2,width:i-t}}function i5(n,e,t){if(n.length<2)return[];const i=Math.min(...n),s=Math.max(...n),a=s-i,r=e?-1:1,o=-r;return a<=t?[{kind:"other",centerY:(i+s)/2,halfDepth:Math.max(t-a/2,t*.35),directions:[r,o]}]:[{kind:"back",centerY:e?i:s,halfDepth:t,directions:[r]},{kind:"forward",centerY:e?s:i,halfDepth:t,directions:[o]}]}function s5(n,e){const t=new Ns;return t.moveTo(0,e/2),t.lineTo(n/2,-e/2),t.lineTo(-n/2,-e/2),t.closePath(),new dr(t)}function cx(n){const e=e5*n,t=new Ye({color:VV,transparent:!0,opacity:.9,side:ct,depthWrite:!1,depthTest:!1}),i=new Mt;i.visible=!1;const s=new kn(AE*.55*n,1),a=new we(s,t);a.position.z=rx,a.renderOrder=22,i.add(a);const r=s5(t5*n,e),o=new we(r,t);return o.position.z=rx,o.renderOrder=23,i.add(o),{group:i,shaftGeom:s,shaftMesh:a,headGeom:r,headMesh:o,material:t,headLength:e}}function sm(n,e,t,i){const s=Math.max(t-n.headLength,n.headLength*.2);n.group.position.x=e,n.group.rotation.z=i>0?0:Math.PI,n.shaftMesh.scale.y=s,n.shaftMesh.position.y=-n.headLength/2,n.headMesh.position.y=t/2-n.headLength/2,n.group.visible=!0}function oh(n){n.group.visible=!1}function jr(n,e){const t=new Mt;t.visible=!1;const i=new Ye({color:zV,transparent:!0,opacity:HV,side:ct,depthWrite:!1,depthTest:!1}),s=new kn(1,1),a=new we(s,i);a.position.z=$V,a.renderOrder=20,t.add(a);const r=new Ye({color:e,transparent:!0,opacity:GV,side:ct,depthWrite:!1,depthTest:!1}),o=new kn(1,1),l=new we(o,r);l.position.z=WV,l.renderOrder=21,t.add(l);const c=cx(n),u=cx(n);return t.add(c.group),t.add(u.group),{group:t,floorGeom:s,floorMesh:a,floorMaterial:i,stripeGeom:o,stripeMesh:l,stripeMaterial:r,primaryMarker:c,secondaryMarker:u}}function a5(n){n.group.visible=!1,oh(n.primaryMarker),oh(n.secondaryMarker)}function r5(n,e,t,i){const s=e.halfDepth*2*i,a=tc*2*i,r=t.width*i,o=t.centerX*i,l=AE*i,c=Math.max(s-32*i,n.primaryMarker.headLength*1.15),u=Math.min(c,Math.max(QV*i,s*.6));if(n.group.position.y=e.centerY*i,n.floorMesh.position.x=0,n.floorMesh.scale.set(a,s,1),n.stripeMesh.position.x=o,n.stripeMesh.scale.set(l,s,1),oh(n.primaryMarker),oh(n.secondaryMarker),e.directions.length===1)sm(n.primaryMarker,o,u,e.directions[0]);else{const d=r*.18;sm(n.primaryMarker,o-d,u,e.directions[0]),sm(n.secondaryMarker,o+d,u,e.directions[1])}n.group.visible=!0}function ux(n){n.group.removeFromParent(),n.shaftGeom.dispose(),n.headGeom.dispose(),n.material.dispose()}class o5{replay;blueBack;blueForward;blueOther;orangeBack;orangeForward;orangeOther;constructor(e,t,i){this.replay=t,this.blueBack=jr(i,rd),this.blueForward=jr(i,rd),this.blueOther=jr(i,rd),this.orangeBack=jr(i,od),this.orangeForward=jr(i,od),this.orangeOther=jr(i,od);for(const s of this.getZones())e.add(s.group)}update(e,t){const{frameIndex:i}=e,s=UV;for(const a of[!0,!1]){const r=this.replay.players.filter(d=>d.isTeamZero===a).length,o=[];for(const d of this.replay.players){if(d.isTeamZero!==a)continue;const h=d.frames[i];h?.position&&o.push(h.position.y)}const l=n5(a),c=this.getTeamZones(a);for(const d of c.values())a5(d);if(r<2||o.length!==r)continue;const u=i5(o,a,s);for(const d of u){const h=c.get(d.kind);h&&r5(h,d,l,t)}}}dispose(){for(const e of this.getZones())e.group.removeFromParent(),e.floorGeom.dispose(),e.floorMaterial.dispose(),e.stripeGeom.dispose(),e.stripeMaterial.dispose(),ux(e.primaryMarker),ux(e.secondaryMarker)}getTeamZones(e){return e?new Map([["back",this.blueBack],["forward",this.blueForward],["other",this.blueOther]]):new Map([["back",this.orangeBack],["forward",this.orangeForward],["other",this.orangeOther]])}getZones(){return[this.blueBack,this.blueForward,this.blueOther,this.orangeBack,this.orangeForward,this.orangeOther]}}function l5(n){return n==null||Number.isNaN(n)?null:n<0?"team-zero":"team-one"}class c5{group;teamZeroSide;teamOneSide;constructor(e,t){this.group=new Mt,this.teamZeroSide=this.createHalfFieldSide(rd),this.teamOneSide=this.createHalfFieldSide(od);const i=tc*t,s=5120*t;this.teamZeroSide.mesh.position.set(0,-s/2,ox),this.teamZeroSide.mesh.scale.set(i*2,s,1),this.teamOneSide.mesh.position.set(0,s/2,ox),this.teamOneSide.mesh.scale.set(i*2,s,1),this.group.add(this.teamZeroSide.mesh),this.group.add(this.teamOneSide.mesh),e.add(this.group)}update(e){const t=l5(e);this.teamZeroSide.material.opacity=t==="team-zero"?ax:im,this.teamOneSide.material.opacity=t==="team-one"?ax:im}dispose(){this.group.removeFromParent(),this.teamZeroSide.mesh.geometry.dispose(),this.teamZeroSide.material.dispose(),this.teamOneSide.mesh.geometry.dispose(),this.teamOneSide.material.dispose()}createHalfFieldSide(e){const t=new kn(1,1),i=new Ye({color:e,transparent:!0,opacity:im,side:ct,depthWrite:!1,depthTest:!1}),s=new we(t,i);return s.renderOrder=18,{mesh:s,material:i}}}function u5(n,e){const t=new Mt,i=tc*2*e,s=(a,r,o)=>{const l=new kn(i,r*e),c=new Ye({color:KV,transparent:!0,opacity:o,side:ct,depthWrite:!1,depthTest:!1}),u=new we(l,c);return u.position.set(0,a,XV),u.renderOrder=24,u};for(const a of[-1,1]){const r=a*BV*e;t.add(s(r,YV,qV))}return t.add(s(0,ZV,jV)),n.add(t),t}function cn(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function __(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Fi(n,e){return`
${n}${e}
`}function d5(n,e){return` + ${Fi("50s",cn(n?.count))} + ${Fi("Blue wins",`${cn(n?.wins)} (${__(n?.wins,n?.count)})`)} + ${Fi("Orange wins",`${cn(n?.losses)} (${__(n?.losses,n?.count)})`)} + ${Fi("Neutral",cn(n?.neutral_outcomes))} + ${Fi("Blue poss after",cn(n?.possession_after_count))} + ${Fi("Orange poss after",cn(n?.opponent_possession_after_count))} + ${Fi("Kickoff 50s",cn(n?.kickoff_count))} + ${Fi("Blue kickoff wins",cn(n?.kickoff_wins))} + ${Fi("Orange kickoff wins",cn(n?.kickoff_losses))} + ${Fi("Blue kickoff poss",cn(n?.kickoff_possession_after_count))} + ${Fi("Orange kickoff poss",cn(n?.kickoff_opponent_possession_after_count))} + `}function dx(n){return`
50s${cn(n?.count)}
-
Wins${cn(n?.wins)} (${c_(n?.wins,n?.count)})
+
Wins${cn(n?.wins)} (${__(n?.wins,n?.count)})
Losses${cn(n?.losses)}
Neutral${cn(n?.neutral_outcomes)}
Poss after${cn(n?.possession_after_count)}
Kickoff 50s${cn(n?.kickoff_count)}
Kickoff wins${cn(n?.kickoff_wins)}
Kickoff poss${cn(n?.kickoff_possession_after_count)}
- `}function OV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function FV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function sx(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=FV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function ax(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function u_(n,e){return`
${ax(n)}${ax(e)}
`}function NV(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function vE(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="own"?"Blue control":"Orange control":n==="own"?"Team control":"Opp control"}function d_(n){return n.kind==="shared"?["own","neutral","opponent"]:["own","neutral","opponent"]}function UV(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function BV(n){return n.kind==="shared"?["defensive_third","neutral_third","offensive_third"]:["defensive_third","neutral_third","offensive_third"]}function zV(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="defensive_half"?"Blue half":"Orange half":n==="defensive_half"?"Own half":"Opp half"}function HV(n){return n.kind==="shared"?["defensive_half","neutral","offensive_half"]:["defensive_half","neutral","offensive_half"]}function VV(n,e,t,i){for(const s of t){const a=s==="possession_state"?d_(i):s==="field_third"?BV(i):HV(i),r=a.indexOf(n[s]),o=a.indexOf(e[s]),l=r===-1?Number.MAX_SAFE_INTEGER:r,c=o===-1?Number.MAX_SAFE_INTEGER:o;if(l!==c)return l-c}return 0}function GV(n,e,t){const i=(s,a)=>s==="possession_state"?vE(a,t):s==="field_third"?UV(a,t):zV(a,t);if(e.length===1){const s=e[0];return i(s,n[s])}return e.map(s=>i(s,n[s])).join(" / ")}function $V(n,e,t,i){if(e.length===0)return"";const s=new Map;if(n?.labeled_time?.entries?.length)for(const a of n.labeled_time.entries){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=s.get(c);u?u.total+=a.value:s.set(c,{values:o,total:a.value})}if(s.size===0&&e.length===1&&e[0]==="possession_state"){const a=new Map;return n&&(a.set("own",n.possession_time),a.set("neutral",n.neutral_time??0),a.set("opponent",n.opponent_possession_time)),d_(i).some(r=>(a.get(r)??0)>0)?d_(i).filter(r=>a.has(r)).map(r=>u_(vE(r,i),sx(a.get(r),t))).join(""):""}return[...s.values()].sort((a,r)=>VV(a.values,r.values,e,i)).map(a=>u_(GV(a.values,e,i),sx(a.total,t))).join("")}function rx(n,e){const t=n?.tracked_time,i=NV(e.breakdownClasses),s=$V(n,i,t,e.labelPerspective);return` - ${u_("Tracked",OV(t,1,"s"))} + `}function h5(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function f5(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function hx(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=f5(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function fx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function g_(n,e){return`
${fx(n)}${fx(e)}
`}function p5(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function RE(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="own"?"Blue control":"Orange control":n==="own"?"Team control":"Opp control"}function y_(n){return n.kind==="shared"?["own","neutral","opponent"]:["own","neutral","opponent"]}function m5(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function _5(n){return n.kind==="shared"?["defensive_third","neutral_third","offensive_third"]:["defensive_third","neutral_third","offensive_third"]}function g5(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="defensive_half"?"Blue half":"Orange half":n==="defensive_half"?"Own half":"Opp half"}function y5(n){return n.kind==="shared"?["defensive_half","neutral","offensive_half"]:["defensive_half","neutral","offensive_half"]}function v5(n,e,t,i){for(const s of t){const a=s==="possession_state"?y_(i):s==="field_third"?_5(i):y5(i),r=a.indexOf(n[s]),o=a.indexOf(e[s]),l=r===-1?Number.MAX_SAFE_INTEGER:r,c=o===-1?Number.MAX_SAFE_INTEGER:o;if(l!==c)return l-c}return 0}function b5(n,e,t){const i=(s,a)=>s==="possession_state"?RE(a,t):s==="field_third"?m5(a,t):g5(a,t);if(e.length===1){const s=e[0];return i(s,n[s])}return e.map(s=>i(s,n[s])).join(" / ")}function x5(n,e,t,i){if(e.length===0)return"";const s=new Map;if(n?.labeled_time?.entries?.length)for(const a of n.labeled_time.entries){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=s.get(c);u?u.total+=a.value:s.set(c,{values:o,total:a.value})}if(s.size===0&&e.length===1&&e[0]==="possession_state"){const a=new Map;return n&&(a.set("own",n.possession_time),a.set("neutral",n.neutral_time??0),a.set("opponent",n.opponent_possession_time)),y_(i).some(r=>(a.get(r)??0)>0)?y_(i).filter(r=>a.has(r)).map(r=>g_(RE(r,i),hx(a.get(r),t))).join(""):""}return[...s.values()].sort((a,r)=>v5(a.values,r.values,e,i)).map(a=>g_(b5(a.values,e,i),hx(a.total,t))).join("")}function px(n,e){const t=n?.tracked_time,i=p5(e.breakdownClasses),s=x5(n,i,t,e.labelPerspective);return` + ${g_("Tracked",h5(t,1,"s"))} ${s} - `}function WV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function XV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function KV(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=XV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function ox(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function bE(n,e){return`
${ox(n)}${ox(e)}
`}function qV(n,e){return n==="neutral"?"Neutral zone":e.kind==="shared"?n==="defensive_half"?"Blue side":"Orange side":n==="defensive_half"?"Own half":"Opp half"}function YV(n,e,t){const i=new Map;if(n&&(i.set("defensive_half",n.defensive_half_time),i.set("neutral",n.neutral_time??0),i.set("offensive_half",n.offensive_half_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_half")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_half","neutral","offensive_half"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>bE(qV(a,t),KV(i.get(a),e))).join(""):""}function lx(n,e){const t=n?.tracked_time,i=YV(n,t,e.labelPerspective);return` - ${i.length===0?bE("Tracked",WV(t,1,"s")):""} + `}function w5(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function S5(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function T5(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=S5(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function mx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function PE(n,e){return`
${mx(n)}${mx(e)}
`}function M5(n,e){return n==="neutral"?"Neutral zone":e.kind==="shared"?n==="defensive_half"?"Blue side":"Orange side":n==="defensive_half"?"Own half":"Opp half"}function E5(n,e,t){const i=new Map;if(n&&(i.set("defensive_half",n.defensive_half_time),i.set("neutral",n.neutral_time??0),i.set("offensive_half",n.offensive_half_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_half")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_half","neutral","offensive_half"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>PE(M5(a,t),T5(i.get(a),e))).join(""):""}function _x(n,e){const t=n?.tracked_time,i=E5(n,t,e.labelPerspective);return` + ${i.length===0?PE("Tracked",w5(t,1,"s")):""} ${i} - `}function jV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function ZV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function JV(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=ZV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function cx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function xE(n,e){return`
${cx(n)}${cx(e)}
`}function QV(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function e5(n,e,t){const i=new Map;if(n&&(i.set("defensive_third",n.defensive_third_time),i.set("neutral_third",n.neutral_third_time??0),i.set("offensive_third",n.offensive_third_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_third")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_third","neutral_third","offensive_third"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>xE(QV(a,t),JV(i.get(a),e))).join(""):""}function ux(n,e){const t=n?.tracked_time,i=e5(n,t,e.labelPerspective);return` - ${i.length===0?xE("Tracked",jV(t,1,"s")):""} + `}function C5(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function A5(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function R5(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=A5(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function gx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function IE(n,e){return`
${gx(n)}${gx(e)}
`}function P5(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function I5(n,e,t){const i=new Map;if(n&&(i.set("defensive_third",n.defensive_third_time),i.set("neutral_third",n.neutral_third_time??0),i.set("offensive_third",n.offensive_third_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_third")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_third","neutral_third","offensive_third"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>IE(P5(a,t),R5(i.get(a),e))).join(""):""}function yx(n,e){const t=n?.tracked_time,i=I5(n,t,e.labelPerspective);return` + ${i.length===0?IE("Tracked",C5(t,1,"s")):""} ${i} - `}function Fa(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Na(n,e){return`
${n}${e}
`}function Jp(n){return` - ${Na("Rushes",Fa(n?.count))} - ${Na("2v1",Fa(n?.two_v_one_count))} - ${Na("2v2",Fa(n?.two_v_two_count))} - ${Na("2v3",Fa(n?.two_v_three_count))} - ${Na("3v1",Fa(n?.three_v_one_count))} - ${Na("3v2",Fa(n?.three_v_two_count))} - ${Na("3v3",Fa(n?.three_v_three_count))} - `}const dx="subtr-actor-fifty-fifty-overlay-styles",t5=5882879,n5=16761180,i5=15988472,s5=180,a5=4;function h_(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function hx(n,e){const t=h_(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function r5(n,e){const t=hx(e,n.team_zero_player),i=hx(e,n.team_one_player),s=n.is_kickoff?"Kickoff 50/50":"50/50",a=n.winning_team_is_team_0===void 0?null:n.winning_team_is_team_0,r=n.possession_team_is_team_0===void 0?null:n.possession_team_is_team_0,o=a===null?"neutral":a?"blue win":"orange win",l=r===null?"neutral poss":r?"blue poss":"orange poss",c=a===null?"sap-fifty-fifty-overlay-label-neutral":a?"sap-fifty-fifty-overlay-label-blue":"sap-fifty-fifty-overlay-label-orange";return{text:`${s}: ${t} vs ${i} | ${o} | ${l}`,className:c,winnerIsTeamZero:a}}function wE(n,e){return ve(n,"fifty_fifty").map(t=>{const i=r5(t,e),s=new S(...t.team_zero_position),a=new S(...t.team_one_position),r=new S(...t.midpoint),o=e.frames[t.start_frame]?.time??t.start_time;return{id:`fifty-fifty:${t.start_frame}:${h_(t.team_zero_player)}:${h_(t.team_one_player)}`,time:o,frame:t.start_frame,label:i.text,labelClassName:i.className,axisStart:s,axisEnd:a,midpoint:r,winnerIsTeamZero:i.winnerIsTeamZero}})}function o5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function l5(){if(document.getElementById(dx))return;const n=document.createElement("style");n.id=dx,n.textContent=` + `}function Na(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Ua(n,e){return`
${n}${e}
`}function am(n){return` + ${Ua("Rushes",Na(n?.count))} + ${Ua("2v1",Na(n?.two_v_one_count))} + ${Ua("2v2",Na(n?.two_v_two_count))} + ${Ua("2v3",Na(n?.two_v_three_count))} + ${Ua("3v1",Na(n?.three_v_one_count))} + ${Ua("3v2",Na(n?.three_v_two_count))} + ${Ua("3v3",Na(n?.three_v_three_count))} + `}const vx="subtr-actor-fifty-fifty-overlay-styles",L5=5882879,k5=16761180,D5=15988472,O5=180,F5=4;function v_(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function bx(n,e){const t=v_(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function N5(n,e){const t=bx(e,n.team_zero_player),i=bx(e,n.team_one_player),s=n.is_kickoff?"Kickoff 50/50":"50/50",a=n.winning_team_is_team_0===void 0?null:n.winning_team_is_team_0,r=n.possession_team_is_team_0===void 0?null:n.possession_team_is_team_0,o=a===null?"neutral":a?"blue win":"orange win",l=r===null?"neutral poss":r?"blue poss":"orange poss",c=a===null?"sap-fifty-fifty-overlay-label-neutral":a?"sap-fifty-fifty-overlay-label-blue":"sap-fifty-fifty-overlay-label-orange";return{text:`${s}: ${t} vs ${i} | ${o} | ${l}`,className:c,winnerIsTeamZero:a}}function LE(n,e){return ve(n,"fifty_fifty").map(t=>{const i=N5(t,e),s=new S(...t.team_zero_position),a=new S(...t.team_one_position),r=new S(...t.midpoint),o=e.frames[t.start_frame]?.time??t.start_time;return{id:`fifty-fifty:${t.start_frame}:${v_(t.team_zero_player)}:${v_(t.team_one_player)}`,time:o,frame:t.start_frame,label:i.text,labelClassName:i.className,axisStart:s,axisEnd:a,midpoint:r,winnerIsTeamZero:i.winnerIsTeamZero}})}function U5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function B5(){if(document.getElementById(vx))return;const n=document.createElement("style");n.id=vx,n.textContent=` .sap-fifty-fifty-overlay-root { position: absolute; inset: 0; @@ -5584,7 +5649,7 @@ void main() { border-color: rgba(243, 246, 248, 0.4); background: rgba(34, 41, 47, 0.86); } - `,document.head.append(n)}function c5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class u5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,s5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=a5;constructor(e,t,i,s){l5(),this.scene=e,this.container=t,this.markers=wE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="fifty-fifty-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-fifty-fifty-overlay-root",this.container.append(this.labelRoot)}update(e){const t=o5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.line.removeFromParent(),a.line.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.12+.78*r;o.material.opacity=l;const c=o.line.geometry.getAttribute("position");c.setXYZ(0,s.axisStart.x,s.axisStart.y,s.axisStart.z+24),c.setXYZ(1,s.axisEnd.x,s.axisEnd.y,s.axisEnd.z+24),c.needsUpdate=!0,this.worldPosition.copy(s.midpoint).add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),c5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.24+.76*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.line.removeFromParent(),e.line.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ge().setFromPoints([e.axisStart,e.axisEnd]),s=new Rt({color:e.winnerIsTeamZero===null?i5:e.winnerIsTeamZero?t5:n5,transparent:!0,opacity:.9}),a=new In(i,s);a.renderOrder=3,this.group.add(a);const r=document.createElement("div");r.className=`sap-fifty-fifty-overlay-label ${e.labelClassName}`,r.textContent=e.label,this.labelRoot.append(r);const o={marker:e,line:a,material:s,label:r};return this.views.set(e.id,o),o}}const fx="subtr-actor-ceiling-shot-overlay-styles",d5=5882879,h5=16761180,f5=16185075,p5=140,m5=215,_5=220,g5=4.5;function SE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function y5(n,e){const t=SE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function TE(n,e){return ve(n,"ceiling_shot").map(t=>{const i=y5(e,t.player),s=SE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`ceiling-shot:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,ceilingContactPosition:{x:t.ceiling_contact_position[0],y:t.ceiling_contact_position[1],z:t.ceiling_contact_position[2]},touchPosition:{x:t.touch_position[0],y:t.touch_position[1],z:t.touch_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function v5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function b5(){if(document.getElementById(fx))return;const n=document.createElement("style");n.id=fx,n.textContent=` + `,document.head.append(n)}function z5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class H5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,O5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=F5;constructor(e,t,i,s){B5(),this.scene=e,this.container=t,this.markers=LE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="fifty-fifty-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-fifty-fifty-overlay-root",this.container.append(this.labelRoot)}update(e){const t=U5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.line.removeFromParent(),a.line.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.12+.78*r;o.material.opacity=l;const c=o.line.geometry.getAttribute("position");c.setXYZ(0,s.axisStart.x,s.axisStart.y,s.axisStart.z+24),c.setXYZ(1,s.axisEnd.x,s.axisEnd.y,s.axisEnd.z+24),c.needsUpdate=!0,this.worldPosition.copy(s.midpoint).add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),z5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.24+.76*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.line.removeFromParent(),e.line.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ge().setFromPoints([e.axisStart,e.axisEnd]),s=new Rt({color:e.winnerIsTeamZero===null?D5:e.winnerIsTeamZero?L5:k5,transparent:!0,opacity:.9}),a=new In(i,s);a.renderOrder=3,this.group.add(a);const r=document.createElement("div");r.className=`sap-fifty-fifty-overlay-label ${e.labelClassName}`,r.textContent=e.label,this.labelRoot.append(r);const o={marker:e,line:a,material:s,label:r};return this.views.set(e.id,o),o}}const xx="subtr-actor-ceiling-shot-overlay-styles",V5=5882879,G5=16761180,$5=16185075,W5=140,X5=215,K5=220,q5=4.5;function kE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function Y5(n,e){const t=kE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function DE(n,e){return ve(n,"ceiling_shot").map(t=>{const i=Y5(e,t.player),s=kE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`ceiling-shot:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,ceilingContactPosition:{x:t.ceiling_contact_position[0],y:t.ceiling_contact_position[1],z:t.ceiling_contact_position[2]},touchPosition:{x:t.touch_position[0],y:t.touch_position[1],z:t.touch_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function j5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function Z5(){if(document.getElementById(xx))return;const n=document.createElement("style");n.id=xx,n.textContent=` .sap-ceiling-shot-overlay-root { position: absolute; inset: 0; @@ -5621,13 +5686,13 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function x5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class w5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,_5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=g5;constructor(e,t,i,s){b5(),this.scene=e,this.container=t,this.markers=TE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="ceiling-shot-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-ceiling-shot-overlay-root",this.container.append(this.labelRoot)}update(e){const t=v5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.ringMaterial.dispose(),a.beam.removeFromParent(),a.beamGeometry.dispose(),a.beamMaterial.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.14+.6*r,c=.94+(1-r)*.18;o.ringMaterial.opacity=l,o.beamMaterial.opacity=.18+.55*r,o.ring.position.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z+12),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z).add(this.labelOffset);const u=x5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.ringMaterial.dispose(),e.beam.removeFromParent(),e.beamGeometry.dispose(),e.beamMaterial.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.quality>=.8?f5:e.isTeamZero?d5:h5,s=new Ye({color:i,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),a=new ni(p5,m5,48),r=new we(a,s);r.renderOrder=30,this.group.add(r);const o=new Ge().setFromPoints([new S(e.ceilingContactPosition.x,e.ceilingContactPosition.y,e.ceilingContactPosition.z),new S(e.touchPosition.x,e.touchPosition.y,e.touchPosition.z)]),l=new Rt({color:i,transparent:!0,opacity:.7,depthWrite:!1,depthTest:!1}),c=new In(o,l);c.renderOrder=29,this.group.add(c);const u=document.createElement("div");u.className=`sap-ceiling-shot-overlay-label ${e.isTeamZero?"sap-ceiling-shot-overlay-label-blue":"sap-ceiling-shot-overlay-label-orange"}`,u.textContent=`${e.playerName} ceiling shot ${e.qualityLabel}`,this.labelRoot.append(u);const d={marker:e,ring:r,ringMaterial:s,beam:c,beamGeometry:o,beamMaterial:l,label:u};return this.views.set(e.id,d),d}}const S5="#d1d9e0",ME=new Set(["flick_goal","double_tap_goal","one_timer_goal","passing_goal","air_dribble_goal","flip_reset_goal","bump_goal","demo_goal","half_volley_goal"]);function T5(n){return n.metadata.performer==="scorer"||n.metadata.modifiers?.includes("by_scorer")?"scorer":n.metadata.performer==="teammate"?"teammate":ME.has(n.kind)?"unknown":"scorer"}function M5(n){const e=T5(n);return e==="unknown"?"performer unknown":ME.has(n.kind)?`by ${e}`:null}function ji(n,e){return n.players.find(t=>t.id===e)?.name??e}function kn(n,e,t){return n.frames[e??-1]?.time??t}function E5(n){const e=n.kind;return e!=="forward"&&e!=="reverse"&&e!=="side"?"flick":`${n.direction==="left"||n.direction==="right"?`${n.direction} `:""}${e} flick`}function C5(n){const e=new Set(n),t=new Set(["goal"]);return e.has("core")&&(t.add("save"),t.add("shot"),t.add("assist")),e.has("demo")&&t.add("demo"),[...t]}function A5(n,e){const t=new Set(C5(e));return n.timelineEvents.filter(i=>t.has(i.kind))}function R5(n,e){return wE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"fifty-fifty",label:t.label,shortLabel:t.label.startsWith("Kickoff 50/50")?"KO":"50",isTeamZero:t.winnerIsTeamZero,color:t.winnerIsTeamZero===null?S5:t.winnerIsTeamZero?en:tn}))}function P5(n,e){return(ve(n,"flick")??[]).map((t,i)=>{const s=At(t.player),a=ji(e,s),r=E5(t);return{id:`flick:${t.frame}:${s}:${i+1}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"flick",label:`${a} ${r}`,shortLabel:"F",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function I5(n,e){return _E(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"touch",label:`${t.playerName} touch`,shortLabel:"T",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function L5(n,e){return ve(n,"backboard").map((t,i)=>{const s=At(t.player),a=e.players.find(r=>r.id===s)?.name??s;return{id:`backboard:${t.frame}:${s}:${i}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"backboard",label:`${a} backboard`,shortLabel:"BB",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function D5(n,e){return TE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"ceiling-shot",label:`${t.playerName} ceiling shot ${t.qualityLabel}`,shortLabel:"CS",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function k5(n,e){return ve(n,"wall_aerial").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ci(t.wall).toLowerCase();return{id:`wall-aerial:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial",label:`${a} wall-to-air setup ${o}% | ${l} wall`,shortLabel:"W2A",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function O5(n,e){return ve(n,"wall_aerial_shot").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ci(t.wall).toLowerCase();return{id:`wall-aerial-shot:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial-shot",label:`${a} wall shot ${o}% | ${l} wall`,shortLabel:"WS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function F5(n,e){return ve(n,"double_tap").map((t,i)=>{const s=At(t.player),a=ji(e,s);return{id:`double-tap:${t.frame}:${s}:${i}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"double-tap",label:`${a} double tap`,shortLabel:"DT",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function N5(n,e){return ve(n,"center").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.lateral_centering_distance);return{id:`center:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"center",label:`${a} center | ${o}uu lateral`,shortLabel:"C",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function U5(n,e){return ve(n,"one_timer").map((t,i)=>{const s=At(t.player),a=At(t.passer),r=ji(e,s),o=ji(e,a),l=kn(e,t.frame,t.time),c=Math.round(t.ball_speed);return{id:`one-timer:${t.frame}:${a}:${s}:${i}`,time:l,frame:t.frame,kind:"one-timer",label:`${r} one-timer from ${o} | ${c}uu/s`,shortLabel:"OT",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function B5(n){return Ci(n.replace(/_pass$/,""))}function z5(n,e){return ve(n,"pass").map((t,i)=>{const s=At(t.passer),a=At(t.receiver),r=ji(e,s),o=ji(e,a),l=kn(e,t.frame,t.time),c=Math.round(t.ball_travel_distance),u=B5(t.pass_kind);return{id:`pass:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"pass",label:`${r} to ${o} ${u.toLowerCase()} pass | ${c}uu`,shortLabel:"P",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function H5(n,e){return ve(n,"half_volley").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.ball_speed);return{id:`half-volley:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-volley",label:`${a} half volley | ${o}uu/s`,shortLabel:"HV",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function V5(n,e){return ve(n,"rush").map((t,i)=>{const s=kn(e,t.end_frame,t.end_time),a=`${t.attackers}v${t.defenders}`,r=t.is_team_0?"Blue":"Orange";return{id:`rush:${t.start_frame}:${t.end_frame}:${i}`,time:s,frame:t.end_frame,kind:"rush",label:`${r} rush ${a}`,shortLabel:"R",playerId:null,playerName:null,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function G5(n,e){return(ve(n,"powerslide")??[]).filter(t=>t.active).map((t,i)=>{const s=At(t.player),a=ji(e,s);return{id:`powerslide:${t.frame}:${s}:${i+1}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"powerslide",label:`${a} powerslide`,shortLabel:"PS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function $5(n,e){return ve(n,"speed_flip").map(t=>{const i=t.player?At(t.player):null,s=i?e.players.find(o=>o.id===i)?.name??i:"Unknown",a=e.frames[t.frame]?.time??t.time,r=Math.round(t.confidence*100);return{id:`speed-flip:${t.frame}:${i}:${Math.round(t.confidence*1e3)}`,time:a,frame:t.frame,kind:"speed-flip",label:`${s} speed flip ${r}%`,shortLabel:"SF",playerId:i,playerName:s,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function W5(n,e){return(ve(n,"dodge")??[]).map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round((t.dodge_impulse?.confidence??1)*100),l=(t.dodge_impulse?.direction_label??"dodge").replaceAll("_"," ");return{id:`dodge:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"dodge",label:`${a} flip impulse ${l} ${o}%`,shortLabel:"FI",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function X5(n,e){return ve(n,"half_flip").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.end_speed-t.start_speed);return{id:`half-flip:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-flip",label:`${a} half flip ${o}% | +${l}uu/s`,shortLabel:"HF",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function K5(n,e){return ve(n,"wavedash").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.horizontal_speed_gain);return{id:`wavedash:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wavedash",label:`${a} wavedash ${o}% | +${l}uu/s`,shortLabel:"WD",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function q5(n,e){return ve(n,"bump").map((t,i)=>{const s=At(t.initiator),a=At(t.victim),r=e.players.find(u=>u.id===s)?.name??s,o=e.players.find(u=>u.id===a)?.name??a,l=kn(e,t.frame,t.time),c=Math.round(t.confidence*100);return{id:`bump:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"bump",label:`${r} bumped ${o} ${c}%`,shortLabel:"B",playerId:s,playerName:r,isTeamZero:t.initiator_is_team_0,color:t.initiator_is_team_0?en:tn}})}function Y5(n){return n.kind==="beaten_to_ball"?"BT":n.dodge_active?"DW":n.aerial?"AW":"W"}function j5(n){const e=[n.aerial?"aerial":"grounded"];return n.dodge_active&&e.push("dodge"),e.join(" ")}function Z5(n){return n.kind==="beaten_to_ball"?"beaten to ball":"whiff"}function J5(n,e){return ve(n,"whiff").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round(t.closest_approach_distance),l=Math.round(t.approach_speed);return{id:`whiff:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"whiff",label:`${a} ${j5(t)} ${Z5(t)} | ${o}uu closest, ${l}uu/s`,shortLabel:Y5(t),playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}const EE={flick:P5,ceiling_shot:D5,wall_aerial:k5,wall_aerial_shot:O5,double_tap:F5,center:N5,one_timer:U5,pass:z5,half_flip:X5,half_volley:H5,speed_flip:$5},CE=Object.keys(EE),AE=.02,ei=1e-4,Q5=200,RE=.08,f_={big:"rgba(245, 158, 11, 0.92)",small:"rgba(52, 211, 153, 0.86)"},px={both:"rgba(52, 211, 153, 0.86)",inferred_only:"rgba(239, 68, 68, 0.9)",reported_only:"rgba(59, 130, 246, 0.9)"};function e4(n){const e=n.config?.ball_half_neutral_zone_half_width_y;return typeof e=="number"&&Number.isFinite(e)?Math.max(0,e):Q5}function nh(n,e,t){return n?.frames?.[e??-1]?.time??t}function t4(n,e,t,i,s,a){const r=e?.ballFrames[n]?.position?.y;return typeof r=="number"&&Number.isFinite(r)&&Math.abs(r)<=t+ei||a>ei?"neutral":i>s+ei?"team_zero_side":s>i+ei?"team_one_side":null}function PE(n,e,t){if(n==="neutral")return{id:`half-control:neutral:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:"Neutral half control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_side";return{id:`half-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:i?"Blue half control":"Orange half control",color:ef(i)??void 0,isTeamZero:i}}function nf(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function n4(n,e){const t=nf(ve(n,"possession")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return n4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.possession?.possession_time??0,u=l.team_one?.possession?.possession_time??0,d=l.team_zero?.possession?.neutral_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;let g=null;const{startTime:_,endTime:m}=_r(o,r,e);h>f+ei&&h>p+ei?g={id:`possession:team_zero:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Blue possession",color:"rgba(59, 130, 246, 0.88)",isTeamZero:!0}:f>h+ei&&f>p+ei&&(g={id:`possession:team_one:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Orange possession",color:"rgba(245, 158, 11, 0.88)",isTeamZero:!1}),Fo(t,g),r=o}return t}function s4(n,e){const t=nf(ve(n,"ball_half")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return s4(n,e);const t=[];let i=0,s=0,a=0;const r=e4(n);let o=null;for(const l of n.frames){if(!Number.isFinite(l.time)||!Number.isFinite(l.dt)||l.dt<=0){o=l;continue}const c=l,u=c.team_zero?.ball_half?.defensive_half_time??0,d=c.team_one?.ball_half?.defensive_half_time??0,h=c.team_zero?.ball_half?.neutral_time??0,f=u-i,p=d-s,g=h-a;i=u,s=d,a=h;const{startTime:_,endTime:m}=_r(l,o,e),v=t4(l.frame_number,e,r,f,p,g),y=v?PE(v,_,m):null;Fo(t,y),o=l}return t}function r4(n,e,t){return t>ei?"neutral_third":n>e+ei?"team_zero_third":e>n+ei?"team_one_third":null}function IE(n,e,t){if(n==="neutral_third")return{id:`third-control:neutral_third:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:"Neutral third control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_third";return{id:`third-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:i?"Blue third control":"Orange third control",color:ef(i)??void 0,isTeamZero:i}}function o4(n,e){const t=nf(ve(n,"ball_third")),i=[];let s=0,a=!1,r="neutral_third",o=null;for(const l of n.frames){for(;s0)return o4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.ball_third?.defensive_third_time??0,u=l.team_one?.ball_third?.defensive_third_time??0,d=l.team_zero?.ball_third?.neutral_third_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;const{startTime:g,endTime:_}=_r(o,r,e),m=r4(h,f,p),v=m?IE(m,g,_):null;Fo(t,v),r=o}return t}function c4(n,e){return ve(n,"fifty_fifty").map((t,i)=>{const s=nh(e,t.start_frame,t.start_time),a=Math.max(s,nh(e,t.resolve_frame,t.resolve_time)),r=t.winning_team_is_team_0==null?"Neutral":t.winning_team_is_team_0?"Blue win":"Orange win",o=t.is_kickoff?"kickoff ":"";return{id:`fifty-fifty:${t.start_frame}:${t.resolve_frame}:${i}`,startTime:s,endTime:a,lane:"fifty-fifty",laneLabel:"50/50",label:`${r} ${o}50/50`,shortLabel:t.is_kickoff?"KO":"50",color:t.winning_team_is_team_0==null?"rgba(209, 217, 224, 0.7)":t.winning_team_is_team_0?"rgba(59, 130, 246, 0.48)":"rgba(245, 158, 11, 0.48)",isTeamZero:t.winning_team_is_team_0}}).sort((t,i)=>t.startTime!==i.startTime?t.startTime-i.startTime:(t.id??"").localeCompare(i.id??""))}function u4(n,e){return ve(n,"rush").map((t,i)=>{const s=e?.frames[t.start_frame]?.time??t.start_time,a=e?.frames[t.end_frame]?.time??t.end_time,r=`${t.attackers}v${t.defenders}`,o=t.is_team_0;return{id:`rush-range:${t.start_frame}:${t.end_frame}:${i}`,startTime:s,endTime:Math.max(s,a),lane:"rush",laneLabel:"Rush",label:`${o?"Blue":"Orange"} rush ${r}`,color:o?"rgba(59, 130, 246, 0.4)":"rgba(245, 158, 11, 0.4)",isTeamZero:o}})}function d4(n,e={}){const t=LE(e),i=new Set(e.detections??["both","inferred_only","reported_only"]),s=new Set(e.activities??["active","inactive","unknown"]),a=new Set(e.fieldHalves??["own","opponent","unknown"]),r=e.playerIds?new Set(e.playerIds):null;if(t.size===0||i.size===0||!s.has("unknown")||!a.has("unknown")||r?.size===0)return[];const o=new Map(n.players.map(c=>[c.id,c.isTeamZero])),l=[];for(const c of n.boostPads)if(t.has(c.size))for(let u=0;uc.startTime!==u.startTime?c.startTime-u.startTime:(c.id??"").localeCompare(u.id??""))}function LE(n){if(n.padTypes)return new Set(n.padTypes);if(n.sizes){const e=new Set(n.sizes),t=new Set;return e.has("big")&&t.add("big"),e.has("small")&&t.add("small"),e.has("big")&&e.has("small")&&t.add("ambiguous"),t}return new Set(["big","small","ambiguous"])}function mx(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function h4(n){return{big:"big",small:"small",ambiguous:"ambiguous"}[n]}function f4(n){return{both:"counted",inferred_only:"inferred",reported_only:"reported"}[n]}function p4(n,e){return n==="inferred_only"?"I":n==="reported_only"?"R":{big:"100",small:"12",ambiguous:"?"}[e]}function m4(n,e,t={}){const i=ve(n,"boost_pickup");if(i.length===0&&e)return d4(e,t);const s=LE(t),a=new Set(t.detections??["both","inferred_only","reported_only"]),r=new Set(t.activities??["active","inactive","unknown"]),o=new Set(t.fieldHalves??["own","opponent","unknown"]),l=t.playerIds?new Set(t.playerIds):null;if(s.size===0||a.size===0||r.size===0||o.size===0||l?.size===0)return[];const c=new Map((e?.players??[]).map(u=>[u.id,u.name]));return i.filter(u=>{const d=mx(u.player_id);return s.has(u.pad_type)&&a.has(u.detection)&&r.has(u.activity)&&o.has(u.field_half)&&(!l||l.has(d))}).map((u,d)=>{const h=mx(u.player_id),f=c.get(h)??h,p=Math.max(0,nh(e,u.frame,u.time)),g=f4(u.detection),_=h4(u.pad_type);return{id:`boost-pickup:${u.detection}:${u.frame}:${h}:${d}`,startTime:p,endTime:Math.max(p+RE,p),lane:"boost-pickups",laneLabel:"Boost Pickups",label:`${f} ${g} ${_} boost pickup`,shortLabel:p4(u.detection,u.pad_type),color:ef(u.is_team_0)??(u.detection==="both"?u.pad_type==="big"?f_.big:u.pad_type==="small"?f_.small:px.both:px[u.detection]),isTeamZero:u.is_team_0}}).sort((u,d)=>u.startTime!==d.startTime?u.startTime-d.startTime:(u.id??"").localeCompare(d.id??""))}const id=[{fieldName:"time_defensive_third",aliases:["time_defensive_zone"],label:"Def third",relativeColor:"own"},{fieldName:"time_neutral_third",aliases:["time_neutral_zone"],label:"Neutral third",relativeColor:"neutral"},{fieldName:"time_offensive_third",aliases:["time_offensive_zone"],label:"Off third",relativeColor:"opp"}];function DE(n,e){return n.relativeColor==="neutral"?"rgba(209, 217, 224, 0.68)":(n.relativeColor==="own"?e:!e)?"rgba(89, 195, 255, 0.74)":"rgba(255, 193, 92, 0.78)"}function Vg(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function _4(n,e){const t=n.positioning;if(!t)return 0;for(const i of[e.fieldName,...e.aliases??[]]){const s=t[i];if(typeof s=="number"&&Number.isFinite(s))return s}return 0}function g4(n){switch(n){case"defensive":return id[0];case"neutral":return id[1];case"offensive":return id[2]}}function y4(n){const e=new Map;for(const t of n.frames)for(const i of t.players){const s=Vg(i.player_id);e.has(s)||e.set(s,i.name)}return e}function v4(n){const e=nf(ve(n,"field_third")),t=[],i=new Map,s=y4(n);for(const a of e){if(!Number.isFinite(a.time)||!Number.isFinite(a.end_time)||a.end_time-a.time<=ei)continue;const r=Vg(a.player),o=g4(a.state);kE(t,i,{id:`time-in-zone:${r}:${o.fieldName}:${a.time.toFixed(3)}`,startTime:a.time,endTime:a.end_time,lane:`time-in-zone:${r}`,laneLabel:s.get(r)??r,label:o.label,color:DE(o,a.is_team_0),isTeamZero:a.is_team_0})}return t}function b4(n,e){if(ve(n,"field_third").length>0)return v4(n);const t=new Map,i=[],s=new Map;let a=null;for(const r of n.frames){if(!Number.isFinite(r.time)||!Number.isFinite(r.dt)||r.dt<=0){a=r;continue}const{startTime:o,endTime:l}=_r(r,a,e);if(l-o<=ei){a=r;continue}for(const c of r.players){const u=Vg(c.player_id),d=t.get(u)??new Map;let h=null,f=0;for(const p of id){const g=_4(c,p),_=g-(d.get(p.fieldName)??0);_>f+ei&&(f=_,h=p),d.set(p.fieldName,g)}t.set(u,d),h&&kE(i,s,{id:`time-in-zone:${u}:${h.fieldName}:${o.toFixed(3)}`,startTime:o,endTime:l,lane:`time-in-zone:${u}`,laneLabel:c.name,label:h.label,color:DE(h,c.is_team_0),isTeamZero:c.is_team_0})}a=r}return i}function _r(n,e,t){const i=t?.frames[n.frame_number]?.time??n.time,s=e?t?.frames[e.frame_number]?.time??e.time:Math.max(0,i-n.dt);return{startTime:Math.max(0,s),endTime:Math.max(s,i)}}function Fo(n,e){if(!e)return;const t=n[n.length-1];if(t&&t.lane===e.lane&&t.label===e.label&&Math.abs(t.endTime-e.startTime)<=AE){t.endTime=e.endTime;return}n.push(e)}function kE(n,e,t){if(!t)return;const i=t.lane??"",s=e.get(i);if(s&&s.label===t.label&&Math.abs(s.endTime-t.startTime)<=AE){s.endTime=t.endTime;return}n.push(t),e.set(i,t)}const Qp=236,OE="relative-positioning",x4={last:"Last",upfield:"Upfield",level:"Level",mid:"Mid"};function ta(n){return n?"team-blue":"team-orange"}function FE(n,e,t){return`
+ `,document.head.append(n)}function J5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class Q5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,K5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=q5;constructor(e,t,i,s){Z5(),this.scene=e,this.container=t,this.markers=DE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="ceiling-shot-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-ceiling-shot-overlay-root",this.container.append(this.labelRoot)}update(e){const t=j5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.ringMaterial.dispose(),a.beam.removeFromParent(),a.beamGeometry.dispose(),a.beamMaterial.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.14+.6*r,c=.94+(1-r)*.18;o.ringMaterial.opacity=l,o.beamMaterial.opacity=.18+.55*r,o.ring.position.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z+12),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z).add(this.labelOffset);const u=J5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.ringMaterial.dispose(),e.beam.removeFromParent(),e.beamGeometry.dispose(),e.beamMaterial.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.quality>=.8?$5:e.isTeamZero?V5:G5,s=new Ye({color:i,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),a=new ni(W5,X5,48),r=new we(a,s);r.renderOrder=30,this.group.add(r);const o=new Ge().setFromPoints([new S(e.ceilingContactPosition.x,e.ceilingContactPosition.y,e.ceilingContactPosition.z),new S(e.touchPosition.x,e.touchPosition.y,e.touchPosition.z)]),l=new Rt({color:i,transparent:!0,opacity:.7,depthWrite:!1,depthTest:!1}),c=new In(o,l);c.renderOrder=29,this.group.add(c);const u=document.createElement("div");u.className=`sap-ceiling-shot-overlay-label ${e.isTeamZero?"sap-ceiling-shot-overlay-label-blue":"sap-ceiling-shot-overlay-label-orange"}`,u.textContent=`${e.playerName} ceiling shot ${e.qualityLabel}`,this.labelRoot.append(u);const d={marker:e,ring:r,ringMaterial:s,beam:c,beamGeometry:o,beamMaterial:l,label:u};return this.views.set(e.id,d),d}}const e4="#d1d9e0",OE=new Set(["flick_goal","double_tap_goal","one_timer_goal","passing_goal","air_dribble_goal","flip_reset_goal","bump_goal","demo_goal","half_volley_goal"]);function t4(n){return n.metadata.performer==="scorer"||n.metadata.modifiers?.includes("by_scorer")?"scorer":n.metadata.performer==="teammate"?"teammate":OE.has(n.kind)?"unknown":"scorer"}function n4(n){const e=t4(n);return e==="unknown"?"performer unknown":OE.has(n.kind)?`by ${e}`:null}function Zi(n,e){return n.players.find(t=>t.id===e)?.name??e}function Dn(n,e,t){return n.frames[e??-1]?.time??t}function i4(n){const e=n.kind;return e!=="forward"&&e!=="reverse"&&e!=="side"?"flick":`${n.direction==="left"||n.direction==="right"?`${n.direction} `:""}${e} flick`}function s4(n){const e=new Set(n),t=new Set(["goal"]);return e.has("core")&&(t.add("save"),t.add("shot"),t.add("assist")),e.has("demo")&&t.add("demo"),[...t]}function a4(n,e){const t=new Set(s4(e));return n.timelineEvents.filter(i=>t.has(i.kind))}function r4(n,e){return LE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"fifty-fifty",label:t.label,shortLabel:t.label.startsWith("Kickoff 50/50")?"KO":"50",isTeamZero:t.winnerIsTeamZero,color:t.winnerIsTeamZero===null?e4:t.winnerIsTeamZero?en:tn}))}function o4(n,e){return(ve(n,"flick")??[]).map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=i4(t);return{id:`flick:${t.frame}:${s}:${i+1}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"flick",label:`${a} ${r}`,shortLabel:"F",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function l4(n,e){return EE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"touch",label:`${t.playerName} touch`,shortLabel:"T",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function c4(n,e){return ve(n,"backboard").map((t,i)=>{const s=At(t.player),a=e.players.find(r=>r.id===s)?.name??s;return{id:`backboard:${t.frame}:${s}:${i}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"backboard",label:`${a} backboard`,shortLabel:"BB",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function u4(n,e){return DE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"ceiling-shot",label:`${t.playerName} ceiling shot ${t.qualityLabel}`,shortLabel:"CS",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function d4(n,e){return ve(n,"wall_aerial").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ai(t.wall).toLowerCase();return{id:`wall-aerial:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial",label:`${a} wall-to-air setup ${o}% | ${l} wall`,shortLabel:"W2A",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function h4(n,e){return ve(n,"wall_aerial_shot").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ai(t.wall).toLowerCase();return{id:`wall-aerial-shot:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial-shot",label:`${a} wall shot ${o}% | ${l} wall`,shortLabel:"WS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function f4(n,e){return ve(n,"double_tap").map((t,i)=>{const s=At(t.player),a=Zi(e,s);return{id:`double-tap:${t.frame}:${s}:${i}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"double-tap",label:`${a} double tap`,shortLabel:"DT",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function p4(n,e){return ve(n,"center").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.lateral_centering_distance);return{id:`center:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"center",label:`${a} center | ${o}uu lateral`,shortLabel:"C",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function m4(n,e){return ve(n,"one_timer").map((t,i)=>{const s=At(t.player),a=At(t.passer),r=Zi(e,s),o=Zi(e,a),l=Dn(e,t.frame,t.time),c=Math.round(t.ball_speed);return{id:`one-timer:${t.frame}:${a}:${s}:${i}`,time:l,frame:t.frame,kind:"one-timer",label:`${r} one-timer from ${o} | ${c}uu/s`,shortLabel:"OT",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function _4(n){return Ai(n.replace(/_pass$/,""))}function g4(n,e){return ve(n,"pass").map((t,i)=>{const s=At(t.passer),a=At(t.receiver),r=Zi(e,s),o=Zi(e,a),l=Dn(e,t.frame,t.time),c=Math.round(t.ball_travel_distance),u=_4(t.pass_kind);return{id:`pass:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"pass",label:`${r} to ${o} ${u.toLowerCase()} pass | ${c}uu`,shortLabel:"P",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function y4(n,e){return ve(n,"half_volley").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.ball_speed);return{id:`half-volley:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-volley",label:`${a} half volley | ${o}uu/s`,shortLabel:"HV",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function v4(n,e){return ve(n,"rush").map((t,i)=>{const s=Dn(e,t.end_frame,t.end_time),a=`${t.attackers}v${t.defenders}`,r=t.is_team_0?"Blue":"Orange";return{id:`rush:${t.start_frame}:${t.end_frame}:${i}`,time:s,frame:t.end_frame,kind:"rush",label:`${r} rush ${a}`,shortLabel:"R",playerId:null,playerName:null,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function b4(n,e){return(ve(n,"powerslide")??[]).filter(t=>t.active).map((t,i)=>{const s=At(t.player),a=Zi(e,s);return{id:`powerslide:${t.frame}:${s}:${i+1}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"powerslide",label:`${a} powerslide`,shortLabel:"PS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function x4(n,e){return ve(n,"speed_flip").map(t=>{const i=t.player?At(t.player):null,s=i?e.players.find(o=>o.id===i)?.name??i:"Unknown",a=e.frames[t.frame]?.time??t.time,r=Math.round(t.confidence*100);return{id:`speed-flip:${t.frame}:${i}:${Math.round(t.confidence*1e3)}`,time:a,frame:t.frame,kind:"speed-flip",label:`${s} speed flip ${r}%`,shortLabel:"SF",playerId:i,playerName:s,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function w4(n,e){return(ve(n,"dodge")??[]).map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round((t.dodge_impulse?.confidence??1)*100),l=(t.dodge_impulse?.direction_label??"dodge").replaceAll("_"," ");return{id:`dodge:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"dodge",label:`${a} flip impulse ${l} ${o}%`,shortLabel:"FI",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function S4(n,e){return ve(n,"half_flip").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.end_speed-t.start_speed);return{id:`half-flip:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-flip",label:`${a} half flip ${o}% | +${l}uu/s`,shortLabel:"HF",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function T4(n,e){return ve(n,"wavedash").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.horizontal_speed_gain);return{id:`wavedash:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wavedash",label:`${a} wavedash ${o}% | +${l}uu/s`,shortLabel:"WD",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function M4(n,e){return ve(n,"bump").map((t,i)=>{const s=At(t.initiator),a=At(t.victim),r=e.players.find(u=>u.id===s)?.name??s,o=e.players.find(u=>u.id===a)?.name??a,l=Dn(e,t.frame,t.time),c=Math.round(t.confidence*100);return{id:`bump:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"bump",label:`${r} bumped ${o} ${c}%`,shortLabel:"B",playerId:s,playerName:r,isTeamZero:t.initiator_is_team_0,color:t.initiator_is_team_0?en:tn}})}function E4(n){return n.kind==="beaten_to_ball"?"BT":n.dodge_active?"DW":n.aerial?"AW":"W"}function C4(n){const e=[n.aerial?"aerial":"grounded"];return n.dodge_active&&e.push("dodge"),e.join(" ")}function A4(n){return n.kind==="beaten_to_ball"?"beaten to ball":"whiff"}function R4(n,e){return ve(n,"whiff").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round(t.closest_approach_distance),l=Math.round(t.approach_speed);return{id:`whiff:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"whiff",label:`${a} ${C4(t)} ${A4(t)} | ${o}uu closest, ${l}uu/s`,shortLabel:E4(t),playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}const FE={flick:o4,ceiling_shot:u4,wall_aerial:d4,wall_aerial_shot:h4,double_tap:f4,center:p4,one_timer:m4,pass:g4,half_flip:S4,half_volley:y4,speed_flip:x4},NE=Object.keys(FE),UE=.02,ei=1e-4,P4=200,BE=.08,b_={big:"rgba(245, 158, 11, 0.92)",small:"rgba(52, 211, 153, 0.86)"},wx={both:"rgba(52, 211, 153, 0.86)",inferred_only:"rgba(239, 68, 68, 0.9)",reported_only:"rgba(59, 130, 246, 0.9)"};function I4(n){const e=n.config?.ball_half_neutral_zone_half_width_y;return typeof e=="number"&&Number.isFinite(e)?Math.max(0,e):P4}function lh(n,e,t){return n?.frames?.[e??-1]?.time??t}function L4(n,e,t,i,s,a){const r=e?.ballFrames[n]?.position?.y;return typeof r=="number"&&Number.isFinite(r)&&Math.abs(r)<=t+ei||a>ei?"neutral":i>s+ei?"team_zero_side":s>i+ei?"team_one_side":null}function zE(n,e,t){if(n==="neutral")return{id:`half-control:neutral:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:"Neutral half control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_side";return{id:`half-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:i?"Blue half control":"Orange half control",color:of(i)??void 0,isTeamZero:i}}function cf(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function k4(n,e){const t=cf(ve(n,"possession")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return k4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.possession?.possession_time??0,u=l.team_one?.possession?.possession_time??0,d=l.team_zero?.possession?.neutral_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;let g=null;const{startTime:_,endTime:m}=gr(o,r,e);h>f+ei&&h>p+ei?g={id:`possession:team_zero:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Blue possession",color:"rgba(59, 130, 246, 0.88)",isTeamZero:!0}:f>h+ei&&f>p+ei&&(g={id:`possession:team_one:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Orange possession",color:"rgba(245, 158, 11, 0.88)",isTeamZero:!1}),Bo(t,g),r=o}return t}function O4(n,e){const t=cf(ve(n,"ball_half")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return O4(n,e);const t=[];let i=0,s=0,a=0;const r=I4(n);let o=null;for(const l of n.frames){if(!Number.isFinite(l.time)||!Number.isFinite(l.dt)||l.dt<=0){o=l;continue}const c=l,u=c.team_zero?.ball_half?.defensive_half_time??0,d=c.team_one?.ball_half?.defensive_half_time??0,h=c.team_zero?.ball_half?.neutral_time??0,f=u-i,p=d-s,g=h-a;i=u,s=d,a=h;const{startTime:_,endTime:m}=gr(l,o,e),v=L4(l.frame_number,e,r,f,p,g),y=v?zE(v,_,m):null;Bo(t,y),o=l}return t}function N4(n,e,t){return t>ei?"neutral_third":n>e+ei?"team_zero_third":e>n+ei?"team_one_third":null}function HE(n,e,t){if(n==="neutral_third")return{id:`third-control:neutral_third:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:"Neutral third control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_third";return{id:`third-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:i?"Blue third control":"Orange third control",color:of(i)??void 0,isTeamZero:i}}function U4(n,e){const t=cf(ve(n,"ball_third")),i=[];let s=0,a=!1,r="neutral_third",o=null;for(const l of n.frames){for(;s0)return U4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.ball_third?.defensive_third_time??0,u=l.team_one?.ball_third?.defensive_third_time??0,d=l.team_zero?.ball_third?.neutral_third_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;const{startTime:g,endTime:_}=gr(o,r,e),m=N4(h,f,p),v=m?HE(m,g,_):null;Bo(t,v),r=o}return t}function z4(n,e){return ve(n,"fifty_fifty").map((t,i)=>{const s=lh(e,t.start_frame,t.start_time),a=Math.max(s,lh(e,t.resolve_frame,t.resolve_time)),r=t.winning_team_is_team_0==null?"Neutral":t.winning_team_is_team_0?"Blue win":"Orange win",o=t.is_kickoff?"kickoff ":"";return{id:`fifty-fifty:${t.start_frame}:${t.resolve_frame}:${i}`,startTime:s,endTime:a,lane:"fifty-fifty",laneLabel:"50/50",label:`${r} ${o}50/50`,shortLabel:t.is_kickoff?"KO":"50",color:t.winning_team_is_team_0==null?"rgba(209, 217, 224, 0.7)":t.winning_team_is_team_0?"rgba(59, 130, 246, 0.48)":"rgba(245, 158, 11, 0.48)",isTeamZero:t.winning_team_is_team_0}}).sort((t,i)=>t.startTime!==i.startTime?t.startTime-i.startTime:(t.id??"").localeCompare(i.id??""))}function H4(n,e){return ve(n,"rush").map((t,i)=>{const s=e?.frames[t.start_frame]?.time??t.start_time,a=e?.frames[t.end_frame]?.time??t.end_time,r=`${t.attackers}v${t.defenders}`,o=t.is_team_0;return{id:`rush-range:${t.start_frame}:${t.end_frame}:${i}`,startTime:s,endTime:Math.max(s,a),lane:"rush",laneLabel:"Rush",label:`${o?"Blue":"Orange"} rush ${r}`,color:o?"rgba(59, 130, 246, 0.4)":"rgba(245, 158, 11, 0.4)",isTeamZero:o}})}function V4(n,e={}){const t=VE(e),i=new Set(e.detections??["both","inferred_only","reported_only"]),s=new Set(e.activities??["active","inactive","unknown"]),a=new Set(e.fieldHalves??["own","opponent","unknown"]),r=e.playerIds?new Set(e.playerIds):null;if(t.size===0||i.size===0||!s.has("unknown")||!a.has("unknown")||r?.size===0)return[];const o=new Map(n.players.map(c=>[c.id,c.isTeamZero])),l=[];for(const c of n.boostPads)if(t.has(c.size))for(let u=0;uc.startTime!==u.startTime?c.startTime-u.startTime:(c.id??"").localeCompare(u.id??""))}function VE(n){if(n.padTypes)return new Set(n.padTypes);if(n.sizes){const e=new Set(n.sizes),t=new Set;return e.has("big")&&t.add("big"),e.has("small")&&t.add("small"),e.has("big")&&e.has("small")&&t.add("ambiguous"),t}return new Set(["big","small","ambiguous"])}function Sx(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function G4(n){return{big:"big",small:"small",ambiguous:"ambiguous"}[n]}function $4(n){return{both:"counted",inferred_only:"inferred",reported_only:"reported"}[n]}function W4(n,e){return n==="inferred_only"?"I":n==="reported_only"?"R":{big:"100",small:"12",ambiguous:"?"}[e]}function X4(n,e,t={}){const i=ve(n,"boost_pickup");if(i.length===0&&e)return V4(e,t);const s=VE(t),a=new Set(t.detections??["both","inferred_only","reported_only"]),r=new Set(t.activities??["active","inactive","unknown"]),o=new Set(t.fieldHalves??["own","opponent","unknown"]),l=t.playerIds?new Set(t.playerIds):null;if(s.size===0||a.size===0||r.size===0||o.size===0||l?.size===0)return[];const c=new Map((e?.players??[]).map(u=>[u.id,u.name]));return i.filter(u=>{const d=Sx(u.player_id);return s.has(u.pad_type)&&a.has(u.detection)&&r.has(u.activity)&&o.has(u.field_half)&&(!l||l.has(d))}).map((u,d)=>{const h=Sx(u.player_id),f=c.get(h)??h,p=Math.max(0,lh(e,u.frame,u.time)),g=$4(u.detection),_=G4(u.pad_type);return{id:`boost-pickup:${u.detection}:${u.frame}:${h}:${d}`,startTime:p,endTime:Math.max(p+BE,p),lane:"boost-pickups",laneLabel:"Boost Pickups",label:`${f} ${g} ${_} boost pickup`,shortLabel:W4(u.detection,u.pad_type),color:of(u.is_team_0)??(u.detection==="both"?u.pad_type==="big"?b_.big:u.pad_type==="small"?b_.small:wx.both:wx[u.detection]),isTeamZero:u.is_team_0}}).sort((u,d)=>u.startTime!==d.startTime?u.startTime-d.startTime:(u.id??"").localeCompare(d.id??""))}const ld=[{fieldName:"time_defensive_third",aliases:["time_defensive_zone"],label:"Def third",relativeColor:"own"},{fieldName:"time_neutral_third",aliases:["time_neutral_zone"],label:"Neutral third",relativeColor:"neutral"},{fieldName:"time_offensive_third",aliases:["time_offensive_zone"],label:"Off third",relativeColor:"opp"}];function GE(n,e){return n.relativeColor==="neutral"?"rgba(209, 217, 224, 0.68)":(n.relativeColor==="own"?e:!e)?"rgba(89, 195, 255, 0.74)":"rgba(255, 193, 92, 0.78)"}function Yg(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function K4(n,e){const t=n.positioning;if(!t)return 0;for(const i of[e.fieldName,...e.aliases??[]]){const s=t[i];if(typeof s=="number"&&Number.isFinite(s))return s}return 0}function q4(n){switch(n){case"defensive":return ld[0];case"neutral":return ld[1];case"offensive":return ld[2]}}function Y4(n){const e=new Map;for(const t of n.frames)for(const i of t.players){const s=Yg(i.player_id);e.has(s)||e.set(s,i.name)}return e}function j4(n){const e=cf(ve(n,"field_third")),t=[],i=new Map,s=Y4(n);for(const a of e){if(!Number.isFinite(a.time)||!Number.isFinite(a.end_time)||a.end_time-a.time<=ei)continue;const r=Yg(a.player),o=q4(a.state);$E(t,i,{id:`time-in-zone:${r}:${o.fieldName}:${a.time.toFixed(3)}`,startTime:a.time,endTime:a.end_time,lane:`time-in-zone:${r}`,laneLabel:s.get(r)??r,label:o.label,color:GE(o,a.is_team_0),isTeamZero:a.is_team_0})}return t}function Z4(n,e){if(ve(n,"field_third").length>0)return j4(n);const t=new Map,i=[],s=new Map;let a=null;for(const r of n.frames){if(!Number.isFinite(r.time)||!Number.isFinite(r.dt)||r.dt<=0){a=r;continue}const{startTime:o,endTime:l}=gr(r,a,e);if(l-o<=ei){a=r;continue}for(const c of r.players){const u=Yg(c.player_id),d=t.get(u)??new Map;let h=null,f=0;for(const p of ld){const g=K4(c,p),_=g-(d.get(p.fieldName)??0);_>f+ei&&(f=_,h=p),d.set(p.fieldName,g)}t.set(u,d),h&&$E(i,s,{id:`time-in-zone:${u}:${h.fieldName}:${o.toFixed(3)}`,startTime:o,endTime:l,lane:`time-in-zone:${u}`,laneLabel:c.name,label:h.label,color:GE(h,c.is_team_0),isTeamZero:c.is_team_0})}a=r}return i}function gr(n,e,t){const i=t?.frames[n.frame_number]?.time??n.time,s=e?t?.frames[e.frame_number]?.time??e.time:Math.max(0,i-n.dt);return{startTime:Math.max(0,s),endTime:Math.max(s,i)}}function Bo(n,e){if(!e)return;const t=n[n.length-1];if(t&&t.lane===e.lane&&t.label===e.label&&Math.abs(t.endTime-e.startTime)<=UE){t.endTime=e.endTime;return}n.push(e)}function $E(n,e,t){if(!t)return;const i=t.lane??"",s=e.get(i);if(s&&s.label===t.label&&Math.abs(s.endTime-t.startTime)<=UE){s.endTime=t.endTime;return}n.push(t),e.set(i,t)}const rm=236,WE="relative-positioning",J4={last:"Last",upfield:"Upfield",level:"Level",mid:"Mid"};function na(n){return n?"team-blue":"team-orange"}function XE(n,e,t){return`
${n} ${t.metaHtml??""}
${e} -
`}function Tn(n,e,t,i=""){return FE(n,t,{metaHtml:i,tone:e?"blue":"orange"})}function si(n,e){return`
${[!0,!1].map(t=>{const i=n.filter(a=>a.is_team_0===t);if(i.length===0)return"";const s=t?"Blue":"Orange";return`
+
`}function Tn(n,e,t,i=""){return XE(n,t,{metaHtml:i,tone:e?"blue":"orange"})}function si(n,e){return`
${[!0,!1].map(t=>{const i=n.filter(a=>a.is_team_0===t);if(i.length===0)return"";const s=t?"Blue":"Orange";return`

${s} team

${i.length} player${i.length===1?"":"s"} @@ -5635,12 +5700,12 @@ void main() {
${i.map(e).join("")}
-
`}).join("")}
`}function sf(n,e,t=""){return FE(n,e,{metaHtml:t,tone:"shared"})}function wn(n,e,t){const i=zt(n.statsFrameLookup,e);return i?i.players.find(s=>At(s.player_id)===t)??null:null}function w4(n,e,t){const i=n.players.find(p=>p.id===e);if(!i||!i.frames[t]?.position)return"mid";const a=i.isTeamZero,r=n.players.filter(p=>p.isTeamZero===a).length,o=[];let l=0;for(const p of n.players){if(p.isTeamZero!==a)continue;const g=p.frames[t];if(!g?.position)continue;const _=a?g.position.y:-g.position.y;o.push(_),p.id===e&&(l=_)}if(r<2||o.length!==r)return"mid";const c=Math.min(...o),u=Math.max(...o);if(u-c<=Qp)return"level";const h=l-c<=Qp,f=u-l<=Qp;return h&&!f?"last":f&&!h?"upfield":"mid"}function S4(n){let e=null,t=null;const i=new Set,s=["possession_state","field_half","field_third"];return{id:"possession",label:"Possession",setup(){a()},teardown(){},onBeforeRender(){},getTimelineRanges(o){return i4(o.statsTimeline,o.replay)},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const u=zt(l.statsFrameLookup,o)?.team_zero?.possession;return u?sf("Control State",rx(u,{labelPerspective:{kind:"shared"},breakdownClasses:r()})):""},renderFocusedPlayerStats(o,l,c){const u=zt(c.statsFrameLookup,l),d=wn(c,l,o),h=d?.is_team_0?u?.team_zero?.possession:u?.team_one?.possession;return!h||!d?"":rx(h,{labelPerspective:{kind:"team"},breakdownClasses:r()})},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Possession breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";const h=document.createElement("label");h.className="toggle";const f=document.createElement("input");f.type="checkbox",f.dataset.breakdownClass="possession_state",f.addEventListener("change",()=>{f.checked?i.add("possession_state"):i.delete("possession_state"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const p=document.createElement("span");p.textContent="Control",h.append(f,p),d.append(h);const g=document.createElement("label");g.className="toggle";const _=document.createElement("input");_.type="checkbox",_.dataset.breakdownClass="field_third",_.addEventListener("change",()=>{_.checked?i.add("field_third"):i.delete("field_third"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const m=document.createElement("span");m.textContent="Thirds",g.append(_,m),d.append(g);const v=document.createElement("label");v.className="toggle";const y=document.createElement("input");y.type="checkbox",y.dataset.breakdownClass="field_half",y.addEventListener("change",()=>{y.checked?i.add("field_half"):i.delete("field_half"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const b=document.createElement("span");b.textContent="Halves",v.append(y,b),d.append(v),e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=s.filter(l=>i.has(l));t.textContent=o.length===0?"Total only":o.map(l=>l==="possession_state"?"Control":l==="field_half"?"Halves":"Thirds").join(" x ")}}}function r(){return s.filter(o=>i.has(o))}}function T4(){let n=null;return{id:"fifty-fifty",label:"50/50",setup(e){n=new u5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return R5(e.statsTimeline,e.replay)},getTimelineRanges(e){return c4(e.statsTimeline,e.replay)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);if(!i)return"";const s=sf("Challenge Summary",kV(i.team_zero?.fifty_fifty)),a=si(i.players,r=>Tn(r.name,r.is_team_0,ix(r.fifty_fifty)));return s+a},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?ix(s.fifty_fifty):""}}}function M4(){let n=null,e=null;return{id:"ball_half",label:"Half Control",setup(t){e=t.replay,n=new LV(t.player.sceneState.replayRoot,t.fieldScale)},teardown(){n?.dispose(),n=null,e=null},onBeforeRender(t){const i=e?.ballFrames[t.frameIndex];n?.update(i?.position?.y??null)},getTimelineRanges(t){return a4(t.statsTimeline,t.replay)},renderStats(t,i){const a=zt(i.statsFrameLookup,t)?.team_zero?.ball_half;return a?sf("Field State",lx(a,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(t,i,s){const a=zt(s.statsFrameLookup,i),r=wn(s,i,t),o=r?.is_team_0?a?.team_zero?.ball_half:a?.team_one?.ball_half;return!o||!r?"":lx(o,{labelPerspective:{kind:"team"}})}}}function E4(){return{id:"ball_third",label:"Third Control",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return l4(n.statsTimeline,n.replay)},renderStats(n,e){const i=zt(e.statsFrameLookup,n)?.team_zero?.ball_third;return i?sf("Field State",ux(i,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.ball_third:i?.team_one?.ball_third;return!a||!s?"":ux(a,{labelPerspective:{kind:"team"}})}}}function C4(){return{id:"rush",label:"Rush",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return u4(n.statsTimeline,n.replay)},getTimelineEvents(n){return V5(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n),i=t?.team_zero?.rush,s=t?.team_one?.rush;return!i||!s?"":[Tn("Blue Team",!0,Jp(i)),Tn("Orange Team",!1,Jp(s))].join("")},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.rush:i?.team_one?.rush;return!a||!s?"":Jp(a)}}}const p_={speed_band:{valueOrder:["slow","boost","supersonic"],formatValue:n=>({slow:"Slow",boost:"Boost",supersonic:"Supersonic"})[n]??n},height_band:{valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n}};function A4(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function em(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function R4(n,e,t=1){return n===void 0||Number.isNaN(n)?"?":e===void 0||Number.isNaN(e)||e<=0?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${(n*100/e).toFixed(t)}%)`}function _x(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function sd(n,e){return`
${_x(n)}${_x(e)}
`}function P4(n,e,t){for(const i of t){const{valueOrder:s}=p_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function I4(n,e){if(e.length===1){const t=e[0];return p_[t].formatValue(n[t])}return e.map(t=>p_[t].formatValue(n[t])).join(" / ")}function L4(n,e,t){if(e.length===0||!n?.labeled_tracked_time?.entries?.length)return"";const i=new Map,s=n?.labeled_tracked_time?.entries??[];for(const a of s){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=i.get(c);u?u.total+=a.value:i.set(c,{values:o,total:a.value})}return[...i.values()].sort((a,r)=>P4(a.values,r.values,e)).map(a=>sd(I4(a.values,e),R4(a.total,t))).join("")}function gx(n,e={}){const t=n?.tracked_time,i=n&&t&&t>0?n.speed_integral/t:t===0?0:void 0,s=A4(e.breakdownClasses),a=L4(n,s,t);return` - ${sd("Tracked",em(t,1,"s"))} - ${sd("Distance",em(n?.total_distance,0," uu"))} - ${sd("Avg speed",em(i,0," uu/s"))} +
`}).join("")}`}function uf(n,e,t=""){return XE(n,e,{metaHtml:t,tone:"shared"})}function wn(n,e,t){const i=zt(n.statsFrameLookup,e);return i?i.players.find(s=>At(s.player_id)===t)??null:null}function Q4(n,e,t){const i=n.players.find(p=>p.id===e);if(!i||!i.frames[t]?.position)return"mid";const a=i.isTeamZero,r=n.players.filter(p=>p.isTeamZero===a).length,o=[];let l=0;for(const p of n.players){if(p.isTeamZero!==a)continue;const g=p.frames[t];if(!g?.position)continue;const _=a?g.position.y:-g.position.y;o.push(_),p.id===e&&(l=_)}if(r<2||o.length!==r)return"mid";const c=Math.min(...o),u=Math.max(...o);if(u-c<=rm)return"level";const h=l-c<=rm,f=u-l<=rm;return h&&!f?"last":f&&!h?"upfield":"mid"}function eG(n){let e=null,t=null;const i=new Set,s=["possession_state","field_half","field_third"];return{id:"possession",label:"Possession",setup(){a()},teardown(){},onBeforeRender(){},getTimelineRanges(o){return D4(o.statsTimeline,o.replay)},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const u=zt(l.statsFrameLookup,o)?.team_zero?.possession;return u?uf("Control State",px(u,{labelPerspective:{kind:"shared"},breakdownClasses:r()})):""},renderFocusedPlayerStats(o,l,c){const u=zt(c.statsFrameLookup,l),d=wn(c,l,o),h=d?.is_team_0?u?.team_zero?.possession:u?.team_one?.possession;return!h||!d?"":px(h,{labelPerspective:{kind:"team"},breakdownClasses:r()})},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Possession breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";const h=document.createElement("label");h.className="toggle";const f=document.createElement("input");f.type="checkbox",f.dataset.breakdownClass="possession_state",f.addEventListener("change",()=>{f.checked?i.add("possession_state"):i.delete("possession_state"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const p=document.createElement("span");p.textContent="Control",h.append(f,p),d.append(h);const g=document.createElement("label");g.className="toggle";const _=document.createElement("input");_.type="checkbox",_.dataset.breakdownClass="field_third",_.addEventListener("change",()=>{_.checked?i.add("field_third"):i.delete("field_third"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const m=document.createElement("span");m.textContent="Thirds",g.append(_,m),d.append(g);const v=document.createElement("label");v.className="toggle";const y=document.createElement("input");y.type="checkbox",y.dataset.breakdownClass="field_half",y.addEventListener("change",()=>{y.checked?i.add("field_half"):i.delete("field_half"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const b=document.createElement("span");b.textContent="Halves",v.append(y,b),d.append(v),e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=s.filter(l=>i.has(l));t.textContent=o.length===0?"Total only":o.map(l=>l==="possession_state"?"Control":l==="field_half"?"Halves":"Thirds").join(" x ")}}}function r(){return s.filter(o=>i.has(o))}}function tG(){let n=null;return{id:"fifty-fifty",label:"50/50",setup(e){n=new H5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return r4(e.statsTimeline,e.replay)},getTimelineRanges(e){return z4(e.statsTimeline,e.replay)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);if(!i)return"";const s=uf("Challenge Summary",d5(i.team_zero?.fifty_fifty)),a=si(i.players,r=>Tn(r.name,r.is_team_0,dx(r.fifty_fifty)));return s+a},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?dx(s.fifty_fifty):""}}}function nG(){let n=null,e=null;return{id:"ball_half",label:"Half Control",setup(t){e=t.replay,n=new c5(t.player.sceneState.replayRoot,t.fieldScale)},teardown(){n?.dispose(),n=null,e=null},onBeforeRender(t){const i=e?.ballFrames[t.frameIndex];n?.update(i?.position?.y??null)},getTimelineRanges(t){return F4(t.statsTimeline,t.replay)},renderStats(t,i){const a=zt(i.statsFrameLookup,t)?.team_zero?.ball_half;return a?uf("Field State",_x(a,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(t,i,s){const a=zt(s.statsFrameLookup,i),r=wn(s,i,t),o=r?.is_team_0?a?.team_zero?.ball_half:a?.team_one?.ball_half;return!o||!r?"":_x(o,{labelPerspective:{kind:"team"}})}}}function iG(){return{id:"ball_third",label:"Third Control",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return B4(n.statsTimeline,n.replay)},renderStats(n,e){const i=zt(e.statsFrameLookup,n)?.team_zero?.ball_third;return i?uf("Field State",yx(i,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.ball_third:i?.team_one?.ball_third;return!a||!s?"":yx(a,{labelPerspective:{kind:"team"}})}}}function sG(){return{id:"rush",label:"Rush",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return H4(n.statsTimeline,n.replay)},getTimelineEvents(n){return v4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n),i=t?.team_zero?.rush,s=t?.team_one?.rush;return!i||!s?"":[Tn("Blue Team",!0,am(i)),Tn("Orange Team",!1,am(s))].join("")},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.rush:i?.team_one?.rush;return!a||!s?"":am(a)}}}const x_={speed_band:{valueOrder:["slow","boost","supersonic"],formatValue:n=>({slow:"Slow",boost:"Boost",supersonic:"Supersonic"})[n]??n},height_band:{valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n}};function aG(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function om(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function rG(n,e,t=1){return n===void 0||Number.isNaN(n)?"?":e===void 0||Number.isNaN(e)||e<=0?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${(n*100/e).toFixed(t)}%)`}function Tx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function cd(n,e){return`
${Tx(n)}${Tx(e)}
`}function oG(n,e,t){for(const i of t){const{valueOrder:s}=x_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function lG(n,e){if(e.length===1){const t=e[0];return x_[t].formatValue(n[t])}return e.map(t=>x_[t].formatValue(n[t])).join(" / ")}function cG(n,e,t){if(e.length===0||!n?.labeled_tracked_time?.entries?.length)return"";const i=new Map,s=n?.labeled_tracked_time?.entries??[];for(const a of s){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=i.get(c);u?u.total+=a.value:i.set(c,{values:o,total:a.value})}return[...i.values()].sort((a,r)=>oG(a.values,r.values,e)).map(a=>cd(lG(a.values,e),rG(a.total,t))).join("")}function Mx(n,e={}){const t=n?.tracked_time,i=n&&t&&t>0?n.speed_integral/t:t===0?0:void 0,s=aG(e.breakdownClasses),a=cG(n,s,t);return` + ${cd("Tracked",om(t,1,"s"))} + ${cd("Distance",om(n?.total_distance,0," uu"))} + ${cd("Avg speed",om(i,0," uu/s"))} ${a} - `}const yx="subtr-actor-flip-impulse-overlay-styles",D4=5882879,k4=16761180,tm=260,O4=760,F4=260,N4=2.5;function NE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function U4(n,e){const t=NE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function B4(n){return n.split("_").filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function z4(n,e){return ve(n,"dodge").flatMap((t,i)=>{const s=t.dodge_impulse;if(!s)return[];const a=U4(e,t.player),r=NE(t.player),o=e.frames[t.frame]?.time??t.time,l=new S(s.estimated_direction[0],s.estimated_direction[1],s.estimated_direction[2]);return l.lengthSq()<=Number.EPSILON&&l.set(1,0,0),l.normalize(),{id:`dodge-impulse:${t.frame}:${r}:${i}`,time:o,frame:t.frame,isTeamZero:t.is_team_0,playerId:r,playerName:a,position:new S(s.start_position[0],s.start_position[1],s.start_position[2]+44),direction:l,magnitude:s.estimated_impulse_magnitude,confidence:s.confidence,directionLabel:s.direction_label}})}function H4(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function V4(){if(document.getElementById(yx))return;const n=document.createElement("style");n.id=yx,n.textContent=` + `}const Ex="subtr-actor-flip-impulse-overlay-styles",uG=5882879,dG=16761180,lm=260,hG=760,fG=260,pG=2.5;function KE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function mG(n,e){const t=KE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function _G(n){return n.split("_").filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function gG(n,e){return ve(n,"dodge").flatMap((t,i)=>{const s=t.dodge_impulse;if(!s)return[];const a=mG(e,t.player),r=KE(t.player),o=e.frames[t.frame]?.time??t.time,l=new S(s.estimated_direction[0],s.estimated_direction[1],s.estimated_direction[2]);return l.lengthSq()<=Number.EPSILON&&l.set(1,0,0),l.normalize(),{id:`dodge-impulse:${t.frame}:${r}:${i}`,time:o,frame:t.frame,isTeamZero:t.is_team_0,playerId:r,playerName:a,position:new S(s.start_position[0],s.start_position[1],s.start_position[2]+44),direction:l,magnitude:s.estimated_impulse_magnitude,confidence:s.confidence,directionLabel:s.direction_label}})}function yG(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function vG(){if(document.getElementById(Ex))return;const n=document.createElement("style");n.id=Ex,n.textContent=` .sap-flip-impulse-overlay-root { position: absolute; inset: 0; @@ -5676,7 +5741,7 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function G4(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class $4{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,F4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=N4;constructor(e,t,i,s){V4(),this.scene=e,this.container=t,this.markers=z4(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="flip-impulse-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-flip-impulse-overlay-root",this.container.append(this.labelRoot)}update(e){const t=H4(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.arrow.removeFromParent(),a.arrow.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.24+.72*r,c=tm+Math.min(1,s.magnitude/450)*(O4-tm);o.arrow.position.copy(s.position),o.arrow.setDirection(s.direction),o.arrow.setLength(c,70,38),o.arrow.cone.material.opacity=l,o.arrow.line.material.opacity=l,this.worldPosition.copy(s.position).add(this.labelOffset);const u=G4(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.arrow.removeFromParent(),e.arrow.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.isTeamZero?D4:k4,s=new Tg(e.direction,e.position,tm,i);s.renderOrder=35,s.line.material=new Rt({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),s.cone.material=new Ye({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),this.group.add(s);const a=document.createElement("div");a.className=`sap-flip-impulse-overlay-label ${e.isTeamZero?"sap-flip-impulse-overlay-label-blue":"sap-flip-impulse-overlay-label-orange"}`,a.textContent=`${e.playerName} ${B4(e.directionLabel)} ${Math.round(e.confidence*100)}%`,this.labelRoot.append(a);const r={marker:e,arrow:s,label:a};return this.views.set(e.id,r),r}}const vx="subtr-actor-speed-flip-overlay-styles",W4=5882879,X4=16761180,K4=16185075,q4=150,Y4=230,j4=220,Z4=4;function UE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function J4(n,e){const t=UE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function Q4(n,e){return ve(n,"speed_flip").map(t=>{const i=J4(e,t.player),s=UE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`speed-flip:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,position:{x:t.start_position[0],y:t.start_position[1],z:t.start_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function eG(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function tG(){if(document.getElementById(vx))return;const n=document.createElement("style");n.id=vx,n.textContent=` + `,document.head.append(n)}function bG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class xG{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,fG);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=pG;constructor(e,t,i,s){vG(),this.scene=e,this.container=t,this.markers=gG(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="flip-impulse-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-flip-impulse-overlay-root",this.container.append(this.labelRoot)}update(e){const t=yG(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.arrow.removeFromParent(),a.arrow.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.24+.72*r,c=lm+Math.min(1,s.magnitude/450)*(hG-lm);o.arrow.position.copy(s.position),o.arrow.setDirection(s.direction),o.arrow.setLength(c,70,38),o.arrow.cone.material.opacity=l,o.arrow.line.material.opacity=l,this.worldPosition.copy(s.position).add(this.labelOffset);const u=bG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.arrow.removeFromParent(),e.arrow.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.isTeamZero?uG:dG,s=new Ig(e.direction,e.position,lm,i);s.renderOrder=35,s.line.material=new Rt({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),s.cone.material=new Ye({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),this.group.add(s);const a=document.createElement("div");a.className=`sap-flip-impulse-overlay-label ${e.isTeamZero?"sap-flip-impulse-overlay-label-blue":"sap-flip-impulse-overlay-label-orange"}`,a.textContent=`${e.playerName} ${_G(e.directionLabel)} ${Math.round(e.confidence*100)}%`,this.labelRoot.append(a);const r={marker:e,arrow:s,label:a};return this.views.set(e.id,r),r}}const Cx="subtr-actor-speed-flip-overlay-styles",wG=5882879,SG=16761180,TG=16185075,MG=150,EG=230,CG=220,AG=4;function qE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function RG(n,e){const t=qE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function PG(n,e){return ve(n,"speed_flip").map(t=>{const i=RG(e,t.player),s=qE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`speed-flip:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,position:{x:t.start_position[0],y:t.start_position[1],z:t.start_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function IG(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function LG(){if(document.getElementById(Cx))return;const n=document.createElement("style");n.id=Cx,n.textContent=` .sap-speed-flip-overlay-root { position: absolute; inset: 0; @@ -5713,7 +5778,7 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function nG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class iG{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,j4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=Z4;constructor(e,t,i,s){tG(),this.scene=e,this.container=t,this.markers=Q4(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="speed-flip-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-speed-flip-overlay-root",this.container.append(this.labelRoot)}update(e){const t=eG(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.16+.56*r,c=.96+(1-r)*.22;o.material.opacity=l,o.ring.position.set(s.position.x,s.position.y,s.position.z+14),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.position.x,s.position.y,s.position.z).add(this.labelOffset);const u=nG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ye({color:e.quality>=.75?K4:e.isTeamZero?W4:X4,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),s=new ni(q4,Y4,48),a=new we(s,i);a.renderOrder=30,this.group.add(a);const r=document.createElement("div");r.className=`sap-speed-flip-overlay-label ${e.isTeamZero?"sap-speed-flip-overlay-label-blue":"sap-speed-flip-overlay-label-orange"}`,r.textContent=`${e.playerName} speed flip ${e.qualityLabel}`,this.labelRoot.append(r);const o={marker:e,ring:a,material:i,label:r};return this.views.set(e.id,o),o}}const Du=[{value:"big",label:"Big pads"},{value:"small",label:"Small pads"},{value:"ambiguous",label:"Ambiguous pads"}],nm=[{value:"both",label:"Both detectors"},{value:"inferred_only",label:"Inferred only"},{value:"reported_only",label:"Reported only"}],ku=[{value:"active",label:"Active play"},{value:"inactive",label:"Inactive play"},{value:"unknown",label:"Unknown activity"}],Ou=[{value:"own",label:"Own half"},{value:"opponent",label:"Opponent half"},{value:"unknown",label:"Unknown half"}];function sG(n,e){return n===e||n==="ambiguous"}function aG(n,e){const t=e?rG(e,ve(e,"boost_pickup")):[];return t.length===0?null:t.find(i=>At(i.player_id)===n.player.id&&i.detection!=="inferred_only"&&i.frame===n.event.frame&&sG(i.pad_type,n.pad.size))??null}function rG(n,e){if(e.length>0)return e;const t=n.events?.boost_pickups;return Array.isArray(t)?t:e}function BE(n={}){let e=null,t=null,i=null,s=null,a=null,r=null;const o=new Set(Du.map(M=>M.value)),l=new Set(nm.map(M=>M.value)),c=new Set(ku.map(M=>M.value)),u=new Set(Ou.map(M=>M.value));let d=null,h=!1;function f(M,C,w,E){const R=document.createElement("div");R.className="boost-pickup-filter-group";const D=document.createElement("p");D.className="module-settings-group-title",D.textContent=M;const O=document.createElement("div");O.className="boost-pickup-filter-options";for(const k of C){const U=document.createElement("label");U.className="toggle";const F=document.createElement("input");F.type="checkbox",F.dataset.boostPickupFilter=E,F.dataset.boostPickupValue=k.value,F.addEventListener("change",()=>{F.checked?w.add(k.value):w.delete(k.value),_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const W=document.createElement("span");W.textContent=k.label,U.append(F,W),O.append(U)}return R.append(D,O),R}function p(){const M=document.createElement("div");M.className="boost-pickup-filter-group boost-pickup-filter-group-wide",i=M;const C=document.createElement("p");return C.className="module-settings-group-title",C.textContent="Player",s=document.createElement("div"),s.className="boost-pickup-filter-options",M.append(C,s),M}function g(M){if(s&&(s.replaceChildren(),i&&(i.hidden=!M||M.players.length===0),!!M))for(const C of M.players){const w=document.createElement("label");w.className="toggle";const E=document.createElement("input");E.type="checkbox",E.dataset.boostPickupPlayerId=C.id,E.addEventListener("change",()=>{d||(d=new Set(M.players.map(D=>D.id))),E.checked?d.add(C.id):d.delete(C.id),_(M),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const R=document.createElement("span");R.textContent=`${C.name} (${C.isTeamZero?"Blue":"Orange"})`,w.append(E,R),s.append(w)}}function _(M){if(e){for(const C of e.querySelectorAll("input[data-boost-pickup-filter][data-boost-pickup-value]")){const w=C.dataset.boostPickupFilter,E=C.dataset.boostPickupValue;C.checked=m(w,E)}for(const C of e.querySelectorAll("input[data-boost-pickup-player-id]")){const w=C.dataset.boostPickupPlayerId;C.checked=w?d?.has(w)??!0:!1}t&&(t.textContent=v(M))}}function m(M,C){if(!C)return!1;switch(M){case"pad-type":return o.has(C);case"detection":return l.has(C);case"activity":return c.has(C);case"field-half":return u.has(C);default:return!1}}function v(M){const C=M?.players.length??0,w=d?d.size:C;if(o.size===0||l.size===0||c.size===0||u.size===0||d!==null&&d.size===0)return"Hidden";const R=[o.sizeR.value));for(const R of w)typeof R=="string"&&E.has(R)&&M.add(R)}function T(){return{padTypes:[...o],detections:[...l],activities:[...c],fieldHalves:[...u],playerIds:d?[...d]:null}}function x(M){if(!M||typeof M!="object"||Array.isArray(M))return;const C=M;b(o,Du,C.padTypes),b(l,nm,C.detections),b(c,ku,C.activities),b(u,Ou,C.fieldHalves),d=Array.isArray(C.playerIds)?new Set(C.playerIds.filter(w=>typeof w=="string")):null,h=a===null&&d!==null,_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()}return{setup(M){a!==M.replay&&(a=M.replay,h?h=!1:d=null),r=M.statsTimeline,_(M.replay)},teardown(){},getConfig:T,applyConfig:x,getTimelineRangeOptions(){const M={padTypes:o,detections:l,activities:c,fieldHalves:u};return d&&(M.playerIds=d),M},includePickup:y,renderSettings(M,C){if(!e){e=document.createElement("div"),e.className="boost-pickup-filter-panel";const w=document.createElement("div");w.className="boost-pickup-filter-summary",t=document.createElement("strong"),t.className="metric-readout",w.append(t);const E=document.createElement("div");E.className="boost-pickup-filter-grid",E.append(f("Pad type",Du,o,"pad-type"),f("Activity",ku,c,"activity"),f("Field half",Ou,u,"field-half"),p()),(C.showHeader??!1)&&e.append(w),e.append(E)}return g(M?.replay??null),_(M?.replay??null),e}}}function ai(n){return{id:n.id,label:n.label,setup(){},teardown(){},onBeforeRender(){},getTimelineEvents:n.getTimelineEvents,getTimelineRanges:n.getTimelineRanges,renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,n.render(n.select(s),s))):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?n.render(n.select(s),s):""}}}function Ui(n){return n==null?"?":Qh(n).toFixed(0)}function oG(n,e){const t=Ui(n);if(n==null||e==null)return t;const i=Ui(n+e);return`${t} (${i})`}function im(n){n&&typeof n=="object"&&"dispose"in n&&typeof n.dispose=="function"&&n.dispose()}function lG(n){n&&(n.removeFromParent(),n.traverse(e=>{const t="geometry"in e?e.geometry:null;im(t);const i="material"in e?e.material:null;if(Array.isArray(i))for(const s of i)im(s);else im(i)}))}function cG(){let n=0,e=null;return{acquire(t){e||(e=DV(t.player.sceneState.replayRoot,t.fieldScale)),n+=1},release(){n<=0||(n-=1,n===0&&(lG(e),e=null))}}}const bx=cG();function nt(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Le(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function m_(n,e=0){return Le(n,e,"%")}function zE(n,e,t=1,i=0){if(n===void 0||Number.isNaN(n))return m_(e,i);const s=Le(n,t,"s");return e===void 0||Number.isNaN(e)?s:`${s} (${m_(e,i)})`}function za(n,e,t=1,i=0){const s=n!==void 0&&e!==void 0&&!Number.isNaN(n)&&!Number.isNaN(e)&&e>0?n*100/e:void 0;return zE(n,s,t,i)}function bt(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function ds(n){const e=bt(n);return e===void 0?void 0:e*100}function HE(n){return bt(n?.tracked_time)}function uG(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=HE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a*100/s}function An(n,e,t){return zE(bt(n?.[t]),uG(n,e,t))}function xx(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=HE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a/s}function wx(n){return` + `,document.head.append(n)}function kG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class DG{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,CG);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=AG;constructor(e,t,i,s){LG(),this.scene=e,this.container=t,this.markers=PG(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="speed-flip-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-speed-flip-overlay-root",this.container.append(this.labelRoot)}update(e){const t=IG(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.16+.56*r,c=.96+(1-r)*.22;o.material.opacity=l,o.ring.position.set(s.position.x,s.position.y,s.position.z+14),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.position.x,s.position.y,s.position.z).add(this.labelOffset);const u=kG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ye({color:e.quality>=.75?TG:e.isTeamZero?wG:SG,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),s=new ni(MG,EG,48),a=new we(s,i);a.renderOrder=30,this.group.add(a);const r=document.createElement("div");r.className=`sap-speed-flip-overlay-label ${e.isTeamZero?"sap-speed-flip-overlay-label-blue":"sap-speed-flip-overlay-label-orange"}`,r.textContent=`${e.playerName} speed flip ${e.qualityLabel}`,this.labelRoot.append(r);const o={marker:e,ring:a,material:i,label:r};return this.views.set(e.id,o),o}}const Nu=[{value:"big",label:"Big pads"},{value:"small",label:"Small pads"},{value:"ambiguous",label:"Ambiguous pads"}],cm=[{value:"both",label:"Both detectors"},{value:"inferred_only",label:"Inferred only"},{value:"reported_only",label:"Reported only"}],Uu=[{value:"active",label:"Active play"},{value:"inactive",label:"Inactive play"},{value:"unknown",label:"Unknown activity"}],Bu=[{value:"own",label:"Own half"},{value:"opponent",label:"Opponent half"},{value:"unknown",label:"Unknown half"}];function OG(n,e){return n===e||n==="ambiguous"}function FG(n,e){const t=e?NG(e,ve(e,"boost_pickup")):[];return t.length===0?null:t.find(i=>At(i.player_id)===n.player.id&&i.detection!=="inferred_only"&&i.frame===n.event.frame&&OG(i.pad_type,n.pad.size))??null}function NG(n,e){if(e.length>0)return e;const t=n.events?.boost_pickups;return Array.isArray(t)?t:e}function YE(n={}){let e=null,t=null,i=null,s=null,a=null,r=null;const o=new Set(Nu.map(M=>M.value)),l=new Set(cm.map(M=>M.value)),c=new Set(Uu.map(M=>M.value)),u=new Set(Bu.map(M=>M.value));let d=null,h=!1;function f(M,C,w,E){const R=document.createElement("div");R.className="boost-pickup-filter-group";const k=document.createElement("p");k.className="module-settings-group-title",k.textContent=M;const O=document.createElement("div");O.className="boost-pickup-filter-options";for(const D of C){const U=document.createElement("label");U.className="toggle";const F=document.createElement("input");F.type="checkbox",F.dataset.boostPickupFilter=E,F.dataset.boostPickupValue=D.value,F.addEventListener("change",()=>{F.checked?w.add(D.value):w.delete(D.value),_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const W=document.createElement("span");W.textContent=D.label,U.append(F,W),O.append(U)}return R.append(k,O),R}function p(){const M=document.createElement("div");M.className="boost-pickup-filter-group boost-pickup-filter-group-wide",i=M;const C=document.createElement("p");return C.className="module-settings-group-title",C.textContent="Player",s=document.createElement("div"),s.className="boost-pickup-filter-options",M.append(C,s),M}function g(M){if(s&&(s.replaceChildren(),i&&(i.hidden=!M||M.players.length===0),!!M))for(const C of M.players){const w=document.createElement("label");w.className="toggle";const E=document.createElement("input");E.type="checkbox",E.dataset.boostPickupPlayerId=C.id,E.addEventListener("change",()=>{d||(d=new Set(M.players.map(k=>k.id))),E.checked?d.add(C.id):d.delete(C.id),_(M),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const R=document.createElement("span");R.textContent=`${C.name} (${C.isTeamZero?"Blue":"Orange"})`,w.append(E,R),s.append(w)}}function _(M){if(e){for(const C of e.querySelectorAll("input[data-boost-pickup-filter][data-boost-pickup-value]")){const w=C.dataset.boostPickupFilter,E=C.dataset.boostPickupValue;C.checked=m(w,E)}for(const C of e.querySelectorAll("input[data-boost-pickup-player-id]")){const w=C.dataset.boostPickupPlayerId;C.checked=w?d?.has(w)??!0:!1}t&&(t.textContent=v(M))}}function m(M,C){if(!C)return!1;switch(M){case"pad-type":return o.has(C);case"detection":return l.has(C);case"activity":return c.has(C);case"field-half":return u.has(C);default:return!1}}function v(M){const C=M?.players.length??0,w=d?d.size:C;if(o.size===0||l.size===0||c.size===0||u.size===0||d!==null&&d.size===0)return"Hidden";const R=[o.sizeR.value));for(const R of w)typeof R=="string"&&E.has(R)&&M.add(R)}function T(){return{padTypes:[...o],detections:[...l],activities:[...c],fieldHalves:[...u],playerIds:d?[...d]:null}}function x(M){if(!M||typeof M!="object"||Array.isArray(M))return;const C=M;b(o,Nu,C.padTypes),b(l,cm,C.detections),b(c,Uu,C.activities),b(u,Bu,C.fieldHalves),d=Array.isArray(C.playerIds)?new Set(C.playerIds.filter(w=>typeof w=="string")):null,h=a===null&&d!==null,_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()}return{setup(M){a!==M.replay&&(a=M.replay,h?h=!1:d=null),r=M.statsTimeline,_(M.replay)},teardown(){},getConfig:T,applyConfig:x,getTimelineRangeOptions(){const M={padTypes:o,detections:l,activities:c,fieldHalves:u};return d&&(M.playerIds=d),M},includePickup:y,renderSettings(M,C){if(!e){e=document.createElement("div"),e.className="boost-pickup-filter-panel";const w=document.createElement("div");w.className="boost-pickup-filter-summary",t=document.createElement("strong"),t.className="metric-readout",w.append(t);const E=document.createElement("div");E.className="boost-pickup-filter-grid",E.append(f("Pad type",Nu,o,"pad-type"),f("Activity",Uu,c,"activity"),f("Field half",Bu,u,"field-half"),p()),(C.showHeader??!1)&&e.append(w),e.append(E)}return g(M?.replay??null),_(M?.replay??null),e}}}function ai(n){return{id:n.id,label:n.label,setup(){},teardown(){},onBeforeRender(){},getTimelineEvents:n.getTimelineEvents,getTimelineRanges:n.getTimelineRanges,renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,n.render(n.select(s),s))):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?n.render(n.select(s),s):""}}}function Bi(n){return n==null?"?":rf(n).toFixed(0)}function UG(n,e){const t=Bi(n);if(n==null||e==null)return t;const i=Bi(n+e);return`${t} (${i})`}function um(n){n&&typeof n=="object"&&"dispose"in n&&typeof n.dispose=="function"&&n.dispose()}function BG(n){n&&(n.removeFromParent(),n.traverse(e=>{const t="geometry"in e?e.geometry:null;um(t);const i="material"in e?e.material:null;if(Array.isArray(i))for(const s of i)um(s);else um(i)}))}function zG(){let n=0,e=null;return{acquire(t){e||(e=u5(t.player.sceneState.replayRoot,t.fieldScale)),n+=1},release(){n<=0||(n-=1,n===0&&(BG(e),e=null))}}}const Ax=zG();function nt(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Le(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function w_(n,e=0){return Le(n,e,"%")}function jE(n,e,t=1,i=0){if(n===void 0||Number.isNaN(n))return w_(e,i);const s=Le(n,t,"s");return e===void 0||Number.isNaN(e)?s:`${s} (${w_(e,i)})`}function Ha(n,e,t=1,i=0){const s=n!==void 0&&e!==void 0&&!Number.isNaN(n)&&!Number.isNaN(e)&&e>0?n*100/e:void 0;return jE(n,s,t,i)}function bt(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function ds(n){const e=bt(n);return e===void 0?void 0:e*100}function ZE(n){return bt(n?.tracked_time)}function HG(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=ZE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a*100/s}function An(n,e,t){return jE(bt(n?.[t]),HG(n,e,t))}function Rx(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=ZE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a/s}function Px(n){return`
Most back${An(n,"percent_most_back","time_most_back")}
Most forward${An(n,"percent_most_forward","time_most_forward")}
Mid role${An(n,"percent_mid_role","time_mid_role")}
@@ -5725,59 +5790,59 @@ void main() {
Behind ball${An(n,"percent_behind_ball","time_behind_ball")}
Level with ball${An(n,"percent_level_with_ball","time_level_with_ball")}
In front of ball${An(n,"percent_in_front_of_ball","time_in_front_of_ball")}
- `}function Sx(n){return` + `}function Ix(n){return`
Defensive zone${An(n,"percent_defensive_third","time_defensive_third")}
Neutral zone${An(n,"percent_neutral_third","time_neutral_third")}
Offensive zone${An(n,"percent_offensive_third","time_offensive_third")}
Defensive half${An(n,"percent_defensive_half","time_defensive_half")}
Offensive half${An(n,"percent_offensive_half","time_offensive_half")}
-
To teammates${Le(xx(n,"average_distance_to_teammates","sum_distance_to_teammates"),0)}
-
To ball${Le(xx(n,"average_distance_to_ball","sum_distance_to_ball"),0)}
- `}function Fu(n,e){return za(bt(n?.[e]),bt(n?.active_game_time))}function dG(n){return n?n.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"?"}function hG(n){const e=n&&n.first_man_stint_count>0?n.time_first_man/n.first_man_stint_count:void 0;return` -
Current role${dG(n?.current_role_state)}
-
First man${Fu(n,"time_first_man")}
+
To teammates${Le(Rx(n,"average_distance_to_teammates","sum_distance_to_teammates"),0)}
+
To ball${Le(Rx(n,"average_distance_to_ball","sum_distance_to_ball"),0)}
+ `}function zu(n,e){return Ha(bt(n?.[e]),bt(n?.active_game_time))}function VG(n){return n?n.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"?"}function GG(n){const e=n&&n.first_man_stint_count>0?n.time_first_man/n.first_man_stint_count:void 0;return` +
Current role${VG(n?.current_role_state)}
+
First man${zu(n,"time_first_man")}
First stints${nt(n?.first_man_stint_count)}
Avg first stint${Le(e,2,"s")}
Longest first stint${Le(n?.longest_first_man_stint_time,2,"s")}
-
Second man${Fu(n,"time_second_man")}
-
Third man${Fu(n,"time_third_man")}
-
Ambiguous${Fu(n,"time_ambiguous_role")}
+
Second man${zu(n,"time_second_man")}
+
Third man${zu(n,"time_third_man")}
+
Ambiguous${zu(n,"time_ambiguous_role")}
Became first${nt(n?.became_first_man_count)}
Lost first${nt(n?.lost_first_man_count)}
- `}function fG(n){const e=n&&n.shots>0?n.goals*100/n.shots:void 0;return` + `}function $G(n){const e=n&&n.shots>0?n.goals*100/n.shots:void 0;return`
Score${nt(n?.score)}
Goals${nt(n?.goals)}
Assists${nt(n?.assists)}
Saves${nt(n?.saves)}
Shots${nt(n?.shots)}
-
Shooting %${m_(e)}
- `}function pG(n){return` +
Shooting %${w_(e)}
+ `}function WG(n){return`
Hits${nt(n?.count)}
Since last${Le(bt(n?.time_since_last_backboard),2,"s")}
- `}function mG(n){return` + `}function XG(n){return`
Count${nt(n?.count)}
Since last${Le(bt(n?.time_since_last_double_tap),2,"s")}
- `}function _G(n){const e=n&&n.completed_pass_count>0?n.total_pass_distance/n.completed_pass_count:void 0,t=n&&n.completed_pass_count>0?n.total_pass_advance/n.completed_pass_count:void 0;return` + `}function KG(n){const e=n&&n.completed_pass_count>0?n.total_pass_distance/n.completed_pass_count:void 0,t=n&&n.completed_pass_count>0?n.total_pass_advance/n.completed_pass_count:void 0;return`
Completed${nt(n?.completed_pass_count)}
Received${nt(n?.received_pass_count)}
Avg distance${Le(e,0)}
Avg advance${Le(t,0)}
Longest${Le(n?.longest_pass_distance,0)}
Since last${Le(bt(n?.time_since_last_completed_pass),2,"s")}
- `}function gG(n){const e=n&&n.count>0?n.total_ball_speed/n.count:void 0,t=n&&n.count>0?n.total_pass_distance/n.count:void 0;return` + `}function qG(n){const e=n&&n.count>0?n.total_ball_speed/n.count:void 0,t=n&&n.count>0?n.total_pass_distance/n.count:void 0;return`
Attempts${nt(n?.count)}
Avg speed${Le(e,0)}
Fastest${Le(n?.fastest_ball_speed,0)}
Avg pass distance${Le(t,0)}
Since last${Le(bt(n?.time_since_last_one_timer),2,"s")}
- `}function Tx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0;return` + `}function Lx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0;return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(bt(n?.last_confidence),0,"%")}
Avg quality${Le(e,0,"%")}
Best quality${Le(bt(n?.best_confidence),0,"%")}
Since last${Le(bt(n?.time_since_last_ceiling_shot),2,"s")}
- `}function Mx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=ds(e),i=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,s=n&&n.count>0?n.cumulative_takeoff_to_touch_time/n.count:void 0,a=n&&n.count>0?n.cumulative_touch_height/n.count:void 0;return` + `}function kx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=ds(e),i=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,s=n&&n.count>0?n.cumulative_takeoff_to_touch_time/n.count:void 0,a=n&&n.count>0?n.cumulative_touch_height/n.count:void 0;return`
Plays${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(ds(n?.last_confidence),0,"%")}
@@ -5786,7 +5851,7 @@ void main() {
Avg takeoff${Le(s,2,"s")}
Avg height${Le(a,0)}
Since last${Le(bt(n?.time_since_last_wall_aerial),2,"s")}
- `}function Ex(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_takeoff_to_shot_time/n.count:void 0,i=n&&n.count>0?n.cumulative_shot_height/n.count:void 0;return` + `}function Dx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_takeoff_to_shot_time/n.count:void 0,i=n&&n.count>0?n.cumulative_shot_height/n.count:void 0;return`
Shots${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(ds(n?.last_confidence),0,"%")}
@@ -5794,13 +5859,13 @@ void main() {
Avg takeoff${Le(t,2,"s")}
Avg height${Le(i,0)}
Since last${Le(bt(n?.time_since_last_wall_aerial_shot),2,"s")}
- `}function yG(n){const e=n&&n.carry_count>0?n.average_horizontal_gap_sum/n.carry_count:void 0;return` + `}function YG(n){const e=n&&n.carry_count>0?n.average_horizontal_gap_sum/n.carry_count:void 0;return`
Carries${nt(n?.carry_count)}
Total time${Le(n?.total_carry_time,1,"s")}
Longest${Le(n?.longest_carry_time,1,"s")}
Furthest${Le(n?.furthest_carry_distance,0)}
Avg gap${Le(e,0)}
- `}function vG(n){const e=n&&n.count>0?n.average_horizontal_gap_sum/n.count:void 0,t=n&&n.count>0?n.total_touch_count/n.count:void 0;return` + `}function jG(n){const e=n&&n.count>0?n.average_horizontal_gap_sum/n.count:void 0,t=n&&n.count>0?n.total_touch_count/n.count:void 0;return`
Air dribbles${nt(n?.count)}
Ground to air${nt(n?.ground_to_air_count)}
Wall to air${nt(n?.wall_to_air_count)}
@@ -5810,11 +5875,11 @@ void main() {
Longest${Le(n?.longest_time,1,"s")}
Furthest${Le(n?.furthest_distance,0)}
Avg gap${Le(e,0)}
- `}function bG(n){const e=n&&n.press_count>0?n.total_duration/n.press_count:void 0;return` + `}function ZG(n){const e=n&&n.press_count>0?n.total_duration/n.press_count:void 0;return`
Presses${nt(n?.press_count)}
Total time${Le(n?.total_duration,1,"s")}
Avg duration${Le(e,2,"s")}
- `}function xG(n){const e=n&&n.whiff_count>0?n.cumulative_closest_approach_distance/n.whiff_count:void 0;return` + `}function JG(n){const e=n&&n.whiff_count>0?n.cumulative_closest_approach_distance/n.whiff_count:void 0;return`
Whiffs${nt(n?.whiff_count)}
Beaten to ball${nt(n?.beaten_to_ball_count)}
Grounded${nt(n?.grounded_whiff_count)}
@@ -5824,10 +5889,10 @@ void main() {
Best closest${Le(bt(n?.best_closest_approach_distance),0)}
Avg closest${Le(e,0)}
Since last${Le(bt(n?.time_since_last_whiff),2,"s")}
- `}function wG(n){return` + `}function QG(n){return`
Inflicted${nt(n?.demos_inflicted)}
Taken${nt(n?.demos_taken)}
- `}function SG(n){const e=n&&n.bumps_inflicted>0?n.cumulative_bump_strength/n.bumps_inflicted:void 0;return` + `}function e$(n){const e=n&&n.bumps_inflicted>0?n.cumulative_bump_strength/n.bumps_inflicted:void 0;return`
Inflicted${nt(n?.bumps_inflicted)}
Taken${nt(n?.bumps_taken)}
Team inflicted${nt(n?.team_bumps_inflicted)}
@@ -5835,14 +5900,14 @@ void main() {
Last strength${Le(bt(n?.last_bump_strength),0)}
Max strength${Le(bt(n?.max_bump_strength),0)}
Avg strength${Le(e,0)}
- `}function TG(n){return` + `}function t$(n){return`
Refreshes${nt(n?.count)}
On ball${nt(n?.on_ball_count)}
- `}function MG(n){const e=n&&n.count>0?n.total_time_to_use/n.count:void 0;return` + `}function n$(n){const e=n&&n.count>0?n.total_time_to_use/n.count:void 0;return`
Confirmed${nt(n?.count)}
Avg use${Le(e,2,"s")}
Fastest use${Le(bt(n?.min_time_to_use),2,"s")}
- `}function Cx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,i=n&&n.count>0?n.cumulative_ball_speed_change/n.count:void 0;return` + `}function Ox(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,i=n&&n.count>0?n.cumulative_ball_speed_change/n.count:void 0;return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(bt(n?.last_confidence),0,"%")}
@@ -5850,56 +5915,56 @@ void main() {
Avg setup${Le(t,2,"s")}
Avg impulse${Le(i,0,"uu/s")}
Since last${Le(bt(n?.time_since_last_flick),2,"s")}
- `}function Ax(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0;return` + `}function Fx(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0;return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(bt(n?.last_quality),0,"%")}
Avg quality${Le(e,0,"%")}
Best quality${Le(bt(n?.best_quality),0,"%")}
Since last${Le(bt(n?.time_since_last_speed_flip),2,"s")}
- `}function Rx(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return` + `}function Nx(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(t,0,"%")}
Avg quality${Le(i,0,"%")}
Best quality${Le(s,0,"%")}
Since last${Le(bt(n?.time_since_last_half_flip),2,"s")}
- `}function Px(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return` + `}function Ux(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(t,0,"%")}
Avg quality${Le(i,0,"%")}
Best quality${Le(s,0,"%")}
Since last${Le(bt(n?.time_since_last_wavedash),2,"s")}
- `}function Ix(n){const e=n&&n.tracked_time>0?Qh(n.boost_integral/n.tracked_time).toFixed(0):"?",t=bt(n?.tracked_time);return` -
Collected${oG(n?.amount_collected,n?.amount_respawned)}
-
Inactive collected${Ui(n?.amount_collected_inactive)}
-
Big pads amt${Ui(n?.amount_collected_big)}
-
Small pads amt${Ui(n?.amount_collected_small)}
-
Respawns${Ui(n?.amount_respawned)}
-
Overfill${Ui(n?.overfill_total)}
-
Used${Ui(n?.amount_used)}
-
Used ground${Ui(n?.amount_used_while_grounded)}
-
Used air${Ui(n?.amount_used_while_airborne)}
+ `}function Bx(n){const e=n&&n.tracked_time>0?rf(n.boost_integral/n.tracked_time).toFixed(0):"?",t=bt(n?.tracked_time);return` +
Collected${UG(n?.amount_collected,n?.amount_respawned)}
+
Inactive collected${Bi(n?.amount_collected_inactive)}
+
Big pads amt${Bi(n?.amount_collected_big)}
+
Small pads amt${Bi(n?.amount_collected_small)}
+
Respawns${Bi(n?.amount_respawned)}
+
Overfill${Bi(n?.overfill_total)}
+
Used${Bi(n?.amount_used)}
+
Used ground${Bi(n?.amount_used_while_grounded)}
+
Used air${Bi(n?.amount_used_while_airborne)}
Big pads${n?.big_pads_collected??"?"}
Small pads${n?.small_pads_collected??"?"}
Inactive big pads${n?.big_pads_collected_inactive??"?"}
Inactive small pads${n?.small_pads_collected_inactive??"?"}
-
Stolen${Ui(n?.amount_stolen)}
+
Stolen${Bi(n?.amount_stolen)}
Avg boost${e}
-
Time @ 0${za(bt(n?.time_zero_boost),t)}
-
Time 0-25${za(bt(n?.time_boost_0_25),t)}
-
Time 25-50${za(bt(n?.time_boost_25_50),t)}
-
Time 50-75${za(bt(n?.time_boost_50_75),t)}
-
Time 75-100${za(bt(n?.time_boost_75_100),t)}
-
Time @ 100${za(bt(n?.time_hundred_boost),t)}
- `}const __={kind:{label:"Kind",valueOrder:["control","medium_hit","hard_hit"],formatValue:n=>({control:"Control",medium_hit:"Medium",hard_hit:"Hard"})[n]??n},height_band:{label:"Height",valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n},surface:{label:"Surface",valueOrder:["ground","air","wall"],formatValue:n=>({ground:"Ground",air:"Air",wall:"Wall"})[n]??n},dodge_state:{label:"Dodge",valueOrder:["no_dodge","dodge"],formatValue:n=>({no_dodge:"No dodge",dodge:"Dodge"})[n]??n}};function EG(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function Qs(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function sm(n,e=0,t=""){return n===void 0||!Number.isFinite(n)?"?":`${n.toFixed(e)}${t}`}function Lx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Xi(n,e){return`
${Lx(n)}${Lx(e)}
`}function CG(n,e,t){for(const i of t){const{valueOrder:s}=__[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function AG(n,e){if(e.length===1){const t=e[0];return __[t].formatValue(n[t])}return e.map(t=>__[t].formatValue(n[t])).join(" / ")}function RG(n){return(n?.labeled_touch_counts?.entries??[]).map(e=>({labels:e.labels,count:e.count}))}function PG(n,e){if(e.length===0||n.length===0)return"";const t=new Map;for(const i of n){const s=new Map(i.labels.map(c=>[c.key,c.value])),a={};let r=!0;for(const c of e){const u=s.get(c);if(u===void 0){r=!1;break}a[c]=u}if(!r)continue;const o=e.map(c=>`${c}:${a[c]}`).join("|"),l=t.get(o);l?l.count+=i.count:t.set(o,{values:a,count:i.count})}return[...t.values()].sort((i,s)=>CG(i.values,s.values,e)).map(i=>Xi(AG(i.values,e),Qs(i.count))).join("")}function IG(n,e){if(!n||e.length!==1)return"";const[t]=e;if(t==="kind")return[Xi("Control",Qs(n.control_touch_count)),Xi("Medium",Qs(n.medium_hit_count)),Xi("Hard",Qs(n.hard_hit_count))].join("");if(t==="height_band"){const i=n.high_aerial_touch_count??0,s=(n.aerial_touch_count??0)-i,a=(n.touch_count??0)-(n.aerial_touch_count??0);return[Xi("Ground",Qs(a)),Xi("Low air",Qs(s)),Xi("High air",Qs(i))].join("")}return""}function Dx(n,e={}){const t=EG(e.breakdownClasses),i=RG(n),s=PG(i,t)||IG(n,t);return` - ${Xi("Touches",Qs(n?.touch_count))} - ${Xi("Ball advanced",sm(n?.total_ball_advance_distance,0," uu"))} - ${Xi("Ball traveled",sm(n?.total_ball_travel_distance,0," uu"))} - ${Xi("Ball retreated",sm(n?.total_ball_retreat_distance,0," uu"))} +
Time @ 0${Ha(bt(n?.time_zero_boost),t)}
+
Time 0-25${Ha(bt(n?.time_boost_0_25),t)}
+
Time 25-50${Ha(bt(n?.time_boost_25_50),t)}
+
Time 50-75${Ha(bt(n?.time_boost_50_75),t)}
+
Time 75-100${Ha(bt(n?.time_boost_75_100),t)}
+
Time @ 100${Ha(bt(n?.time_hundred_boost),t)}
+ `}const S_={kind:{label:"Kind",valueOrder:["control","medium_hit","hard_hit"],formatValue:n=>({control:"Control",medium_hit:"Medium",hard_hit:"Hard"})[n]??n},height_band:{label:"Height",valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n},surface:{label:"Surface",valueOrder:["ground","air","wall"],formatValue:n=>({ground:"Ground",air:"Air",wall:"Wall"})[n]??n},dodge_state:{label:"Dodge",valueOrder:["no_dodge","dodge"],formatValue:n=>({no_dodge:"No dodge",dodge:"Dodge"})[n]??n}};function i$(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function Qs(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function dm(n,e=0,t=""){return n===void 0||!Number.isFinite(n)?"?":`${n.toFixed(e)}${t}`}function zx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Ki(n,e){return`
${zx(n)}${zx(e)}
`}function s$(n,e,t){for(const i of t){const{valueOrder:s}=S_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function a$(n,e){if(e.length===1){const t=e[0];return S_[t].formatValue(n[t])}return e.map(t=>S_[t].formatValue(n[t])).join(" / ")}function r$(n){return(n?.labeled_touch_counts?.entries??[]).map(e=>({labels:e.labels,count:e.count}))}function o$(n,e){if(e.length===0||n.length===0)return"";const t=new Map;for(const i of n){const s=new Map(i.labels.map(c=>[c.key,c.value])),a={};let r=!0;for(const c of e){const u=s.get(c);if(u===void 0){r=!1;break}a[c]=u}if(!r)continue;const o=e.map(c=>`${c}:${a[c]}`).join("|"),l=t.get(o);l?l.count+=i.count:t.set(o,{values:a,count:i.count})}return[...t.values()].sort((i,s)=>s$(i.values,s.values,e)).map(i=>Ki(a$(i.values,e),Qs(i.count))).join("")}function l$(n,e){if(!n||e.length!==1)return"";const[t]=e;if(t==="kind")return[Ki("Control",Qs(n.control_touch_count)),Ki("Medium",Qs(n.medium_hit_count)),Ki("Hard",Qs(n.hard_hit_count))].join("");if(t==="height_band"){const i=n.high_aerial_touch_count??0,s=(n.aerial_touch_count??0)-i,a=(n.touch_count??0)-(n.aerial_touch_count??0);return[Ki("Ground",Qs(a)),Ki("Low air",Qs(s)),Ki("High air",Qs(i))].join("")}return""}function Hx(n,e={}){const t=i$(e.breakdownClasses),i=r$(n),s=o$(i,t)||l$(n,t);return` + ${Ki("Touches",Qs(n?.touch_count))} + ${Ki("Ball advanced",dm(n?.total_ball_advance_distance,0," uu"))} + ${Ki("Ball traveled",dm(n?.total_ball_travel_distance,0," uu"))} + ${Ki("Ball retreated",dm(n?.total_ball_retreat_distance,0," uu"))} ${s} - `}const g_="subtr-actor:touch-color-modes-change",LG=[{title:"Team",mode:"team"},{title:"Intention",mode:"intention"},{title:"Hit strength",mode:"kind"},{title:"Height",mode:"height_band"},{title:"Surface",mode:"surface"},{title:"Dodge",mode:"dodge_state"},{title:"Flags",mode:"flag"}];function DG(n){return LG.find(e=>e.title===n)?.mode??"team"}function kG(n){return`#${n.toString(16).padStart(6,"0")}`}function VE(n,e){n.replaceChildren();const t=ho(e),i=new Set(t),s=document.createElement("div");s.className="touch-color-legend-explainer";const a=document.createElement("span");a.textContent="Toggle sections to add or remove rings";const r=document.createElement("span");r.textContent="The outermost enabled ring sets the label tint",s.append(a,r),n.append(s);for(const o of BH){const l=DG(o.title),c=i.has(l),u=document.createElement("section");u.className="touch-color-legend-group",u.dataset.active=c?"true":"false";const d=document.createElement("button");d.type="button",d.className="touch-color-legend-heading",d.dataset.colorMode=l,d.dataset.active=c?"true":"false",d.textContent=o.title,d.addEventListener("click",()=>{const f=new Set(i);f.has(l)?f.delete(l):f.add(l);const p=NH.filter(g=>f.has(g));n.dispatchEvent(new CustomEvent(g_,{bubbles:!0,detail:{colorModes:p}})),VE(n,p)});const h=document.createElement("div");h.className="touch-color-legend-list";for(const f of o.entries){const p=document.createElement("div");p.className="touch-color-legend-item";const g=document.createElement("span");g.className="touch-color-legend-swatch",g.style.background=kG(f.color);const _=document.createElement("span");_.textContent=f.label,p.append(g,_),h.append(p)}u.append(d,h),n.append(u)}}function OG(n){let e=null,t=5,i="advancement",s=["team"],a=null,r=null,o=null,l=null,c=null;const u=new Set,d=["kind","height_band","surface","dodge_state"];return{id:"touch",label:"Touch",setup(g){e=new ZH(g.player.sceneState,g.player.container,g.replay,g.statsTimeline,{mode:i,colorModes:s}),e.setDecaySeconds(t),c=_=>{if(!(_ instanceof CustomEvent))return;const m=_.detail?.colorModes;Array.isArray(m)&&p(m.filter(ed))},window.addEventListener(g_,c),h()},teardown(){c&&(window.removeEventListener(g_,c),c=null),e?.dispose(),e=null},onBeforeRender(g){e?.update(g.currentTime)},getTimelineEvents(g){return I5(g.statsTimeline,g.replay)},getConfig(){return{decaySeconds:t,overlayMode:i,overlayColorModes:s,breakdownClasses:f()}},applyConfig(g){if(g&&typeof g=="object"&&!Array.isArray(g)){const _=g;if(typeof _.decaySeconds=="number"&&Number.isFinite(_.decaySeconds)&&(t=Math.max(1,Math.min(10,_.decaySeconds)),e?.setDecaySeconds(t)),(_.overlayMode==="markers"||_.overlayMode==="advancement")&&(i=_.overlayMode,e?.setMode(i)),Array.isArray(_.overlayColorModes)?(s=ho(_.overlayColorModes.filter(ed)),e?.setColorModes(s)):ed(_.overlayColorMode)&&(s=ho(_.overlayColorMode),e?.setColorModes(s)),u.clear(),Array.isArray(_.breakdownClasses))for(const m of _.breakdownClasses)d.includes(m)&&u.add(m)}h(),n.rerenderCurrentState()},renderStats(g,_){const m=zt(_.statsFrameLookup,g);return m?si(m.players,v=>Tn(v.name,v.is_team_0,Dx(v.touch,{breakdownClasses:f()}),v.touch?.is_last_touch?'Last Touch':"")):""},renderFocusedPlayerStats(g,_,m){const v=wn(m,_,g);return v?Dx(v.touch,{breakdownClasses:f()}):""},renderSettings(){if(!a){a=document.createElement("div"),a.className="module-settings-card";const g=document.createElement("div");g.className="module-settings-header";const _=document.createElement("div"),m=document.createElement("p");m.className="module-settings-eyebrow",m.textContent="Touch markers";const v=document.createElement("h3");v.textContent="Touch decay",_.append(m,v),r=document.createElement("strong"),r.className="metric-readout",g.append(_,r);const y=document.createElement("label"),b=document.createElement("span");b.className="label",b.textContent="Keep each marker visible after the touch";const T=document.createElement("input");T.type="range",T.min="1",T.max="10",T.step="0.5",T.value=`${t}`,T.addEventListener("input",()=>{const H=Number(T.value);t=Number.isFinite(H)?Math.max(1,Math.min(10,H)):t,e?.setDecaySeconds(t),h(t),n.requestConfigSync?.()}),y.append(b,T);const x=document.createElement("div");x.className="module-settings-subgroup";const M=document.createElement("div");M.className="module-settings-header";const C=document.createElement("div"),w=document.createElement("p");w.className="module-settings-eyebrow",w.textContent="Overlay";const E=document.createElement("h3");E.textContent="Touch mode",C.append(w,E),o=document.createElement("strong"),o.className="metric-readout",M.append(C,o);const R=document.createElement("div");R.className="module-settings-options";for(const H of[{mode:"markers",label:"Markers"},{mode:"advancement",label:"Advancement"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="radio",oe.name="touch-overlay-mode",oe.dataset.overlayMode=H.mode,oe.addEventListener("change",()=>{oe.checked&&(i=H.mode,e?.setMode(i),h(),n.requestConfigSync?.())});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),R.append(ne)}x.append(M,R);const D=document.createElement("div");D.className="module-settings-subgroup";const O=document.createElement("div");O.className="module-settings-header";const k=document.createElement("div"),U=document.createElement("p");U.className="module-settings-eyebrow",U.textContent="Stat display";const F=document.createElement("h3");F.textContent="Touch breakdown",k.append(U,F),l=document.createElement("strong"),l.className="metric-readout",O.append(k,l);const W=document.createElement("div");W.className="module-settings-options";for(const H of[{className:"kind",label:"Kind"},{className:"height_band",label:"Height"},{className:"surface",label:"Surface"},{className:"dodge_state",label:"Dodge"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="checkbox",oe.dataset.breakdownClass=H.className,oe.addEventListener("change",()=>{oe.checked?u.add(H.className):u.delete(H.className),h(),n.rerenderCurrentState(),n.requestConfigSync?.()});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),W.append(ne)}D.append(O,W),a.append(g,y,x,D)}return h(),a}};function h(g){if(!a)return;const _=g??t,m=a.querySelector("input");m instanceof HTMLInputElement&&(m.value=`${_}`),r&&(r.textContent=`${_.toFixed(1)}s`);for(const v of a.querySelectorAll("input[data-overlay-mode]"))v.checked=v.dataset.overlayMode===i;o&&(o.textContent=i==="advancement"?"Advancement":"Markers");for(const v of a.querySelectorAll("input[data-breakdown-class]")){const y=v.dataset.breakdownClass;v.checked=y?u.has(y):!1}if(l){const v=f();l.textContent=v.length>0?v.map(y=>({kind:"Kind",height_band:"Height",surface:"Surface",dodge_state:"Dodge"})[y]).join(" + "):"Total only"}}function f(){return d.filter(g=>u.has(g))}function p(g){s=ho(g),e?.setColorModes(s),h(),n.requestConfigSync?.()}}function FG(n,e=BE({refreshTimelineRanges:n.refreshTimelineRanges,rerenderCurrentState:n.rerenderCurrentState})){return{id:"boost",label:"Boost",setup(t){e.setup(t)},teardown(){e.teardown()},onBeforeRender(){},getTimelineRanges(t){return m4(t.statsTimeline,t.replay,e.getTimelineRangeOptions())},getConfig(){return e.getConfig()},applyConfig(t){e.applyConfig(t)},includeBoostPickupAnimationPickup(t){return e.includePickup(t)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>Tn(a.name,a.is_team_0,Ix(a.boost))):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?Ix(a.boost):""},renderSettings(t){return e.renderSettings(t,{showHeader:!0})}}}function NG(){return ai({id:"core",label:"Core",select:n=>n.core,render:n=>fG(n)})}function UG(){return ai({id:"backboard",label:"Backboard",select:n=>n.backboard,render:n=>pG(n),getTimelineEvents(n){return L5(n.statsTimeline,n.replay)}})}function BG(){let n=null;return{id:"ceiling-shot",label:"Ceiling Shot",setup(e){n=new w5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Tx(s.ceiling_shot),s.ceiling_shot?.is_last_ceiling_shot?'Last Ceiling Shot':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Tx(s.ceiling_shot):""}}}function zG(){return{id:"wall-aerial",label:"Wall-to-Air Setup",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Mx(i.wall_aerial),i.wall_aerial?.is_last_wall_aerial?'Last Wall-to-Air Setup':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Mx(i.wall_aerial):""}}}function HG(){return{id:"wall-aerial-shot",label:"Wall Shot",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ex(i.wall_aerial_shot),i.wall_aerial_shot?.is_last_wall_aerial_shot?'Last Wall Shot':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ex(i.wall_aerial_shot):""}}}function VG(){return ai({id:"ball-carry",label:"Ball Carry",select:n=>n.ball_carry,render:n=>yG(n)})}function GG(){return ai({id:"air-dribble",label:"Air Dribble",select:n=>n.air_dribble,render:n=>vG(n)})}function $G(){return ai({id:"dodge-reset",label:"Dodge Refresh",select:n=>n.dodge_reset,render:n=>TG(n)})}function WG(){return ai({id:"flip-reset",label:"Flip Reset",select:n=>n.flip_reset,render:n=>MG(n)})}function XG(){return ai({id:"double-tap",label:"Double Tap",select:n=>n.double_tap,render:n=>mG(n)})}function KG(){return ai({id:"pass",label:"Pass",select:n=>n.pass,render:n=>_G(n)})}function qG(){return ai({id:"one-timer",label:"One-timer",select:n=>n.one_timer,render:n=>gG(n)})}function YG(){return{id:"flick",label:"Flick",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Cx(i.flick),i.flick?.is_last_flick?'Last Flick':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Cx(i.flick):""}}}function jG(){let n=null;return{id:"speed-flip",label:"Speed Flip",setup(e){n=new iG(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Ax(s.speed_flip),s.speed_flip?.is_last_speed_flip?'Last Speed Flip':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Ax(s.speed_flip):""}}}function ZG(){let n=null;return{id:"dodge",label:"Dodge",setup(e){n=new $4(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return W5(e.statsTimeline,e.replay)},renderStats(e,t){const i=new Map;for(const a of t.replay.players)i.set(a.id,{name:a.name,isTeamZero:a.isTeamZero,count:0});for(const a of ve(t.statsTimeline,"dodge")){const r=At(a.player),o=t.replay.players.find(c=>c.id===r)??null,l=i.get(r)??{name:o?.name??r,isTeamZero:a.is_team_0,count:0};l.count+=1,i.set(r,l)}const s=[...i.values()].filter(a=>a.count>0);return s.length===0?"":`
${[!0,!1].map(a=>{const r=s.filter(l=>l.isTeamZero===a);if(r.length===0)return"";const o=a?"Blue":"Orange";return`
+ `}const T_="subtr-actor:touch-color-modes-change",c$=[{title:"Team",mode:"team"},{title:"Intention",mode:"intention"},{title:"Hit strength",mode:"kind"},{title:"Height",mode:"height_band"},{title:"Surface",mode:"surface"},{title:"Dodge",mode:"dodge_state"},{title:"Flags",mode:"flag"}];function u$(n){return c$.find(e=>e.title===n)?.mode??"team"}function d$(n){return`#${n.toString(16).padStart(6,"0")}`}function JE(n,e){n.replaceChildren();const t=po(e),i=new Set(t),s=document.createElement("div");s.className="touch-color-legend-explainer";const a=document.createElement("span");a.textContent="Toggle sections to add or remove rings";const r=document.createElement("span");r.textContent="The outermost enabled ring sets the label tint",s.append(a,r),n.append(s);for(const o of _V){const l=u$(o.title),c=i.has(l),u=document.createElement("section");u.className="touch-color-legend-group",u.dataset.active=c?"true":"false";const d=document.createElement("button");d.type="button",d.className="touch-color-legend-heading",d.dataset.colorMode=l,d.dataset.active=c?"true":"false",d.textContent=o.title,d.addEventListener("click",()=>{const f=new Set(i);f.has(l)?f.delete(l):f.add(l);const p=pV.filter(g=>f.has(g));n.dispatchEvent(new CustomEvent(T_,{bubbles:!0,detail:{colorModes:p}})),JE(n,p)});const h=document.createElement("div");h.className="touch-color-legend-list";for(const f of o.entries){const p=document.createElement("div");p.className="touch-color-legend-item";const g=document.createElement("span");g.className="touch-color-legend-swatch",g.style.background=d$(f.color);const _=document.createElement("span");_.textContent=f.label,p.append(g,_),h.append(p)}u.append(d,h),n.append(u)}}function h$(n){let e=null,t=5,i="advancement",s=["team"],a=null,r=null,o=null,l=null,c=null;const u=new Set,d=["kind","height_band","surface","dodge_state"];return{id:"touch",label:"Touch",setup(g){e=new AV(g.player.sceneState,g.player.container,g.replay,g.statsTimeline,{mode:i,colorModes:s}),e.setDecaySeconds(t),c=_=>{if(!(_ instanceof CustomEvent))return;const m=_.detail?.colorModes;Array.isArray(m)&&p(m.filter(ad))},window.addEventListener(T_,c),h()},teardown(){c&&(window.removeEventListener(T_,c),c=null),e?.dispose(),e=null},onBeforeRender(g){e?.update(g.currentTime)},getTimelineEvents(g){return l4(g.statsTimeline,g.replay)},getConfig(){return{decaySeconds:t,overlayMode:i,overlayColorModes:s,breakdownClasses:f()}},applyConfig(g){if(g&&typeof g=="object"&&!Array.isArray(g)){const _=g;if(typeof _.decaySeconds=="number"&&Number.isFinite(_.decaySeconds)&&(t=Math.max(1,Math.min(10,_.decaySeconds)),e?.setDecaySeconds(t)),(_.overlayMode==="markers"||_.overlayMode==="advancement")&&(i=_.overlayMode,e?.setMode(i)),Array.isArray(_.overlayColorModes)?(s=po(_.overlayColorModes.filter(ad)),e?.setColorModes(s)):ad(_.overlayColorMode)&&(s=po(_.overlayColorMode),e?.setColorModes(s)),u.clear(),Array.isArray(_.breakdownClasses))for(const m of _.breakdownClasses)d.includes(m)&&u.add(m)}h(),n.rerenderCurrentState()},renderStats(g,_){const m=zt(_.statsFrameLookup,g);return m?si(m.players,v=>Tn(v.name,v.is_team_0,Hx(v.touch,{breakdownClasses:f()}),v.touch?.is_last_touch?'Last Touch':"")):""},renderFocusedPlayerStats(g,_,m){const v=wn(m,_,g);return v?Hx(v.touch,{breakdownClasses:f()}):""},renderSettings(){if(!a){a=document.createElement("div"),a.className="module-settings-card";const g=document.createElement("div");g.className="module-settings-header";const _=document.createElement("div"),m=document.createElement("p");m.className="module-settings-eyebrow",m.textContent="Touch markers";const v=document.createElement("h3");v.textContent="Touch decay",_.append(m,v),r=document.createElement("strong"),r.className="metric-readout",g.append(_,r);const y=document.createElement("label"),b=document.createElement("span");b.className="label",b.textContent="Keep each marker visible after the touch";const T=document.createElement("input");T.type="range",T.min="1",T.max="10",T.step="0.5",T.value=`${t}`,T.addEventListener("input",()=>{const H=Number(T.value);t=Number.isFinite(H)?Math.max(1,Math.min(10,H)):t,e?.setDecaySeconds(t),h(t),n.requestConfigSync?.()}),y.append(b,T);const x=document.createElement("div");x.className="module-settings-subgroup";const M=document.createElement("div");M.className="module-settings-header";const C=document.createElement("div"),w=document.createElement("p");w.className="module-settings-eyebrow",w.textContent="Overlay";const E=document.createElement("h3");E.textContent="Touch mode",C.append(w,E),o=document.createElement("strong"),o.className="metric-readout",M.append(C,o);const R=document.createElement("div");R.className="module-settings-options";for(const H of[{mode:"markers",label:"Markers"},{mode:"advancement",label:"Advancement"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="radio",oe.name="touch-overlay-mode",oe.dataset.overlayMode=H.mode,oe.addEventListener("change",()=>{oe.checked&&(i=H.mode,e?.setMode(i),h(),n.requestConfigSync?.())});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),R.append(ne)}x.append(M,R);const k=document.createElement("div");k.className="module-settings-subgroup";const O=document.createElement("div");O.className="module-settings-header";const D=document.createElement("div"),U=document.createElement("p");U.className="module-settings-eyebrow",U.textContent="Stat display";const F=document.createElement("h3");F.textContent="Touch breakdown",D.append(U,F),l=document.createElement("strong"),l.className="metric-readout",O.append(D,l);const W=document.createElement("div");W.className="module-settings-options";for(const H of[{className:"kind",label:"Kind"},{className:"height_band",label:"Height"},{className:"surface",label:"Surface"},{className:"dodge_state",label:"Dodge"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="checkbox",oe.dataset.breakdownClass=H.className,oe.addEventListener("change",()=>{oe.checked?u.add(H.className):u.delete(H.className),h(),n.rerenderCurrentState(),n.requestConfigSync?.()});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),W.append(ne)}k.append(O,W),a.append(g,y,x,k)}return h(),a}};function h(g){if(!a)return;const _=g??t,m=a.querySelector("input");m instanceof HTMLInputElement&&(m.value=`${_}`),r&&(r.textContent=`${_.toFixed(1)}s`);for(const v of a.querySelectorAll("input[data-overlay-mode]"))v.checked=v.dataset.overlayMode===i;o&&(o.textContent=i==="advancement"?"Advancement":"Markers");for(const v of a.querySelectorAll("input[data-breakdown-class]")){const y=v.dataset.breakdownClass;v.checked=y?u.has(y):!1}if(l){const v=f();l.textContent=v.length>0?v.map(y=>({kind:"Kind",height_band:"Height",surface:"Surface",dodge_state:"Dodge"})[y]).join(" + "):"Total only"}}function f(){return d.filter(g=>u.has(g))}function p(g){s=po(g),e?.setColorModes(s),h(),n.requestConfigSync?.()}}function f$(n,e=YE({refreshTimelineRanges:n.refreshTimelineRanges,rerenderCurrentState:n.rerenderCurrentState})){return{id:"boost",label:"Boost",setup(t){e.setup(t)},teardown(){e.teardown()},onBeforeRender(){},getTimelineRanges(t){return X4(t.statsTimeline,t.replay,e.getTimelineRangeOptions())},getConfig(){return e.getConfig()},applyConfig(t){e.applyConfig(t)},includeBoostPickupAnimationPickup(t){return e.includePickup(t)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>Tn(a.name,a.is_team_0,Bx(a.boost))):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?Bx(a.boost):""},renderSettings(t){return e.renderSettings(t,{showHeader:!0})}}}function p$(){return ai({id:"core",label:"Core",select:n=>n.core,render:n=>$G(n)})}function m$(){return ai({id:"backboard",label:"Backboard",select:n=>n.backboard,render:n=>WG(n),getTimelineEvents(n){return c4(n.statsTimeline,n.replay)}})}function _$(){let n=null;return{id:"ceiling-shot",label:"Ceiling Shot",setup(e){n=new Q5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Lx(s.ceiling_shot),s.ceiling_shot?.is_last_ceiling_shot?'Last Ceiling Shot':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Lx(s.ceiling_shot):""}}}function g$(){return{id:"wall-aerial",label:"Wall-to-Air Setup",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,kx(i.wall_aerial),i.wall_aerial?.is_last_wall_aerial?'Last Wall-to-Air Setup':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?kx(i.wall_aerial):""}}}function y$(){return{id:"wall-aerial-shot",label:"Wall Shot",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Dx(i.wall_aerial_shot),i.wall_aerial_shot?.is_last_wall_aerial_shot?'Last Wall Shot':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Dx(i.wall_aerial_shot):""}}}function v$(){return ai({id:"ball-carry",label:"Ball Carry",select:n=>n.ball_carry,render:n=>YG(n)})}function b$(){return ai({id:"air-dribble",label:"Air Dribble",select:n=>n.air_dribble,render:n=>jG(n)})}function x$(){return ai({id:"dodge-reset",label:"Dodge Refresh",select:n=>n.dodge_reset,render:n=>t$(n)})}function w$(){return ai({id:"flip-reset",label:"Flip Reset",select:n=>n.flip_reset,render:n=>n$(n)})}function S$(){return ai({id:"double-tap",label:"Double Tap",select:n=>n.double_tap,render:n=>XG(n)})}function T$(){return ai({id:"pass",label:"Pass",select:n=>n.pass,render:n=>KG(n)})}function M$(){return ai({id:"one-timer",label:"One-timer",select:n=>n.one_timer,render:n=>qG(n)})}function E$(){return{id:"flick",label:"Flick",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ox(i.flick),i.flick?.is_last_flick?'Last Flick':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ox(i.flick):""}}}function C$(){let n=null;return{id:"speed-flip",label:"Speed Flip",setup(e){n=new DG(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Fx(s.speed_flip),s.speed_flip?.is_last_speed_flip?'Last Speed Flip':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Fx(s.speed_flip):""}}}function A$(){let n=null;return{id:"dodge",label:"Dodge",setup(e){n=new xG(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return w4(e.statsTimeline,e.replay)},renderStats(e,t){const i=new Map;for(const a of t.replay.players)i.set(a.id,{name:a.name,isTeamZero:a.isTeamZero,count:0});for(const a of ve(t.statsTimeline,"dodge")){const r=At(a.player),o=t.replay.players.find(c=>c.id===r)??null,l=i.get(r)??{name:o?.name??r,isTeamZero:a.is_team_0,count:0};l.count+=1,i.set(r,l)}const s=[...i.values()].filter(a=>a.count>0);return s.length===0?"":`
${[!0,!1].map(a=>{const r=s.filter(l=>l.isTeamZero===a);if(r.length===0)return"";const o=a?"Blue":"Orange";return`

${o} team

${r.length} player${r.length===1?"":"s"} @@ -5907,7 +5972,7 @@ void main() {
${r.map(l=>Tn(l.name,l.isTeamZero,`
Events${l.count}
`)).join("")}
-
`}).join("")}
`},renderFocusedPlayerStats(e,t,i){return`
Events${ve(i.statsTimeline,"dodge").filter(a=>At(a.player)===e).length}
`}}}function JG(){return{id:"half-flip",label:"Half Flip",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Rx(i.half_flip),i.half_flip?.is_last_half_flip?'Last Half Flip':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Rx(i.half_flip):""}}}function QG(){return{id:"wavedash",label:"Wavedash",setup(){},teardown(){},onBeforeRender(){},getTimelineEvents(n){return K5(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Px(i.wavedash),i.wavedash?.is_last_wavedash?'Last Wavedash':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Px(i.wavedash):""}}}function e$(){return ai({id:"whiff",label:"Whiff",select:n=>n.whiff,render:n=>xG(n),getTimelineEvents(n){return J5(n.statsTimeline,n.replay)}})}function t$(n){let e=null,t=null;const i=new Set,s=["speed_band","height_band"];return{id:"movement",label:"Movement",setup(){a()},teardown(){},onBeforeRender(){},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const c=zt(l.statsFrameLookup,o);return c?si(c.players,u=>Tn(u.name,u.is_team_0,gx(u.movement,{breakdownClasses:r()}))):""},renderFocusedPlayerStats(o,l,c){const u=wn(c,l,o);return u?gx(u.movement,{breakdownClasses:r()}):""},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Movement breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";for(const h of[{className:"speed_band",label:"Speed band"},{className:"height_band",label:"Height band"}]){const f=document.createElement("label");f.className="toggle";const p=document.createElement("input");p.type="checkbox",p.dataset.breakdownClass=h.className,p.addEventListener("change",()=>{p.checked?i.add(h.className):i.delete(h.className),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const g=document.createElement("span");g.textContent=h.label,f.append(p,g),d.append(f)}e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=r();t.textContent=o.length>0?o.map(l=>({speed_band:"Speed band",height_band:"Height band"})[l]).join(" + "):"Total only"}}}function r(){return s.filter(o=>i.has(o))}}function n$(){return ai({id:"powerslide",label:"Powerslide",select:n=>n.powerslide,render:n=>bG(n),getTimelineEvents(n){return G5(n.statsTimeline,n.replay)}})}function i$(){return ai({id:"rotation",label:"Rotation",select:n=>n.rotation,render:n=>hG(n)})}function s$(){return ai({id:"demo",label:"Demo",select:n=>n.demo,render:n=>wG(n)})}function a$(){return ai({id:"bump",label:"Bump",select:n=>n.bump,render:n=>SG(n),getTimelineEvents(n){return q5(n.statsTimeline,n.replay)}})}function r$(){let n=null,e=1;return{id:OE,label:"Relative Positioning",setup(t){e=t.fieldScale,n=new PV(t.player.sceneState.replayRoot,t.replay,e)},teardown(){n?.dispose(),n=null},onBeforeRender(t){n?.update(t,e)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>{const r=w4(i.replay,At(a.player_id),t),o=x4[r];return Tn(a.name,a.is_team_0,wx(a.positioning),`${o}`)}):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?wx(a.positioning):""}}}function o$(){return{id:"absolute-positioning",label:"Absolute Positioning",setup(n){bx.acquire(n)},teardown(){bx.release()},onBeforeRender(){},getTimelineRanges(n){return b4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Sx(i.positioning))):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Sx(i.positioning):""}}}function l$(n,e={}){return[NG(),UG(),BG(),zG(),HG(),XG(),qG(),KG(),S4(n),T4(),M4(),E4(),C4(),r$(),o$(),i$(),ZG(),jG(),JG(),QG(),OG(n),e$(),YG(),$G(),WG(),GG(),FG(n,e.boostPickupFilters),VG(),t$(n),n$(),s$(),a$()]}const c$=new Set(["player_id","name","is_team_0"]),u$=["is_last_","time_since_last_","frames_since_last_"];function d$(n){return n===null||typeof n=="number"||typeof n=="string"||typeof n=="boolean"||Array.isArray(n)}function h$(n,e){let t=n;for(const i of e){if(!t||typeof t!="object"||Array.isArray(t))return;t=t[i]}return t}function f$(n){return n==null?"--":typeof n=="number"?Number.isFinite(n)?Number.isInteger(n)?`${n}`:`${Number(n.toFixed(3))}`:"--":typeof n=="boolean"?n?"true":"false":Array.isArray(n)?n.length===0?"[]":JSON.stringify(n):`${n}`}function p$(n,e){if(u$.some(a=>n.startsWith(a)))return!0;const t=n.match(/^last_(.+)_time$/),i=n.match(/^last_(.+)_frame$/),s=t?.[1]??i?.[1];return s?`is_last_${s}`in e||`time_since_last_${s}`in e||`frames_since_last_${s}`in e:!1}function y_(n,e,t,i){if(!n||typeof n!="object"||Array.isArray(n))return;const s=n;for(const[a,r]of Object.entries(s)){if(e==="player"&&t.length===0&&c$.has(a)||p$(a,s))continue;const o=[...t,a];if(d$(r)){const l=`${e}:${o.join(".")}`;i.push({id:l,label:o.join("."),category:o[0]??e,scope:e,path:o,read(c){return h$(c,o)},format:f$});continue}y_(r,e,o,i)}}function m$(n){const e=new Set;return n.filter(t=>e.has(t.id)?!1:(e.add(t.id),!0))}function _$(n,e){const t=[];return n&&y_(n,"player",[],t),e&&y_(e,"team",[],t),m$(t).sort((i,s)=>i.label.localeCompare(s.label))}function g$(){return _$(eE(),Yl())}function Jl(n){return g$()}function GE(n){return n.toLowerCase().replace(/[_/.-]+/g," ").replace(/\s+/g," ").trim()}function y$(n){return GE(n).split(" ").filter(Boolean)}function v$(n,e){const t=y$(e);if(t.length===0)return 0;const i=GE([n.scope,n.category,n.label,n.id,...n.path].join(" "));let s=0;for(const a of t){const r=i.indexOf(a);if(r<0)return null;s+=r}return s+i.length/1e3}function b$(n,e){return n.map((t,i)=>({definition:t,index:i,score:v$(t,e)})).filter(t=>t.score!==null).sort((t,i)=>t.score-i.score||t.index-i.index).map(t=>t.definition)}function ss(n){if(!Number.isFinite(n))return"--";const e=Math.floor(Math.max(0,n)/60),t=Math.max(0,n)-e*60;return`${e}:${t.toFixed(1).padStart(4,"0")}`}class x${constructor(e){this.options=e}statsWindows=new Map;nextStatsWindowId=1;getConfigs(){return[...this.statsWindows.values()].map(e=>({id:e.id,kind:e.kind,placement:this.options.readWindowPlacement(e.element),playerId:e.playerId,team:e.team,entries:e.entries.map(t=>({statId:t.statId,targetId:t.targetId}))}))}clear(){for(const e of this.statsWindows.values())e.element.remove();this.statsWindows.clear(),this.nextStatsWindowId=1}replaceFromConfig(e){this.clear();for(const t of e)this.create(t.kind,t)}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0,t={}){for(const i of this.statsWindows.values())t.preserveOpenPickers&&(i.pickerOpen||i.element.contains(document.activeElement))||this.renderStatsWindow(i,e)}create(e,t){const i=t?.id??`stats-${this.nextStatsWindowId++}`,s=Number.parseInt(i.replace(/^stats-/,""),10);Number.isFinite(s)&&(this.nextStatsWindowId=Math.max(this.nextStatsWindowId,s+1));const{x:a,y:r}=this.getStatsWindowDefaultPosition(),o=document.createElement("section");o.className="stats-window",o.dataset.windowId=i,o.style.setProperty("--window-x",`${a}px`),o.style.setProperty("--window-y",`${r}px`),t&&this.options.applyWindowPlacement(o,t.placement);const l=document.createElement("header");l.className="stats-window-header";const c=document.createElement("div");c.className="stats-window-actions";const u=document.createElement("button");if(u.type="button",u.className="stats-window-action",u.textContent="Hide",c.append(u),this.hasStatsWindowScopeSelector(e))l.classList.add("stats-window-header-actions-only"),l.append(c);else{const f=document.createElement("h2");f.textContent=this.getStatsWindowTitle(e),l.append(f,c)}const d=document.createElement("div");d.className="stats-window-body",o.append(l,d),this.options.layer.append(o);const h={id:i,kind:e,entries:t?.entries.map(f=>({key:`${i}:${f.statId}:${f.targetId??"scope"}`,statId:f.statId,targetId:f.targetId}))??[],playerId:t?.playerId??this.options.getReplayPlayer()?.replay.players[0]?.id??null,team:t?.team??"blue",pickerOpen:!1,query:"",element:o,body:d};return u.addEventListener("click",()=>{o.hidden=!0,this.options.requestConfigSync()}),this.statsWindows.set(i,h),t||this.options.bringWindowToFront(o),this.options.setLauncherOpen(!1),this.renderStatsWindow(h),this.options.requestConfigSync(),h}getStatById(e){return this.options.getStatRegistry().find(t=>t.id===e)??null}getCurrentStatsFrame(e){const t=this.options.getStatsFrameLookup();return t?zt(t,e):null}getTeamSnapshot(e,t){return t==="blue"?e.team_zero??null:e.team_one??null}getTeamLabel(e){return e==="blue"?"Blue":"Orange"}getPlayerTeamClass(e){const t=this.options.getReplayPlayer()?.replay.players.find(i=>i.id===e);return t?ta(t.isTeamZero):null}getTeamScopeClass(e){return ta(e==="blue")}appendGroupedPlayerOptions(e,t){const i=this.options.getReplayPlayer()?.replay.players??[];for(const s of["blue","orange"]){const a=i.filter(o=>o.isTeamZero===(s==="blue"));if(a.length===0)continue;const r=document.createElement("optgroup");r.label=`${this.getTeamLabel(s)} team`;for(const o of a)r.append(new Option(o.name,o.id,o.id===t,o.id===t));e.append(r)}}getStatsWindowScopeTeamClass(e){return e.kind==="player"?this.getPlayerTeamClass(e.playerId):e.kind==="team"?this.getTeamScopeClass(e.team??"blue"):null}getStatTargetTeamClass(e,t){return e.scope==="player"?this.getPlayerTeamClass(t):this.getTeamScopeClass(t==="orange"?"orange":"blue")}getStatsWindowTitle(e){switch(e){case"player":return"Player stats";case"team":return"Team stats";case"all-players":return"All players stats";case"all-teams":return"All teams stats";case"kickoff-overview":return"Kickoff details";case"goals-overview":return"Goal labels";case"ad-hoc":return"Ad hoc stats"}}hasStatsWindowScopeSelector(e){return e==="player"||e==="team"}hasStatsWindowStatPicker(e){return e!=="goals-overview"&&e!=="kickoff-overview"}getStatsWindowAllowedScope(e){switch(e){case"player":case"all-players":return"player";case"team":case"all-teams":return"team";case"kickoff-overview":return null;case"goals-overview":return null;case"ad-hoc":return null}}getStatsWindowDefaultPosition(){const e=this.statsWindows.size*18;return{x:Math.max(12,Math.min(window.innerWidth-360,96+e)),y:Math.max(64,Math.min(window.innerHeight-240,96+e))}}renderStatsWindow(e,t=this.options.getReplayPlayer()?.getState().frameIndex??0){const i=document.activeElement,s=i instanceof HTMLInputElement&&i.dataset.statsWindowSearch===e.id,a=s?i.selectionStart:null,r=s?i.selectionEnd:null,o=s?i.selectionDirection:null;if(e.body.replaceChildren(),this.renderStatsWindowScope(e),this.hasStatsWindowStatPicker(e.kind)&&(this.renderStatsWindowAddControl(e),this.renderStatsWindowPicker(e)),this.renderStatsWindowEntries(e,t),s){const l=e.body.querySelector(`input[data-stats-window-search="${e.id}"]`);l?.focus({preventScroll:!0}),l&&a!==null&&r!==null&&l.setSelectionRange(a,r,o??"none")}}renderStatsWindowScope(e){if(e.kind!=="player"&&e.kind!=="team")return;const t=document.createElement("div");t.className="stats-window-scope-row";const i=document.createElement("select");i.className="stats-window-scope-select";const s=this.getStatsWindowScopeTeamClass(e);s&&i.classList.add(s),i.setAttribute("aria-label",e.kind==="player"?"Player stats target":"Team stats target"),e.kind==="player"?(this.appendGroupedPlayerOptions(i,e.playerId),i.value=e.playerId??"",i.addEventListener("change",()=>{e.playerId=i.value||null,this.renderStatsWindow(e),this.options.requestConfigSync()})):(i.append(new Option("Blue","blue",e.team==="blue",e.team==="blue"),new Option("Orange","orange",e.team==="orange",e.team==="orange")),i.value=e.team??"blue",i.addEventListener("change",()=>{e.team=i.value==="orange"?"orange":"blue",this.renderStatsWindow(e),this.options.requestConfigSync()})),t.append(i),e.body.append(t)}renderStatsWindowAddControl(e){const t=document.createElement("button");if(t.type="button",t.className="stats-window-add-button",t.textContent="+",t.title="Add stat",t.setAttribute("aria-label","Add stat"),t.setAttribute("aria-expanded",String(e.pickerOpen)),this.activateButton(t,()=>{e.pickerOpen=!e.pickerOpen,this.renderStatsWindow(e)}),this.hasStatsWindowScopeSelector(e.kind)){e.body.querySelector(".stats-window-scope-row")?.append(t);return}const i=document.createElement("div");i.className="stats-window-toolbar",i.append(t),e.body.append(i)}activateButton(e,t){let i=!1;e.addEventListener("pointerdown",s=>{e.disabled||(i=!0,s.preventDefault(),t())}),e.addEventListener("click",()=>{if(i){i=!1;return}e.disabled||t()})}renderStatsWindowPicker(e){const t=document.createElement("div");if(t.className="stats-window-picker",t.hidden=!e.pickerOpen,t.hidden){e.body.append(t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=document.createElement("input");s.type="search",s.placeholder="Search stats",s.value=e.query,s.dataset.statsWindowSearch=e.id;const a=document.createElement("div");a.className="stats-window-picker-list",s.addEventListener("input",()=>{e.query=s.value,this.renderStatsWindowPickerList(e,a,i)}),this.renderStatsWindowPickerList(e,a,i),t.append(s,a),e.body.append(t)}renderStatsWindowPickerList(e,t,i){t.replaceChildren();const s=this.options.getStatRegistry(),a=i?s.filter(l=>l.scope===i):s,r=b$(a,e.query),o=new Map;for(const l of r){const c=o.get(l.category)??[];c.push(l),o.set(l.category,c)}for(const[l,c]of o){if(c.length<2)continue;const u=document.createElement("button");u.type="button",u.className="stats-window-picker-item",u.innerHTML=`Add all ${l}${c.length}`,this.activateButton(u,()=>{for(const d of c)this.addStatToWindow(e,d);this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(u)}for(const l of r){const c=document.createElement("button");c.type="button",c.className="stats-window-picker-item",c.innerHTML=`${l.label}${l.scope}`,c.disabled=e.kind!=="ad-hoc"&&e.entries.some(u=>u.statId===l.id),this.activateButton(c,()=>{this.addStatToWindow(e,l),this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(c)}if(r.length===0){const l=document.createElement("p");l.className="stat-window-empty",l.textContent=s.length===0?"No stats available.":"No matching stats.",t.append(l)}}addStatToWindow(e,t){const i=e.kind==="ad-hoc"?this.getDefaultAdHocTargetId(t):void 0;e.entries.some(s=>s.statId===t.id&&s.targetId===i)||e.entries.push({key:`${e.id}:${t.id}:${i??"scope"}`,statId:t.id,targetId:i})}getDefaultAdHocTargetId(e){return e.scope==="player"?this.options.getReplayPlayer()?.replay.players[0]?.id??"":"blue"}removeStatFromWindow(e,t){const i=e.entries.findIndex(s=>s.key===t);i>=0&&e.entries.splice(i,1)}renderStatsWindowEntries(e,t){if(e.kind==="goals-overview"){this.renderGoalLabelsOverview(e);return}if(e.kind==="kickoff-overview"){this.renderKickoffOverview(e,t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=e.entries.map(r=>({entry:r,definition:this.getStatById(r.statId)})).filter(r=>r.definition!==null&&(!i||r.definition.scope===i));if(s.length===0){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="No stats added.",e.body.append(r);return}const a=this.getCurrentStatsFrame(t);if(!a){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="Load a replay to show stats.",e.body.append(r);return}if(e.kind==="all-players"){this.renderAllPlayersStats(e,a,s);return}if(e.kind==="all-teams"){this.renderAllTeamsStats(e,a,s);return}if(e.kind==="player"){const r=e.playerId?a.players.find(o=>At(o.player_id)===e.playerId)??null:null;this.renderScopedStatList(e,r,s);return}if(e.kind==="team"){this.renderScopedStatList(e,this.getTeamSnapshot(a,e.team??"blue"),s);return}e.kind==="ad-hoc"&&this.renderAdHocStats(e,a,s)}renderGoalLabelsOverview(e){const t=this.options.getStatsTimeline(),i=this.options.getReplayPlayer()?.replay??null;if(!t||!i){this.appendStatsWindowEmpty(e,"Load a replay to show goal labels.");return}const s=[...ve(t,"goal_context")].sort((o,l)=>o.time-l.time),a=s.map((o,l)=>l);if(a.length===0){this.appendStatsWindowEmpty(e,"No goals loaded.");return}const r=document.createElement("div");r.className="goal-label-list";for(const o of a){const l=s[o]??null,c=[...l?.tags??[]].sort((M,C)=>M.kind.localeCompare(C.kind)||C.metadata.confidence-M.metadata.confidence),u=l?.time??0,d=l?.scorer??null,h=d?At(d):null,f=d?i.players.find(M=>M.id===h)?.name??h:"Unknown scorer",p=l?.scoring_team_is_team_0??null,g=document.createElement("section");g.className="goal-label-item",p!==null&&g.classList.add(ta(p));const _=document.createElement("header"),m=document.createElement("h3");m.textContent=`Goal ${o+1}`;const v=document.createElement("span");v.textContent=`${ss(u)} · ${f}`,_.append(m,v);const y=document.createElement("div");if(y.className="goal-label-tags",c.length===0){const M=document.createElement("span");M.className="goal-label-tag goal-label-tag-empty",M.textContent="Unlabeled",y.append(M)}else for(const M of c){const C=document.createElement("span");C.className="goal-label-tag";const w=M5(M);C.textContent=`${Ci(M.kind)} ${Math.round(M.metadata.confidence*100)}%${w?` - ${w}`:""}`,y.append(C)}const b=document.createElement("div");b.className="goal-label-actions";const T=document.createElement("button");T.type="button",T.className="goal-label-watch",T.textContent="Watch",T.addEventListener("click",()=>{this.options.watchGoalReplay(u,h)});const x=document.createElement("button");x.type="button",x.textContent="Cue",x.addEventListener("click",()=>{this.options.cueGoalReplay(u)}),b.append(T,x),g.append(_,y,b),r.append(g)}e.body.append(r)}renderKickoffOverview(e,t){const i=this.options.getStatsTimeline(),s=this.options.getReplayPlayer()?.replay??null;if(!i||!s){this.appendStatsWindowEmpty(e,"Load a replay to show kickoff details.");return}const a=this.getClosestKickoffEvent(i,t);if(!a){this.appendStatsWindowEmpty(e,"No kickoff events loaded.");return}const r=a.payload.payload,o=document.createElement("section");o.className="kickoff-overview";const l=document.createElement("header");l.className="kickoff-overview-hero";const c=document.createElement("div"),u=document.createElement("h3");u.textContent=this.formatKickoffTitle(a);const d=document.createElement("span");d.textContent=`Nearest kickoff · resolved at ${ss(r.end_time)}`,c.append(u,d);const h=document.createElement("strong"),f=this.teamClassFromNullable(r.winning_team_is_team_0);h.className="kickoff-overview-victor",f&&h.classList.add(f),h.textContent=this.formatOutcome(r),l.append(c,h);const p=document.createElement("div");p.className="kickoff-overview-summary",p.append(this.renderKickoffMetric("Win strength",`${this.formatNullableNumber(r.win_strength,2)} · ${this.formatKickoffLabelValue("kickoff_win_strength",r.win_strength_band)}`),this.renderKickoffMetric("First touch",this.formatFirstTouch(r)),this.renderKickoffMetric("Advantage",this.formatAdvantage(r)),this.renderKickoffMetric("Contested",this.formatContested(r)));const g=document.createElement("div");g.className="kickoff-detail-grid",g.append(this.renderKickoffDetail("Kickoff start",ss(r.start_time)),this.renderKickoffDetail("Movement start",ss(r.movement_start_time)),this.renderKickoffDetail("Live action",r.live_action_start_time===null?"--":ss(r.live_action_start_time)),this.renderKickoffDetail("First touch",r.first_touch_time===null?"--":ss(r.first_touch_time)),this.renderKickoffDetail("Resolution",ss(r.end_time)),this.renderKickoffDetail("After first touch",this.formatSeconds(r.advantage_seconds_after_first_touch)));const _=document.createElement("div");_.className="kickoff-strategy-list",_.append(this.renderKickoffTeamStrategy("Blue",r.team_zero_taker,r.team_zero_non_takers),this.renderKickoffTeamStrategy("Orange",r.team_one_taker,r.team_one_non_takers)),o.append(l,p,g,_),e.body.append(o)}getClosestKickoffEvent(e,t){return jl(e).filter(s=>s.payload.kind==="kickoff").sort((s,a)=>{const r=this.kickoffFrameDistance(s.payload.payload,t),o=this.kickoffFrameDistance(a.payload.payload,t);return r!==o?r-o:s.payload.payload.start_frame-a.payload.payload.start_frame})[0]??null}kickoffFrameDistance(e,t){return t>=e.start_frame&&t<=e.end_frame?0:Math.min(Math.abs(t-e.start_frame),Math.abs(t-e.end_frame))}renderKickoffMetric(e,t){const i=document.createElement("div");i.className="kickoff-metric";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffDetail(e,t){const i=document.createElement("div");i.className="kickoff-detail-row";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffTeamStrategy(e,t,i){const s=document.createElement("section");s.className=`kickoff-strategy-team ${e==="Blue"?"team-blue":"team-orange"}`;const a=document.createElement("h4");a.textContent=e,s.append(a);const r=document.createElement("p");if(r.className="kickoff-strategy-line",r.textContent=t?`${this.getPlayerName(t.player)}: ${this.formatKickoffLabelValue("kickoff_approach",t.approach)} from ${this.formatKickoffLabelValue("kickoff_spawn",t.spawn_position)} (${this.formatKickoffLabelValue("taker_outcome",t.outcome)}, ${this.formatSeconds(t.time_to_ball)})`:"No taker detected",s.append(r),i.length>0){const o=document.createElement("ul");o.className="kickoff-support-list";for(const l of i){const c=document.createElement("li");c.textContent=`${this.getPlayerName(l.player)}: ${this.formatKickoffLabelValue("support_behavior",l.support_behavior)} from ${this.formatKickoffLabelValue("kickoff_spawn",l.spawn_position)}`,o.append(c)}s.append(o)}return s}formatOutcome(e){return e.winning_team_is_team_0===!0?"Blue wins":e.winning_team_is_team_0===!1?"Orange wins":e.outcome==="neutral"?"Neutral":"Unknown"}formatFirstTouch(e){if(!e.first_touch_player)return"--";const t=e.first_touch_team_is_team_0===!0?"Blue":e.first_touch_team_is_team_0===!1?"Orange":"Unknown",i=e.first_touch_time===null?"--":ss(e.first_touch_time);return`${t} · ${this.getPlayerName(e.first_touch_player)} · ${i}`}formatAdvantage(e){if(e.advantage==="no_advantage")return"No advantage";const t=e.advantage_team_is_team_0===!0?"Blue":e.advantage_team_is_team_0===!1?"Orange":"Unknown",i=e.advantage.replace(/^team_(zero|one)_/,""),s=e.advantage_player?` · ${this.getPlayerName(e.advantage_player)}`:"",a=e.advantage_time===null?"":` · ${ss(e.advantage_time)}`;return`${t} ${this.formatKickoffLabelValue("kickoff_advantage",i)}${s}${a}`}formatContested(e){return e.kickoff_possession_outcome==="contested"?"Yes":e.kickoff_possession_team_is_team_0===!0?`No · Blue ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:e.kickoff_possession_team_is_team_0===!1?`No · Orange ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:`No · ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`}formatPossessionOutcome(e){return e.endsWith("_advantage")?"advantage":e.endsWith("_possession")?"possession":this.formatKickoffLabelValue("kickoff_possession_outcome",e)}formatKickoffType(e){return this.formatKickoffLabelValue("kickoff_type",e)}formatKickoffTitle(e){const t=e.payload.payload,i=this.formatKickoffDirection(t.kickoff_direction),s=[this.formatKickoffType(t.kickoff_type),i].filter(Boolean).join(" ");return[e.meta.label,s].filter(Boolean).join(" · ")}formatKickoffDirection(e){return e==="unknown"?"":`(${this.formatKickoffLabelValue("kickoff_direction",e)})`}formatNullableNumber(e,t){return e===null||!Number.isFinite(e)?"--":e.toFixed(t)}formatSeconds(e){return e===null||!Number.isFinite(e)?"--":`${e.toFixed(2)}s`}formatLabel(e){return e.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_").replaceAll("_"," ").replace(/\b\w/g,t=>t.toUpperCase())}formatKickoffLabelValue(e,t){const i=t.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_");return e==="kickoff_advantage"?this.formatLabel(i.replace(/^blue_/,"").replace(/^orange_/,"")):e==="kickoff_possession_outcome"?this.formatLabel(i.replace(/^blue_/,"Blue ").replace(/^orange_/,"Orange ")):this.formatLabel(i)}teamClassFromNullable(e){return e===null?null:ta(e)}getPlayerName(e){const t=At(e);return this.options.getReplayPlayer()?.replay.players.find(i=>i.id===t)?.name??t}appendStatsWindowEmpty(e,t){const i=document.createElement("p");i.className="stat-window-empty",i.textContent=t,e.body.append(i)}renderScopedStatList(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i)s.append(this.renderStatRow(e,a,r,t?r.format(r.read(t)):"--"));e.body.append(s)}renderAllPlayersStats(e,t,i){const s=document.createElement("div");s.className="stats-window-team-list";for(const a of["blue","orange"]){const r=t.players.filter(h=>h.is_team_0===(a==="blue"));if(r.length===0)continue;const o=document.createElement("section");o.className=`stats-window-team-group ${this.getTeamScopeClass(a)}`;const l=document.createElement("header");l.className="stats-window-team-header";const c=document.createElement("h3");c.textContent=`${this.getTeamLabel(a)} team`;const u=document.createElement("span");u.textContent=`${r.length} player${r.length===1?"":"s"}`,l.append(c,u),o.append(l);const d=document.createElement("div");d.className="stats-window-entity-list";for(const h of r){const f=document.createElement("section");f.className=`stats-window-entity ${ta(h.is_team_0)}`;const p=document.createElement("h4");p.className="stats-window-entity-title",p.textContent=h.name,f.append(p);for(const{entry:g,definition:_}of i)f.append(this.renderStatRow(e,g,_,_.format(_.read(h))));d.append(f)}o.append(d),s.append(o)}e.body.append(s)}renderAllTeamsStats(e,t,i){const s=document.createElement("div");s.className="stats-window-entity-list";for(const a of["blue","orange"]){const r=this.getTeamSnapshot(t,a),o=document.createElement("section");o.className=`stats-window-entity ${this.getTeamScopeClass(a)}`;const l=document.createElement("h3");l.className="stats-window-entity-title",l.textContent=this.getTeamLabel(a),o.append(l);for(const{entry:c,definition:u}of i)o.append(this.renderStatRow(e,c,u,r?u.format(u.read(r)):"--"));s.append(o)}e.body.append(s)}renderAdHocStats(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i){const o=this.getAdHocTarget(t,r,a.targetId);s.append(this.renderStatRow(e,a,r,o?r.format(r.read(o)):"--"))}e.body.append(s)}getAdHocTarget(e,t,i){return t.scope==="player"?e.players.find(s=>At(s.player_id)===i)??e.players[0]??null:this.getTeamSnapshot(e,i==="orange"?"orange":"blue")}renderStatRow(e,t,i,s){const a=document.createElement("div");a.className="stats-window-stat-row";const r=document.createElement("span");if(r.className="stats-window-stat-name",r.textContent=i.label,e.kind==="ad-hoc"){const c=document.createElement("select");c.className="stats-window-stat-target";const u=this.getStatTargetTeamClass(i,t.targetId);u&&c.classList.add(u),i.scope==="player"?this.appendGroupedPlayerOptions(c,t.targetId):c.append(new Option("Blue","blue",t.targetId==="blue",t.targetId==="blue"),new Option("Orange","orange",t.targetId==="orange",t.targetId==="orange")),c.value=t.targetId??"",c.addEventListener("change",()=>{const d=c.value;if(e.entries.some(f=>f!==t&&f.statId===t.statId&&f.targetId===d)){this.renderStatsWindow(e);return}const h=e.entries.findIndex(f=>f.key===t.key);h>=0&&(e.entries[h]={key:`${e.id}:${t.statId}:${d}`,statId:t.statId,targetId:d}),this.renderStatsWindow(e),this.options.requestConfigSync()}),r.append(" ",c)}const o=document.createElement("span");o.className="stats-window-stat-value",o.textContent=s;const l=document.createElement("button");return l.type="button",l.className="stats-window-stat-remove",l.textContent="x",l.addEventListener("click",()=>{this.removeStatFromWindow(e,t.key),this.renderStatsWindow(e),this.options.requestConfigSync()}),a.append(r,o,l),a}}function w$(n){return new x$(n)}const S$=new Set(["module:dodge","module:touch","module:powerslide"]),T$=["stats-stream:"],ih=["#3b82f6","#06b6d4","#22c55e","#a855f7","#f97316","#ef4444","#f59e0b","#ec4899"],af="#d1d9e0",Gg=ih[0],$g=ih[4],M$=[{id:"core",label:"Shots, saves, assists",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="shot"||e.kind==="save"||e.kind==="assist")}},{id:"demo",label:"Demos",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="demo")}}],E$=[];function $E(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function WE(n){if(typeof n=="string"&&n.length>0)return n;if(!$E(n))return null;const[e,t]=Object.entries(n)[0]??[];return!e||t==null?null:typeof t=="string"||typeof t=="number"?`${e}:${t}`:`${e}:${JSON.stringify(t)}`}function XE(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>e.slice(0,1).toUpperCase()).join("").slice(0,3)||"E"}function C$(n){if(typeof n!="number"||!Number.isFinite(n))return null;const e=Math.abs(n)<1?2:1;return`${n.toFixed(e).replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}s`}function $i(n){return typeof n!="string"||n.length===0?null:n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function A$(n){return n==="team_zero_side"?"Blue side":n==="team_one_side"?"Orange side":n==="neutral"?"Neutral zone":$i(n)}function R$(n){const e=$i(n);return e?`${e.toLowerCase()} third`:null}function P$(n){return n==="team_zero_third"?"Blue third":n==="team_one_third"?"Orange third":n==="neutral_third"?"Neutral third":$i(n)}function I$(n){return n==="team_zero"?"Blue":n==="team_one"?"Orange":n==="neutral"?"Neutral":$i(n)}function ad(n){return $E(n.payload.payload)?n.payload.payload:{}}function KE(n){return n===!0?Gg:n===!1?$g:null}function L$(n){return n==="team_zero_side"?Gg:n==="team_one_side"?$g:n==="neutral"?af:null}function D$(n){return n==="team_zero"?Gg:n==="team_one"?$g:n==="neutral"?af:null}function k$(n){return typeof n=="boolean"?KE(n):null}const O$={ball_half(n){return L$(ad(n).field_half)},possession(n){return D$(ad(n).possession_state)},player_possession(n){return k$(ad(n).is_team_0)}};function qE(n,e,t){return O$[n]?.(e)??KE(t)??af}function ui(n){return n.filter(e=>!!e).join(" | ")}function F$({event:n,playerName:e,streamLabel:t,teamLabel:i}){const s=ad(n),a=C$(s.duration);if(n.payload.kind==="ball_half"){const r=A$(s.field_half),o=s.active===!1?"Ball half inactive":r?`Ball on ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="ball_third"){const r=P$(s.field_third),o=s.active===!1?"Ball third inactive":r?`Ball in ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="territorial_pressure"){const r=$i(s.end_reason),o=`${i??""} territorial pressure`.trim();return ui([r?`${o} ended: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="possession"){const r=I$(s.possession_state),o=R$(s.field_third),l=r?`${r} possession`:t;return ui([l,o,a])}if(n.payload.kind==="controlled_play"){const r=e?`${e} controlled play`:t;return ui([r,a])}if(n.payload.kind==="ball_carry"){const r=e?`${e} ${t.toLowerCase()}`:t;return ui([r,a])}if(n.payload.kind==="player_activity"){const r=$i(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="field_third"){const r=$i(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} third`:o,a])}if(n.payload.kind==="field_half"){const r=$i(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} half`:o,a])}if(n.payload.kind==="ball_depth"){const r=$i(s.state),o=e?`${e} ball depth`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="depth_role"){const r=$i(s.state),o=e?`${e} depth role`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="shadow_defense"){const r=e?`${e} shadow defense`:t;return ui([r,a])}if(n.payload.kind==="rotation_role"){const r=$i(s.state),o=e?`${e} rotation`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}return e?`${e} ${t.toLowerCase()}`:t}function N$(n,e,t){const i=Ci(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{const o=a.meta.timing.type==="moment"?{time:a.meta.timing.time,frame:a.meta.timing.frame}:{time:a.meta.timing.end_time,frame:a.meta.timing.end_frame},l=WE(a.meta.primary_player),c=l?s.get(l)??l:null,u=a.meta.team_is_team_0??null,d=u==null?null:u?"Blue":"Orange",h=a.meta.id||`${e}:${o.frame??o.time}:${r}`,f=qE(e,a,u);return[{id:`stats-stream:${h}`,time:n.replay.frames[o.frame??-1]?.time??o.time,frame:o.frame,kind:e,label:F$({event:a,playerName:c,streamLabel:i,teamLabel:d}),shortLabel:XE(e),playerId:l,playerName:c,isTeamZero:u,color:f}]})}function U$(n,e,t){const i=Ci(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{if(a.meta.timing.type!=="span")return[];const o={startTime:a.meta.timing.start_time,endTime:a.meta.timing.end_time,startFrame:a.meta.timing.start_frame,endFrame:a.meta.timing.end_frame},l=a.meta.team_is_team_0??null,c=l==null?null:l?"Blue":"Orange",u=WE(a.meta.primary_player),d=u?s.get(u)??u:null,h=qE(e,a,l),f=a.meta.id||`${e}:${o.startFrame??o.startTime}:${o.endFrame??o.endTime}:${r}`,p=d?`${d} ${i.toLowerCase()}`:c?`${c} ${i.toLowerCase()}`:i;let g=`stats-stream:${e}`,_=i;return a.meta.scope==="player"&&u?(g=`stats-stream:${e}:player:${u}`,_=d?`${d} ${i.toLowerCase()}`:i):a.meta.scope==="team"&&l!=null&&(g=`stats-stream:${e}:team:${l?"0":"1"}`,_=c?`${c} ${i.toLowerCase()}`:i),[{id:`stats-stream:${f}`,startTime:n.replay.frames[o.startFrame??-1]?.time??o.startTime,endTime:Math.max(n.replay.frames[o.startFrame??-1]?.time??o.startTime,n.replay.frames[o.endFrame??-1]?.time??o.endTime),lane:g,laneLabel:_,label:p,shortLabel:XE(e),isTeamZero:l,color:h}]}).sort((a,r)=>a.startTime!==r.startTime?a.startTime-r.startTime:(a.id??"").localeCompare(r.id??""))}function B$(n,e,t,i){return[...new Set([...FT,...jl(n.statsTimeline).map(a=>a.meta.stream)])].flatMap(a=>{const r=jl(n.statsTimeline).filter(u=>u.meta.stream===a);if(i.has(a)&&r.length>0)return[];const o=r.some(u=>u.meta.timing.type==="span"),l=o?U$(n,a,r):[],c=N$(n,a,r);return[{id:`stats-stream:${a}`,playlistId:`stats-stream:${a}`,timelineKey:`stats-stream:${a}`,timelineId:`stats-stream:${a}`,group:"Event streams",label:Ci(a),count:o?l.length:c.length,active:e.has(`stats-stream:${a}`),buildTimelineEvents(){return o?[]:c},buildPlaylistEvents(){return c},buildTimelineRanges:o?()=>l:void 0,setActive(u){t(`stats-stream:${a}`,u)}}]})}function z$(n){return new Set([...n.filter(e=>e.getTimelineEvents).map(e=>e.id),...CE])}function H$(){return[...CE].sort((n,e)=>Ci(n).localeCompare(Ci(e)))}function V$({ctx:n,modules:e,activeTimelineEventSourceIds:t,activeMechanicTimelineKinds:i,toggleEventSource:s,setMechanicTimelineKind:a}){if(!n)return[];const r=[];for(const o of M$){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`replay:${o.id}`,timelineKey:`events:${o.id}`,timelineId:`events:${o.id}`,group:"Replay",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of e.filter(l=>l.getTimelineEvents)){const l=o.getTimelineEvents?.(n)??[],c=l.length;r.push({id:o.id,playlistId:`module:${o.id}`,timelineKey:`module:${o.id}`,timelineId:`module:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of E$){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`extra:${o.id}`,timelineKey:`extra:${o.id}`,timelineId:`extra:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}r.push(...B$(n,t,s,z$(e)));for(const o of H$()){const l=EE[o](n.statsTimeline,n.replay),c=l.length;r.push({id:`mechanic:${o}`,playlistId:`mechanic:${o}`,timelineKey:`mechanic:${o}`,timelineId:`mechanic:${o}`,group:"Event types",label:Ci(o),count:c,active:i.has(o),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){a(o,u)}})}return r.sort((o,l)=>o.label.localeCompare(l.label))}function G$(n,e){if(!n)return[];const t=[{id:"replay:goals",group:"Replay",label:"Goals",events:n.replay.timelineEvents.filter(s=>s.kind==="goal")}],i=e.map(s=>({id:s.playlistId,group:s.group,label:s.label,events:s.buildPlaylistEvents()}));return[...t,...i]}function v_(n,e){const t=n.map(i=>i.id);return e===null?new Set(t.filter(i=>!S$.has(i)&&!T$.some(s=>i.startsWith(s)))):new Set(t.filter(i=>e.has(i)))}function $$(n,e){const t=n.playerId??null,i=t?e.findIndex(s=>s.id===t):-1;return i>=0?ih[i%ih.length]:n.color??af}function W$({sources:n,activeSourceIds:e,replayPlayers:t}){const i=v_(n,e);return n.filter(s=>i.has(s.id)).flatMap(s=>s.events.map((a,r)=>({key:`${s.id}:${a.id??`${a.kind}:${a.time}:${r}`}`,sourceId:s.id,sourceLabel:s.label,event:a,color:$$(a,t)}))).sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:(s.event.label??s.sourceLabel).localeCompare(a.event.label??a.sourceLabel))}class X${constructor(e){this.options=e}getSources(e=this.options.getContext()){return V$({ctx:e,modules:this.options.modules,activeTimelineEventSourceIds:this.options.getActiveTimelineEventSourceIds(),activeMechanicTimelineKinds:this.options.getActiveMechanicTimelineKinds(),toggleEventSource:this.options.toggleEventSource,setMechanicTimelineKind:this.options.setMechanicTimelineKind})}countVisibleSources(e){return e.replay.timelineEvents.filter(i=>i.kind==="goal").length+this.getSources(e).filter(i=>i.active).reduce((i,s)=>i+s.count,0)}render(){const{body:e}=this.options;e.replaceChildren();const t=this.getSources();if(t.length===0){const d=document.createElement("p");d.className="stat-window-empty",d.textContent="No events loaded.",e.append(d);return}const i=document.createElement("div");i.className="mechanics-actions";const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.addEventListener("click",()=>{for(const d of t)d.setActive(!0);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const a=document.createElement("span");a.textContent="All events";const r=document.createElement("strong");r.textContent=`${t.length}`,s.append(a,r);const o=document.createElement("button");o.type="button",o.className="module-summary-item",o.addEventListener("click",()=>{for(const d of t)d.setActive(!1);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const l=document.createElement("span");l.textContent="No events";const c=document.createElement("strong");c.textContent="Off",o.append(l,c),i.append(s,o),e.append(i);const u=this.renderSourceList(t);u&&e.append(u)}renderSourceList(e){if(e.length===0)return null;const t=document.createElement("div");t.className="module-list mechanics-list mechanics-event-list",t.style.setProperty("--event-source-columns",`${K$(e.length)}`);for(const i of e){const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.dataset.active=i.active?"true":"false",s.setAttribute("aria-pressed",i.active?"true":"false"),s.addEventListener("click",()=>{i.setActive(!i.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderTimelineEventCount()});const a=document.createElement("span");a.textContent=i.label;const r=document.createElement("strong");r.textContent=`${i.active?"On":"Off"} ${i.count}`,s.append(a,r),t.append(s)}return t}}function K$(n){return window.innerWidth<640?1:window.innerWidth<900?n>=7?2:1:n>=13?3:n>=7?2:1}function q$(n){return new X$(n)}const Y$=new Set(["ceiling-shot","fifty-fifty","ball_half",OE,"absolute-positioning","dodge","speed-flip","touch"]),kx="touch";class j${constructor(e){this.options=e}renderSummary(){const{summary:e}=this.options.elements;e.replaceChildren();const t=this.options.getTimelineSources(),i=t.map(o=>this.renderTimelineSourceToggle(o)),s=[],a=[],r=this.options.getContext();for(const o of this.options.modules){const l=Y$.has(o.id);!o.getTimelineEvents&&!o.getTimelineRanges&&!l||(t.length===0&&o.getTimelineEvents&&i.push(this.renderCapabilityToggle(o.id,rm(o,"events"),"events")),o.getTimelineRanges&&s.push(this.renderCapabilityToggle(o.id,rm(o,"ranges"),"ranges",r?o.getTimelineRanges(r).length:void 0)),l&&a.push(this.renderCapabilityToggle(o.id,rm(o,"effects"),"effects")))}a.push(this.renderBoostPickupAnimationToggle()),e.append(am("Timeline markers",i),am("Timeline ranges",s),am("In-game visualizations",a))}renderSettings(){const{settings:e}=this.options.elements;e.replaceChildren();const t=this.options.getContext(),i=this.options.getActiveModules().filter(s=>s.id!=="boost"&&s.id!==kx).map(s=>s.renderSettings?.(t)??null).filter(s=>s instanceof HTMLElement);if(i.length===0){e.hidden=!0,this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow();return}e.hidden=!1,e.append(...i),this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow()}renderBoostPickupAnimationToggle(){const e=this.options.getBoostPickupAnimationEnabled(),t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e?"true":"false",t.setAttribute("aria-pressed",e?"true":"false"),t.addEventListener("click",this.options.toggleBoostPickupAnimation);const i=document.createElement("span");i.textContent="Boost pickup animation";const s=document.createElement("strong");return s.textContent=e?"On":"Off",t.append(i,s),t}renderCapabilityToggle(e,t,i,s){const r=this.options.getActiveCapabilityIds(i).has(e),o=document.createElement("button");o.type="button",o.className="module-summary-item",o.dataset.active=r?"true":"false",o.setAttribute("aria-pressed",r?"true":"false"),o.addEventListener("click",()=>{this.options.toggleCapability(e,i,!this.options.getActiveCapabilityIds(i).has(e))});const l=document.createElement("span");l.textContent=t;const c=document.createElement("strong");return c.textContent=Ox(r,s),o.append(l,c),o}renderTimelineSourceToggle(e){const t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e.active?"true":"false",t.setAttribute("aria-pressed",e.active?"true":"false"),t.addEventListener("click",()=>{e.setActive(!e.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync(),this.renderSummary()});const i=document.createElement("span");i.textContent=Z$(e);const s=document.createElement("strong");return s.textContent=Ox(e.active,e.count),t.append(i,s),t}renderBoostPickupFiltersWindow(){const e=this.options.getContext(),t=this.options.boostPickupFilters.renderSettings(e,{showHeader:!1});this.options.elements.boostPickupFilters.replaceChildren(t)}renderTouchControlsWindow(){const e=this.options.getContext(),i=this.options.modules.find(s=>s.id===kx)?.renderSettings?.(e)??null;this.options.elements.touchControls.replaceChildren(),i instanceof HTMLElement&&this.options.elements.touchControls.append(i)}}function am(n,e){const t=document.createElement("section");t.className="module-summary-group";const i=document.createElement("h3");i.textContent=n;const s=document.createElement("div");return s.className="module-list",s.append(...e),t.append(i,s),t}function Ox(n,e){const t=n?"On":"Off";return e==null?t:`${t} ${e}`}function Z$(n){return n.group==="Replay"?n.label:`${n.label} events`}function rm(n,e){const t={"absolute-positioning:ranges":"Position zones","backboard:events":"Backboard","ball-carry:events":"Ball carry","boost:ranges":"Boost pickup timeline","bump:events":"Bump","ceiling-shot:events":"Ceiling shot","demo:events":"Demo","dodge-reset:events":"Dodge refresh","double-tap:events":"Double tap","fifty-fifty:events":"50/50","fifty-fifty:ranges":"50/50","dodge:events":"Dodge","half-flip:events":"Half flip","possession:ranges":"Possession","powerslide:events":"Powerslide","powerslide:ranges":"Powerslide","ball_half:ranges":"Half control","ball_third:ranges":"Third control","rush:ranges":"Rush","speed-flip:events":"Speed flip","touch:events":"Touch","wavedash:events":"Wavedash"},i={"absolute-positioning":"Position zones","ceiling-shot":"Ceiling shot labels","fifty-fifty":"50/50 labels",dodge:"Dodge impulse arrows",ball_half:"Half control","relative-positioning":"Player roles","speed-flip":"Speed flip labels",touch:"Touch labels"};return e==="effects"?i[n.id]??n.label:t[`${n.id}:${e}`]??`${n.label} timeline`}function J$(n){return new j$(n)}var gn=Uint8Array,fi=Uint16Array,Wg=Int32Array,rf=new gn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),of=new gn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),b_=new gn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),YE=function(n,e){for(var t=new fi(31),i=0;i<31;++i)t[i]=e+=1<>1|(Ut&21845)<<1;Zs=(Zs&52428)>>2|(Zs&13107)<<2,Zs=(Zs&61680)>>4|(Zs&3855)<<4,w_[Ut]=((Zs&65280)>>8|(Zs&255)<<8)>>1}var hs=(function(n,e,t){for(var i=n.length,s=0,a=new fi(e);s>l]=c}else for(o=new fi(i),s=0;s>15-n[s]);return o}),da=new gn(288);for(var Ut=0;Ut<144;++Ut)da[Ut]=8;for(var Ut=144;Ut<256;++Ut)da[Ut]=9;for(var Ut=256;Ut<280;++Ut)da[Ut]=7;for(var Ut=280;Ut<288;++Ut)da[Ut]=8;var Ql=new gn(32);for(var Ut=0;Ut<32;++Ut)Ql[Ut]=5;var eW=hs(da,9,0),tW=hs(da,9,1),nW=hs(Ql,5,0),iW=hs(Ql,5,1),om=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Fi=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},lm=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},Xg=function(n){return(n+7)/8|0},lf=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new gn(n.subarray(e,t))},sW=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],os=function(n,e,t){var i=new Error(e||sW[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,os),!t)throw i;return i},aW=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new gn(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new gn(s*3));var c=function(xe){var Ae=t.length;if(xe>Ae){var L=new gn(Math.max(Ae*2,xe));L.set(t),t=L}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Fi(n,d,1);var v=Fi(n,d+1,3);if(d+=3,v)if(v==1)f=tW,p=iW,g=9,_=5;else if(v==2){var x=Fi(n,d,31)+257,M=Fi(n,d+10,15)+4,C=x+Fi(n,d+5,31)+1;d+=14;for(var w=new gn(C),E=new gn(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Fi(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Fi(n,d,7),d+=3):y==18&&(W=11+Fi(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ne=w.subarray(x);g=om(H),_=om(ne),f=hs(H,g,1),p=hs(ne,_,1)}else os(1);else{var y=Xg(d)+4,b=n[y-4]|n[y-3]<<8,T=y+b;if(T>s){l&&os(0);break}o&&c(h+b),t.set(n.subarray(y,T),h),e.b=h+=b,e.p=d=T*8,e.f=u;continue}if(d>m){l&&os(0);break}}o&&c(h+131072);for(var oe=(1<>4;if(d+=F&15,d>m){l&&os(0);break}if(F||os(2),De<256)t[h++]=De;else if(De==256){Ie=d,f=null;break}else{var Xe=De-254;if(De>264){var R=De-257,ke=rf[R];Xe=Fi(n,d,(1<>4;Z||os(3),d+=Z&15;var ne=Q$[se];if(se>3){var ke=of[se];ne+=lm(n,d)&(1<m){l&&os(0);break}o&&c(h+131072);var Se=h+Xe;if(h>8},rl=function(n,e,t){t<<=e&7;var i=e/8|0;n[i]|=t,n[i+1]|=t>>8,n[i+2]|=t>>16},cm=function(n,e){for(var t=[],i=0;ih&&(h=a[i].s);var f=new fi(h+1),p=S_(t[u-1],f,0);if(p>e){var i=0,g=0,_=p-e,m=1<<_;for(a.sort(function(x,M){return f[M.s]-f[x.s]||x.f-M.f});ie)g+=m-(1<>=_;g>0;){var y=a[i].s;f[y]=0&&g;--i){var b=a[i].s;f[b]==e&&(--f[b],++g)}p=e}return{t:new gn(f),l:p}},S_=function(n,e,t){return n.s==-1?Math.max(S_(n.l,e,t+1),S_(n.r,e,t+1)):e[n.s]=t},Nx=function(n){for(var e=n.length;e&&!n[--e];);for(var t=new fi(++e),i=0,s=n[0],a=1,r=function(l){t[i++]=l},o=1;o<=e;++o)if(n[o]==s&&o!=e)++a;else{if(!s&&a>2){for(;a>138;a-=138)r(32754);a>2&&(r(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(r(s),--a;a>6;a-=6)r(8304);a>2&&(r(a-3<<5|8208),a=0)}for(;a--;)r(s);a=1,s=n[o]}return{c:t.subarray(0,i),n:e}},ol=function(n,e){for(var t=0,i=0;i>8,n[s+2]=n[s]^255,n[s+3]=n[s+1]^255;for(var a=0;a4&&!E[b_[D-1]];--D);var O=c+5<<3,k=ol(s,da)+ol(a,Ql)+r,U=ol(s,h)+ol(a,g)+r+14+3*D+ol(M,E)+2*M[16]+3*M[17]+7*M[18];if(l>=0&&O<=k&&O<=U)return QE(e,u,n.subarray(l,l+c));var F,W,H,ne;if(Es(e,u,1+(U15&&(Es(e,u,De[C]>>5&127),u+=De[C]>>12)}}else F=eW,W=da,H=nW,ne=Ql;for(var C=0;C255){var Xe=ke>>18&31;rl(e,u,F[Xe+257]),u+=W[Xe+257],Xe>7&&(Es(e,u,ke>>23&31),u+=rf[Xe]);var Z=ke&31;rl(e,u,H[Z]),u+=ne[Z],Z>3&&(rl(e,u,ke>>5&8191),u+=of[Z])}else rl(e,u,F[ke]),u+=W[ke]}return rl(e,u,F[256]),u+W[256]},rW=new Wg([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),e1=new gn(0),oW=function(n,e,t,i,s,a){var r=a.z||n.length,o=new gn(i+r+5*(1+Math.ceil(r/7e3))+s),l=o.subarray(i,o.length-s),c=a.l,u=(a.r||0)&7;if(e){u&&(l[0]=a.r>>3);for(var d=rW[e-1],h=d>>13,f=d&8191,p=(1<7e3||E>24576)&&(F>423||!c)){u=Ux(n,l,0,b,T,x,C,E,D,w-D,u),E=M=C=0,D=w;for(var W=0;W<286;++W)T[W]=0;for(var W=0;W<30;++W)x[W]=0}var H=2,ne=0,oe=f,pe=k-U&32767;if(F>2&&O==y(w-pe))for(var Ie=Math.min(h,F)-1,De=Math.min(32767,w),Xe=Math.min(258,F);pe<=De&&--oe&&k!=U;){if(n[w+H]==n[w+H-pe]){for(var ke=0;keH){if(H=ke,ne=pe,ke>Ie)break;for(var Z=Math.min(pe,ke-2),se=0,W=0;Wse&&(se=ie,U=Se)}}}k=U,U=g[k],pe+=k-U&32767}if(ne){b[E++]=268435456|x_[H]<<18|Fx[ne];var xe=x_[H]&31,Ae=Fx[ne]&31;C+=rf[xe]+of[Ae],++T[257+xe],++x[Ae],R=w+H,++M}else b[E++]=n[w],++T[n[w]]}}for(w=Math.max(w,R);w=r&&(l[u/8|0]=c,L=r),u=QE(l,u+1,n.subarray(w,L))}a.i=r}return lf(o,0,i+Xg(u)+s)},lW=function(n,e,t,i,s){if(!s&&(s={l:1},e.dictionary)){var a=e.dictionary.subarray(-32768),r=new gn(a.length+n.length);r.set(a),r.set(n,a.length),n=r,s.w=a.length}return oW(n,e.level==null?6:e.level,e.mem==null?s.l?Math.ceil(Math.max(8,Math.min(13,Math.log(n.length)))*1.5):20:12+e.mem,t,i,s)};function cW(n,e){return lW(n,e||{},0,0)}function t1(n,e){return aW(n,{i:2},e,e)}var Bx=typeof TextEncoder<"u"&&new TextEncoder,T_=typeof TextDecoder<"u"&&new TextDecoder,uW=0;try{T_.decode(e1,{stream:!0}),uW=1}catch{}var dW=function(n){for(var e="",t=0;;){var i=n[t++],s=(i>127)+(i>223)+(i>239);if(t+s>n.length)return{s:e,r:lf(n,t-1)};s?s==3?(i=((i&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,e+=String.fromCharCode(55296|i>>10,56320|i&1023)):s&1?e+=String.fromCharCode((i&31)<<6|n[t++]&63):e+=String.fromCharCode((i&15)<<12|(n[t++]&63)<<6|n[t++]&63):e+=String.fromCharCode(i)}};function hW(n,e){var t;if(Bx)return Bx.encode(n);for(var i=n.length,s=new gn(n.length+(n.length>>1)),a=0,r=function(c){s[a++]=c},t=0;ts.length){var o=new gn(a+8+(i-t<<1));o.set(s),s=o}var l=n.charCodeAt(t);l<128||e?r(l):l<2048?(r(192|l>>6),r(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|n.charCodeAt(++t)&1023,r(240|l>>18),r(128|l>>12&63),r(128|l>>6&63),r(128|l&63)):(r(224|l>>12),r(128|l>>6&63),r(128|l&63))}return lf(s,0,a)}function n1(n,e){var t;if(T_)return T_.decode(n);var i=dW(n),s=i.s,t=i.r;return t.length&&os(8),s}const M_=1,E_="cfg",zx="cfgDebug";function fW(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"")}function pW(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a!Ai(e)||!PW(e.id)?null:{id:e.id,placement:s1(e.placement)}).filter(e=>e!==null):[]}function AW(n){return Array.isArray(n)?n.map(e=>!Ai(e)||typeof e.id!="string"||!IW(e.kind)?null:{id:e.id,kind:e.kind,placement:s1(e.placement),playerId:a1(e.playerId)??null,team:e.team==="orange"?"orange":e.team==="blue"?"blue":null,entries:RW(e.entries)}).filter(e=>e!==null):[]}function RW(n){return Array.isArray(n)?n.map(e=>!Ai(e)||typeof e.statId!="string"?null:{statId:e.statId,targetId:typeof e.targetId=="string"?e.targetId:void 0}).filter(e=>e!==null):[]}function s1(n){const e=Ai(n)?n:{},t=Ai(e.viewport)?e.viewport:{};return{x:Rn(e.x)??8,y:Rn(e.y)??8,viewport:{width:sh(t.width)??1,height:sh(t.height)??1},zIndex:Rn(e.zIndex),visible:Zn(e.visible)??!0}}function PW(n){return n==="camera"||n==="scoreboard"||n==="playback"||n==="recording"||n==="mechanics"||n==="event-playlist"||n==="mechanics-review"||n==="replay-loading"||n==="boost-pickups"||n==="touch-controls"||n==="touch-legend"||n==="shot-visualization"||n==="missed-events"}function IW(n){return n==="player"||n==="team"||n==="all-players"||n==="all-teams"||n==="kickoff-overview"||n==="goals-overview"||n==="ad-hoc"}function Ai(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Rn(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function sh(n){const e=Rn(n);return e!==void 0&&e>0?e:void 0}function Zn(n){return typeof n=="boolean"?n:void 0}function a1(n){return n===null?null:typeof n=="string"?n:void 0}function ll(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function Hx(n,e,t){return Math.min(t,Math.max(e,n))}const LW=["camera","scoreboard","playback","recording","mechanics","event-playlist","mechanics-review","replay-loading","boost-pickups","touch-controls","touch-legend","shot-visualization","missed-events"];class DW{constructor(e){this.options=e}nextZIndex=30;reset(){this.nextZIndex=30}bringToFront(e){e.style.zIndex=`${this.nextZIndex++}`}show(e){const t=this.mustWindow(e);t.hidden=!1,this.bringToFront(t),this.options.requestConfigSync()}toggle(e){const t=this.mustWindow(e);t.hidden=!t.hidden,t.hidden||this.bringToFront(t),this.options.requestConfigSync()}hide(e){const t=this.mustWindow(e);t.hidden=!0,this.options.requestConfigSync()}readPlacement(e){const t=Number.parseInt(e.style.zIndex,10);return{x:this.readCoordinate(e,"--window-x"),y:this.readCoordinate(e,"--window-y"),viewport:Vx(),zIndex:Number.isFinite(t)?t:void 0,visible:!e.hidden}}applyPlacement(e,t){const i=bW(t,Vx());e.style.setProperty("--window-x",`${i.x}px`),e.style.setProperty("--window-y",`${i.y}px`),e.hidden=!t.visible,t.zIndex!==void 0&&(e.style.zIndex=`${t.zIndex}`,this.nextZIndex=Math.max(this.nextZIndex,t.zIndex+1))}getSingletonConfigs(){const e=[],t=this.options.getRoot();for(const i of LW){const s=t.querySelector(`[data-window-id="${i}"]`);s&&e.push({id:i,placement:this.readPlacement(s)})}return e}applySingletonConfigs(e){const t=this.options.getRoot();for(const i of e){const s=t.querySelector(`[data-window-id="${i.id}"]`);s&&this.applyPlacement(s,i.placement)}}installDragging(e,t){e.addEventListener("pointerdown",i=>{if(!(i.target instanceof HTMLElement)||kW(i.target))return;const s=i.target.closest("[data-window-id]");if(!s||s.hidden)return;this.bringToFront(s);const a=i.clientX,r=i.clientY,o=s.getBoundingClientRect(),l=i.pointerId;s.setPointerCapture(l),i.preventDefault();const c=d=>{const h=Math.max(8,Math.min(window.innerWidth-120,o.left+d.clientX-a)),f=Math.max(8,Math.min(window.innerHeight-100,o.top+d.clientY-r));s.style.setProperty("--window-x",`${h}px`),s.style.setProperty("--window-y",`${f}px`)},u=()=>{s.releasePointerCapture(l),s.removeEventListener("pointermove",c),s.removeEventListener("pointerup",u),s.removeEventListener("pointercancel",u),this.options.requestConfigSync()};s.addEventListener("pointermove",c),s.addEventListener("pointerup",u),s.addEventListener("pointercancel",u)},{signal:t})}mustWindow(e){const t=this.options.getRoot().querySelector(`[data-window-id="${e}"]`);if(!t)throw new Error(`Missing window for id: ${e}`);return t}readCoordinate(e,t){const i=e.style.getPropertyValue(t).trim(),s=getComputedStyle(e).getPropertyValue(t).trim(),a=i||s,r=Number.parseFloat(a);if(Number.isFinite(r))return r;const o=e.getBoundingClientRect();return t==="--window-y"?o.top:o.left}}function Vx(){return{width:Math.max(1,window.innerWidth),height:Math.max(1,window.innerHeight)}}function kW(n){return n instanceof Element&&!!n.closest("button, input, select, textarea, option, label, a, [data-no-drag]")}function OW(n){return new DW(n)}class FW{constructor(e){this.options=e}activeSourceIds=null;autoFollow=!0;lastActiveKey=null;activeItem=null;renderedItems=[];reset(){this.activeSourceIds=null,this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[]}render(){this.options.body.replaceChildren(),this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[];const e=this.options.getSources();if(e.length===0){const _=document.createElement("p");_.className="stat-window-empty",_.textContent=this.options.getReplayPlayer()?"No events loaded.":"Load a replay to see events.",this.options.body.append(_);return}const t=v_(e,this.activeSourceIds),i=W$({sources:e,activeSourceIds:this.activeSourceIds,replayPlayers:this.options.getReplayPlayer()?.replay.players??[]}),s=document.createElement("div");s.className="event-playlist-toolbar";const a=document.createElement("details");a.className="event-playlist-filter",a.dataset.noDrag="true";const r=document.createElement("summary");r.textContent=`Filters ${t.size}/${e.length}`,a.append(r);const o=document.createElement("div");o.className="event-playlist-filter-panel";const l=document.createElement("div");l.className="event-playlist-filter-actions";const c=document.createElement("button");c.type="button",c.textContent="All",c.addEventListener("click",()=>{this.activeSourceIds=new Set(e.map(m=>m.id)),this.lastActiveKey=null,this.render();const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_)});const u=document.createElement("button");u.type="button",u.textContent="None",u.addEventListener("click",()=>{this.activeSourceIds=new Set,this.lastActiveKey=null,this.render()}),l.append(c,u),o.append(l);const d=new Map;for(const _ of e){const m=d.get(_.group)??[];m.push(_),d.set(_.group,m)}for(const[_,m]of d){const v=document.createElement("section");v.className="event-playlist-filter-group";const y=document.createElement("h3");y.textContent=_,v.append(y);for(const b of m){const T=document.createElement("label");T.className="toggle event-playlist-filter-option";const x=document.createElement("input");x.type="checkbox",x.checked=t.has(b.id),x.addEventListener("change",()=>{this.setSourceSelection(e,C=>{x.checked?C.add(b.id):C.delete(b.id)})});const M=document.createElement("span");M.textContent=`${b.label} (${b.events.length})`,T.append(x,M),v.append(T)}o.append(v)}a.append(o);const h=document.createElement("label");h.className="toggle event-playlist-follow";const f=document.createElement("input");f.type="checkbox",f.checked=this.autoFollow,f.addEventListener("change",()=>{this.autoFollow=f.checked;const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_,{forceScroll:!0})});const p=document.createElement("span");p.textContent="Auto-follow",h.append(f,p),s.append(a,h);const g=document.createElement("div");if(g.className="event-playlist-list",g.dataset.noDrag="true",i.length===0){const _=document.createElement("p");_.className="stat-window-empty",t.size===0?_.textContent="No event types selected.":_.textContent="No events in selected event types.",g.append(_)}else for(const _ of i){const m=document.createElement("button");m.type="button",m.className="event-playlist-item",m.dataset.eventKey=_.key,m.dataset.eventTime=`${_.event.time}`,m.style.setProperty("--event-color",_.color),Number.isFinite(_.event.time)&&this.renderedItems.push({key:_.key,time:_.event.time,element:m}),m.addEventListener("click",()=>{this.options.cueTimelineEvent(_.event)});const v=document.createElement("span");v.className="event-playlist-time",v.textContent=this.options.formatTime(_.event.time);const y=document.createElement("span");y.className="event-playlist-main";const b=document.createElement("strong");b.textContent=_.event.label??_.sourceLabel;const T=document.createElement("span");T.textContent=[_.event.playerName??null,_.event.frame!==void 0?`frame ${_.event.frame}`:null,_.sourceLabel].filter(x=>!!x).join(" · "),y.append(b,T),m.append(v,y),g.append(m)}this.options.body.append(s,g)}syncTimeline(e,t={}){if(!this.options.body.querySelector(".event-playlist-list"))return;const s=this.getActiveItem(e.currentTime),a=s?.dataset.eventKey??null;a===this.lastActiveKey&&!t.forceScroll||(this.activeItem?.isConnected?this.activeItem.dataset.active="false":this.activeItem&&(this.activeItem=null),s?(s.dataset.active="true",this.activeItem=s,(this.autoFollow||t.forceScroll)&&s.scrollIntoView({block:"nearest"})):this.activeItem=null,this.lastActiveKey=a)}setSourceSelection(e,t){const i=v_(e,this.activeSourceIds);t(i),this.activeSourceIds=i,this.lastActiveKey=null,this.render();const s=this.options.getReplayPlayer()?.getState();s&&this.syncTimeline(s)}getActiveItem(e){const t=this.renderedItems;if(t.length===0)return null;let i=0,s=t.length-1;for(;ie.getConfig||e.applyConfig).map(e=>{const t={id:e.id};return e.id==="boost"&&(t.aliases=["boost-pickup-animation"]),e.getConfig&&(t.getConfig=()=>e.getConfig?.()),e.applyConfig&&(t.applyConfig=i=>e.applyConfig?.(i)),t})}function KW(n){return HW(o1(n))}function qW({replayPlayer:n,playbackRate:e,skipPostGoalTransitions:t,skipKickoffs:i}){const s=n?.getState();return{currentTime:s?.currentTime,playing:s?.playing,rate:s?.speed??cf(Number(e?.value??1)),skipPostGoalTransitions:n?s?.skipPostGoalTransitionsEnabled:t.checked,skipKickoffs:n?s?.skipKickoffsEnabled:i.checked}}function YW({replayPlayer:n,cameraControlsController:e}){const t=n?.getState(),i=t?sE(t):e?.ballCamMode;return{mode:t?.cameraViewMode,freePreset:e?.freeCameraPreset??null,attachedPlayerId:t?.attachedPlayerId,ballCam:i===void 0?void 0:i==="on",useReplayBallCam:i===void 0?void 0:i==="player",usePlayerCameraSettings:t?.customCameraSettings===null,autoPossession:e?.autoPossessionEnabled,customSettings:t?.customCameraSettings,nameplateLiftUu:e?.nameplateLiftUu}}function jW({playback:n,camera:e,activeTimelineEventSourceIds:t,activeTimelineRangeModuleIds:i,activeMechanicTimelineKinds:s,activeRenderEffectModuleIds:a,initialConfig:r,replayPlayer:o,boostPadOverlayEnabled:l,recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}){return{version:M_,playback:n,camera:e,overlays:{timelineEvents:[...t],timelineRanges:[...i],mechanics:[...s],renderEffects:[...a],...r?.overlays.pluginRenderEffects!==void 0?{pluginRenderEffects:[...r.overlays.pluginRenderEffects]}:{},...r?.overlays.pluginHudOverlay!==void 0?{pluginHudOverlay:r.overlays.pluginHudOverlay}:{},followedPlayerHud:!1,boostPads:l,boostPickupAnimation:o?.getState().boostPickupAnimationEnabled??!1,hitboxWireframes:o?.getState().hitboxWireframesEnabled??!1,hitboxOnlyMode:o?.getState().hitboxOnlyModeEnabled??!1},recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}}function ZW(n,e,t){return{currentTime:n.currentTime,playing:n.playing,speed:n.rate,customCameraSettings:r1(e),cameraViewMode:e.mode,attachedPlayerId:e.attachedPlayerId,...Vb(e)==="player"?{useReplayBallCam:!0}:{ballCamEnabled:Vb(e)==="on"},boostPickupAnimationEnabled:t.overlays.boostPickupAnimation,hitboxWireframesEnabled:t.overlays.hitboxWireframes,hitboxOnlyModeEnabled:t.overlays.hitboxOnlyMode,skipPostGoalTransitionsEnabled:n.skipPostGoalTransitions,skipKickoffsEnabled:n.skipKickoffs}}function JW(n,e,t){console.groupCollapsed("[subtr-actor] stats player cfg load"),console.log("location.href",window.location.href),console.log("location.search",n.search||"(empty)"),console.log("location.hash",n.hash||"(empty)"),console.table([...n.searchParams.map(([i,s])=>({source:"search",name:i,value:s})),...n.hashParams.map(([i,s])=>({source:"hash",name:i,value:s}))]),console.log("cfg selected source",n.selectedSource??"(none)"),console.log("cfg selected raw text",n.selectedValue??"(none)"),console.log("cfg selected raw length",n.selectedValue?.length??0),console.log("cfg search values",n.searchValues),console.log("cfg hash values",n.hashValues),n.hashValues.length>0&&n.searchValues.length>0&&console.warn("Both hash and search contain cfg; hash cfg is used."),e&&(console.log("cfg normalized JSON",JSON.stringify(e,null,2)),console.log("cfg normalized object",e)),t&&console.error("cfg decode/apply error",t),console.groupEnd()}function Gx(n,e){const{style:t}=n.renderer.domElement;t.visibility=e?"hidden":"",t.pointerEvents=e?"none":""}function $x(n,e={}){const t=e.destroyPlayer??!0,i=e.clearPlayerPluginHandles??!0,s=n.getUnsubscribe();s&&(s(),n.setUnsubscribe(null)),n.teardownActiveModules(),t&&(n.getReplayPlayer()?.destroy(),n.setReplayPlayer(null)),i&&(n.setCanvasRecorder(null),n.setTimelineOverlay(null)),n.setLoadedReplayName(null),n.setStatsTimeline(null),n.setStatsFrameLookup(null),n.setStatRegistry(Jl()),n.clearTimelineEventSources(),n.clearTimelineRangeSources(),n.clearStandalonePlugins(),n.clearRenderCaches(),n.resetEventPlaylistWindow(),n.renderModuleSummary(),n.renderScoreboard(),n.renderTimelineEventCount(),n.renderMechanicsTimelineControls(),n.renderEventPlaylistWindow(),n.renderModuleSettings(),n.syncRecordingWindow()}async function QW(n,e,t){const{elements:i}=t;let s=null;i.statusReadout.textContent=n.preparingStatus,i.fileInput.disabled=!0,t.getReplayLoadModal()?.show(n.name,n.preparingStatus),t.setTransportEnabled(!1),t.getCameraControlsController()?.syncAvailability(),i.emptyState.hidden=t.getReplayPlayer()!==null,t.getReplayPlayer()?.pause();try{i.statusReadout.textContent="Parsing replay...",t.getReplayLoadModal()?.show(n.name,"Parsing replay...");const a=await e,{replay:r}=a,o=t.getReplayPlayer();if(o){$x(t,{destroyPlayer:!1,clearPlayerPluginHandles:!1});const h=new xw(a.raw);await o.replaceReplay(h,r,{preservePlayback:!1}),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(Jl(null)),t.setReplayPlayer(o),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(o.subscribe(t.renderSnapshot));const f=t.getInitialConfig();if(f){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(f)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(p=>p.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(o.getState()),t.renderSnapshot(o.getState()),t.renderStatsWindows(o.getState().frameIndex),t.renderScoreboard(o.getState().frameIndex),t.syncEventPlaylistTimeline(o.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide();return}const l=QN({replayEventsLabel:"Replay",replayEvents:h=>t.withTimelineEventSeekTimes(t.getReplayTimelineEvents(h.replay))}),c=kN({onStatusChange:t.syncRecordingWindow});t.setCanvasRecorder(c);const u=t.getInitialConfig(),d=e3(i.viewport,a,{initialPlaybackRate:u?.playback.rate,initialCustomCameraSettings:r1(u?.camera),initialAttachedPlayerId:u?.camera.attachedPlayerId??null,initialCameraViewMode:u?.camera.mode,initialBoostPickupAnimationEnabled:u?.overlays.boostPickupAnimation??!1,initialHitboxWireframesEnabled:u?.overlays.hitboxWireframes??i.hitboxWireframes.checked,initialHitboxOnlyModeEnabled:u?.overlays.hitboxOnlyMode??i.hitboxOnlyMode.checked,initialSkipPostGoalTransitionsEnabled:i.skipPostGoalTransitions.checked,initialSkipKickoffsEnabled:i.skipKickoffs.checked,plugins:[cN({onSample:({renderFps:h,replayFps:f})=>{const p=document.getElementById("render-fps-readout"),g=document.getElementById("replay-fps-readout");p&&(p.textContent=`${h.toFixed(0)} fps`),g&&(g.textContent=`${f.toFixed(0)} fps`)}}),bu(u3({floatingLiftUu:()=>t.getCameraControlsController()?.nameplateLiftUu})),bu(RN({includePickup:t.includeBoostPickupAnimationPickup})),bu(c),bu(l)]});if(s=d,Gx(d,!0),await d.ready,$x(t),s=null,Gx(d,!1),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(Jl(null)),t.setTimelineOverlay(l),t.setReplayPlayer(d),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(d.subscribe(t.renderSnapshot)),u){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(u)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(h=>h.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(d.getState()),t.renderSnapshot(d.getState()),t.renderStatsWindows(d.getState().frameIndex),t.renderScoreboard(d.getState().frameIndex),t.syncEventPlaylistTimeline(d.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide()}catch(a){throw t.getReplayLoadModal()?.hide(),s?.destroy(),t.getReplayPlayer()||(i.emptyState.hidden=!1,t.setCanvasRecorder(null)),t.syncRecordingWindow(),a}finally{i.fileInput.disabled=!1}}function e8(n){if(n<=0)return"--";const e=["B","KB","MB","GB"];let t=n,i=0;for(;t>=1024&&i=10?1:2;return`${t.toFixed(s)} ${e[i]}`}function t8(n){if(!n)return"No replay";if(n.error)return n.error;switch(n.state){case"idle":return"Idle";case"recording":return"Recording";case"stopping":return"Stopping";case"ready":return"Ready";case"error":return"Error"}}function n8({fpsValue:n,playbackRateValue:e}){const t=Number(n),i=Number(e);return{fps:Number.isFinite(t)?Math.max(1,Math.min(120,Math.trunc(t))):60,playbackRate:Number.isFinite(i)?Math.max(.1,i):1}}function i8(n,e=new Date){const i=(n?.replace(/\.replay$/i,"")||"replay").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,""),s=e.toISOString().replace(/[:.]/g,"-");return`${i||"replay"}-${s}.webm`}function s8(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.append(i),i.click(),i.remove(),window.setTimeout(()=>URL.revokeObjectURL(t),0)}class a8{constructor(e){this.options=e}getConfigSnapshot(){const{elements:e}=this.options;return{fps:Number(e.fps.value),playbackRate:Number(e.playbackRate.value)}}applyConfig(e){const{elements:t}=this.options;e.fps!==void 0&&(t.fps.value=`${e.fps}`),e.playbackRate!==void 0&&(t.playbackRate.value=`${e.playbackRate}`)}sync(e=this.options.getCanvasRecorder()?.getStatus()??null){const{elements:t}=this.options,i=this.options.getCanvasRecorder()!==null&&this.options.getReplayPlayer()!==null,s=e?.state??"idle",a=s==="recording"||s==="stopping",r=(this.options.getCanvasRecorder()?.getRecording()??null)!==null;t.status.textContent=t8(e),t.elapsed.textContent=`${(e?.elapsedSeconds??0).toFixed(1)}s`,t.size.textContent=e8(e?.sizeBytes??0),t.type.textContent=e?.mimeType||"WebM",t.start.disabled=!i||a,t.fullReplay.disabled=!i||a,t.stop.disabled=!i||!a,t.download.disabled=!r||a,t.clear.disabled=!r||a,t.fps.disabled=a,t.playbackRate.disabled=a}installEventListeners(e){const{elements:t}=this.options;t.start.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(i)try{const{fps:s}=this.getRecordingOptions();i.start({fps:s}),this.sync()}catch(s){console.error("Failed to start recording:",s),this.options.setStatus(s instanceof Error?s.message:"Failed to start recording"),this.sync(i.getStatus())}},{signal:e}),t.fullReplay.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(!i)return;const{fps:s,playbackRate:a}=this.getRecordingOptions();i.recordFullReplay({fps:s,playbackRate:a,restorePlaybackState:!0}).catch(r=>{console.error("Failed to record replay:",r),this.options.setStatus(r instanceof Error?r.message:"Failed to record replay"),this.sync(this.options.getCanvasRecorder()?.getStatus()??null)}),this.sync()},{signal:e}),t.stop.addEventListener("click",()=>{this.options.getCanvasRecorder()?.stop().catch(i=>{console.error("Failed to stop recording:",i),this.options.setStatus(i instanceof Error?i.message:"Failed to stop recording")}),this.sync()},{signal:e}),t.download.addEventListener("click",()=>{const i=this.options.getCanvasRecorder()?.getRecording();i&&s8(i,i8(this.options.getLoadedReplayName()))},{signal:e}),t.clear.addEventListener("click",()=>{try{this.options.getCanvasRecorder()?.clear(),this.sync()}catch(i){console.error("Failed to clear recording:",i)}},{signal:e}),t.fps.addEventListener("change",this.options.requestConfigSync,{signal:e}),t.playbackRate.addEventListener("change",this.options.requestConfigSync,{signal:e})}getRecordingOptions(){const{elements:e}=this.options;return n8({fpsValue:e.fps.value,playbackRateValue:e.playbackRate.value})}}function r8(n){return new a8(n)}class o8{constructor(e){this.options=e}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0){const{body:t}=this.options;t.replaceChildren();const i=this.options.getStatsFrameLookup(),s=i?zt(i,e):null,a=this.options.getReplayPlayer()?.replay??null;if(!s||!a){const o=document.createElement("p");o.className="scoreboard-empty",o.textContent="Load a replay to show the scoreboard.",t.append(o);return}const r=document.createElement("div");r.className="scoreboard-scoreline",r.append(Wx(s.team_zero?.core.goals,!0),c8(),Wx(s.team_one?.core.goals,!1)),t.append(r)}}function l8(n){return typeof n=="number"&&Number.isFinite(n)?`${Math.round(n)}`:"--"}function c8(){const n=document.createElement("span");return n.className="scoreboard-divider",n.textContent="-",n}function Wx(n,e){const t=document.createElement("strong");return t.className=`scoreboard-goal-value ${ta(e)}`,t.textContent=l8(n),t}function u8(n){return new o8(n)}class d8{constructor(e){this.options=e}setTransportEnabled(e,t){const{elements:i}=this.options;i.togglePlayback.disabled=!e,i.previousFrame.disabled=!e,i.nextFrame.disabled=!e,i.playbackRate.disabled=!e,i.skipPostGoalTransitions.disabled=!e,i.skipKickoffs.disabled=!e,i.hitboxWireframes.disabled=!e,i.hitboxOnlyMode.disabled=!e,this.options.getCameraControlsController()?.setTransportEnabled(e,t)}renderSnapshot(e){const{elements:t}=this.options;t.timeReadout.textContent=`${e.currentTime.toFixed(2)}s`,t.frameReadout.textContent=`${e.frameIndex}`,t.durationReadout.textContent=`${e.duration.toFixed(2)}s`,t.playbackStatusReadout.textContent=e.playing?"Playing":"Paused",t.togglePlayback.textContent=e.playing?"Pause":"Play";const i=Math.max(0,this.options.getFrameCount()-1);t.previousFrame.disabled=e.frameIndex<=0,t.nextFrame.disabled=e.frameIndex>=i;const s=cf(e.speed);t.playbackRate.value=`${s}`,t.playbackRateReadout.textContent=qg(s),this.options.getCameraControlsController()?.syncState(e),t.skipPostGoalTransitions.checked=e.skipPostGoalTransitionsEnabled,t.skipKickoffs.checked=e.skipKickoffsEnabled,t.hitboxWireframes.checked=e.hitboxWireframesEnabled,t.hitboxOnlyMode.checked=e.hitboxOnlyModeEnabled,t.emptyState.hidden=!0}}function h8(n){return new d8(n)}function f8({elements:n,signal:e,setLauncherOpen:t,openReplayFilePicker:i,getElementWindowId:s,toggleWindow:a,hideWindow:r,createStatsWindow:o,loadReplayFile:l,togglePlayback:c,stepFrames:u,setPlaybackRate:d,setSkipPostGoalTransitionsEnabled:h,setSkipKickoffsEnabled:f,setHitboxWireframesEnabled:p,setHitboxOnlyModeEnabled:g}){n.launcherToggle.addEventListener("click",()=>{t(n.launcherMenu.hidden)},{signal:e}),n.root.addEventListener("click",m=>{m.target instanceof Element&&(m.target.closest(".top-chrome")||t(!1))},{signal:e}),n.loadReplayAction.addEventListener("click",i,{signal:e}),n.emptyLoadReplay.addEventListener("click",i,{signal:e}),n.root.querySelectorAll("[data-window-toggle]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowToggle;v&&(a(v),t(!1))},{signal:e})}),n.root.querySelectorAll("[data-window-hide]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowHide??s(m);v&&r(v)},{signal:e})}),n.root.querySelectorAll("[data-create-stats-window]").forEach(m=>{m.addEventListener("click",()=>{o(m.dataset.createStatsWindow)},{signal:e})}),n.fileInput.addEventListener("change",()=>{const m=n.fileInput.files?.[0];m&&l(m)},{signal:e}),n.togglePlayback.addEventListener("click",c,{signal:e}),n.previousFrame.addEventListener("click",()=>u(-1),{signal:e}),n.nextFrame.addEventListener("click",()=>u(1),{signal:e});const _=()=>{const m=cf(Number(n.playbackRate.value));n.playbackRate.value=`${m}`,n.playbackRateReadout.textContent=qg(m),d(m)};n.playbackRate.addEventListener("input",_,{signal:e}),n.playbackRate.addEventListener("change",_,{signal:e}),n.skipPostGoalTransitions.addEventListener("change",()=>{h(n.skipPostGoalTransitions.checked)},{signal:e}),n.skipKickoffs.addEventListener("change",()=>{f(n.skipKickoffs.checked)},{signal:e}),n.hitboxWireframes.addEventListener("change",()=>{p(n.hitboxWireframes.checked)},{signal:e}),n.hitboxOnlyMode.addEventListener("change",()=>{g(n.hitboxOnlyMode.checked)},{signal:e})}const p8=3500;function m8(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function _8(n){const{getReplayPlayer:e,signal:t}=n,i={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},s=()=>{i.forward=!1,i.backward=!1,i.left=!1,i.right=!1,i.up=!1,i.down=!1},a=(g,_)=>{switch(g){case"KeyW":return i.forward=_,!0;case"KeyS":return i.backward=_,!0;case"KeyA":return i.left=_,!0;case"KeyD":return i.right=_,!0;case"Space":return i.up=_,!0;case"ShiftLeft":case"ShiftRight":return i.down=_,!0;default:return!1}},r=g=>{g.ctrlKey||g.metaKey||g.altKey||m8()||a(g.code,!0)&&g.preventDefault()},o=g=>{a(g.code,!1)};window.addEventListener("keydown",r,{signal:t}),window.addEventListener("keyup",o,{signal:t}),window.addEventListener("blur",s,{signal:t});const l=new S,c=new S,u=new S,d=new S(0,1,0);let h=null,f=0;const p=g=>{f=requestAnimationFrame(p);const _=h===null?0:Math.min(.1,(g-h)/1e3);h=g;const m=(i.forward?1:0)-(i.backward?1:0),v=(i.right?1:0)-(i.left?1:0),y=(i.up?1:0)-(i.down?1:0);if(_===0||m===0&&v===0&&y===0)return;const b=e();if(!b||b.getState().cameraViewMode!=="free")return;const T=b.camera,x=b.controls;T.getWorldDirection(l),c.set(1,0,0).applyQuaternion(T.quaternion),u.set(0,0,0).addScaledVector(l,m).addScaledVector(c,v).addScaledVector(d,y),u.lengthSq()!==0&&(u.normalize().multiplyScalar(p8*_),T.position.add(u),x.target.add(u))};f=requestAnimationFrame(p),t.addEventListener("abort",()=>{cancelAnimationFrame(f)})}function g8(n,e){const t=new URLSearchParams(n),s=(t.get("replayId")??t.get("replay-id")??e??"").trim();return s.length>0?s:null}function y8(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function v8(n){if(!n.replayId)return null;const e={replay_id:n.replayId,reviewed_mechanic:n.mechanic,reviewed_event_frame:n.frame,reviewed_event_time:n.time,confidence:n.confidence,status:"confirmed"};return n.subjectKind&&n.subjectId&&(e.reviewed_subject_kind=n.subjectKind,e.reviewed_subject_id=n.subjectId),n.startFrame!==null&&(e.reviewed_start_frame=n.startFrame),n.endFrame!==null&&(e.reviewed_end_frame=n.endFrame),n.notes&&n.notes.trim()&&(e.notes=n.notes.trim()),Object.keys(n.context).length>0&&(e.context=n.context),e}function b8(n,e){const t=n.getState(),i=Math.max(0,Math.round(t.frameIndex??0)),s=t.currentTime??0,a=t.attachedPlayerId??null,r=a?n.replay.players.find(o=>o.id===a)?.name??null:null;return{localId:e.localId,mechanic:e.mechanic,frame:i,time:s,subjectKind:a?"player":null,subjectId:a,playerName:r,startFrame:null,endFrame:null,notes:e.notes?.trim()?e.notes.trim():null,confidence:1,replayId:e.replayId,context:{capturedFrom:"stat-evaluation-player",attachedPlayerId:a,playerName:r,durationSeconds:n.replay.duration??null}}}async function x8(n,e="/api/v1/events/reviews"){const t=v8(n);if(!t)return{record:n,ok:!1,message:"No replay id — cannot upload (export JSON instead)."};try{const i=await fetch(e,{method:"POST",headers:{"content-type":"application/json",...y8()},credentials:"same-origin",body:JSON.stringify(t)});if(!i.ok){let s=`${i.status}${i.statusText?` ${i.statusText}`:""}`;try{const a=await i.json();typeof a.error=="string"&&(s=a.error)}catch{}return{record:n,ok:!1,message:s}}return{record:n,ok:!0,message:"uploaded"}}catch(i){return{record:n,ok:!1,message:i instanceof Error?i.message:String(i)}}}const w8=["flick","whiff","double_tap","ceiling_shot","wall_aerial","flip_reset","one_timer","speed_flip","half_flip","wavedash","demo"],S8="m";function T8(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function M8(n,e){const t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(i)}class E8{constructor(e){this.options=e}records=[];localIdSeq=0;installEventListeners(e){const{elements:t}=this.options;for(const i of w8){const s=document.createElement("option");s.value=i,s.textContent=i.replaceAll("_"," "),t.mechanic.appendChild(s)}t.capture.addEventListener("click",()=>this.capture(),{signal:e}),t.export.addEventListener("click",()=>this.exportJson(),{signal:e}),t.upload.addEventListener("click",()=>{this.uploadAll()},{signal:e}),t.clear.addEventListener("click",()=>{this.records.length=0,this.render(),this.setStatus("Cleared.")},{signal:e}),window.addEventListener("keydown",i=>{i.key.toLowerCase()!==S8||i.repeat||i.metaKey||i.ctrlKey||i.altKey||T8()||(i.preventDefault(),this.capture())},{signal:e}),this.render()}capture(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}this.localIdSeq+=1;const t=b8(e,{mechanic:this.options.elements.mechanic.value||"flick",replayId:this.resolveReplayId(),localId:`missed-${this.localIdSeq}`});this.records.push(t),this.options.showWindow(),this.render(),this.setStatus(`Captured ${t.mechanic} @ ${t.time.toFixed(2)}s`+(t.replayId?".":" (no replay id — export only)."))}exportJson(){if(this.records.length===0){this.setStatus("Nothing to export.");return}M8("missed-events.json",{capturedFrom:"stat-evaluation-player",replayId:this.resolveReplayId(),missedEvents:this.records}),this.setStatus(`Exported ${this.records.length}.`)}async uploadAll(){if(this.records.length===0){this.setStatus("Nothing to upload.");return}let e=0;const t=[];for(const i of[...this.records]){const s=await x8(i);if(s.ok){e+=1;const a=this.records.findIndex(r=>r.localId===i.localId);a>=0&&this.records.splice(a,1)}else t.push(`${i.mechanic}@${i.time.toFixed(1)}s: ${s.message}`)}this.render(),this.setStatus(t.length===0?`Uploaded ${e}.`:`Uploaded ${e}, ${t.length} failed — ${t[0]}`)}render(){const{list:e}=this.options.elements;e.replaceChildren();for(const t of this.records){const i=document.createElement("li"),s=t.playerName??t.subjectId??"no subject",a=document.createElement("span");a.className="missed-event-row",a.textContent=`${t.mechanic} @ ${t.time.toFixed(2)}s · f${t.frame} · ${s}`+(t.replayId?"":" · no replay id");const r=document.createElement("button");r.type="button",r.textContent="✕",r.title="Remove",r.addEventListener("click",()=>{const o=this.records.findIndex(l=>l.localId===t.localId);o>=0&&(this.records.splice(o,1),this.render())}),i.append(a,r),e.appendChild(i)}}setStatus(e){this.options.elements.status.textContent=e}resolveReplayId(){return g8(window.location.search,this.options.getReplayId?.()??null)}}function C8(n){return new E8(n)}class A8{constructor(e){this.options=e}activeModules=[];activeTimelineEventSourceIds=new Set;activeTimelineRangeModuleIds=new Set;activeMechanicTimelineKinds=new Set;activeRenderEffectModuleIds=new Set;removeRenderHook=null;timelineSourceRemovers=new Map;timelineRangeSourceRemovers=new Map;getActiveModules(){return this.activeModules}getActiveTimelineEventSourceIds(){return this.activeTimelineEventSourceIds}getActiveTimelineRangeModuleIds(){return this.activeTimelineRangeModuleIds}getActiveMechanicTimelineKinds(){return this.activeMechanicTimelineKinds}getActiveRenderEffectModuleIds(){return this.activeRenderEffectModuleIds}getActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}getBoostPadOverlayEnabled(){return!0}getTimelineEventSourceIds(){return[...this.activeTimelineEventSourceIds]}getTimelineRangeModuleIds(){return[...this.activeTimelineRangeModuleIds]}getMechanicTimelineKinds(){return[...this.activeMechanicTimelineKinds]}getRenderEffectModuleIds(){return[...this.activeRenderEffectModuleIds]}applyOverlayConfig({timelineEvents:e,timelineRanges:t,mechanics:i,renderEffects:s,boostPads:a}){this.activeTimelineEventSourceIds=new Set(e),this.activeTimelineRangeModuleIds=new Set(t),this.activeMechanicTimelineKinds=new Set(i),this.activeRenderEffectModuleIds=new Set(s)}reset(){this.teardownActiveModules(),this.clearStandalonePlugins(),this.activeModules=[],this.activeTimelineEventSourceIds=new Set,this.activeTimelineRangeModuleIds=new Set,this.activeMechanicTimelineKinds=new Set,this.activeRenderEffectModuleIds=new Set,this.removeRenderHook=null}setupActiveModules(){this.teardownActiveModules();const e=this.options.getContext();if(!e)return;const t=this.getActiveModuleIds();this.activeModules=this.options.modules.filter(i=>t.has(i.id)),this.options.boostPickupFilters.setup(e);for(const i of this.activeModules)i.setup(e);this.removeRenderHook=e.player.onBeforeRender(i=>{for(const s of this.activeModules)this.activeRenderEffectModuleIds.has(s.id)&&s.onBeforeRender(i)}),this.syncTimelineEvents(),this.syncTimelineRanges()}teardownActiveModules(){this.removeRenderHook?.(),this.removeRenderHook=null,this.clearTimelineEventSources(),this.clearTimelineRangeSources();for(const e of this.activeModules)e.teardown();this.activeModules=[]}toggleCapability(e,t,i){const s=this.getMutableActiveCapabilityIds(t);i?s.add(e):s.delete(e),this.setupActiveModules(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderStatsWindows(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}setMechanicTimelineKind(e,t){t?this.activeMechanicTimelineKinds.add(e):this.activeMechanicTimelineKinds.delete(e),this.options.requestConfigSync()}activateMechanicTimelineKind(e){this.activeMechanicTimelineKinds.add(e),this.syncTimelineEvents(),this.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}clearTimelineEventSources(){for(const e of this.timelineSourceRemovers.values())e();this.timelineSourceRemovers.clear()}clearTimelineRangeSources(){for(const e of this.timelineRangeSourceRemovers.values())e();this.timelineRangeSourceRemovers.clear()}clearStandalonePlugins(){}syncBoostPadOverlayPlugin(){}toggleBoostPadOverlay(){this.options.renderModuleSummary(),this.options.requestConfigSync()}syncTimelineEvents(){this.clearTimelineEventSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.options.getEventTimelineSources(e)){if(!i.active)continue;const s=i.buildTimelineEvents();s.length!==0&&this.timelineSourceRemovers.set(i.timelineKey,t.addEventSource(this.options.withTimelineEventSeekTimes(s),{id:i.timelineId,label:i.label}))}t.refreshEvents()}}syncTimelineRanges(){this.clearTimelineRangeSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.activeModules)!this.activeTimelineRangeModuleIds.has(i.id)||!i.getTimelineRanges||this.timelineRangeSourceRemovers.set(i.id,t.addRangeSource(()=>i.getTimelineRanges?.(e)??[]));for(const i of this.options.getEventTimelineSources(e)){if(!i.active||!i.buildTimelineRanges)continue;const s=i.buildTimelineRanges();s.length!==0&&this.timelineRangeSourceRemovers.set(i.timelineKey,t.addRangeSource(s))}t.refreshRanges()}}getActiveModuleIds(){return new Set([...this.activeTimelineEventSourceIds,...this.activeTimelineRangeModuleIds,...this.activeRenderEffectModuleIds])}getMutableActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}}function R8(n){return new A8(n)}function Jn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Xx(n){return Jn(n)&&(n.kind==="time"||n.kind==="frame")&&typeof n.value=="number"&&Number.isFinite(n.value)?{kind:n.kind,value:n.value}:null}function Nu(n,e){if(n!=null){if(typeof n!="number"||!Number.isInteger(n)||!Number.isFinite(n)||n<0)throw new Error(`Review playlist page ${e} must be a non-negative integer.`);return n}}function Kx(n,e){if(n!=null){if(typeof n!="string")throw new Error(`Review playlist page ${e} must be a string.`);return n}}function P8(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist page must be an object.");return{next:Kx(n.next,"next"),previous:Kx(n.previous,"previous"),total:Nu(n.total,"total"),count:Nu(n.count,"count"),limit:Nu(n.limit,"limit"),offset:Nu(n.offset,"offset")}}}function I8(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist playback must be an object.");if(n.timeBase!==void 0&&n.timeBase!=="playback"&&n.timeBase!=="rawReplay")throw new Error('Review playlist playback timeBase must be "playback" or "rawReplay".');return{...n,timeBase:n.timeBase}}}function L8(n,e){if(n==null)return;if(!Jn(n))throw new Error(`Review item ${e} perspective must be an object.`);if(n.kind!=="player")throw new Error(`Review item ${e} perspective kind must be "player".`);const t=typeof n.playerId=="string"&&n.playerId.trim()?n.playerId.trim():void 0,i=typeof n.playerName=="string"&&n.playerName.trim()?n.playerName.trim():void 0;if(!t&&!i)throw new Error(`Review item ${e} player perspective needs playerId or playerName.`);if(n.ballCam!==void 0&&n.ballCam!=="off"&&n.ballCam!=="on"&&n.ballCam!=="player")throw new Error(`Review item ${e} perspective ballCam must be off, on, or player.`);if(n.usePlayerCameraSettings!==void 0&&typeof n.usePlayerCameraSettings!="boolean")throw new Error(`Review item ${e} perspective usePlayerCameraSettings must be boolean.`);return{kind:"player",playerId:t,playerName:i,ballCam:n.ballCam,usePlayerCameraSettings:n.usePlayerCameraSettings}}function D8(n){if(!Jn(n)||!Array.isArray(n.items))throw new Error("Review playlist must contain an items array.");const e=n.items.map((i,s)=>{if(!Jn(i)||typeof i.replay!="string")throw new Error(`Invalid review item at index ${s}.`);const a=Xx(i.start),r=Xx(i.end);if(!a||!r)throw new Error(`Review item ${s+1} has invalid start or end.`);return{id:typeof i.id=="string"?i.id:void 0,replay:i.replay,start:a,end:r,label:typeof i.label=="string"?i.label:void 0,perspective:L8(i.perspective,s+1),meta:Jn(i.meta)?i.meta:void 0}}),t=Array.isArray(n.replays)?n.replays.map(i=>!Jn(i)||typeof i.id!="string"?null:{id:i.id,path:typeof i.path=="string"?i.path:void 0,label:typeof i.label=="string"?i.label:void 0,locator:Jn(i.locator)?i.locator:void 0,meta:Jn(i.meta)?i.meta:void 0}).filter(i=>i!==null):void 0;return{label:typeof n.label=="string"?n.label:void 0,replays:t,items:e,page:P8(n.page),playback:I8(n.playback),meta:n.meta}}function qx(n){let e;try{e=JSON.parse(n)}catch(t){throw new Error(`Invalid review playlist JSON: ${t instanceof Error?t.message:String(t)}`)}return D8(e)}function k8(){const n=new URLSearchParams(window.location.search);return n.get("reviewPlaylist")?.trim()||n.get("review")?.trim()||n.get("playlist")?.trim()||n.get("playlistUrl")?.trim()||null}function O8(n){return/^\/(?:home|Users|tmp|var\/tmp|mnt|media|run\/user|nix\/store)\//.test(n)}function l1(n,e){const t=n.startsWith("path:")?n.slice(5):n;if(/^https?:\/\//i.test(t)||t.startsWith("/@fs/"))return t;if(t.startsWith("/")){if(O8(t))return`/@fs${t}`;if(e){const i=new URL(e,window.location.href);if(i.origin!==window.location.origin)return new URL(t,i.origin).href}return t}return e?new URL(t,e).href:t}function rd(n,e){const t=e.replaysById.get(n.replay);if(t?.path)return t.path;if(Jn(t?.locator)&&t.locator.kind==="path"&&typeof t.locator.path=="string")return t.locator.path;if(/^https?:\/\//i.test(n.replay)||n.replay.startsWith("/")||n.replay.startsWith("/@fs/")||n.replay.startsWith("path:"))return n.replay;throw new Error(`Review replay "${n.replay}" does not include a loadable path.`)}function Yx(n,e){const t=e.replaysById.get(n.replay),s=(t?.path??rd(n,e)).replace(/^path:/,"").split("/").filter(Boolean).pop();return t?.label??s??"review replay"}function od(n){return typeof n=="number"&&Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function jx(n){return n.kind==="time"?od(n.value):`frame ${Math.trunc(n.value)}`}function Ki(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?t:null}function ld(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):null}function F8(n,e){for(const[t,i]of[["eventTime","eventFrame"],["startTime","startFrame"],["endTime","endFrame"]]){const s=Ki(n,t),a=ld(n,i),r=a===null?null:e.frames[a]?.time;if(s!==null&&typeof r=="number"&&Number.isFinite(r))return s-r}return 0}function c1(n,e,t){return t==="playback"?0:t==="rawReplay"&&typeof e.rawStartTime=="number"&&Number.isFinite(e.rawStartTime)?e.rawStartTime:F8(n,e)}function C_(n,e){return Math.min(Math.max(0,n),Math.max(0,e))}function N8(n,e,t,i){if(e.kind==="frame"){const a=Math.max(0,Math.trunc(e.value));return C_(t.frames[a]?.time??0,t.duration)}const s=c1(n,t,i);return C_(e.value-s,t.duration)}function U8(n,e,t){const i=$8(n);return i===null?null:C_(i-c1(n,e,t),e.duration)}function B8(n){const e=n.start.kind==="time"?n.start.value:null,t=n.end.kind==="time"?n.end.value:null,i=[`${jx(n.start)} to ${jx(n.end)}`];e!==null&&t!==null&&i.push(`${Math.max(0,t-e).toFixed(1)}s clip`);const s=Ki(n,"startTime")??Ki(n,"eventTime"),a=Ki(n,"endTime")??Ki(n,"eventTime");return e!==null&&s!==null&&i.push(`${Math.max(0,s-e).toFixed(1)}s preroll`),t!==null&&a!==null&&i.push(`${Math.max(0,t-a).toFixed(1)}s postroll`),i.join(" · ")}function z8(n){const e=Ki(n,"eventTime"),t=Ki(n,"startTime"),i=Ki(n,"endTime"),s=ld(n,"eventFrame"),a=ld(n,"startFrame"),r=ld(n,"endFrame"),o=t!==null&&i!==null&&Math.abs(i-t)>.001?`${od(t)} to ${od(i)}`:od(e??t??i),l=a!==null&&r!==null&&r!==a?`frames ${a}-${r}`:s!==null?`frame ${s}`:a!==null?`frame ${a}`:null;return[o,l].filter(c=>c&&c!=="--").join(" · ")||"--"}function um(n,e){return n.label??n.meta?.eventTypeLabel??n.meta?.mechanicLabel??`Review item ${e+1}`}function H8(n){if(typeof n.meta?.playerName=="string"&&n.meta.playerName.trim())return n.meta.playerName.trim();if(Jn(n.meta?.target)&&typeof n.meta.target.playerName=="string"){const e=n.meta.target.playerName.trim();return e||null}return null}function Zx(n,e){if(!n)return null;if(n.playerId){const i=e.find(s=>s.id===n.playerId);if(i)return i}const t=n.playerName?.toLowerCase();return t?e.find(i=>i.name.trim().toLowerCase()===t)??null:null}function Jx(n){if(typeof n.meta?.eventTypeLabel=="string"&&n.meta.eventTypeLabel.trim())return n.meta.eventTypeLabel;if(typeof n.meta?.mechanicLabel=="string"&&n.meta.mechanicLabel.trim())return n.meta.mechanicLabel;const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"?Ci(e):"--"}function V8(n){const e=n.meta?.eventCategory;return typeof e=="string"&&e.trim()?Ci(e.trim()):"--"}function G8(n){const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"&&e.trim()?e.trim().replaceAll("-","_"):null}function $8(n){return Ki(n,"eventTime")??Ki(n,"startTime")??Ki(n,"endTime")}class W8{constructor(e){this.options=e}createReplaySource(e,t,i){const s=rd(e,t),a=l1(s,t.sourceUrl);return{name:Yx(e,t),preparingStatus:"Loading review replay...",async readBytes(){const r=await fetch(a,{signal:i});if(!r.ok){const o=r.statusText?` ${r.statusText}`:"";throw new Error(`Failed to fetch review replay from ${a} (${r.status}${o})`)}return new Uint8Array(await r.arrayBuffer())}}}initialize(e){const t=this.getReplayClipCounts(e);for(const[i,s]of this.getReplayItems(e)){let a="",r=i;try{a=rd(s,e),r=Yx(s,e)}catch{r=e.replaysById.get(i)?.label??i}e.replayLoadStates.set(i,{replayId:i,label:r,path:a,clipCount:t.get(i)??0,status:"idle",progress:null,error:null})}}preload(e,t){if(e.preloading)return;const i=this.getNextReplayItems(e,t);i.length!==0&&(e.preloading=!0,(async()=>{try{for(const s of i){const a=s.replay,r=e.replayLoadStates.get(a);if(!(r?.status==="loaded"||r?.status==="loading"))try{await this.loadBundle(s,e)}catch{}}}finally{e.preloading=!1}})())}loadBundle(e,t){const i=t.replayLoadCache.get(e.replay);if(i)return i;const s=this.createReplaySource(e,t);this.updateLoadState(t,e.replay,{label:s.name,path:rd(e,t),status:"loading",progress:null,error:null});const a=Promise.resolve().then(async()=>{const r=await s.readBytes();return iE(r,{reportEveryNFrames:100,onProgress:o=>{this.updateLoadState(t,e.replay,{status:"loading",progress:o,error:null})}})}).then(r=>(this.updateLoadState(t,e.replay,{status:"loaded",progress:null,error:null}),r)).catch(r=>{throw t.replayLoadCache.delete(e.replay),this.updateLoadState(t,e.replay,{status:"error",error:r instanceof Error?r.message:String(r)}),r});return t.replayLoadCache.set(e.replay,a),a}render(e){const{reviewSummary:t,loadingSummary:i,loadingActive:s,loadingList:a}=this.options.elements,r=e?Array.from(e.replayLoadStates.values()):[],o=r.filter(h=>h.status==="loaded").length,l=r.filter(h=>h.status==="loading").length,c=r.filter(h=>h.status==="error").length,u=r.filter(h=>h.status==="idle").length,d=r.length===0?"0 replays":`${o}/${r.length} loaded${l>0?`, ${l} loading`:""}${c>0?`, ${c} failed`:""}`;if(t.textContent=d,i.textContent=d,s.textContent=r.length===0?"No playlist":l>0?`${l} active, ${u} pending`:c>0?`${c} failed`:e?.preloading?`Background queue, ${u} pending`:o===r.length?"Complete":`${u} pending`,a.replaceChildren(),!e||r.length===0){const h=document.createElement("p");h.className="stat-window-empty",h.textContent="No replay sources.",a.append(h);return}for(const h of r){const f=document.createElement("div");f.className=`mechanics-review-replay-load ${h.status}`;const p=document.createElement("div");p.className="mechanics-review-replay-load-main";const g=document.createElement("span");g.className="mechanics-review-replay-load-title",g.textContent=h.label;const _=document.createElement("span");_.className="mechanics-review-replay-load-meta",_.textContent=[h.replayId,`${h.clipCount} ${h.clipCount===1?"clip":"clips"}`,h.path].filter(Boolean).join(" · "),p.append(g,_);const m=document.createElement("strong");m.className="mechanics-review-replay-load-status",m.textContent=this.replayLoadStatusText(h);const v=document.createElement("div");v.className="mechanics-review-replay-load-progress";const y=document.createElement("span");y.style.width=`${Math.round(this.replayLoadProgressValue(h)*100)}%`,v.append(y),f.append(p,m,v),a.append(f)}}updateLoadState(e,t,i){const s=e.replayLoadStates.get(t)??{replayId:t,label:t,path:"",clipCount:0,status:"idle",progress:null,error:null};e.replayLoadStates.set(t,{...s,...i});const a=e.manifest.items[e.currentIndex];e.loading&&a?.replay===t&&i.progress&&this.options.onActiveLoadProgress(i.progress),this.options.isActiveReview(e)&&this.render(e)}getReplayItems(e){const t=new Map;for(const i of e.manifest.items)t.has(i.replay)||t.set(i.replay,i);return t}getReplayClipCounts(e){const t=new Map;for(const i of e.manifest.items)t.set(i.replay,(t.get(i.replay)??0)+1);return t}getNextReplayItems(e,t){const i=e.manifest.items[t]?.replay,s=new Set(i?[i]:[]),a=[];for(let r=t+1;r{const i=t.file.files?.[0];if(i)try{const s=qx(await i.text());await this.loadPlaylist(s,null)}catch(s){console.error("Failed to load review playlist:",s),this.setStatus(s instanceof Error?s.message:"Failed to load review playlist")}finally{t.file.value=""}},{signal:e}),t.loadUrl.addEventListener("click",()=>{this.loadPlaylistFromUrl(t.url.value.trim()).catch(i=>{console.error("Failed to load review playlist URL:",i),this.setStatus(i instanceof Error?i.message:"Failed to load review playlist URL")})},{signal:e}),t.previous.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.max(0,i.currentIndex-1))},{signal:e}),t.replay.addEventListener("click",()=>this.replayClip(),{signal:e}),t.next.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.min(i.manifest.items.length-1,i.currentIndex+1))},{signal:e}),t.confirm.addEventListener("click",()=>{this.submitDecision("confirmed")},{signal:e}),t.reject.addEventListener("click",()=>{this.submitDecision("rejected")},{signal:e}),t.uncertain.addEventListener("click",()=>{this.submitDecision("uncertain")},{signal:e})}render(){const{elements:e}=this.options,t=this.activeReview,i=t?.manifest.items??[],s=t?i[t.currentIndex]??null:null,a=i.length>0;e.count.textContent=`${i.length} item${i.length===1?"":"s"}`,e.index.textContent=a&&t?`${t.currentIndex+1} / ${i.length}`:"0 / 0",e.title.textContent=s?um(s,t?.currentIndex??0):"No candidate selected",e.mechanic.textContent=s?Jx(s):"--",e.player.textContent=s?this.getPlayerName(s):"--",e.clip.textContent=s?B8(s):"--",e.event.textContent=s?z8(s):"--",e.reason.textContent=s?.meta?.reason??"--",e.previous.disabled=!t||t.loading||t.currentIndex<=0,e.replay.disabled=!t||t.loading||!t.currentClip,e.next.disabled=!t||t.loading||t.currentIndex>=i.length-1;const r=!t||t.loading||Qx(s)===null;if(e.confirm.disabled=r,e.reject.disabled=r,e.uncertain.disabled=r,this.options.replayLoads.render(t),e.list.replaceChildren(),!t||i.length===0){const o=document.createElement("p");o.className="stat-window-empty",o.textContent="No review playlist loaded.",e.list.append(o);return}i.forEach((o,l)=>{const c=document.createElement("button");c.type="button",c.className="mechanics-review-item",c.dataset.active=l===t.currentIndex?"true":"false",c.disabled=t.loading,c.addEventListener("click",()=>{this.activateItem(l)});const u=document.createElement("span");u.textContent=um(o,l);const d=document.createElement("strong");d.textContent=[V8(o),Jx(o),this.getPlayerName(o),dm(o.meta?.reviewStatus)].filter(h=>h&&h!=="--").join(" · ")||"--",c.append(u,d),e.list.append(c)})}async loadPlaylist(e,t){const i=new Map;for(const s of e.replays??[])i.set(s.id,s);this.activeReview={manifest:e,sourceUrl:t,replaysById:i,replayLoadStates:new Map,replayLoadCache:new Map,currentIndex:0,loading:!1,preloading:!1,currentReplayId:null,currentClip:null},this.options.replayLoads.initialize(this.activeReview),this.options.showReplayLoadingWindow(),this.setStatus(e.label?`Loaded ${e.label}.`:"Loaded review playlist."),this.render(),e.items.length>0&&await this.activateItem(0)}async loadPlaylistFromUrl(e){if(!e){this.setStatus("Enter a review playlist URL.");return}const t=l1(e,window.location.href);this.setStatus("Loading review playlist...");const i=await fetch(t);if(!i.ok){const a=i.statusText?` ${i.statusText}`:"";throw new Error(`Failed to fetch review playlist from ${t} (${i.status}${a})`)}const s=qx(await i.text());await this.loadPlaylist(s,i.url||t)}async activateItem(e){const t=this.activeReview,i=t?.manifest.items[e];if(!(!t||!i||t.loading)){t.loading=!0,t.currentIndex=e,this.render(),this.setStatus(`Loading ${um(i,e)}...`);try{if(!this.options.getReplayPlayer()||t.currentReplayId!==i.replay){const d=this.options.replayLoads.createReplaySource(i,t),h=this.options.replayLoads.loadBundle(i,t);await this.options.loadReplayBundleForDisplay(d,h),t.currentReplayId=i.replay}this.options.replayLoads.preload(t,e);const a=t.manifest.playback?.timeBase,r=Math.max(0,this.getBoundTime(i,i.start,a)),o=Math.min(this.options.getReplayPlayer()?.getState().duration??Number.POSITIVE_INFINITY,Math.max(r,this.getBoundTime(i,i.end,a)));if(!Number.isFinite(r)||!Number.isFinite(o)||o<=r)throw new Error("Review item has an empty playback range.");const l=this.options.getReplayPlayer(),c=l?Zx(i.perspective,l.replay.players):null;c&&this.options.applyClipPerspective({playerId:c.id,ballCam:i.perspective?.ballCam,usePlayerCameraSettings:i.perspective?.usePlayerCameraSettings}),this.options.resetReplayTransitionControls();const u=l===null?null:U8(i,l.replay,a);t.currentClip={startTime:r,endTime:o,targetTime:u},this.options.activateTimelineSource(i),this.options.getReplayPlayer()?.setState({currentTime:r,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),this.setStatus(u===null?`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s`:`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s; target ${u.toFixed(2)}s`)}catch(s){console.error("Failed to activate mechanics review item:",s),t.currentClip=null,this.setStatus(s instanceof Error?s.message:"Failed to load review item")}finally{t.loading=!1,this.render()}}}replayClip(){const e=this.activeReview?.currentClip,t=this.options.getReplayPlayer();!e||!t||t.setState({currentTime:e.startTime,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1})}async submitDecision(e){const t=this.activeReview,i=t?.manifest.items[t.currentIndex]??null,s=Qx(i);if(!t||!i||!s){this.setStatus("Current review item has no review endpoint.");return}this.setStatus(`Submitting ${dm(e)}...`);const a=await fetch(s,{method:"POST",headers:{"content-type":"application/json",...q8()},credentials:"same-origin",body:JSON.stringify({status:e})});if(!a.ok){let r=`${a.status}${a.statusText?` ${a.statusText}`:""}`;try{const o=await a.json();typeof o.error=="string"&&(r=o.error)}catch{}this.setStatus(`Review failed: ${r}`);return}i.meta=i.meta??{},i.meta.reviewStatus=e,this.setStatus(`Marked ${dm(e)}.`),this.render()}enforceClipBoundary(e){const t=this.activeReview?.currentClip,i=this.options.getReplayPlayer();if(!t||!i||this.boundaryGuard)return!1;const s=e.currentTime=t.endTime-.025;if(!s&&!a)return!1;this.boundaryGuard=!0;try{i.setState({currentTime:s?t.startTime:t.endTime,playing:!1,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),a&&this.setStatus(`Finished clip at ${t.endTime.toFixed(2)}s`)}finally{this.boundaryGuard=!1}return!0}getBoundTime(e,t,i){const s=this.options.getReplayPlayer();return s?N8(e,t,s.replay,i):t.kind==="time"?t.value:0}getPlayerName(e){const t=H8(e);if(t)return t;const i=this.options.getReplayPlayer()?.replay.players??[];return Zx(e.perspective,i)?.name??"--"}}function dm(n){return typeof n=="string"&&n.trim()?n.replaceAll("_"," "):"unreviewed"}function Qx(n){if(!n)return null;if(typeof n.meta?.reviewEndpoint=="string"&&n.meta.reviewEndpoint)return n.meta.reviewEndpoint;const e=typeof n.meta?.eventId=="string"&&n.meta.eventId?n.meta.eventId:n.id;return e?`/api/v1/events/${encodeURIComponent(e)}/reviews`:null}function q8(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function Y8(n){return new K8(n)}const j8=["replayUrl","replay_url","replay"],Z8=["r","replayUrlZ","replay_url_z"],J8=["ballchasing","ballchasingId","ballchasingUuid","ballchasingReplay"];function Q8(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a{n.signal.aborted||(console.error("Failed to load replay URL:",t),n.statusReadout.textContent=t instanceof Error?t.message:"Failed to load replay URL")})}function r6(n){n.initialBundle?n.loadReplayBundleForDisplay({name:n.initialReplayName??"replay",preparingStatus:"Preparing replay...",async readBytes(){throw new Error("Replay bytes are not available for this preloaded replay")}},Promise.resolve(n.initialBundle)).catch(i=>{n.signal.aborted||(console.error("Failed to load preprocessed replay bundle:",i),n.statusReadout.textContent=i instanceof Error?i.message:"Failed to load preprocessed replay bundle")}):n.loadFromLocation!==!1&&a6(n);const e=k8();if(!e)return;const t=n.getMechanicsReviewController();t?.setUrl(e),n.showMechanicsReviewWindow(),t?.loadPlaylistFromUrl(e).catch(i=>{n.signal.aborted||(console.error("Failed to load mechanics review playlist from URL:",i),t?.setStatus(i instanceof Error?i.message:"Failed to load mechanics review playlist from URL"))})}function o6(n){const e=()=>{n.getSkipPostGoalTransitions().checked=!1,n.getSkipKickoffs().checked=!1},t=(i,s)=>{const a=n.getReplayPlayer();!a||!Number.isFinite(i)||(n.getMechanicsReviewController()?.clearCurrentClip(),e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:s,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())};return{watchGoalReplay(i,s){const a=n.getReplayPlayer();if(!a||!Number.isFinite(i))return;if(n.getMechanicsReviewController()?.clearCurrentClip(),s!==null&&a.replay.players.some(o=>o.id===s)){a.setAttachedPlayer(s),a.setCameraViewMode("follow");const o=n.getCameraControlsController();o&&(o.freeCameraPreset=null)}e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate()},cueGoalReplay(i){t(i,!1)},cueTimelineEvent(i){const s=n.getReplayPlayer();s&&(n.getMechanicsReviewController()?.clearCurrentClip(),e(),s.setState({currentTime:Pg(i),skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())},applyConfigToReplayPlayer(i){const s=n.getReplayPlayer();if(!s)return;s.setState(ZW(i.playback,i.camera,i));const a=n.getCameraControlsController();a&&(a.freeCameraPreset=i.camera.freePreset??null),i.camera.mode==="free"&&i.camera.freePreset&&s.setFreeCameraPreset(i.camera.freePreset),n.syncBoostPadOverlayPlugin(),n.setupActiveModules(),n.renderModuleSummary(),n.renderModuleSettings(),n.renderStatsWindows(s.getState().frameIndex)}}}function l6(n){let e=!1,t=null;const i=()=>n.getFloatingWindowController()?.getSingletonConfigs()??[],s=()=>n.getStatsWindowsController()?.getConfigs()??[],a=()=>{const o=n.getActiveModulesRuntime(),l=n.getReplayPlayer();return jW({playback:qW({replayPlayer:l,playbackRate:n.playbackRate,skipPostGoalTransitions:n.skipPostGoalTransitions,skipKickoffs:n.skipKickoffs}),camera:YW({replayPlayer:l,cameraControlsController:n.getCameraControlsController()}),activeTimelineEventSourceIds:o.getActiveTimelineEventSourceIds(),activeTimelineRangeModuleIds:o.getActiveTimelineRangeModuleIds(),activeMechanicTimelineKinds:o.getActiveMechanicTimelineKinds(),activeRenderEffectModuleIds:o.getActiveRenderEffectModuleIds(),initialConfig:n.getInitialConfig(),replayPlayer:l,boostPadOverlayEnabled:o.getBoostPadOverlayEnabled(),recording:n.getRecordingWindowController()?.getConfigSnapshot()??{},singletonWindows:i(),statsWindows:s(),moduleConfigs:KW(n.modules)})},r=o=>{VW(o1(n.modules),o)};return{setApplyingConfig(o){e=o},reset(){t!==null&&(window.clearTimeout(t),t=null),e=!1},scheduleConfigUrlUpdate(){e||(t!==null&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null;const o=vW(new URL(window.location.href),a());window.history.replaceState(window.history.state,"",o)},150))},applyConfigToStaticControls(o){if(n.getActiveModulesRuntime().applyOverlayConfig(o.overlays),n.skipPostGoalTransitions.checked=o.playback.skipPostGoalTransitions??n.skipPostGoalTransitions.checked,n.skipKickoffs.checked=o.playback.skipKickoffs??n.skipKickoffs.checked,n.hitboxWireframes.checked=o.overlays.hitboxWireframes,n.hitboxOnlyMode.checked=o.overlays.hitboxOnlyMode,n.getCameraControlsController()?.applyNameplateLiftUu(o.camera.nameplateLiftUu),n.getCameraControlsController()?.setAutoPossessionEnabled(o.camera.autoPossession??!1,{requestConfigSync:!1}),o.playback.rate!==void 0){const l=cf(o.playback.rate);n.playbackRate.value=`${l}`,n.playbackRateReadout.textContent=qg(l)}n.getRecordingWindowController()?.applyConfig(o.recording),r(o.moduleConfigs),n.getFloatingWindowController()?.applySingletonConfigs(o.singletonWindows),n.getStatsWindowsController()?.replaceFromConfig(o.statsWindows),n.renderModuleSummary(),n.renderModuleSettings(),n.renderTimelineEventCount()}}}function c6(n){const e=t=>{const i=n.getLauncherToggle();n.getLauncherMenu().hidden=!t,i.setAttribute("aria-label",t?"Close menu":"Open menu"),i.setAttribute("aria-expanded",t?"true":"false")};return{bringWindowToFront(t){n.getFloatingWindowController()?.bringToFront(t)},showWindow(t){n.getFloatingWindowController()?.show(t)},toggleWindow(t){n.getFloatingWindowController()?.toggle(t)},hideWindow(t){n.getFloatingWindowController()?.hide(t)},setLauncherOpen:e,openReplayFilePicker(){n.getFileInput().click(),e(!1)},installWindowDragging(t,i){n.getFloatingWindowController()?.installDragging(t,i)},getElementWindowId(t){return t.closest("[data-window-id]")?.dataset.windowId??null}}}const A_=4096,hr=5120,u6=893,d6=642,qi=1/105;class h6{constructor(e){this.options=e,this.options.body.innerHTML=` +
`}).join("")}
`},renderFocusedPlayerStats(e,t,i){return`
Events${ve(i.statsTimeline,"dodge").filter(a=>At(a.player)===e).length}
`}}}function R$(){return{id:"half-flip",label:"Half Flip",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Nx(i.half_flip),i.half_flip?.is_last_half_flip?'Last Half Flip':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Nx(i.half_flip):""}}}function P$(){return{id:"wavedash",label:"Wavedash",setup(){},teardown(){},onBeforeRender(){},getTimelineEvents(n){return T4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ux(i.wavedash),i.wavedash?.is_last_wavedash?'Last Wavedash':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ux(i.wavedash):""}}}function I$(){return ai({id:"whiff",label:"Whiff",select:n=>n.whiff,render:n=>JG(n),getTimelineEvents(n){return R4(n.statsTimeline,n.replay)}})}function L$(n){let e=null,t=null;const i=new Set,s=["speed_band","height_band"];return{id:"movement",label:"Movement",setup(){a()},teardown(){},onBeforeRender(){},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const c=zt(l.statsFrameLookup,o);return c?si(c.players,u=>Tn(u.name,u.is_team_0,Mx(u.movement,{breakdownClasses:r()}))):""},renderFocusedPlayerStats(o,l,c){const u=wn(c,l,o);return u?Mx(u.movement,{breakdownClasses:r()}):""},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Movement breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";for(const h of[{className:"speed_band",label:"Speed band"},{className:"height_band",label:"Height band"}]){const f=document.createElement("label");f.className="toggle";const p=document.createElement("input");p.type="checkbox",p.dataset.breakdownClass=h.className,p.addEventListener("change",()=>{p.checked?i.add(h.className):i.delete(h.className),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const g=document.createElement("span");g.textContent=h.label,f.append(p,g),d.append(f)}e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=r();t.textContent=o.length>0?o.map(l=>({speed_band:"Speed band",height_band:"Height band"})[l]).join(" + "):"Total only"}}}function r(){return s.filter(o=>i.has(o))}}function k$(){return ai({id:"powerslide",label:"Powerslide",select:n=>n.powerslide,render:n=>ZG(n),getTimelineEvents(n){return b4(n.statsTimeline,n.replay)}})}function D$(){return ai({id:"rotation",label:"Rotation",select:n=>n.rotation,render:n=>GG(n)})}function O$(){return ai({id:"demo",label:"Demo",select:n=>n.demo,render:n=>QG(n)})}function F$(){return ai({id:"bump",label:"Bump",select:n=>n.bump,render:n=>e$(n),getTimelineEvents(n){return M4(n.statsTimeline,n.replay)}})}function N$(){let n=null,e=1;return{id:WE,label:"Relative Positioning",setup(t){e=t.fieldScale,n=new o5(t.player.sceneState.replayRoot,t.replay,e)},teardown(){n?.dispose(),n=null},onBeforeRender(t){n?.update(t,e)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>{const r=Q4(i.replay,At(a.player_id),t),o=J4[r];return Tn(a.name,a.is_team_0,Px(a.positioning),`${o}`)}):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?Px(a.positioning):""}}}function U$(){return{id:"absolute-positioning",label:"Absolute Positioning",setup(n){Ax.acquire(n)},teardown(){Ax.release()},onBeforeRender(){},getTimelineRanges(n){return Z4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ix(i.positioning))):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ix(i.positioning):""}}}function B$(n,e={}){return[p$(),m$(),_$(),g$(),y$(),S$(),M$(),T$(),eG(n),tG(),nG(),iG(),sG(),N$(),U$(),D$(),A$(),C$(),R$(),P$(),h$(n),I$(),E$(),x$(),w$(),b$(),f$(n,e.boostPickupFilters),v$(),L$(n),k$(),O$(),F$()]}const z$=new Set(["player_id","name","is_team_0"]),H$=["is_last_","time_since_last_","frames_since_last_"];function V$(n){return n===null||typeof n=="number"||typeof n=="string"||typeof n=="boolean"||Array.isArray(n)}function G$(n,e){let t=n;for(const i of e){if(!t||typeof t!="object"||Array.isArray(t))return;t=t[i]}return t}function $$(n){return n==null?"--":typeof n=="number"?Number.isFinite(n)?Number.isInteger(n)?`${n}`:`${Number(n.toFixed(3))}`:"--":typeof n=="boolean"?n?"true":"false":Array.isArray(n)?n.length===0?"[]":JSON.stringify(n):`${n}`}function W$(n,e){if(H$.some(a=>n.startsWith(a)))return!0;const t=n.match(/^last_(.+)_time$/),i=n.match(/^last_(.+)_frame$/),s=t?.[1]??i?.[1];return s?`is_last_${s}`in e||`time_since_last_${s}`in e||`frames_since_last_${s}`in e:!1}function M_(n,e,t,i){if(!n||typeof n!="object"||Array.isArray(n))return;const s=n;for(const[a,r]of Object.entries(s)){if(e==="player"&&t.length===0&&z$.has(a)||W$(a,s))continue;const o=[...t,a];if(V$(r)){const l=`${e}:${o.join(".")}`;i.push({id:l,label:o.join("."),category:o[0]??e,scope:e,path:o,read(c){return G$(c,o)},format:$$});continue}M_(r,e,o,i)}}function X$(n){const e=new Set;return n.filter(t=>e.has(t.id)?!1:(e.add(t.id),!0))}function K$(n,e){const t=[];return n&&M_(n,"player",[],t),e&&M_(e,"team",[],t),X$(t).sort((i,s)=>i.label.localeCompare(s.label))}function q$(){return K$(uE(),Ql())}function nc(n){return q$()}function QE(n){return n.toLowerCase().replace(/[_/.-]+/g," ").replace(/\s+/g," ").trim()}function Y$(n){return QE(n).split(" ").filter(Boolean)}function j$(n,e){const t=Y$(e);if(t.length===0)return 0;const i=QE([n.scope,n.category,n.label,n.id,...n.path].join(" "));let s=0;for(const a of t){const r=i.indexOf(a);if(r<0)return null;s+=r}return s+i.length/1e3}function Z$(n,e){return n.map((t,i)=>({definition:t,index:i,score:j$(t,e)})).filter(t=>t.score!==null).sort((t,i)=>t.score-i.score||t.index-i.index).map(t=>t.definition)}function wi(n){if(!Number.isFinite(n))return"--";const e=Math.floor(Math.max(0,n)/60),t=Math.max(0,n)-e*60;return`${e}:${t.toFixed(1).padStart(4,"0")}`}class J${constructor(e){this.options=e}statsWindows=new Map;nextStatsWindowId=1;getConfigs(){return[...this.statsWindows.values()].map(e=>({id:e.id,kind:e.kind,placement:this.options.readWindowPlacement(e.element),playerId:e.playerId,team:e.team,entries:e.entries.map(t=>({statId:t.statId,targetId:t.targetId}))}))}clear(){for(const e of this.statsWindows.values())e.element.remove();this.statsWindows.clear(),this.nextStatsWindowId=1}replaceFromConfig(e){this.clear();for(const t of e)this.create(t.kind,t)}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0,t={}){for(const i of this.statsWindows.values())t.preserveOpenPickers&&(i.pickerOpen||i.element.contains(document.activeElement))||this.renderStatsWindow(i,e)}create(e,t){const i=t?.id??`stats-${this.nextStatsWindowId++}`,s=Number.parseInt(i.replace(/^stats-/,""),10);Number.isFinite(s)&&(this.nextStatsWindowId=Math.max(this.nextStatsWindowId,s+1));const{x:a,y:r}=this.getStatsWindowDefaultPosition(),o=document.createElement("section");o.className="stats-window",o.dataset.windowId=i,o.style.setProperty("--window-x",`${a}px`),o.style.setProperty("--window-y",`${r}px`),t&&this.options.applyWindowPlacement(o,t.placement);const l=document.createElement("header");l.className="stats-window-header";const c=document.createElement("div");c.className="stats-window-actions";const u=document.createElement("button");if(u.type="button",u.className="stats-window-action",u.textContent="Hide",c.append(u),this.hasStatsWindowScopeSelector(e))l.classList.add("stats-window-header-actions-only"),l.append(c);else{const f=document.createElement("h2");f.textContent=this.getStatsWindowTitle(e),l.append(f,c)}const d=document.createElement("div");d.className="stats-window-body",o.append(l,d),this.options.layer.append(o);const h={id:i,kind:e,entries:t?.entries.map(f=>({key:`${i}:${f.statId}:${f.targetId??"scope"}`,statId:f.statId,targetId:f.targetId}))??[],playerId:t?.playerId??this.options.getReplayPlayer()?.replay.players[0]?.id??null,team:t?.team??"blue",pickerOpen:!1,query:"",element:o,body:d};return u.addEventListener("click",()=>{o.hidden=!0,this.options.requestConfigSync()}),this.statsWindows.set(i,h),t||this.options.bringWindowToFront(o),this.options.setLauncherOpen(!1),this.renderStatsWindow(h),this.options.requestConfigSync(),h}getStatById(e){return this.options.getStatRegistry().find(t=>t.id===e)??null}getCurrentStatsFrame(e){const t=this.options.getStatsFrameLookup();return t?zt(t,e):null}getTeamSnapshot(e,t){return t==="blue"?e.team_zero??null:e.team_one??null}getTeamLabel(e){return e==="blue"?"Blue":"Orange"}getPlayerTeamClass(e){const t=this.options.getReplayPlayer()?.replay.players.find(i=>i.id===e);return t?na(t.isTeamZero):null}getTeamScopeClass(e){return na(e==="blue")}appendGroupedPlayerOptions(e,t){const i=this.options.getReplayPlayer()?.replay.players??[];for(const s of["blue","orange"]){const a=i.filter(o=>o.isTeamZero===(s==="blue"));if(a.length===0)continue;const r=document.createElement("optgroup");r.label=`${this.getTeamLabel(s)} team`;for(const o of a)r.append(new Option(o.name,o.id,o.id===t,o.id===t));e.append(r)}}getStatsWindowScopeTeamClass(e){return e.kind==="player"?this.getPlayerTeamClass(e.playerId):e.kind==="team"?this.getTeamScopeClass(e.team??"blue"):null}getStatTargetTeamClass(e,t){return e.scope==="player"?this.getPlayerTeamClass(t):this.getTeamScopeClass(t==="orange"?"orange":"blue")}getStatsWindowTitle(e){switch(e){case"player":return"Player stats";case"team":return"Team stats";case"all-players":return"All players stats";case"all-teams":return"All teams stats";case"kickoff-overview":return"Kickoff details";case"goals-overview":return"Goal labels";case"ad-hoc":return"Ad hoc stats"}}hasStatsWindowScopeSelector(e){return e==="player"||e==="team"}hasStatsWindowStatPicker(e){return e!=="goals-overview"&&e!=="kickoff-overview"}getStatsWindowAllowedScope(e){switch(e){case"player":case"all-players":return"player";case"team":case"all-teams":return"team";case"kickoff-overview":return null;case"goals-overview":return null;case"ad-hoc":return null}}getStatsWindowDefaultPosition(){const e=this.statsWindows.size*18;return{x:Math.max(12,Math.min(window.innerWidth-360,96+e)),y:Math.max(64,Math.min(window.innerHeight-240,96+e))}}renderStatsWindow(e,t=this.options.getReplayPlayer()?.getState().frameIndex??0){const i=document.activeElement,s=i instanceof HTMLInputElement&&i.dataset.statsWindowSearch===e.id,a=s?i.selectionStart:null,r=s?i.selectionEnd:null,o=s?i.selectionDirection:null;if(e.body.replaceChildren(),this.renderStatsWindowScope(e),this.hasStatsWindowStatPicker(e.kind)&&(this.renderStatsWindowAddControl(e),this.renderStatsWindowPicker(e)),this.renderStatsWindowEntries(e,t),s){const l=e.body.querySelector(`input[data-stats-window-search="${e.id}"]`);l?.focus({preventScroll:!0}),l&&a!==null&&r!==null&&l.setSelectionRange(a,r,o??"none")}}renderStatsWindowScope(e){if(e.kind!=="player"&&e.kind!=="team")return;const t=document.createElement("div");t.className="stats-window-scope-row";const i=document.createElement("select");i.className="stats-window-scope-select";const s=this.getStatsWindowScopeTeamClass(e);s&&i.classList.add(s),i.setAttribute("aria-label",e.kind==="player"?"Player stats target":"Team stats target"),e.kind==="player"?(this.appendGroupedPlayerOptions(i,e.playerId),i.value=e.playerId??"",i.addEventListener("change",()=>{e.playerId=i.value||null,this.renderStatsWindow(e),this.options.requestConfigSync()})):(i.append(new Option("Blue","blue",e.team==="blue",e.team==="blue"),new Option("Orange","orange",e.team==="orange",e.team==="orange")),i.value=e.team??"blue",i.addEventListener("change",()=>{e.team=i.value==="orange"?"orange":"blue",this.renderStatsWindow(e),this.options.requestConfigSync()})),t.append(i),e.body.append(t)}renderStatsWindowAddControl(e){const t=document.createElement("button");if(t.type="button",t.className="stats-window-add-button",t.textContent="+",t.title="Add stat",t.setAttribute("aria-label","Add stat"),t.setAttribute("aria-expanded",String(e.pickerOpen)),this.activateButton(t,()=>{e.pickerOpen=!e.pickerOpen,this.renderStatsWindow(e)}),this.hasStatsWindowScopeSelector(e.kind)){e.body.querySelector(".stats-window-scope-row")?.append(t);return}const i=document.createElement("div");i.className="stats-window-toolbar",i.append(t),e.body.append(i)}activateButton(e,t){let i=!1;e.addEventListener("pointerdown",s=>{e.disabled||(i=!0,s.preventDefault(),t())}),e.addEventListener("click",()=>{if(i){i=!1;return}e.disabled||t()})}renderStatsWindowPicker(e){const t=document.createElement("div");if(t.className="stats-window-picker",t.hidden=!e.pickerOpen,t.hidden){e.body.append(t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=document.createElement("input");s.type="search",s.placeholder="Search stats",s.value=e.query,s.dataset.statsWindowSearch=e.id;const a=document.createElement("div");a.className="stats-window-picker-list",s.addEventListener("input",()=>{e.query=s.value,this.renderStatsWindowPickerList(e,a,i)}),this.renderStatsWindowPickerList(e,a,i),t.append(s,a),e.body.append(t)}renderStatsWindowPickerList(e,t,i){t.replaceChildren();const s=this.options.getStatRegistry(),a=i?s.filter(l=>l.scope===i):s,r=Z$(a,e.query),o=new Map;for(const l of r){const c=o.get(l.category)??[];c.push(l),o.set(l.category,c)}for(const[l,c]of o){if(c.length<2)continue;const u=document.createElement("button");u.type="button",u.className="stats-window-picker-item",u.innerHTML=`Add all ${l}${c.length}`,this.activateButton(u,()=>{for(const d of c)this.addStatToWindow(e,d);this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(u)}for(const l of r){const c=document.createElement("button");c.type="button",c.className="stats-window-picker-item",c.innerHTML=`${l.label}${l.scope}`,c.disabled=e.kind!=="ad-hoc"&&e.entries.some(u=>u.statId===l.id),this.activateButton(c,()=>{this.addStatToWindow(e,l),this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(c)}if(r.length===0){const l=document.createElement("p");l.className="stat-window-empty",l.textContent=s.length===0?"No stats available.":"No matching stats.",t.append(l)}}addStatToWindow(e,t){const i=e.kind==="ad-hoc"?this.getDefaultAdHocTargetId(t):void 0;e.entries.some(s=>s.statId===t.id&&s.targetId===i)||e.entries.push({key:`${e.id}:${t.id}:${i??"scope"}`,statId:t.id,targetId:i})}getDefaultAdHocTargetId(e){return e.scope==="player"?this.options.getReplayPlayer()?.replay.players[0]?.id??"":"blue"}removeStatFromWindow(e,t){const i=e.entries.findIndex(s=>s.key===t);i>=0&&e.entries.splice(i,1)}renderStatsWindowEntries(e,t){if(e.kind==="goals-overview"){this.renderGoalLabelsOverview(e);return}if(e.kind==="kickoff-overview"){this.renderKickoffOverview(e,t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=e.entries.map(r=>({entry:r,definition:this.getStatById(r.statId)})).filter(r=>r.definition!==null&&(!i||r.definition.scope===i));if(s.length===0){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="No stats added.",e.body.append(r);return}const a=this.getCurrentStatsFrame(t);if(!a){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="Load a replay to show stats.",e.body.append(r);return}if(e.kind==="all-players"){this.renderAllPlayersStats(e,a,s);return}if(e.kind==="all-teams"){this.renderAllTeamsStats(e,a,s);return}if(e.kind==="player"){const r=e.playerId?a.players.find(o=>At(o.player_id)===e.playerId)??null:null;this.renderScopedStatList(e,r,s);return}if(e.kind==="team"){this.renderScopedStatList(e,this.getTeamSnapshot(a,e.team??"blue"),s);return}e.kind==="ad-hoc"&&this.renderAdHocStats(e,a,s)}renderGoalLabelsOverview(e){const t=this.options.getStatsTimeline(),i=this.options.getReplayPlayer()?.replay??null;if(!t||!i){this.appendStatsWindowEmpty(e,"Load a replay to show goal labels.");return}const s=[...ve(t,"goal_context")].sort((o,l)=>o.time-l.time),a=s.map((o,l)=>l);if(a.length===0){this.appendStatsWindowEmpty(e,"No goals loaded.");return}const r=document.createElement("div");r.className="goal-label-list";for(const o of a){const l=s[o]??null,c=[...l?.tags??[]].sort((M,C)=>M.kind.localeCompare(C.kind)||C.metadata.confidence-M.metadata.confidence),u=l?.time??0,d=l?.scorer??null,h=d?At(d):null,f=d?i.players.find(M=>M.id===h)?.name??h:"Unknown scorer",p=l?.scoring_team_is_team_0??null,g=document.createElement("section");g.className="goal-label-item",p!==null&&g.classList.add(na(p));const _=document.createElement("header"),m=document.createElement("h3");m.textContent=`Goal ${o+1}`;const v=document.createElement("span");v.textContent=`${wi(u)} · ${f}`,_.append(m,v);const y=document.createElement("div");if(y.className="goal-label-tags",c.length===0){const M=document.createElement("span");M.className="goal-label-tag goal-label-tag-empty",M.textContent="Unlabeled",y.append(M)}else for(const M of c){const C=document.createElement("span");C.className="goal-label-tag";const w=n4(M);C.textContent=`${Ai(M.kind)} ${Math.round(M.metadata.confidence*100)}%${w?` - ${w}`:""}`,y.append(C)}const b=document.createElement("div");b.className="goal-label-actions";const T=document.createElement("button");T.type="button",T.className="goal-label-watch",T.textContent="Watch",T.addEventListener("click",()=>{this.options.watchGoalReplay(u,h)});const x=document.createElement("button");x.type="button",x.textContent="Cue",x.addEventListener("click",()=>{this.options.cueGoalReplay(u)}),b.append(T,x),g.append(_,y,b),r.append(g)}e.body.append(r)}renderKickoffOverview(e,t){const i=this.options.getStatsTimeline(),s=this.options.getReplayPlayer()?.replay??null;if(!i||!s){this.appendStatsWindowEmpty(e,"Load a replay to show kickoff details.");return}const a=this.getClosestKickoffEvent(i,t);if(!a){this.appendStatsWindowEmpty(e,"No kickoff events loaded.");return}const r=a.payload.payload,o=document.createElement("section");o.className="kickoff-overview";const l=document.createElement("header");l.className="kickoff-overview-hero";const c=document.createElement("div"),u=document.createElement("h3");u.textContent=this.formatKickoffTitle(a);const d=document.createElement("span");d.textContent=`Nearest kickoff · resolved at ${wi(r.end_time)}`,c.append(u,d);const h=document.createElement("strong"),f=this.teamClassFromNullable(r.winning_team_is_team_0);h.className="kickoff-overview-victor",f&&h.classList.add(f),h.textContent=this.formatOutcome(r),l.append(c,h);const p=document.createElement("div");p.className="kickoff-overview-summary",p.append(this.renderKickoffMetric("Win strength",`${this.formatNullableNumber(r.win_strength,2)} · ${this.formatKickoffLabelValue("kickoff_win_strength",r.win_strength_band)}`),this.renderKickoffMetric("First touch",this.formatFirstTouch(r)),this.renderKickoffMetric("Advantage",this.formatAdvantage(r)),this.renderKickoffMetric("Contested",this.formatContested(r)));const g=document.createElement("div");g.className="kickoff-detail-grid",g.append(this.renderKickoffDetail("Kickoff start",wi(r.start_time)),this.renderKickoffDetail("Movement start",wi(r.movement_start_time)),this.renderKickoffDetail("Live action",r.live_action_start_time===null?"--":wi(r.live_action_start_time)),this.renderKickoffDetail("First touch",r.first_touch_time===null?"--":wi(r.first_touch_time)),this.renderKickoffDetail("Resolution",wi(r.end_time)),this.renderKickoffDetail("After first touch",this.formatSeconds(r.advantage_seconds_after_first_touch)));const _=document.createElement("div");_.className="kickoff-strategy-list",_.append(this.renderKickoffTeamStrategy("Blue",r.team_zero_taker,r.team_zero_non_takers),this.renderKickoffTeamStrategy("Orange",r.team_one_taker,r.team_one_non_takers)),o.append(l,p,g,_),e.body.append(o)}getClosestKickoffEvent(e,t){return ec(e).filter(s=>s.payload.kind==="kickoff").sort((s,a)=>{const r=this.kickoffFrameDistance(s.payload.payload,t),o=this.kickoffFrameDistance(a.payload.payload,t);return r!==o?r-o:s.payload.payload.start_frame-a.payload.payload.start_frame})[0]??null}kickoffFrameDistance(e,t){return t>=e.start_frame&&t<=e.end_frame?0:Math.min(Math.abs(t-e.start_frame),Math.abs(t-e.end_frame))}renderKickoffMetric(e,t){const i=document.createElement("div");i.className="kickoff-metric";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffDetail(e,t){const i=document.createElement("div");i.className="kickoff-detail-row";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffTeamStrategy(e,t,i){const s=document.createElement("section");s.className=`kickoff-strategy-team ${e==="Blue"?"team-blue":"team-orange"}`;const a=document.createElement("h4");a.textContent=e,s.append(a);const r=document.createElement("p");if(r.className="kickoff-strategy-line",r.textContent=t?`${this.getPlayerName(t.player)}: ${this.formatKickoffLabelValue("kickoff_approach",t.approach)} from ${this.formatKickoffLabelValue("kickoff_spawn",t.spawn_position)} (${this.formatKickoffLabelValue("taker_outcome",t.outcome)}, ${this.formatSeconds(t.time_to_ball)})`:"No taker detected",s.append(r),i.length>0){const o=document.createElement("ul");o.className="kickoff-support-list";for(const l of i){const c=document.createElement("li");c.textContent=`${this.getPlayerName(l.player)}: ${this.formatKickoffLabelValue("support_behavior",l.support_behavior)} from ${this.formatKickoffLabelValue("kickoff_spawn",l.spawn_position)}`,o.append(c)}s.append(o)}return s}formatOutcome(e){return e.winning_team_is_team_0===!0?"Blue wins":e.winning_team_is_team_0===!1?"Orange wins":e.outcome==="neutral"?"Neutral":"Unknown"}formatFirstTouch(e){if(!e.first_touch_player)return"--";const t=e.first_touch_team_is_team_0===!0?"Blue":e.first_touch_team_is_team_0===!1?"Orange":"Unknown",i=e.first_touch_time===null?"--":wi(e.first_touch_time);return`${t} · ${this.getPlayerName(e.first_touch_player)} · ${i}`}formatAdvantage(e){if(e.advantage==="no_advantage")return"No advantage";const t=e.advantage_team_is_team_0===!0?"Blue":e.advantage_team_is_team_0===!1?"Orange":"Unknown",i=e.advantage.replace(/^team_(zero|one)_/,""),s=e.advantage_player?` · ${this.getPlayerName(e.advantage_player)}`:"",a=e.advantage_time===null?"":` · ${wi(e.advantage_time)}`;return`${t} ${this.formatKickoffLabelValue("kickoff_advantage",i)}${s}${a}`}formatContested(e){return e.kickoff_possession_outcome==="contested"?"Yes":e.kickoff_possession_team_is_team_0===!0?`No · Blue ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:e.kickoff_possession_team_is_team_0===!1?`No · Orange ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:`No · ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`}formatPossessionOutcome(e){return e.endsWith("_advantage")?"advantage":e.endsWith("_possession")?"possession":this.formatKickoffLabelValue("kickoff_possession_outcome",e)}formatKickoffType(e){return this.formatKickoffLabelValue("kickoff_type",e)}formatKickoffTitle(e){const t=e.payload.payload,i=this.formatKickoffDirection(t.kickoff_direction),s=[this.formatKickoffType(t.kickoff_type),i].filter(Boolean).join(" ");return[e.meta.label,s].filter(Boolean).join(" · ")}formatKickoffDirection(e){return e==="unknown"?"":`(${this.formatKickoffLabelValue("kickoff_direction",e)})`}formatNullableNumber(e,t){return e===null||!Number.isFinite(e)?"--":e.toFixed(t)}formatSeconds(e){return e===null||!Number.isFinite(e)?"--":`${e.toFixed(2)}s`}formatLabel(e){return e.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_").replaceAll("_"," ").replace(/\b\w/g,t=>t.toUpperCase())}formatKickoffLabelValue(e,t){const i=t.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_");return e==="kickoff_advantage"?this.formatLabel(i.replace(/^blue_/,"").replace(/^orange_/,"")):e==="kickoff_possession_outcome"?this.formatLabel(i.replace(/^blue_/,"Blue ").replace(/^orange_/,"Orange ")):this.formatLabel(i)}teamClassFromNullable(e){return e===null?null:na(e)}getPlayerName(e){const t=At(e);return this.options.getReplayPlayer()?.replay.players.find(i=>i.id===t)?.name??t}appendStatsWindowEmpty(e,t){const i=document.createElement("p");i.className="stat-window-empty",i.textContent=t,e.body.append(i)}renderScopedStatList(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i)s.append(this.renderStatRow(e,a,r,t?r.format(r.read(t)):"--"));e.body.append(s)}renderAllPlayersStats(e,t,i){const s=document.createElement("div");s.className="stats-window-team-list";for(const a of["blue","orange"]){const r=t.players.filter(h=>h.is_team_0===(a==="blue"));if(r.length===0)continue;const o=document.createElement("section");o.className=`stats-window-team-group ${this.getTeamScopeClass(a)}`;const l=document.createElement("header");l.className="stats-window-team-header";const c=document.createElement("h3");c.textContent=`${this.getTeamLabel(a)} team`;const u=document.createElement("span");u.textContent=`${r.length} player${r.length===1?"":"s"}`,l.append(c,u),o.append(l);const d=document.createElement("div");d.className="stats-window-entity-list";for(const h of r){const f=document.createElement("section");f.className=`stats-window-entity ${na(h.is_team_0)}`;const p=document.createElement("h4");p.className="stats-window-entity-title",p.textContent=h.name,f.append(p);for(const{entry:g,definition:_}of i)f.append(this.renderStatRow(e,g,_,_.format(_.read(h))));d.append(f)}o.append(d),s.append(o)}e.body.append(s)}renderAllTeamsStats(e,t,i){const s=document.createElement("div");s.className="stats-window-entity-list";for(const a of["blue","orange"]){const r=this.getTeamSnapshot(t,a),o=document.createElement("section");o.className=`stats-window-entity ${this.getTeamScopeClass(a)}`;const l=document.createElement("h3");l.className="stats-window-entity-title",l.textContent=this.getTeamLabel(a),o.append(l);for(const{entry:c,definition:u}of i)o.append(this.renderStatRow(e,c,u,r?u.format(u.read(r)):"--"));s.append(o)}e.body.append(s)}renderAdHocStats(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i){const o=this.getAdHocTarget(t,r,a.targetId);s.append(this.renderStatRow(e,a,r,o?r.format(r.read(o)):"--"))}e.body.append(s)}getAdHocTarget(e,t,i){return t.scope==="player"?e.players.find(s=>At(s.player_id)===i)??e.players[0]??null:this.getTeamSnapshot(e,i==="orange"?"orange":"blue")}renderStatRow(e,t,i,s){const a=document.createElement("div");a.className="stats-window-stat-row";const r=document.createElement("span");if(r.className="stats-window-stat-name",r.textContent=i.label,e.kind==="ad-hoc"){const c=document.createElement("select");c.className="stats-window-stat-target";const u=this.getStatTargetTeamClass(i,t.targetId);u&&c.classList.add(u),i.scope==="player"?this.appendGroupedPlayerOptions(c,t.targetId):c.append(new Option("Blue","blue",t.targetId==="blue",t.targetId==="blue"),new Option("Orange","orange",t.targetId==="orange",t.targetId==="orange")),c.value=t.targetId??"",c.addEventListener("change",()=>{const d=c.value;if(e.entries.some(f=>f!==t&&f.statId===t.statId&&f.targetId===d)){this.renderStatsWindow(e);return}const h=e.entries.findIndex(f=>f.key===t.key);h>=0&&(e.entries[h]={key:`${e.id}:${t.statId}:${d}`,statId:t.statId,targetId:d}),this.renderStatsWindow(e),this.options.requestConfigSync()}),r.append(" ",c)}const o=document.createElement("span");o.className="stats-window-stat-value",o.textContent=s;const l=document.createElement("button");return l.type="button",l.className="stats-window-stat-remove",l.textContent="x",l.addEventListener("click",()=>{this.removeStatFromWindow(e,t.key),this.renderStatsWindow(e),this.options.requestConfigSync()}),a.append(r,o,l),a}}function Q$(n){return new J$(n)}const eW=new Set(["module:dodge","module:touch","module:powerslide"]),tW=["stats-stream:"],ch=["#3b82f6","#06b6d4","#22c55e","#a855f7","#f97316","#ef4444","#f59e0b","#ec4899"],df="#d1d9e0",jg=ch[0],Zg=ch[4],nW=[{id:"core",label:"Shots, saves, assists",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="shot"||e.kind==="save"||e.kind==="assist")}},{id:"demo",label:"Demos",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="demo")}}],iW=[];function e1(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function t1(n){if(typeof n=="string"&&n.length>0)return n;if(!e1(n))return null;const[e,t]=Object.entries(n)[0]??[];return!e||t==null?null:typeof t=="string"||typeof t=="number"?`${e}:${t}`:`${e}:${JSON.stringify(t)}`}function n1(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>e.slice(0,1).toUpperCase()).join("").slice(0,3)||"E"}function sW(n){if(typeof n!="number"||!Number.isFinite(n))return null;const e=Math.abs(n)<1?2:1;return`${n.toFixed(e).replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}s`}function Wi(n){return typeof n!="string"||n.length===0?null:n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function aW(n){return n==="team_zero_side"?"Blue side":n==="team_one_side"?"Orange side":n==="neutral"?"Neutral zone":Wi(n)}function rW(n){const e=Wi(n);return e?`${e.toLowerCase()} third`:null}function oW(n){return n==="team_zero_third"?"Blue third":n==="team_one_third"?"Orange third":n==="neutral_third"?"Neutral third":Wi(n)}function lW(n){return n==="team_zero"?"Blue":n==="team_one"?"Orange":n==="neutral"?"Neutral":Wi(n)}function ud(n){return e1(n.payload.payload)?n.payload.payload:{}}function i1(n){return n===!0?jg:n===!1?Zg:null}function cW(n){return n==="team_zero_side"?jg:n==="team_one_side"?Zg:n==="neutral"?df:null}function uW(n){return n==="team_zero"?jg:n==="team_one"?Zg:n==="neutral"?df:null}function dW(n){return typeof n=="boolean"?i1(n):null}const hW={ball_half(n){return cW(ud(n).field_half)},possession(n){return uW(ud(n).possession_state)},player_possession(n){return dW(ud(n).is_team_0)}};function s1(n,e,t){return hW[n]?.(e)??i1(t)??df}function ui(n){return n.filter(e=>!!e).join(" | ")}function fW({event:n,playerName:e,streamLabel:t,teamLabel:i}){const s=ud(n),a=sW(s.duration);if(n.payload.kind==="ball_half"){const r=aW(s.field_half),o=s.active===!1?"Ball half inactive":r?`Ball on ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="ball_third"){const r=oW(s.field_third),o=s.active===!1?"Ball third inactive":r?`Ball in ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="territorial_pressure"){const r=Wi(s.end_reason),o=`${i??""} territorial pressure`.trim();return ui([r?`${o} ended: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="possession"){const r=lW(s.possession_state),o=rW(s.field_third),l=r?`${r} possession`:t;return ui([l,o,a])}if(n.payload.kind==="controlled_play"){const r=e?`${e} controlled play`:t;return ui([r,a])}if(n.payload.kind==="ball_carry"){const r=e?`${e} ${t.toLowerCase()}`:t;return ui([r,a])}if(n.payload.kind==="player_activity"){const r=Wi(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="field_third"){const r=Wi(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} third`:o,a])}if(n.payload.kind==="field_half"){const r=Wi(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} half`:o,a])}if(n.payload.kind==="ball_depth"){const r=Wi(s.state),o=e?`${e} ball depth`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="depth_role"){const r=Wi(s.state),o=e?`${e} depth role`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="shadow_defense"){const r=e?`${e} shadow defense`:t;return ui([r,a])}if(n.payload.kind==="rotation_role"){const r=Wi(s.state),o=e?`${e} rotation`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}return e?`${e} ${t.toLowerCase()}`:t}function pW(n,e,t){const i=Ai(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{const o=a.meta.timing.type==="moment"?{time:a.meta.timing.time,frame:a.meta.timing.frame}:{time:a.meta.timing.end_time,frame:a.meta.timing.end_frame},l=t1(a.meta.primary_player),c=l?s.get(l)??l:null,u=a.meta.team_is_team_0??null,d=u==null?null:u?"Blue":"Orange",h=a.meta.id||`${e}:${o.frame??o.time}:${r}`,f=s1(e,a,u);return[{id:`stats-stream:${h}`,time:n.replay.frames[o.frame??-1]?.time??o.time,frame:o.frame,kind:e,label:fW({event:a,playerName:c,streamLabel:i,teamLabel:d}),shortLabel:n1(e),playerId:l,playerName:c,isTeamZero:u,color:f}]})}function mW(n,e,t){const i=Ai(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{if(a.meta.timing.type!=="span")return[];const o={startTime:a.meta.timing.start_time,endTime:a.meta.timing.end_time,startFrame:a.meta.timing.start_frame,endFrame:a.meta.timing.end_frame},l=a.meta.team_is_team_0??null,c=l==null?null:l?"Blue":"Orange",u=t1(a.meta.primary_player),d=u?s.get(u)??u:null,h=s1(e,a,l),f=a.meta.id||`${e}:${o.startFrame??o.startTime}:${o.endFrame??o.endTime}:${r}`,p=d?`${d} ${i.toLowerCase()}`:c?`${c} ${i.toLowerCase()}`:i;let g=`stats-stream:${e}`,_=i;return a.meta.scope==="player"&&u?(g=`stats-stream:${e}:player:${u}`,_=d?`${d} ${i.toLowerCase()}`:i):a.meta.scope==="team"&&l!=null&&(g=`stats-stream:${e}:team:${l?"0":"1"}`,_=c?`${c} ${i.toLowerCase()}`:i),[{id:`stats-stream:${f}`,startTime:n.replay.frames[o.startFrame??-1]?.time??o.startTime,endTime:Math.max(n.replay.frames[o.startFrame??-1]?.time??o.startTime,n.replay.frames[o.endFrame??-1]?.time??o.endTime),lane:g,laneLabel:_,label:p,shortLabel:n1(e),isTeamZero:l,color:h}]}).sort((a,r)=>a.startTime!==r.startTime?a.startTime-r.startTime:(a.id??"").localeCompare(r.id??""))}function _W(n,e,t,i){return[...new Set([...XT,...ec(n.statsTimeline).map(a=>a.meta.stream)])].flatMap(a=>{const r=ec(n.statsTimeline).filter(u=>u.meta.stream===a);if(i.has(a)&&r.length>0)return[];const o=r.some(u=>u.meta.timing.type==="span"),l=o?mW(n,a,r):[],c=pW(n,a,r);return[{id:`stats-stream:${a}`,playlistId:`stats-stream:${a}`,timelineKey:`stats-stream:${a}`,timelineId:`stats-stream:${a}`,group:"Event streams",label:Ai(a),count:o?l.length:c.length,active:e.has(`stats-stream:${a}`),buildTimelineEvents(){return o?[]:c},buildPlaylistEvents(){return c},buildTimelineRanges:o?()=>l:void 0,setActive(u){t(`stats-stream:${a}`,u)}}]})}function gW(n){return new Set([...n.filter(e=>e.getTimelineEvents).map(e=>e.id),...NE])}function yW(){return[...NE].sort((n,e)=>Ai(n).localeCompare(Ai(e)))}function vW({ctx:n,modules:e,activeTimelineEventSourceIds:t,activeMechanicTimelineKinds:i,toggleEventSource:s,setMechanicTimelineKind:a}){if(!n)return[];const r=[];for(const o of nW){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`replay:${o.id}`,timelineKey:`events:${o.id}`,timelineId:`events:${o.id}`,group:"Replay",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of e.filter(l=>l.getTimelineEvents)){const l=o.getTimelineEvents?.(n)??[],c=l.length;r.push({id:o.id,playlistId:`module:${o.id}`,timelineKey:`module:${o.id}`,timelineId:`module:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of iW){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`extra:${o.id}`,timelineKey:`extra:${o.id}`,timelineId:`extra:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}r.push(..._W(n,t,s,gW(e)));for(const o of yW()){const l=FE[o](n.statsTimeline,n.replay),c=l.length;r.push({id:`mechanic:${o}`,playlistId:`mechanic:${o}`,timelineKey:`mechanic:${o}`,timelineId:`mechanic:${o}`,group:"Event types",label:Ai(o),count:c,active:i.has(o),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){a(o,u)}})}return r.sort((o,l)=>o.label.localeCompare(l.label))}function bW(n,e){if(!n)return[];const t=[{id:"replay:goals",group:"Replay",label:"Goals",events:n.replay.timelineEvents.filter(s=>s.kind==="goal")}],i=e.map(s=>({id:s.playlistId,group:s.group,label:s.label,events:s.buildPlaylistEvents()}));return[...t,...i]}function E_(n,e){const t=n.map(i=>i.id);return e===null?new Set(t.filter(i=>!eW.has(i)&&!tW.some(s=>i.startsWith(s)))):new Set(t.filter(i=>e.has(i)))}function xW(n,e){const t=n.playerId??null,i=t?e.findIndex(s=>s.id===t):-1;return i>=0?ch[i%ch.length]:n.color??df}function wW({sources:n,activeSourceIds:e,replayPlayers:t}){const i=E_(n,e);return n.filter(s=>i.has(s.id)).flatMap(s=>s.events.map((a,r)=>({key:`${s.id}:${a.id??`${a.kind}:${a.time}:${r}`}`,sourceId:s.id,sourceLabel:s.label,event:a,color:xW(a,t)}))).sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:(s.event.label??s.sourceLabel).localeCompare(a.event.label??a.sourceLabel))}class SW{constructor(e){this.options=e}getSources(e=this.options.getContext()){return vW({ctx:e,modules:this.options.modules,activeTimelineEventSourceIds:this.options.getActiveTimelineEventSourceIds(),activeMechanicTimelineKinds:this.options.getActiveMechanicTimelineKinds(),toggleEventSource:this.options.toggleEventSource,setMechanicTimelineKind:this.options.setMechanicTimelineKind})}countVisibleSources(e){return e.replay.timelineEvents.filter(i=>i.kind==="goal").length+this.getSources(e).filter(i=>i.active).reduce((i,s)=>i+s.count,0)}render(){const{body:e}=this.options;e.replaceChildren();const t=this.getSources();if(t.length===0){const d=document.createElement("p");d.className="stat-window-empty",d.textContent="No events loaded.",e.append(d);return}const i=document.createElement("div");i.className="mechanics-actions";const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.addEventListener("click",()=>{for(const d of t)d.setActive(!0);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const a=document.createElement("span");a.textContent="All events";const r=document.createElement("strong");r.textContent=`${t.length}`,s.append(a,r);const o=document.createElement("button");o.type="button",o.className="module-summary-item",o.addEventListener("click",()=>{for(const d of t)d.setActive(!1);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const l=document.createElement("span");l.textContent="No events";const c=document.createElement("strong");c.textContent="Off",o.append(l,c),i.append(s,o),e.append(i);const u=this.renderSourceList(t);u&&e.append(u)}renderSourceList(e){if(e.length===0)return null;const t=document.createElement("div");t.className="module-list mechanics-list mechanics-event-list",t.style.setProperty("--event-source-columns",`${TW(e.length)}`);for(const i of e){const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.dataset.active=i.active?"true":"false",s.setAttribute("aria-pressed",i.active?"true":"false"),s.addEventListener("click",()=>{i.setActive(!i.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderTimelineEventCount()});const a=document.createElement("span");a.textContent=i.label;const r=document.createElement("strong");r.textContent=`${i.active?"On":"Off"} ${i.count}`,s.append(a,r),t.append(s)}return t}}function TW(n){return window.innerWidth<640?1:window.innerWidth<900?n>=7?2:1:n>=13?3:n>=7?2:1}function MW(n){return new SW(n)}const EW=new Set(["ceiling-shot","fifty-fifty","ball_half",WE,"absolute-positioning","dodge","speed-flip","touch"]),Vx="touch";class CW{constructor(e){this.options=e}renderSummary(){const{summary:e}=this.options.elements;e.replaceChildren();const t=this.options.getTimelineSources(),i=t.map(o=>this.renderTimelineSourceToggle(o)),s=[],a=[],r=this.options.getContext();for(const o of this.options.modules){const l=EW.has(o.id);!o.getTimelineEvents&&!o.getTimelineRanges&&!l||(t.length===0&&o.getTimelineEvents&&i.push(this.renderCapabilityToggle(o.id,fm(o,"events"),"events")),o.getTimelineRanges&&s.push(this.renderCapabilityToggle(o.id,fm(o,"ranges"),"ranges",r?o.getTimelineRanges(r).length:void 0)),l&&a.push(this.renderCapabilityToggle(o.id,fm(o,"effects"),"effects")))}a.push(this.renderBoostPickupAnimationToggle()),e.append(hm("Timeline markers",i),hm("Timeline ranges",s),hm("In-game visualizations",a))}renderSettings(){const{settings:e}=this.options.elements;e.replaceChildren();const t=this.options.getContext(),i=this.options.getActiveModules().filter(s=>s.id!=="boost"&&s.id!==Vx).map(s=>s.renderSettings?.(t)??null).filter(s=>s instanceof HTMLElement);if(i.length===0){e.hidden=!0,this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow();return}e.hidden=!1,e.append(...i),this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow()}renderBoostPickupAnimationToggle(){const e=this.options.getBoostPickupAnimationEnabled(),t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e?"true":"false",t.setAttribute("aria-pressed",e?"true":"false"),t.addEventListener("click",this.options.toggleBoostPickupAnimation);const i=document.createElement("span");i.textContent="Boost pickup animation";const s=document.createElement("strong");return s.textContent=e?"On":"Off",t.append(i,s),t}renderCapabilityToggle(e,t,i,s){const r=this.options.getActiveCapabilityIds(i).has(e),o=document.createElement("button");o.type="button",o.className="module-summary-item",o.dataset.active=r?"true":"false",o.setAttribute("aria-pressed",r?"true":"false"),o.addEventListener("click",()=>{this.options.toggleCapability(e,i,!this.options.getActiveCapabilityIds(i).has(e))});const l=document.createElement("span");l.textContent=t;const c=document.createElement("strong");return c.textContent=Gx(r,s),o.append(l,c),o}renderTimelineSourceToggle(e){const t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e.active?"true":"false",t.setAttribute("aria-pressed",e.active?"true":"false"),t.addEventListener("click",()=>{e.setActive(!e.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync(),this.renderSummary()});const i=document.createElement("span");i.textContent=AW(e);const s=document.createElement("strong");return s.textContent=Gx(e.active,e.count),t.append(i,s),t}renderBoostPickupFiltersWindow(){const e=this.options.getContext(),t=this.options.boostPickupFilters.renderSettings(e,{showHeader:!1});this.options.elements.boostPickupFilters.replaceChildren(t)}renderTouchControlsWindow(){const e=this.options.getContext(),i=this.options.modules.find(s=>s.id===Vx)?.renderSettings?.(e)??null;this.options.elements.touchControls.replaceChildren(),i instanceof HTMLElement&&this.options.elements.touchControls.append(i)}}function hm(n,e){const t=document.createElement("section");t.className="module-summary-group";const i=document.createElement("h3");i.textContent=n;const s=document.createElement("div");return s.className="module-list",s.append(...e),t.append(i,s),t}function Gx(n,e){const t=n?"On":"Off";return e==null?t:`${t} ${e}`}function AW(n){return n.group==="Replay"?n.label:`${n.label} events`}function fm(n,e){const t={"absolute-positioning:ranges":"Position zones","backboard:events":"Backboard","ball-carry:events":"Ball carry","boost:ranges":"Boost pickup timeline","bump:events":"Bump","ceiling-shot:events":"Ceiling shot","demo:events":"Demo","dodge-reset:events":"Dodge refresh","double-tap:events":"Double tap","fifty-fifty:events":"50/50","fifty-fifty:ranges":"50/50","dodge:events":"Dodge","half-flip:events":"Half flip","possession:ranges":"Possession","powerslide:events":"Powerslide","powerslide:ranges":"Powerslide","ball_half:ranges":"Half control","ball_third:ranges":"Third control","rush:ranges":"Rush","speed-flip:events":"Speed flip","touch:events":"Touch","wavedash:events":"Wavedash"},i={"absolute-positioning":"Position zones","ceiling-shot":"Ceiling shot labels","fifty-fifty":"50/50 labels",dodge:"Dodge impulse arrows",ball_half:"Half control","relative-positioning":"Player roles","speed-flip":"Speed flip labels",touch:"Touch labels"};return e==="effects"?i[n.id]??n.label:t[`${n.id}:${e}`]??`${n.label} timeline`}function RW(n){return new CW(n)}var gn=Uint8Array,fi=Uint16Array,Jg=Int32Array,hf=new gn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ff=new gn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),C_=new gn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a1=function(n,e){for(var t=new fi(31),i=0;i<31;++i)t[i]=e+=1<>1|(Ut&21845)<<1;Zs=(Zs&52428)>>2|(Zs&13107)<<2,Zs=(Zs&61680)>>4|(Zs&3855)<<4,R_[Ut]=((Zs&65280)>>8|(Zs&255)<<8)>>1}var hs=(function(n,e,t){for(var i=n.length,s=0,a=new fi(e);s>l]=c}else for(o=new fi(i),s=0;s>15-n[s]);return o}),ha=new gn(288);for(var Ut=0;Ut<144;++Ut)ha[Ut]=8;for(var Ut=144;Ut<256;++Ut)ha[Ut]=9;for(var Ut=256;Ut<280;++Ut)ha[Ut]=7;for(var Ut=280;Ut<288;++Ut)ha[Ut]=8;var ic=new gn(32);for(var Ut=0;Ut<32;++Ut)ic[Ut]=5;var IW=hs(ha,9,0),LW=hs(ha,9,1),kW=hs(ic,5,0),DW=hs(ic,5,1),pm=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Ni=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},mm=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},Qg=function(n){return(n+7)/8|0},pf=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new gn(n.subarray(e,t))},OW=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],os=function(n,e,t){var i=new Error(e||OW[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,os),!t)throw i;return i},FW=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new gn(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new gn(s*3));var c=function(xe){var Ae=t.length;if(xe>Ae){var L=new gn(Math.max(Ae*2,xe));L.set(t),t=L}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Ni(n,d,1);var v=Ni(n,d+1,3);if(d+=3,v)if(v==1)f=LW,p=DW,g=9,_=5;else if(v==2){var x=Ni(n,d,31)+257,M=Ni(n,d+10,15)+4,C=x+Ni(n,d+5,31)+1;d+=14;for(var w=new gn(C),E=new gn(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Ni(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Ni(n,d,7),d+=3):y==18&&(W=11+Ni(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ne=w.subarray(x);g=pm(H),_=pm(ne),f=hs(H,g,1),p=hs(ne,_,1)}else os(1);else{var y=Qg(d)+4,b=n[y-4]|n[y-3]<<8,T=y+b;if(T>s){l&&os(0);break}o&&c(h+b),t.set(n.subarray(y,T),h),e.b=h+=b,e.p=d=T*8,e.f=u;continue}if(d>m){l&&os(0);break}}o&&c(h+131072);for(var oe=(1<>4;if(d+=F&15,d>m){l&&os(0);break}if(F||os(2),ke<256)t[h++]=ke;else if(ke==256){Ie=d,f=null;break}else{var Xe=ke-254;if(ke>264){var R=ke-257,De=hf[R];Xe=Ni(n,d,(1<>4;Z||os(3),d+=Z&15;var ne=PW[ae];if(ae>3){var De=ff[ae];ne+=mm(n,d)&(1<m){l&&os(0);break}o&&c(h+131072);var Se=h+Xe;if(h>8},cl=function(n,e,t){t<<=e&7;var i=e/8|0;n[i]|=t,n[i+1]|=t>>8,n[i+2]|=t>>16},_m=function(n,e){for(var t=[],i=0;ih&&(h=a[i].s);var f=new fi(h+1),p=P_(t[u-1],f,0);if(p>e){var i=0,g=0,_=p-e,m=1<<_;for(a.sort(function(x,M){return f[M.s]-f[x.s]||x.f-M.f});ie)g+=m-(1<>=_;g>0;){var y=a[i].s;f[y]=0&&g;--i){var b=a[i].s;f[b]==e&&(--f[b],++g)}p=e}return{t:new gn(f),l:p}},P_=function(n,e,t){return n.s==-1?Math.max(P_(n.l,e,t+1),P_(n.r,e,t+1)):e[n.s]=t},Wx=function(n){for(var e=n.length;e&&!n[--e];);for(var t=new fi(++e),i=0,s=n[0],a=1,r=function(l){t[i++]=l},o=1;o<=e;++o)if(n[o]==s&&o!=e)++a;else{if(!s&&a>2){for(;a>138;a-=138)r(32754);a>2&&(r(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(r(s),--a;a>6;a-=6)r(8304);a>2&&(r(a-3<<5|8208),a=0)}for(;a--;)r(s);a=1,s=n[o]}return{c:t.subarray(0,i),n:e}},ul=function(n,e){for(var t=0,i=0;i>8,n[s+2]=n[s]^255,n[s+3]=n[s+1]^255;for(var a=0;a4&&!E[C_[k-1]];--k);var O=c+5<<3,D=ul(s,ha)+ul(a,ic)+r,U=ul(s,h)+ul(a,g)+r+14+3*k+ul(M,E)+2*M[16]+3*M[17]+7*M[18];if(l>=0&&O<=D&&O<=U)return c1(e,u,n.subarray(l,l+c));var F,W,H,ne;if(Es(e,u,1+(U15&&(Es(e,u,ke[C]>>5&127),u+=ke[C]>>12)}}else F=IW,W=ha,H=kW,ne=ic;for(var C=0;C255){var Xe=De>>18&31;cl(e,u,F[Xe+257]),u+=W[Xe+257],Xe>7&&(Es(e,u,De>>23&31),u+=hf[Xe]);var Z=De&31;cl(e,u,H[Z]),u+=ne[Z],Z>3&&(cl(e,u,De>>5&8191),u+=ff[Z])}else cl(e,u,F[De]),u+=W[De]}return cl(e,u,F[256]),u+W[256]},NW=new Jg([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),u1=new gn(0),UW=function(n,e,t,i,s,a){var r=a.z||n.length,o=new gn(i+r+5*(1+Math.ceil(r/7e3))+s),l=o.subarray(i,o.length-s),c=a.l,u=(a.r||0)&7;if(e){u&&(l[0]=a.r>>3);for(var d=NW[e-1],h=d>>13,f=d&8191,p=(1<7e3||E>24576)&&(F>423||!c)){u=Xx(n,l,0,b,T,x,C,E,k,w-k,u),E=M=C=0,k=w;for(var W=0;W<286;++W)T[W]=0;for(var W=0;W<30;++W)x[W]=0}var H=2,ne=0,oe=f,pe=D-U&32767;if(F>2&&O==y(w-pe))for(var Ie=Math.min(h,F)-1,ke=Math.min(32767,w),Xe=Math.min(258,F);pe<=ke&&--oe&&D!=U;){if(n[w+H]==n[w+H-pe]){for(var De=0;DeH){if(H=De,ne=pe,De>Ie)break;for(var Z=Math.min(pe,De-2),ae=0,W=0;Wae&&(ae=ie,U=Se)}}}D=U,U=g[D],pe+=D-U&32767}if(ne){b[E++]=268435456|A_[H]<<18|$x[ne];var xe=A_[H]&31,Ae=$x[ne]&31;C+=hf[xe]+ff[Ae],++T[257+xe],++x[Ae],R=w+H,++M}else b[E++]=n[w],++T[n[w]]}}for(w=Math.max(w,R);w=r&&(l[u/8|0]=c,L=r),u=c1(l,u+1,n.subarray(w,L))}a.i=r}return pf(o,0,i+Qg(u)+s)},BW=function(n,e,t,i,s){if(!s&&(s={l:1},e.dictionary)){var a=e.dictionary.subarray(-32768),r=new gn(a.length+n.length);r.set(a),r.set(n,a.length),n=r,s.w=a.length}return UW(n,e.level==null?6:e.level,e.mem==null?s.l?Math.ceil(Math.max(8,Math.min(13,Math.log(n.length)))*1.5):20:12+e.mem,t,i,s)};function zW(n,e){return BW(n,e||{},0,0)}function d1(n,e){return FW(n,{i:2},e,e)}var Kx=typeof TextEncoder<"u"&&new TextEncoder,I_=typeof TextDecoder<"u"&&new TextDecoder,HW=0;try{I_.decode(u1,{stream:!0}),HW=1}catch{}var VW=function(n){for(var e="",t=0;;){var i=n[t++],s=(i>127)+(i>223)+(i>239);if(t+s>n.length)return{s:e,r:pf(n,t-1)};s?s==3?(i=((i&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,e+=String.fromCharCode(55296|i>>10,56320|i&1023)):s&1?e+=String.fromCharCode((i&31)<<6|n[t++]&63):e+=String.fromCharCode((i&15)<<12|(n[t++]&63)<<6|n[t++]&63):e+=String.fromCharCode(i)}};function GW(n,e){var t;if(Kx)return Kx.encode(n);for(var i=n.length,s=new gn(n.length+(n.length>>1)),a=0,r=function(c){s[a++]=c},t=0;ts.length){var o=new gn(a+8+(i-t<<1));o.set(s),s=o}var l=n.charCodeAt(t);l<128||e?r(l):l<2048?(r(192|l>>6),r(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|n.charCodeAt(++t)&1023,r(240|l>>18),r(128|l>>12&63),r(128|l>>6&63),r(128|l&63)):(r(224|l>>12),r(128|l>>6&63),r(128|l&63))}return pf(s,0,a)}function h1(n,e){var t;if(I_)return I_.decode(n);var i=VW(n),s=i.s,t=i.r;return t.length&&os(8),s}const L_=1,k_="cfg",qx="cfgDebug";function $W(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"")}function WW(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a!Ri(e)||!o8(e.id)?null:{id:e.id,placement:p1(e.placement)}).filter(e=>e!==null):[]}function a8(n){return Array.isArray(n)?n.map(e=>!Ri(e)||typeof e.id!="string"||!l8(e.kind)?null:{id:e.id,kind:e.kind,placement:p1(e.placement),playerId:m1(e.playerId)??null,team:e.team==="orange"?"orange":e.team==="blue"?"blue":null,entries:r8(e.entries)}).filter(e=>e!==null):[]}function r8(n){return Array.isArray(n)?n.map(e=>!Ri(e)||typeof e.statId!="string"?null:{statId:e.statId,targetId:typeof e.targetId=="string"?e.targetId:void 0}).filter(e=>e!==null):[]}function p1(n){const e=Ri(n)?n:{},t=Ri(e.viewport)?e.viewport:{};return{x:Rn(e.x)??8,y:Rn(e.y)??8,viewport:{width:uh(t.width)??1,height:uh(t.height)??1},zIndex:Rn(e.zIndex),visible:Zn(e.visible)??!0}}function o8(n){return n==="camera"||n==="scoreboard"||n==="playback"||n==="recording"||n==="training-pack"||n==="mechanics"||n==="event-playlist"||n==="mechanics-review"||n==="replay-loading"||n==="boost-pickups"||n==="touch-controls"||n==="touch-legend"||n==="shot-visualization"||n==="missed-events"}function l8(n){return n==="player"||n==="team"||n==="all-players"||n==="all-teams"||n==="kickoff-overview"||n==="goals-overview"||n==="ad-hoc"}function Ri(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Rn(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function uh(n){const e=Rn(n);return e!==void 0&&e>0?e:void 0}function Zn(n){return typeof n=="boolean"?n:void 0}function m1(n){return n===null?null:typeof n=="string"?n:void 0}function dl(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function Yx(n,e,t){return Math.min(t,Math.max(e,n))}const c8=["camera","scoreboard","playback","recording","training-pack","mechanics","event-playlist","mechanics-review","replay-loading","boost-pickups","touch-controls","touch-legend","shot-visualization","missed-events"];class u8{constructor(e){this.options=e}nextZIndex=30;reset(){this.nextZIndex=30}bringToFront(e){e.style.zIndex=`${this.nextZIndex++}`}show(e){const t=this.mustWindow(e);t.hidden=!1,this.bringToFront(t),this.options.requestConfigSync()}toggle(e){const t=this.mustWindow(e);t.hidden=!t.hidden,t.hidden||this.bringToFront(t),this.options.requestConfigSync()}hide(e){const t=this.mustWindow(e);t.hidden=!0,this.options.requestConfigSync()}readPlacement(e){const t=Number.parseInt(e.style.zIndex,10);return{x:this.readCoordinate(e,"--window-x"),y:this.readCoordinate(e,"--window-y"),viewport:jx(),zIndex:Number.isFinite(t)?t:void 0,visible:!e.hidden}}applyPlacement(e,t){const i=ZW(t,jx());e.style.setProperty("--window-x",`${i.x}px`),e.style.setProperty("--window-y",`${i.y}px`),e.hidden=!t.visible,t.zIndex!==void 0&&(e.style.zIndex=`${t.zIndex}`,this.nextZIndex=Math.max(this.nextZIndex,t.zIndex+1))}getSingletonConfigs(){const e=[],t=this.options.getRoot();for(const i of c8){const s=t.querySelector(`[data-window-id="${i}"]`);s&&e.push({id:i,placement:this.readPlacement(s)})}return e}applySingletonConfigs(e){const t=this.options.getRoot();for(const i of e){const s=t.querySelector(`[data-window-id="${i.id}"]`);s&&this.applyPlacement(s,i.placement)}}installDragging(e,t){e.addEventListener("pointerdown",i=>{if(!(i.target instanceof HTMLElement)||d8(i.target))return;const s=i.target.closest("[data-window-id]");if(!s||s.hidden)return;this.bringToFront(s);const a=i.clientX,r=i.clientY,o=s.getBoundingClientRect(),l=i.pointerId;s.setPointerCapture(l),i.preventDefault();const c=d=>{const h=Math.max(8,Math.min(window.innerWidth-120,o.left+d.clientX-a)),f=Math.max(8,Math.min(window.innerHeight-100,o.top+d.clientY-r));s.style.setProperty("--window-x",`${h}px`),s.style.setProperty("--window-y",`${f}px`)},u=()=>{s.releasePointerCapture(l),s.removeEventListener("pointermove",c),s.removeEventListener("pointerup",u),s.removeEventListener("pointercancel",u),this.options.requestConfigSync()};s.addEventListener("pointermove",c),s.addEventListener("pointerup",u),s.addEventListener("pointercancel",u)},{signal:t})}mustWindow(e){const t=this.options.getRoot().querySelector(`[data-window-id="${e}"]`);if(!t)throw new Error(`Missing window for id: ${e}`);return t}readCoordinate(e,t){const i=e.style.getPropertyValue(t).trim(),s=getComputedStyle(e).getPropertyValue(t).trim(),a=i||s,r=Number.parseFloat(a);if(Number.isFinite(r))return r;const o=e.getBoundingClientRect();return t==="--window-y"?o.top:o.left}}function jx(){return{width:Math.max(1,window.innerWidth),height:Math.max(1,window.innerHeight)}}function d8(n){return n instanceof Element&&!!n.closest("button, input, select, textarea, option, label, a, [data-no-drag]")}function h8(n){return new u8(n)}class f8{constructor(e){this.options=e}activeSourceIds=null;autoFollow=!0;lastActiveKey=null;activeItem=null;renderedItems=[];reset(){this.activeSourceIds=null,this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[]}render(){this.options.body.replaceChildren(),this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[];const e=this.options.getSources();if(e.length===0){const _=document.createElement("p");_.className="stat-window-empty",_.textContent=this.options.getReplayPlayer()?"No events loaded.":"Load a replay to see events.",this.options.body.append(_);return}const t=E_(e,this.activeSourceIds),i=wW({sources:e,activeSourceIds:this.activeSourceIds,replayPlayers:this.options.getReplayPlayer()?.replay.players??[]}),s=document.createElement("div");s.className="event-playlist-toolbar";const a=document.createElement("details");a.className="event-playlist-filter",a.dataset.noDrag="true";const r=document.createElement("summary");r.textContent=`Filters ${t.size}/${e.length}`,a.append(r);const o=document.createElement("div");o.className="event-playlist-filter-panel";const l=document.createElement("div");l.className="event-playlist-filter-actions";const c=document.createElement("button");c.type="button",c.textContent="All",c.addEventListener("click",()=>{this.activeSourceIds=new Set(e.map(m=>m.id)),this.lastActiveKey=null,this.render();const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_)});const u=document.createElement("button");u.type="button",u.textContent="None",u.addEventListener("click",()=>{this.activeSourceIds=new Set,this.lastActiveKey=null,this.render()}),l.append(c,u),o.append(l);const d=new Map;for(const _ of e){const m=d.get(_.group)??[];m.push(_),d.set(_.group,m)}for(const[_,m]of d){const v=document.createElement("section");v.className="event-playlist-filter-group";const y=document.createElement("h3");y.textContent=_,v.append(y);for(const b of m){const T=document.createElement("label");T.className="toggle event-playlist-filter-option";const x=document.createElement("input");x.type="checkbox",x.checked=t.has(b.id),x.addEventListener("change",()=>{this.setSourceSelection(e,C=>{x.checked?C.add(b.id):C.delete(b.id)})});const M=document.createElement("span");M.textContent=`${b.label} (${b.events.length})`,T.append(x,M),v.append(T)}o.append(v)}a.append(o);const h=document.createElement("label");h.className="toggle event-playlist-follow";const f=document.createElement("input");f.type="checkbox",f.checked=this.autoFollow,f.addEventListener("change",()=>{this.autoFollow=f.checked;const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_,{forceScroll:!0})});const p=document.createElement("span");p.textContent="Auto-follow",h.append(f,p),s.append(a,h);const g=document.createElement("div");if(g.className="event-playlist-list",g.dataset.noDrag="true",i.length===0){const _=document.createElement("p");_.className="stat-window-empty",t.size===0?_.textContent="No event types selected.":_.textContent="No events in selected event types.",g.append(_)}else for(const _ of i){const m=document.createElement("button");m.type="button",m.className="event-playlist-item",m.dataset.eventKey=_.key,m.dataset.eventTime=`${_.event.time}`,m.style.setProperty("--event-color",_.color),Number.isFinite(_.event.time)&&this.renderedItems.push({key:_.key,time:_.event.time,element:m}),m.addEventListener("click",()=>{this.options.cueTimelineEvent(_.event)});const v=document.createElement("span");v.className="event-playlist-time",v.textContent=this.options.formatTime(_.event.time);const y=document.createElement("span");y.className="event-playlist-main";const b=document.createElement("strong");b.textContent=_.event.label??_.sourceLabel;const T=document.createElement("span");T.textContent=[_.event.playerName??null,_.event.frame!==void 0?`frame ${_.event.frame}`:null,_.sourceLabel].filter(x=>!!x).join(" · "),y.append(b,T),m.append(v,y),g.append(m)}this.options.body.append(s,g)}syncTimeline(e,t={}){if(!this.options.body.querySelector(".event-playlist-list"))return;const s=this.getActiveItem(e.currentTime),a=s?.dataset.eventKey??null;a===this.lastActiveKey&&!t.forceScroll||(this.activeItem?.isConnected?this.activeItem.dataset.active="false":this.activeItem&&(this.activeItem=null),s?(s.dataset.active="true",this.activeItem=s,(this.autoFollow||t.forceScroll)&&s.scrollIntoView({block:"nearest"})):this.activeItem=null,this.lastActiveKey=a)}setSourceSelection(e,t){const i=E_(e,this.activeSourceIds);t(i),this.activeSourceIds=i,this.lastActiveKey=null,this.render();const s=this.options.getReplayPlayer()?.getState();s&&this.syncTimeline(s)}getActiveItem(e){const t=this.renderedItems;if(t.length===0)return null;let i=0,s=t.length-1;for(;ie.getConfig||e.applyConfig).map(e=>{const t={id:e.id};return e.id==="boost"&&(t.aliases=["boost-pickup-animation"]),e.getConfig&&(t.getConfig=()=>e.getConfig?.()),e.applyConfig&&(t.applyConfig=i=>e.applyConfig?.(i)),t})}function T8(n){return y8(g1(n))}function M8({replayPlayer:n,playbackRate:e,skipPostGoalTransitions:t,skipKickoffs:i}){const s=n?.getState();return{currentTime:s?.currentTime,playing:s?.playing,rate:s?.speed??mf(Number(e?.value??1)),skipPostGoalTransitions:n?s?.skipPostGoalTransitionsEnabled:t.checked,skipKickoffs:n?s?.skipKickoffsEnabled:i.checked}}function E8({replayPlayer:n,cameraControlsController:e}){const t=n?.getState(),i=t?pE(t):e?.ballCamMode;return{mode:t?.cameraViewMode,freePreset:e?.freeCameraPreset??null,attachedPlayerId:t?.attachedPlayerId,ballCam:i===void 0?void 0:i==="on",useReplayBallCam:i===void 0?void 0:i==="player",usePlayerCameraSettings:t?.customCameraSettings===null,autoPossession:e?.autoPossessionEnabled,customSettings:t?.customCameraSettings,nameplateLiftUu:e?.nameplateLiftUu}}function C8({playback:n,camera:e,activeTimelineEventSourceIds:t,activeTimelineRangeModuleIds:i,activeMechanicTimelineKinds:s,activeRenderEffectModuleIds:a,initialConfig:r,replayPlayer:o,boostPadOverlayEnabled:l,recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}){return{version:L_,playback:n,camera:e,overlays:{timelineEvents:[...t],timelineRanges:[...i],mechanics:[...s],renderEffects:[...a],...r?.overlays.pluginRenderEffects!==void 0?{pluginRenderEffects:[...r.overlays.pluginRenderEffects]}:{},...r?.overlays.pluginHudOverlay!==void 0?{pluginHudOverlay:r.overlays.pluginHudOverlay}:{},followedPlayerHud:!1,boostPads:l,boostPickupAnimation:o?.getState().boostPickupAnimationEnabled??!1,hitboxWireframes:o?.getState().hitboxWireframesEnabled??!1,hitboxOnlyMode:o?.getState().hitboxOnlyModeEnabled??!1},recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}}function A8(n,e,t){return{currentTime:n.currentTime,playing:n.playing,speed:n.rate,customCameraSettings:_1(e),cameraViewMode:e.mode,attachedPlayerId:e.attachedPlayerId,...jb(e)==="player"?{useReplayBallCam:!0}:{ballCamEnabled:jb(e)==="on"},boostPickupAnimationEnabled:t.overlays.boostPickupAnimation,hitboxWireframesEnabled:t.overlays.hitboxWireframes,hitboxOnlyModeEnabled:t.overlays.hitboxOnlyMode,skipPostGoalTransitionsEnabled:n.skipPostGoalTransitions,skipKickoffsEnabled:n.skipKickoffs}}function R8(n,e,t){console.groupCollapsed("[subtr-actor] stats player cfg load"),console.log("location.href",window.location.href),console.log("location.search",n.search||"(empty)"),console.log("location.hash",n.hash||"(empty)"),console.table([...n.searchParams.map(([i,s])=>({source:"search",name:i,value:s})),...n.hashParams.map(([i,s])=>({source:"hash",name:i,value:s}))]),console.log("cfg selected source",n.selectedSource??"(none)"),console.log("cfg selected raw text",n.selectedValue??"(none)"),console.log("cfg selected raw length",n.selectedValue?.length??0),console.log("cfg search values",n.searchValues),console.log("cfg hash values",n.hashValues),n.hashValues.length>0&&n.searchValues.length>0&&console.warn("Both hash and search contain cfg; hash cfg is used."),e&&(console.log("cfg normalized JSON",JSON.stringify(e,null,2)),console.log("cfg normalized object",e)),t&&console.error("cfg decode/apply error",t),console.groupEnd()}function Zx(n,e){const{style:t}=n.renderer.domElement;t.visibility=e?"hidden":"",t.pointerEvents=e?"none":""}function Jx(n,e={}){const t=e.destroyPlayer??!0,i=e.clearPlayerPluginHandles??!0,s=n.getUnsubscribe();s&&(s(),n.setUnsubscribe(null)),n.teardownActiveModules(),t&&(n.getReplayPlayer()?.destroy(),n.setReplayPlayer(null)),i&&(n.setCanvasRecorder(null),n.setTimelineOverlay(null)),n.setLoadedReplayName(null),n.setStatsTimeline(null),n.setStatsFrameLookup(null),n.setStatRegistry(nc()),n.clearTimelineEventSources(),n.clearTimelineRangeSources(),n.clearStandalonePlugins(),n.clearRenderCaches(),n.resetEventPlaylistWindow(),n.renderModuleSummary(),n.renderScoreboard(),n.renderTimelineEventCount(),n.renderMechanicsTimelineControls(),n.renderEventPlaylistWindow(),n.renderModuleSettings(),n.syncRecordingWindow()}async function P8(n,e,t){const{elements:i}=t;let s=null;i.statusReadout.textContent=n.preparingStatus,i.fileInput.disabled=!0,t.getReplayLoadModal()?.show(n.name,n.preparingStatus),t.setTransportEnabled(!1),t.getCameraControlsController()?.syncAvailability(),i.emptyState.hidden=t.getReplayPlayer()!==null,t.getReplayPlayer()?.pause();try{i.statusReadout.textContent="Parsing replay...",t.getReplayLoadModal()?.show(n.name,"Parsing replay...");const a=await e,{replay:r}=a,o=t.getReplayPlayer();if(o){Jx(t,{destroyPlayer:!1,clearPlayerPluginHandles:!1});const h=new Rw(a.raw);await o.replaceReplay(h,r,{preservePlayback:!1}),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(nc(null)),t.setReplayPlayer(o),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(o.subscribe(t.renderSnapshot));const f=t.getInitialConfig();if(f){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(f)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(p=>p.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(o.getState()),t.renderSnapshot(o.getState()),t.renderStatsWindows(o.getState().frameIndex),t.renderScoreboard(o.getState().frameIndex),t.syncEventPlaylistTimeline(o.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide();return}const l=u3({replayEventsLabel:"Replay",replayEvents:h=>t.withTimelineEventSeekTimes(t.getReplayTimelineEvents(h.replay))}),c=WN({onStatusChange:t.syncRecordingWindow});t.setCanvasRecorder(c);const u=t.getInitialConfig(),d=d3(i.viewport,a,{initialPlaybackRate:u?.playback.rate,initialCustomCameraSettings:_1(u?.camera),initialAttachedPlayerId:u?.camera.attachedPlayerId??null,initialCameraViewMode:u?.camera.mode,initialBoostPickupAnimationEnabled:u?.overlays.boostPickupAnimation??!1,initialHitboxWireframesEnabled:u?.overlays.hitboxWireframes??i.hitboxWireframes.checked,initialHitboxOnlyModeEnabled:u?.overlays.hitboxOnlyMode??i.hitboxOnlyMode.checked,initialSkipPostGoalTransitionsEnabled:i.skipPostGoalTransitions.checked,initialSkipKickoffsEnabled:i.skipKickoffs.checked,plugins:[bN({onSample:({renderFps:h,replayFps:f})=>{const p=document.getElementById("render-fps-readout"),g=document.getElementById("replay-fps-readout");p&&(p.textContent=`${h.toFixed(0)} fps`),g&&(g.textContent=`${f.toFixed(0)} fps`)}}),Tu(x3({floatingLiftUu:()=>t.getCameraControlsController()?.nameplateLiftUu})),Tu(zN({includePickup:t.includeBoostPickupAnimationPickup})),Tu(c),Tu(l)]});if(s=d,Zx(d,!0),await d.ready,Jx(t),s=null,Zx(d,!1),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(nc(null)),t.setTimelineOverlay(l),t.setReplayPlayer(d),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(d.subscribe(t.renderSnapshot)),u){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(u)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(h=>h.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(d.getState()),t.renderSnapshot(d.getState()),t.renderStatsWindows(d.getState().frameIndex),t.renderScoreboard(d.getState().frameIndex),t.syncEventPlaylistTimeline(d.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide()}catch(a){throw t.getReplayLoadModal()?.hide(),s?.destroy(),t.getReplayPlayer()||(i.emptyState.hidden=!1,t.setCanvasRecorder(null)),t.syncRecordingWindow(),a}finally{i.fileInput.disabled=!1}}function I8(n){if(n<=0)return"--";const e=["B","KB","MB","GB"];let t=n,i=0;for(;t>=1024&&i=10?1:2;return`${t.toFixed(s)} ${e[i]}`}function L8(n){if(!n)return"No replay";if(n.error)return n.error;switch(n.state){case"idle":return"Idle";case"recording":return"Recording";case"stopping":return"Stopping";case"ready":return"Ready";case"error":return"Error"}}function k8({fpsValue:n,playbackRateValue:e}){const t=Number(n),i=Number(e);return{fps:Number.isFinite(t)?Math.max(1,Math.min(120,Math.trunc(t))):60,playbackRate:Number.isFinite(i)?Math.max(.1,i):1}}function D8(n,e=new Date){const i=(n?.replace(/\.replay$/i,"")||"replay").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,""),s=e.toISOString().replace(/[:.]/g,"-");return`${i||"replay"}-${s}.webm`}function O8(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.append(i),i.click(),i.remove(),window.setTimeout(()=>URL.revokeObjectURL(t),0)}class F8{constructor(e){this.options=e}getConfigSnapshot(){const{elements:e}=this.options;return{fps:Number(e.fps.value),playbackRate:Number(e.playbackRate.value)}}applyConfig(e){const{elements:t}=this.options;e.fps!==void 0&&(t.fps.value=`${e.fps}`),e.playbackRate!==void 0&&(t.playbackRate.value=`${e.playbackRate}`)}sync(e=this.options.getCanvasRecorder()?.getStatus()??null){const{elements:t}=this.options,i=this.options.getCanvasRecorder()!==null&&this.options.getReplayPlayer()!==null,s=e?.state??"idle",a=s==="recording"||s==="stopping",r=(this.options.getCanvasRecorder()?.getRecording()??null)!==null;t.status.textContent=L8(e),t.elapsed.textContent=`${(e?.elapsedSeconds??0).toFixed(1)}s`,t.size.textContent=I8(e?.sizeBytes??0),t.type.textContent=e?.mimeType||"WebM",t.start.disabled=!i||a,t.fullReplay.disabled=!i||a,t.stop.disabled=!i||!a,t.download.disabled=!r||a,t.clear.disabled=!r||a,t.fps.disabled=a,t.playbackRate.disabled=a}installEventListeners(e){const{elements:t}=this.options;t.start.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(i)try{const{fps:s}=this.getRecordingOptions();i.start({fps:s}),this.sync()}catch(s){console.error("Failed to start recording:",s),this.options.setStatus(s instanceof Error?s.message:"Failed to start recording"),this.sync(i.getStatus())}},{signal:e}),t.fullReplay.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(!i)return;const{fps:s,playbackRate:a}=this.getRecordingOptions();i.recordFullReplay({fps:s,playbackRate:a,restorePlaybackState:!0}).catch(r=>{console.error("Failed to record replay:",r),this.options.setStatus(r instanceof Error?r.message:"Failed to record replay"),this.sync(this.options.getCanvasRecorder()?.getStatus()??null)}),this.sync()},{signal:e}),t.stop.addEventListener("click",()=>{this.options.getCanvasRecorder()?.stop().catch(i=>{console.error("Failed to stop recording:",i),this.options.setStatus(i instanceof Error?i.message:"Failed to stop recording")}),this.sync()},{signal:e}),t.download.addEventListener("click",()=>{const i=this.options.getCanvasRecorder()?.getRecording();i&&O8(i,D8(this.options.getLoadedReplayName()))},{signal:e}),t.clear.addEventListener("click",()=>{try{this.options.getCanvasRecorder()?.clear(),this.sync()}catch(i){console.error("Failed to clear recording:",i)}},{signal:e}),t.fps.addEventListener("change",this.options.requestConfigSync,{signal:e}),t.playbackRate.addEventListener("change",this.options.requestConfigSync,{signal:e})}getRecordingOptions(){const{elements:e}=this.options;return k8({fpsValue:e.fps.value,playbackRateValue:e.playbackRate.value})}}function N8(n){return new F8(n)}class U8{constructor(e){this.options=e}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0){const{body:t}=this.options;t.replaceChildren();const i=this.options.getStatsFrameLookup(),s=i?zt(i,e):null,a=this.options.getReplayPlayer()?.replay??null;if(!s||!a){const o=document.createElement("p");o.className="scoreboard-empty",o.textContent="Load a replay to show the scoreboard.",t.append(o);return}const r=document.createElement("div");r.className="scoreboard-scoreline",r.append(Qx(s.team_zero?.core.goals,!0),z8(),Qx(s.team_one?.core.goals,!1)),t.append(r)}}function B8(n){return typeof n=="number"&&Number.isFinite(n)?`${Math.round(n)}`:"--"}function z8(){const n=document.createElement("span");return n.className="scoreboard-divider",n.textContent="-",n}function Qx(n,e){const t=document.createElement("strong");return t.className=`scoreboard-goal-value ${na(e)}`,t.textContent=B8(n),t}function H8(n){return new U8(n)}class V8{constructor(e){this.options=e}setTransportEnabled(e,t){const{elements:i}=this.options;i.togglePlayback.disabled=!e,i.previousFrame.disabled=!e,i.nextFrame.disabled=!e,i.playbackRate.disabled=!e,i.skipPostGoalTransitions.disabled=!e,i.skipKickoffs.disabled=!e,i.hitboxWireframes.disabled=!e,i.hitboxOnlyMode.disabled=!e,this.options.getCameraControlsController()?.setTransportEnabled(e,t)}renderSnapshot(e){const{elements:t}=this.options;t.timeReadout.textContent=`${e.currentTime.toFixed(2)}s`,t.frameReadout.textContent=`${e.frameIndex}`,t.durationReadout.textContent=`${e.duration.toFixed(2)}s`,t.playbackStatusReadout.textContent=e.playing?"Playing":"Paused",t.togglePlayback.textContent=e.playing?"Pause":"Play";const i=Math.max(0,this.options.getFrameCount()-1);t.previousFrame.disabled=e.frameIndex<=0,t.nextFrame.disabled=e.frameIndex>=i;const s=mf(e.speed);t.playbackRate.value=`${s}`,t.playbackRateReadout.textContent=ty(s),this.options.getCameraControlsController()?.syncState(e),t.skipPostGoalTransitions.checked=e.skipPostGoalTransitionsEnabled,t.skipKickoffs.checked=e.skipKickoffsEnabled,t.hitboxWireframes.checked=e.hitboxWireframesEnabled,t.hitboxOnlyMode.checked=e.hitboxOnlyModeEnabled,t.emptyState.hidden=!0}}function G8(n){return new V8(n)}function $8({elements:n,signal:e,setLauncherOpen:t,openReplayFilePicker:i,getElementWindowId:s,toggleWindow:a,hideWindow:r,createStatsWindow:o,loadReplayFile:l,togglePlayback:c,stepFrames:u,setPlaybackRate:d,setSkipPostGoalTransitionsEnabled:h,setSkipKickoffsEnabled:f,setHitboxWireframesEnabled:p,setHitboxOnlyModeEnabled:g}){n.launcherToggle.addEventListener("click",()=>{t(n.launcherMenu.hidden)},{signal:e}),n.root.addEventListener("click",m=>{m.target instanceof Element&&(m.target.closest(".top-chrome")||t(!1))},{signal:e}),n.loadReplayAction.addEventListener("click",i,{signal:e}),n.emptyLoadReplay.addEventListener("click",i,{signal:e}),n.root.querySelectorAll("[data-window-toggle]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowToggle;v&&(a(v),t(!1))},{signal:e})}),n.root.querySelectorAll("[data-window-hide]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowHide??s(m);v&&r(v)},{signal:e})}),n.root.querySelectorAll("[data-create-stats-window]").forEach(m=>{m.addEventListener("click",()=>{o(m.dataset.createStatsWindow)},{signal:e})}),n.fileInput.addEventListener("change",()=>{const m=n.fileInput.files?.[0];m&&l(m)},{signal:e}),n.togglePlayback.addEventListener("click",c,{signal:e}),n.previousFrame.addEventListener("click",()=>u(-1),{signal:e}),n.nextFrame.addEventListener("click",()=>u(1),{signal:e});const _=()=>{const m=mf(Number(n.playbackRate.value));n.playbackRate.value=`${m}`,n.playbackRateReadout.textContent=ty(m),d(m)};n.playbackRate.addEventListener("input",_,{signal:e}),n.playbackRate.addEventListener("change",_,{signal:e}),n.skipPostGoalTransitions.addEventListener("change",()=>{h(n.skipPostGoalTransitions.checked)},{signal:e}),n.skipKickoffs.addEventListener("change",()=>{f(n.skipKickoffs.checked)},{signal:e}),n.hitboxWireframes.addEventListener("change",()=>{p(n.hitboxWireframes.checked)},{signal:e}),n.hitboxOnlyMode.addEventListener("change",()=>{g(n.hitboxOnlyMode.checked)},{signal:e})}const W8=3500;function X8(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function K8(n){const{getReplayPlayer:e,signal:t}=n,i={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},s=()=>{i.forward=!1,i.backward=!1,i.left=!1,i.right=!1,i.up=!1,i.down=!1},a=(g,_)=>{switch(g){case"KeyW":return i.forward=_,!0;case"KeyS":return i.backward=_,!0;case"KeyA":return i.left=_,!0;case"KeyD":return i.right=_,!0;case"Space":return i.up=_,!0;case"ShiftLeft":case"ShiftRight":return i.down=_,!0;default:return!1}},r=g=>{g.ctrlKey||g.metaKey||g.altKey||X8()||a(g.code,!0)&&g.preventDefault()},o=g=>{a(g.code,!1)};window.addEventListener("keydown",r,{signal:t}),window.addEventListener("keyup",o,{signal:t}),window.addEventListener("blur",s,{signal:t});const l=new S,c=new S,u=new S,d=new S(0,1,0);let h=null,f=0;const p=g=>{f=requestAnimationFrame(p);const _=h===null?0:Math.min(.1,(g-h)/1e3);h=g;const m=(i.forward?1:0)-(i.backward?1:0),v=(i.right?1:0)-(i.left?1:0),y=(i.up?1:0)-(i.down?1:0);if(_===0||m===0&&v===0&&y===0)return;const b=e();if(!b||b.getState().cameraViewMode!=="free")return;const T=b.camera,x=b.controls;T.getWorldDirection(l),c.set(1,0,0).applyQuaternion(T.quaternion),u.set(0,0,0).addScaledVector(l,m).addScaledVector(c,v).addScaledVector(d,y),u.lengthSq()!==0&&(u.normalize().multiplyScalar(W8*_),T.position.add(u),x.target.add(u))};f=requestAnimationFrame(p),t.addEventListener("abort",()=>{cancelAnimationFrame(f)})}function q8(n,e){const t=new URLSearchParams(n),s=(t.get("replayId")??t.get("replay-id")??e??"").trim();return s.length>0?s:null}function Y8(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function j8(n){if(!n.replayId)return null;const e={replay_id:n.replayId,reviewed_mechanic:n.mechanic,reviewed_event_frame:n.frame,reviewed_event_time:n.time,confidence:n.confidence,status:"confirmed"};return n.subjectKind&&n.subjectId&&(e.reviewed_subject_kind=n.subjectKind,e.reviewed_subject_id=n.subjectId),n.startFrame!==null&&(e.reviewed_start_frame=n.startFrame),n.endFrame!==null&&(e.reviewed_end_frame=n.endFrame),n.notes&&n.notes.trim()&&(e.notes=n.notes.trim()),Object.keys(n.context).length>0&&(e.context=n.context),e}function Z8(n,e){const t=n.getState(),i=Math.max(0,Math.round(t.frameIndex??0)),s=t.currentTime??0,a=t.attachedPlayerId??null,r=a?n.replay.players.find(o=>o.id===a)?.name??null:null;return{localId:e.localId,mechanic:e.mechanic,frame:i,time:s,subjectKind:a?"player":null,subjectId:a,playerName:r,startFrame:null,endFrame:null,notes:e.notes?.trim()?e.notes.trim():null,confidence:1,replayId:e.replayId,context:{capturedFrom:"stat-evaluation-player",attachedPlayerId:a,playerName:r,durationSeconds:n.replay.duration??null}}}async function J8(n,e="/api/v1/events/reviews"){const t=j8(n);if(!t)return{record:n,ok:!1,message:"No replay id — cannot upload (export JSON instead)."};try{const i=await fetch(e,{method:"POST",headers:{"content-type":"application/json",...Y8()},credentials:"same-origin",body:JSON.stringify(t)});if(!i.ok){let s=`${i.status}${i.statusText?` ${i.statusText}`:""}`;try{const a=await i.json();typeof a.error=="string"&&(s=a.error)}catch{}return{record:n,ok:!1,message:s}}return{record:n,ok:!0,message:"uploaded"}}catch(i){return{record:n,ok:!1,message:i instanceof Error?i.message:String(i)}}}const Q8=["flick","whiff","double_tap","ceiling_shot","wall_aerial","flip_reset","one_timer","speed_flip","half_flip","wavedash","demo"],e6="m";function t6(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function n6(n,e){const t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(i)}class i6{constructor(e){this.options=e}records=[];localIdSeq=0;installEventListeners(e){const{elements:t}=this.options;for(const i of Q8){const s=document.createElement("option");s.value=i,s.textContent=i.replaceAll("_"," "),t.mechanic.appendChild(s)}t.capture.addEventListener("click",()=>this.capture(),{signal:e}),t.export.addEventListener("click",()=>this.exportJson(),{signal:e}),t.upload.addEventListener("click",()=>{this.uploadAll()},{signal:e}),t.clear.addEventListener("click",()=>{this.records.length=0,this.render(),this.setStatus("Cleared.")},{signal:e}),window.addEventListener("keydown",i=>{i.key.toLowerCase()!==e6||i.repeat||i.metaKey||i.ctrlKey||i.altKey||t6()||(i.preventDefault(),this.capture())},{signal:e}),this.render()}capture(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}this.localIdSeq+=1;const t=Z8(e,{mechanic:this.options.elements.mechanic.value||"flick",replayId:this.resolveReplayId(),localId:`missed-${this.localIdSeq}`});this.records.push(t),this.options.showWindow(),this.render(),this.setStatus(`Captured ${t.mechanic} @ ${t.time.toFixed(2)}s`+(t.replayId?".":" (no replay id — export only)."))}exportJson(){if(this.records.length===0){this.setStatus("Nothing to export.");return}n6("missed-events.json",{capturedFrom:"stat-evaluation-player",replayId:this.resolveReplayId(),missedEvents:this.records}),this.setStatus(`Exported ${this.records.length}.`)}async uploadAll(){if(this.records.length===0){this.setStatus("Nothing to upload.");return}let e=0;const t=[];for(const i of[...this.records]){const s=await J8(i);if(s.ok){e+=1;const a=this.records.findIndex(r=>r.localId===i.localId);a>=0&&this.records.splice(a,1)}else t.push(`${i.mechanic}@${i.time.toFixed(1)}s: ${s.message}`)}this.render(),this.setStatus(t.length===0?`Uploaded ${e}.`:`Uploaded ${e}, ${t.length} failed — ${t[0]}`)}render(){const{list:e}=this.options.elements;e.replaceChildren();for(const t of this.records){const i=document.createElement("li"),s=t.playerName??t.subjectId??"no subject",a=document.createElement("span");a.className="missed-event-row",a.textContent=`${t.mechanic} @ ${t.time.toFixed(2)}s · f${t.frame} · ${s}`+(t.replayId?"":" · no replay id");const r=document.createElement("button");r.type="button",r.textContent="✕",r.title="Remove",r.addEventListener("click",()=>{const o=this.records.findIndex(l=>l.localId===t.localId);o>=0&&(this.records.splice(o,1),this.render())}),i.append(a,r),e.appendChild(i)}}setStatus(e){this.options.elements.status.textContent=e}resolveReplayId(){return q8(window.location.search,this.options.getReplayId?.()??null)}}function s6(n){return new i6(n)}class mo{constructor(e,t){this.file=e,this.sourceTimes=t}sourceTimes;dirty=!1;static async createNew(e){const t=await ta.create(H3(),e);return new mo(t,[])}static async loadFromBytes(e,t){const i=await ta.load(e,t);return new mo(i,new Array(i.roundCount).fill(null))}get shotCount(){return this.file.roundCount}get hasUnsavedShots(){return this.dirty}shots(){return this.file.rounds.map((e,t)=>({index:t,timeLimit:e.time_limit,sourceReplayTime:this.sourceTimes[t]??null}))}captureShot(e,t=null){const i=N3(this.file,e);return this.sourceTimes[i]=t,this.dirty=!0,i}removeShot(e){this.file.removeRound(e),this.sourceTimes.splice(e,1),this.dirty=!0}setShotTimeLimit(e,t){this.file.setRoundTimeLimit(e,t),this.dirty=!0}downloadFileName(){return z3(this.file.guid)}toBytes(e=Math.floor(Date.now()/1e3)){this.file.updateMetadata({updated_at:BigInt(e)});const t=this.file.toBytes();return this.dirty=!1,t}}function a6(n,e,t,i){const s=`Captured shot ${n} (${e} at ${t})`;return i===null?`${s}.`:`${s}; warning: ${i}.`}function r6(n,e){const t=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),i=new Blob([t],{type:"application/octet-stream"}),s=URL.createObjectURL(i),a=document.createElement("a");a.href=s,a.download=e,document.body.appendChild(a),a.click(),a.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0)}class o6{constructor(e){this.options=e}session=null;sessionPromise=null;installEventListeners(e){const{elements:t}=this.options;t.capture.addEventListener("click",()=>{this.captureShot()},{signal:e}),t.newPack.addEventListener("click",()=>{this.newPack()},{signal:e}),t.download.addEventListener("click",()=>{this.download()},{signal:e}),t.load.addEventListener("click",()=>t.loadInput.click(),{signal:e}),t.loadInput.addEventListener("change",()=>{const i=t.loadInput.files?.[0]??null;t.loadInput.value="",i&&this.loadPackFile(i)},{signal:e}),t.name.addEventListener("change",()=>this.session?.file.setName(t.name.value||null),{signal:e}),t.creator.addEventListener("change",()=>this.session?.file.setCreatorName(t.creator.value||null),{signal:e}),t.description.addEventListener("change",()=>this.session?.file.setDescription(t.description.value||null),{signal:e}),t.difficulty.addEventListener("change",()=>this.session?.file.setDifficulty(t.difficulty.value),{signal:e}),this.sync()}sync(){const{elements:e}=this.options,t=this.options.getReplayPlayer();e.capture.disabled=!t,e.shooter.disabled=!t,this.populateShooterOptions(t),this.renderShotList()}populateShooterOptions(e){const{shooter:t}=this.options.elements,i=t.value;t.replaceChildren(),t.append(new Option("Followed player (camera)",""));for(const s of e?.replay.players??[])t.append(new Option(s.name,s.id));[...t.options].some(s=>s.value===i)&&(t.value=i)}async ensureSession(){if(this.session)return this.session;this.sessionPromise??=mo.createNew();const e=await this.sessionPromise;return this.session||this.adoptSession(e),this.session??e}adoptSession(e){this.session=e,this.sessionPromise=null;const{elements:t}=this.options;t.name.value=e.file.name??"",t.creator.value=e.file.creatorName??"",t.description.value=e.file.description??"";const i=e.file.difficulty;[...t.difficulty.options].some(s=>s.value===i)&&(t.difficulty.value=i),this.renderShotList()}resolveShooter(e,t){const i=this.options.elements.shooter.value||null,s=e.getState().attachedPlayerId,a=e.replay.players,r=[...a.filter(o=>o.id===(i??s)),...a];for(const o of r){const l=o.frames[t];if(l?.position)return i&&o.id!==i?null:{track:o,sample:l}}return null}timeLimitSeconds(){const e=Number(this.options.elements.timeLimit.value);return!Number.isFinite(e)||e<0?$T:e}async captureShot(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}const t=e.getState(),i=e.replay.ballFrames[t.frameIndex];if(!i?.position){this.setStatus("No ball state on the current frame.");return}const s=this.resolveShooter(e,t.frameIndex);if(!s){this.setStatus("Selected shooter has no car state on the current frame.");return}const a=await this.ensureSession(),r={position:s.sample.position,rotation:s.sample.rotation,linearVelocity:s.sample.linearVelocity},o=a.captureShot({ball:{position:i.position,linearVelocity:i.linearVelocity},shooter:r,timeLimit:this.timeLimitSeconds()},t.currentTime);this.renderShotList(),this.setStatus(a6(o+1,s.track.name,wi(t.currentTime),k3(r)))}async loadPackFile(e){if(!(this.session?.hasUnsavedShots&&!window.confirm("Discard unsaved captured shots and open this pack?")))try{const t=await mo.loadFromBytes(await e.arrayBuffer());this.adoptSession(t),this.setStatus(`Opened ${e.name} (${t.shotCount} shot${t.shotCount===1?"":"s"}); captures will append.`)}catch(t){console.error("Failed to load training pack:",t),this.setStatus(t instanceof Error?t.message:"Failed to load training pack.")}}async newPack(){if(!(this.session?.hasUnsavedShots&&!window.confirm("Discard unsaved captured shots and start a new pack?")))try{this.adoptSession(await mo.createNew()),this.setStatus("Started a new pack.")}catch(e){console.error("Failed to create training pack:",e),this.setStatus(e instanceof Error?e.message:"Failed to create training pack.")}}async download(){const e=await this.ensureSession();if(e.shotCount===0){this.setStatus("No shots to download; capture one first.");return}try{r6(e.toBytes(),e.downloadFileName()),this.setStatus(`Downloaded ${e.downloadFileName()}.`)}catch(t){console.error("Failed to serialize training pack:",t),this.setStatus(t instanceof Error?t.message:"Failed to serialize pack.")}}renderShotList(){const{shotList:e}=this.options.elements;e.replaceChildren();const t=this.session;if(t)for(const i of t.shots()){const s=document.createElement("li"),a=document.createElement("span"),r=i.sourceReplayTime===null?"loaded":`at ${wi(i.sourceReplayTime)}`,o=i.timeLimit===0?"no limit":`${i.timeLimit}s`;a.textContent=`Shot ${i.index+1} — ${r} — ${o}`;const l=document.createElement("button");l.type="button",l.textContent="Remove",l.addEventListener("click",()=>{t.removeShot(i.index),this.renderShotList(),this.setStatus(`Removed shot ${i.index+1}.`)}),s.append(a,l),e.appendChild(s)}}setStatus(e){this.options.elements.status.textContent=e}}function l6(n){return new o6(n)}class c6{constructor(e){this.options=e}activeModules=[];activeTimelineEventSourceIds=new Set;activeTimelineRangeModuleIds=new Set;activeMechanicTimelineKinds=new Set;activeRenderEffectModuleIds=new Set;removeRenderHook=null;timelineSourceRemovers=new Map;timelineRangeSourceRemovers=new Map;getActiveModules(){return this.activeModules}getActiveTimelineEventSourceIds(){return this.activeTimelineEventSourceIds}getActiveTimelineRangeModuleIds(){return this.activeTimelineRangeModuleIds}getActiveMechanicTimelineKinds(){return this.activeMechanicTimelineKinds}getActiveRenderEffectModuleIds(){return this.activeRenderEffectModuleIds}getActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}getBoostPadOverlayEnabled(){return!0}getTimelineEventSourceIds(){return[...this.activeTimelineEventSourceIds]}getTimelineRangeModuleIds(){return[...this.activeTimelineRangeModuleIds]}getMechanicTimelineKinds(){return[...this.activeMechanicTimelineKinds]}getRenderEffectModuleIds(){return[...this.activeRenderEffectModuleIds]}applyOverlayConfig({timelineEvents:e,timelineRanges:t,mechanics:i,renderEffects:s,boostPads:a}){this.activeTimelineEventSourceIds=new Set(e),this.activeTimelineRangeModuleIds=new Set(t),this.activeMechanicTimelineKinds=new Set(i),this.activeRenderEffectModuleIds=new Set(s)}reset(){this.teardownActiveModules(),this.clearStandalonePlugins(),this.activeModules=[],this.activeTimelineEventSourceIds=new Set,this.activeTimelineRangeModuleIds=new Set,this.activeMechanicTimelineKinds=new Set,this.activeRenderEffectModuleIds=new Set,this.removeRenderHook=null}setupActiveModules(){this.teardownActiveModules();const e=this.options.getContext();if(!e)return;const t=this.getActiveModuleIds();this.activeModules=this.options.modules.filter(i=>t.has(i.id)),this.options.boostPickupFilters.setup(e);for(const i of this.activeModules)i.setup(e);this.removeRenderHook=e.player.onBeforeRender(i=>{for(const s of this.activeModules)this.activeRenderEffectModuleIds.has(s.id)&&s.onBeforeRender(i)}),this.syncTimelineEvents(),this.syncTimelineRanges()}teardownActiveModules(){this.removeRenderHook?.(),this.removeRenderHook=null,this.clearTimelineEventSources(),this.clearTimelineRangeSources();for(const e of this.activeModules)e.teardown();this.activeModules=[]}toggleCapability(e,t,i){const s=this.getMutableActiveCapabilityIds(t);i?s.add(e):s.delete(e),this.setupActiveModules(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderStatsWindows(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}setMechanicTimelineKind(e,t){t?this.activeMechanicTimelineKinds.add(e):this.activeMechanicTimelineKinds.delete(e),this.options.requestConfigSync()}activateMechanicTimelineKind(e){this.activeMechanicTimelineKinds.add(e),this.syncTimelineEvents(),this.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}clearTimelineEventSources(){for(const e of this.timelineSourceRemovers.values())e();this.timelineSourceRemovers.clear()}clearTimelineRangeSources(){for(const e of this.timelineRangeSourceRemovers.values())e();this.timelineRangeSourceRemovers.clear()}clearStandalonePlugins(){}syncBoostPadOverlayPlugin(){}toggleBoostPadOverlay(){this.options.renderModuleSummary(),this.options.requestConfigSync()}syncTimelineEvents(){this.clearTimelineEventSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.options.getEventTimelineSources(e)){if(!i.active)continue;const s=i.buildTimelineEvents();s.length!==0&&this.timelineSourceRemovers.set(i.timelineKey,t.addEventSource(this.options.withTimelineEventSeekTimes(s),{id:i.timelineId,label:i.label}))}t.refreshEvents()}}syncTimelineRanges(){this.clearTimelineRangeSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.activeModules)!this.activeTimelineRangeModuleIds.has(i.id)||!i.getTimelineRanges||this.timelineRangeSourceRemovers.set(i.id,t.addRangeSource(()=>i.getTimelineRanges?.(e)??[]));for(const i of this.options.getEventTimelineSources(e)){if(!i.active||!i.buildTimelineRanges)continue;const s=i.buildTimelineRanges();s.length!==0&&this.timelineRangeSourceRemovers.set(i.timelineKey,t.addRangeSource(s))}t.refreshRanges()}}getActiveModuleIds(){return new Set([...this.activeTimelineEventSourceIds,...this.activeTimelineRangeModuleIds,...this.activeRenderEffectModuleIds])}getMutableActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}}function u6(n){return new c6(n)}function Jn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ew(n){return Jn(n)&&(n.kind==="time"||n.kind==="frame")&&typeof n.value=="number"&&Number.isFinite(n.value)?{kind:n.kind,value:n.value}:null}function Hu(n,e){if(n!=null){if(typeof n!="number"||!Number.isInteger(n)||!Number.isFinite(n)||n<0)throw new Error(`Review playlist page ${e} must be a non-negative integer.`);return n}}function tw(n,e){if(n!=null){if(typeof n!="string")throw new Error(`Review playlist page ${e} must be a string.`);return n}}function d6(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist page must be an object.");return{next:tw(n.next,"next"),previous:tw(n.previous,"previous"),total:Hu(n.total,"total"),count:Hu(n.count,"count"),limit:Hu(n.limit,"limit"),offset:Hu(n.offset,"offset")}}}function h6(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist playback must be an object.");if(n.timeBase!==void 0&&n.timeBase!=="playback"&&n.timeBase!=="rawReplay")throw new Error('Review playlist playback timeBase must be "playback" or "rawReplay".');return{...n,timeBase:n.timeBase}}}function f6(n,e){if(n==null)return;if(!Jn(n))throw new Error(`Review item ${e} perspective must be an object.`);if(n.kind!=="player")throw new Error(`Review item ${e} perspective kind must be "player".`);const t=typeof n.playerId=="string"&&n.playerId.trim()?n.playerId.trim():void 0,i=typeof n.playerName=="string"&&n.playerName.trim()?n.playerName.trim():void 0;if(!t&&!i)throw new Error(`Review item ${e} player perspective needs playerId or playerName.`);if(n.ballCam!==void 0&&n.ballCam!=="off"&&n.ballCam!=="on"&&n.ballCam!=="player")throw new Error(`Review item ${e} perspective ballCam must be off, on, or player.`);if(n.usePlayerCameraSettings!==void 0&&typeof n.usePlayerCameraSettings!="boolean")throw new Error(`Review item ${e} perspective usePlayerCameraSettings must be boolean.`);return{kind:"player",playerId:t,playerName:i,ballCam:n.ballCam,usePlayerCameraSettings:n.usePlayerCameraSettings}}function p6(n){if(!Jn(n)||!Array.isArray(n.items))throw new Error("Review playlist must contain an items array.");const e=n.items.map((i,s)=>{if(!Jn(i)||typeof i.replay!="string")throw new Error(`Invalid review item at index ${s}.`);const a=ew(i.start),r=ew(i.end);if(!a||!r)throw new Error(`Review item ${s+1} has invalid start or end.`);return{id:typeof i.id=="string"?i.id:void 0,replay:i.replay,start:a,end:r,label:typeof i.label=="string"?i.label:void 0,perspective:f6(i.perspective,s+1),meta:Jn(i.meta)?i.meta:void 0}}),t=Array.isArray(n.replays)?n.replays.map(i=>!Jn(i)||typeof i.id!="string"?null:{id:i.id,path:typeof i.path=="string"?i.path:void 0,label:typeof i.label=="string"?i.label:void 0,locator:Jn(i.locator)?i.locator:void 0,meta:Jn(i.meta)?i.meta:void 0}).filter(i=>i!==null):void 0;return{label:typeof n.label=="string"?n.label:void 0,replays:t,items:e,page:d6(n.page),playback:h6(n.playback),meta:n.meta}}function nw(n){let e;try{e=JSON.parse(n)}catch(t){throw new Error(`Invalid review playlist JSON: ${t instanceof Error?t.message:String(t)}`)}return p6(e)}function m6(){const n=new URLSearchParams(window.location.search);return n.get("reviewPlaylist")?.trim()||n.get("review")?.trim()||n.get("playlist")?.trim()||n.get("playlistUrl")?.trim()||null}function _6(n){return/^\/(?:home|Users|tmp|var\/tmp|mnt|media|run\/user|nix\/store)\//.test(n)}function y1(n,e){const t=n.startsWith("path:")?n.slice(5):n;if(/^https?:\/\//i.test(t)||t.startsWith("/@fs/"))return t;if(t.startsWith("/")){if(_6(t))return`/@fs${t}`;if(e){const i=new URL(e,window.location.href);if(i.origin!==window.location.origin)return new URL(t,i.origin).href}return t}return e?new URL(t,e).href:t}function dd(n,e){const t=e.replaysById.get(n.replay);if(t?.path)return t.path;if(Jn(t?.locator)&&t.locator.kind==="path"&&typeof t.locator.path=="string")return t.locator.path;if(/^https?:\/\//i.test(n.replay)||n.replay.startsWith("/")||n.replay.startsWith("/@fs/")||n.replay.startsWith("path:"))return n.replay;throw new Error(`Review replay "${n.replay}" does not include a loadable path.`)}function iw(n,e){const t=e.replaysById.get(n.replay),s=(t?.path??dd(n,e)).replace(/^path:/,"").split("/").filter(Boolean).pop();return t?.label??s??"review replay"}function hd(n){return typeof n=="number"&&Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function sw(n){return n.kind==="time"?hd(n.value):`frame ${Math.trunc(n.value)}`}function qi(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?t:null}function fd(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):null}function g6(n,e){for(const[t,i]of[["eventTime","eventFrame"],["startTime","startFrame"],["endTime","endFrame"]]){const s=qi(n,t),a=fd(n,i),r=a===null?null:e.frames[a]?.time;if(s!==null&&typeof r=="number"&&Number.isFinite(r))return s-r}return 0}function v1(n,e,t){return t==="playback"?0:t==="rawReplay"&&typeof e.rawStartTime=="number"&&Number.isFinite(e.rawStartTime)?e.rawStartTime:g6(n,e)}function D_(n,e){return Math.min(Math.max(0,n),Math.max(0,e))}function y6(n,e,t,i){if(e.kind==="frame"){const a=Math.max(0,Math.trunc(e.value));return D_(t.frames[a]?.time??0,t.duration)}const s=v1(n,t,i);return D_(e.value-s,t.duration)}function v6(n,e,t){const i=M6(n);return i===null?null:D_(i-v1(n,e,t),e.duration)}function b6(n){const e=n.start.kind==="time"?n.start.value:null,t=n.end.kind==="time"?n.end.value:null,i=[`${sw(n.start)} to ${sw(n.end)}`];e!==null&&t!==null&&i.push(`${Math.max(0,t-e).toFixed(1)}s clip`);const s=qi(n,"startTime")??qi(n,"eventTime"),a=qi(n,"endTime")??qi(n,"eventTime");return e!==null&&s!==null&&i.push(`${Math.max(0,s-e).toFixed(1)}s preroll`),t!==null&&a!==null&&i.push(`${Math.max(0,t-a).toFixed(1)}s postroll`),i.join(" · ")}function x6(n){const e=qi(n,"eventTime"),t=qi(n,"startTime"),i=qi(n,"endTime"),s=fd(n,"eventFrame"),a=fd(n,"startFrame"),r=fd(n,"endFrame"),o=t!==null&&i!==null&&Math.abs(i-t)>.001?`${hd(t)} to ${hd(i)}`:hd(e??t??i),l=a!==null&&r!==null&&r!==a?`frames ${a}-${r}`:s!==null?`frame ${s}`:a!==null?`frame ${a}`:null;return[o,l].filter(c=>c&&c!=="--").join(" · ")||"--"}function gm(n,e){return n.label??n.meta?.eventTypeLabel??n.meta?.mechanicLabel??`Review item ${e+1}`}function w6(n){if(typeof n.meta?.playerName=="string"&&n.meta.playerName.trim())return n.meta.playerName.trim();if(Jn(n.meta?.target)&&typeof n.meta.target.playerName=="string"){const e=n.meta.target.playerName.trim();return e||null}return null}function aw(n,e){if(!n)return null;if(n.playerId){const i=e.find(s=>s.id===n.playerId);if(i)return i}const t=n.playerName?.toLowerCase();return t?e.find(i=>i.name.trim().toLowerCase()===t)??null:null}function rw(n){if(typeof n.meta?.eventTypeLabel=="string"&&n.meta.eventTypeLabel.trim())return n.meta.eventTypeLabel;if(typeof n.meta?.mechanicLabel=="string"&&n.meta.mechanicLabel.trim())return n.meta.mechanicLabel;const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"?Ai(e):"--"}function S6(n){const e=n.meta?.eventCategory;return typeof e=="string"&&e.trim()?Ai(e.trim()):"--"}function T6(n){const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"&&e.trim()?e.trim().replaceAll("-","_"):null}function M6(n){return qi(n,"eventTime")??qi(n,"startTime")??qi(n,"endTime")}class E6{constructor(e){this.options=e}createReplaySource(e,t,i){const s=dd(e,t),a=y1(s,t.sourceUrl);return{name:iw(e,t),preparingStatus:"Loading review replay...",async readBytes(){const r=await fetch(a,{signal:i});if(!r.ok){const o=r.statusText?` ${r.statusText}`:"";throw new Error(`Failed to fetch review replay from ${a} (${r.status}${o})`)}return new Uint8Array(await r.arrayBuffer())}}}initialize(e){const t=this.getReplayClipCounts(e);for(const[i,s]of this.getReplayItems(e)){let a="",r=i;try{a=dd(s,e),r=iw(s,e)}catch{r=e.replaysById.get(i)?.label??i}e.replayLoadStates.set(i,{replayId:i,label:r,path:a,clipCount:t.get(i)??0,status:"idle",progress:null,error:null})}}preload(e,t){if(e.preloading)return;const i=this.getNextReplayItems(e,t);i.length!==0&&(e.preloading=!0,(async()=>{try{for(const s of i){const a=s.replay,r=e.replayLoadStates.get(a);if(!(r?.status==="loaded"||r?.status==="loading"))try{await this.loadBundle(s,e)}catch{}}}finally{e.preloading=!1}})())}loadBundle(e,t){const i=t.replayLoadCache.get(e.replay);if(i)return i;const s=this.createReplaySource(e,t);this.updateLoadState(t,e.replay,{label:s.name,path:dd(e,t),status:"loading",progress:null,error:null});const a=Promise.resolve().then(async()=>{const r=await s.readBytes();return fE(r,{reportEveryNFrames:100,onProgress:o=>{this.updateLoadState(t,e.replay,{status:"loading",progress:o,error:null})}})}).then(r=>(this.updateLoadState(t,e.replay,{status:"loaded",progress:null,error:null}),r)).catch(r=>{throw t.replayLoadCache.delete(e.replay),this.updateLoadState(t,e.replay,{status:"error",error:r instanceof Error?r.message:String(r)}),r});return t.replayLoadCache.set(e.replay,a),a}render(e){const{reviewSummary:t,loadingSummary:i,loadingActive:s,loadingList:a}=this.options.elements,r=e?Array.from(e.replayLoadStates.values()):[],o=r.filter(h=>h.status==="loaded").length,l=r.filter(h=>h.status==="loading").length,c=r.filter(h=>h.status==="error").length,u=r.filter(h=>h.status==="idle").length,d=r.length===0?"0 replays":`${o}/${r.length} loaded${l>0?`, ${l} loading`:""}${c>0?`, ${c} failed`:""}`;if(t.textContent=d,i.textContent=d,s.textContent=r.length===0?"No playlist":l>0?`${l} active, ${u} pending`:c>0?`${c} failed`:e?.preloading?`Background queue, ${u} pending`:o===r.length?"Complete":`${u} pending`,a.replaceChildren(),!e||r.length===0){const h=document.createElement("p");h.className="stat-window-empty",h.textContent="No replay sources.",a.append(h);return}for(const h of r){const f=document.createElement("div");f.className=`mechanics-review-replay-load ${h.status}`;const p=document.createElement("div");p.className="mechanics-review-replay-load-main";const g=document.createElement("span");g.className="mechanics-review-replay-load-title",g.textContent=h.label;const _=document.createElement("span");_.className="mechanics-review-replay-load-meta",_.textContent=[h.replayId,`${h.clipCount} ${h.clipCount===1?"clip":"clips"}`,h.path].filter(Boolean).join(" · "),p.append(g,_);const m=document.createElement("strong");m.className="mechanics-review-replay-load-status",m.textContent=this.replayLoadStatusText(h);const v=document.createElement("div");v.className="mechanics-review-replay-load-progress";const y=document.createElement("span");y.style.width=`${Math.round(this.replayLoadProgressValue(h)*100)}%`,v.append(y),f.append(p,m,v),a.append(f)}}updateLoadState(e,t,i){const s=e.replayLoadStates.get(t)??{replayId:t,label:t,path:"",clipCount:0,status:"idle",progress:null,error:null};e.replayLoadStates.set(t,{...s,...i});const a=e.manifest.items[e.currentIndex];e.loading&&a?.replay===t&&i.progress&&this.options.onActiveLoadProgress(i.progress),this.options.isActiveReview(e)&&this.render(e)}getReplayItems(e){const t=new Map;for(const i of e.manifest.items)t.has(i.replay)||t.set(i.replay,i);return t}getReplayClipCounts(e){const t=new Map;for(const i of e.manifest.items)t.set(i.replay,(t.get(i.replay)??0)+1);return t}getNextReplayItems(e,t){const i=e.manifest.items[t]?.replay,s=new Set(i?[i]:[]),a=[];for(let r=t+1;r{const i=t.file.files?.[0];if(i)try{const s=nw(await i.text());await this.loadPlaylist(s,null)}catch(s){console.error("Failed to load review playlist:",s),this.setStatus(s instanceof Error?s.message:"Failed to load review playlist")}finally{t.file.value=""}},{signal:e}),t.loadUrl.addEventListener("click",()=>{this.loadPlaylistFromUrl(t.url.value.trim()).catch(i=>{console.error("Failed to load review playlist URL:",i),this.setStatus(i instanceof Error?i.message:"Failed to load review playlist URL")})},{signal:e}),t.previous.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.max(0,i.currentIndex-1))},{signal:e}),t.replay.addEventListener("click",()=>this.replayClip(),{signal:e}),t.next.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.min(i.manifest.items.length-1,i.currentIndex+1))},{signal:e}),t.confirm.addEventListener("click",()=>{this.submitDecision("confirmed")},{signal:e}),t.reject.addEventListener("click",()=>{this.submitDecision("rejected")},{signal:e}),t.uncertain.addEventListener("click",()=>{this.submitDecision("uncertain")},{signal:e})}render(){const{elements:e}=this.options,t=this.activeReview,i=t?.manifest.items??[],s=t?i[t.currentIndex]??null:null,a=i.length>0;e.count.textContent=`${i.length} item${i.length===1?"":"s"}`,e.index.textContent=a&&t?`${t.currentIndex+1} / ${i.length}`:"0 / 0",e.title.textContent=s?gm(s,t?.currentIndex??0):"No candidate selected",e.mechanic.textContent=s?rw(s):"--",e.player.textContent=s?this.getPlayerName(s):"--",e.clip.textContent=s?b6(s):"--",e.event.textContent=s?x6(s):"--",e.reason.textContent=s?.meta?.reason??"--",e.previous.disabled=!t||t.loading||t.currentIndex<=0,e.replay.disabled=!t||t.loading||!t.currentClip,e.next.disabled=!t||t.loading||t.currentIndex>=i.length-1;const r=!t||t.loading||ow(s)===null;if(e.confirm.disabled=r,e.reject.disabled=r,e.uncertain.disabled=r,this.options.replayLoads.render(t),e.list.replaceChildren(),!t||i.length===0){const o=document.createElement("p");o.className="stat-window-empty",o.textContent="No review playlist loaded.",e.list.append(o);return}i.forEach((o,l)=>{const c=document.createElement("button");c.type="button",c.className="mechanics-review-item",c.dataset.active=l===t.currentIndex?"true":"false",c.disabled=t.loading,c.addEventListener("click",()=>{this.activateItem(l)});const u=document.createElement("span");u.textContent=gm(o,l);const d=document.createElement("strong");d.textContent=[S6(o),rw(o),this.getPlayerName(o),ym(o.meta?.reviewStatus)].filter(h=>h&&h!=="--").join(" · ")||"--",c.append(u,d),e.list.append(c)})}async loadPlaylist(e,t){const i=new Map;for(const s of e.replays??[])i.set(s.id,s);this.activeReview={manifest:e,sourceUrl:t,replaysById:i,replayLoadStates:new Map,replayLoadCache:new Map,currentIndex:0,loading:!1,preloading:!1,currentReplayId:null,currentClip:null},this.options.replayLoads.initialize(this.activeReview),this.options.showReplayLoadingWindow(),this.setStatus(e.label?`Loaded ${e.label}.`:"Loaded review playlist."),this.render(),e.items.length>0&&await this.activateItem(0)}async loadPlaylistFromUrl(e){if(!e){this.setStatus("Enter a review playlist URL.");return}const t=y1(e,window.location.href);this.setStatus("Loading review playlist...");const i=await fetch(t);if(!i.ok){const a=i.statusText?` ${i.statusText}`:"";throw new Error(`Failed to fetch review playlist from ${t} (${i.status}${a})`)}const s=nw(await i.text());await this.loadPlaylist(s,i.url||t)}async activateItem(e){const t=this.activeReview,i=t?.manifest.items[e];if(!(!t||!i||t.loading)){t.loading=!0,t.currentIndex=e,this.render(),this.setStatus(`Loading ${gm(i,e)}...`);try{if(!this.options.getReplayPlayer()||t.currentReplayId!==i.replay){const d=this.options.replayLoads.createReplaySource(i,t),h=this.options.replayLoads.loadBundle(i,t);await this.options.loadReplayBundleForDisplay(d,h),t.currentReplayId=i.replay}this.options.replayLoads.preload(t,e);const a=t.manifest.playback?.timeBase,r=Math.max(0,this.getBoundTime(i,i.start,a)),o=Math.min(this.options.getReplayPlayer()?.getState().duration??Number.POSITIVE_INFINITY,Math.max(r,this.getBoundTime(i,i.end,a)));if(!Number.isFinite(r)||!Number.isFinite(o)||o<=r)throw new Error("Review item has an empty playback range.");const l=this.options.getReplayPlayer(),c=l?aw(i.perspective,l.replay.players):null;c&&this.options.applyClipPerspective({playerId:c.id,ballCam:i.perspective?.ballCam,usePlayerCameraSettings:i.perspective?.usePlayerCameraSettings}),this.options.resetReplayTransitionControls();const u=l===null?null:v6(i,l.replay,a);t.currentClip={startTime:r,endTime:o,targetTime:u},this.options.activateTimelineSource(i),this.options.getReplayPlayer()?.setState({currentTime:r,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),this.setStatus(u===null?`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s`:`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s; target ${u.toFixed(2)}s`)}catch(s){console.error("Failed to activate mechanics review item:",s),t.currentClip=null,this.setStatus(s instanceof Error?s.message:"Failed to load review item")}finally{t.loading=!1,this.render()}}}replayClip(){const e=this.activeReview?.currentClip,t=this.options.getReplayPlayer();!e||!t||t.setState({currentTime:e.startTime,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1})}async submitDecision(e){const t=this.activeReview,i=t?.manifest.items[t.currentIndex]??null,s=ow(i);if(!t||!i||!s){this.setStatus("Current review item has no review endpoint.");return}this.setStatus(`Submitting ${ym(e)}...`);const a=await fetch(s,{method:"POST",headers:{"content-type":"application/json",...R6()},credentials:"same-origin",body:JSON.stringify({status:e})});if(!a.ok){let r=`${a.status}${a.statusText?` ${a.statusText}`:""}`;try{const o=await a.json();typeof o.error=="string"&&(r=o.error)}catch{}this.setStatus(`Review failed: ${r}`);return}i.meta=i.meta??{},i.meta.reviewStatus=e,this.setStatus(`Marked ${ym(e)}.`),this.render()}enforceClipBoundary(e){const t=this.activeReview?.currentClip,i=this.options.getReplayPlayer();if(!t||!i||this.boundaryGuard)return!1;const s=e.currentTime=t.endTime-.025;if(!s&&!a)return!1;this.boundaryGuard=!0;try{i.setState({currentTime:s?t.startTime:t.endTime,playing:!1,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),a&&this.setStatus(`Finished clip at ${t.endTime.toFixed(2)}s`)}finally{this.boundaryGuard=!1}return!0}getBoundTime(e,t,i){const s=this.options.getReplayPlayer();return s?y6(e,t,s.replay,i):t.kind==="time"?t.value:0}getPlayerName(e){const t=w6(e);if(t)return t;const i=this.options.getReplayPlayer()?.replay.players??[];return aw(e.perspective,i)?.name??"--"}}function ym(n){return typeof n=="string"&&n.trim()?n.replaceAll("_"," "):"unreviewed"}function ow(n){if(!n)return null;if(typeof n.meta?.reviewEndpoint=="string"&&n.meta.reviewEndpoint)return n.meta.reviewEndpoint;const e=typeof n.meta?.eventId=="string"&&n.meta.eventId?n.meta.eventId:n.id;return e?`/api/v1/events/${encodeURIComponent(e)}/reviews`:null}function R6(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function P6(n){return new A6(n)}const I6=["replayUrl","replay_url","replay"],L6=["r","replayUrlZ","replay_url_z"],k6=["ballchasing","ballchasingId","ballchasingUuid","ballchasingReplay"];function D6(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a{n.signal.aborted||(console.error("Failed to load replay URL:",t),n.statusReadout.textContent=t instanceof Error?t.message:"Failed to load replay URL")})}function H6(n){n.initialBundle?n.loadReplayBundleForDisplay({name:n.initialReplayName??"replay",preparingStatus:"Preparing replay...",async readBytes(){throw new Error("Replay bytes are not available for this preloaded replay")}},Promise.resolve(n.initialBundle)).catch(i=>{n.signal.aborted||(console.error("Failed to load preprocessed replay bundle:",i),n.statusReadout.textContent=i instanceof Error?i.message:"Failed to load preprocessed replay bundle")}):n.loadFromLocation!==!1&&z6(n);const e=m6();if(!e)return;const t=n.getMechanicsReviewController();t?.setUrl(e),n.showMechanicsReviewWindow(),t?.loadPlaylistFromUrl(e).catch(i=>{n.signal.aborted||(console.error("Failed to load mechanics review playlist from URL:",i),t?.setStatus(i instanceof Error?i.message:"Failed to load mechanics review playlist from URL"))})}function V6(n){const e=()=>{n.getSkipPostGoalTransitions().checked=!1,n.getSkipKickoffs().checked=!1},t=(i,s)=>{const a=n.getReplayPlayer();!a||!Number.isFinite(i)||(n.getMechanicsReviewController()?.clearCurrentClip(),e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:s,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())};return{watchGoalReplay(i,s){const a=n.getReplayPlayer();if(!a||!Number.isFinite(i))return;if(n.getMechanicsReviewController()?.clearCurrentClip(),s!==null&&a.replay.players.some(o=>o.id===s)){a.setAttachedPlayer(s),a.setCameraViewMode("follow");const o=n.getCameraControlsController();o&&(o.freeCameraPreset=null)}e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate()},cueGoalReplay(i){t(i,!1)},cueTimelineEvent(i){const s=n.getReplayPlayer();s&&(n.getMechanicsReviewController()?.clearCurrentClip(),e(),s.setState({currentTime:Ng(i),skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())},applyConfigToReplayPlayer(i){const s=n.getReplayPlayer();if(!s)return;s.setState(A8(i.playback,i.camera,i));const a=n.getCameraControlsController();a&&(a.freeCameraPreset=i.camera.freePreset??null),i.camera.mode==="free"&&i.camera.freePreset&&s.setFreeCameraPreset(i.camera.freePreset),n.syncBoostPadOverlayPlugin(),n.setupActiveModules(),n.renderModuleSummary(),n.renderModuleSettings(),n.renderStatsWindows(s.getState().frameIndex)}}}function G6(n){let e=!1,t=null;const i=()=>n.getFloatingWindowController()?.getSingletonConfigs()??[],s=()=>n.getStatsWindowsController()?.getConfigs()??[],a=()=>{const o=n.getActiveModulesRuntime(),l=n.getReplayPlayer();return C8({playback:M8({replayPlayer:l,playbackRate:n.playbackRate,skipPostGoalTransitions:n.skipPostGoalTransitions,skipKickoffs:n.skipKickoffs}),camera:E8({replayPlayer:l,cameraControlsController:n.getCameraControlsController()}),activeTimelineEventSourceIds:o.getActiveTimelineEventSourceIds(),activeTimelineRangeModuleIds:o.getActiveTimelineRangeModuleIds(),activeMechanicTimelineKinds:o.getActiveMechanicTimelineKinds(),activeRenderEffectModuleIds:o.getActiveRenderEffectModuleIds(),initialConfig:n.getInitialConfig(),replayPlayer:l,boostPadOverlayEnabled:o.getBoostPadOverlayEnabled(),recording:n.getRecordingWindowController()?.getConfigSnapshot()??{},singletonWindows:i(),statsWindows:s(),moduleConfigs:T8(n.modules)})},r=o=>{v8(g1(n.modules),o)};return{setApplyingConfig(o){e=o},reset(){t!==null&&(window.clearTimeout(t),t=null),e=!1},scheduleConfigUrlUpdate(){e||(t!==null&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null;const o=jW(new URL(window.location.href),a());window.history.replaceState(window.history.state,"",o)},150))},applyConfigToStaticControls(o){if(n.getActiveModulesRuntime().applyOverlayConfig(o.overlays),n.skipPostGoalTransitions.checked=o.playback.skipPostGoalTransitions??n.skipPostGoalTransitions.checked,n.skipKickoffs.checked=o.playback.skipKickoffs??n.skipKickoffs.checked,n.hitboxWireframes.checked=o.overlays.hitboxWireframes,n.hitboxOnlyMode.checked=o.overlays.hitboxOnlyMode,n.getCameraControlsController()?.applyNameplateLiftUu(o.camera.nameplateLiftUu),n.getCameraControlsController()?.setAutoPossessionEnabled(o.camera.autoPossession??!1,{requestConfigSync:!1}),o.playback.rate!==void 0){const l=mf(o.playback.rate);n.playbackRate.value=`${l}`,n.playbackRateReadout.textContent=ty(l)}n.getRecordingWindowController()?.applyConfig(o.recording),r(o.moduleConfigs),n.getFloatingWindowController()?.applySingletonConfigs(o.singletonWindows),n.getStatsWindowsController()?.replaceFromConfig(o.statsWindows),n.renderModuleSummary(),n.renderModuleSettings(),n.renderTimelineEventCount()}}}function $6(n){const e=t=>{const i=n.getLauncherToggle();n.getLauncherMenu().hidden=!t,i.setAttribute("aria-label",t?"Close menu":"Open menu"),i.setAttribute("aria-expanded",t?"true":"false")};return{bringWindowToFront(t){n.getFloatingWindowController()?.bringToFront(t)},showWindow(t){n.getFloatingWindowController()?.show(t)},toggleWindow(t){n.getFloatingWindowController()?.toggle(t)},hideWindow(t){n.getFloatingWindowController()?.hide(t)},setLauncherOpen:e,openReplayFilePicker(){n.getFileInput().click(),e(!1)},installWindowDragging(t,i){n.getFloatingWindowController()?.installDragging(t,i)},getElementWindowId(t){return t.closest("[data-window-id]")?.dataset.windowId??null}}}const O_=4096,fr=5120,W6=893,X6=642,Yi=1/105;class K6{constructor(e){this.options=e,this.options.body.innerHTML=`
@@ -5920,4 +5985,4 @@ void main() {

Load a replay with shot events.

- `,this.chartCanvas=this.mustElement("#shot-chart-canvas"),this.shotList=this.mustElement("#shot-list"),this.summary=this.mustElement("#shot-visualization-summary"),this.details=this.mustElement("#shot-details"),this.sceneRoot=this.mustElement("#shot-demo-scene"),this.emptyState=this.mustElement("#shot-visualization-empty"),this.chartCanvas.addEventListener("click",t=>this.handleChartClick(t))}chartCanvas;shotList;summary;details;sceneRoot;emptyState;renderer=null;scene=null;camera=null;resizeObserver=null;selectedShotId=null;cachedReplay=null;cachedShots=[];lastShotsSignature="";lastListSelectionKey=null;lastSelectedShotKey=null;shotButtons=new Map;destroy(){this.resizeObserver?.disconnect(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}render(e=this.options.getReplayPlayer()?.getState()??null){const t=this.shotEvents(),i=e?.currentTime??null;this.findSelectedShot(t)||(this.selectedShotId=t[0]?this.shotKey(t[0],0):null);const s=this.findSelectedShot(t),a=s?.key??null,r=this.shotsSignature(t),o=r!==this.lastShotsSignature;this.emptyState.hidden=t.length>0,o&&(this.summary.textContent=this.summaryText(t)),o||a!==this.lastListSelectionKey?(this.renderShotList(t,i,a),this.lastListSelectionKey=a):this.updateShotListActiveState(t,i),this.renderChart(t,i),(o||a!==this.lastSelectedShotKey)&&(this.renderSelectedShot(s?.shot??null),this.lastSelectedShotKey=a),this.lastShotsSignature=r}shotEvents(){const e=this.options.getReplayPlayer()?.replay;return e?e===this.cachedReplay?this.cachedShots:(this.cachedReplay=e,this.cachedShots=e.timelineEvents.filter(f6),this.cachedShots):(this.cachedReplay=null,this.cachedShots=[],[])}summaryText(e){if(e.length===0)return"No shots";const t=e.filter(a=>a.shot.resulting_save).length,i=e.map(a=>a.shot.ball_speed).filter(a=>Number.isFinite(a)),s=i.length===0?null:i.reduce((a,r)=>a+r,0)/i.length;return`${e.length} shots | ${t} saved | avg ${Uu(s)}`}renderShotList(e,t,i){this.shotButtons.clear(),this.shotList.replaceChildren(...e.map((s,a)=>{const r=this.shotKey(s,a),o=document.createElement("button");o.type="button",o.className="shot-list-item",o.dataset.selected=String(r===i),o.dataset.active=String(hm(s,t)),o.addEventListener("click",()=>{this.selectedShotId=r,this.options.cueTimelineEvent(s),this.render()});const l=document.createElement("span");l.className="shot-list-title",l.textContent=s.playerName??s.playerId??`Shot ${a+1}`;const c=document.createElement("span");return c.className="shot-list-meta",c.textContent=`${nw(s.time)} | ${Uu(s.shot.ball_speed)} | ${s.shot.resulting_save?"saved":"unsaved"}`,o.append(l,c),this.shotButtons.set(r,o),o}))}updateShotListActiveState(e,t){e.forEach((i,s)=>{const a=this.shotButtons.get(this.shotKey(i,s));a&&(a.dataset.active=String(hm(i,t)))})}renderChart(e,t){const i=this.chartCanvas.getContext("2d");if(!i)return;const s=window.devicePixelRatio||1,a=this.chartCanvas.getBoundingClientRect(),r=Math.max(320,Math.round(a.width*s)),o=Math.max(220,Math.round(a.height*s));(this.chartCanvas.width!==r||this.chartCanvas.height!==o)&&(this.chartCanvas.width=r,this.chartCanvas.height=o),i.setTransform(s,0,0,s,0,0);const l=r/s,c=o/s;i.clearRect(0,0,l,c),p6(i,l,c),e.forEach((u,d)=>{const h=u.shot.shot_touch_position??u.shot.ball_position,f=ah(h,l,c),p=!!u.shot.resulting_save,g=hm(u,t),_=this.shotKey(u,d)===this.selectedShotId,m=_?6:g?5:4;i.beginPath(),i.arc(f.x,f.y,m,0,Math.PI*2),i.fillStyle=p?"#f2c14e":"#62d2a2",i.fill(),i.lineWidth=_?2.5:1.25,i.strokeStyle=_?"#f8fafc":g?"#e11d48":"rgba(4, 12, 20, 0.85)",i.stroke()})}renderSelectedShot(e){if(!e){this.details.replaceChildren(),this.clearThreeScene();return}this.details.replaceChildren(cl("Player",e.playerName??e.playerId??"--"),cl("Speed",Uu(e.shot.ball_speed)),cl("Toward goal",Uu(e.shot.ball_speed_toward_goal)),cl("Touch",_6(e.shot.shot_touch_position??e.shot.ball_position)),cl("Save",e.shot.resulting_save?nw(e.shot.resulting_save.time):"--")),this.renderThreeScene(e)}renderThreeScene(e){const t=this.ensureRenderer(),i=this.scene,s=this.camera;i.clear(),i.add(new dc(16777215,1.2));const a=new Do(16777215,1.7);a.position.set(18,28,22),i.add(a);const r=new we(new Dn(A_*2*qi,hr*2*qi),new Ye({color:1520422,side:ct}));r.rotation.x=-Math.PI/2,i.add(r);const o=new Rt({color:14280674,transparent:!0,opacity:.55});i.add(new Ln(new Bh(r.geometry),o)),i.add(ew(!0)),i.add(ew(!1));const l=tw(e.shot.shot_touch_position??e.shot.ball_position),c=tw(e.shot.target_goal_position),u=e.shot.ball_velocity,d=u?l.clone().add(m6(u).normalize().multiplyScalar(22)):c.clone(),h=new sg([l,l.clone().lerp(d,.45).setY(Math.max(l.y,d.y)+2.8),d]),f=new Ge().setFromPoints(h.getPoints(36));i.add(new In(f,new Rt({color:e.shot.resulting_save?15909198:6476450,linewidth:2})));const p=new we(new yn(.9,24,16),new Pn({color:16317180,roughness:.36}));p.position.copy(l),i.add(p);const g=new we(new ni(1.05,1.45,32),new Ye({color:8892372,side:ct}));g.position.copy(c),g.rotation.y=Math.PI/2,i.add(g),s.position.set(0,54,72),s.lookAt(0,0,0),t.render(i,s)}ensureRenderer(){if(this.renderer&&this.scene&&this.camera)return this.resizeThreeScene(),this.renderer;const e=new Eg({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return e.setPixelRatio(window.devicePixelRatio||1),this.sceneRoot.replaceChildren(e.domElement),this.renderer=e,this.scene=new ac,this.scene.background=new ue(463132),this.camera=new Jt(42,1,.1,500),this.resizeObserver=new ResizeObserver(()=>{this.resizeThreeScene();const t=this.shotEvents().find(i=>i.id===this.selectedShotId)??null;t&&this.renderThreeScene(t)}),this.resizeObserver.observe(this.sceneRoot),this.resizeThreeScene(),e}resizeThreeScene(){if(!this.renderer||!this.camera)return;const e=this.sceneRoot.getBoundingClientRect(),t=Math.max(240,Math.round(e.width)),i=Math.max(170,Math.round(e.height));this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.renderer.setSize(t,i,!1)}clearThreeScene(){this.sceneRoot.replaceChildren(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}handleChartClick(e){const t=this.shotEvents(),i=this.chartCanvas.getBoundingClientRect(),s={x:e.clientX-i.left,y:e.clientY-i.top};let a=null,r=Number.POSITIVE_INFINITY;for(const o of t){const l=ah(o.shot.shot_touch_position??o.shot.ball_position,i.width,i.height),c=Math.hypot(l.x-s.x,l.y-s.y);c`${this.shotKey(t,i)}:${t.time}:${t.shot.ball_speed}`).join("|")}}function f6(n){return n.kind==="shot"&&!!n.shot}function hm(n,e){return e!==null&&Math.abs(e-n.time)<1.5}function p6(n,e,t){n.fillStyle="#0f2b24",n.fillRect(0,0,e,t),n.strokeStyle="rgba(226, 241, 236, 0.74)",n.lineWidth=1.2,n.strokeRect(18,18,e-36,t-36),n.beginPath(),n.moveTo(18,t/2),n.lineTo(e-18,t/2),n.stroke(),n.beginPath(),n.arc(e/2,t/2,34,0,Math.PI*2),n.stroke();const s=ah({x:0,y:-hr},e,t),a=ah({x:0,y:hr},e,t);n.fillStyle="#4fa3ff",n.fillRect(s.x-28,s.y-4,56,8),n.fillStyle="#ff8a4c",n.fillRect(a.x-28,a.y-4,56,8)}function ah(n,e,t){const s=e-36,a=t-36;return{x:18+(n.x+A_)/(A_*2)*s,y:18+(1-(n.y+hr)/(hr*2))*a}}function ew(n){const e=new Mt,t=new Rt({color:n?16747084:5219327}),i=(n?hr:-hr)*qi,s=u6*qi,a=d6*qi,r=[new S(-s,0,i),new S(-s,a,i),new S(s,a,i),new S(s,0,i)];return e.add(new In(new Ge().setFromPoints(r),t)),e}function tw(n){return new S(n.x*qi,n.z*qi,n.y*qi)}function m6(n){return new S(n.x*qi,n.z*qi,n.y*qi)}function cl(n,e){const t=document.createElement("div"),i=document.createElement("dt");i.textContent=n;const s=document.createElement("dd");return s.textContent=e,t.append(i,s),t}function nw(n){return Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function Uu(n){return Number.isFinite(n)?`${Math.round(n)} uu/s`:"--"}function _6(n){return n?`${Math.round(n.x)}, ${Math.round(n.y)}, ${Math.round(n.z)}`:"--"}const g6=4,y6=100;let ot=null,Yg=null,rh=null,fo=null,po=null,oh=null,iw=0,Va=null;const uf=BE({refreshTimelineRanges(){hh()},rerenderCurrentState(){ot&&ot.setBoostPickupAnimationEnabled(ot.getState().boostPickupAnimationEnabled)},requestConfigSync(){mn()}}),cd=l$({rerenderCurrentState(){if(!ot)return;const n=ot.getState();pc(n.frameIndex)},refreshTimelineRanges(){hh()},requestConfigSync(){mn()}},{boostPickupFilters:uf}),_n=R8({modules:cd,boostPickupFilters:uf,getContext:_o,getReplayPlayer:()=>ot,getTimelineOverlay:()=>Yg,getEventTimelineSources:jg,withTimelineEventSeekTimes:m1,renderModuleSummary:Ja,renderModuleSettings:Qa,renderStatsWindows(){ot&&pc(ot.getState().frameIndex)},renderTimelineEventCount:Qr,requestConfigSync:mn}),vl=o6({goalWatchLeadSeconds:g6,getReplayPlayer:()=>ot,getCameraControlsController:()=>Bi,getMechanicsReviewController:()=>zi,getSkipPostGoalTransitions:()=>Ga,getSkipKickoffs:()=>$a,syncBoostPadOverlayPlugin:p1,setupActiveModules:dh,renderModuleSummary:Ja,renderModuleSettings:Qa,renderStatsWindows(n){pc(n)},scheduleConfigUrlUpdate:mn}),bi=c6({getFloatingWindowController:()=>aa,getLauncherMenu:()=>I_,getLauncherToggle:()=>P_,getFileInput:()=>lh});let bl=null,lh,u1,R_,sw,P_,I_,aw,rw,ow,lw,cw,uw,fm,pm,mm,_m,Bu,zu,dw,hw,fw,pw,ea,d1,h1,L_,Ga,Jr=null,$a,xl,wl,Hu=null,D_=Jl(),Bi=null,Sl=null,mw=null,mo=null,ec=null,tc=null,ch=null,zi=null,aa=null,k_=null,uh=null,ud=null,na=null,O_=null,As=null;function v6(n){return _n.getActiveCapabilityIds(n)}function b6(){}function _o(){return!ot||!fo||!po?null:{player:ot,replay:ot.replay,statsTimeline:fo,statsFrameLookup:po,fieldScale:1}}function dh(){_n.setupActiveModules()}function f1(){_n.teardownActiveModules()}function _w(n,e,t){_n.toggleCapability(n,e,t)}function x6(){_n.clearTimelineEventSources()}function w6(){_n.clearTimelineRangeSources()}function S6(){_n.clearStandalonePlugins()}function p1(){_n.syncBoostPadOverlayPlugin()}function gw(){_n.syncTimelineEvents()}function hh(){_n.syncTimelineRanges()}function Qr(){const n=_o();if(!n){L_.textContent="--";return}L_.textContent=`${T6(n)}`}function T6(n){return tc?.countVisibleSources(n)??0}function ae(n,e){const t=n.querySelector(e);if(!(t instanceof HTMLElement))throw new Error(`Missing element for selector: ${e}`);return t}function M6(n){if(!aa)throw new Error("Floating windows are not initialized.");return aa.readPlacement(n)}function E6(n,e){aa?.applyPlacement(n,e)}function pc(n=ot?.getState().frameIndex??0,e={}){mo?.render(n,e)}function C6(n){mo?.create(n)}function A6(){mo?.clear()}function mn(){na?.scheduleConfigUrlUpdate()}function R6(n){na?.applyConfigToStaticControls(n)}function m1(n){return n.map(e=>({...e,seekTime:Pg(e)}))}function Ja(){ch?.renderSummary()}function _1(){tc?.render()}function jg(n){return tc?.getSources(n)??[]}function P6(){const n=_o();return G$(n,jg(n))}function Zg(){ec?.render()}function Jg(n){const e=bl?.querySelector(`[data-window-id="${n}"]`);return!!(e&&!e.hidden)}function Qg(n,e={}){!e.forceScroll&&!Jg("event-playlist")||ec?.syncTimeline(n,e)}function g1(){ec?.reset()}function I6(n){const e=G8(n);e&&(_n.activateMechanicTimelineKind(e),_1())}function L6(n){return zi?.enforceClipBoundary(n)??!1}function Qa(){ch?.renderSettings()}function ey(n=ot?.getState().frameIndex??0){k_?.render(n)}function y1(n=ot?.getState()??null){Jg("shot-visualization")&&ud?.render(n)}function D6(n){if(bi.toggleWindow(n),!!Jg(n)){if(n==="event-playlist"){Zg();const e=ot?.getState();e&&Qg(e,{forceScroll:!0})}n==="shot-visualization"&&y1(ot?.getState()??null)}}function k6(n){uh?.setTransportEnabled(n,ot?.getState())}function v1(n=rh?.getStatus()??null){Sl?.sync(n)}function O6(n){if(L6(n))return;const e=performance.now();n.playing&&e-iwzW(n,e=>{ea.textContent=tf(e),Jr?.update(e)})))}async function F_(n,e){await QW(n,e,{elements:{fileInput:lh,viewport:u1,emptyState:R_,statusReadout:ea,playersReadout:d1,framesReadout:h1,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl},getReplayLoadModal:()=>Jr,getReplayPlayer:()=>ot,setReplayPlayer(t){ot=t,Va?.syncSource()},getUnsubscribe:()=>oh,setUnsubscribe(t){oh=t},setCanvasRecorder(t){rh=t},setLoadedReplayName(t){O_=t},setTimelineOverlay(t){Yg=t},setStatsTimeline(t){fo=t,Va?.syncSource()},setStatsFrameLookup(t){po=t},setStatRegistry(t){D_=t},getInitialConfig:()=>As,setApplyingConfig(t){na?.setApplyingConfig(t)},getReplayTimelineEvents(t){return A5(t,_n.getActiveTimelineEventSourceIds())},withTimelineEventSeekTimes:m1,includeBoostPickupAnimationPickup:F6,syncRecordingWindow:v1,setTransportEnabled:k6,teardownActiveModules:f1,clearTimelineEventSources:x6,clearTimelineRangeSources:w6,clearStandalonePlugins:S6,clearRenderCaches:b6,resetEventPlaylistWindow:g1,renderModuleSummary:Ja,renderScoreboard:ey,renderTimelineEventCount:Qr,renderMechanicsTimelineControls:_1,renderEventPlaylistWindow:Zg,renderModuleSettings:Qa,syncBoostPadOverlayPlugin:p1,setupActiveModules:dh,renderSnapshot:O6,applyConfigToReplayPlayer:vl.applyConfigToReplayPlayer,renderStatsWindows:pc,syncEventPlaylistTimeline:Qg,getCameraControlsController:()=>Bi})}function U6(n,e={}){Hu?.(),n.innerHTML=d3(),bl=n,Jr=IH(n),aa=OW({getRoot:()=>bl??document,requestConfigSync:mn}),lh=ae(n,"#replay-file"),u1=ae(n,"#viewport"),R_=ae(n,"#empty-state"),sw=ae(n,"#empty-load-replay"),P_=ae(n,"#launcher-toggle"),I_=ae(n,"#launcher-menu"),aw=ae(n,"#load-replay-action"),rw=ae(n,"#floating-window-layer"),k_=u8({body:ae(n,"#scoreboard-window-body"),getReplayPlayer:()=>ot,getStatsFrameLookup:()=>po});const t=ae(n,"#mechanics-timeline-window-body");tc=q$({body:t,modules:cd,getContext:_o,getActiveTimelineEventSourceIds:()=>_n.getActiveTimelineEventSourceIds(),getActiveMechanicTimelineKinds:()=>_n.getActiveMechanicTimelineKinds(),toggleEventSource(d,h){_w(d,"events",h)},setMechanicTimelineKind(d,h){_n.setMechanicTimelineKind(d,h)},setupActiveModules:dh,syncTimelineEvents:gw,syncTimelineRanges:hh,renderModuleSummary:Ja,renderModuleSettings:Qa,renderTimelineEventCount:Qr,requestConfigSync:mn}),ow=ae(n,"#event-playlist-window-body"),ec=NW({body:ow,getReplayPlayer:()=>ot,getSources:P6,cueTimelineEvent:vl.cueTimelineEvent,formatTime:ss}),ud=new h6({body:ae(n,"#shot-visualization-window-body"),getReplayPlayer:()=>ot,cueTimelineEvent:vl.cueTimelineEvent}),lw=ae(n,"#replay-loading-summary"),cw=ae(n,"#replay-loading-active"),uw=ae(n,"#replay-loading-list");const i=X8({elements:{reviewSummary:ae(n,"#mechanics-review-replay-load-summary"),loadingSummary:lw,loadingActive:cw,loadingList:uw},isActiveReview(d){return zi?.review===d},onActiveLoadProgress(d){ea.textContent=tf(d),Jr?.update(d)}});zi=Y8({elements:{file:ae(n,"#mechanics-review-file"),url:ae(n,"#mechanics-review-url"),loadUrl:ae(n,"#mechanics-review-load-url"),status:ae(n,"#mechanics-review-status"),index:ae(n,"#mechanics-review-index"),title:ae(n,"#mechanics-review-title"),mechanic:ae(n,"#mechanics-review-mechanic"),player:ae(n,"#mechanics-review-player"),clip:ae(n,"#mechanics-review-clip"),event:ae(n,"#mechanics-review-event"),reason:ae(n,"#mechanics-review-reason"),previous:ae(n,"#mechanics-review-prev"),replay:ae(n,"#mechanics-review-replay"),next:ae(n,"#mechanics-review-next"),confirm:ae(n,"#mechanics-review-confirm"),reject:ae(n,"#mechanics-review-reject"),uncertain:ae(n,"#mechanics-review-uncertain"),count:ae(n,"#mechanics-review-count"),list:ae(n,"#mechanics-review-list")},replayLoads:i,getReplayPlayer:()=>ot,resetReplayTransitionControls(){Ga.checked=!1,$a.checked=!1},activateTimelineSource:I6,loadReplayBundleForDisplay:F_,applyClipPerspective(d){Bi?.followPlayerWithReplayCamera(d.playerId,{ballCam:d.ballCam,usePlayerCameraSettings:d.usePlayerCameraSettings})},showReplayLoadingWindow(){bi.showWindow("replay-loading")}});const s=ae(n,"#boost-pickup-filters-window-body"),a=ae(n,"#touch-controls-window-body");fm=ae(n,"#stats-window-layer"),mo=w$({layer:fm,getReplayPlayer:()=>ot,getStatsTimeline:()=>fo,getStatsFrameLookup:()=>po,getStatRegistry:()=>D_,readWindowPlacement:M6,applyWindowPlacement:E6,bringWindowToFront:bi.bringWindowToFront,setLauncherOpen:bi.setLauncherOpen,requestConfigSync:mn,watchGoalReplay:vl.watchGoalReplay,cueGoalReplay:vl.cueGoalReplay}),pm=ae(n,"#toggle-playback"),mm=ae(n,"#previous-frame"),_m=ae(n,"#next-frame"),Bu=ae(n,"#playback-rate"),Bi=DH({elements:{attachedPlayer:ae(n,"#attached-player"),cameraViewFreeButton:ae(n,"#camera-view-free"),cameraViewFollowButton:ae(n,"#camera-view-follow"),cameraViewAutoPossession:ae(n,"#camera-view-auto-possession"),cameraViewOverheadButton:ae(n,"#camera-view-overhead"),cameraViewSideButton:ae(n,"#camera-view-side"),usePlayerCameraSettings:ae(n,"#use-player-camera-settings"),cameraSettingsControls:ae(n,"#camera-settings-controls"),customCameraFov:ae(n,"#custom-camera-fov"),customCameraHeight:ae(n,"#custom-camera-height"),customCameraPitch:ae(n,"#custom-camera-pitch"),customCameraDistance:ae(n,"#custom-camera-distance"),customCameraStiffness:ae(n,"#custom-camera-stiffness"),customCameraSwivelSpeed:ae(n,"#custom-camera-swivel-speed"),customCameraTransitionSpeed:ae(n,"#custom-camera-transition-speed"),customCameraFovReadout:ae(n,"#custom-camera-fov-readout"),customCameraHeightReadout:ae(n,"#custom-camera-height-readout"),customCameraPitchReadout:ae(n,"#custom-camera-pitch-readout"),customCameraDistanceReadout:ae(n,"#custom-camera-distance-readout"),customCameraStiffnessReadout:ae(n,"#custom-camera-stiffness-readout"),customCameraSwivelSpeedReadout:ae(n,"#custom-camera-swivel-speed-readout"),customCameraTransitionSpeedReadout:ae(n,"#custom-camera-transition-speed-readout"),ballCamOffButton:ae(n,"#ball-cam-off"),ballCamOnButton:ae(n,"#ball-cam-on"),ballCamPlayerButton:ae(n,"#ball-cam-player"),nameplateLift:ae(n,"#custom-nameplate-lift"),nameplateLiftReadout:ae(n,"#custom-nameplate-lift-readout"),cameraProfileReadout:ae(n,"#camera-profile-readout"),cameraFovReadout:ae(n,"#camera-fov-readout"),cameraHeightReadout:ae(n,"#camera-height-readout"),cameraPitchReadout:ae(n,"#camera-pitch-readout"),cameraBaseDistanceReadout:ae(n,"#camera-base-distance-readout"),cameraStiffnessReadout:ae(n,"#camera-stiffness-readout")},getReplayPlayer:()=>ot,requestConfigSync:mn,onAutoPossessionChange(d){Va?.syncSource(),d&&Va?.syncCurrentFrame()}}),Va=rV({getReplayPlayer:()=>ot,getStatsTimeline:()=>fo,getCameraControlsController:()=>Bi}),VE(ae(n,"#touch-color-legend-body"),["team"]),ch=J$({elements:{summary:ae(n,"#module-summary"),settings:ae(n,"#module-settings"),boostPickupFilters:s,touchControls:a},modules:cd,boostPickupFilters:uf,getContext:_o,getTimelineSources:()=>jg(_o()),getActiveModules:()=>_n.getActiveModules(),getActiveCapabilityIds:v6,getBoostPickupAnimationEnabled:()=>ot?.getState().boostPickupAnimationEnabled??!1,toggleCapability:_w,toggleBoostPickupAnimation(){const d=!(ot?.getState().boostPickupAnimationEnabled??!1);ot?.setBoostPickupAnimationEnabled(d),dh(),Ja(),Qa(),mn()},syncTimelineEvents:gw,syncTimelineRanges:hh,renderTimelineEventCount:Qr,requestConfigSync:mn}),dw=ae(n,"#time-readout"),hw=ae(n,"#frame-readout"),fw=ae(n,"#duration-readout"),pw=ae(n,"#playback-status-readout"),ea=ae(n,"#status-readout"),d1=ae(n,"#players-readout"),h1=ae(n,"#frames-readout"),L_=ae(n,"#events-readout"),zu=ae(n,"#playback-rate-readout"),Ga=ae(n,"#skip-post-goal-transitions"),$a=ae(n,"#skip-kickoffs"),xl=ae(n,"#hitbox-wireframes"),wl=ae(n,"#hitbox-only-mode"),uh=h8({elements:{togglePlayback:pm,previousFrame:mm,nextFrame:_m,playbackRate:Bu,playbackRateReadout:zu,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl,emptyState:R_,timeReadout:dw,frameReadout:hw,durationReadout:fw,playbackStatusReadout:pw},getFrameCount:()=>ot?.replay.frameCount??0,getCameraControlsController:()=>Bi}),Sl=r8({elements:{fps:ae(n,"#recording-fps"),playbackRate:ae(n,"#recording-playback-rate"),start:ae(n,"#recording-start"),fullReplay:ae(n,"#recording-full-replay"),stop:ae(n,"#recording-stop"),download:ae(n,"#recording-download"),clear:ae(n,"#recording-clear"),status:ae(n,"#recording-status"),elapsed:ae(n,"#recording-elapsed"),size:ae(n,"#recording-size"),type:ae(n,"#recording-type")},getCanvasRecorder:()=>rh,getReplayPlayer:()=>ot,getLoadedReplayName:()=>O_,setStatus(d){ea.textContent=d},requestConfigSync:mn}),mw=C8({elements:{mechanic:ae(n,"#missed-event-mechanic"),capture:ae(n,"#missed-event-capture"),list:ae(n,"#missed-event-list"),export:ae(n,"#missed-event-export"),upload:ae(n,"#missed-event-upload"),clear:ae(n,"#missed-event-clear"),status:ae(n,"#missed-event-status")},getReplayPlayer:()=>ot,showWindow:()=>bi.showWindow("missed-events")}),na=l6({modules:cd,playbackRate:Bu,playbackRateReadout:zu,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl,getReplayPlayer:()=>ot,getCameraControlsController:()=>Bi,getRecordingWindowController:()=>Sl,getFloatingWindowController:()=>aa,getStatsWindowsController:()=>mo,getActiveModulesRuntime:()=>_n,getInitialConfig:()=>As,renderModuleSummary:Ja,renderModuleSettings:Qa,renderTimelineEventCount:Qr});const r=i1(window.location),o=yW(window.location);let l=null;if(e.initialConfig!==void 0)As=e.initialConfig;else{try{As=gW(window.location)}catch(d){l=d,console.error("Invalid stats player config:",d),ea.textContent=d instanceof Error?d.message:"Invalid stats player config",As=null}o&&JW(r,As,l)}const c=new AbortController;bi.installWindowDragging(rw,c.signal),bi.installWindowDragging(fm,c.signal);const u=()=>{c.abort(),oh?.(),oh=null,f1(),ot?.destroy(),ot=null,rh=null,Yg=null,fo=null,po=null,D_=Jl(),A6(),mo=null,_n.reset(),Jr?.destroy(),Jr=null,g1(),tc=null,ec=null,zi?.reset(),zi=null,O_=null,Va?.reset(),Va=null,Bi=null,Sl=null,ch=null,k_=null,uh=null,ud?.destroy(),ud=null,As=null,na?.reset(),na=null,aa?.reset(),aa=null,bl===n&&(bl=null,n.replaceChildren()),Hu===u&&(Hu=null)};if(Hu=u,As){na?.setApplyingConfig(!0);try{R6(As)}finally{na?.setApplyingConfig(!1)}}return f8({elements:{root:n,launcherToggle:P_,launcherMenu:I_,loadReplayAction:aw,emptyLoadReplay:sw,fileInput:lh,togglePlayback:pm,previousFrame:mm,nextFrame:_m,playbackRate:Bu,playbackRateReadout:zu,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl},signal:c.signal,setLauncherOpen:bi.setLauncherOpen,openReplayFilePicker:bi.openReplayFilePicker,getElementWindowId:bi.getElementWindowId,toggleWindow:D6,hideWindow:bi.hideWindow,createStatsWindow:C6,async loadReplayFile(d){try{zi?.clearCurrentClip({resetReplayId:!0,render:!0}),await yw(UW(d))}catch(h){console.error("Failed to load replay:",h),ea.textContent=h instanceof Error?h.message:"Failed to load replay"}},togglePlayback(){ot?.togglePlayback(),mn()},stepFrames(d){ot?.stepFrames(d),mn()},setPlaybackRate(d){ot?.setPlaybackRate(d),mn()},setSkipPostGoalTransitionsEnabled(d){ot?.setSkipPostGoalTransitionsEnabled(d),mn()},setSkipKickoffsEnabled(d){ot?.setSkipKickoffsEnabled(d),mn()},setHitboxWireframesEnabled(d){ot?.setHitboxWireframesEnabled(d),mn()},setHitboxOnlyModeEnabled(d){ot?.setHitboxOnlyModeEnabled(d),mn()}}),zi?.installEventListeners(c.signal),Sl?.installEventListeners(c.signal),mw?.installEventListeners(c.signal),Bi?.installEventListeners(c.signal),_8({getReplayPlayer:()=>ot,signal:c.signal}),window.addEventListener("message",d=>{if(d.origin!==window.location.origin)return;const h=d.data;!h||typeof h!="object"||h.source!=="rocket-sense"||h.type==="activateReviewItem"&&typeof h.index=="number"&&Number.isInteger(h.index)&&zi?.activateItem(h.index)},{signal:c.signal}),Ja(),Qa(),ey(),Bi?.renderProfile(),Bi?.syncModeButtons(),v1(),Qr(),zi?.render(),Zg(),r6({signal:c.signal,location:window.location,statusReadout:ea,initialBundle:e.initialBundle,initialReplayName:e.initialReplayName,loadFromLocation:e.loadFromLocation,loadReplay:yw,loadReplayBundleForDisplay:F_,getMechanicsReviewController:()=>zi,showMechanicsReviewWindow(){bi.showWindow("mechanics-review")}}),{root:n,destroy:u}}export{U6 as mountStatEvaluationPlayer}; + `,this.chartCanvas=this.mustElement("#shot-chart-canvas"),this.shotList=this.mustElement("#shot-list"),this.summary=this.mustElement("#shot-visualization-summary"),this.details=this.mustElement("#shot-details"),this.sceneRoot=this.mustElement("#shot-demo-scene"),this.emptyState=this.mustElement("#shot-visualization-empty"),this.chartCanvas.addEventListener("click",t=>this.handleChartClick(t))}chartCanvas;shotList;summary;details;sceneRoot;emptyState;renderer=null;scene=null;camera=null;resizeObserver=null;selectedShotId=null;cachedReplay=null;cachedShots=[];lastShotsSignature="";lastListSelectionKey=null;lastSelectedShotKey=null;shotButtons=new Map;destroy(){this.resizeObserver?.disconnect(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}render(e=this.options.getReplayPlayer()?.getState()??null){const t=this.shotEvents(),i=e?.currentTime??null;this.findSelectedShot(t)||(this.selectedShotId=t[0]?this.shotKey(t[0],0):null);const s=this.findSelectedShot(t),a=s?.key??null,r=this.shotsSignature(t),o=r!==this.lastShotsSignature;this.emptyState.hidden=t.length>0,o&&(this.summary.textContent=this.summaryText(t)),o||a!==this.lastListSelectionKey?(this.renderShotList(t,i,a),this.lastListSelectionKey=a):this.updateShotListActiveState(t,i),this.renderChart(t,i),(o||a!==this.lastSelectedShotKey)&&(this.renderSelectedShot(s?.shot??null),this.lastSelectedShotKey=a),this.lastShotsSignature=r}shotEvents(){const e=this.options.getReplayPlayer()?.replay;return e?e===this.cachedReplay?this.cachedShots:(this.cachedReplay=e,this.cachedShots=e.timelineEvents.filter(q6),this.cachedShots):(this.cachedReplay=null,this.cachedShots=[],[])}summaryText(e){if(e.length===0)return"No shots";const t=e.filter(a=>a.shot.resulting_save).length,i=e.map(a=>a.shot.ball_speed).filter(a=>Number.isFinite(a)),s=i.length===0?null:i.reduce((a,r)=>a+r,0)/i.length;return`${e.length} shots | ${t} saved | avg ${Vu(s)}`}renderShotList(e,t,i){this.shotButtons.clear(),this.shotList.replaceChildren(...e.map((s,a)=>{const r=this.shotKey(s,a),o=document.createElement("button");o.type="button",o.className="shot-list-item",o.dataset.selected=String(r===i),o.dataset.active=String(vm(s,t)),o.addEventListener("click",()=>{this.selectedShotId=r,this.options.cueTimelineEvent(s),this.render()});const l=document.createElement("span");l.className="shot-list-title",l.textContent=s.playerName??s.playerId??`Shot ${a+1}`;const c=document.createElement("span");return c.className="shot-list-meta",c.textContent=`${uw(s.time)} | ${Vu(s.shot.ball_speed)} | ${s.shot.resulting_save?"saved":"unsaved"}`,o.append(l,c),this.shotButtons.set(r,o),o}))}updateShotListActiveState(e,t){e.forEach((i,s)=>{const a=this.shotButtons.get(this.shotKey(i,s));a&&(a.dataset.active=String(vm(i,t)))})}renderChart(e,t){const i=this.chartCanvas.getContext("2d");if(!i)return;const s=window.devicePixelRatio||1,a=this.chartCanvas.getBoundingClientRect(),r=Math.max(320,Math.round(a.width*s)),o=Math.max(220,Math.round(a.height*s));(this.chartCanvas.width!==r||this.chartCanvas.height!==o)&&(this.chartCanvas.width=r,this.chartCanvas.height=o),i.setTransform(s,0,0,s,0,0);const l=r/s,c=o/s;i.clearRect(0,0,l,c),Y6(i,l,c),e.forEach((u,d)=>{const h=u.shot.shot_touch_position??u.shot.ball_position,f=dh(h,l,c),p=!!u.shot.resulting_save,g=vm(u,t),_=this.shotKey(u,d)===this.selectedShotId,m=_?6:g?5:4;i.beginPath(),i.arc(f.x,f.y,m,0,Math.PI*2),i.fillStyle=p?"#f2c14e":"#62d2a2",i.fill(),i.lineWidth=_?2.5:1.25,i.strokeStyle=_?"#f8fafc":g?"#e11d48":"rgba(4, 12, 20, 0.85)",i.stroke()})}renderSelectedShot(e){if(!e){this.details.replaceChildren(),this.clearThreeScene();return}this.details.replaceChildren(hl("Player",e.playerName??e.playerId??"--"),hl("Speed",Vu(e.shot.ball_speed)),hl("Toward goal",Vu(e.shot.ball_speed_toward_goal)),hl("Touch",Z6(e.shot.shot_touch_position??e.shot.ball_position)),hl("Save",e.shot.resulting_save?uw(e.shot.resulting_save.time):"--")),this.renderThreeScene(e)}renderThreeScene(e){const t=this.ensureRenderer(),i=this.scene,s=this.camera;i.clear(),i.add(new mc(16777215,1.2));const a=new Fo(16777215,1.7);a.position.set(18,28,22),i.add(a);const r=new we(new kn(O_*2*Yi,fr*2*Yi),new Ye({color:1520422,side:ct}));r.rotation.x=-Math.PI/2,i.add(r);const o=new Rt({color:14280674,transparent:!0,opacity:.55});i.add(new Ln(new Wh(r.geometry),o)),i.add(lw(!0)),i.add(lw(!1));const l=cw(e.shot.shot_touch_position??e.shot.ball_position),c=cw(e.shot.target_goal_position),u=e.shot.ball_velocity,d=u?l.clone().add(j6(u).normalize().multiplyScalar(22)):c.clone(),h=new dg([l,l.clone().lerp(d,.45).setY(Math.max(l.y,d.y)+2.8),d]),f=new Ge().setFromPoints(h.getPoints(36));i.add(new In(f,new Rt({color:e.shot.resulting_save?15909198:6476450,linewidth:2})));const p=new we(new yn(.9,24,16),new Pn({color:16317180,roughness:.36}));p.position.copy(l),i.add(p);const g=new we(new ni(1.05,1.45,32),new Ye({color:8892372,side:ct}));g.position.copy(c),g.rotation.y=Math.PI/2,i.add(g),s.position.set(0,54,72),s.lookAt(0,0,0),t.render(i,s)}ensureRenderer(){if(this.renderer&&this.scene&&this.camera)return this.resizeThreeScene(),this.renderer;const e=new kg({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return e.setPixelRatio(window.devicePixelRatio||1),this.sceneRoot.replaceChildren(e.domElement),this.renderer=e,this.scene=new cc,this.scene.background=new ue(463132),this.camera=new Jt(42,1,.1,500),this.resizeObserver=new ResizeObserver(()=>{this.resizeThreeScene();const t=this.shotEvents().find(i=>i.id===this.selectedShotId)??null;t&&this.renderThreeScene(t)}),this.resizeObserver.observe(this.sceneRoot),this.resizeThreeScene(),e}resizeThreeScene(){if(!this.renderer||!this.camera)return;const e=this.sceneRoot.getBoundingClientRect(),t=Math.max(240,Math.round(e.width)),i=Math.max(170,Math.round(e.height));this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.renderer.setSize(t,i,!1)}clearThreeScene(){this.sceneRoot.replaceChildren(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}handleChartClick(e){const t=this.shotEvents(),i=this.chartCanvas.getBoundingClientRect(),s={x:e.clientX-i.left,y:e.clientY-i.top};let a=null,r=Number.POSITIVE_INFINITY;for(const o of t){const l=dh(o.shot.shot_touch_position??o.shot.ball_position,i.width,i.height),c=Math.hypot(l.x-s.x,l.y-s.y);c`${this.shotKey(t,i)}:${t.time}:${t.shot.ball_speed}`).join("|")}}function q6(n){return n.kind==="shot"&&!!n.shot}function vm(n,e){return e!==null&&Math.abs(e-n.time)<1.5}function Y6(n,e,t){n.fillStyle="#0f2b24",n.fillRect(0,0,e,t),n.strokeStyle="rgba(226, 241, 236, 0.74)",n.lineWidth=1.2,n.strokeRect(18,18,e-36,t-36),n.beginPath(),n.moveTo(18,t/2),n.lineTo(e-18,t/2),n.stroke(),n.beginPath(),n.arc(e/2,t/2,34,0,Math.PI*2),n.stroke();const s=dh({x:0,y:-fr},e,t),a=dh({x:0,y:fr},e,t);n.fillStyle="#4fa3ff",n.fillRect(s.x-28,s.y-4,56,8),n.fillStyle="#ff8a4c",n.fillRect(a.x-28,a.y-4,56,8)}function dh(n,e,t){const s=e-36,a=t-36;return{x:18+(n.x+O_)/(O_*2)*s,y:18+(1-(n.y+fr)/(fr*2))*a}}function lw(n){const e=new Mt,t=new Rt({color:n?16747084:5219327}),i=(n?fr:-fr)*Yi,s=W6*Yi,a=X6*Yi,r=[new S(-s,0,i),new S(-s,a,i),new S(s,a,i),new S(s,0,i)];return e.add(new In(new Ge().setFromPoints(r),t)),e}function cw(n){return new S(n.x*Yi,n.z*Yi,n.y*Yi)}function j6(n){return new S(n.x*Yi,n.z*Yi,n.y*Yi)}function hl(n,e){const t=document.createElement("div"),i=document.createElement("dt");i.textContent=n;const s=document.createElement("dd");return s.textContent=e,t.append(i,s),t}function uw(n){return Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function Vu(n){return Number.isFinite(n)?`${Math.round(n)} uu/s`:"--"}function Z6(n){return n?`${Math.round(n.x)}, ${Math.round(n.y)}, ${Math.round(n.z)}`:"--"}const J6=4,Q6=100;let st=null,ny=null,hh=null,_o=null,go=null,fh=null,dw=0,Ga=null;const _f=YE({refreshTimelineRanges(){yh()},rerenderCurrentState(){st&&st.setBoostPickupAnimationEnabled(st.getState().boostPickupAnimationEnabled)},requestConfigSync(){mn()}}),pd=B$({rerenderCurrentState(){if(!st)return;const n=st.getState();yc(n.frameIndex)},refreshTimelineRanges(){yh()},requestConfigSync(){mn()}},{boostPickupFilters:_f}),_n=u6({modules:pd,boostPickupFilters:_f,getContext:vo,getReplayPlayer:()=>st,getTimelineOverlay:()=>ny,getEventTimelineSources:iy,withTimelineEventSeekTimes:M1,renderModuleSummary:Qa,renderModuleSettings:er,renderStatsWindows(){st&&yc(st.getState().frameIndex)},renderTimelineEventCount:to,requestConfigSync:mn}),wl=V6({goalWatchLeadSeconds:J6,getReplayPlayer:()=>st,getCameraControlsController:()=>zi,getMechanicsReviewController:()=>Hi,getSkipPostGoalTransitions:()=>$a,getSkipKickoffs:()=>Wa,syncBoostPadOverlayPlugin:T1,setupActiveModules:gh,renderModuleSummary:Qa,renderModuleSettings:er,renderStatsWindows(n){yc(n)},scheduleConfigUrlUpdate:mn}),bi=$6({getFloatingWindowController:()=>ra,getLauncherMenu:()=>U_,getLauncherToggle:()=>N_,getFileInput:()=>ph});let Sl=null,ph,b1,F_,hw,N_,U_,fw,pw,mw,_w,gw,yw,bm,xm,wm,Sm,Gu,$u,vw,bw,xw,ww,ea,x1,w1,B_,$a,eo=null,Wa,Tl,Ml,Wu=null,z_=nc(),zi=null,El=null,Sw=null,md=null,yo=null,sc=null,ac=null,mh=null,Hi=null,ra=null,H_=null,_h=null,_d=null,ia=null,V_=null,As=null;function e9(n){return _n.getActiveCapabilityIds(n)}function t9(){}function vo(){return!st||!_o||!go?null:{player:st,replay:st.replay,statsTimeline:_o,statsFrameLookup:go,fieldScale:1}}function gh(){_n.setupActiveModules()}function S1(){_n.teardownActiveModules()}function Tw(n,e,t){_n.toggleCapability(n,e,t)}function n9(){_n.clearTimelineEventSources()}function i9(){_n.clearTimelineRangeSources()}function s9(){_n.clearStandalonePlugins()}function T1(){_n.syncBoostPadOverlayPlugin()}function Mw(){_n.syncTimelineEvents()}function yh(){_n.syncTimelineRanges()}function to(){const n=vo();if(!n){B_.textContent="--";return}B_.textContent=`${a9(n)}`}function a9(n){return ac?.countVisibleSources(n)??0}function se(n,e){const t=n.querySelector(e);if(!(t instanceof HTMLElement))throw new Error(`Missing element for selector: ${e}`);return t}function r9(n){if(!ra)throw new Error("Floating windows are not initialized.");return ra.readPlacement(n)}function o9(n,e){ra?.applyPlacement(n,e)}function yc(n=st?.getState().frameIndex??0,e={}){yo?.render(n,e)}function l9(n){yo?.create(n)}function c9(){yo?.clear()}function mn(){ia?.scheduleConfigUrlUpdate()}function u9(n){ia?.applyConfigToStaticControls(n)}function M1(n){return n.map(e=>({...e,seekTime:Ng(e)}))}function Qa(){mh?.renderSummary()}function E1(){ac?.render()}function iy(n){return ac?.getSources(n)??[]}function d9(){const n=vo();return bW(n,iy(n))}function sy(){sc?.render()}function ay(n){const e=Sl?.querySelector(`[data-window-id="${n}"]`);return!!(e&&!e.hidden)}function ry(n,e={}){!e.forceScroll&&!ay("event-playlist")||sc?.syncTimeline(n,e)}function C1(){sc?.reset()}function h9(n){const e=T6(n);e&&(_n.activateMechanicTimelineKind(e),E1())}function f9(n){return Hi?.enforceClipBoundary(n)??!1}function er(){mh?.renderSettings()}function oy(n=st?.getState().frameIndex??0){H_?.render(n)}function A1(n=st?.getState()??null){ay("shot-visualization")&&_d?.render(n)}function p9(n){if(bi.toggleWindow(n),!!ay(n)){if(n==="event-playlist"){sy();const e=st?.getState();e&&ry(e,{forceScroll:!0})}n==="shot-visualization"&&A1(st?.getState()??null)}}function m9(n){_h?.setTransportEnabled(n,st?.getState())}function R1(n=hh?.getStatus()??null){El?.sync(n),md?.sync()}function _9(n){if(f9(n))return;const e=performance.now();n.playing&&e-dwg8(n,e=>{ea.textContent=lf(e),eo?.update(e)})))}async function G_(n,e){await P8(n,e,{elements:{fileInput:ph,viewport:b1,emptyState:F_,statusReadout:ea,playersReadout:x1,framesReadout:w1,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml},getReplayLoadModal:()=>eo,getReplayPlayer:()=>st,setReplayPlayer(t){st=t,Ga?.syncSource()},getUnsubscribe:()=>fh,setUnsubscribe(t){fh=t},setCanvasRecorder(t){hh=t},setLoadedReplayName(t){V_=t},setTimelineOverlay(t){ny=t},setStatsTimeline(t){_o=t,Ga?.syncSource()},setStatsFrameLookup(t){go=t},setStatRegistry(t){z_=t},getInitialConfig:()=>As,setApplyingConfig(t){ia?.setApplyingConfig(t)},getReplayTimelineEvents(t){return a4(t,_n.getActiveTimelineEventSourceIds())},withTimelineEventSeekTimes:M1,includeBoostPickupAnimationPickup:g9,syncRecordingWindow:R1,setTransportEnabled:m9,teardownActiveModules:S1,clearTimelineEventSources:n9,clearTimelineRangeSources:i9,clearStandalonePlugins:s9,clearRenderCaches:t9,resetEventPlaylistWindow:C1,renderModuleSummary:Qa,renderScoreboard:oy,renderTimelineEventCount:to,renderMechanicsTimelineControls:E1,renderEventPlaylistWindow:sy,renderModuleSettings:er,syncBoostPadOverlayPlugin:T1,setupActiveModules:gh,renderSnapshot:_9,applyConfigToReplayPlayer:wl.applyConfigToReplayPlayer,renderStatsWindows:yc,syncEventPlaylistTimeline:ry,getCameraControlsController:()=>zi})}function b9(n,e={}){Wu?.(),n.innerHTML=V3(),Sl=n,eo=lV(n),ra=h8({getRoot:()=>Sl??document,requestConfigSync:mn}),ph=se(n,"#replay-file"),b1=se(n,"#viewport"),F_=se(n,"#empty-state"),hw=se(n,"#empty-load-replay"),N_=se(n,"#launcher-toggle"),U_=se(n,"#launcher-menu"),fw=se(n,"#load-replay-action"),pw=se(n,"#floating-window-layer"),H_=H8({body:se(n,"#scoreboard-window-body"),getReplayPlayer:()=>st,getStatsFrameLookup:()=>go});const t=se(n,"#mechanics-timeline-window-body");ac=MW({body:t,modules:pd,getContext:vo,getActiveTimelineEventSourceIds:()=>_n.getActiveTimelineEventSourceIds(),getActiveMechanicTimelineKinds:()=>_n.getActiveMechanicTimelineKinds(),toggleEventSource(d,h){Tw(d,"events",h)},setMechanicTimelineKind(d,h){_n.setMechanicTimelineKind(d,h)},setupActiveModules:gh,syncTimelineEvents:Mw,syncTimelineRanges:yh,renderModuleSummary:Qa,renderModuleSettings:er,renderTimelineEventCount:to,requestConfigSync:mn}),mw=se(n,"#event-playlist-window-body"),sc=p8({body:mw,getReplayPlayer:()=>st,getSources:d9,cueTimelineEvent:wl.cueTimelineEvent,formatTime:wi}),_d=new K6({body:se(n,"#shot-visualization-window-body"),getReplayPlayer:()=>st,cueTimelineEvent:wl.cueTimelineEvent}),_w=se(n,"#replay-loading-summary"),gw=se(n,"#replay-loading-active"),yw=se(n,"#replay-loading-list");const i=C6({elements:{reviewSummary:se(n,"#mechanics-review-replay-load-summary"),loadingSummary:_w,loadingActive:gw,loadingList:yw},isActiveReview(d){return Hi?.review===d},onActiveLoadProgress(d){ea.textContent=lf(d),eo?.update(d)}});Hi=P6({elements:{file:se(n,"#mechanics-review-file"),url:se(n,"#mechanics-review-url"),loadUrl:se(n,"#mechanics-review-load-url"),status:se(n,"#mechanics-review-status"),index:se(n,"#mechanics-review-index"),title:se(n,"#mechanics-review-title"),mechanic:se(n,"#mechanics-review-mechanic"),player:se(n,"#mechanics-review-player"),clip:se(n,"#mechanics-review-clip"),event:se(n,"#mechanics-review-event"),reason:se(n,"#mechanics-review-reason"),previous:se(n,"#mechanics-review-prev"),replay:se(n,"#mechanics-review-replay"),next:se(n,"#mechanics-review-next"),confirm:se(n,"#mechanics-review-confirm"),reject:se(n,"#mechanics-review-reject"),uncertain:se(n,"#mechanics-review-uncertain"),count:se(n,"#mechanics-review-count"),list:se(n,"#mechanics-review-list")},replayLoads:i,getReplayPlayer:()=>st,resetReplayTransitionControls(){$a.checked=!1,Wa.checked=!1},activateTimelineSource:h9,loadReplayBundleForDisplay:G_,applyClipPerspective(d){zi?.followPlayerWithReplayCamera(d.playerId,{ballCam:d.ballCam,usePlayerCameraSettings:d.usePlayerCameraSettings})},showReplayLoadingWindow(){bi.showWindow("replay-loading")}});const s=se(n,"#boost-pickup-filters-window-body"),a=se(n,"#touch-controls-window-body");bm=se(n,"#stats-window-layer"),yo=Q$({layer:bm,getReplayPlayer:()=>st,getStatsTimeline:()=>_o,getStatsFrameLookup:()=>go,getStatRegistry:()=>z_,readWindowPlacement:r9,applyWindowPlacement:o9,bringWindowToFront:bi.bringWindowToFront,setLauncherOpen:bi.setLauncherOpen,requestConfigSync:mn,watchGoalReplay:wl.watchGoalReplay,cueGoalReplay:wl.cueGoalReplay}),xm=se(n,"#toggle-playback"),wm=se(n,"#previous-frame"),Sm=se(n,"#next-frame"),Gu=se(n,"#playback-rate"),zi=uV({elements:{attachedPlayer:se(n,"#attached-player"),cameraViewFreeButton:se(n,"#camera-view-free"),cameraViewFollowButton:se(n,"#camera-view-follow"),cameraViewAutoPossession:se(n,"#camera-view-auto-possession"),cameraViewOverheadButton:se(n,"#camera-view-overhead"),cameraViewSideButton:se(n,"#camera-view-side"),usePlayerCameraSettings:se(n,"#use-player-camera-settings"),cameraSettingsControls:se(n,"#camera-settings-controls"),customCameraFov:se(n,"#custom-camera-fov"),customCameraHeight:se(n,"#custom-camera-height"),customCameraPitch:se(n,"#custom-camera-pitch"),customCameraDistance:se(n,"#custom-camera-distance"),customCameraStiffness:se(n,"#custom-camera-stiffness"),customCameraSwivelSpeed:se(n,"#custom-camera-swivel-speed"),customCameraTransitionSpeed:se(n,"#custom-camera-transition-speed"),customCameraFovReadout:se(n,"#custom-camera-fov-readout"),customCameraHeightReadout:se(n,"#custom-camera-height-readout"),customCameraPitchReadout:se(n,"#custom-camera-pitch-readout"),customCameraDistanceReadout:se(n,"#custom-camera-distance-readout"),customCameraStiffnessReadout:se(n,"#custom-camera-stiffness-readout"),customCameraSwivelSpeedReadout:se(n,"#custom-camera-swivel-speed-readout"),customCameraTransitionSpeedReadout:se(n,"#custom-camera-transition-speed-readout"),ballCamOffButton:se(n,"#ball-cam-off"),ballCamOnButton:se(n,"#ball-cam-on"),ballCamPlayerButton:se(n,"#ball-cam-player"),nameplateLift:se(n,"#custom-nameplate-lift"),nameplateLiftReadout:se(n,"#custom-nameplate-lift-readout"),cameraProfileReadout:se(n,"#camera-profile-readout"),cameraFovReadout:se(n,"#camera-fov-readout"),cameraHeightReadout:se(n,"#camera-height-readout"),cameraPitchReadout:se(n,"#camera-pitch-readout"),cameraBaseDistanceReadout:se(n,"#camera-base-distance-readout"),cameraStiffnessReadout:se(n,"#camera-stiffness-readout")},getReplayPlayer:()=>st,requestConfigSync:mn,onAutoPossessionChange(d){Ga?.syncSource(),d&&Ga?.syncCurrentFrame()}}),Ga=NV({getReplayPlayer:()=>st,getStatsTimeline:()=>_o,getCameraControlsController:()=>zi}),JE(se(n,"#touch-color-legend-body"),["team"]),mh=RW({elements:{summary:se(n,"#module-summary"),settings:se(n,"#module-settings"),boostPickupFilters:s,touchControls:a},modules:pd,boostPickupFilters:_f,getContext:vo,getTimelineSources:()=>iy(vo()),getActiveModules:()=>_n.getActiveModules(),getActiveCapabilityIds:e9,getBoostPickupAnimationEnabled:()=>st?.getState().boostPickupAnimationEnabled??!1,toggleCapability:Tw,toggleBoostPickupAnimation(){const d=!(st?.getState().boostPickupAnimationEnabled??!1);st?.setBoostPickupAnimationEnabled(d),gh(),Qa(),er(),mn()},syncTimelineEvents:Mw,syncTimelineRanges:yh,renderTimelineEventCount:to,requestConfigSync:mn}),vw=se(n,"#time-readout"),bw=se(n,"#frame-readout"),xw=se(n,"#duration-readout"),ww=se(n,"#playback-status-readout"),ea=se(n,"#status-readout"),x1=se(n,"#players-readout"),w1=se(n,"#frames-readout"),B_=se(n,"#events-readout"),$u=se(n,"#playback-rate-readout"),$a=se(n,"#skip-post-goal-transitions"),Wa=se(n,"#skip-kickoffs"),Tl=se(n,"#hitbox-wireframes"),Ml=se(n,"#hitbox-only-mode"),_h=G8({elements:{togglePlayback:xm,previousFrame:wm,nextFrame:Sm,playbackRate:Gu,playbackRateReadout:$u,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml,emptyState:F_,timeReadout:vw,frameReadout:bw,durationReadout:xw,playbackStatusReadout:ww},getFrameCount:()=>st?.replay.frameCount??0,getCameraControlsController:()=>zi}),El=N8({elements:{fps:se(n,"#recording-fps"),playbackRate:se(n,"#recording-playback-rate"),start:se(n,"#recording-start"),fullReplay:se(n,"#recording-full-replay"),stop:se(n,"#recording-stop"),download:se(n,"#recording-download"),clear:se(n,"#recording-clear"),status:se(n,"#recording-status"),elapsed:se(n,"#recording-elapsed"),size:se(n,"#recording-size"),type:se(n,"#recording-type")},getCanvasRecorder:()=>hh,getReplayPlayer:()=>st,getLoadedReplayName:()=>V_,setStatus(d){ea.textContent=d},requestConfigSync:mn}),Sw=s6({elements:{mechanic:se(n,"#missed-event-mechanic"),capture:se(n,"#missed-event-capture"),list:se(n,"#missed-event-list"),export:se(n,"#missed-event-export"),upload:se(n,"#missed-event-upload"),clear:se(n,"#missed-event-clear"),status:se(n,"#missed-event-status")},getReplayPlayer:()=>st,showWindow:()=>bi.showWindow("missed-events")}),md=l6({elements:{name:se(n,"#training-pack-name"),creator:se(n,"#training-pack-creator"),description:se(n,"#training-pack-description"),difficulty:se(n,"#training-pack-difficulty"),shooter:se(n,"#training-pack-shooter"),timeLimit:se(n,"#training-pack-time-limit"),capture:se(n,"#training-pack-capture"),load:se(n,"#training-pack-load"),loadInput:se(n,"#training-pack-load-input"),newPack:se(n,"#training-pack-new"),download:se(n,"#training-pack-download"),shotList:se(n,"#training-pack-shots"),status:se(n,"#training-pack-status")},getReplayPlayer:()=>st}),ia=G6({modules:pd,playbackRate:Gu,playbackRateReadout:$u,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml,getReplayPlayer:()=>st,getCameraControlsController:()=>zi,getRecordingWindowController:()=>El,getFloatingWindowController:()=>ra,getStatsWindowsController:()=>yo,getActiveModulesRuntime:()=>_n,getInitialConfig:()=>As,renderModuleSummary:Qa,renderModuleSettings:er,renderTimelineEventCount:to});const r=f1(window.location),o=YW(window.location);let l=null;if(e.initialConfig!==void 0)As=e.initialConfig;else{try{As=qW(window.location)}catch(d){l=d,console.error("Invalid stats player config:",d),ea.textContent=d instanceof Error?d.message:"Invalid stats player config",As=null}o&&R8(r,As,l)}const c=new AbortController;bi.installWindowDragging(pw,c.signal),bi.installWindowDragging(bm,c.signal);const u=()=>{c.abort(),fh?.(),fh=null,S1(),st?.destroy(),st=null,hh=null,ny=null,_o=null,go=null,z_=nc(),c9(),yo=null,_n.reset(),eo?.destroy(),eo=null,C1(),ac=null,sc=null,Hi?.reset(),Hi=null,V_=null,Ga?.reset(),Ga=null,zi=null,El=null,md=null,mh=null,H_=null,_h=null,_d?.destroy(),_d=null,As=null,ia?.reset(),ia=null,ra?.reset(),ra=null,Sl===n&&(Sl=null,n.replaceChildren()),Wu===u&&(Wu=null)};if(Wu=u,As){ia?.setApplyingConfig(!0);try{u9(As)}finally{ia?.setApplyingConfig(!1)}}return $8({elements:{root:n,launcherToggle:N_,launcherMenu:U_,loadReplayAction:fw,emptyLoadReplay:hw,fileInput:ph,togglePlayback:xm,previousFrame:wm,nextFrame:Sm,playbackRate:Gu,playbackRateReadout:$u,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml},signal:c.signal,setLauncherOpen:bi.setLauncherOpen,openReplayFilePicker:bi.openReplayFilePicker,getElementWindowId:bi.getElementWindowId,toggleWindow:p9,hideWindow:bi.hideWindow,createStatsWindow:l9,async loadReplayFile(d){try{Hi?.clearCurrentClip({resetReplayId:!0,render:!0}),await Ew(m8(d))}catch(h){console.error("Failed to load replay:",h),ea.textContent=h instanceof Error?h.message:"Failed to load replay"}},togglePlayback(){st?.togglePlayback(),mn()},stepFrames(d){st?.stepFrames(d),mn()},setPlaybackRate(d){st?.setPlaybackRate(d),mn()},setSkipPostGoalTransitionsEnabled(d){st?.setSkipPostGoalTransitionsEnabled(d),mn()},setSkipKickoffsEnabled(d){st?.setSkipKickoffsEnabled(d),mn()},setHitboxWireframesEnabled(d){st?.setHitboxWireframesEnabled(d),mn()},setHitboxOnlyModeEnabled(d){st?.setHitboxOnlyModeEnabled(d),mn()}}),Hi?.installEventListeners(c.signal),El?.installEventListeners(c.signal),Sw?.installEventListeners(c.signal),md?.installEventListeners(c.signal),zi?.installEventListeners(c.signal),K8({getReplayPlayer:()=>st,signal:c.signal}),window.addEventListener("message",d=>{if(d.origin!==window.location.origin)return;const h=d.data;!h||typeof h!="object"||h.source!=="rocket-sense"||h.type==="activateReviewItem"&&typeof h.index=="number"&&Number.isInteger(h.index)&&Hi?.activateItem(h.index)},{signal:c.signal}),Qa(),er(),oy(),zi?.renderProfile(),zi?.syncModeButtons(),R1(),to(),Hi?.render(),sy(),H6({signal:c.signal,location:window.location,statusReadout:ea,initialBundle:e.initialBundle,initialReplayName:e.initialReplayName,loadFromLocation:e.loadFromLocation,loadReplay:Ew,loadReplayBundleForDisplay:G_,getMechanicsReviewController:()=>Hi,showMechanicsReviewWindow(){bi.showWindow("mechanics-review")}}),{root:n,destroy:u}}export{b9 as mountStatEvaluationPlayer}; diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/preload-helper-PPVm8Dsz.js b/crates/rocket-sense-server/static/subtr-actor/assets/preload-helper-PPVm8Dsz.js new file mode 100644 index 00000000..f5001933 --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/assets/preload-helper-PPVm8Dsz.js @@ -0,0 +1 @@ +const p="modulepreload",y=function(u,i){return new URL(u,i).href},v={},w=function(i,a,f){let d=Promise.resolve();if(a&&a.length>0){let E=function(e){return Promise.all(e.map(o=>Promise.resolve(o).then(s=>({status:"fulfilled",value:s}),s=>({status:"rejected",reason:s}))))};const r=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),m=t?.nonce||t?.getAttribute("nonce");d=E(a.map(e=>{if(e=y(e,f),e in v)return;v[e]=!0;const o=e.endsWith(".css"),s=o?'[rel="stylesheet"]':"";if(f)for(let c=r.length-1;c>=0;c--){const l=r[c];if(l.href===e&&(!o||l.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${s}`))return;const n=document.createElement("link");if(n.rel=o?"stylesheet":p,o||(n.as="script"),n.crossOrigin="",n.href=e,m&&n.setAttribute("nonce",m),document.head.appendChild(n),o)return new Promise((c,l)=>{n.addEventListener("load",c),n.addEventListener("error",()=>l(new Error(`Unable to preload CSS for ${e}`)))})}))}function h(r){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=r,window.dispatchEvent(t),!t.defaultPrevented)throw r}return d.then(r=>{for(const t of r||[])t.status==="rejected"&&h(t.reason);return i().catch(h)})};export{w as _}; diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/replayLoader.worker-BOmyAjmY.js b/crates/rocket-sense-server/static/subtr-actor/assets/replayLoader.worker-BOmyAjmY.js new file mode 100644 index 00000000..34a9e71b --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/assets/replayLoader.worker-BOmyAjmY.js @@ -0,0 +1,2 @@ +(function(){"use strict";function be(e,t,n,r){const o=pe(e,u.__wbindgen_malloc),i=x,a=u.get_replay_bundle_json_parts_with_progress(o,i,t,k(n)?4294967297:n>>>0,k(r)?4294967297:r>>>0);if(a[2])throw G(a[1]);return G(a[0])}function ge(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(P(t,n))},__wbg_Number_04624de7d0e8332d:function(t){return Number(t)},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(t,n){const r=n,o=typeof r=="bigint"?r:void 0;y().setBigInt64(t+8,k(o)?BigInt(0):o,!0),y().setInt32(t+0,!k(o),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(t){const n=t,r=typeof n=="boolean"?n:void 0;return k(r)?16777215:r?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(t,n){const r=U(n),o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(t,n){return t in n},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(t){return typeof t=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(t){return typeof t=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(t){const n=t;return typeof n=="object"&&n!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(t){return t===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(t,n){return t===n},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(t,n){return t==n},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(t,n){const r=n,o=typeof r=="number"?r:void 0;y().setFloat64(t+8,k(o)?0:o,!0),y().setInt32(t+0,!k(o),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var i=k(o)?0:F(o,u.__wbindgen_malloc,u.__wbindgen_realloc),a=x;y().setInt32(t+4,a,!0),y().setInt32(t+0,i,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(P(t,n))},__wbg_call_389efe28435a9388:function(){return E(function(t,n){return t.call(n)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return E(function(t,n,r){return t.call(n,r)},arguments)},__wbg_done_57b39ecd9addfe81:function(t){return t.done},__wbg_entries_58c7934c745daac7:function(t){return Object.entries(t)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(P(t,n))}finally{u.__wbindgen_free(r,o,1)}},__wbg_get_9b94d73e6221f75c:function(t,n){return t[n>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return E(function(t,n){return Reflect.get(t,n)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(t,n){return t[n]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(t){let n;try{n=t instanceof ArrayBuffer}catch{n=!1}return n},__wbg_instanceof_Map_53af74335dec57f4:function(t){let n;try{n=t instanceof Map}catch{n=!1}return n},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(t){let n;try{n=t instanceof Uint8Array}catch{n=!1}return n},__wbg_isArray_d314bb98fcf08331:function(t){return Array.isArray(t)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(t){return Number.isSafeInteger(t)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(t){return t.length},__wbg_length_35a7bace40f36eac:function(t){return t.length},__wbg_log_f1a1b5cd3f9c7822:function(t,n){console.log(P(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(t){return new Uint8Array(t)},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(Z(t,n))},__wbg_next_3482f54c49e8af19:function(){return E(function(t){return t.next()},arguments)},__wbg_next_418f80d8f5303233:function(t){return t.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(t,n,r){Uint8Array.prototype.set.call(Z(t,n),r)},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return E(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg_value_0546255b415e96c1:function(t){return t.value},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return P(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=u.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function ye(e){const t=u.__externref_table_alloc();return u.__wbindgen_externrefs.set(t,e),t}function U(e){const t=typeof e;if(t=="number"||t=="boolean"||e==null)return`${e}`;if(t=="string")return`"${e}"`;if(t=="symbol"){const o=e.description;return o==null?"Symbol":`Symbol(${o})`}if(t=="function"){const o=e.name;return typeof o=="string"&&o.length>0?`Function(${o})`:"Function"}if(Array.isArray(e)){const o=e.length;let i="[";o>0&&(i+=U(e[0]));for(let a=1;a1)r=n[1];else return toString.call(e);if(r=="Object")try{return"Object("+JSON.stringify(e)+")"}catch{return"Object"}return e instanceof Error?`${e.name}: ${e.message} +${e.stack}`:r}function Z(e,t){return e=e>>>0,O().subarray(e/1,e/1+t)}let T=null;function y(){return(T===null||T.buffer.detached===!0||T.buffer.detached===void 0&&T.buffer!==u.memory.buffer)&&(T=new DataView(u.memory.buffer)),T}function P(e,t){return e=e>>>0,we(e,t)}let B=null;function O(){return(B===null||B.byteLength===0)&&(B=new Uint8Array(u.memory.buffer)),B}function E(e,t){try{return e.apply(this,t)}catch(n){const r=ye(n);u.__wbindgen_exn_store(r)}}function k(e){return e==null}function pe(e,t){const n=t(e.length*1,1)>>>0;return O().set(e,n/1),x=e.length,n}function F(e,t,n){if(n===void 0){const s=D.encode(e),l=t(s.length,1)>>>0;return O().subarray(l,l+s.length).set(s),x=s.length,l}let r=e.length,o=t(r,1)>>>0;const i=O();let a=0;for(;a127)break;i[o+a]=s}if(a!==r){a!==0&&(e=e.slice(a)),o=n(o,r,r=a+e.length*3,1)>>>0;const s=O().subarray(o+a,o+r),l=D.encodeInto(e,s);a+=l.written,o=n(o,r,a,1)>>>0}return x=a,o}function G(e){const t=u.__wbindgen_externrefs.get(e);return u.__externref_table_dealloc(e),t}let z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});z.decode();const he=2146435072;let H=0;function we(e,t){return H+=t,H>=he&&(z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),z.decode(),H=t),z.decode(O().subarray(e,e+t))}const D=new TextEncoder;"encodeInto"in D||(D.encodeInto=function(e,t){const n=D.encode(e);return t.set(n),{read:e.length,written:n.length}});let x=0,u;function ke(e,t){return u=e.exports,T=null,B=null,u.__wbindgen_start(),u}async function xe(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Ae(e){if(u!==void 0)return u;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",self.location.href).href,self.location.href));const t=ge();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await xe(await e,t);return ke(n)}const q="octane",Te={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Se={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function ve(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Oe=ve([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function J(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Q(e){if(!e)return null;switch(J(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function ee(e){return e?Se[J(e)]??null:null}function Ie(e){return Q(e)??ee(e)}function Pe(e){return Te[e]}function Y(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),Y(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),Y(r[1],t))}}}function Be(e){const t=Q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const a=Oe[n];if(a)return a}const r=ee(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return q;const i=[];for(const[a,s]of Object.entries(o))i.push(a),Y(s,i);for(const a of i){const s=Ie(a);if(s)return s}return q}function A(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function N(e,t){return Math.max(0,e-t)}function te(e){return new Map(e.map(t=>[t.id,t]))}const p=70,ne=73,Ee=3072,De=4096,Ne=1792,Me=4184,Re=940,Fe=3308,ze=2816,re=3584,Ce=2484,je=1788,Le=2300,Ve=2048,Ue=1036,He=1024,Ye=1024,$e=4240,oe=34;function C(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function j(e,t,n,r,o){C(e,-t,n,r,o),C(e,t,n,r,o)}function $(e,t,n,r,o){C(e,t,-n,r,o),C(e,t,n,r,o)}function I(e,t,n,r,o){j(e,t,-n,r,o),j(e,t,n,r,o)}function Xe(){const e=[];return $(e,0,$e,p,"small"),I(e,Ne,Me,p,"small"),I(e,Ee,De,ne,"big"),I(e,Re,Fe,p,"small"),$(e,0,ze,p,"small"),I(e,re,Ce,p,"small"),I(e,je,Le,p,"small"),I(e,Ve,Ue,p,"small"),$(e,0,Ye,p,"small"),j(e,re,0,ne,"big"),j(e,He,0,p,"small"),e}function X(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function We(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ke(e){let t=null;for(const n of e){const r=X(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ze(e,t,n,r){const o=te(t),i=new Map;for(const c of e.boost_pad_events??[]){if(X(c.kind)===null){r?.advance();continue}const d=i.get(c.pad_id);d?d.push(c):i.set(c.pad_id,[c]),r?.advance()}const a=e.boost_pads;if(!a||a.length===0)return r?.advance(oe),Xe();const s=[...a].sort((c,f)=>c.index-f.index),l=new Array(s.length);for(let c=0;c=72?"big":"small"),h=g.sort((_,w)=>_.time-w.time),m=new Array(h.length);for(let _=0;_=0?e.frame:null}function Ge(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=W(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function qe(e,t){return`bookmark:${W(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Je(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const i=Ge(r,e);return i===null?[]:[{id:qe(r,o),description:r.description,frame:W(r),time:N(i,t)}]})}function Qe(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const S={distance:270,height:100,pitch:-4,fov:110},et=.005,tt=Number.POSITIVE_INFINITY,nt=!0,rt=.15,ot=10,at=.1,it=10;function ae(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function ie(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function se(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ce(e,t){const n=se(se(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function st(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:ie(t.rotation)}}function ue(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function le(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function de(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ct={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function ut(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ct};const t=e.Data.rigid_body,n=ie(t.rotation),r=n?ae(ce({x:1,y:0,z:0},n)):null,o=n?ae(ce({x:0,y:0,z:1},n)):null,i=e.Data.camera,a=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:le(i?.pitch),cameraYaw:le(i?.yaw),throttle:ue(a?.throttle),steer:ue(a?.steer),dodgeImpulse:de(a?.dodge_impulse),dodgeTorque:de(a?.dodge_torque)}}function lt(e){return e.position!==null}function dt(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function ft(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=M(t[r].position);for(let i=r+1;iat){o=M(s.position);continue}if(mt(o,s.position)>it){o=M(s.position);continue}const d={x:(a.linearVelocity.x+s.linearVelocity.x)/2,y:(a.linearVelocity.y+s.linearVelocity.y)/2,z:(a.linearVelocity.z+s.linearVelocity.z)/2},g={x:o.x+d.x*f,y:o.y+d.y*f,z:o.z+d.z*f},b=(i-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:g.x*(1-b)+s.position.x*b,y:g.y*(1-b)+s.position.y*b,z:g.z*(1-b)+s.position.z*b},s.position=M(o)}}function _t(e){return{motionSmoothing:e.motionSmoothing??nt,smoothingBlendFactor:e.smoothingBlendFactor??rt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??ot)}}function _e(){return typeof performance>"u"?Date.now():performance.now()}function bt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((a,[,s])=>a+s.frames.length,0),r=e.boost_pads?.length??oe,o=e.boost_pad_events?.length??0,i=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,i)].reduce((a,s)=>a+s,0)}function gt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=bt(e),o=gt(e);let i=0,a=0,s=-1,l=-1,c=_e();const f=n.yieldEveryMs??Number.POSITIVE_INFINITY,d=n.progressReportMinDelta??et,g=Math.max(1,n.progressReportFrameInterval??tt),b=()=>{if(!t)return!1;const m=Math.max(0,Math.min(1,i/r));if(m<=s)return!1;const w=a-l>=g;return m>=1||m-s>=d||w?(s=m,l=a,t(m,{progress:m,processedFrames:Math.min(a,o),totalFrames:o,processedUnits:i,totalUnits:r}),!0):!1},h=(m=!1)=>{const _=_e();return!m&&_-cr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=wt(e?.stats);return{fov:v(t,"CameraFOV")??S.fov,height:v(t,"CameraHeight")??S.height,pitch:v(t,"CameraPitch")??S.pitch,distance:v(t,"CameraDistance")??S.distance,stiffness:v(t,"CameraStiffness")??S.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??S.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??S.transitionSpeed}}function xt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const i of o)r.set(i.name,i),i.remote_id&&n.set(A(i.remote_id),i),t?.advance();return{byId:n,byName:r}}function At(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(A(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function Tt(e,t){const n=new Set(e.meta.team_zero.map(l=>l.name)),r=new Set(e.meta.team_one.map(l=>l.name)),o=xt(e,t),i=At(e),a=[];let s=0;for(const[l,c]of e.frame_data.players){const f=new Array(c.frames.length);let d;for(let m=0;mt.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Ot(e,t,n){const r=e.player?A(e.player):null,o=r?t.get(r)?.name??r:null,i=o?`${o} scored`:"Goal";return{id:K("goal",e.frame,r??"team"),time:N(e.time,n),frame:e.frame,kind:"goal",label:i,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function It(e,t,n){const r=A(e.player),o=t.get(r)?.name??r,i=e.kind.toLowerCase(),a=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:K(i,e.frame,r),time:N(e.time,n),frame:e.frame,kind:i,label:`${o} ${a}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Pt(e,t,n){const r=A(e.attacker),o=A(e.victim),i=t.get(r),a=t.get(o);return{id:K("demo",e.frame,`${r}:${o}`),time:N(e.time,n),frame:e.frame,kind:"demo",label:`${i?.name??r} demoed ${a?.name??o}`,shortLabel:"D",playerId:r,playerName:i?.name??r,secondaryPlayerId:o,secondaryPlayerName:a?.name??o,location:e.victim_location,isTeamZero:i?.isTeamZero??null}}function Bt(e,t,n,r,o){const i=te(t),a=[];for(const s of e.goal_events??[])a.push(Ot(s,i,r)),o?.advance();for(const s of e.player_stat_events??[])a.push(It(s,i,r)),o?.advance();for(const s of e.demolish_infos??[])a.push(Pt(s,i,r)),o?.advance();for(const s of n)a.push(Qe(s));return a.length===0&&o?.advance(),vt(a)}function Et(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=pt(e,n),i=Tt(e,n),a=St(e,n),s=_t(t);me(o,a,s);for(const d of i)me(o,d.frames,s);const l=Ze(e,i,r,n),c=Je(e,r,n),f=Bt(e,i,c,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:a,boostPads:l,players:i,tickMarks:c,timelineEvents:f,teamZeroNames:e.meta.team_zero.map(d=>d.name),teamOneNames:e.meta.team_one.map(d=>d.name)}}function L(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,L(n)]));if(Array.isArray(e))return e.map(t=>L(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=L(r);return t}return e}async function Dt(){const e=Ae;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Dt();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=be(t,c=>{R({type:"progress",progress:L(c)})},e.data.reportEveryNFrames,32*1024*1024);R({type:"progress",progress:{stage:"normalizing",progress:0}});const r=JSON.parse(new TextDecoder().decode(n.rawReplayData)),o=Et(r,{progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(c){R({type:"progress",progress:{stage:"normalizing",progress:c}})}}),i=new TextEncoder().encode(JSON.stringify(o)),a=n.rawReplayData,s=a.byteOffset===0&&a.byteLength===a.buffer.byteLength?a.buffer:a.slice().buffer,l=Array.from(n.statsTimelineParts.frameChunks,c=>c.buffer);self.postMessage({type:"done",replayBuffer:i.buffer,rawReplayBuffer:s,statsTimelineParts:{configBuffer:n.statsTimelineParts.config.buffer,replayMetaBuffer:n.statsTimelineParts.replayMeta.buffer,eventsBuffer:n.statsTimelineParts.events.buffer,activitySummaryBuffer:n.statsTimelineParts.activitySummary.buffer,positioningSummaryBuffer:n.statsTimelineParts.positioningSummary.buffer,accumulationTracksBuffer:n.statsTimelineParts.accumulationTracks.buffer,frameChunkBuffers:l}},[i.buffer,s,n.statsTimelineParts.config.buffer,n.statsTimelineParts.replayMeta.buffer,n.statsTimelineParts.events.buffer,n.statsTimelineParts.activitySummary.buffer,n.statsTimelineParts.positioningSummary.buffer,n.statsTimelineParts.accumulationTracks.buffer,...l])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/replayLoader.worker-D3pjMe81.js b/crates/rocket-sense-server/static/subtr-actor/assets/replayLoader.worker-D3pjMe81.js deleted file mode 100644 index 1217437e..00000000 --- a/crates/rocket-sense-server/static/subtr-actor/assets/replayLoader.worker-D3pjMe81.js +++ /dev/null @@ -1 +0,0 @@ -(function(){"use strict";function fe(e,t,n,r){const o=ge(e,m.__wbindgen_malloc),i=x,a=m.get_replay_bundle_json_parts_with_progress(o,i,t,L(n)?4294967297:n>>>0,L(r)?4294967297:r>>>0);if(a[2])throw K(a[1]);return K(a[0])}function be(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(I(t,n))},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=V(r,m.__wbindgen_malloc,m.__wbindgen_realloc),i=x;T().setInt32(t+4,i,!0),T().setInt32(t+0,o,!0)},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var i=L(o)?0:V(o,m.__wbindgen_malloc,m.__wbindgen_realloc),a=x;T().setInt32(t+4,a,!0),T().setInt32(t+0,i,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(I(t,n))},__wbg_call_4708e0c13bdc8e95:function(){return W(function(t,n,r){return t.call(n,r)},arguments)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(I(t,n))}finally{m.__wbindgen_free(r,o,1)}},__wbg_log_d095c16a726a937c:function(t,n){console.log(I(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(ye(t,n))},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return W(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=V(r,m.__wbindgen_malloc,m.__wbindgen_realloc),i=x;T().setInt32(t+4,i,!0),T().setInt32(t+0,o,!0)},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return I(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=m.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function _e(e){const t=m.__externref_table_alloc();return m.__wbindgen_externrefs.set(t,e),t}function ye(e,t){return e=e>>>0,S().subarray(e/1,e/1+t)}let w=null;function T(){return(w===null||w.buffer.detached===!0||w.buffer.detached===void 0&&w.buffer!==m.memory.buffer)&&(w=new DataView(m.memory.buffer)),w}function I(e,t){return e=e>>>0,he(e,t)}let P=null;function S(){return(P===null||P.byteLength===0)&&(P=new Uint8Array(m.memory.buffer)),P}function W(e,t){try{return e.apply(this,t)}catch(n){const r=_e(n);m.__wbindgen_exn_store(r)}}function L(e){return e==null}function ge(e,t){const n=t(e.length*1,1)>>>0;return S().set(e,n/1),x=e.length,n}function V(e,t,n){if(n===void 0){const s=B.encode(e),l=t(s.length,1)>>>0;return S().subarray(l,l+s.length).set(s),x=s.length,l}let r=e.length,o=t(r,1)>>>0;const i=S();let a=0;for(;a127)break;i[o+a]=s}if(a!==r){a!==0&&(e=e.slice(a)),o=n(o,r,r=a+e.length*3,1)>>>0;const s=S().subarray(o+a,o+r),l=B.encodeInto(e,s);a+=l.written,o=n(o,r,a,1)>>>0}return x=a,o}function K(e){const t=m.__wbindgen_externrefs.get(e);return m.__externref_table_dealloc(e),t}let M=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});M.decode();const pe=2146435072;let j=0;function he(e,t){return j+=t,j>=pe&&(M=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),M.decode(),j=t),M.decode(S().subarray(e,e+t))}const B=new TextEncoder;"encodeInto"in B||(B.encodeInto=function(e,t){const n=B.encode(e);return t.set(n),{read:e.length,written:n.length}});let x=0,m;function ke(e,t){return m=e.exports,w=null,P=null,m.__wbindgen_start(),m}async function we(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function xe(e){if(m!==void 0)return m;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-Xy9_Ya42.wasm",self.location.href).href,self.location.href));const t=be();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await we(await e,t);return ke(n)}const Z="octane",Ae={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},ve={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Te(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Se=Te([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function G(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function q(e){if(!e)return null;switch(G(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function J(e){return e?ve[G(e)]??null:null}function Oe(e){return q(e)??J(e)}function Ie(e){return Ae[e]}function H(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t))}}}function Pe(e){const t=q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const a=Se[n];if(a)return a}const r=J(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return Z;const i=[];for(const[a,s]of Object.entries(o))i.push(a),H(s,i);for(const a of i){const s=Oe(a);if(s)return s}return Z}function k(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function E(e,t){return Math.max(0,e-t)}function Q(e){return new Map(e.map(t=>[t.id,t]))}const g=70,ee=73,Be=3072,Ee=4096,De=1792,Re=4184,Me=940,Ne=3308,ze=2816,te=3584,Fe=2484,Ce=1788,Le=2300,Ve=2048,je=1036,He=1024,Ue=1024,Ye=4240,ne=34;function N(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function z(e,t,n,r,o){N(e,-t,n,r,o),N(e,t,n,r,o)}function U(e,t,n,r,o){N(e,t,-n,r,o),N(e,t,n,r,o)}function O(e,t,n,r,o){z(e,t,-n,r,o),z(e,t,n,r,o)}function $e(){const e=[];return U(e,0,Ye,g,"small"),O(e,De,Re,g,"small"),O(e,Be,Ee,ee,"big"),O(e,Me,Ne,g,"small"),U(e,0,ze,g,"small"),O(e,te,Fe,g,"small"),O(e,Ce,Le,g,"small"),O(e,Ve,je,g,"small"),U(e,0,Ue,g,"small"),z(e,te,0,ee,"big"),z(e,He,0,g,"small"),e}function Y(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function Xe(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function We(e){let t=null;for(const n of e){const r=Y(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ke(e,t,n,r){const o=Q(t),i=new Map;for(const c of e.boost_pad_events??[]){if(Y(c.kind)===null){r?.advance();continue}const u=i.get(c.pad_id);u?u.push(c):i.set(c.pad_id,[c]),r?.advance()}const a=e.boost_pads;if(!a||a.length===0)return r?.advance(ne),$e();const s=[...a].sort((c,d)=>c.index-d.index),l=new Array(s.length);for(let c=0;c=72?"big":"small"),p=y.sort((b,h)=>b.time-h.time),f=new Array(p.length);for(let b=0;b=0?e.frame:null}function Ze(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=$(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function Ge(e,t){return`bookmark:${$(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function qe(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const i=Ze(r,e);return i===null?[]:[{id:Ge(r,o),description:r.description,frame:$(r),time:E(i,t)}]})}function Je(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const A={distance:270,height:100,pitch:-4,fov:110},Qe=.005,et=Number.POSITIVE_INFINITY,tt=!0,nt=.15,rt=10,ot=.1,at=10;function re(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function oe(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function ae(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ie(e,t){const n=ae(ae(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function it(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:oe(t.rotation)}}function se(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function ce(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function le(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const st={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function ct(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...st};const t=e.Data.rigid_body,n=oe(t.rotation),r=n?re(ie({x:1,y:0,z:0},n)):null,o=n?re(ie({x:0,y:0,z:1},n)):null,i=e.Data.camera,a=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:ce(i?.pitch),cameraYaw:ce(i?.yaw),throttle:se(a?.throttle),steer:se(a?.steer),dodgeImpulse:le(a?.dodge_impulse),dodgeTorque:le(a?.dodge_torque)}}function lt(e){return e.position!==null}function ut(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=D(t[r].position);for(let i=r+1;iot){o=D(s.position);continue}if(dt(o,s.position)>at){o=D(s.position);continue}const u={x:(a.linearVelocity.x+s.linearVelocity.x)/2,y:(a.linearVelocity.y+s.linearVelocity.y)/2,z:(a.linearVelocity.z+s.linearVelocity.z)/2},y={x:o.x+u.x*d,y:o.y+u.y*d,z:o.z+u.z*d},_=(i-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:y.x*(1-_)+s.position.x*_,y:y.y*(1-_)+s.position.y*_,z:y.z*(1-_)+s.position.z*_},s.position=D(o)}}function ft(e){return{motionSmoothing:e.motionSmoothing??tt,smoothingBlendFactor:e.smoothingBlendFactor??nt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??rt)}}function de(){return typeof performance>"u"?Date.now():performance.now()}function bt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((a,[,s])=>a+s.frames.length,0),r=e.boost_pads?.length??ne,o=e.boost_pad_events?.length??0,i=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,i)].reduce((a,s)=>a+s,0)}function _t(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=bt(e),o=_t(e);let i=0,a=0,s=-1,l=-1,c=de();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,u=n.progressReportMinDelta??Qe,y=Math.max(1,n.progressReportFrameInterval??et),_=()=>{if(!t)return!1;const f=Math.max(0,Math.min(1,i/r));if(f<=s)return!1;const h=a-l>=y;return f>=1||f-s>=u||h?(s=f,l=a,t(f,{progress:f,processedFrames:Math.min(a,o),totalFrames:o,processedUnits:i,totalUnits:r}),!0):!1},p=(f=!1)=>{const b=de();return!f&&b-cr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=ht(e?.stats);return{fov:v(t,"CameraFOV")??A.fov,height:v(t,"CameraHeight")??A.height,pitch:v(t,"CameraPitch")??A.pitch,distance:v(t,"CameraDistance")??A.distance,stiffness:v(t,"CameraStiffness")??A.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??A.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??A.transitionSpeed}}function wt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const i of o)r.set(i.name,i),i.remote_id&&n.set(k(i.remote_id),i),t?.advance();return{byId:n,byName:r}}function xt(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(k(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function At(e,t){const n=new Set(e.meta.team_zero.map(l=>l.name)),r=new Set(e.meta.team_one.map(l=>l.name)),o=wt(e,t),i=xt(e),a=[];let s=0;for(const[l,c]of e.frame_data.players){const d=new Array(c.frames.length);let u;for(let f=0;ft.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function St(e,t,n){const r=e.player?k(e.player):null,o=r?t.get(r)?.name??r:null,i=o?`${o} scored`:"Goal";return{id:X("goal",e.frame,r??"team"),time:E(e.time,n),frame:e.frame,kind:"goal",label:i,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function Ot(e,t,n){const r=k(e.player),o=t.get(r)?.name??r,i=e.kind.toLowerCase(),a=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:X(i,e.frame,r),time:E(e.time,n),frame:e.frame,kind:i,label:`${o} ${a}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function It(e,t,n){const r=k(e.attacker),o=k(e.victim),i=t.get(r),a=t.get(o);return{id:X("demo",e.frame,`${r}:${o}`),time:E(e.time,n),frame:e.frame,kind:"demo",label:`${i?.name??r} demoed ${a?.name??o}`,shortLabel:"D",playerId:r,playerName:i?.name??r,secondaryPlayerId:o,secondaryPlayerName:a?.name??o,location:e.victim_location,isTeamZero:i?.isTeamZero??null}}function Pt(e,t,n,r,o){const i=Q(t),a=[];for(const s of e.goal_events??[])a.push(St(s,i,r)),o?.advance();for(const s of e.player_stat_events??[])a.push(Ot(s,i,r)),o?.advance();for(const s of e.demolish_infos??[])a.push(It(s,i,r)),o?.advance();for(const s of n)a.push(Je(s));return a.length===0&&o?.advance(),Tt(a)}function Bt(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=gt(e,n),i=At(e,n),a=vt(e,n),s=ft(t);me(o,a,s);for(const u of i)me(o,u.frames,s);const l=Ke(e,i,r,n),c=qe(e,r,n),d=Pt(e,i,c,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:a,boostPads:l,players:i,tickMarks:c,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(u=>u.name),teamOneNames:e.meta.team_one.map(u=>u.name)}}function F(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,F(n)]));if(Array.isArray(e))return e.map(t=>F(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=F(r);return t}return e}async function Et(){const e=xe;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Et();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=fe(t,c=>{R({type:"progress",progress:F(c)})},e.data.reportEveryNFrames,32*1024*1024);R({type:"progress",progress:{stage:"normalizing",progress:0}});const r=JSON.parse(new TextDecoder().decode(n.rawReplayData)),o=Bt(r,{progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(c){R({type:"progress",progress:{stage:"normalizing",progress:c}})}}),i=new TextEncoder().encode(JSON.stringify(o)),a=n.rawReplayData,s=a.byteOffset===0&&a.byteLength===a.buffer.byteLength?a.buffer:a.slice().buffer,l=Array.from(n.statsTimelineParts.frameChunks,c=>c.buffer);self.postMessage({type:"done",replayBuffer:i.buffer,rawReplayBuffer:s,statsTimelineParts:{configBuffer:n.statsTimelineParts.config.buffer,replayMetaBuffer:n.statsTimelineParts.replayMeta.buffer,eventsBuffer:n.statsTimelineParts.events.buffer,activitySummaryBuffer:n.statsTimelineParts.activitySummary.buffer,positioningSummaryBuffer:n.statsTimelineParts.positioningSummary.buffer,accumulationTracksBuffer:n.statsTimelineParts.accumulationTracks.buffer,frameChunkBuffers:l}},[i.buffer,s,n.statsTimelineParts.config.buffer,n.statsTimelineParts.replayMeta.buffer,n.statsTimelineParts.events.buffer,n.statsTimelineParts.activitySummary.buffer,n.statsTimelineParts.positioningSummary.buffer,n.statsTimelineParts.accumulationTracks.buffer,...l])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/rl_replay_subtr_actor-Cnltgw4Z.js b/crates/rocket-sense-server/static/subtr-actor/assets/rl_replay_subtr_actor-Cnltgw4Z.js new file mode 100644 index 00000000..d2cb4f7d --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/assets/rl_replay_subtr_actor-Cnltgw4Z.js @@ -0,0 +1,2 @@ +function U(r,n){var e=g(r)?0:k(r,_.__wbindgen_malloc),t=a,i=g(n)?0:k(n,_.__wbindgen_malloc),c=a;const o=_.get_column_headers(e,t,i,c);if(o[2])throw s(o[1]);return s(o[0])}function B(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_legacy_stats_timeline_json(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function D(r,n,e,t){const i=w(r,_.__wbindgen_malloc),c=a;var o=g(n)?0:k(n,_.__wbindgen_malloc),l=a,f=g(e)?0:k(e,_.__wbindgen_malloc),u=a;const p=_.get_ndarray_with_info(i,c,o,l,f,u,g(t)?4294967297:Math.fround(t));if(p[2])throw s(p[1]);return s(p[0])}function N(r,n,e,t){const i=w(r,_.__wbindgen_malloc),c=a,o=_.get_replay_bundle_json_parts_with_progress(i,c,n,g(e)?4294967297:e>>>0,g(t)?4294967297:t>>>0);if(o[2])throw s(o[1]);return s(o[0])}function L(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_bundle_json_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[2])throw s(c[1]);return s(c[0])}function $(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_replay_frames_data(n,e);if(t[2])throw s(t[1]);return s(t[0])}function V(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_frames_data_json_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[3])throw s(c[2]);var o=v(c[0],c[1]).slice();return _.__wbindgen_free(c[0],c[1]*1,1),o}function q(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_frames_data_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[2])throw s(c[1]);return s(c[0])}function z(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_replay_info(n,e);if(t[2])throw s(t[1]);return s(t[0])}function C(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a;var c=g(n)?0:k(n,_.__wbindgen_malloc),o=a,l=g(e)?0:k(e,_.__wbindgen_malloc),f=a;const u=_.get_replay_meta(t,i,c,o,l,f);if(u[2])throw s(u[1]);return s(u[0])}function J(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_stats_timeline(n,e);if(t[2])throw s(t[1]);return s(t[0])}function P(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_stats_timeline_json(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function H(r,n){const e=w(r,_.__wbindgen_malloc),t=a,i=_.get_stats_timeline_json_parts(e,t,g(n)?4294967297:n>>>0);if(i[2])throw s(i[1]);return s(i[0])}function K(){_.main()}function X(r){let n,e;try{const c=_.new_training_pack(r);var t=c[0],i=c[1];if(c[3])throw t=0,i=0,s(c[2]);return n=t,e=i,b(t,i)}finally{_.__wbindgen_free(n,e,1)}}function Y(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.parse_replay(n,e);if(t[2])throw s(t[1]);return s(t[0])}function G(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.parse_training_pack(n,e);if(t[2])throw s(t[1]);return s(t[0])}function Q(r){let n,e;try{const c=w(r,_.__wbindgen_malloc),o=a,l=_.parse_training_pack_lossless(c,o);var t=l[0],i=l[1];if(l[3])throw t=0,i=0,s(l[2]);return n=t,e=i,b(t,i)}finally{_.__wbindgen_free(n,e,1)}}function Z(r){const n=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),e=a,t=_.serialize_training_pack(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function nn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_add_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function en(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_add_round_archetype(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function tn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=d(n,_.__wbindgen_malloc,_.__wbindgen_realloc),u=a,p=_.training_pack_append_rounds(o,l,f,u);var i=p[0],c=p[1];if(p[3])throw i=0,c=0,s(p[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function rn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_duplicate_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function _n(r){const n=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),e=a,t=_.training_pack_from_lossless(n,e);if(t[2])throw s(t[1]);return s(t[0])}function cn(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_insert_round(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function on(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_move_round(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function sn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_remove_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function an(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_remove_round_archetype(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function fn(r,n){const e=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),t=a,i=_.training_pack_round_archetypes(e,t,n);if(i[2])throw s(i[1]);return s(i[0])}function ln(r,n,e,t){let i,c;try{const f=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),u=a,p=_.training_pack_set_round_archetype(f,u,n,e,t);var o=p[0],l=p[1];if(p[3])throw o=0,l=0,s(p[2]);return i=o,c=l,b(o,l)}finally{_.__wbindgen_free(i,c,1)}}function un(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_set_round_ball(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function dn(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_set_round_time_limit(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function gn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.update_training_pack_metadata(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function bn(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.validate_replay(n,e);if(t[2])throw s(t[1]);return s(t[0])}function O(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(n,e){return Error(b(n,e))},__wbg_Number_04624de7d0e8332d:function(n){return Number(n)},__wbg_String_8f0eb39a4a4c2f66:function(n,e){const t=String(e),i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(n,e){const t=e,i=typeof t=="bigint"?t:void 0;y().setBigInt64(n+8,g(i)?BigInt(0):i,!0),y().setInt32(n+0,!g(i),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(n){const e=n,t=typeof e=="boolean"?e:void 0;return g(t)?16777215:t?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(n,e){const t=M(e),i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(n,e){return n in e},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(n){return typeof n=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(n){return typeof n=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(n){const e=n;return typeof e=="object"&&e!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(n){return typeof n=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(n){return n===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(n,e){return n===e},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(n,e){return n==e},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(n,e){const t=e,i=typeof t=="number"?t:void 0;y().setFloat64(n+8,g(i)?0:i,!0),y().setInt32(n+0,!g(i),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(n,e){const t=e,i=typeof t=="string"?t:void 0;var c=g(i)?0:d(i,_.__wbindgen_malloc,_.__wbindgen_realloc),o=a;y().setInt32(n+4,o,!0),y().setInt32(n+0,c,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(n,e){throw new Error(b(n,e))},__wbg_call_389efe28435a9388:function(){return A(function(n,e){return n.call(e)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return A(function(n,e,t){return n.call(e,t)},arguments)},__wbg_done_57b39ecd9addfe81:function(n){return n.done},__wbg_entries_58c7934c745daac7:function(n){return Object.entries(n)},__wbg_error_7534b8e9a36f1ab4:function(n,e){let t,i;try{t=n,i=e,console.error(b(n,e))}finally{_.__wbindgen_free(t,i,1)}},__wbg_get_9b94d73e6221f75c:function(n,e){return n[e>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return A(function(n,e){return Reflect.get(n,e)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(n,e){return n[e]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(n){let e;try{e=n instanceof ArrayBuffer}catch{e=!1}return e},__wbg_instanceof_Map_53af74335dec57f4:function(n){let e;try{e=n instanceof Map}catch{e=!1}return e},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(n){let e;try{e=n instanceof Uint8Array}catch{e=!1}return e},__wbg_isArray_d314bb98fcf08331:function(n){return Array.isArray(n)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(n){return Number.isSafeInteger(n)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(n){return n.length},__wbg_length_35a7bace40f36eac:function(n){return n.length},__wbg_log_f1a1b5cd3f9c7822:function(n,e){console.log(b(n,e))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(n){return new Uint8Array(n)},__wbg_new_from_slice_a3d2629dc1826784:function(n,e){return new Uint8Array(v(n,e))},__wbg_next_3482f54c49e8af19:function(){return A(function(n){return n.next()},arguments)},__wbg_next_418f80d8f5303233:function(n){return n.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(n,e,t){Uint8Array.prototype.set.call(v(n,e),t)},__wbg_push_8ffdcb2063340ba5:function(n,e){return n.push(e)},__wbg_set_1eb0999cf5d27fc8:function(n,e,t){return n.set(e,t)},__wbg_set_3f1d0b984ed272ed:function(n,e,t){n[e]=t},__wbg_set_6cb8631f80447a67:function(){return A(function(n,e,t){return Reflect.set(n,e,t)},arguments)},__wbg_set_f43e577aea94465b:function(n,e,t){n[e>>>0]=t},__wbg_stack_0ed75d68575b0f3c:function(n,e){const t=e.stack,i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg_value_0546255b415e96c1:function(n){return n.value},__wbindgen_cast_0000000000000001:function(n){return n},__wbindgen_cast_0000000000000002:function(n){return n},__wbindgen_cast_0000000000000003:function(n,e){return b(n,e)},__wbindgen_cast_0000000000000004:function(n){return BigInt.asUintN(64,n)},__wbindgen_init_externref_table:function(){const n=_.__wbindgen_externrefs,e=n.grow(4);n.set(0,void 0),n.set(e+0,void 0),n.set(e+1,null),n.set(e+2,!0),n.set(e+3,!1)}}}}function W(r){const n=_.__externref_table_alloc();return _.__wbindgen_externrefs.set(n,r),n}function M(r){const n=typeof r;if(n=="number"||n=="boolean"||r==null)return`${r}`;if(n=="string")return`"${r}"`;if(n=="symbol"){const i=r.description;return i==null?"Symbol":`Symbol(${i})`}if(n=="function"){const i=r.name;return typeof i=="string"&&i.length>0?`Function(${i})`:"Function"}if(Array.isArray(r)){const i=r.length;let c="[";i>0&&(c+=M(r[0]));for(let o=1;o1)t=e[1];else return toString.call(r);if(t=="Object")try{return"Object("+JSON.stringify(r)+")"}catch{return"Object"}return r instanceof Error?`${r.name}: ${r.message} +${r.stack}`:t}function v(r,n){return r=r>>>0,h().subarray(r/1,r/1+n)}let m=null;function y(){return(m===null||m.buffer.detached===!0||m.buffer.detached===void 0&&m.buffer!==_.memory.buffer)&&(m=new DataView(_.memory.buffer)),m}function b(r,n){return r=r>>>0,F(r,n)}let j=null;function h(){return(j===null||j.byteLength===0)&&(j=new Uint8Array(_.memory.buffer)),j}function A(r,n){try{return r.apply(this,n)}catch(e){const t=W(e);_.__wbindgen_exn_store(t)}}function g(r){return r==null}function w(r,n){const e=n(r.length*1,1)>>>0;return h().set(r,e/1),a=r.length,e}function k(r,n){const e=n(r.length*4,4)>>>0;for(let t=0;t>>0;return h().subarray(f,f+l.length).set(l),a=l.length,f}let t=r.length,i=n(t,1)>>>0;const c=h();let o=0;for(;o127)break;c[i+o]=l}if(o!==t){o!==0&&(r=r.slice(o)),i=e(i,t,t=o+r.length*3,1)>>>0;const l=h().subarray(i+o,i+t),f=x.encodeInto(r,l);o+=f.written,i=e(i,t,o,1)>>>0}return a=o,i}function s(r){const n=_.__wbindgen_externrefs.get(r);return _.__externref_table_dealloc(r),n}let I=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});I.decode();const T=2146435072;let S=0;function F(r,n){return S+=n,S>=T&&(I=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),I.decode(),S=n),I.decode(h().subarray(r,r+n))}const x=new TextEncoder;"encodeInto"in x||(x.encodeInto=function(r,n){const e=x.encode(r);return n.set(e),{read:r.length,written:e.length}});let a=0,_;function E(r,n){return _=r.exports,m=null,j=null,_.__wbindgen_start(),_}async function R(r,n){if(typeof Response=="function"&&r instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(r,n)}catch(i){if(r.ok&&e(r.type)&&r.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",i);else throw i}const t=await r.arrayBuffer();return await WebAssembly.instantiate(t,n)}else{const t=await WebAssembly.instantiate(r,n);return t instanceof WebAssembly.Instance?{instance:t,module:r}:t}function e(t){switch(t){case"basic":case"cors":case"default":return!0}return!1}}function wn(r){if(_!==void 0)return _;r!==void 0&&(Object.getPrototypeOf(r)===Object.prototype?{module:r}=r:console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const n=O();r instanceof WebAssembly.Module||(r=new WebAssembly.Module(r));const e=new WebAssembly.Instance(r,n);return E(e)}async function pn(r){if(_!==void 0)return _;r!==void 0&&(Object.getPrototypeOf(r)===Object.prototype?{module_or_path:r}=r:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),r===void 0&&(r=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",import.meta.url).href,import.meta.url));const n=O();(typeof r=="string"||typeof Request=="function"&&r instanceof Request||typeof URL=="function"&&r instanceof URL)&&(r=fetch(r));const{instance:e,module:t}=await R(await r,n);return E(e)}export{pn as default,U as get_column_headers,B as get_legacy_stats_timeline_json,D as get_ndarray_with_info,N as get_replay_bundle_json_parts_with_progress,L as get_replay_bundle_json_with_progress,$ as get_replay_frames_data,V as get_replay_frames_data_json_with_progress,q as get_replay_frames_data_with_progress,z as get_replay_info,C as get_replay_meta,J as get_stats_timeline,P as get_stats_timeline_json,H as get_stats_timeline_json_parts,wn as initSync,K as main,X as new_training_pack,Y as parse_replay,G as parse_training_pack,Q as parse_training_pack_lossless,Z as serialize_training_pack,nn as training_pack_add_round,en as training_pack_add_round_archetype,tn as training_pack_append_rounds,rn as training_pack_duplicate_round,_n as training_pack_from_lossless,cn as training_pack_insert_round,on as training_pack_move_round,sn as training_pack_remove_round,an as training_pack_remove_round_archetype,fn as training_pack_round_archetypes,ln as training_pack_set_round_archetype,un as training_pack_set_round_ball,dn as training_pack_set_round_time_limit,gn as update_training_pack_metadata,bn as validate_replay}; diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/rl_replay_subtr_actor_bg-Xy9_Ya42.wasm b/crates/rocket-sense-server/static/subtr-actor/assets/rl_replay_subtr_actor_bg-BjSK7HJ9.wasm similarity index 50% rename from crates/rocket-sense-server/static/subtr-actor/assets/rl_replay_subtr_actor_bg-Xy9_Ya42.wasm rename to crates/rocket-sense-server/static/subtr-actor/assets/rl_replay_subtr_actor_bg-BjSK7HJ9.wasm index 28187c217632d571a5857f5a0f1fb0f6964e42af..140cd48935d815ae088e781af91126296cb6b31d 100644 GIT binary patch delta 1564516 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 &6;lVZ3jlx`7VLIvx)4c$E)X!r{E@o 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­gd|zN8>R!+x-ml{ffpL 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 z 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≺sjBFN=XYQWnc%^+%M+<}_Yj7Mq@- z-<}}~Dq{yQVMt}{^)}?k%{*2R6sN!z*rG?m`ZX^cy*4c1%bf zq7=UC*0^l()c(lz^(|?+pb0|@Gbh&=m8eP+x$jQ&TuTxlqA52YR6{Y*fO7!dP@-JVXOhMbBT%KBsT|RtWdM&tVrPeau?&0XS z(r|%SmYQpV-4@A%u}4dE>=A2pKfZ8i;~PCDNUDk-E#fI?`Tj=pB2y1z20r z?ts|637-XT91!c)G^jIo)D6%ncemzhpfy*XllsOktZd@S6C>Xmn$|oPOz0OI)_CuL z*m4c-8XM0&B-T?C+xjWe?UMsz75EOUWz%I$4DtWidlUF5iu7-Mx@RWIvqCr3jDxQeoiHZuI zsK}wHhzRfZTh%ku6T;!~`Mtl-|NrW)(|PKtr;e_!dg?h#jxZMMv(v?UM;J@EqD60m z3{YcJZ^JKH!~>~NBW0FYgRlc!>{yUMTI8c~2~P=Fo6;aK6Y>|ick6vZ9x)=_Y^VQN zE(Y|gX%nRZAPOPeq@kX)!b>CD3-f$#%GerXR({fy4xYO7K0}#fawiS)us_l84+LmA z!A2xQ&K(v{F(W^irjdtE82N$9UtJBPa*vSFJrh=bX=>l6ksqBjxZlS1{Ujql9JpZf zagxBgFUhtKBxS4k&;G0)F%vpjjF^#O%#hCu6Yux3%ThTSY0-wZX8rdG0*kK4_q&x!dQ|_4R}faPB}|_8dMq>@${w^V-GWA3GH1|4MEQw;gH2 zCk>2K#T`c(|Kgf$I?<3`)ay<(dh_q_NyZ8M9eR=x=I`4_8%g<4vPM@FiOY^La>3z~ z!Jmel(LZ+*D>WA!n{A=0!CXAzKvo_(-X^ z^C;sSlKEdZo(K9Fn`)j!dME6vnPKo1Qs9Lhmg0p#a7GsIu|YcxQcEcwwi`64ED_W7 z)nkpV`jhR%GyRQ1hK^m+-zcYl%dY-L9Yuz9#~F|6kG2!#$KwPZ)kU0gym2~b;Njy{ z?2%WF$E=~e-w6ito_7($PB2bo`Ku?W@-I&?{w>;_VjM%cVj7%R!KAR=x>Jn*u)XNB z-41K4_?xjnqc_b*ry5^tmD>*~!%2Rm$K&Zer7Qynby@Zl@M(Yrae(Jc!T6A}0MBCU z=|-EtPltqki2k|#5Rv#-hvy#e8TC^05=3T{xgK9;FG_#ZGy=21O|XSDGG%V(zC_Mzs8b6lr-~N_&i1) zUJF0AN#K7^cqZ^EZF3jwW&uBn=KciZ);euVe*$D&i?@9%OE?5d^W1&|vsggigys$f z3t2!qYnxz#ipmRMXMaWARZ({=s4nhHCP-r6>FPZQmO4vFbH{GqzWI-4O+nN@;WQ;q`qaLR&y&TE|?^RuBJr@P7$7H}S!Xuw_YA`8+{ zpz_m+^*2P?Mq6^9nBvz`9D{lt2Ptnd@VSuJ7~Xp1UXQ<2NtvJ9CY|eI+oq}jmP`U= zh9v3W2?O+6`vdN#dLQ*~$Sa*TNeZ5k^q<7};%vUuIpX>QQ+|+!(YR+=$TLK}D;&Kk zv>KOmcpTDd95rjf$)Oeoc^q`6T>K%ZM3b$?5nlp=!g%MS>M(}mrWybbdpTa^186I= zacK_8@xv(~MmOYFC$p@o28p@Bom8oG!6)G3g-bac^uwuMsqd8m2vp-3E+@?cn>J^> zV&KHK#nCFvj=bT-N4(#WB1*=AjMOVHo0L1qHx(bKS5283Xf!cW?;ayXq-73Dl5pN? zD#H(eFQ9+F^A*4m&T|0mF*5SI^ez@H&8PV*cfRl?n3dq zQIOvS+#qn^ql_Fl$bDmH4!0-Xxn#Si4jRjX;r5pG&)pEMyBzKdNPU9M0>hvmYof_i z7d@HJ26MqRyf+-Ci9!Au8i2{BqAj$AI0nE#gIMEe5Ia1jy!)bv#4s2xjz;8yaSg$r zGz32=V%r8|d3wy9YCT;kOXmN*TW> zWWK^Klo<+u3bsGyokEH&@QmEMfRn?mB#7Ks!|*X7*bVY#d70e{D--N1w;GVlLvpH6 zCh}#K= zp>2O%2z2m2Be^0IQvY5vde5}4WZaW*q-Vxi*-UqRF#QTFl>>W`)cu!(&n9pLn z52jDL%k&9Oz1n%k8Onb)VfqBc0u%?KTzcaEUdyMi&NC{T(}nnGA9QK>#F?! z-*CNOz2QDXj7x#@$dEYBJ$$uSUTj>%yY=}O7!&lF2Q~h9fuZYMSvxK=ilQ(0^;F2_ zb$Nk+YJ|HBGH8HZj$a301%fajYTJRmBSWlU|1UclS_41sc=$zajTl(IN}>ndQOG|8 z>J|K)K{DJ(n-!sa?C(Ya%7!xYoIj&L|Gu5nL@u=RYmV( z*N+@cuU1q`v+sU>>|}k|kWkv?cKwKvqpzw{KT>9-Dk$_cd+oxlpZNE{j7ldmaHzDq zgq;)q@2!KRlFhTz=+d>d{b}pT8v`7<6ghl;>~ySkZ}ZlD3Jv3NTHO-^gY?ywAv}!_ z8C;?M$-r$SF&E^S<<#ym7k+OU2 z=Cv5&GvwS2DR)>;a6^^y@8gJdW@@KWia!`+B_=h{H#!D^Ryj8Qzidq3-M{|w)8>zt z?!N9?z}GF^y^DXJeeG!c#qlk_Nj$vP<3<}jsxRNh*hvjd_0dsffdROSpc{ez%s~cR ztRVYpUNX=P{Zur4&%_m;Anz8~CN&kwCovJY*T{)LUpYiz;N40YD-JBIFwzB6OL`d@ zPy01LugD=0F+0Q2R>@`#dTSzdfZ))BKZKP8fmdfPS~LS0v|Q^*UH$0yy`=zp)%U%N zd-KZY2(!cLL3iHdVVnbeGkqA)Ifu<1T@xrCNCk%X?DKgLzN#I^6wtQLDhVzF6;l%-Y zIh3QCd{jWm=(l7S7sW)dRMXguJ&hO-57O9G7r&fP)lqzOxsj*et&6TFR#k|iVUYMe zQYyL*Gk#I}5$WQ{B<|Q#4)vUdpF9SXQaqFmXKV3g`*3Q{Q?8#D&@H*p0CyA7<_C#%=Q6O%<5~mo@W?ik&1}rw(i;CgKC~l7r z4L1fmqQ|zP@+z3~JnKIofy2ad zXWEO8>y0vF+@WPq9UqV74*NQLW&^_WN((_>@RjbF5VU(K-i0I=GKkN1cVN zBhCM09ekZU&iP&AR0)0-5z#&CJd@lGZ5XhcSO+ZyZ$b9@J?pGx9ck|<+mYV474g13 zTqa6K?$Nhx$$i7Br8?Zz&SiVn*}*!}5>vJVRihUYRac#*sM9rh-gdE$PFp=$2cj=! zDJdsGirg}TpTY@!lu;H=t~qIzyEWQ!X=2dBR-qU=$~Z}%P$`y;f&v4-1D14dD}Ehi zDPA3G4236KuN#eWt(Q3GMx$fqD_=BW59QAJZnn7f zMx$rj9|DN`h&PjB&%60Gx#7j3DC+qJAM9BoBefLbMRrlJXl^^&t+VYHrANWh-(JQY#E$#04>y_6e{RoRv0pqJg}2B0SM(6Mc+oc1e~S z9cV1ka1p|9lSZF%oaba!1 zVH(f0Ce1QXbqkJ0bv0<5XdHf!inJhuhrnl-CyELbpcl>d@HVr!vE8l4xtjiDrWiHFIG;-TZ>AWfT6B$Hxd?1Q^aaZNb*9V3^>A}JFMw+_ z#=cem^6#-;u%xi{p-C8V;Xwiye_6-n;t!q$fnDL^{}xy(@Gts!xcIN&Ghi?A7jKdb z%^D3Z?(*xLiW8d6m4U4#d4@|wRd$9vEWXjg?mFTqplYQKc4(FJh!C$YIgcJ0ltFib zFX(oY`sg;0b6ty%?lA^m(CrQCqeE-!Fc@485K~!3U%){5$69=feE*Wak#78w6rwJu zo{q|6r~@B%PO!z28DmE)^>qj>aSywK=M8wC=R6}QguXyNS0MaEcYTTTyjJ7gJ=(xO zVN^8}zgWBY4+7B!S9DOFxd&ZjXH>*-FWv+mhti8mK~)e!CA)WGJV3}Vd#y3XgEVaq zlflI`2aLLm@t{I}R_JIN=3|Kn2f95MP0J_`n1{JuWhjP63`L8_d5Fz|>L8-n$6gpj z1!`J2i@~rKpB?^%ZHRqmQ9+r!pZR3?-ClsAU#JR2Dq3ORxn0O-=s+K+;oH#VK?Q<1 zh2th@8l0eiEXvQ`!uSa}cqu@~9dzk5BOG`&AI2J3H07etB}SRZm~Na!OXRvm)m_9R z{i@PM!*m=yFj!tZ-MGOisT7yoZcL)9&F$i1=A>5bY zTV`Ufa+QbgFdBFyJ$Hw?4I6hFf1&ag#svN3?}?_VHx)=D4SlsK>VjsN@L8vtVe!|y zVBL*BR@WaA64uF9hIr^MqesrhsmCAc31B*4u=(xODsS4L&h>opFma!H!rx#Xr{@cZuP58;`W-7Oc~(1g`^ET&^WN zF%*d0Fa9#yI4e5k1_XX(P6eLANWqS`gjat%p>(6z1}O5ZE9h)O>FodyL1rRX&_`p? z?SMWQgDxc$TA|=`tsT5q90F0n@WH4tfHDa4T&?yW2@>-OE(3VJ8+mIz zpfp1M3DC*0>3xH^^t<>O(A#6s_X*`p{s8FALb3JnJehQTaC-MPj3&JG+!`58`0V?P zTLTa`g_NJ)FZUVky!E%dDvIYA6&Y~z<8lPs8x$wbG0x4|GWob3xRUCKwyJNRe4JP| z$H=dW*XHhp)56Z6Ko#!*K5;yBG#lY%82l1+r_MDh@f1d@vps{@xpCNg-9oP_` z+UF4U#sj0$xKAqDTL<*g-rCPgTYO-BS-j7_=nD>v%7T4SDb2Y%#pi`+UHh-bkn2IQ zeqcq7uvQ>yU&YB4Wzm9QL2h0?1)~Us30WMrN{R`=hac*ZY`8u12}C1&x-tLs2 zF|6pG{m%kgS6%f#hPEeGrmJIn$AXmH(;2kriiZhh$5Iv}Xn1_eqH1Q-f!77YOikdW zy3rICB1&o$fB1syO7S{qa~zu+e{9rX(UM;WBxX4L)NuC1ipJh8Mc6T7G93}8a1UY- zi^YlU9SbZtjxN?{7x}3;bPb`gj0#i31vGJ6GiFEGoh!>NVMXp(+DI#7?RAKs{b&7tnZ|IP|)WHB|k*g z5e&3~eoQD?M;Zvmp+6H!{*?^nqBe*ICntQ$SO+{Mj;!|yK`_MrJ;Fk=SKyg%$wLjP ztB}!Gb^AFMvP&>LO%%%8D{lHMB&*wmiA|I``6;%JeYvwDOuy_zvAiAY_Lv({nFAoJ zjWiXnzh!hOzQ0OYxH$>9psB^@!!VEFIJJ)sD{U>WLDC8>13Jp|X!d`xi8hFmHAd)g z8N85|V-!F5U;|2{Ka3MR-+0ELWFjB_F-e0$3`r31M`!(9NTcvGNL;9)=Ump1+RY>v) zA`^6lrI47Ufi5I-2)$IOdX9Ea4)a)R;F?DkdN@( z%T!N=jI1ePA$s%S3BhE=8}Au+1+LgfqgCEFbSHYA` zD1fboJq4k(Uv(9{{c{v0Fwn4?G+`|&KybT3oT~#)a7VL)X(f-=t_pTaC zSc8qs!?<5_)mX~{2Do2=8n3u&tmhy&>Fa1k{)4MzBTFFDweNvP#6%aZ=YK*0yR{Cq zo^jRK#+f3m4JdfPRbvTfopU=6Z}tmUjjgfPxA|+k1wU|=toRXCIFkC5+Tg=3T05Ot zx5uJjLR)Dv9a!)+ur)-S7n44Ow;seV(k_3~Oqf@*r`Yq{X4l^l&Y?B4%m0aR4!}yr zA9)AhnSeL5%b!3vaeushQ+)sMNxG>ZkyZvfGSyPuB{?xY!T z`vW{rIQzpL*<;__U$(QAAKhZXlKN)&RsBt z1zbx!?cD{lS-{qLh@&83mp?y7tGO|K6AL(U9?$L}u4Vx(`J3C)f6M|djOMoVU&Tl% zTYAWfOrCrACU?YWaW`;}ee7KhEgqO7a>S#@Bdy>xz~oXoX&p33Om;|--OOZ>T_Z$x zrzS;BSp5lN4*VAEGBN&h;~%--Lds!74u}7e8ChE-wtsH)^sf2pRZ;T=-0wD4iZj1J z2fnEkch+`0NZj#-acDkbaq@$Lm>AVwLbV4n#MfWIeFn;lJH9mjsjn##JHIp{{M+1M z7!^EF{dSYC1hVyCzv{7j0I(Dqq%B|JkA;8)zv$u-#y3Vc$5`ngk#lGFheXefMrPpM zhj5I`h+8LYH1=+`6tjCe;alTzas39!Ss=81YXcPc3nGnyub^F-y2&Wacw;$qo$1go zBm7N=P4Jq%xm5gflTq^bwX&dDs1uxs!EahoS9UzDRpLQu{Pq__cgM=X_kd#&3)cRc zMKOl*`cfg&-Lhai3u0{I*7i(yn@{-I7uY8phFn*>+6#Mi8&z-%3n=d7BH7$t=DTHu zI|(OmM@il2QWfEZ1q)a}PK%rHnrxZgC65I!v4HICLKM`Ctrv6%=K=ga!90ea2Y5uO z2+xd^$S!@(0`jh_P_PAE8dp^+uG<1{r$;)A+qW2(dRI?;QDkg2+I!!}L)BKJveTAP zFCq$vT^QD|kA+|~Lwk6zBA#1%>N4ViN@FCh-3p=EC#W@ZtMM=I-IHDv`gcae`zRi| ze`g$=^UNgB!37}=TviZqoQ8h~{O^D-zBB&ey#Z)H5dStjRDN%C^rBrc@OwnV0PaQK z8x`JPfji}Uqq@y#Tocp4083Q>g4{s_=gGL&FVC2t^fQ0bZy;qSc^dGQ*P$MCU zZx|U#6aW0dIGA8a+`DR9#StG=NUTjiBn#q$DM*3lhkZ)U6P*iTRW9`%{DD0#P2BL5 z8TNbofbW9FR~ovd*u!hHJ9<1mAO6?;pCphMmoF-FFyYXok=^owW5YdEXRa`4)bJL; z-;S;ZfHo0PFjG>p&tze!29=AS+A9b=B^A=(-i2zO;ElO7HG->XU++MA(J;MYnvRb0 z-%#qDY_CUZgym(IZGn*tIStunt-WM{bKOJ(DU1`5);9`6vE8YsXF;zcZ^;PT&_cyY zqfzl0${;Yjw7ydRcWqx*z3f!Xn9eK~`>H0}!@V(Wj#S5?vnjU9&lZ(A-<$#K?4)dK zA=YZ}j%wMUEOh2T!yKS?Y!;BRi<1{r9s51=5mmAk*+DtB-#8x})bE@RepGY%;W~}W zLyCOoa$dALDBGaAWbiO(_0%ljBUa<&$Bcyq=7FK{IrR+Yknu$d^zp%PW5bWeaBsV^A9o_Rv1}=k0GMkVN^k! z+L-f;ak)I&M(s4}FPK+&R2KEskWazT-1Z!%!J{3O3a+g7)IV_gp`IN1r|(KT2eHm1 zBws?(To7c9;RoP?Lrq)Ng?6H}p zh^xJ3Ykg@uG1+UL!s0Kz=AP=rtc*!tH7T>nMJZ6EmUn7=*k^9i18bgs1&3Sk;|g(a zs(DuP&g@0Sc_Q()o@(~t??B5m^kpStgk?$xD;gAG&m ze{$F~#a(|h4|Ffzv$e$mF(wdit%KMUFav?b0ol;BoIkOlG3~|q{o@UliIx4$^uU<* zvY}N;BdYt|Q};rdSa+ytvp%OzEY39pI)DQXGb03Ix_&?LZ_30s)h^-#3=jwKA4Z(` zAAA=hip1jV_!L#?_}k1e)$#gAdj51sY|KyeJfmN1L80Kxf_U$L|I|EJCJsF+(SW$? zC^L}uT$y~gY3?=j`(!d#qdtG&OSqv_l+>vDTs#?lVzY#Tn`{1r*DyjC z{d>A*>5-n8r4hQErC#n?`h&}8Za`F@9A8FdncI<XwKD=pz0H-|!9XTX@3&y58{b@BW4|p`DQU8ZrjO7AXqqPKa+xfAFKeKVvT+ zH40oG^&gz57mLM9r??iX^*4M90QUM@{8RY-6SX|l!l4GBYlZ&7?oVhf{&kwG`>&pc z?`(qeoh2R3f3TtHMdHNviH0(_#CIl?OgQLIn5@@Z`X~T&eH6d{O}yCBG52B%$J`&B zrXBfvnOr24We%R*(~|;GO_FLi9zLWzb3XdE>~-9tj~S+nd0p;%##kk>p_T4^KFm) z7#}i&pGPRI^M!Gf!)+<7XF?K0`*K`69aPPJhN!tf6@&j_w#{?ky8U{LgcuL_g$~?n ze-Ohb%@Rc#K`}F77~qAFDM1>V!59gmmMhc{P;qx!vwih|A zrPwbM9vetkMZy9Jm;@+akk~*{?YD`V?u@yYLhT7umnC-_nrD(XoENS&x zN5s~_r=(M8hX2AY1O!&2DAysd%8+S>gR9fUt_xsBJ||OzFEoqcH3VU!Cc|1%Ck4Nq zcPd5D*I5R(-g=JNvEUwo9?Zjkf{VJuXiUA(EUlcANueMFftfV9$C`rZ6Uv*IMLv7s z&@;|ACB2*eW#0Aw;gNmkytB>AFk?Bt2TyXMbvub))uBiv&-}+Pgj^jxW^>E$TxYbqMV;@qJStA}jsR=tB|{5v77C zt`GSQ6A{;k{Dz5;ijZVINOvfReupBY@#ZVdTCZq75_k3uaN`+icBKychLPsS{Jn6L z`3}FVKBLXr^koR7uIw1aiW?J$s6O4vSa9<=$W&Esgi{+gjf3c)O7zt6I70B-X}oC( z`v$W_s`_#G>UXwKPoUn7;@h$21lHMly{emg1I`s%2>j-1mY8>~dAxWuYTnF1maG0_ z9ukXjnW9|XU;D3ll~}c?3zBq2yO)XUt}}BpR>3;Vo{t#SsIvYVNb7Nk){ii6_cJ=n zY4v!sJEtpfvsuO8NAEUe0N23{3O*n33}qMy6U(I)V(@I_T>|2@v*Epk--l+K zMGgY&cjlxDdzM*Lt!k_w-^xeLE|E_>h@rzlKY|a^WTiktk;fbA7to5_V-_-j0C9ZD zI5`;^Bb~6u$SNSi8q+e4F1B=3g)+|ro9C%eMX6#-{@&_ZH*P@ERVWlI8OY(hYgOtUr?2U*TK zqd%uGASEKur49if3w{U|69`9{D&I#6!co#jSj`o0E2)e}3GYr|a@LdMQKll2icB}l z|D=_r$taBsI)%MSO%&nbG(|{7X_R)f0K-$SHbyp-qQX(isx`9rVA>D>8){y>F`rc7 zhEl;Zr`oO{i+B4G#{@QIKZix#@ihgx_>A$5%e6=og2%&R&~1GSawj<%NU=m|a=iE; zvE`KV0x@8snZgBp`b2ZET*z-$wv&;CX)G-4Pbvz8G4ilf@ykTY2eGkDGG#dAO-A<+ z|32&!ghRe(61ET3B0|MJ+g?O=_bEuL_d2Ou*G@7A#c1>QpOdk<;CI|)=q|9&uAFRk zQ`ZHU>tM!ksR-T@yHvzMQ*SZXH^T}|H|KYZGcTAJAgjwn^9OO$WC(8mhuWGx(|l2% zpV@fM9p*<``u}@B&ZTdk@8?h5>|fj8Wf@;#tVi6CzKUQN zAXh;4qrmu>R5e)cIMw7+tQyNK@GtfqicwgSiCEuVQobbY$=0_>0|SfM+{2sUJ#WW9}odh z2T6`=HrW|O%2Xi>hQUf&vpxNaF%sR&kzl&i#Ke0UA6$GE5ZIYKo|?&W8D9lNE6SuN ziZ5(vUNUDe^K(Kp$UrELqXQTLaw6c%94;{^`+OQu84C{FV}dxu%)wtP8um}fZ*Jl+=PHc{*MwKeWHv{fyxc{TAK^@(ayg}K7@ zB6qDwOebIH$FI3wwHUC*)z~cO4K7q~@Fn>M8L4!s&@A-c+4!s&^`Y58hspfh56vDra*(e7&@4Uih9_Yp?zVwPh%(&0 zy6Le@uDz7ed`}eyKh3_072N4!5eJQ4i=ouu@=URAx>b-pi74?zu43p%WziD@wFo=VJ|n87~w>1xmMKuNRjWkCQ1_DIbhrG@lj#F4{oAS8PS8~)%YQj1is z2!>+4`-t_jVgykE9rNPE$gQ;>YD5u+X1@k|)lV&aXq`&)A%?dXuz)AVN?9;5t&$%p=_;{w9d^|RE%EC*yr7X?MA>@th>{1bkgwX) z(@sGe1(`RY7xc6~x*|dFKdG^@O&4zO@Uuf`$2rc)qi*~NxWjXc!7fz=kbGvnd7=JO zo~ZZ)O~6g^gip*ihdU8@;5MY>|E$+booIOK1EPhoyQ7cUaS=s|DjM#1kl|E+Yqs~j z8w|t5k{QXS`^AOdnoALCv9WTKd5rvAF5e7s*Z8l^d(pU=&c^`CrV>nD)w8~{DwPW?=w z?w#IN?ZD}6)%H(slYZdzHtGALmm==o4D;GIk?D-l)9}maY5m{KlF`%bi2)~GnrGj^ z(liujwH(Qek&hN^lS|ia#NQpAC!cli`|zNS)2Y zsWp9X7X6QfQxiGgVXEJ9rW(I;s^9v5Q;mplPEL5QpRha=Z@j|sE2(L4pO7F9o( zh3+e5M5O(Q4JDaf>mbs8GSAa*(8XmxDYfjxpUnSK3EbdT0#|Q0PYc|ja}z^6G*SN? z(rsb00B(_J+HPLV8=mpAc~KgL*)#lFKtvC%I$3`_OW0#;Dn-c-vs3ntL!c!^@?>O5 zkz4l;vs|B^Cx-7ZPhzKD+Mz^WmA{ys5&n{T4_*$!X(Fd}Ra=t!&o9{5M|Tkme=)C> zQuB#oSy&ki?$2xK(I0zCd-{a0(wtwhDZ&DL-LERxSne)U`YGY>QgOQThm0CFdzaZJ z3-VIjd*Cm{U0a;0S%=9WxSDkye|Kos1pbcGtzp_vVwY~Mi%y=5SWfV4O9a}wWg;MS zU4su-JSNvHqS2iny6ZS_5rOnsgM={-TuERDbyCKGTM1-ThXNPo=v!X&MC~#_A&QKn z-Uq1kcPnuL7ZS)oVYnj2F<&H*o^ItX;2Hwy!iV)5$NVCO3D?~?@FxPJylX=6ABT>< z)oBS{yK&&H1ahEowT%Pk5J<;7NIT=er(&2*U>@So*9hhC>0uj(t^+hG!StnxgTE&- zr<%UCap?FdfHIgDgRRD)_Y=za5zMs}hc*$)=3wQMfWAp6eHfW!D~5ZJ{VBm5+d3E6 z{)te=cA&fNqBeUC@pXQR^#IKt1`h1mRyq z3F3}a>l_wqX;x8YQc0&Y>mN?V!j5`UEx0eyj=^JllfYtGn$@j*6)4BZ1Cf4Fkkfk@ zkCNAN@@fZ(qJY(bn@;b5)mFd5Cst)xxA-1!m!*rrf2%pAaZ#p~FWHvYv#cV1;ooFg zU9CvtXluv%1t@ zG4eX&umcni)Dhezj!2tn*oB;Oa_P~qhU6pZs8p6tr^*m^v|7vnBi@pHI#PNeKss7vZ#Zt*6n8z; z%;XP{8D}$8F7L0_by!{A!Be0SCws zOjO7d!XzWKK`2Nno={F~y-Ii2`|d;J_zw0$`~-hBWY=?~LSw#9^NG5%y1<5dT2-d_ zI?tM)62J`%QD7VLtu-l#am(lH3am@TqCD#}hKEJLTK)n!TE8c)@sdL8F}-ldA$lKs zjmiSSMA>#4{$iNBm2Iq{-iC3{3%k(je4zOA?_N&)0`W|-)kYtaF5WG+ns^0bFeMzO zJV);-vHG!SQ;GFBkKx(vtiJsF%XZdrAs)xy`Lz7R_ac)(qK}rUeR6y2*h~cJW5nf9 zEyDGQvo=(B6f4?WQ66X~lv;%)KUQOD<&(QC2xapYgy$gEKtYh)B`~_jFv@|!ML~=Z zRva-s^Z=rIF&GU*NM4-G$_zC4N}gCAvi_nk$P*c1Ovjgb;-s+EUH=eP z2w|(IzA+D+1Af2B6Tjd$Fb^J)xT}RT#DuWbL7ZJ?W$UlyiOb4RcZVS!FSCx)>oxIn znYB3Oj#oUv4=u5%gH?n8Im&`87_<1Ad=TCfcCKGLSXYG29Phcx8Ox(Fzl+sPzb9Ap z?_yo6&(y`x>#AC1Zfj_w1Obd5`2ES(RrL}btE}Gf;+LBhA0nEnux4Ym$KL6xJ-EKA zXNQ?Guy@GE9MnT4VXP~A_biFWpdV;vNqtpkac8x4jrN0h=0A~&MqiEfG(y=Q49JfX zA^>^5@q&nTh33N9tsS7xWtG_6%_<{u%xCp)-Emq!*+GoyjyV8)@J}6zMd=frQjn)I z2>2)6tqQ`IRp%9pPCcxGlu>@fz|%$e*n_(_lkbFoib(m+tg?f9=uKTj-H8Vm1|cw^ zm?kYIrV(NP!EMDWeQUZ=+M^v=b7jhRc{ug_V({u-B{eGMIwUa2rNer7iUkCx%>e(D z-zXk39sPsI{j9XZ5LJ;D5@k4|=m4#PwZrfLY6;f$B3L_(tqYm4Mdz7@EguH$vBtn_ zurwj{0rQGo${&~dcrqS|oBI`s`gXa#DDUt%H2-geLBL2uQC#qRG7JJ(LzqW+Ldw-0 ziGSo^G+0jTEf@mMZC5aa0|IqE?I zSw&WJA{|J}J`6+}^+}w#QJ)$w*ehqiFz1Ibjndc_;vImc!#k2phMXlD|Nrj6yN46q z@8GfS)ZjUa{S2NQ5tb9e7oe+PR8=n1P+Bh!6ncyyh+@2Bu4QLLLGn#tUUt)c}Bd19P15i-Au85;wnr*ceQ7hh;_1 zKytY0IJSIn!$1JCsfSpLGRdZZQ^IWqoYL{VtmCycqO`YVIs(ZdO14=KZxwPp_TkoP zMChXsAckx&F70DoNbYA{e=8x|TzQ0*BF;M6Ixqb-M|3d>(L|jmvXzE{S?w+j1hKQhuX$f;Ebn z$;I_2S|{e9PgbJtf}fsf9j^63HhXKVw9G;_R2eRD!AW?l&@ zhCVA#3_Qy^s@?7FaR5Tz^-d)wPsYCVyfaoW7X#11-2=lh2f2DX^LG%Nw>M&U{|;hL?~T|Uznxg=%I5Rf3iH@1 zHjk~6=kc!J(ZHv_rGY#5-@tZ^zWs&jy@aP#zu>KZBWc|oCnim;&WXSJhW%13e&@+% zONoi318SWPt+ih8uEoj@&r&OU;1JhRn7v=(-jAPLE;e1Qy4&a4eGz+Yzr;$nHSZ}B zy4snsmzBwvb&MD^yZV~FcUkPW6>oiG(uD3~{Hyj)>?RT$X0=ZFu^QiH@IbnF+y1G( zFg59o9JilAPv1Yq83#P*NB2+cJ`g*wmwwCsiOoM?Vzc&3toX&oW@|lpPu|}|zPjHQ zyq_O%cVFKxvEt3myL-T&=F0sN_ijJnS3Y(B#6~S_wk_>-(^#>8V(;C)Tx@wrZ8*UR z``R?7?Vs39=-GiS#u@u3b~iR#ch8FFywPkyWnoLoQk&=239h~J$=^=AbU}0C*&v=B z+wZcI4yWi7`)Ys}aH{1pzV&J86m-H51d0LNGYiLt2!QX?ZK8XjuxVafyd$nQWX6Et$MyJ=+e? z9;TVrWh^>`d`5_S8tE|bJ%swOiix=_un*8m;3rrHwljsC8G{l+s1Ef2C_qXY4#?|P zN)~ikBR+d%*LCn$g}`suj8!8TnJ_@1h0Yj$%$h1awZiH6*#*&mYF#)95yE)zoeZK# zlOXinF1&IWP<6!$})fl=>`Oc?iIza1S0 zbrJf8VPJkkX+u=1VfjX&Zg9xn)aBAxKp>O}4HnUf+BlgF}q%Q(wu_?UhG~mv6DAHb1ma7AtPG(#XlY zbE|c%{$aTYPqC`#9Y@nieTDL3Yuqx$dQ{gN+lkr2I!N2u_=>Q~HGOP_*fP!PAYEG^YmumT1qHMAQM(REaHkvL|CRUAc;ml57KaCmRyXE9_hA>wR^!YNntt9Pa~i?wB%UX$gGYDa7QGhp0{rJoku#W3lArB&OOQcqnMmIOBzsNg@eFA?~%i;mWCj z6cPlIVi5W>H#xcK6vW82;nkJc3|M+2^kt5iOtux}=cPKVgn{S~@3mWDGoV`4YT2e1 z{H(Rw#neYt0ya@bE#-yg@x3=Kn6axVDV$ar_kN|E7$` zQ($=?li*7IA+^6UIU8^am~9(^S=hSMP?3V!m~Wg?Hge0AHt0l_I5F`o9n!EV`!Rcv z;c}ltC(>h9;vBQ=u2(PYqx7|b;Expl(j^YsRS4Mv`aOskTzjE61bbn(ngYaLaP4R=__yKo=c3+^1T_%7=ZR`~HQuyi-&h?5(vziBy* za~rH7T6G$~JxJ%#BT9Sl9|-w_H|2yibTI%9hx-H_Q3(`%?zVa%MC*U=wn|IypyMRC zu~i<)j;WJ23}H|h24E0dt$*m?w$ZYb?2Ld%^LV|w$LCK8K*uYKQxK@fPJ{P*YKC2a z1fmR!jLp<%dymeNiU_1M*wh9YMLZ{FAyWGU==HHm z#pza}Q*sMMrz*fcf@AF?LrwFkC$s!Yn1wth)UT+F^*D)`d7il&Gcu6X6*FN^;gtD; zceci#I2NRco&~{ArQF`)_RDEeUBpvQvR!n|QT@S&n&=T%t`|EWIcK0&$avdw0{AB) zq4TFeZTb=J>GBu{3@M8hQB=fq##n7RtDHJHBVxqTuF~@>wx0N@z*YoH6GkEGsMejM z8s-71QJv-i>(m;=$Qo2KWNg>en&JrM8KEpOdB{R#ibYahQF;Oeyt}m3)M=&$ z4DtTY>Vpf-wp#JiDcNC3|D983Tg$5)RGOYS)TD;?^yIc^K?eQoG51)V+rm=VtIGw~ zPt8VbD#W;Z6yf{tvCa~g%(03}n6VYO^djP0A!7g*mCQr%Wifk>H5n$Kjos&3CrZ<+ z>+iQ@poIJGhv`-7y_R4ofQEamvAKx+giK~BA==q#b-^*I;*k5SawY~i`#vjMi#`XF z7??VtDcqRgD35a)Yc(WKPBaJZMiolV9w#o=`w4J{1Md$X9^5f(+JRunV~N=HBS&*Y z*Va~eph~sJO_{sOGi*pG<#M}z#K_TC)u|sa1qnLQJqe*BNGDV`MCPCNLW)PrAo5nY zx}?E0OErU>+Bn2jj^Dkv#k9$OAca#@tyFf74)C$gMMJ53^bVUKsWU45-iHg66c-9M zf}|M%4PIc-Wf)B%T|`JfiCKGbp~K{A_}5p<==aDs4D&4=ldh)O2O=t!lFz=j4!uT! z>V=%@qb2`E4%1GT&${bba-M|C>zuU0O2Kf;aIwT!#Y<8WC5fdWA}~Hwc3o+-Wq)zE z!`)GRY`6&x!JdbF!ubAxIeO9xPjF>1^myn!{@ylG{oVL7mY~-6o_T9jglyO;RM?5X zQr&;q3xH*}Q^jvWCx~q(jw~u4v{u2mHe7b_Vf(QX7~JOIR)`%@(_Yliswt;YzkP|ms-kjB9PBIidD-IGe0^J5VBtuCt?&X6+^yrCVo zI{s^8Z(h=H2DeNbk_$W%@_fS?;;DxbTdoNYxr^Zcy!l~k`qAS@f>Bvy(NURLFR>n8 zEl!-KhWD|t+pFYHut|PVtfQ4`97u?!Ay>~*x>6Qy@_?Z$60G_9tC zjw&l_yS9OoEV*8MUp-^CIK7kvMiVD|)2G83>O%t$;88|Ap`k8kWWF(x-#b=v2B5MG>x}LeyPR zUL(Y_R#9|J4{C$y1^`9ugNyq!LJOWNJaZQJhtLc0Fv0O4{hlNkN3HNIU@<+1J(Zq$ zi~IKgYI=s94pdlE(BdLS)$}wi?tfSeb)iB9XB_})z&4X`t39u<2M*b16)sqBA8;Y2 zqpJJt=d2QUr%lhhF7mIdD#)CXfhsu2+&!uAtYfDsVL_+gQ>ZX$Y_ZcDT~t3)sNmN9 zpz7bF)8DzKZIhZdB=B%`y7GCe8`qALO?UX&3libLXb;>hs_A~z0w(z;&fLSlYW$2-RRlyy!!3G&fq znzNb(o+UGk#H_wh7OIJnPg#o?bLEId)~al-xo;f#_o`H}b(v8i{<7Gr(Wh(Ts>NUe zVWTo*2@F{tTWk%GF&rx_Jvm}l*jD{}3r>%>mlg&5cx~Hvk12<^c+VTCZ z6Vb)6S_L`pGghs16mlpHf5y5rJ&xuTLob0O6L=|0ElKg3rLbf`zrR>&U7&p+PHa;4 z9G5jIGV7GlwD`0MWIk|Ot51*tUXi$Yne}(}Zo@K3t1)A_^^w-<>s)&IV}k)Bg4ux_ zC-`-)*!6Q+>AZ2a(LOV?Y1ZqORDmRoDJ zR-5;vyxF0=cJ0eC${j^urFEvZMHJUX4$rQ?Z|Y3@C%JV%2) zPO(3m9eaA-fqBWpgV_phNf*J_tyA(O1`b)CX5c0Xzw&kKoDx-mY?&fQuAgF3qKH|S zN2<_+m6u1V#fhsdnb#w#*L08G_X~FHeC&v0kvMRATUy<#1Li3fFmB0|W(6-e1;OzJ z3G6osOb0f6Kej-35u@_v4#1gy4z5OS{11r_c$7j{cfm#$WTFD@Qf@-q32y^9tZ|YG zChkN5lSDQ&>*s71u*N(TAdy_WPm5Tn!19@OI{I{Sy|nMgb3cRe<%5 zjHMJ+%JX%Lhj8AH9K- z3&!mSy$R!Y7`I=HU&pxp%y6pM{ib!0`1nnHzF*~u?QdHB^~stz@-6F3-eG6GWyz3J z&%I^!WY`+@xqDO(k=+*^Z|EZO-?om>7iNjSzHNQNT0P#ee&Vn7uDS^y^R5*t{p<<& zIHlWj`I8zP+XnY0bx)myIeEHBTo0s-tr9E`Ve$I=R<*vnZR4)@t!^5>?`~_YO-gtb zUTGF+8%3`Vt%Z(=>n1VcBm99z5Bu2a(D>N9R(o&bSsz>PYFQ884xS0&dLb%62B5y{ ztz)7&5MXIIQz1dZbs}T4PfO$E)yF4~iVMu%{bfotjY}D-SH-Tk^!&yhky;|&XUWjB z91@puK2hQV?ngfLWMWtO1j{Y@E%+hCh~gLe0}$oP!ha#gnU+m9kz@uW#3qvLh204! z*+G;%$fwhLco~rxumN;7_S#3#JsH0hwUkd>g{O@WVZ3-t6S<-7SUiwAfc8*`vb_~i z{fgk)NSHR5fL*M@&oO=**(QRZfTKzXAL(r+u^EuVWZtTDVw{d}&G?!H$^Hchn$HYqqZ7ufjvaMbPT1jPQ}qk{+xhZD7I zUT!y|JE(SpisJ-Q0cbd4Raop{1VF$|*26a`M+ShLW89--?+z;f&R^kF{6C!o^vhhq z5b&QMJ&e-9uWQgB@&t~tl=3;09(@pt)`*5lr9yL-ftFH}LBFB1j&w+Jowwbc&6p5}f{ zb>!4cvGN=EMB%etu+e&%ouB;Ia_R9m<6Af|;P1iTgxZRY-&!)H%`P|aq)iGqcvAv1 z??Upjm`H3JPM{z0ysKQa+N>&d+6*5alHUyTMf~2p8Qb1d?Zlg#tzYolxN3{_rbda^ zz28|2j~Lwsivx!srez8Qzw%EUefSee0@R;4Vesd?*q=C8@F%3DC>1llwvw~F zy}Ems;3L3lE{t8Jzm-&ZopmbU+AS-jITauZX9Xxpc`T*a+gX8OJz^EWNuWY!s0G(Y z4w2ugs*x6}F=8WXU`5AjV721BwQnMrw*Y)@E4zpZKUkeQPzMV3n_H(wv9?sFVG5nG zdpY(sKn%RkUZimBX+K)+_8c}O2uZ{4s`>;80u_=e_Bz&=AyAxQV@sB!NOSbl*o`?B zggH?aK4%3PWQ7&@S!%doat}bv5b4mVBWMVEFEkrDI#>Q^8PV2 zAyc5u@7?Vv69;LeJT;srtv0u;whg2F~ZW0_s!o!CKW7`RLYPACI@ z>h_FZ0Imd>$5b5oc|u8;>4@XduL&&&6uW5xI$e~2=#{? z9fUShSb*a}GO_Li%6G+TP#)zjn9G86)ZhzuXG4CB1>hf4Drk4fB3Xh0@~ZBFXIa43 zxlC?%rJH_@1Tr%#0iIYH!BjKuX7ffdX z8{xun7u?SR_IFFOZY^K|^H6V#HY-^kYlJJvP3!eom0wZdekJQ-1^DpSWF=nJR>FC4 z!51BagZ-dTNw4-~20yAU!p4#T5wXL0d&NaRTNVB8ifNE^)I>Cv^nIw2bWZqQv`FH; zpK)qIYuj9jbl47SQAKkl5?X0lfz<97r9h%`2G{fE3Zy~5NCi@3^cU+oZ!;M~`tF2` z0n!u77&5UTXV8%vQU}TyZrm+p47VK>Srw&-VWngJ0^fT`q8%m+8iJ6wuSRn>T)@Ez zfxVJ$#+W%N528dEbBRq{sXw7RAlsyn70(8jaoWj9b2A7y9m<-idCGLVev7xxj@Hj- z5?{H??{4%$B?YZ>3eUk*V!?ld2N~Vo?fUIrdc*5B4B_nbD?+e+Nv(rAryj}=Wo0K1 z47_{E97?8*nn6OFHW+(U zLJP+hhar^>2QUY=t{x?Z!*5Df8ZuL9!p7SG7|yidwhGy-x_iKijq{(1K+=+j4alMN zj$&NV%fkUQlX9hW`bT>~*{4w8P!AJJr{hj|Io-LWraAM*L#bvy4$d#G$hqpcns(4eP*kqz~3;D)g`^R39V zthVNeeAmzK)T&%@^VnwJ_i3pu=`(&=|E%b$MGV@rovSG&27;=!iw5k4DU#%}-xhyg9EjYl--rOdSN13r73qk_3gGeSk-PM94$z+w2^09G zKk`cMSJd0ClWZ{at$&s&o=u5#^{)BqRq=C5q*J?%mAr*i==HR!@K@@iRbYah-rC?d zmE!Q!$hrBqEnH3>3*S6QK_C-+AVVxjjjZZg-;UQ6lKqzXQzrS;rK$dFWD)5Bz(fRj z*zy(rSO|zT=J?Jhf}d6vi=o4M^!sCjtH_8Pt^XVpLo*^LE9b&#IZ7V7G9w~bazSR~ zvefY%rP+aK%8j%U+cG1^vZQxbq@#YHPgqNgqTn)9i<@uuO!$_|FW4Y-4VWh(#90qDb#>Pkk?+{dP5E(#>5_}|wg=9CdxiNwx z?RC5!#ZaWx1{rjUq6+Anvdq4n*zp-mb`yi>k%M>4fmmThad;z2@U3zhp!9c_Q z1*kj(;Y^(w!U-)_9~H=tK0Eh0evW!@UM>}6lGov78@xkW8FB@nU(#TKJ30PM^C(x1Q26-CbBZ>QqO)9J9r z!7)^!FVIEs$xdY=SP~h`m}_<0YPyKv%tQ0Vqa~3!!7*)cpum_J*A^vAxUgMhgT6Lf zj2K^?-)3!gSiX9kpm^0O^d|5HQFv{8tbMd}$<5Uv(Y7=)h<{vD8j+D%R!yijN*4L_ z^r(*(P9bF)K=C}@q89u%R}AhDX{$fx7uR-(Jc^o)W;rwj+&2H&F;cEg7n80uOGK#L zNNGGF6xpte5gpOo6o2Ecj*(QIm!SOxRg(^zs-1Xm@_WG*MV(EWtjK-59k#{xk zkJU#_jZ}9M18Q)ZO!0~tHP{p}MPVbaOJK=2P2^gd3dCwNPX@_YeO-s{%vB%$s7g+= zL|aBQpBruKXH^nSTj4@mPP7y^+UhqHT6W*afOw-DsM60!LTjnf?}?Ve zPBm^(GT~e)@-D+9_vw+HVeeOZelIY?xRFYdI>GI`6SVj zN6@TI`L0^%+8-Eb3)9w8qo1*F$#1@;M!zOnntMW89O-vNOL_?{zS5iT23pdpY;k%g z6D?_hwAkpKd!V)0=u)EX|D8TdwBI|@BA&x>F@PuI7QfGjuv6N9wQEK2iO#LWYvnm< zB6xGxoPZB<{cJCy!K)h3DMf@^mGs7=KE7p)1W%Qoz}MyH^_86;`rhtp_SgW zMRO zi|+#-?y6cBFH_{;UWk*1J{{Y>UgiltYvJJW^woQKJs}*oI3Q(|7vxJquYejH)gJJ) zLtrQC!TsLrVUwP|U{Ju(h^?phZsRLU>ERXHX-07nVUuCiC@<8*pnUa<5v$s^j_RhC z>5LW}hJ3_m87ajXtzPBHbVjQinta4)iR+A(xXx&G2)6e=+W27gF5aLTtS-Jg|DZft zIYacGG;V)l+*IMn8#AOna@;r*;3w2<=-@N$AeN9iPt+vvMmw3RK{E54EiMu%N&LhI z^B)|`k~I{A4#%+&+vC^lI-t*F?H*_?ekSXPmi(o+v?07ykDFuiX4TS$uzC-)78`w^ zXzA{Kqs4D?@j{?wC!w{}=*vXQbECD`=m$hg+LmLD7Iu$x%=qd<6z8K?5FR|W@L(&T z*|_cdg78Kg(LGXf__CEKk6+fwpdbw|Zkf|x0lbCC=sjcCe;>>jh4s|I1t;A{)NGfv zp;Byg)=zQt6v;9LzrB-vDsokjGKKdcQ}6}X!#H(7w}OuMzu$}~daYy!jV$3;2w%2= zhjcELB7kQdAeSh^r6cINgnzmk$P_0)GypiQ8YTRD!WqgH<{9HEl~Lo=j~v|hAbJ>C zMx(}3@yMcsi)hq1^zoWPaZ}I8k?{pPkxlM@U%!=TN$;n{*Z3V9PhJ#i!8X2fGI(!u zVIvG8zwYkIun*{|@$Hi%rMfvcUh9CK8tYDr?9`*%eI8zJ)W7(2|5KZtqkFwxxT84# zXkMt5_^&kOquww(RrB*74>#g!k7jR%VUN_0Ie#64ODP_8`%{ne=(X3!9(_=VI8akE#v% zsM^q_eWGeax4mJ6NK)er*pql_`C)b}|3TD3+SZ{>n&Zjiq#8HYA3<4DbMSfWQHPA* zfqLbbB!W-Qg?v;Ul8-58$llB6REWWxda6Sb8nC~QLDLhs8FD%$LZ`_g$gnDJ0^3f-IA|L&- zt6-C4{%t!AdQ+-yk)vbZX+#;IgRJ9OU6V ziePN}ZKXUBmDf66lDw=-zZr-eId5nJk_z6k@l>f7Kvtkf)m1l1e1Re2W_?r^l$PKp zP&5i&8!0k)8TO=^)g&Vwq=2Pd5+pi?Nc0p(Hj*M`Bk)zA)dQ~36rk%=c|oFei#)vl z0&yTC$@M{<+hQlAly3AZOOsADtlX8?-R?}fB%1>%%!d>WKs6xgu~~;?A4Q0x1z|S8 zvsNCu9#zD;u+c@QDQdm}kAFs4uM-zoW zfsu(cL_rzF1})AdrXV(#&X=hM8l}08e56;FqF$n${tLLmcqa|M2sO2AD-~@q`weCX zGFLUV2%skCgZz^8sDj+4(p%93U4vv^ihoKn(R2H)SHJ~Cg0J@ko2mp?@PUHr3__~q z)YybDF?5pE?AF8WrMq_i?5)FOw;ygdjTm+PwRM-5VOto6xPw4q)~CH7VW7iMnmOE_ zc;}Ms9+D^+Zf{xt+zrvX%ZG)0!?>7bOPEBvbu`|T&)pQpHVh&PuZs?3BQ82R=r8~S zIzz{@L}$EiGLR9m$8frfcgL4R#vcV8m<^H+S9*d@Qg>2ScYu_J{WXE4yBov24?}69 zDZD#ZkNs$gUml1c^Jt7n6qD?CQ^9*>n1uutzl%yJZ5XCkEn(2fghDIPnKU;UB(NM- z20fCCQ1S$(C`wW3fd}PRqQNv*gTq1rg_nt*rJlQc{#uLd)DQ~zv>iY48 zTn0tM?VUe=e?js>iejy_i1XXlQJjR&)y#n`qNsZn#i@8*RQA7yl9y1Nh`TGv3n-2P z->Jl`{I>NIr{Q!!~e+-5iME^KdOg|?w_n>>E1M(Dv=mgu~IJDvi7jB${v?t7fM`oH>*3>Is>{@1| zA_f9>S)NKTi=-A9`vG+51VDj|!w&0`PJsW1y*Gi6s>s^LyKi^)kaSp+5TFx+ge~Ou zg|Mnz#$DWIoaG%Imr>^%gEPvw%{wzrvnsMkK%hWb#RUaqH|&H>P(fBf5fBs+WRXP? zl;!_CRrlV$9nu+QjDCFo-^{}8RGq3iwVgWW)TwhoN8oZI$#yxBIshrI51&P z8KiekyiNosC=X`df3ixth~Qb(22%zTEdJ9HP9lo&bQxC@S{Kllv*eO^=dBnXWs7Aq zlYXEEpNeF%aFtHgw%sPm;z|&xyO8xN{}@>}*1#EVdL0iLvXZQ88KjZ-8DJE`xMGKf z#8scW50L4>T;Qa~@`&ny@45T*TWKDWn45|l zf9YoRj{Eh?5@#g_5d)zlPaHegzLQvazrMZGhg5|?{5&7TcQ-`H$+#(!wmtaaGxM#4 z3CajIi2CGF-e=tZ2fY=)&;LOm&2QoV(L3<_;Q!GVPz1fGO9=mi z>JlOn-sRU1>N<QlBNTVVY^+vuVlg^4TI`Q>@`bxaN8}Rb2j%elyDten^#n z?IBgZ-JewX`~IZL&;Jw3?{6Y<{;bMh{%2Xf?9M;y>%7`)IikfQIF|aQi#Hz8AJG=3 zh@2jJXZyL)TI;#dAA0E5U)*yeRDkD3jm7C6dS-<;M_K@xd~?*GiZ@39`DQ(w@8Y}u zFZxjp#v#id)kD%aMn_)EKWNZt{g zPBN9|%d|9gVEat9DxjIEgMWAglNpVOkDeWK<2RT}Wg^W*ozxxd1+9;0`01oBAS|1s z4X2a3+O8qWq<0%r*)^K<619iqX}h1vG$D?%={?C*TJJ{L^!A))RRNpcNI!-$l{L`p z+UebRrm_aw7{xIEMFd^)JW$$;sgLWwOr8r#9nY|}+@z6D>N$MA*z5`YA^FS^@AP0I zDaJpc|5}^t6Q`cg^O@i9N&RtJw~TmFf6&MG&9nZY7s8-r&p-6LQx4IgK{@0rJV(0m zDgAm_xQuv8_j~KhXG!E7z&ip4@;rlmL4E|_oPX*~MQ$(ss*67VuIY_K6sKL}{F~5Q zud6MAfm2UC$eiuH_1{|OVPo;9lZ8p*VSnp*EoG&+caUygWJ8Td_JkE##dd0>Bm;fP z5-e@tG&rnhWetj8FFjuTxeo{`s=27M{kgss`?kOD#q>?g=%*L474N!Gad-=L_sJM- zE>pMNa5*zL4YX8u8)o-eiwwxd(sa*VVhA(%Zjx);U1AI~*v1U3H@6A$t82r^p#^jh z1`6;LCzn0U#ouBH+8}dRx-(WW1Ii0NMRcG)Vj`b4g83Sh9!WpKbiRX}S)tv2>yW|M zjsaMmxN9243_huZB;u}VD%1H2a#n?!mNSC}(U<)&7sm=Z9&iI@eP>M*J zck)J8k;Ba4z`k6e$Z2M<_1Vby-esyi2)dC(`^W zuG?%;qrYC@O%oZHb*Lq-@2_88Z)7SAmmzm1Q7-WXlQR-L6z0U9Q0Lls>{T`!K=P4h z52JHav38(QU$hwj=^iFWw+_GwJ0(tZAE3_x6JM4)P|uPkN1X@h`QZiD!&OX=V?559 zA^$;xng}KVGGbr}(5Es^y83|5nRaoI^5G^2(}Em0>4Bk?l5BTSjzY2}xbejsJz7xQ z4nRl?;{3-?Jh@z2m>M63v zU4jLg>{6l%uO_=h3j}9$p|wZ9i5#i}Z}ob*RJ60#F#pFwAK8i;Yx(zHrz@B|$>>=bE3FK1_aJpE={`36<+ZUiZwnxHDXgS=1X|~kD_CnUO%n>cxczmg4qHhehH3hyvItL3`a@uz&e$7(qj%BGRF3iQ!xZj}Jo%yWWtW|}GP8m6bGeZo}o zI?&DZX+#V0%m#Aqq#prU@GwE>bpz!6d_%_B&J=5g!4c}$%;2m+NI%h#!L}QS^TV)r zaq+wH7i}|zcurX=+`7GEakx}ojpGn{J}ZxE91R4)x-Z8}^B~0`=VZJ@Xlyz27&7|0 zN~mjdWPr!U3E>o&!vZ`9z&yLt?Gri78z3IAPKoy{gd}V0&Tvk5o})Ocof5lPf~OGq zTX)7jI|HV?Q5i>=!9!>ZpB}l3^nDLGJom{JyEBF|gGKn_&YkfZGkDDIu8^_NuF85t z<>0%98Qe$vJtaAOspaHsW)4{eKB9V|rs(yXHnnSFK0akSPv+xD?_XQ=*xWX|)`f?o zUxc2AMr2C7c;I>PQ}g1*@aOe#dOyC2Wt2v#>8mI5hU;I|mWklHRR)>ozV*tQjL^G# z^T{oPc!7*zZIc!&e{fh&_yen!uV%!YkuXukx2*v0iSMt4{s(@S3T5`WOXyE~yNU-! z>CZ5B`jJukV{~=m%}ti?()+c8qiJt2DHqzvWT`w7;nBL;;M^HB%UGMcaGNUHHL8x{)P&)4IjFL_S03NdV5X*KOU+oQSSx4Tb+Izuo2SX4o6z= zR_Zxx%{qWocyfX>DYoaVwJcEK$q5QH*Sb_{9ujXpy`H-<+B`(Ia1|c4M9~xb_3nxH zQNke^7;g|5*~E2dLb}9i`dr0IB{jjmF!vKb$fdmhd{%fDgfhhjO|O-5gz1p$_@u-; zNzY9`%LIz6+%%sRDWj3$95J+Iu0!JJmKS)!$`p4@)HDA(us?8MaWYkKG4|hqt&SBd z{yVTP?|9Wn3Qo27?}}9%TQ$?zA^#oN>RPdBQHR$|(Pco(`fe|d|0S{i8HtS^*BSpE z*B^xtjH!&-nlwhQrw!~U7LCz6QD8ki27()Go%OML!-5h0AQQOR!~#pA9LEeYag=(V zi67CUu;Gnlk)c+3jQ{)-PRCtDIqg#R++MLf+=0I z!7&y^J`lTkVh5EA?mtaX7kS3vQ7C6UD6v zJIYn5l}Z2`*@RnWfCM1puCRoZ017@LNW{|JMMOW5_yL|WWIuAM`RPZQ#*yO-^?of! zPQsJARTJ%+5X43`+U5pQ`i5Io!>c7xRYl#Qvsz>~T=IT=@dUtqBpU&@1D?{?-WKx-4791W# zXJNN83YtCWJN+hoPV$Np8F7I*^~LToz3IP(YC2DEQ`ag26(Jm>Q4@fTh#Gp#)AMqv zG*Ej1SFuzYNa}%Kcy25;24!>R>D@HoSEeo07kL}+=xwV8=@?+G^H(zdnyUU1dlu=n z6Bb#2oLQu|xDNp*G`_h}Phpj=0E9wXc0w)geKR5s8l3O+S*{bFcFa%QGq+K}H>l6Jf1as9_H^lsO*4EtnK9R7{BG86Dk z^dxzq>O|$rC{rs~+3n_#cLKa&Hb8KN*6^+$}NToU@ zWC6ajsJh?s)wpaz7Eu1aF2pGu8L1l4O-S3TD!Z+WrtEQ|ahN6-25jtL&yUFqLN6WE zQZ`!;|I0nLL-zKxtm?NAdpAAk26=3f=dqo*INCnyxZSndw)az1#K zAB{HpE)x+_gqJ2n8}-8q5DOH;LW@Qk-14z#9xVP-#m%Q1*9+T-;Tol4r|mwYSG+U0 zu-BgdtjAbPPLJUoG)9-J?6FvPs&W0W>ROrQ=%+~8;$S{t9?yjmFBb|{0BEswp+;g1 zo3O;Zgzl!7&Ycic$kgl^Vh-IR(P|8yk<6*JJ9%(1#^8hrYV9D$uHf1lBJJzKR1RRp za*~M9c1%`Af1UJ<3Y=hXuLcso6P1@#{PO1}%Yj7bKvth1mky&HL8q*ij@1Avk!EK2 zllVbzoph!{GG|vpBO(bW-VQ_tCAG}pKw|pwItV8rmK&~Ya1KmQm-ks=ygFvz$Y{zD zla6EZ5+ouLNo$~pjWbZlPNaiUnMgtzL<%AjmY565JsdMR{s|m^tqY75;<4&*R4;9i zm)JcoiNNS4YmdK6b`~zSBAu0$#}lVS#1mn3McHZD0xk_%6YoQl)EbgSB?`Ee#R>;G z#SHpsYlAk*{=QVt^wvB(WVO2QG}o5GTk!VM)v#{Xv&52ey`?J?>A1r|=9zN+>YB%$ zLi?HitzGD$WhfNML^>`~RG|jqmh&met-5-Cj>8-rmb{fTKXobs!xGf$)9H!Fe0nI# zJv&rla#_;|Ori-AV!SscT&vAQ)0>F~%`49{e0zu&P4k zPee_LgjTH)NYz79%X3I#M{+1}!-X$|AD*BxPt79{gaa2M2#@P{=ZJlzI)Kgu6Iz8~ zZ=Tf3Gv@hj(nT=akRlwhmx~{#TQu$!8wH^B{R%KP#Wo_SxNNgM2ymyDi0344= z8xPQeZ#>u1%Ov8^_W%kbx&bu=;(S8=wzfHk&5R>?VXxE;zpKYqt9j^4M-QeZ2)+ix zZ|?YVSubC)H5RzU2a!%xWXI}`B3U>G<0D%US)2@e7F4BP)+YHeBA{7S!SKFXR!;ao zUpm#Ya>90>|NW&?Eh{HX%VKL1|IMXSEh`7B^FLiW|M|*U%y*@}e`34tjsq#5m@6Jx z4p&%kR3nz_1L>$HxKi&T?q8v|qQ4@Tn806=PmEu#=ZVEDl)oZC+|s&FF6!usD$WM+ zV*|`)o@UBqNQC40<0yXg=8sW`zPBw`j9aNcr(8<%IUoH;iVmxw4}hzjdspc#wbvVp zA*=LXDv+8s$T15f>ur4nMbcew>-CBtBBp$z7)fb8CmMke0M8j-WX0p)B##Mi?*wY~322j*3M3JMeRcZ|isTru_cq9ep^X^d5OfKcVf66Q8}S z-%nxu`uAWs#cDOncEy}J5HEuGj{Ue8`=0*4S}(7tw^nbI@!i03kAyM@ty{x4LuJ>l z)vxpVC&6-AYTc27h#~8M;rR?PZynSFct0^C>GIlT-QU+A@CGl{!MtvZewBX--gt_Ptr%ul z<;>Uu^#!d~cj!0q@1;BRfAR}QYHhqbMABCE%tPO*U!TywbUBT8%6e_pcWL5=EqYg1 zU9iWEstbS1y6|<^g+EzWV*e5EDnp>VKGOH9^-4>1xukE|uJ5CLZ@Z86za`QK>O#LS zUhMfG)KE0ttuN&4@7=BU=YIS19_1KHdjHD*RR1ljVytekXWSjR-$F@?RWva#)J`jJ zA!Z)cuM%B8gLkPZSd54Ch6%kP=wmC1W#3?uyZ+2*t9@Hj=qE8cFmbr;q+YLqTx3_* zz`6IDtQIB@5D;V(GZ;7YNDtLxxFv8FG6|)Q<%a610M@jp0qf<%(M^kZY}3JeA;=+a z#Or(Y>$IIU#fiOe9fboPs%%D=41ad z5FZzKApS8jvZw@_SYP0X!qQsluI51XglgU ztI<0$^mz5G#vhCtM>7K_pnEuqyi#{?w>l)KXk_50>J4YAIS1+~1nu$M3DK366C%{9B}F-j6|ge(-*|Z4$pV0N`v3&Y1*L( zX19K)R}&ZWgZF`)(uM6nfGo>AKu;jkUaF$&6oa&m>>cQ{I6MDKfxS@mJBPZ~Z zvs&b>YQZmKe>AH%J4Iq@aRU1-PGC;lCB+HMjV#CN+bGpCoMPucu^i{sa;7^iTwTkt zT1d={A7kWxC}yd(Ap9PVVAi=-b&;4KikT$KGb5N?LaU8@C;Y41+|wn-cFy^!$LylS zunt49IoB)HEDASSQ^M@)Lw^Da_iyThM*KgZ4|@B@nCNQRwo88u%zp48AvHfcvz_zd z64U%BCCUu7@F?Svn?+$4AYc?7ddhda-@0dm7xxI2klYIauK+%q@)6jwbLwdAOB(iTPN$fcum zlE>Dkk%_(3j;#ixFmk=?I28EiQJ2(aT^Jd;OJ}pnvtjimi`nuY1GB15g^RiZlc$zk zZENA$!aDD(Z?(m|-G29CZ@0y?n?dQ01RUgc-dtT7*Z#Vm_p_LC5}i`S0aI1$@nWR!L!M;-k0C;k)%|3y(1 zDCn*h9~V)znd5AX6#b{zxEHnXhDC(@>RWi#MeD{zG$hqW>wYLFEDzWDKgO=8ii%v+ zVv8JM@1!}4t@@6zA3AdK-g;kT`w8&v3vUoDpi)@`EXGz>Q#88R>9`%P{H)_yLoA>C3dE zCmn|HNr;t(m9S;%hvLx0%X7uZ8KI1;6A6unL;-V?ssO)hn2ZSq0p$G7~R; zSUaYNPut{&QPeXM#i1FY>zcl&D!>aCnJV!}RFH`nL;O;}cgzg6^bv~zGede_B7(G` zYS~!jh=`ptLtWZ!R~Wc!$Lyd|^P`G6bW0njp0Fp1N8bwFp-qez8{P`l=lAeip(EN` z4aCl}kXdKVD|oviU9%#dj5$yJC5(BY`^tVlCp65f9ZwV|=Z2c|oA*}83>@dRNw(_Gu_t<>Qnd`GZ^<8KDo z!XjPPx>wf9c$^L96UH6n)Aj};Ly67=NVC-hsno&BI_A*f$9_DOg2NAn=ajxaw#t@~ zK^LK8T=6+Slg%Lm-v0Zl_?#)nm_{ega3*p=Y|ijWpEu1F&<%0OoM>!0PE0aJYJ;x? zhI0ea;Pb2qoX>Q@$slTgLl7YsNSqr4LCfMoXHn&a47B6!MJR$D$qeqRsm!aWCaPRfT81R;N6wP!0%uX zX5hPu7$6{990K5R)Z-t`OOth^p$@+4$8rb)!(_(7;%GC39>$4ASquvOxKV^bnOB7!$2<7q#+OY>(WqHqu+mZ_hl)bqy^sqN&`DS<%%5e5mTfc|? zAQ=6&!5KOZb$i8u!wR|b{q}acc|SqiZgA}Flo(?-Rp!1_)|tvW`Cc6yFX&mE%&(|T_KEH@-vT3|n3 zu$x4;rJ?+k*Z0BqI`9g-5EOr38oJp|@G;?hdFWbEzdZEUGz(1QgL!03EDzlru#1|1 zgmVWA{8_PMMd)EZ^s?RUJhU?OR^k`UW%SLJV(O~U@5P{1p-k^hQkr@1L=(dZjy`}i7ZBZV9|E=oNMa}g<0L7MdDsC4Z0QwEG zLI2H8poBLDArTII=mg!J{wC8wU*)25!OvkjLq@>Ow;O&X(`8JD==5z&NBB+bmT**o z6U=CU3~U#7MWut0ei_oSUEJw!F`e+(GVb)vOsAu1_zricf6jD9fGDuj8E+j=^-nT` z;VN3%87h6?b4X`22Sn0wSM)N|>meQfz~M#P8M%c_2RY{v>4x9Tbh_Q{91VY(_z_#%#*aARl2&S_( z46HkS64U8D0R!dk$D2%Nj64jKJH3qQ99WE#yPkKLUN49kLFl+UV>dIn1Q_ARopFL0 z4Us{AW1Hax2TZA)ilM`hQ6CwW>vAV!Dl@nUEZ5~u#wKQPGIm>T(4CwE%;B_JzRR7A zbIf2r_M>%o2TPwv23(g1M&qrojna4~5?c8)k7Ueb28Z>inmyeqvY0ts;tbW|Zr~$k zaKh=su2;I4IH6-btot1@PHsalfm%@JpY)UYjfiv zB2DWWd>Vu3FPYXiSJH1kqbn-^DZx1LNPa=x7ICO3!A$5O->T!OBSL$Zu#N(4ln)+| zy!2Y(l?-x%n0W1FEyHo$3F^KSnk6x%Z_9E@W(5HNTUA{HcldrEI`zX{K-VR3eXxc*H@pVJ*ED`uH zbg!7UF%%|T;U?rOxF52+3JUrb|L6`9-F(3i>2O zbS*V3vzVHRR1zBp_Fbm3;w^62-ArX9F47+d_DiNRdK!rjQ$voM8w~qN<{}_^U|3DG zhzIT1rCy{DSd4UrECV?nR#QCmK`5J11iJjKl?=Lf@84QAOMbm2R|y>r{mWG%p4ky< zLVnuZ+`6v!fa0fb*%|t^x6IrgdefWyGD3#(a2{7j6fG*OEo$rtW&H8w@89+W-mee; zPH^J_hAZ-S0(M-Y>u+oYY=%fa_#$vdk-uvM(}HQPzte+(V8HqNU!(u(uFw_Qf`Hh! zD|98lO+N`0rtKc`p2uu#evJ=2Oo;nF2^El+g9|O-Dx;W<`Xtne;2(Sv`Z>SNc85C9 z%fbD-LoKxp+2XcOn%B;?#tfhJpyRE^f)cSMODD^*>i|w|yRZm+52QDv<6vI`0epuMEuwVus+O z`u5`5ei>V0>%P!k(xD`XlB6LX0ZewkM6ve(x{pcE{WA2C_lWrZ%TULh3uF1xi=_(ZD{ea&s+YpI@KkXidaro& zV5srGS!Bz>(AV1QLGkXP(B#DTYUQQA)+1LFz3$7eD@qTC{)e7g_H=89@VI zhQ;3bs!mz(L};k@-314w>Fk1wQqQjYA3>-=YfQ?Dpirg&*~iY5{{Au*${-HZ-HgE|a{3?K%#}pWT=T z5YIqI%_SkZ=g|xaM8=(wDBU5CwuTAM06#oj-R*zL z3^K`N(cK7~XGS(Mc*43%j9!lnN;y1a!PGllnaK=_A3QtV8B5nMhipJOfSkBHXA_H% zc_$0)ZsdSnm&HLljeN@t3UP{qjk2Fqrh4wZVf>5ary--inL z{qy$##CP8J0L1sh?*TZyQJMctXn;2z5w3k;kuYOmo)F-A?AegPz}B12;$XwK#<`Fc z;2Ked)EQWE4)kkQqImvXXn-~>Pc%9odLApRY|i=6|9XAfC#)7lUZXH$-uTrX>A)0< z51)Ao$q##tj=oRuW2)C^n6YmH^5b|Z5TENcpP9H?eC#!Hd}omV9e#w5Air3uGjR_Q z*gW#^=t4INNJ>~d!Cd=B-2gTfzYO#;FKwmKzzW>K^_9sk-+gI$}g;lK0kWuCy44CSlPhm~?YrHsIIsL0?j^R>Uoz|C>O z`=^@q>Y!0lP}GGGxfmJ#sx9t$GPQn~q!Nb=SV0IxK1v7>7AYZ6p$#P(+#CUx01x5t z1WAq~mG?oEOK@tGz|!3;iNeuBSz5Y*X1wZP0^>nL3(OhB0LY=p43d-b7F?m>+9%bQ z0u>sNr!EU!RO8&0qfzc@r$O;0G0vnfPW)=71=?v6ut+r5j9-wHg*Br%{0!ZJlaw(G zGWHYYE=hg{GJ~{i5i&qaoQ$LMkiorKjttNxC*$e)$RL%Y>o$ZHbutDqgSwp!6*69* z&j_WBkaMa+&KeeB)H6vLWL+3K75|VV^8@Bnjwf+MjL`&#Y<|HU>UkKHSLS$75~rlq zubvB#Ph{wF{AgGe1%&htE_*(f5UhKGU4u=Mr!yxNIm^)X0a=kAE@TF%Qs6mPx7RWe zw*ck@K##0JXtWa{`_ew@I8#>=T z(v*t{%Z?k48H=Zdi-!J|=l zo(-G?TjirKTI}J#*jD1U`>&{-OKuel(+L2NxRq*`l2i}(dlQ8j=v<3V(0V-G>MA-- zJJ#0dN~dYN1D(6lY1+_hi@VZkTHqRd*VPo>cF2dbw1)A9`)5`v;)HEzifS&4=zeHO-k4LP%{`$tEOSfwh!uSjS;lJva{aa&v0kl*}M{t#R zeGTk0V2q#LP2Y{^Gqw|tq)Jd+Qm8gVJocXKDLMtGw^}O?r0eiwt-UWl(@h0P_VSN` z-TuPAFjlU=K+Y84UzVAk>*Nr7I(d~$sBm--$`YKqP*Z}@0OgZ})EaL&#hg56V!KJ= z$ezlfwMJD=ndK;bc&Qydf)p7QVP}H^2Yu$t%#m6f>g}+EM2mFenyf=3yLEyCcGBQ6 z;fJtBB<@HR1JaEml?^r3h1r|ajm|0?<9K0qLBQyuvN72gX7>shSE_7u;==5Y0!9ZP zk*JelbV=ATQg%w*nPJGV@GoT;*O7I&r>4ukAMl}t2b7qIo1z02Tcr7EnB|Hl%gEtm9pdw9H^pEO*IE z$Ot&nUMVgxq!HW7QB7t_%{!{z%yQ`riNJEARXvQwr@FYYo>AEJ12*gA0e>9EGF-x5 zW>7B-W%0Ak1R^6Cagu=*=0v@=I6qF0_r9epT|V6n(9BA2=2hrgHq9u&vSw^I3{T`{ zUIoN;f&8nRc@_26RRBXS>vV4BuT`OR9S{t11JWY%J7P-n7b_Tr#z6*FVEKKNSxqZ& zE~6Cj_WiaF%^THZdjCBr$lwtbZtGuUI!Pc#$$eWto#|8wLymYRPndmLH4>Riq02=y zp+{yTPR{Xq#+_PkP28Gk)D14*QBK+mRnoRJ?C1;}>M-W=CARZ1`Ae^YniCBL*4qtr zKtVOC00j#(K(+8Cc93;_ERJOw^&0hxt_nBY0D>SU#Q<}M0(vRViY>2sjtN$~ zAf#S73X&pAAaofkfv0f_JQ&BT+cmd58H9PQ2RuhF+ugwUgT{KV3mTK;QFXGh zJmhc|N$U=VdG{kMMx4kPU)YEc2=tyS*5(?Q@sEu?I|N11&x;a8PM%76_~%9WHTxgv zQtZJ3H9f67gAR0oM}N`C-&z`Z4E?6CzL=k9wAcDH7ANwIziAue#lwx!t1XFQTw|j( zIn|!LQvl1mt+8=sqtkWsG;4}S`8ZE7w<*xZ@RC3cRV}u6(0jmo1~pDXN@; zR=#(qklC-?$85T6SZiL$6h%EVLwD}6@1`8A5{Y$oRB8^tX?NJJfw{kA}HAr&Rq zg_fqo>=}oxhwB+HkfiFmZWH5rb_7dA8`;Aj2Q7An;Psjgz|p zEV1OV<00#&HSu`-e*CZEf1;9nq(pLEM#;ZeL==CyxydRj*%txVxU_;{{Ob=aZ4KcM zVt~@FQBOoBUDZW4mU)4|blKSS}$UQ?e{u`|Al>kL+r>YzBsPf+l|7%xJ1D%oPKh84uNv*Zh8| zI_h0lq}^!LwUek5LXv)?QOHGjFR~~kKipgi&(AeC)-(O?7RKfLj%#5&#czX_#?}1Z z-_p2^-?ElSpO_U3^C~svn@O|;(cCovaQ9EH<3N~=6Ca!E{1bqiy{B3l0 zgKdaIPeGfs(wzFjcAOIYt?al(MxoIrX<`mk!&n$TF@ZH(P1L4b;dZ_^{4bF!!67?t!s;=_g$V4=4s)%u6~-|tNHvC@~*}jCNsiDAnwyf z9)FP&DRE~Pp zZVelOWmQw6;ppPbuqG>p-WBH?PBrI9#4kTv#WGrG#XO9v6W9R6Iw1*+ir09Q0)sDQqq(N&M zIT+GP2%@;V5nt_ZpCy8`o2Ii=uP@Vr&3G$Jy(rcuRz5jA+L$zYJkRrJ(9@kKJ5&@5 z+9eJS)*FC6$jDm|!di7i$T61Fx|kpeh)zf)Ar>I_VI*J_ctC7!C+?A?+h&Rk=p~in z0GGj+tZMC`a5Q!CQ6r=dH@oIvC+2x9of2;;KsQ{KgIvi(79$!UTqWj_FK2!h51xz> z7IA`EA;IFfh0PRm$E!F)@%ls*=|*OQv*W>>ry^97)Te`~tWOe*=L#iMH$0#l#Tu;5 z$LdD?@bNJKl@CG^l+X&X7s`p|+EtbXdrREfL^KVF<`EWFp;sbjdC4r3RbK4SuKw?!`23Zy)e*(A^bu%H8*i7dltL6Q8*g!c6k${9Z-<#n-f zZK#k8w=|Dke~=Yo=F}CuW39QF>709Y1@EMfID~XwPN^$+C;dgHyKdQ?jF*|g2A;*5 zpOqD{6rIeBFt4D27_ZEnBJ-KUizDm$-N|^58L7yyuHT)EZOq^`7q8!O$>wD2wX33; zo4bvZ%&0?7jHYgGGu(lPkweq%-4!xkWCqL&q|K|l#2d`8FWKA~Wz0y%br$Z=9F&$Z zkrn|^haAmzWvsWL?VESnH`guaJVae%`BF+PlY5Iy)sSQgN53Rfl1L?hNRgovd-7Tb z-PEa(Sly&`O(#X4-L#pwC8Kp*{=30EKAHp5{+M|WZ)Ln@u!O=i4ttF+)g2Ms~yce&)6Ab8wF%?{g3g2lqKwikz_H23 z6wkLa#?tU<<{fS7=8R7zR|FM*N6#%74M-rGxgJE%8yKHjmU|+U?-eU9$EG@xA&y>d z)Q#H&3g{8u%Mg;L^%cfH$+hMV)SHT}R~Y+6{|?44^R{2FI(rB|{=?4x^J4pn`z_bK zmFj1P>gOP+oqRMYfmP+=D~ZV#<{)fP*m%S2S9aViX9l-Axp{ZS z+sq(sc)3Exdv?YmWPFktscM5=6|bSkXE6iwon$6nQzLA(wv`~<76tOsJ6ZAWi3G7A z_7Z{{lY1HW;ueU!7UWEsUlYKx|FJS7H{E>>BC`fcgK)t<$jXm1#ji{wEnLc6w!Rpc ze_zASj$CGsBLKEC7CCpbRXlPDJ=xBmfeL!63P7HddAE|vV+OJx-;J7ch-B1;PEL8I zzTcZpC4E3fB(`>h83d(==Ayw>2qXo=z}v4f`g48ly2{AB^<*p58KAZ)BbY)S1HS_> zR?P_5IXTElvT|VZVCP_u^HB8+YcHh)wgJluzbN>wI8Xbyx#;#?akl7twQ+;DiCBNN z(V+Irsjz7!8v{X!uZ@CGRgApG_=>0;yT|n{td>@DVaZf10?fBxnk4}#)GyP&Y}LdCG#9H=SE|wwq8Z!OQb%~6PSSz zJKYQ!TyMtB#!FhC0Tn<6-l|yZCMOL4fO)`fz)5iVFN{o_2o}Bn`|U<{lcBY8xmGBjTMHKxC3RJS zo>CWIfXLWlV@gpA@%imWi52$`4_M9L$hd!Z{n9whXn!~T%8<_<^k3t89NNZ+9lris%AHR^c(2(v@3n7*$#t7?;5X`JW9K}Rhp@Pw6ZNAboDooa}FUlcc>y=`ud4!PRW zB(W^9L%nRryf)J|ug$4G^V-@0)!;!c0FP33S2CJ^mJw!FZT*Yq~KMJpF{^AYG-)W1r`biQNCr7Y8)1mlRB;FYg7(oK ziR?SUTwj>|g?0+LR7^VEgP<7IJsioH5Y;^#u?`&d-hqR#QsJ5c2=1V8+a%!#C8Kxy zQcn3~plfR=00EO5-0^9-T9|Sv5)yNvXy*rAkcy6=(jiiP?WIlxyi6W#Ezl40XBY*g zt&m#7T!63?>M)|(rm@4`<|8jIosg+(g5O{<=k7}PG;)!=)%Fkm2jNP|*x9e&~i zn>sg)Lfb-~<@3B;`yR8!H9#rP$07HcOT#7R-95}??yp<)Vi-ls`8%}l=u+yRK$=4O~q`}$95G14?>a>3T1PXA+nK^$U$sRvy18UE2^u^c>rM;9G6}!ri>} zD?X@U(6OW$h#p&@qsNO6t^pXbZ=Nx zL=N+={jHjaTkkgR%aKfEI(Kv+m`WxRzY~Le0}gI){oO`p8yg}A5Q!E;X9cYzLCeysfxF_{&6RvQaRgdMSLvz-uRyJ5oP^D;A6Z-|Kby3(I=OvD) zW4X<<#3K*DVg`SV?hgGCz8kw6&Gb7nkb1bi4$F|$_l zwpOLG{KnrKMd7F4#0xbz9SFPzwKCU=dG2+UBCY7>G_X=PO+hNBr5t?OOLpp@*%mBy z7f$LL!X^WjiVM8KQ}vD@EYs*<5?QrMNe_ zxE@~;9=qRYB+V@~a5+Evs!7H&N;&4k!{m6;>vp4dgRg4FEF z%*5z{i16~ZoyvlLh5-QCq@wOd z=N}y<--BRf*C&db@Wms(kq;U(q?1b=Hy&DQ$n%Gy6^W?0yM(Hscrl~I_}LXChc=jH zqoBY@P{^+ZR#ON}v~M-#FXlj!g!<#-M?p&l(HDdIV8w9NBmWqVie*=g#>BW7B**7XUnJ4+mSON z%gHepG9wuoA0uN&W+Y>kU4q+trYmC|GbpC+M8*hN6;P9|!c3afDg?LM#diTJe7=?o z%UyQXN62zvY3^f&t$T3~#z|&Sq$XK%XY`whj8tSm=77S)?yotN={UA%QHFHUV{x0z z)(b}=F-j>CmvYYMO(H8=>Xq+nfIBV(yn%^cT*Neb(#RHtPZ&2;keK>CVf-rZ=)4sk zvz0kxIS#;ch4TCWbC?9x1zAX3geQr!PZ&XOnrQf>alMp`sLQwRT*VVl8hRJ5FdpCt zkj-P8uSCc`%2y)hw0&rxmN|h9oJ9i|V|viS;TNgpizkg&Y^5SzQ-WNPgTwmZYf7a@ z-1fi5!2ByXK?T|bynZt^w1hwTG+#|uQeYGe&XU9n1KWheyuTSkyjO_p{tinJkt+W9 zcjKQz>ucm^9f=}2V9`x*U*ufMuIy_}_lm<$!E_Wa=V!iPJj++A>9%CZ`?|;*Y6U0$M=WT!RVS|eShPBNyTn>)@a_4IxbEW$OcsIlBXrpLe~%hNW8lWP5(IbC1^Q>BMLpzV8I+Ecew@CXltWU&KIrE%R zqJ3La{Bej;z+m!_CuA^roQ=ymwXYaoe%TP1OUl(wJ_aHm@9}`5TIpU~m*G5UG0a%1 zy%H3Mh8Zu~PoKT&>GLbk8^7eDI`h17Rmv;i5H;GtrHm7W!;Btc(QueAy($Y9@sAGT zm(Lqb#S0^h8dcPj^r~HtI5ot`*G6WDhNZ?`wC36kZ5zk#=~6sWK>D##=tMCIe;;c6 zhJSxB)VRF{^&)ul;Uo3fAcl5qUq?)Trd^=I@aNWTFNc56NF!H#dv&`;d@!7OO}nNQ z;JRJY?iwmEhF{apelU#juFa{DQV#5hFjtDtM@FW6{DvQvxuH+obg)a~uzD~o4=s6N z$AyPkqo8P&)#QU=S}sB0fEu#|7cw*{v>Ssojg~Bp2Imy)VLqe)*L*n>hu-@kNk#rk zu?maGla?Hh|G*L@-XA9k7o>K1bm5z*%qu9zgIp0UkZJZ5Ru|CEN?B52%R3KQ4#%@q zPX4mX@hVv6gBYp&u(EB501!0^1iKiIhjuY`O&hX5|zoXQb1#?VPNi+5~FQ!Le%a55(dUC>V4It&?i@JF+@>8_1fu*9AI|E zWiiA<=B?)J7k|Cen7_jO`D|W#O3Hbk%g)z_4NvntYT@`_3T@z8_<@pJK8CYY8PG?l z?9@Cc`J|0toLM9fETqGq1c7m>=T?wF+X2}ZEx_Wgt0(YD66Jj#6*fV9Kv4Zu*!aLl z@d$*0B<7u(iiDu2tBYH`eTQ93fVD`yNK`FhSq&<= zwPae?^WHvmkz-*E-Ax2N+*6rw^>(8HqLG_z)H&S&2 z#{tw`NnKG=*W`Z&<76ZM$W5Zo2!oUow#Fft#9@$JDimED1}JQzIsgk`OJNh$0cp0O zdWqpgH3#y69zcW2#01m<1`jmTP-91}1JYXf3Odj)Pn)hD3@AsR8laTkco9eHi2EkL zTmqhs@(B&*9jqGr0=wf>ai@ltD7f#%3s>kXz}+At32kufNWA3rQUVS~tV^s+n4};% zF;`l=`{`v!=HbyK@j@2V;U#7=^c1LoDpGu?56MfCn+y55DRRptsp=EE<3%*NDz@+o zR|AP$5VDZ06e|fQ^qFLsq$p^s#ds3Ycy)2b3}8X7&Wmd@sDA>})8$=x7Eyw3H?7g6ZVte)|ama={@l8|9aM;XCuCTR3;l?QPev%!nCX?@%Icpjye*glxR zWy5+|LzktYCIJ+6vjBKMboNAB>1ibRf>DPIQXA8BL{G!K}c7+wr_9!0U?(Xes{*De?FkzT)Y+ExK5A>6<@DwM;^Vieb z^K8Gaoor65SHG^{#ISPUJs=KdP8C4U_XQ}Gpq>KH_kFvH@+aGc$V*J@)V`s-3;{!C zU54P8PqbNwRP|D!I#>rk`4kWW&XsMC=~t{?6zhN`nQZfX^bO=mnGSK<)Bb8Um5K5`i@|s7P+5)N8 zeX>e@aW+z$Ar%LtWu^naT1;$$L?yiXXrv4L}}RO{MSRXfd2<&Cj} z!g@QEPvV`_V@#!25p338xMY#o4xEd`R!F3g#S39&)8sYh*~ydLHGFQTPIadad&{bV zHVIB^OPR{PVaHmnN$DLc1a|r#wv_F|PJv#(nR2`kDQP&2VIrndP85oFUp8)VR49(` z1Fj9U6Ne6H7*EsjeZb`rrCV9NTqyy#Lfj=zGlNGBPZ`DX7tM zn7Noapw@EDx=|m=J`oA7QFmw8umt_jSj*HIw;jx&{~2qgIvK~9L9|Aos)bVXV|v6B zi`&#na{L{L&tHW$e7q(CuNj%C5m$U5^le@CiPHA`u%H0^Y$lONy-E1MEOv} zS!COf`yf;J>f70Wlr9#*)TnH+@-?HRwbcX_#qy}ZG4&WuoTPTXzhW66**+pT*=X{2 zla1zCktVG=?Iy*9$?B27(#ghk;jd1th>#siiR?9pevMR{>^P}!Fx4hIPU>o=+GNK` zJ_>^P}|zCo%@cBq_IWM>+aNp@B!9W-9=F~uf3PVvJ`waJd9+xD7cP9oJNJ5K6q zrdnjjsrD!nEwUpMCD|GAEmCc=<1|)gr;_YA)qZ5BlI%FC-`lAqJ5K7@Q>fP>JBRF^ zl`+vKI}^j|p22JGwUbG9oEnCnwtz`?oYW;LeZs%ge}MN%7OnfYyGAic5HTbxBii(9_p_=PmN<+&I2VgyiMv48AumI1T}R|T zv2J;YRe4^(}BO&E8dX=pK>j)K|!0k@`D6;~#5e8%; z9BdE^l!1qgPH=P2;Q(<=K>$)@fy8pBK7<9_fd>k#0;%+sF5Rh*C5StI0q2m-M%<~t zL68P6%pe`Ahuf=}!w01m9%z5UbSehGJGdWcTYh-u1MLkhE_k3F3J#URFDvcwtyzj!_cO`s0FN4jy>IMZlCfM&VtPm@7^AqfB%F z4j&x}mifM4H3mI6Yz(kXM)ELsCKKX%E6-KAklCRR1Ek+nhdq!H?dHPu0jz9(GZz+Y zu!#9n?&bBuFZ(r3y^P*~B}RGKudX7>+!3_Aij3DA}x18RY8_~3^BI^5MmtO$EAlq-ge{Fx(H3>^70 zJjMV{oux3yvl%y56!eNv5B~)7!#@k~GpEGdx~p9EfTy+JlrOMld$r9{;>`-wl|xm>Pwl|Cx@bg>p&Ux73ik%qDu?|< zNxi5>Q?dcvwe*mg*m4*Q&=2k^%{qy+Z0C|fk&IN}ZO z@xjImy2h1oAjfqZgunq~l0^JJj*={6?BGuyvk+j1a&RvRj8iGH&SgnFx20iD9-KX2g#8b4xRnSnXow9U zbyqSc94E8JI9aZS$HvDm^+-mn0LncE7@#B zyiu8!3(pX!q~!OxG^EjjDtOhEJ^q5KF=^7|3E$Fxl$brk)TSmw5t@W40WUzsS&)h| zYQpHC8_H6QDzsi|w_+c1<3Pj3U6~+WT?p?~FX-aKg~mhLi@LaG5iayWLuWqTwRR%H zKS1TUqgYH>WYkVsvkJtKIu4NhrHhQFfqqQji?sp}_`u1A;^ZPD_XfH~!8?%rymTpZ1Iyp)PgXm&=z) z_J!|JMP==!rp_hx$et>~cqnY+%t0_XOAs3-6*LhIi(2F~P5^npcwx0rG3g7Y@G!$% z1XHfB4~rx&IgxQs^L+99mkS#5O>Qy#82E$9#Tu9{dRYKruwcOKI95$Mdvr$ zl>|QKB>0>8x=?>6e_cn1=knLB?R)|C>o-)tfhKi^F&sYafst2ICTZ^{$xJIxJ2On> zlIj<o%EM!3P#!D=ng$|`_rUNjkOJa^L{G8SA2OA>28we@n-bJ*0gq!+QD3G_ zqJ05HMUe&{5?Bqqc|cqqNz+J@Ao<5j#iCz52LZ|GI|YO+*PM(`U^8?-=AoJR^<}Y` zw%E8=o7O-CmKY!7TXuMf(ax*wgxSrywprrJa*Kl9QLZT1txrZ#uohxnxzVQ9@_82$ zuRwPYuLa9Myk=h<@e*g2;hJ<(hUhh@RjqoHGIG6`Y#3TXCjs|Xq>KS%-o4y-Kzl1y zyuIA`Km4{{fj2q$&b&u&EHE{XhC`j#ZHmuJnY6etmx5oHY!H0Ql zq=1_X+Agp<*t9$waFm*T$GrnXpZC{z0t;G*f4pPdais&Txu9w33%#ownw5awdrU1V zS=4>kC~UF;HQLnzkk&gx!33ky}ni(kSoAcmmK6nrEmMnAQ^SU*&Bx z=FAh=U8sSAz;8@fFFmo~wR8(#CND;PrZ21tN0-8}?}3A44oE)4T+8t(@AdObz{|sk zNB+VkC!V&WDcSvm3N_j6GOF5Md^OuO!Rg?y;gs}z?u$x zSJBxj;Nv6gs4^%59!U9Jj+1_u9UR#Tk9X7~ogYWWgEorrVf`9TE{Zn_=b{p-&t-p# zDAVWS1qb3E%G1z8sj&S!bkuBydkJPDiGeU3$wzwsjdhrxockI%kt9j0N_9a1`n7! z_1n6tMk=HbDInp7pC~2Bt7_mv20aQF6qGmB7E0iQlg@NV=Dn_jmR19dIRdc=FUv3~ zG6Ul%PXS*1VydZ3!K$`ytRKXUHM_$p06)wRtriPx-vw-;AAd zT+G~OZGc=%u3XJ7Sc!cEcG+>`>XwzPp4cVy7Ht|?tG|hR@x(4MPl zPtRK0+QNO?_OgCcpF6VlTqSG91uJonz;exC1?;)4O|8sGg%yBY%Or}%#H`jMB);Wt ze8&yxJ+b$^_s6xj@cnex{K?BFjhj6@LgbyXcEL(iBCw?Kl~Kr;C89`t6!ujV>GCNl zybJs6J|_;pI{%$XE5EZTOwW(cetmAw+O^L|(09%#H?YJ%0vzj%id`hC15syGRb^xk zcDsA<@tNUgP8~e6dVqb(_IYto??sE2EPSJq9=L&J4>gBAM)u&Sy9eTp zy%Wox-n_V{-Gi@s_FuT=c+b%vN0z)Z2X0{5g9tF!d}V8>iXyHZ5H$s{i&$Hr=R!s1 z&wp$T%-ZqF^!@95pV()wp;w>zZvB^A`)!JgkQ)d8mt4RS{|IobQ>uz0E`k%a2dXF{ zckl!Yee!8ps}{}LK6Sy^r<+?lc;E9qXN`F2{Cl$_3&`2QE?9|u1UA+Vj#(mV`9xt~ zMG-|WUD#(&o%`*wcV3&>udls&cFi2Hbw=6o0e`Dx^xeP`{|Iob(XXONtkJKch&-#x zUHE4WoV)G2Qy&~CZ)T1DoPNib_g?(%3$DfEjJ^w2VjqExbymeL;X*#@oQ+*V;=aL+ zd%wNA`Y(UF?1e`y+&_5#biWbf=MMRw$k02uyI>{m5!hI`$1V{I_t+)my4mf*J$vah zgU-CTXWFXg?R7Kj)e|qiGI;fwt0KrdyVeaXv5x@9S~pb`aiJfz?yD#w@jvRqKWp8l zaeYq@pI2(1yQQaB4;(%J;{&f(vTI$i68i{jtX&(kMC@H#MG?7jdM{m5!hI`$1V{I_t+&AwRGX0y=&bo8-|=&zJIK}>bH#g zux!+v{>KU<$UCdv4J@&b0LNPORTOcdAGPYMC?a`p)v-)Nt;$G$&z zVB6wv4{oc3S8xMM{3F1zc!es8xOjyq{HrJ;rK$}s{IkZLd415zPsfeC%UbvQ$1dD) za$otEcSnZbS@$kjiG2h%*4l|(!Zr9&>ppe~#c8^5&mJ~w<-*yco}IA49{a857N0mh z=jiH>Dj9n>u*5zB9Bb^WDB>FXC_XKA5sObd>h3`4inq6H8ZowXzukf5+h%+)e8X$| zJ48m`S^REb*?|afti@kN5!d)fEuJch$O-7VI6^eDKb`RM_VC};V&fhGPC;8^>&iXyT0Z|ox0{@v~Fz=oHe>;L@g-wu1tKD@r3)MwL#&t5z9 z%StA|4J?>0V#xCJPKI-s_T|!YFH|{HD?|bv>K7+^o)xv$$J9|&}|N7klOCqGx!QBNbagV^p zB0Vun#3nse6p>qZf`$F~W6&^6`)KdXBYP+9v=`2R8H>I@xP9TvBO=&4J9o7USfU>R zjz#!m7m30@ittxeMlPKh?%_YWtM9^jLk180lQsPFKkYl^bgvH&=2o(FT(A=V2yCpS z6T3vLr4ze^#J${&`|RgFePuxJ7uJul$jdtYsgwMAWj0I&rHgBC+4? z!ajTa>ZPZre>VK^NPFbx_uIMmP@m)s8l){O%ki(pn!#5MR)_*YRxZrh_4 z{&L%X@yb_UZS6h75msJ)bI-H|=X)(YT?xay+664pj{wIyaH}ZdI&h=VucC+)R(dXV z(fdWmxAq-6>GQ81vKG(r)2GG`K0N!Q%2ZP>Sc!cEHrB$AUBWf?QS?4`2_>Yvai7}% z^GUDGn)$`e7VeX04W7JW?$Ps=3F$6aiF*V#7Vfc2#KJvx2}SK)xM#2Ld#u-{Lk9+Y zZIk<6GtM2K_L}ImzLIt02A0@IfMczjDvHEfH&qmo>!#d=f7bN*ANK9}f>?REHTF;M z|K`ZogGZlt-I_aRtqWFSAAyZE_OVOE8vEEK6v1@kesI$E*)M)`ba0V{`+F~*S@7YA zBLlWZhTg&51uJonz;fg(<8fk_a1DIanvY#Vj{9ym?t6|+?R9$0`;&?-+?OnxvFn=w z-@NLNP)i4Q7p%lR0vl`GW0#0E?y*bAaX;$D{mYYMx4in^=R*oC+=nmzddPrf=MI%c zI2;Fe7p%lR0vqd~idiD|K~+T&iG68#gi>aom^%DGzmac!{*Aq3`yUuEV#On2xfhGPCV2*udS6EdPaSeVHrLUrhqBw5+zg<0W&Z3w8Kla`OFv==xAD?+AJpl#? zB_zO1KnX~I$jnO+R9@7ztOeUz7Iod?x^Z_EMfcnNTqg(u(vfnhN>fmgq9~{!!3KyZ z2x0>PMMY7mBG~vp&$(}#kYI_+fARP2_etJ4_uPBW?d_cBlrM1=MMm$~FmSUP``Jrg zw|C|DGwb?ynX8*|ju6Gy@ss2~LX=bAgR;Urzx=Omcz@gU*$1E6;M9Nrdlo zRU2eKv&io;SGPf~K1xytO4=YFDUS4@3V#W2C2Zr-duMs?k%+8EBopeOv`y#60PwEBg&hCb?SGgp4J;>BSTADLXQin@Qp$1Ku& z%+=NX5u#LA_eY2#qqlsSZ}wTUbi%{K_Rf3jbEo$&UNGpXcgG*NyQ+&FKeNd1F;_Qw zj}WE0>OVph8NE~d@~?gQ&i&i^_W$Y|NB(hr7reW*-@0ATd!5Ifef-QKzsFpi{6~o5 zlRs(jRv*RgKl6MA$XoyBGwYvz{G%18*q#6L?Ngt7d;7*&v#VIVe7qvQ$6MXvRc(x< zxhHAzJVF#b_4uT3a^IY%=6?L?zI`7#)!%2ugRgux^X+f`P(}CmGmHElb9LSS2vMr* z{zr(Sryjrjk1qRi>Wr7(`|e9e{t+9e4_)%vwCO%|FSq;nnMHn&xjOle5T!c#j}S$U zDqDQ==S{xr(Yw_9Z!NpT?ma`N?0e+VrCTd}uM+Om>EjjYJzh#*)t0mR7(U^Xww%?+ zkh&j1xKmrlH}As%1D||-_8SAb+OmJVf6O=iw^iKdTX$XAeY_&O$6H;`uQo>YJ-_-W z3$MQ@7D-9px9~;UiUN8(mfN7;BKbiBO6bvVvxCZh7dt_{|C?AmvHI>8iL)XY;6x5I ztS1I)ir^mspjuN`k_uZrYd4J5zinVsH!wC`%L8F&d}EuqjYJ~#0k+yD?jq5LA+A&X zI$>uo4$uH1uF3rdftk?R1hWCIhNcc9)dwQ3sbd`~Ofo#)dr57G6bRPqrm%oiI*lVV zu~2VdiI+LdL>YFO-yoHaGl7@kQFk~=*dXFshy$dubcBWhaEYe&9Skb*yNMw_wW;cJ zc`UciJtPvxd=H3U=Bm20%@c^~z4r2$pn3=2?b4h$8QE9Fit7wq{3|hWwBSR&eDSZ; zoW5Q1)bFl{o!oG22~DwpqXpX)SkJ?VRlF$Af9SXZ?gIm_C@{5Hi}lz?9r zHSfyUflM*L%%I~Jx&ZSWzkJp+HY5{jy3n#eEO6m7SI7PxOdI`@)2SNd>TkPGy=jM_ zPYnuhI1VLa?cyUd{9>v~xi)sf1yiP8DP|4Uh^g>R8whV}-GumcS+ps^@7AFaQ?D${ z?jF3o6Te_00MdbtXVWA@zRNe^`z-xEZt9ilj%#DB!Yg5s0W?NXVQLb7J4-!&ZLC*b z59E(Fg*iqB`X4L`2sQ_cnjY%Z-=l(8N7UuNj}^kKkwzf^AJ&%l=>L@^w*!Gr!VUm4 zxx0xp3fm1rBZ%n^{SW|zkw$4WjD|%>K_uk4BnJrsga|A(vz}|<6DkhG2&6hq)`E}a4*Y`cL8nlW z{sR1A1QrtDEhrR=iCmiCh6tyz5~j_dH;!DEX3^s;um)(lB3|jG(praLAPDGPS`Yy@ zAj~fqzYxFxwk~4xh%)-hMe$=W8i6eb7)#aGL1qJSY{A^cl9~BM(a6!1P&bH0`%-32 zTM`-y(O9HVfZOmz&|kqL03&`13aYT=Mh#SzLBmLclLD-s4Lz(*y|3PyB2&Kl}}` z`PJ%8Eiw~;Q3(;%Cb{i9NK=%$O<&?PJ=swe)|yFZ^DOHd{t1N-qF12Jb<=n7HGOL% z>^3->KH@fgW7GzsFP*?^dhw^^7K=^a z!EJiT$nk{Y3y4HS?HXjJ**(E_Qv|WXm3jgt`49Gl-+WI`$YGy>9U25fmw`V>@en7L zrmRD^C*&mcgjs58hFP50y&Fvg09h*nKY9g%C1+Us9b!u#@oN%c*ThxQ<-Bu`9lfoO zIKUxx@DU#&G8k73tfw|87M;0}O3xRiKI*F^5}OxhbS~=_61fazb4%>HMj-7j!*JfgT@bP0 zT;7jKH7(zy4Soe{N&5BpQ zkCD;#wXVOaei0W0@akNOjsL@IkI zp#rhx(``P7RCY#!{<+kpq;eNWG&h&JoK)79INEelSVt;zdknmv7HH%)!}^$H_7WgB zf?RFGr~M^%N+lRn9}@j>YR+F`CCw-8L@$EJXm%`Fu&`8cB?rn-Sr|z2-~A;f`?2O_ zv10Di&M%8a*sE?Ti*+LSd}Lh57WBsQN?EKCZA~$Iq|l5s<>v5))@t5;u|^FwhJx%O ze4z8H)?Z?szE`~WDqdo9{|Ch*LL5Y{EFSzP16D1q!&&Odq7Jpy>X$m6Y}>atR@?s; zyO?(LC;vTm3;#a)_gI&UE1AgyAprKFQ^tCB?=b#_oi%o?UGZfAC#G^}kXHNt7^>Ti zvAoQ|wD!l`1y|+0VkPu}U;qRhw#vlEUpS>#?5d!#>o|4j=2&B6XcM)wcdUS}U8-l^ zZ8Hzk%vr>M{WfHzCqioT=#xs+#2aI9FxgZ+e`D-VnLwuMAUUZMZ;JheI3$8ap+#ZN`=Af?Hz^LmTmN{jIU%jkg-A5x2(jn{A(QCHHHF1#4e${R%rh z?5eE)=~WmCgJ*Z;1tWp?+hc0wNApvP!h_YW=KkaSxuiIj6dqN^^yNir1jEWeh zd?9x$hy(!;VaqBqac2XW7{g=%0HOk0X8F{qAka<)UkiOARa4JDhtZ$!WCI-H~jH4KH zh~U-g^B2HUhmu|&bWCl)v32QFNGBXBRv$lozC*{X=chkQIzU$e_mM4P?ao&!3z1Ah8g(kUo*1b+HV(rbZ^O+lYJfATV3 zz<^8yU|-;mu!MACU}9SH)88N+_++v>&;i^+a&IokwmTUP=+Dqd{)QU)h;3AF3`dTZI>6iqWAx&?E2S9`P)s541D%q$1-I zo7d*)37&qHd48A7Qy!FT>h>U0Sg1q)eu?tzDRZi322J9WWmp-sK&R@$|xfa{1;f*^L~ z8o^zTGlT@t@{$+%!qp9s543!c0c@kjTrhzApN!RsXiakTogsSNJ!yg1rj^#eq-9 zo_kUtlfo1y0-x~*aJ!;(dU=q<@L^zpr0Q`<-1S_(=1=x8M9EV*G zx*(J!wjd0E6&Q*vru2Q0JslSa1dTu;A|Z{s&!pguP#_I}=!SWaa0I}*;UOFD3ahIT zo+X_6_?9pd=pce~N(i1vTK4LcVAdVZErIiw-f%9F%M+yT+>-=xPZBlw3s)h9A%WEJ zU94D1jD?0=so306Abu4Gkf8ef-mZD=z1tWsl7Z9Kp6S zgjYvW_%}zN!E#6RuPvj`P|x;_tuwyJ(`bbA`o%OFVR%5yLn9nl8IACryJOAkf3OgM zURgL@V^;{U5D$&;#(}Z?R&xc=Yf5D_!u!yV{b+=0{=nE@je|cS`<=`_v%2gb{W00^ z{|VXmC7c=WII1lD<3BL_F9yZ>1kY4GhQyi?yH^d4EpmRUoP{?HiTxp%zHiz}pu%)e zZx4;_bbqWF7JJpWuSiWD9xLPDS|ehAYjGc(F%$;`jfz-Q0OSEYlwp-m@-~`k@`%_8 zrhh*wus!JHelF0^w{T|h#f%13kH=%V^a=$`r$!^O^?xf%m5z+HfvNc)M&hOm+d;Vf zz@?yEw>~~Hb|N`G9vN#7j=XzNMC=SZ-xF(3a@jqxQ+ZbC^+oCNYRX>tIe+7xSjSv$ zxFK-}BOe}XkQhBrH5(N>Q>RYk7)kx+QL$gaJ;cJNM#b(BZ-wYbd1}*N;w7rzm{_54 zAXkIaEgR!?=!RA=WB7;>#BU^lhY35phLw!1>)0D@z#8&!$d@HO}lm z7txFC=x3<(iLu(DjXyk%-%X5-taQ@z`Qs>7t8R$3ZvOm6R10vD!XLn|0Cz@5?I5~r zVywdt7jNBvN<15Da0_qSedpvr_GTM3DRM($YD@HuD4^|l`<)9+Jse+v1xk-ixKqGA zUSTExMad#t1yFJ#83ML?X<6-1&1D7T{Goky9A^oKr%l75Kx>ah@=GhvG=h(JXttjVGBl}B{=~DIY~PQ zhu0tx%}zCuOdy71-1kS;ql(TNh*GNr3zJ=_SdCqcqT;Wh-cQ&PD5wv&qT`3{8Yf>rB%#BL3 z)#)2LHLKJkotvAH50)0I^&2|nw|y9}rnrK((pVk9AdLY!3422U{=z=Y2L93>{?r=y zz)Rax4~-vE!Fx-a(J0JK9f3A3zy(gY8Kc$Z1dfq4Hx?(F1(SsKF+@veJ# zh?{f=4Ga%TtY!Uwkzj;yZ$`HeIwe{wfb#Kju2ASk4z~U%hnx$(P;oh5%EqtN^z#vSnjbEcVq?Vt~c| zNMNxA2M#MOu3-U-J#{K>57*_W=cdLI?BGEBM7xNi#|x&#&SKE`X|bERiKsO_)}6mE zoF4l%ubJ+h9&44ks(!RK&zrfbVr{FYYRB~0pHd!cS}UZkeXdb!_3s(6-_f7c<{7aw z^C#BA+<+T%?1F&|m|?-61^$H?FTk1T{n)6$0qV8)$L^$a(GTvA-NV2Cd>~d-dpf2K z)J(_|{ht$hIZE#S$V87s=xJk}j$K8C9iV0;o%o9-y-#*3M2_qRAp z{+{2yy-|@XF360v?NzUE`zYyCf78B&8vjtNC4a0f?;KGbF6w~2)I+hHl%-7z4fV7Q!sM78CPl9MIX?@v9d9-f7ZxTMs-orTn&!DFGDdhvs?Gu7`Nj@_mw z9Bz&{PSpDk$Nq^u-Bq(=|Ii^=b#%zq*|DB=xW_;}1*HQV45=kOJLW|``F5FHdGo9f zpJ`kLG>T0eU;`*(Ndvo~gMrC6bPPUg z(07Q}z;!8rh%zujm`NEij(Pl>)~aMqEVtWzWNqlOB60XD2omc#BRsr06ED!nmg28~ zcNMe0LW~S2hB|mv$9!XWbJg(bj_q1K&eYs6B!<<5J|(Or5`ctpOEsaT8gw;E38w;U zFOD}>XUxUB`-HpI)pKz#3+V0J=i=fVRZudyqyQ`3^UN>B$xoLa)fzYU87#%_xv|{D z3i71-cu-Jm^b8F6@C%rb09~m|5fL>5q`I0h(wrEmA#wd_m!1bPCJ_e; z2e7bUO|jl%5FIjDcLuG#n2Pg(>J51@xTFr24FsAvC*^}UNltD#c6w2h=I8?&x6`Sp z2k*9-a347erJIMkKt+9aZ%N}OUxb3GR4~9c$Kag}C+`sdbW^)$;E@6D3B`~1#*uij zz|{!H@)uFt)032svy8Qc!MqBszyr}1?U@@D;N9qbKn6OHT1)5L*g}XR38rEmtl$OM z!=DsvN^WH`3I)fTubsi`dBwpQmUP1M3YESEWYdGIV5=>!U@+&QYIr4b&k#z43niUJ z*h*og;7S~@h}w%EZd(DpNKAgn4Y#mdiPKcwmrrcUQg8XTeSUpjB4J@n3(pMNMXto) z+^PVX*pNL%Bvn25WK8_LWJKLV)i+PZCL7Dzs-;iG8mM_s#cCN->hZ_L!7o+)r(?J0 z$l+n*e5il{6@1o{hn>m}PXLZw5Fil!# zRvT5aAeNuAUabmPv++;(nKo)mzj(v&dfYh@FCCg$sB9b|I}DDWW=x2xO;5zmGs*$X z*f$G7vwX zgc*SYk$Z+T@OQW4+A&^D|>?*HW>lDBE@Tg>!i&ax})z!Fh}MbJ#2Mq_s+H> z@x|AT6*_}1yCl0AWZ>fjCY7X^qnTYM0uJ--=EUIRv|sXP82}$8hk2!YjRAabD90t3 zj`2I4`(}pFx0~(3(5;2N44`kf%HH5MvzS>3sO$~yD+XYHV|#;BH!X?fC7vD!Vlez{ zTRo%jY{(O#cy-0~Hl|AMd@*5g&sm7IAh%F7r7*eiG)LtZ92h~*iKb&ijk5|5T{y%2 z11?^zM!&9QV42SBZH+1~Pr;2cj!jqvu_?svmS?*Jcb7O);mwgg6X-5k(j*)`>mN%g z=1;gH#Zrm`A2yd3e4Jt?gG3qDCf*BU-^)h8tuL>f9BF~|3-L0nwtQuyTU1}Zh>J}o z#1C~#xDp2`aRwzu7Lg2BVw5&XVpm{ncp)&R%p_4Ev_6|cR6fX}av_+=h<^dY%k!dP z;rPkYh7(*YlM;Zg3@W*DS%bQ)h|)mE#FAGjBD9Op3P}-tx$|HM_phu|fu--00{6|K zJJjrDv4V657;5XP*q|c=L-i~K9w=9q?moCC{BGRc#e_{{!#HI|Vx{`nf!S~MeGoIcMsj+0v3F#FMa4!!izUB$MR^+&TuEgSOolKBtN zzQAizADam0viXI3r)I)k+ZMuYv5jX$xIvH4`1+$YuRn33E!^hO_xDqC-n}c6)&pLX z`q)G`kB!}}eyM5Th0B`!LXE2K)P|65+#;=@F4BGQ(6TLG?-{l>YD+g^=?9|*51F-c zA5BYox*g8PCenFqyPl5~IMU5R$~71cQg;rtfJo;z<(Ki`!UZJNou5s_bJ^;?9xKdw zy=IlB`T!!M!E5r;km<^VlF>i=45`e};PV z&AQ)%qu|w>AKX9$^Y9i}Z(~o7XXLz5GvV~yYn#7Fqxwz7q|!Wtw4~nV=M&*PK8(?p zIg?h@sMdDv#-iY$H;7<?cs$(zgzy|t5g1+Jmvb>L@tkwt*Kru#tJ`rWsPc0hJb@-Dnr1BA1amR zVU#8f0Uw*l=CR4tv9@Mn$<*OkXiH=I&7nmu&*++Rxl@OqPXzP$q|#)8AM;X;Dow_~ z78{vPr1Rt0iF6)XUeXxw^NDmGAJ-`*(!EhL>2%%MMqbjSKAS2L&NJLf+J5-hL^hYr zzx^1$szy~O!d3XE55K9PNaq|PsH>1WYT@7W`aqZPVrB=et;wq%)?<~wYhsr zKc5KZ^67fZU2d;dlU}ZQ)s_3(b=BJyOFn*d!gq!CH1g_QGuF+V_SxHF^zZGBd~710 z$HqSAiueA{Af5x)D1*X}jVKl9AuuMjte;N=^!Q{hd1!Tw>P@CN2h2*wgAY7P7-p9)EjA6AIOYI=ONj!?%Yj@k4>a=+3c#5yP5@SYu>UBsEV|#AHYPU z^KepIeQY9^$0nO4skO&nt5L1# z>k$84jSuulWb=TPk~*A^O=R=f{2gv@&7{+38sBhe;&*Hz;(6{fk~W%tK9SGkle&|$ z!>n~Rsyn@x^Iau1@gvUYhV_Hsc$;)TpKe)~&s$nQsF`$nlkTrOzgH8H&U2oUG#>nX zBAv@;Z|K(A%f$WbYgB*wTNB>b-9|o6YGP7ba6e+KEM*#0r3VSP?yL^#h=O;W@9*hDs$&0f0}y-}lDlNs3Y zU?6SkcNZXnc}@wEW?(;`Napc*tJl{xlTPo`eYMtP#n%2qhaURulW`6d*4{679vCuV z@PmJrVe0Nk{Cpyv$Hz9!ec7Jko_w=L)u&I@zUB3Mura+YlOM2B1oU7r<~7VxgO zY9ye{!H!QH>32RKG}64DpPQsP*vBT~d2Fn|`d##f^R1dmCp#wxfS=MG5rF?Hw{?B6 z_#&K(y>HKU`sVQM8r7U$A$;>mp3eu1)STz%C8_3oY$BY;=FN3$YbKjsCj8^V@6t(x z^BhMd&2@f0kAX{8~ zEt8*51oQZ0z&hjMwVy#i$3LKq2cJ7WsW{K)U(!76V-xXQHoME+co4TG4{WSa?ddM( zn@#e3h{7VAhgzJ}<$P=+oW~|zP8P7;HIq$Rc8Y&EOd9ptJEO;r-*laQJJ)~au3--^ zUjN;;pi5%cqjbRM5bC)=j)Y9^gN zRr|J@P5j`ABAo}(m^4`Zd?KC4$98p2{m;BxquLYs9Jj)<1@Qau75O|*!AbJ@`9waC zPx_r4VE6tE(m7r>L^{7q3z5!qoRK7*pHHOo_@wqu)l1m?%{8h$85iaDR6MdM{yp9n zy$R3n0#U^C94*SN@UEK4rCZfMm-vvHrP@3+=%h;tADf8fv2jE=eQv>)8r7Q2bPguB zOv645Y?02x*-o12d~70}$Hq3zeaYT6eOxo~q)~VImodK|5|J;-HHz1&em)V<YnGDpHJlT_~eQI>Gx}1aTT`fa}jLA-e;mJSe| zFZcD(&nJSpeD=m^ZX>+%@A(R*l-CX0H2cY>K^gTJ`Sxcip}Hxs_)p-!=KzL^h92?wYpMOe{Ug`NV2+_kgb} z-oF3Qis??9-n)1Bh}Rx}d5?I#^d>n!p9tphVX(HynfXD@>&x*r$ z4)L*xSRR{*wY_Fy-Fr@aq}p|EJlBK8X>)#jV$!bxs{OD13_C7}H_CqDZKy!kf#nU% zXRh8BZ%-W0HbyLLThYMGWIZ`5S2zf}^U1P_EPneQ z=sHU(-I&VOi{iOwen1vl!N5cw<}bnGz*(@4Nwq#Fod!46SjX&>q+!iKWVu&PP+RV9 z+q^C;hrS`5AZNhCS$2YoPAVy=4f2q8m<_C}#x=osxo)CcxMy20|f+1SeR5*~GuvLOm+>XUC!pS{Sbq;uf zW;$*u#U!gzbq*%Wk*o6%^Eq;L4p;(~Dynk?=|`x}u?#1QTBYi|m-NG{bNV7?^JA*h znA}_~zBC@sTTwrnWptw%QU>h}sIU$F_h9%{we`99|ENnZk2eX0A8V?5Js*EXopMFI zqndJAyk*|!^{S5cibPw8XiI`swqw01hqa@+>5BNYDw%U1I*d8{pnA7`X_soOhc6t~ zF{%x4YVC*-)L+NS8o_cC(m(pf54PMs8ZyF4kT~q-~gLAZLaOg18U|8Z=UelV&^e|~+%>m*kAjSkp%0@kf$+F)x7&cq5a3?H;wp*qd71Zcy zlXTFw7Ir&xzV6KnXm?i20<5RDfJn*bG|}g`c+thUe)6~RmKS?AcInz?4HkyrjvHrT zTx$zM01p%yMOF~VVz5c@4DRd*Fu0TCyE2b%;rB~aho14=6Q+G-k9rt$zhpXA7-1_z zTfK>`A&kIMVWp>T>=|#@(zDCc5gfZbFu`({oUk=qhNPQ&mU!eO4l4`_1ZxsZ&o@*1 zdd82p=C+BXYq+xvOWWUZ%rXM(833{I2v2~b z>QeI)c_KRvFOA;iAaZc@2igZJ)M;G;usi`$Twt*}%?zMIq{ODt7SxE&G6%YkKx1qV0Ebnq zQ&2gx6?EXo6bs~s9w3O@L7jV5{13*n4b}Xs;wOgQ{CJhx`KNe8_03gS-9Bwy3oBKT zF;I-*TLUW$c0sAuz+~W`RCQzTk_PH;SI3*zUoi>jC>R+KH`RL6MgLh={1EV~Q>_t| zfq#Zq0{#hPPe=)-sbI`JPCa@}{J6xH2Z3CPda@QFQ-Fe|qj3yt8>tvx)?!cr3aY6a z=YUG^%L-5d3aY7lNTnq*%()5wsi_A@B|_^OKXuGpP>JSxz@}=8u>~X(gOtW!pGp$! zD(rQJwTyv;@}$ugz(CW*K-5}CG9fodIOG80h}p4Weab-QPDoEX4nl3aw!7!qDNYIg z-VH`h6G^Ap{W6qqaAUh9Gf4$#X!tXyY>P-CZUAtW!r#^*9}>5_@=^w}LT4lJa|Eij z>)W-?f3U4KCFO1)qLDX{Bd`Gh)JcH#S{i~!HVFqpW30|m^dSCxT>%+QM{41vnP4XRE@rv|YU)E8QzO69g6QDSEUVYKSZyvSO;^{{FKyKJ z-Qy}_YG7jeeoT$jABCyWQ`Z8F!Cx5@qorH@pyB5O5Mz;!Fgb%VM5Gw|3xixqJb|}Cocu`Wt))IStKqbhE zDVscQD-t=JtYI~r!(Z5bV*XDp4umz7VVbq&9-tru!!KZa#E3*s(5DG}5e5c(LBJG* zx*;02e@G#cdV}7)(URQ8T+mFkEe^;okvqy%7$ipm-~1tqpbOa1L;wOTST`vm5LXZI zONxyCz2KePaDfrq<}yn_6?lRPV>yWg)xjI$r*kDq!Q!L=nAJIdjh{zAh4FuluTO`| z5hJ{#jcWdf_-z2KS*ZRH$42xeV05pJM^&Bc<8_@)nIJC$qb|?b(OTVG7Qd$cQ+}{R zd$$EFx@D~%{9(H-HR8|lp2mGmen?&$n3scl=g;fmACuR&c|Rnt&BWNtO5R1XTy19l zu)G46#A!2+(aTVpn*Q@V$W~*21Ei%;Ht$XZYGiY zJ>U+z(RY(bn0R0ayTpNsZ$TwYJntM_@jcFWnsfXXcbSKoD#}1i^D}iC-4_>WP)A&hAqRqVtxm zbO8u4z^w8L=QjWdL)Mm{ntE+qfFXb2kW(o)#Y>F|=?hP}DIN^gn_YxN0je)ZB53$c zE!2g*;`NPr8S1)T@vcpmn~`*Z$>L^AW;EVSL@?WOd%3h%ymhO++}c+F{lfEsGbQNr zfnz&CQ5`O6-5?PX$f+tkpInZ%mOxCZ(I9{rLdAhA9PcOSCA@z~vDOotCd1mtKS0I8 zF}29(85KN-%ZaFDd%kHMD(w{NfguGqTOH^cNWO|Xg%U`Y#7L)5sr~}srFM}+teGNB zb3LYn;4H`Sm{O=gBF+>!F~VN)9HzjT%n$UKa*gdW1%gvDBf^t5r8NLs%CByn;IT)( z&gx{8>aQN1Fh6T3GGb07RUxbCa!mEwbxlvdgB>hJTmw);;Ul@nAw#mG6UR4>oRJuO zxTh0>odmLE^T!+46?eODadbUzcE(d4M= zH7{-*8O~__zvDk2oRMmHv~wI8RlzAotBm2<@zaC(Dw;T2844=Zqes0`M;*;dl`_sg z>a}{$Q7_|`yrbQ7Mn}~N4;@#a`;iraqLm=t3!`^8OI#; zGEO||Wt?%;N5`b2UaP~8dX8fo9qmmARO64{rbE`p$w$46dyjgKBaV8ljyvi(-hI@! zYuF`JSCsj*BoF$lj|;&Zt&@W&RnsO86*SUHEWmZdl;%gOQAxIOocB z&4u@ucKRtG_kZ+V>Elh;(`4a8XpJ7^LY^jzn*4M;FL%J=WjIJ?=tF2ZZ?&O)^U~At zxbaMZ3NFTVFi!FXi}6;TLlpvChJ-~)05>;QEt{g%1|p#3mRWr!R^SfAiU?dI?lKw| z;&z2toEuA`I4jHbhQ27FgDe(@_i8|Q+|=3%iVqmF6!DJ9qHtC{#Du0rOZbFE1;Yu* z^3LLmK{CNx1S8`gIF9SvPHkHpkMx||MlRR^fJ(1cX<__k(tI9ARmy9!R3fBFx0%w( zgx_gNk?^npntoNcqp9C5i8pUb{hwE>bLpk}WVIKZWB{(`=N|6H3;59&hTAtw0Acw@ zJM!|s1qcE&ap9ZaS{S$`61V{`0C*t5oBz_LQM}2svaJN&RN%RyEJ|G%d}RS(RTx$6 zVI{a9l!pkQ@yk<$VZU&o$&y|;#DgJjun+Ud1;}sh?+ZL0Tnck|yf5>*8Vc@2lf=>OaRP2f=DZ)7noC_g#%=fLTBE8DOQFdRe@_ zTJ&5zoVTkQ{kks~LM?AtP(8Oy-x~XnuX|n6u2`M^Y`iml3MHP6M}ukXSNFipXVc=2 zi7Dd%LQPc)T>9g>TYEB`K_XRC;587MDVq2oiPS;CD4N-rL^eI|A`NRU!*~l}``50tsKjZ#zlY4+1*j?WEG5t^FXNsRv1= znhrhsx}puAVDl0#*`-b)l}`$UN_MEggQYWX)$FZKP5HX8_Hy9m&(wMS+2YTyg;-uem7bsdrUV*GLj{o%#67XaZa1dtPVLfJb-1ciMjH6( zrQ(9+@jLlow{Cg-ME*@*0WI2{IqHHH@qEs{e_atT;NL+j;*;~1=3~IoLyNfmq`p+e zaNv}`lCQe0j9&?7tX4Zrs=P>qgAUd9@7-ISx^vU%odSI23A7G;%f;zIXV$0nv|QZE$>yZld)w1!dtYyQ&gR? zD&CszF>YFgI@m1_jau>R&?s=$MjDsFTl|u?YU``< zGmM8jsG>FT7RH??sPop~A^^X4uR)vQ_nb<<>#U8J8}L&+a&5d3+x(%maltnir>aAC zLbH_9AO^qR8LA?kh~FH#{(y&_01jS%z)}X(Lkx~zf52J>(7h>#us`6vozKFlDgnpW zBV>8l9^B{#I~j!_>AP|~;&&txw;VnZhWOmD4%-DfF~~7h`T3`l-UxKOn)>;lBE1>t zk+Seb{s?b60eD06)Ay4OtuT51tipZjgxv^dU3DmPJg8<){TQ?$5Y5%-b@Ae0ZB_U9 z&h^#n>u|NcJF3oJAHT_f!kj;A-;qTVp_Zrzkxk} z#2fL8GxntdCp;A1r>=S@-n|EYN$X%)WgG2--=`>^w=5uVhsOhp9K$%JcVRko%Rs~w zRhS7LXq$nVQ7}8b{GqcsmH{us%e4#V{ zLT8R&{>;DdXFj3o%n`+(IexmCPpBsI33le0i_@j#i__KB@5HSh`03Amak{VQ{h>Zm zMbQz(pF4iKx%bb}MIT&O7af0DbOZFKH^$AxY&}f{;TM=Q6`;|rM;wygxS|fNPl7U; z(HA?pxIucQFK05$Vma8m7*JodIgS|Vem4>}D%{Q{Qm~CFK>RuObZN`M9CqL7biwclBDu7RM?I1w6NN^B@PcbO;x?E z@k=x~Y4n+2s z6(mAqfh*wLyV0sC7R5!eFL*D$9GJ9#zLjp<3UxC2gjAoAC3yv@ zR==++uy0GYYC+QB9Sy`nsAv$wvwh*v`WM$WVs+6)<5_T&_AVXYuZ~p2>3c>F4p|eJUpTJLA7`R7@H) z3BlVnTxwULX`-g@jCV1kU`j!#=qg>nWv@ya=vwUJnZldoYu=s7)V5oyb zUK@Dz&}sUef-%j3jNrFqqfrkdG`1t;CXMklYXl>Bc5R-gu<;1U5*4fhu>*v`Ut`s7 zZ#*aaen!EOAUwFWI%99V6|MdLzBk^@m};nbd*hAcYBCoz?%3#<1JlI+loi4{1T-i& z$w2`+Hrxr@jM%ARiu`sj)&Lj`MkaJ@z%JcwpPq@Y*%v>rq?#n*_ylG#&=&gP$({NI zviYjBvL36`LJj*O-Y}uhL~^bv3Oq6OOw&2z%$a&-r$7MfzLga_9^Nqd?%1aYBljT`r^Iri?>=!28YTG zkX?i1>{%f3%NEO3}srH$6rmFj8yw#Z;Vz}?g5{o%})IaQ_fkUa| zeB?MEwdJEcC5XvCX0}ofd>L<%c#ak(C`fpBeqoxv&~UAIxE|pcpC&gSt`!fx8sX+b zQ%5|3=+wld;f%{WkyPp-(lL|E`!Vf+SR$MiaIb;{47mTXjcj%@kZp~V4DMDais9PW zxF$UjHxPaIJ4WHf%OvE2ix(}CYcj({yHD7r&ZI=V{ka#sV@bD97fy^6=$sphD zkRK;AZ$id_stW~KLe`;RFH0QW8P2THO%1%?R_wQWkESy zYC5)o(Zv^N5pNiZ7R?a#W5pY6OLs>aZSjG;+pU*u%uh}Gr;GVFwJvJ zD06f-ca9cG?0s0eHHYzPb7iqb&nRo4H)4w=E0lxh_*Ew;-;d^!T zm34Mzl#cs?t4}l&>xV;^6Gy_Z*2zb&!Xf@G60@*PKyQBjNLuxxR4=B0qEw$E*UYI< ztLJu`8uKAsGqV<{Fi(P3ZK{BsZbbk@henWG@x~7Yq)38M2t&65~-wV@p2rD|2lieiKt`~~o)(bTKsLtZtb^0=fPFPPd>2z|J!+Fs1#tr{;J?OAukkhRbw}YEH<11P1)JLHmszmjUKM?^ zv_aUucmL%y*tnu!W`h}TSQ zYN~m1VoZNLhXHCbJd7BF)I8%um4;5m`vMiYq2HJ9hQ>Zc03TkGk77d@?g;TPlgvXvM3hf;MEhNsGBP+H z!O(b^qvIiA5BX{{!wHTI&3-T31HL-Q@Rnqtdali(i$7`rf~bXiw-iR*n`Y)Eh7k3Y z`m3xX`>o?`VyYT~sp>+*5DF^<20Wfu2)?WXu!>g{DD?UPRza}=RzohpD!!5dR)MWW zqml&Q08v1wfbbzFl?bbXd+LK$6$Gn*7ywZZ%tlsCm)9levj71#UBA&$wFj_Wsk8=3 zagkLccv>;V04Spq5LxgtP8BsY%eb^i;CL4!6+&cmj|?o#>;VxnXF>-iV`ek}Y@0y% z=~`;-H7DmL&fPU%bg-HQh(#;bXP%Fc1QLx;sBd?@*2G^!oK$C8X z=VdWkJ2%6Okn`^uW<%g-Qi+UEmx67BFB%L8-@O@Thss7O8bGR&k%}f(GE&jR%BCoq zx@IEGGN}8&PClZsjTNOPj6k5nYS>7d9vQ1IDAFJ2K1-pVd3c;?}OcS%rUvticvDsPj_x$$ljS5^7 zz{Jd0+g|kww~vxOe}8E=3IDQ13)Q~RY{wrXzi8J|)d`#F#zPHNx7vF4{jn*fsbzJ{ zqU7X0uKm-J8{XPXQ{(GaPHtZCCnuMx!Z{cdPGNiIm|4b)k)NDgrD|IXyPKa1xRSi%sg_X7bNAzQGKoBV12BLKJ?h_FmsRD878>vzg(BD`mR3n z*qs|6Ja$E&f6R7uu{x;OU{o*qtmuF5f|Q_D;v2Tb+!ogjX;-|7!ANOVA)ki2 z@tMki{bZ5R6+RB&=&t;K&ctJb^9H3UcuXUpnmi`;G~qe`U#*Qx=uSYs&ZUb1`8u6$ z2PASq1bAzB+QLf_pS);f7=F2h&MHC&WUx8|Et(?sSt-^{^hKtrz4=)v4`wMaw8jsZ zhiUY@l<>g1@|uN+cuS*SLfglTJV~M$1vE>N$F78i+k+dDel1wQmWA>xiLW9gk=h$h z9>4*K1V4lCV3G&xLyMVHnC{ky6^sH!Uzc%V06Wy@Y9pScQSTpruNAu#u;u(N%fO)7qSm9|Zl{IE9 zB9$*;e6YgPl%`Ia3o7l1BVv~fqTxO-Z)6M`?=4k7SnnW-?0n~j*|ARK2_`~=@V7x# ziN-eh8ItijWxWG(e}}rlVWy*)aSnBjBgZCC#|RaIXtU!G&2bIuEhpl;VA<6WnaCUZ zR)_o+$Q0=}!u>JHd|k6&;{O}bu@{z?#93(QB9p! zuP6lXgX*T&Pi$z|-UivmyW>CM*{tfz@OlqqHer9IK`W%8C8(O;+3djUY_YiQzZCED zv~`6(08|$AqaXAH29XZyRQmdX#)3;9PC6d8!=v&%;usQv)+CO0pvK^G-^+k31awGF zeHQ7o#7xAJlYfi>e4d8-fnS{GNT;F%;Klaq_f=83SnKffE!7{e)yaVk<4@^R22e{u zOxn-&75N}Ti2uco<(~VaK>ye5LAx9M5L8TTTG38*15Z|*v zFV!do(5^_iIU0g`2en@CpuVE1D+q83=rVZ6p+kq#%W50J01&Y-ABk%nj>Ius)Sp>UsO5GY)Bmi~y80s0`xdmC6&3bn=#B7ql6Cmn!d?vW*1N(>IG zFO0o|IjL&?uHzdd>_Dj%9e7?X0DOf2J_{WbM;0uMNS!+lI}Kss=hm>=W>T#~Oix3fwKDz-)6SqBjnqL~A1#9*aqW112=hd5{kME1>gc zRMa^Va`KiP8MqtEJ|__39*A&u%$XPlx|qZnpu;BwqMZVTwj!7YDAI_{?87-_2^1C> zab<-;dw)hC0~@J~X6@9M(i<@30T4iJa!_vZ7RWl#oD_#0!``a-3&Wv89Ai|sH11X# zl~Q|e1nlsXE@pFgvV54Rha3x)CxW>Q;IhPtz&{NwU_j;RbqR@BtT>DM*Q@79=Y&pu zJpZ)2fdSzN&?N7w6!IZM010UIuN1I{0i0oFJ@G9kUon7Fa^>Zu-zSpE;mgTr25@P* zP_HN6#5k29oEW!Pni%IYfMA(a?(wgG%NW4fm-;>X8|kIV1CzX~i*IRKLta#B(p>yH ziEIK4bN?Lu7U`^0ChX>ihcC%{Q87zq{!8gmlJI0@jp8N}!jeM3E4 zb0JF&`;r5KC5FC}TqAm`4kEAiW!B4gLsf7Q&^5x7izTlF=Q1rY#T9|5t9LJ4j_X{5 zWy~`e-qz4rvza`3Q-^v zDlwEJT%+LU4AUxWj5Crt{ZzAyF+HmKoN8)N;3rNs+f?TWemiCXA3&ryf^Vo!>1H;o zKhclay9j&$+_-tqvDTn@B4s}l~tJ1fIPHa*SEGd`-Pdi5_p-T1T~ zjsqRL8#@5I5$@XEm|aheJQG@2i|eWIukiQddTQ9|z|YvAa!)f0-DsQaXoxP+5FOD@ z3ns@hcGXo4PBWu!w92_XZ0Ckt{ka+U1l5#Z9U-10<@V%w!E>t44(uW&3MGYmJUN>2 zMy2eW(m9o~+K#s|IbN{yk)?E^RVrP=;wrUEoT5(+**e5jG|kYf9L6kt@NzR1MK9tn zc=_X?#aP1bk=Gf(p8-F+BL2cnBZn8h!qE(H24#-|^qmyw5F0UBf1v`K4h3T5EM)X%OeT~>Ms{i>TT7E; zOM}0*H24Z5=TH>46H$QfM4&`#M6xjDL^C3p{F5F5-kcUIf&D>{7(5g<-J)3O)>5dU z6UD2^+4(o~0|Sx)8HWXEv7MTMzt9x|dL$Byn}J9UijWOiQ81K13WnhcedLVny`i81 zTpab{dAQ;L0{M;Sn~jaB_0-+xo81~50Jbgmx7ZbOhss@X_`QgF_k1%du7iyW;F0H`KGx3<2_JcYZHzg%XX z7n(HcT=nE-W=9e}2cgcSG3VmS2pE#L6$kLG&bb_81A%|L+`N>3&%4mP!kAE^W?g9B zWK1kkO)fIeG2bsC;8Cvj{fx%2Fxf&gJdy*5t&Ju+61`X#=9sv&!;u5N3?j9{BeK+l zi_F59b_jv!1=yTwR}v|On&C1wlbgCcd}C1wx)?RN?6C2(`b$(yrrN*G5n+aopBPWuWE zMbyPel}#dH?PQjGz7Md!I$>a7QCYz6Z}3m}!xIAND{`wA$X@aNNLOe7Y*1G!xUXH_ z|KVI=_4MIfVOQ{0ZLwXc656VA1ND@H2xreUnWO?gCl=ZNH4t`rSZVwX1XsG@e%b%m zK&X`eQlvPHpqJCCZ=mIsrnvtbK}Q?P4-NE(>f5LC3|I79UbXz+42SjoC_ycveWo|4 zzJZ3g&dDppIk_sn6uZc`YuQMOmzvrw`R$jQo?G%owp;SvB`2zi`{5TR>o;ce`a9PE zPEqzT*s{=r6Ha&VP5v*{;ntE8_0ezW4xlOB0aR3W2e7n~mvSY0O5h(R?#_LRkH_vPkq^_$&09n{5F_@4b1T;Y56+kS=b+3$oa%`Wac-`}n@WA2YxSDI}W zF1*?t8tgJ_37!(i7Gv+niyj=I9}nV75VUc+HjT3czrD&3^-NFml*Fc$ygj0`B;UK( zHd6VJxDQnKA@O5UvB`9NCF$p~eWdaYjR5~H@2Jh7680FEJ%Bw1D>jq1_3C(r+0Tm! z`!R18X?#iK`;Z&KHfNp3Kw9nL*Z`PhJIa`MLFJPq@s`~u$z|l_35~YB?nB=yQYktw z5?vuTY+l(z=W2sK>k_?7W_qzA=(C%|9#Uz`XM;X#-T_-cr4VDlI|~J^`n6D=k8yvY zUb)gN{%0w{~?DWs2shQ312 z#uYlS&T*PbL%v9>mKC|#`XIm~Aw|a(e$+u4AR*nvNG;nUsy^S>$aWn?v2R?ugWWr2C;@-`jD0fMcGhL-4Tc z=A0gZ@o>fs%pb|<{I9~93Bra4x8e0wDzEoYY#EiPKop$SiDPp{1pg)103ILoeP87o zU^;Zvl|4u;yUlE?eDzv$Zk124MF>&#X#9KQNGGfw{}W3Dqx@N@ZfI9cQ8H`kdF{A~JX^I~?zoBynh zgzx(^?5Z&T!PQZ&deu0&vHJSYWVkEHC2pj+VBOdzL)AoMZ>L#LGJ-fbu_NG>NYbRc1#-5;Z7u#poCwb|g7`hKBfwFD ztn74qq zec@lsqT25|G`vHBHl*gpJ7l@cHlr++-KxT(!eP|hrb zR3HRTyl#lDZv^li8816-!0XcxgAXj6!u>HeF@Uc)d`8CGhZ|!T1Ner`CmDZ0pXtj^ z(H^$!2NpNVnCXbZw}1PA#SM6f0fal?0}Gz`rye*lFZ1bfAj%W}zy4+xW-r@;pMZ?F z-RRhTk3Kip_Zq63t~WChuaXHmM2B_2a5Wup9V3Y2jY=KRalBEv1HQ=!Rdv9|)pfuv zj3J&kBnx!Fh;+b@Nhj`nH63uLXOP;x(#%uyR&~j${T+EkC_>Gv$+w^rzh9#6-fy<6J)j&< zE_GRn5_aeoOk3}jsDj=I8^f>Xqy( zh7=&g8+}RRf9w#16ZHbGX%%^@*SdI<`iEnFq^RA!%}$3`uYN0ZtMSk!`8g2 zna5lAro99%u6xuRc*=1Ai?wReD|Ud}1bSs#OnMay;~Ni*=8p+4>Z2M}FXa zM9D$GhDw<{$^Z_nHzYvTy~MVaASP*CrNA>lQ2Z8P^B-!7y#e~KVWm^4HXsT*kmMFIC@ZNo9ExvJM51)obZ9Vj~rv!FEwu-T<6~xyb@I*4g z>rkhB!oweVRnaF1J2rHW5Lp^zmajp)^f3X>bDd*??Kk(~f8dz#fZuhZeN2Gg+y_(x%gjG#K>^Pq-}@*Y$bL6u zq$Gj_jj|o~h+BB}D2tBP;8tS$|KJ>flS1=oo%v7mHsi~Bs`tAN0)8J&C$^p>Q3vbX0V$`$KZG;}x*hXK1vN!z*iCP+3tu4Ap`b^0X8BP3` zd0fhnY%5ijbUEcrCS8(!N~2ohza5PL#Tj_ZE%{$)QiJ*0MO|Ah?DfB9yC8o}z1=*) znj*d%3vm+Go<5;djXNUkXH5Go;|;)@|AvkS8D>#K&Gtez3+Hq=EUWczvu)@7#e!YM zr%kQjg=3%e06FDGQu3YPMTQQCyCex$H~-u0QEaEk>n`z?hSz9uB+1-7d8`#W$DRMi z@e3}}n%`kIWI;OJVTv;QWp|jP`FqWEnc}=MCt*Hld{bX7OlUNy&l0*C(#r8X2)+}_ z&6aukqJlask)S;KW`7+r479QuzAoBKbvqIG9_44(t%U`9$pTD0cs#czO~D5T9X3z1 za_JG(4Gda~7|81(1WwD%q32WTXHwyWYMNB=M1#_e7)~&p-Ech_z_3QodTGLM772YoGP?LpbPx9 z@k)Y&o4#3NUa3RYMwU8N5)aP_`+VypR+ZeT^l>Ou={u7wT+67rq4vk;8RAihm5%!V&^KYFdmr3P@!m*YrX#7i|4c<++V}vTqj^udQ7fzBAY5LAD&fhq zyhzQ{uO<+iO23y^##n#QuUjt1AWYT=jc1QEhx-^C<+3> zwglNz(Fco+ZCqNm*syS{c1)V#bp^hhhdMbAJ$7>L{FBQ3wGo8b#D^V@Q!V?OXL3IJ zTYvKs{(Y{$IltCta0j|06e7rA@ZW0L^pmuDb0vj4F3PDP_845`h^}24bnR*%7YL-J z;QuTCFNqYwAk*q>N&0u}^0Jb0jNx!2%5vyVMgo&Fhja?BBcVy*Tt{M>Na29hY3Z4Y zx9V0Pe0N>U2BD0?^zNYxxvaMiL3@ZD90I4$tQ`sjsl1l4^oi2~f$~%N&r%=^CN9k% z7tQ1_&v+bvF^)49;BSJPFLe1HT4jg#sL0c>nnTZ}ucxbbm}s0XI374u?yid@9FZXjDPHLN9}5mT=$40aFR9yR!D9DaqwA`Nrq+h7Q9YuyBkn~$;3=)_1i zcNEGtlA!wh-mZD=tBPbG^}^JoNNG-_k$1-OF0U$5DkG&QMG6_+{K7{<(G0XhlAKZi zY`L|#>ZW_lUQHk?8xJL&curxkQ|K)HYuvnUm=DI_81jnt=H?ez19~F(g}shnVNq8-jVi$T%y?^@ZoJ zS#Uf%#LREGUO}C6HvS32n2v$C0a)Lbh^^S0bFD!KQjZKVPcwE#)w{#YYl_R;MR_LT zGICO2AhAX9T4W`s!%%d&wOQ(pq2}#BqY%5a5S@OM5D;bxwO3(7_W4+|OKyK0DL@PL zE`%pTG#!lcGStb+?0OzUFiO#y5fZJ8DAbv8Za2bD@+>29(s9B9u>x9Unc$)JAR}x+ zrQ%m6x$!oH2H z+HtSh#qn)jP`@gt)|cOBo?#5BOI_Qpsz=@W8S4G}aC*S7E|_Azowuwl%E4DpIZW|j zmudAb3quXD&Q$Y{?3RnhnaL=p`^RaN(`MtVK{=f{UhjZk9szs>-%o&A04gqnUFsWTW%gLIT;eArQb(b! zkGP*i%7hibOK+)FpP?IiFeKbk;O&Dy2J?% z5f$qaA0?5sg^G2FFFQn3tV{fGMi-kE73)&V?+1~M&5G4juVN=L5RHCV#RB7)6)T7Z z+I%E?K??NL{X0Mmx__0`&JDTe2p%8|{tAjJL9lfo(0%XryGAYlTs^Tfa2I6Az{M!3 z??1bC)&AA*%smjet6vX}+dvd{n%u!BM@k@8QiOv}grG#I#BS%|&*3W_A!Hed;EA>W zrTJe!F?+&ONY5wM<`35neqh+9xqA=^6iG`LY=5GXm=q={H40gkgp`k^V466wAx-QBrEV*i+@IuL zr`&NC@1-%*i_)Zhf>s(*z)^;G+SUiV){aWQ1@)6s)*e5%ei*#vX7y!>*);LIcU5k* z3^;v-dN7qvrWl{R5a$6ERwcOZkmD&0!P2cfTxA&DuxU-VO~G&w1NF>WxI^RF36CS# zMbWI5w_Y^aLjN6A2dAh6j19y~df0-Ag&f-C_KSB_q7zg7ffklt`V@$XL(a5F7iT}$ zo=l$`eW|fB5C_N0A%mRbWnyyiVSM^cKvxA*gx7fM-(|Hkf+6`IOrtFTdEinUHHqbE z`_R+wLg_N3W&`a5yM~^23p8pDh5GjE0aIpd-)XiIV!b1DC_=$)@NADG&1He%Aiz}R zPzYviJXxln6hNJcTX6geVVk~h=ySN<3U7i51WeaZFUTHU1A!=VB)^Z10{D@Xrx!^HuSrFdm5xxJK|Crf?zgK(o)~e|OGfZOp z1^Pnu$~oqE`&4_q@p!(vX0Dl+vt|fp`lQ2b5+&&{yLPVGx|+jmLoUbu!z`BN?1lDu z`m%YD+W1cu>w*PlUhS#p^C~rj7BwoSp093OV7525)m}Jrfq7XlxKxeoqM?%opkgv# z_xKEl^#M<|E>^%a()q@VCBjc%NIJDb_zLH@?S09Pz?XG5mCYpb{WU|L;$8X|r00Wf zKgGKNBgP_tFTz*@@pkXhA0gd)ig)RY9Xb{*JjuEARismVtXqEi7Sj2+hoy`3_88tA zd)7e)L=b@0%O7F90-d@6T)?QHGUcQu8GOJE!s&+k-zUv86XOQH$em{;Wz0#WVsc1U z#+*uOH42t98D=Y3+RBpO46)gH7Ot#cdFN2!PsrB7Q?Pu3$#C0~q+mHxGgs0AokA*6 zSCX_q=aI_YR5=D9_DHExNlQqjekGMLUFzDQT|lOSWs)-HQVPMXUy?HBhfIQ-5l0!b zYPCy_(`%kK{~D~VUVhrV+Nd2+uRaY8VQaD3&v-FS4f|W`hHBGdz^s6=&JweM{U$`) z_b|dsmS92{R-!InVw$zT>Wuw#3UMXmj2GP4CSNUFV)in2=*czq3w(DZ~?tcECV6nSr9Uc+kX6ec0SA&aWLoP%TtL4 zz|gW_isd5-ZZ9xT8eCRjQA~S0Jai<85|xW(NiPZE*V@TaASVo2UUD$Y2W9n=WeDIH z*k40w^d2NdwK?R-58^5a)CF$H(0v`$iwLgwG4E=g0)6|JYO zDq}#wBoYkb1q8=IGEwayA)vp}?pkepzUj;;U-9qcrREv6SFga>%>Z|#EW9R1?OOW(vG*q6RTOF4@aaC; z6T%6EgeAa92oRP)5Io%+KxkADbR3=SQ%6To=N(076m@3aZ*)9CK-pwbq}Uf_2?z>` z;sOYY>>vmzAiJm_$R;A2@ZWb;cc&A=k|UG(umAexGN=2gy}IhDr=B%bt?MSjhy!y7 zgJ4>6bBmSmwlWH(gNR$UoXOi4Q)NYDAXh}*Ih;H;BE}d zNRE(10;do|E+AWn5oIXxfl*{ghs+D856R?e6DJ=CIHxyl$K^GX;_@2Vk|U=?vr4pz zyDupO=_4hG!dfJR$S&xkT3uQrJz)4DGy@@~Cm4RVjVD;ZD@hw$!IgrE4)I2#&c4sh0r8uosg(bskxD@>VL(D+eHnKY9+6G))Vg{@`Vg@u%DFwy^_Ok&s4f&L3pmkD_5?fs8 z<3+i6;RNg=BSg%>UW|M?7HlCN!}uQVt#l)SJcqDnUEm%9dFr8eF7PmcJRrSy^7Bqk z@11x&wLbW-ssC`K|622pP(P-AQvzgT=HXDdjVBaCq3|WHSzgJp}Og(C5)>{ z>hkN>(PvkPSs#b8u5)waljQ(|1YvOb669|_Utn&Fz&75MDod1R_3O=g%c!H7QwNL3 zt1>up=(a;#tV}I$8Q4pBn-qIL4n2`Lw}r_?X$3{vQaID;n;@=P3IWKWD)aubG*m~+ zn*9Z4;1pDu@f-NL8SXQ@N|8-BDkyG0a7|`)-V6L(AoHo6OF~oPPUPoQ z3dV||t+i~?^pnuvNSTcNB=mp9#$}=V_+l={;ey}CmV;rxsJ@u7JhaL~&-ZMb7!-Lg z=GTb4Fbq1rJQA_Myu|Dr+=l?S?TO91&wS#rKFC9oqOLPOq9dHCV<_9rh? zde(cV;LJ~i4yV$yZY&n92&LxkD*}{inwGLFh_meqK%EgQKxJ)6UGdi^Le;H!YqpbD zYFcAa$V0y=Gi|6PF=n>Jm^|_^zwy?Jv3BLMfVg=jRI^bXRkNEMVP%yawQYH3fRw_a zEYU4V2_iMs{^FI;*FMhzm(bUayzJK!X>#QCsRJB=T1&7}ESy&lXM^;mS|1rCV65PB zL&i$HJPW}rpm&{Tr1(FP9F`=y+5z4OCb_P5w4fq3$x>lm8W~?b$V8!Bhz34~d>n~Q zk|r@4X9+m2@_jz*N14;lbp8*LJc)kASQNws&830~%y&@cg9{EPRR{4! zM`wOirK!3O!fFX5io{T$N%)E40tY~j1DO;50rB8ulNtx)PTBPOQHdwv8z(4{BpghT zM1Zc0Uu6PnWM!bHN>m24hRKzcB?r^7)=&;yL&Y4ChvB^Dt3so-%%XW<_*XuUqSh4}4yDEc33EdKBM(69BC&Be;~kf-7I;QG*?#ozwk zHbWFfVAT}Z4g-S+zeMvuP>0Vb4$Sf|A&|xUZD)Ze@!M-FjG^w>21h!0d3syuZgJaZ zp_jZRv<(-OFzw8Tz4`iYzaU?RsIeoun(q+>BdU7GQUCLj<48VRMr+l+2<5~AqbDyG zk!_(n#b5v4HuDm5@zF+zLN75F_lTN#&AgrX=8KY@=(M?vPJF&u4Y}Qp&|H4-A9g_b zNq;9r{9!kIqRg)?=Iq7=8qKEdQDV@RdqS;Z=hwz|66f!|?iw+EPpAt=5sVS%-iw!f zvxKigZL~AuhOa`e;%DDip`O;RDeHWJwY6|uQH-{TZ_;{|cez+=otsM4$cb($^UhXp zV)Wk7BesD;GqK~w#JGDtKd=agl(m&Vae)s5IU3b)c#!NOh{qIEJaJ69@ULYFTnuqk zNFb0jS1oo9k+wDWJCxJFmr2n?&xdQ~lxQzvx3^zbqS`}Iw)Z_jJfEEQZ1_pS;loFD z!Upy_2p~@l5R|eXHhduAyjX&!bl|do5)CBe)$w+aj8u8`m*yw)#zz2Bi~B+f?( z1_T&%+U2wM14{v|=KD132j@|@b~=xK*nim>Vyv(Dh-!5yXCSg>4a0HSh*zprcCDIq z*eRr|Ld@y6b^{7qOguxW(a8~8+=aN}a`6%&%e)E2y-5UV*w6M^_^oh3H4jYe4V?g95He-Bsf-1yk^CtCNkZv{t^0@ga8*hja)K5 z-d*vD!Rk(a({?VdoGv0W5^;Bs2co>RKsmZgVz$(|Tysq*vUM!D;UIqkAA`H%P*GnI zn1Y&dxtPgyZc|r>3Fo@Q`dT9Ma}Dv%i#?#$SPmS6;_T(k4W|s8f?`u-`>+&Z&Y)q-iiBy;UL;I9aR$Pcb;Yp$nN{yCKIJMq((&R_c@onYzELOca^PqIgBy zyp#JKwN7M)q>A?d71fuwa%7hkvUHALH2*F&m6OryyVP3O{LGnjNv-lv=5UUSH0;bu z#gjIgKyFIxY%ly3!a2#{ODp*QrzW#(gZeJm zmEdxKrbOcG?-BA4wQv1Cl+WM9L+ZWdA@zRWA!v^PKG=R=a42-!l`C1)D5Ye9jR!3< zX_D~z;ZSz1z6RCq$#sQH>frlb+xX;jo^Rj#;=9ARDg8423B@7;-ztv!6Vr}_9@O8; z5NSt4t>Omr5*`o>&xbMtm=<*-wppX%@uN7d;o^PX(NGSeE@NfW;-orl>B&f|-ox7a z3hs%}nv_bANykE|P~#wy!H$B?9Ee7T%ZihNhYX~BW7j~@5-#XbBwdU@*FI6)a}4T8 zd*j8_W1)sgP-mK$B6-W=i({cD2*2eAFh8NAH~fcC9~r!1zF#cf6mDgojiJbLx_RbZ zQAtEx)1}pf^AN^m&TB8co^WD5au0COxdpZ{fqSa7ebzoEU}q9@U0~vj1LF|WFR;&Y zeRuQP=C%2J&hgz{+CFO-6W9UXCcRxA#{|l7?AxT<<+*DY*H=i@zD~L+3t5DBTxy!z zcF7qRdc=-NUU0GLEZvqnpKQw8yXQVdQ^ZlKsp1KBosn|}yd^F%p%KzEmzhwST6-sS z??!Y$M+fYCusaFgFo8>e902d9KEMQad0(l79~v-)rxaGxD34+K&xCW;aB++ZD0{cE z=JNw(p;AxYJz?<%9D}nJ?x@KU1XEPBwrkd96)eDDLq5SQe|A$2`|^Yx%+t-_i5(T76hdOSp!{G%kr=k zr=}@$;SXHt&0M@>Ssq?Sj5YCjurJ`g(Rzaqv4O8!i0@B?YTRhUp(sqa zA8^@!&@>nZwELk1@32#f*o-vVWf!=*Fk;0a>G@f^^wgP5mnOGmTeN45vz@Yl*25~b zjpgKsp-5VID%3ygL_Q`GZa`DO)l1~0(n%o>Qko$Gtb;GVi2g&W5t9@=kihuVH;*=0GE&b0WK& zUPpX?Hk1*;aS84}{KZ(lJl~?eokJv1sr>P7-_EdtQqQyb?1O=qRTZagRe9Qaifv#q zD!QTAYEQ8xs#t8YRRzVWlq}ZV_if+KZ6Z!{J3ZyTP~||lr=eV0$#VI=Q++#2LYmDT z^%UE$ib07b6~$6Z7Hi}yd=7)4tR2NptE_tRZC=ewXCfN;USM8|36QrRpQVx}tV+4g zD64g{=K01whr!$P^zw6^#qH-p4NWQnV?kDxGD|#EaURl~hg9c*dYCdZwT6Y2YSbkC zHK(reg8oizvHKQd5I?il6>$6(#2U55&2^1i#QDlbb>w`xmoe~S8TA)p#H0e_K9#Ld zR8BXNFPe9BjOdkAocD0NQR$+2&-*>~UY+JAmTdmLtcy3V4Hkt-#{Hb8NhuefCT;eA zDBGpJjrN7pC_YS~xEixK*qs?Msli2u+spaLmzp_!i1))?WeZjNTb`& zT&mj>VoPk1%XQ>Cr-e%|(>Yg^O$_rJ4{*s}YW3-#m*e}6azDZ)>(n+o{gV^*u9~Rj zmz=1HaG>Vmor~j#LB&0|vW~lR zs#H)~b}n>{Qc$Y?NDl6MG(w3#4~y>YwMD!0p+E8fxT{@LsqOgQ`B39J(yX2&B?U21 zfBu3~2_JnxjggOqkH!hA)pAM>uwm@Fl38_wkt$a=>@-*``r8 z^VvRo*YVkhJS_vOTSEwi2eh>eIumw3z_=>2r<&A9wtACW+#>L)nJ7==mOPDjTgE*) zynz4z({r)usS$bKulq}QicnW2T+v8EYk@@&`eAuyYtD5E*FdG4rJMjFF^{)3d3BQ7 z9rCF|NKrRc5DHaRf7=iss; z8ImXzI76WVP1WsMaws@NozPyuy^y;{3oL~)iYyFsz(;Vck;$>p*h8+^hXHc}`yg^- z1ne)xwo=o9x5!q!MHXwJ1-Tulsgj`Neqc^564#SCrE?q17uSb;7`Pl6HNpH= z+gTlh&rwkZf_1uxkjgH2OObEzRf74oK5w&Qk$pddI|*EsY%Mr;!`E>rZj$?`N5uOm zHneqcB&3DIVL*?1U{w45^~SG=R1$A6n)CNwv#mrf&zNm%h{ta*suKA84aVJ4B&3NX zGgYR?-)J;r(oC~$y*uLU_(RF_Ji#=n-KJZGTG$6|Hm}N_3`(Uwpj2;@N@om<$^5`B zn)(+wp^KvjJ7h$HA^kRdD(Eg(rq^b3hCxp5h=KySs!Dg>G;o~Pf|sr-OSMPOEC(-IcEdAQe;vd1sZ&W7I9P6P=dq@?DjiQ9ki{FLlLvq-i!>t2$_^s{OdM#NzcV6WWGV{r zQ8A&jk(!$D-+SfTVZ2igvd+SB*zS<(rKf7rPf|$JBYY_NLQy zueko><;;IVbo;gORAl&=JA)cz|J?c?;p6hx5BEe~_-+`+mIZH7HW+3%W#xv7(uLrL zx)oOz9Gxfu7QJpW((}BXy0EV_|HUUpCb8f)qmF<0m@Q(*ZAPP%qO*5G#{gJs^4U8@ z)!U60`aG~APqnEdQdYLfD#c#E{h?M;bLjTLEwe=bm2E8jm~B+}VWKoDtf{=}P#DC0 zBjrdr)OChJ(ytD5s2BNAIy*p5d^wUo&G>Yb4f*AnD>qDF9fAUpvkguZlz_2R8D=`w72=@r`Fz|z^VKF)yNDdWrmTH1P5w;E@ zP(%zE4AdnS0iRs{8=alnRel9%Z zDs-Se*KMk#{9M#BM;Z0Gl%>4-T%Q$xu9DiGSr>jT@z?BjnOUQYnO?y6rI=pbZa4bZ zl}xW>GQHqBmxn8!p}z+U=@a=FxH!5$KZkrTt6R&eqWy1-o9mydFO9?GX)Mo6dAflX zR>BbK?q?@MM3`Tdd@-EUsMX6C`}{Y?XbP?%s_HWDgWno=Q*b5U1m0Fxh6A+{oG|OH z%JoFEI}C>tMr!il%2BVz<2Z)9BZ`hK`fpM^A4zNG``(|?HH?!R^k|;%of%!36}+)B zvwrBw`hm&{ei-D{VB~pg-6KA}!>DSr<76|7YfWRk5w@+zD&;Z zZDQ4ui`U4vR%O+bEeMyPm*#E8m+#xn9@({SQCT6sPD0ist4@i$&3)f_da!3kSCRJ9 zwe>sEVS}WRRRBp)UG9UMl;q@b?Tr&1h)P;5dTlWpM@$ud3=8tBDX{*;_bj2CdWb+8 znJj{wz|~`YcB&1f^uUFVAhZhdQV`@qiwLECFr`2)^gTjx4o9ToAl!~CA;(gJX>x;z z!3wg85Z*Q*Nca&UNhMA3HG$OP1y|h7d78jX0HGS}<{UN+K#B!}o}6zuz`P#U7MEW` zXfCo+Qlu=Afq11j9on!=qGeLtZzY|4cLr#fgBf)a6i>&A7{ z^59>YiCpBEu#;!)YBtnf#Ms>q4#7;av@WeQ3dUjG! z%T5M8pF~+deb;BFs5oksg5bQ<5quJ84rEKTB6v-t=XuMAzZb+&OOXjF7bM_%3UVcZ z=p+Yc7Fs9u62##d7@xtl&%VnWBXr>!+oR$&%MM8geN*YJE+K-hNQHL^0X-53CP{jP zcRKkbX%zV+=@$8f>rR164f2vBtH5-jc6E!CvkhExtOoihtA{w0_7TV|pJWAms-vhO z36w3#C;HJN*%c7uyBWE#txIdrx~llRn=w%zks|)LyYZCk_dW4GW28PIMa-$LR~6lw zC8dfb_Zd~|Pk>a4!-g_7R%QUNI;bgmw%`eZXALlM_CBL_C7IO^ZJY@yDeIjdAqiZGYBL`hqMrlWi93W7UTl{+hc}hU*-UU9} z3qU$$fXclKoDdkT;E0l;7y2?v0!cd9 zV8Qc!=`agf;>e>oU*DLHTnGjNwI$E_TI(^~fk##nJ)b~Ol@})>i$}h1pRbK|)9zB1 z(h6|xD^%PDc1bA&$fMPJAS03_$8N`wjJE?iI0fVt5}gTH2^^w0@R*UJ<6u7Zn9;1B zit*rN#kDno+Y$r`1}e|xL3IVS4uUG$gOd@r9Bg1Omt8#5)5wl_1AZ>Vqz_tE72_W< z@}(lzO)U#Vffgh&7?JK!}btg7e-B-q+nZi1p3kN`{w?JU62sMHLV*jSMY zK;#HO5vRv~d?&-j+d7u;Gk+7y@5o<0JsDQTCO(5Rl zJ>81$l~(S?%Q80BX<(Cu2hDTE``S zDvtIE*N(sqMy%%3W8-mImySg~+Ogm(uoZA>*Q=yXJfNi=8= zC^EaAE|3vtpq7%ruO(|*|M~*QMTyG27r8MIXj!R@$QD5*OE)hV7zY;`PKB~<7{h9G zyDMAWun(=u^kZ&=oT?aRigO!W`_bF4kt2c>xV&YGJ)~pn3FnaF2v)Etz)(a*qc;XLJ%N*-N21mk_lPDuk3Zo~}AN=x1B=xoG^m?&sHF4b& zMjF}Kw?AS0g}=Y<(NMaI)pj*%!uJJ#H(t^E<%#b9Fr>S+asN=t80E7{P3uwcI#BhAHZ`X-`=T`KY*Kj zJhH}@%$n!hH5L2;SuD@DeX98IpGM0oP=swFEkTGpE_5X3-tgn)#l9RvyQk#PlF?t= zOPVvZJl~4`oygCSL;I+ICtCq07Flg(jFUCrx43^NGGmZ6&$pm|C$Z?C#x=iiY%bG6 zF*eFEHXX`UyZ>dRcLu-6=^{SP=o_heBuBG@&r+SJ%+YKgeWN>?Eu(L|($QSX<(sQ& z#L6oKMS1p4Jn=uUnjHkRf_LZS;&KLoP;C&a9UwD*xM9%ymEPx4Ba3=+M87 z>-gU68AFPHe)WvnNsi~8HP0AwpPYWiXfMN|QMFd|Y!<2xFNMisd{1Nge`d$dtK7>7 zXlg4lG6DC8X!@*Cr^UgEn|(oE)xJmtVQUSaw3$H{fDJ15u=?=jApXe6#^6Ru52R0_ znEs~CGasAK_7Xhv+M;G++cxE;8!LuqUStd53S*@vB1SyYPpO(707po?{j6~ZSwfY2 z<4b}Y)U3DBf!v_SdL!y{vKZFeu(?5ghZ_VM2izb@>nLszxGW@mzzvd4FBphh$(jHJ zFDTB|0*I4r9>2o|qSzAbCrQB&H}i6*is9lfg_Zbxc(gRpu#b@ydCjl+$ue-_To9Qj zKya*6b5?Q>B%%+-$YYM5p8s6`;yA7(_K)phHB}Zlw(ymfRu}>QaXZ3voew~;8kBbZ zQbhrbBuI7TTH@V^*AnGDF^COKHU;{wB)-6>6u0`-2;>_N9O=KpZ=KU9zzxb^0<>M; zJRFBx;r2ybg&?lJNUf>*fe!FUPmP5SE>IwxB0qdpq$qg{W;H>HTs%B{kc;R94p@p@ zxa<}GA9t@}9==E9f;wV|jU>+ta!N<)LP@lfCWQ%1b1H-W2_+850p=xGbCIEbJx&Sw zVFnEDoSI3T^BTSBsHsHXHO!Hk5zeVCl%eVe=ha5ultC~Bb>sR*#~M;@Z5JCO12rHm z9g^?;7!C1q4W1=NQC)G!va%D@v=SD~k(VFP*V1Ik zPu`d8gjy=d0he#g7*L`k(7E{DlG;T`5yS>`Wc$!zfqJ$yV4{x`x$?mil9NTk1RN$G zX2SN7!5ZQ0oKuJE7zKhP>#2TH*`73f@H{Jq)U1?Das>hXao zaw2yZ9~?9hMj?;giu)*$GQUd2eUu0{-vwXgDtwgJuk54T$bEUiS1I$OjP~mZ5$)eV zUq>7VGF*9j;M*!9@SJgjKEH~Xb61NtV%T#=h+MW6&l!Kv$5ay8&l}?}Ll{bTvz=5X z;sAN%wd!kJe+48@-HVZPL}{cAto|Tu(aC%I8#n0(tB7g+jZXT3D&jDI*HjV40Q~N+ zA|eBfTT*Vtf=6JK96d0nrubrjAtRz5xi4P^C<)x3KSh5QRCc`7)zR2npbbxC!G}f|uDPr4lAEAq^~#6CO{7vk6Q>Zpa0_ z@b^__gwR=mYR*(Du74F%GEf5i2ycnqgwwQaB??TbQC#3K6H<_{90^{BD`%LHhyygo4Z z5FP})wA0LI4GRH6oMt1EzUdZvNz{73Y~3vOhX`A-9i|yK>E2fu4CIAhC(LV61z# zKXfnOg^mVX-9l9hv!ZS$bnOCJmEOVmM@>K5Gq0}s9G|>-K2Y3wzM(H%-|4cxcZ*%` zw!5hB-Qic@dw1UOmyOZdyhAS;MVe?PU_CUao@gT!_p7jKvugSmLGd?XNPoL^MnUjx zze9h_KJ6cH4*OkHunTMmii5~+$3I^L9f3EqMeUJBRxy3hM{|n6-zbWF8WclrYbogi zZ8WqPKMRUsBaNIiG?Dx~uZfsS;MD*3^o*3ub)$`13|1F&#lh;5#uy1su)0jqWUSFC zy?0U9z99PHVKE*TM23kOSR~qxH-c3T6m_MqWyL(jsyI{xvlydB<k=Qxb z$jUl6dnL^ucjhVkQ>6xAUmL~R@kT33_>PWiBSQ&rz2dsUPy#*2VYV?AYl3ly*fS0t zlGT^!5Zbt8hvX2P4x#t5L&uA*LWjCe0t;hpZPB$!K{FvH83F&kq7`BWp>V;rVvT8Lk*4X0(lK+QFZBUn)c}_=e4*`cs2Tv#222 ztR(g~XxpT`!>AZO)e4(W<+wuS0fLo>GcE#yZD2t7wRI38iEP}wq&g<<=U`(5#^w_g z13Zc!$wKc#72sZ zxdEsS1_6HH%Uxf~5;!zUN|r%YXNH<#_v55Vo(7VzPCW`V2mJ-x~#}jnx3xc>LD}I_B zvgEEo6hfb;O${C7B%ffL0HqB+wKZ@-!V`RS!Vww8Grnt!n+AJ=hZ8gjH?D*LmDVv* z<}OEvzVZ46bv1B@<|;eyiOiOOdzxeC4GkFA&im|AB>Ek3W{FVatR5^@l?#9vak5F9dJ(WKk-+s6 zXT?1kjLG-uR{Nfh+s>e4t;cApKt^iHlkgjhdil!KRsD@ zsyyqI5-7SQB=e zvMn%fF&b4XT=C5wmR}9ZqA%Z`Q#Hcg@X(bCpsX;Pi$;YBr8LO4-Ahn60)8CZLp6-3 z{?*K^VPD4Ps$`|;0P_6Z+2YnBqehkYX4{0jO|~zdO~N-r3@I|= zvNm3d9G_EkS#tc|?&cpwWV(^AFH03KPd9!`VwNHQ5MO{8^vCJ&;((+(XBZYS>DUC8tuvM$!=DqN#eSZI1G~li_*pV=2h|tKDxJQNM8>tw$)7=xY<@P zTf8^h`p;Chb?+Hn-E7-OAzPw1TbZ?OydYbdwVj%P+F~wS+c9P_z71|E2CeJY9D79qkqy8k?a2Z(m> z8tvS9o-uMNTzL!)K1H=S$`V{C1H;Bu-pNDK_K`< z{QfR*8-a8j1Adna+(RH0Wx?xmfrkiWOJwXh(1`V;QvsFj9I*BJ7-Xi20#)N&=o#h( zG;q9{-O=9T?Uryia)Cn#WJkgIaDl@Kq#t{%FBkYqHlgf(&;u z-IL&U2qu6>A80AneNWDXyvIQmKdnHK%YTex%obbL$0&g+R(*wRsord5e%htXR%UI1 z1xCBeT;r=q4P|U|T?Gb)-hgd&CAKdB%gLjoljnQ(jbaU{^RHj2hSa6>Zd_w1YDkII z3yrQf3?_eue49o-9CVF*!|<-6q9KwNjk{z(Ejw|P${g=xo~Sa5+l!2h^dglQ>m<&? zyC^I&s$~tj6nEvy&X+sH#7~S4xrmhm!S};f%s(U@5WopjSQzNSxHkHe(DaZFDq@xz z5xsA==)2UA5rjWp3f1eQjm0-hjoO=KcxjYtdg@CRm_3g3$l3AE<059|$S{wioR7PfK<4D!xX>L=t!lXT zH``ArP2%bA&>hnWLTNlfXNNAd{=o47R|R;N7d+8f3wtHB%y}du^QVttP;k7Fn6kw9 z-wbKIP*+`OH7WpEb-7JjequE0_{qCB8$McoV2du~GslAGclgYegy+}!EFCN0BqN^& zS9sii$P$5Ou?R0St|NK^&fx`vgjwHZ#*O+`Q>2cJLE@$!08-jh! z;k669tfXG4NL+0gJaBH?8V1F-3G@raYFLF3pDEi*kWszA0Gx6utV1t+B;oXn!F}rW zXj#OBDoU*8*781qj9iCf6;d)6zJ_oL=WMZ>oA5OgAe`gr>Md}da4^<*z9QJ2n}6VD z8!n|`#c)A5dLxkx&>1UM%HWAo;Jm2mbot0eqw!ZU-w2N<-s zz-p%=kg#6(PQodB#F)JBLxgiufxEo$eun|)S5VY?={cInj`IA!P0B!J0?(;TWSsU zJqmakYiO7QFSUlo5q^m^WY15@HFS|FI=zr27W!0bo1G`Tj42xaA>bVJ1>1}X5dW5# zqJ;!zB6q1N+C(^4V(BS5%7i*dC^bbx76D!?y>^%Gcn4l;ie?ec?gPu%ORK~-`-thK zx0!1oQgWNQ0{&9lY!e0lWY&WU_in!}gvSAnZRUmVB%Iq4WAnlf6J7~$Y%?$XEa55k zHuEO*JAedUHL=aS@DYS_+hCh{;ja@;$vn217vAe2;GAr1GX*a(M+cc)Vw<_*d=dG~ zc#0mT7jfI+bc@+wH2A|;XKyfkraB~-oWQP^}LGDLG}DGpTW@Qf%*ZT?Su9$ zKHCTFYiC8_2BUAiv5K{;ldVe)E1U!|k6X)jFXG*u!~>ebU_IVGc5f3t7zVBI2I%K0rPZos@+BCZYUA(3j z)5QZJ;<`#u4^yv1ZkZ);swapxGcPT-EbD0Z8Z`dLj`rmDrNal&t#13I;t;8(B<|E+ zb|a)>BZKHvKsP`tb{OssCC&kFfYcZYKy=Fuc6tQs!FB7?7Dq5Mm!3`6tGs;}d6k4G>3UGK3MvTYC4$S(g%%M?XAO!Rwe!v=loahgUro=b z*AvW$>IY@tL>jze@D5NqqWnL%7}rIPythnI`oKf3FN+Ba03_1^Q{)1t639CNFpvv; zjX-h&fPP%y90J)d;2syalt5DTK@V_agiw;|z&dW$-2~F287RjEo+Gd!fWSAHa5Y;W ze*hq@Ie~24oNvwtkQe}`j|*H$ATLJl`jBWTAlY;$m{>+gI%+X6Ogu^H#$R5PIWY4} z=-R$kAdY@+)PWibb>L~W4AOrcZLkm>pl3C+9xK~j&&;$*TbP$g4?NV0$T2ge`bvz# zFhOz04x?V;w7D>xt{E7aA^Pkv7AVS}vOr1s-?|e_(pNIY=$%HFTJvd@$iRlgTN5>q zz^*>G*tE?n6*EEoE1vE{+l^u5<(}OR^~j&%MfR44>EfmxN-B14r_r$5E1yD6K<2mP zd*e?+U@dMTyNr5S5SW3*o#$}!m7^Z3Ky~f^?lQVur0^HJj9iMpe%@u|F}_^G-Ns#h zUN*Y_y-h}vp9d=>zfFsHU`LAN)rMpk>dthk@Z1emccu&Re+xGkZJ;333ul5yOOAHYK_$2@ z?>ZHOqAKRaEGLwQfqlv;mewXhd2o=)M7~X9iL<{Vn5dtpoXZgUkx;VGPD*GAzKt7T z6y&8FV3efhve3NUdyPF>;{4}u4#Y#PO%%M;HcRaL#u$C;(6K9hf$ashv(cDTMu5^J zHK;tO6{V27f<+)hT|-1q2Wo!B!N5VF<7mPkmG^}PV%@jKttso)!o|gA{IP?xWENoI zJ}1L)%a{zZ7CP@hd=}eHndP%44#IihlkrTWtfB>oEyf^W0GjyU(dA;Zhn zUEL^C>^i6%hz>Xeg;6+pOZ(oqBa6g&`K#V{1yzIDJg?Jt#*3QJ4;y(}WzpoYk==FU zYhadX!Nj!6KFYaq@{+TamH<^T4QD^-iUeyD^XM`UB*)N(VQ?@0(84Q>$OiG&#+jSN zh{Hzc#snXDU-9(p@R=%w=XBPH`jrxI5Ep|atB`>@Q9BG?eAX(Jl_rTYt4KRy)TrU~ zq0E-xKd zyl3?N6~Gu2Pya-jc1Uzzqa4(p|H)`l!__fvm80zav3sE}ygn!jk1Cbq9w&{O#j41^ zbFu*wE4|{t8%nSE{86YbuMP^nKSaIaqtH-)#!;ByO>g3)yOa#c*T_F~(p@=PNA2ls z9rr^2NWA%_c9%7D(pE@y0(%=FPArq0j5)f&XFE4^u~dcP(D=4B?kKB}j@ol#OBBMz z&D)QlKRXTzWhI)FeaViqTNYJ+FviwIvp8wdm!j#Nb2P)>O})*Y-dU{p!6+=3in2I; z+}O{rFzM+~rg-Kjqgw@i5@|(#=0~GfRaesij=~(;c*qH32x;TsPoRz0#)+fsbC&j3~X|MAbBAsug`-L^-a z!hz_h)N!=k0s(nLY*g&;2Ii^k2$UkJ`w(XhW&w{MAvt1e8lk+Lw(Al2sz7{k21YLs zTx9n|+}22TyI9fetdZegu>2#@`K-}EhtlVxXN_BOmEL6*@F$vpOC6|7!VTM+y3{&H!-JlZpWNbt%n*t(tOtsyk>1>2GAaXw`z)BJDXRpDGhSz zln;sDGLZxi?!!p$exzA-(f;*xXe7!jA_KY@w#IeC~qCnXo-b%N;G za1-iwxfnxOcMU*GFeZu!b^KepSMB$le%M5(x_~bulr!@=SrBf;8we(i`Gst*1Pda! z2s&Q8Rzi2$CBtZGPxckbCENgKD$dU6nc<|!r(;nU>00k~zGxzVWHDe?-8=pQ0y%-? zsJMMuNoWZVoLdMXS&RFH>sNEXQzK^7^}u;<;wKPDP;3VR&CUAqBvm7pMse234iKNz zowTNEM&Pm<3X|E7p{{U5#SRhnw?D!rz;uU7c?l zq)WA3EMMI^iJ!nZ#IJwfujvs>40$-Fnh5@%W;MmocM9U>J(gnj(kd_VmvpO}Z3mc2 zjUebMTwhAPVJB!(bKe*JI@0w$_`Z3*4gEUW4s^@Ry4{m?i^>WIy6`vYIJt3Z&GYSH zGQDV_)}1PAOynYY_j~ewqw+%i!jEcs9e`$tQ*FNQaKDaWAN34<&3)gqH*`1*k34jk zTOw<7-$^FheCs3qI)WkGh^KU!z5UtKgVT5xg-Z%@+cB)9bgt_@DE~TO3%d_~Cr^^| zppwQ)CH!i$s18;6V*W;hac0h~OWb&8w);>VQ`of^_cywn1upGxbPcmyiNDeNH!x>O zf1@369wk_NnBeg@s?IwchgLT9b*=dv7+bK^aj5Y)gvtylA?&^quF=}Zn^_T@;_x^{Kf&giThFlT}<{`>z)i zNAn4EgDTgwIz;?rIxU5^DLjQS&O4D|e+P=C-{Gr>M7)1tM0BZP<4Uo zV?EH+$HHT5Xo&c5Lf{Xi1+TZjFM5H1(DJuBUcnXNpaXN#IYbsKDAgUr6QCT_?GBcK z?1V{^0Qppa?$Aa>x`76DjF3Rc1T}NIXn?K@W594yWlPq!PZs-{A!a7fLUFCA2%W{G zsnA1QYSP?FX_AQ48s@Kf_(k-Vp*!DQ3tYi2Q4$2rf_Ql_gPS*>39R)v5@6x(CJfkv z1Zv;ntc2%77ycsQae(uvf2oEzx;vbnj*3PSPW~ggSFl-+7q?n1Gj5qdFlD@_Y_Mbt zIF46Q?tNyUKLNNlb1pKt7Nx|tweX=G;T`=E0F3q(;@@})4c1Ti=RjeQ2C!vAn%a%BIm zgT_WeqwzoASe%%iZC2O!W&Ot+D_$T+Yga^Lb@U0^FKVZxm~wW$nWYy6#M*qbIzlRb zn{VEu4~(7HshK%QlfeUcd(IUD8=IXe%!9QPP_eWq!HL^Ie<@MKHvxjh@2n=kFzXtN zN1K>!OTFic@0vh*3TbNPrska55Iw@0G3nzqCyk+> z(g%4O$UK3UYl~L-xT=gy5&x5KULQa5z$#zhyO4OSh1r4_Ub=YM_6g8p5>O>Ckl#6~ zr$DgZFafAPFyG@GNhT0qpGCrHkBgUnOYQpmL2xp_Q{qJ?q|oia zaHPEGNg2gp}=0w-lzele#5wuN(n#KlowAmPMGULfBtae?dtZ$YB4 zm6`44zx0K(i`Gq?zqX9*xR=W6(TwMQ+Evra&hA`iagCMP_sQ#Q7yUK(c`r|Io)OQ4 zP1`A!dsul?Ub97{z^t!C)H*0^d6>;9Fn^iTEYw7`fm&@ZIKL{Y>De938dv(s^y#tX zo76v+%)Z@TL0B2`6XV-?K5>`C-_mdnn=4n$Zl}IQ46akQe8_*D*@Ir+X|NBc7`$Jn zfGL=qoq|$`283xGaGg1scq6*fNgd3|3A{P?C+}qOwrkU2!Obfk*a5uaA<7?aPQ2pb zn#(I*9BxE#{pZAji??bZ__^M}f^f%<28RNG!d)_Mm{hL;O^mA=MsyLEG8!3W0SnhA zlAVR(ff_k!ZR`R$pmITE2mPSCaih{L(6RI`2FhHz+Q$Wt`<6Ap2cxQnki#)hsWx_32mOJ%yHlTk~|>T2d)fezlq{ow(La80(j4Y$mqJE5fI0$(AJx&>r+y1E5#+gZs$RfSg)LKQ8=mQ}!A1l9sjv1JwT z%u;yuk{V))Evuj-mmw=<|3S%?RlsQu5Eox656C;)I|Q*;#XPYNs6VH3%w`Lcu%H|1>Gy;LdzBoMSZ>;Z|aFwxW@UXv`iQ%6IfWH-@NQ5k zNL!p=rLMTI_@$PZc(<9TzvLIM-EIChGV^ulc#v{{uZXdD4s5TJ?Sl({@XvrvVbjhp zw1kR|XZyV2WTG0Arys+S;B2NJC68tJVDZ$S z%;Eax9Fcaf`B!4h!h6kH*}DX`v#mlyL`zR-mKP}I-)lC>ErpM%xPiW5X(`{Q;wH-qvA5ft$C7#<$Ad$3J&bXgIVgiM|Y&qp|Lgkvo)^t^u3wHoYK_13jT3Pxz zra5B9h>|nDOc?PA_q{8E8&9YQ_o&WICzLG`_qZ*-O(=1zjeAty)r3-w%*H(m`Z=LQ zf17={{s9q}rRq#=4J-~RSA6SYG9}UB&t`%S>Z0qP!Q=-m>BwrD`#ze2kO-VuU!HH_ z6j=27;Nhce`O7jU+tQ*XDl7cslquHPz*=pw&Z;TW4giZ$WsOKesJI8)J$W~&ypR@^ z4B9Bk$vodTY*jut^6gYvAuLMC#?Dscl~Ze;?-;Y%J@`&$U0buALp(t| zV#|+QX^|@=av$9A1|+vjIHC$wAZeyBSnh{3?etyt*jlbNOC5FR|Ht@PUml;>3Y;g&X;G7JNqbBTK%G{^e; zy|!7Leb8*=^*$SbgTm z9OB4Brs*0Wx&ekTpI-YtH@*;X8JO(qlYrmhh8F^g0+StZ-PMFZvNybttqcLE8(xUZ z&uiHEW@Nt2CE?T{ypY?@0w;lFtT$mf6KHBh%F3It$tghu=S|qRmuDgO*I7@snc3zi% zm}9ieXY-PSsliIUvn%1s2OmWVyz3=T6gNF)J|(gr1&y~`Jp8D6P26ta@n`plS06R6 zuet}%KLCKuqxGznon-CXJ@3?`W{Rfm6LCF}c^@)N+b6E;Xg13z&Lp?aFG%}F%XS{x`?K_JOcs5 z0<(Rzcn}S8%N^t58GdyffvS?@#6Hwb;UYQnD5QC^#bHwbCcb9ODmU{;LWwdNuu4JE zWQl-PW1WJGR&^{xHeS5$Uu7!M5B3D^S8-zf#%7IbO>fHEJ&>mI5(}q(iu4TFW-dv^ zC*{0T|1|%kiC$yObbX>O(t4Ry8`*jvxbGo60(4u08tvxtfFwYXdK1NmUzzp)&x!mT zknX{_hlBBO?;uC}sFa26?|83vMu$T(`Yu zHM!&>ki=r?{VHPC;S~V000suahLA6TFc1<)irx`*VQ>O5ogZ&{)ID=^Y<15d)i`an zO;*~g5K@PYN{zEv?ehUAI}VLvwNI&2SU3i~8XbSNW^7D6BYyl>X6%kcfmN;9*wu*vCpfnGoSCbM!J}o?dAGk%Rzcwe&z`ri z4{}%9$7)8Fs3ze>R3F(b#JL>76-e zmKiEFDu<~)Y`S@^c0$Zq56ps|T=}3f${v(B`if~>qAh)8RunTBZDU6oR$yZj0u|So z_H)I3GVKE~$823O%R^fzdey9;w)BrOD(-{n6YE!CV|!C7u(89nE3Pr^q{x1+f>4!q zs^a#TezYRd;(=hreKEa%wF+!(Ld^4mi_aAb!o@Z8jPR^T?`mA&MhUJ6`n6tXCV3Nz88)zj1fc)#5jPmGocZH?G_Z z#q5(A;_P0t4mA3#pz;7x?`!img8%-t*^UY~bH6s*^Zm!K&AX(5)>+Z>QACn~_ICFZ z^=^{Cw>EFC!%_V0f#yiYFri@d3)Elv;>_Djjp}pjogU zL^vRpgGfk5=Pq`S>kH65F5MnwL)1YD8#J}33`!#`v;_qyraIv&;B5fPw2+m-5_jfc z*hMz6HseQH;-1r05RicK&4O0NuH|snh50Jw`)U7hluSXrusQU~XMZG|>hO>`dEvcZ zw&Ab@^TLM_PP-(C)x7YDgj0Jyt0a6j;nm7;5c`SKKyJwb8wh7dA+ho{u#<4gYoVm5 z;KhP7h=va`nJ%fuQkbkhkjKGOBphq<$iR^hu5)@cun%UMf4%_&CkYnV-n?cbSg^eLI5<^gjle&_8uV8&_s=Z(d82hGpO zzF+vgNo_u{^?Nff;f1&1(rMV+%jP8=GVjrBt1UWQ z6RIgjRjyYvzGyA<%D#kuio<3P#mI--dZ|GpZarc?;?X<)_=tJ8^bcy$td`0zLVUW= zXfEzPYG&jMC76%t(cFj8HusH@f_YB)1-|*m%_)~Gf94#Bcz>ZRUwm>5Vw@d8@u%Zv zHZia5!LQ$OU|xW?9ydD>^Je`B%!~JXel%~TLcMw1%++_6T@2t7#qjPFTYSd6L1O94 zVCy+2(5yn#xwWSza=&@;^oxEy7BQu;9D@98HTc;wYdqN_HAd6@F~|uNOXc>-TY%d> zDiGQ|`PCv&c*L5*7F3b!v_^W2q5Ehq3t&PH>{4&41SE{T0fi3>28wcP;>^vCQ%dj7 z_a`pK$|rJ#a61?y)zeWo6l!ReN^4T}MoVXOg!=e-dglaXHUMYdfmc(|3Q)9dGmBK3 zHE50e2~g93X9ENv!@(2J(0a1C9L(8M7|d%;h4yHbY7w*!&m?j|D(CJT4hp-yKw;Uu z95U)gV}SwnFxEhCDEsJ^t(%W3plZEw%pn{4BmvX13gt?gLNWu3BpHE!0d}Nz1{9g4uD7G?u52 zG@>2b_}LE?i=gJ%Qp8!Ah)0JV7Dr2pNMQ`{AI@DM2^hxH@)(2Si5-;Y3)IsLqE9e( zzX5P*FRoMjoVBB4m~a}5Yd|=*Dg+A1kBQqxezM>`~dsRkeJy#DQMa7vyb~+q!oSZ=KCs#E52?Fd?am!C;M}0(! z82S^8=u+X?QoVlvlUW0=@h8>m%_q%<+=@M0wrwcJoHT2R)~C(UHLz!)BukUJoFp!a zILsmp4W=ZEgQv~<`u4`6>KSvUzQGi8PnwPN@d;w*N$3s1iv7I(-uRSxGqL4APbrD+ zm{VqFzVEf)6Hc2gAaJ-+O3Sl%gAwTv$QRg^QDXo0p?Pt3ToP zNyBHx-j;DUu~lJ64%Ff&X29CPUV$a~ucZ$+6yuUWS+;|7E3ms6TQ6?LZYc0lOB&)} z!y=Q+9vInDQgeQ*PekKc?^g!pKp3b&nVF+03B-}0wDH&#pbKIed`_wU2|^G{+S<4Z z)W~ulu?*gDD6MXdUBV~1n6QL7KNx{j=qqW(UK<@!I~`iiC@R%B-LRYDfm}sAgTBK- zm)p8haeFzFqVJH}Xoym657p{4_;4KBEf!{fleHTFOHw z4(!DSSCPqknStpGDsUF{SFWb0?J^_NzOKMe_DTiLqBij=Dpy=?62Gaywsuv_2h-ZM z4ry0YLUfrq)L&1n!2P_h0!IdE_SI84yWA{Jt-vj&|BzOJpKMk|j%-*(9xgksrq0=A z76{zCTs@t$%e18rt-x7?vgNReS4)}has!)vHHBZ7X-wN#fdd;*fnQ8N6JK%YLpxM) zNLZVC6~&d8SRH9ya6~6n;2ch>xH;6Xs(kqplPGVRKWh~@i#scZfRh8;S%F83KA|E{ zXgEMCzwye&OfN3CK6YJAHIB+Q6^=-Sghj_&i#%Z_e3-->c|j*W6!hD3=Yo~skx`1;os?@uWI z8LQnFU2|*eMO984D~3HC#ipGY27&!3`1g2!<6 zhys~uOQPEB+QH~ZtDkWji=vnM{^(FH1WD0QfLcGH4KLqbAc3Ss`N@|@w`28}qik<~ zbmyh^p~zlSzFFZ85(&44Z!a$muFWj>7m#hO`J{EZ+YR-)Xn-$eQGCPp_aaPS$;RZ#C0 zU32<^C=a2{(M_k;H@Y>pqulsGv4%yIYwW$~rbRmz-PfBGT{q$KA}VaVGs@W<8C^H^ z_oBnM`s(QRp7u?2Um;q2J3Y$9G9fCmSQ}98J19?dutlO-E83>$Nd7OPDy9#P5{<2l zj%w6LMn~r8pGL_bTv_h3OX0D1qTE3*MK?ZZVcp&_3c=qiQ6h--(M^l?T2xy>pAcm? zM@3m~S9JIm`leCQ0_US#oYSJaD`+dD>*k5*ZkF0}Q6VyYUzF_RZ==G}mEQLne2VA) z6|Sv6-&{=nSGb%0RSS{uRJe)$Mq_d9Q{lS$mTKY;Pla3Zec)5!8vLF5RJeuyLV?)w zRJc&ozOQYjcv2B7!9Eib zWJ1K70$Xg@0>+|0J#t{NPGf1uB=CP>MpzjR)7iy*Uv=fw1YOIr&`FqBD#Jl17dzb) zefL6PKTFpoNHKF@zk3snT=fpW3u@AcKAvWPNNbgypp5A0)838p#xXOz6YLrtBYGHJ z(poTH8PU_S6^^1&h^DLa&h!ee*7SGc#fsixLmv;*v#5fQRmpnV(BZD6>uz9}H;Ob^!+Zw$oR#LKcbgj~QkNwAKwK&+<#A_+2@0KDdW0#o%kGd*|kIAn=)vT&6AoPO!>fX2|VfxWeb zHZ+`m!|?IQS=q@6F9i9%4p`9%)^Jvlhy?3d#xDQDB-FI5(4u}kw{c#?2)^9?C5JvJ}QhM-k; zrLhQz=dC3otBLWX!w*vFR{WmirWYpbp5(j>lclDm98s*5TRQoA*cx}i(${IEPX_^; z-$A^}5&3lYfOW?4BUxeyYoD9sOa~ATCPF+hG+e-V5mScZn8EMXq2Yh<_cz0E4BPKg zJb^&~Ra_2LcA;1Xr#?A=!V}VuP(YP6?qb%`(F_kezyePMzHUIP}V!>a%6z-IMdYTMwh6(2ZWx>VA zvqfUsOW|PW-bF}pfCG!VJ~6A~d98P!+kgoy6)_Y)3HWre*6JeotI-2H^AMdycaQ~7 zHCUF5)ZyV)ve|KMWauFvK8;=%5YedTI76a3Yl3k{ozZ?>kLYy$GSUBVjvv0P;0Zwk zY66bf5-%PY5xzw~oG#uRfdgW8C2?RxcxGt!7l;va3gPnb8~C{y)(#@bJ{}kqv=J80 zW^^Ov5ox#1M0|z$mBbnmzFyy#E~<GjelL8TU5V}V%pK=8!a1B$<3CC`=cV-c`+S51jtArSPVh(vuDqVP4a_9GHu7Wq z-ux?^{1|_)%3}BPEovm5T!_3EPQdef?Iuf2;U>b_M^xb*>lg_>Kot?@A z?i2=YI^jf+#TGid9SJp&zz|~IaZlfBmw*vKV2LM+{JgCnJ;bm~B?tZyvy;}wz`X`qor6dIo!yGf^-KIBvDIoVsf}e zvh*)Q09=G!GbKF96J1qa#jrv|6Pt$OIqnk%3RLT(T544FDQ>TT~ z2zhT>`0-1T|9LSuE#w8Dy^ded{x$gfuj%1w`j>S?y&2&i`a3dWXhuB?5%h-R0I`FH zO80#5rsIW)KBN}&d5*uU-<%XgZ1D10_*-C_TB_Os_N_?pSd&HNC*=MOCZ2x*uuUVVD1HS zskkp_ty=3w-}Y@AZL6(a-qt!{6I29LO?+rs+wD{HE1$>!68tV-D+xr6eu%e|ABbkv^Gan7Zd8A=D zSdg@>!r@{ropQ=6I?}3TiAo@X#y@KpGK8a!bJ;7p*6rWo7G+NkuLfsI(M zX|^D+J)vz^yEJ6QGr+d(>Q`o!KGMXV2f7w&UrL*}ZEB;tz>8u(2j)XR3ubXswsn@q z4aM;z@MsS_JdnWP?DbueA|Ph@56(=%hTw6ux@kzeD_Gf~$s zTav$%DsSwld@WcYMb+6*fc?SbBAHQ8D+)>zX7u`nq%c}V%WK%VRJDUi=@0q5V(6}( z`C{VSaIMIsP!I zX5o&dfM*EAt&K;lgDFnD_ABM*9F&EF`oamIa+?aeP*>YPb)Qn1ZXl2~Dn*Ty?^x_+ zY9llEFp_@J^NRwH*A-cF3)=JAwe98}^4jIyt2dWt+PrYz$jL`vui6Q7#{d}L32O+X zeZiPc*hVNS5^dT+Lh1p}-3eb3$kW8#38Tlpj!t0LxI1CiSfIvt!V(+k?u1eTtLudA zjJ$9s+`k}fI}5x_+_o@Wrd8&M!J|6XYgn0sBLJ5Df=RHs$4N#*mWaG=5mtx&>Adc{=hsmJ*4k2T5<;5U3-kE@m>3k4Rm+ygO32Sx~`qT$P0Jv6)%QE{!!_s zUv$;`Udo$y*Yv)&(_j1M-SzL_1%R9yv-~y%f&**2z=F+NI&e zb{5-o<|^w44BSyfa?k5 zY)3ykz}*D0_i)d0fX4`=&v7hn2RQtf>#X#+A34wo1d=U-1?&K463E4Zn~?)tLm<~x z7aJJe26izH!&KcK5aBIfQ(O8=KAfD%52(EvyE7=qlBu^y6PYILs*as{OGxYQy+6;# zuL=0_%l+LPJM}$}=?NTa3;Vfl#E`Ei6Is}KNv;gN!6X{t^Ys^-KFQ07B+9{uqC&|r zIp6`nl?M({*fxgKad&E2vAh(k8hOd-rYD$;oMb+D8bA&cuykm~)C<;8D!u}5d3%Y! ztO(y4II`(7)|uv3(ZY&N;^2yKpW1WRyy*>4T>N3YJ-Pr3*qhS==jqK7pKo?v?)L)D2ka%>Z?;^dm%#GWOJ=@s$mX zS?SY&$!aD#NuFk8H7gxXym^wi{P~JGtHM{4B@)rP7et;Mj$0uwyO_kd1cN1o$%ZTK zWWsT~kgnQaN{&W6%Lv>mOj`PUD!>R#X6a#9CY;H5(kzeGL7ZgXCrP7|e=I2G%dEI{|&%;edQ~uJ0G=J|s)V6^*S{lB@9eHn28yPuxO}Mdqpgt)E zrRy!VU0LGwH9%d^RAj!2_iy}WrRiPB{2laaxO?98Q?Gjho15SY?l&(g(3ap*VUF0c z9$Vc)1}ACb)Ah!+7d%voeb!utB?6Dw2O8?VMg7;nr(T^U{&6VWMBMZmpV(_qL|?0j z7q{1-h)33j2h`m&Bi7aY{uyHTWIdGrX;0S{PrV-gRC*mbBBq9Nvc>+*-BTlJxD5LINy#axeU~dt;HJF9hV3I4dx8Mv# z=%IwrhZ91FDrh7wb-Ffi)IVZix@$^+MFa}qI9h%p#>Xm1t>Z#$z2C07=1he*oX8^R;B zmomid8^d$>TWeEzlJz|!IT_F53f5TsZgaS|Hoxi8*_*>bFQjMR+yXg*p)JJWE#WH~ ztnYx5u)gtkB=*K6ZhMdAic7bKo8Fm8PdzGP-msp&k!c8@#_>IGbSduL=EyYe3Opu? z(?aOqd~H}-V0Tx^RKv$((nk&B zw&gZRNGQKB1(C8%ICn`I^pZ?)Ma`ft8wn>V0fNSD8vMa6fRjl=ng(2RC&A~N5kZ=S z~FpsecAQJ-fX&9Wx1)*mMWjPy>o!bWa zxUGm_jW;1;U5=Pq*)1n+8L=h*y!idFbTtHP>HoH^ez(zoVyp3d_#ZgdkN-!uy8J(K zh7bLZ9P1_jk*!{!T3z2cxtx29Km9Xd-eg?loZU)F4kzCJxRbSX1SlNd!4Dx~oa>NQ z)D&{WEPTO6CgX2%~!0icSAKSIS*sfOW7^prL54o^T#-yZ&1Wa9I{NePVUjz`=yvK6NikgNcyyiGzd z2v=2dVP`Umx6Oi!;qAj+-f9~w1_``4AgLNH zd=53jomJLos$C;ob=}##!E7?)t4%*tLEqI*T7NqEITmT7fqaOr=*V>C_4rLd-%6MbhyWSQwY$ zGKdF!&BSFcfMJx(@L?V0I7p{0{3G32;cc004o^_s|8UJj52ctPa*)75p@hfWhao<> z3?k)$XFBFp#Yg7gGtkWps~|mpp}T`gZIIxJIxHwV&xcIu%qq%`!|fJ;MuE!uB5P;g z`VpBsE}*94XbF6rw6F)6TfUZ1NnV0us>>$QS5f+R?bpb+=-BV8U&|kg_UrZEqGM~+ zukVCpzZQPSemx@&{8@*S#9Iq$iBSi_^#_g}w~jYAujJ|C)k1NB#}P_?IbAeOYidD< zjRzDH149&;*~kK(AZjvzTthP(i4zCH*>{g3Cf`@MeV69~)#3(ICBb6hKKvwb_=NLy z436b;Xfkuai(BA$13R^Kr~88G$T`Ozz(}!eN2j*kXLnGO$#Uf;bqAzBx>;~n#|L&W zDWI3YFk8zjuh{ef-dDFwLUwGb`+4cbDF6}=WjJq6FB8a?;(5sd9%pj40?d5}c#c4d zso;6Z0j_3p>ut{gZuljknLx$!k^^1(41jzz0%zUX*Y6;+Mm zp({=d>YIJN+{KbD#vRB3p4V^|N`|le;lCra1a1w(@j5EyeRbWaC1<^XdX z%OWabGeR2FlCDPWB)KB1!6+Oi$WyfJM%vPBiOOzXw3slxw%*4*yL%QCr+Os!w0@i9J@0TTGAy(fL7I8Xsckpov5X{{bl ziIpSXDqU*YMUI@T1c?vmhI|9dyUNHBzd06ekg(i$kJYH$$nkJmtCy{E?WR8G=g8RQ zE}N>#{kWgeUcG%|>6x0?Tpn(duxK_pr`jfqy%pi!q4$zxQ&ra);MuH89BmDgNT z0@DLEqiOZ+{NhCTzZ+Lum`8Li59_VQ#f|04n6WIgI<`h**}VF)(kmb&DX!VkwYm7! z;ler*p788N>8BU-aaACMnFB3_y8?roVo77Z!z(VIVzHq46bqS58e1$7~Yb0q{ck$;id5!65TS-V7((>_5#l5s2rY{F@I3X z`Ktl7Ns4$ndln44REH~agxh*%4!g7`ZtY3wW*wl`iA8PeS;lCpssnYALiMMcSwPK- zMeXR>I_y$9*p;YdL`4Y^rYlwHeCcMw+U#=GW}8CQ(#_f^qIPT%Z9V%L&5Ip!eP5wM zVju~q&|-17v7@J)wei;?ZocQpuuBU>@!BpeyVg>^lD&8;R!S{qmK|`SYTJ+`1jJ`w zhJWLh|7dDJ&QjkO{=eZ^A87pbqZGBe`gHDtvw27f0Zw6ZD(8 zo`HgycXf}PDSB32??)9_l44z z>1aMl=0w8l5I#tY=96sBCS2Ahcs7ckV!lXtCh-@X4!6!dRFz-{6%M)`Bs*#KCPfKJ zbzdG{_H9xf*f`E;#z2wk&<;b-Nh=02Bg={bXnHk|QmASp@7yHSl@taRv?A3bails3 zZWpPJFNaj;9UgThb5D`#r2bu`I*5D_upreHKf`BB%z^%;VE|bUYozuSZpj+9Lh;+b zb!=KMj-K~%uJ-flz3U2U_-C3P^EqW30R1S(+k$(|*~$a};BvezxMt3G;BvezxX*mS z$w!X21^1gv377Lmj<*F*GS?8E?u@quPc}Cao<_JFZwsDczU}10@s3Qkw_dsZYUbaH zGV5qQsAu4R^`BQt$#~m(JpIe}KKjV(^WR%~%rhLF3`J(GJD~e2yu+2QGWNp^Kl!Cq zuodEGHlo)?j8wsN<$Kab*KBl&{n_4aPAycv`)x!_Lstddh^}m%T3|{?fUaumMpn5V zQn_NgL#|l$vhXk8Ty*NCxf7RvZFK>=W#32J9+@$E&w|fA!-vVqcM*UUZ$9~Kvg{YH z3Aq=ZhTeRfvmaJ$dm`nJK=T(t#4Fi6@R9eAe-K}FEodrCuimrn)FI%Ux59*aoq+%c zP);Zd?ls>byfxu+LRoOlJWY6e!sUdr;68KaP-aNDoKP0rZ*C+!k8nAmEO?T6l<+2m z%MHYWCz~UO0p6H!IiW0giaCw&Y{EIA#Jy+3efXfU@ND=B{+>P?9?)qR^(P?|64;s% zN>Z#$th9T1sgu$q4>6vcbgc*|;`ism@_B90S1p=|HRr;u(^nhRjB=!yE0{nUsjy|6ZpLwtVk+I$ zs2Po9n$f@>MVlSi;n%^BJz4iMvw%7|Qp_!VSu+Yc;Y5(=@=^uL+D^f<1_`aRCdE9! z1etb%SfQsb8w!$^zLBIq=ZzDe`=1p3ri`a+Ji^8D-M z*RS>-TzbD>ztRioQq8CI#De0$b@|OjVYh;=zpVIhjVJJG7aU@IxT8#$pO10g&R&K< zoN;>wqabocZ5;93OZgPS?bbh!>SG)${J|55%<1_KNF~h>czJVFRZrHDD*3i4eD zTwon!QCvfvWKnW4;7H-UQ*IYBIamh8f4yJk^7|Xb^W6)YbaTpKbx7_d&CK(g@&&{j z7}|{FBp4FlIPiUslPM@7IeJ@ddzR>ur8f~ zO*PH-6|3Ga*1bTVtg)+naQy}IzFpfPYkRr4I=gC5#E3TAv-iOo*Z5^?VT`PQff}#1 zYy8^g3)Z-|kfXT7>W$AD)HLsN7p}ML4YSb&7Rk5hh}*SgRz26{RIO)B_x7h4FJZVb)`7va0PhBDb`Oxm9bOcple$dAw-#2xdiHG3QXYu9#b2 zhb(TaRDDb-8|?Y9q9$VX9h&P;UG`8d@N9YJQ?eW6wkPliAkZvIB1%=nM=51o^AqMRl|amjF{nzWS&SM5-U1g0r>5k>Q6wPfNk6WM zdw2A#FQ$ZhrHBP1dIs1l-aNh+@j@^18uTh4DRE$Y_dIcJYdt-L_%wA%0|y>=BxN3dk4OJzL!0TJNTPRaZ>ado`m9&D=d> ztH*3(uD}l_k|^q^8;qOPQ7>w6uqiJy7#+}swvGnk@;m8yDKf$4CSqVGy^Hq}F}Rcd zTWx%XsOY2*r*2Nyw=c>T^Ka~1PfYHtU#vxWXZ0d6JhPprF3~*{9{@XP$Ei!8=2R`u zY|*GF&uk9EG*@5-@-!HQis4eV^{ipE#ff`ap@L1Ocwdn?+|7))m|yD^F8E}b$Tl-R z+ue+o%)YjscN8l4WGO&}=}9-AEZ?(-Z2>!l?RrnPiyetqune)XUBAW`(dG+RZIoda zupthgEYpUh$iQcsFc*irM;;&ZhLVoJ3!$StyJZT16pjEx!~yQHfo?6|PYI+@2*fZP z%x?%JlM!MV4)Ea;0I5z1Ar=QXWgwxJ7={C#M<69OAco-pUnY>U9T3A%Kn;9fbrpP_ zag?}tta_#X_1*Nok^QrQ$O!^TIVa~s1aizECI^`tB@6j6fgBxl0c36fj23sCacDHf zU@X;!vjn99o#u!fLkJ~{0mbb_3fi5@4c(;je%=OC*#ck%eTh)Z#!3|WnvF||I0tvL z4W(q=sa%n@t7p4-O9mO-In_%_`lG^}*t3x~DqRd(Zd`t0jq`RQ=OTSJ_jIXo{{BUJ zIDPt}wQ^Jf4?~K(r(U1Am;;o>gabd)JF@)823Q;Bn*JdD@w_>xmoA?-v-;>g&a;Ue zFm)qZz>vTXT);U<7XF|uDF2}g*!4pfu=$5BV9gI*z{wxFfNy^20zUnr3)uco7H~c? zj7>&120D|_+9X^E+r@S1p?kg*EN+tI!C1?CU%d)Ag^wW;=(Z>~;x)i&c@M{t8~zmGwBUym z$qk=NIOX@d#M-i3sqn9gH9)tOP?{u!@}JxC-XX$ikq-xu+c4c3!kYk&6W6l5=Q2I` z*tL4p_Tp(O^+C=%rgldNWG{jGg$@B8S#U@|GtW^CL_OTCaWn%#Ah_`z#X!{0jsMnL z$e$Vn*;mF!e832HFDmX%@RHC?b7j-mSFcxNa|9{e_8Q-@%h-)IIt&+ddwLzT%K+u|pbLJ2@C@|r{A@9` zB-}Wa-(H##jTzz{v;!GGl}iasFqQWbPIZ{Lsl0)3&ZxMl{LOyA+5V=njrqvVCx9V# zck##rNFeQt#=@T_oD(ZwdX{ft!zU^9NUm2(xg_0Fa5B?euwOZw67b~_*@Ut zpOSK507!YhsK6gULD*kngJ#y{Qyl*VeH}f)+8&<_o_2dGuE+pq4stdU>^^)}gq0TEg1q;F1hg_0N zoR6${R-3XKQuGobTb%EqX0m%Aji?m#?QEoMpA%M zr7@K8oBdz~@WQ3x!P$@15qPVYWPccZBGAlbi`SvwxlNKq9mH?>8bWdrT7*j&D?moA zf!~vd8Pf})#fa&FU)ac)wRk{JzCJU&kYPNDQ0PM2y#^mGRm35NJ6Pev2p6hwIm4GB z{2DU88NU+_u!tKFnhc49fmY0Y_$`+)_aL+ch2M=|JOYfxecP;@$26lDoPtCny+KHw zp#mchAoE)RMR+X3zfj@b4F6Sy4>4TKq(C|{4<-U!qk)<@+Ad~D>$tD4BZK@Ucx z<)RA=-dOQEa&`~iZV5>=cylKZH*WBX#U;+*jbs>u$DY_IBKWWdZwDi+!J9MzVQcWF zGwdF`;-^@Id+^Y89J?Jd!aa5zZ#j6ACNhm2Ja!HSPgbBJ!pyC~t7O<3ytPjuYz^K< zhV8){H4z{7;Em&l96ZiyIeHbcAUS%RCHCkYA*MZg`}whuRp<%kxg5OGr&&Kacx4!L zd+?S$4NQCR7V<+5-eyf4`H9}wdz08VOz$9me4}orjnDXz2mj?Ii{Rs}>W}{){Ws+L zG`&e5s?E<5TYiQYxs^A8uu+WVdg7j+>P;=1Ev>}BoAt~X9=UB*<@1_YRoQnlE~@*o zMDkDdpH!cJ3=7+NsCudD@tV{-?|lFT=>PY zw~z(Aoh5qQR^x7Rp4+Bg`0c8<_`~h`VUqjDPZdau#DBR%Z^Q5F78?aQAp6q~Xv#W? zr4oSiATYYCIDUs-koiq-aENp7#!)7j^xf}-MW0Pg#V_yF3!6bIM+%~l!yif}qdyhg zVN74p21nY7*Y4E+OoqNbNbi(?rZM>IUi^c}51eQ?SOWlIuJa|ECR{9#cx({(ny_rR zWsnXdo*l)xRr&z_7XDlhMZTcDVTe!e_axR$%vCCZJdvs7htmp9L+nFXmJiWHsR0-y zrxa(lJV+pYuleOB!%!pnuFeo-jpR#vftHU}Dc^bD8M7Zks%=M!!AQMfndaMCf!#AiVn8@ z9!E}jUa*R-qOA&`YdxW4)!Tmrsh$j(wra zGKA5>>|`uPD+B%V5pz;+QGuiNLBrX~8Y~HSaty&~%`1}b(t9@F{Q{VU;Hd`oHdG`X z)+t%lB*k9ZEm0^GFqN}guwjVHWE@oFz2@W2C%;Pgcmh2i+hw!hxsR}cAhJqkR<&klCv%m?w+(*D}OFIiJoZ5O|s z0?YXY!2#7zBS+wiy(T)`r~fQxapOD)x+UWrgs`zEoo>`DpD`u(=~rlr8;kP$^iI^E z$o-S9G$=l_=#+pw{R30GHuV;oeua%N1hDiv!zm= zJnMtW5RXQ=@`OJiGlga6z^<+#l+0Zl42FXR%F3nX77S|0?eH?s@;xT(JffO+F&huE z@me@uOSf(q97QGLDHfREXTUJI6`w5QiG6KtDe7v)tMoiktqiCJ$OBD&YGjv)y?@rP zwoR$Zm%^jQ7A?NC%!D$qBnR)HS6p)@1wHb(p*%pF2J z({E|#P&HN~V+ZO1PvUG&3w)jEb(?X|HaStpy$c+ih3{&0f$ z2oNCp4we>*sZa>h8ZZM&#>zavZ;>P-X$$jfHwxa;Igf#yOy@)RuO75>+XEz3HG%klO_`&q;fFFo(=Hn-=w=amF)ZS1y zg7$822%dU^wWQJzc~vARu?|zor$MN#h9%cSGK~6DkqA?54WwJG_tFm}DG3(tT_JJs zy8MQegKd~|UlBZXUvWd_;iNyYL@%qYRx+M{O)o^fIp3);k;H9ADlx~U?rRB9AU!cN0*|$j z4UoxX;{dVQiP-j0zI^Mq0^-Mi)$_aqYjW?tU9A5fU8=`C_T!fFK9>JCy^p0tv)?1` z?NlI@Xs&*sXCpD?Z@P31+V!or(lYD7x8NUUY`;LVXz_Qwu6%(xD6Si7+#*UA89l{@ zzw7OIv-|4r`nA$A4U}TU7NcH$`?|;9N%!k{89SR%bqfO*SO>S0_v?RA-O5QX<&LiY zhn~yJ+g<0-0RB-1%peq$zy%?5g`8Hmx-o{54>z74e)R;b2_19hQu()z(#g=QS z;Kr!_p10hHBg9m--0jvPP&Rhd+>~b-ObeswSj#wNcz1o}NgSG9sDi4^r=urTSx%N0 zJSYQ_V}{2N=yp=tN-LxizRJKKF;_u9cwEd*yclc0W3I>ZIqT?(bm?d-{PW?q;{zlKV?8r*3q57Z(1oM69^R&!eo!;C-OMO->e|6AmM zruicYj*R!7z$Tkn&5;34iQ0;f*jTYghI6ERnK+(DiaarfMYxwY2%PW8nCM1Hcw{Ve zW1R2E_&kS91^3}MC=J_v%?}KhmTC0|2EE%v4-Bz#81~f^?yFL2&EjF!7mYjX>0;<` zeW1n7Y$Hw&*Z&-OZ6O4Gu!9Fq&=U%#GZ+{YAEI0m?XguAOsW91s$>#g(v)NpGH~RN zXgJ7`KU%WD5-Gy!E0?}lu=q?%XletiLAy3V%cqL0i7nei9+FCe+?NqG1*rRx`;`CydaCr;OYKPminGiTj_|LoMXT%64E=KwcE8BK*PnlFA?ppH{o%n&bM+P?{UN=dlF+5~T*>^q=^?0b;7l0u zklv<_JV$Gx&DMdj>>>SbMz(%fZ^7TGkLazn()Qwj09SK=6EXNPJx?3bUQBvae^NtX zgC9|a4Vnn?CL3>W^?2z|Ie3?d&Xe>^ZA}{|)2qkoPq;IUK`wp@$j`Nq$SFhGlcUm0 zoOl?P#ZNqix>Z+~ecz@oFH~Qbmw{rP+FW0{xXPWT#C}<_tOw;otQ|2MhT3E7O?(TM!YX)w`&zr)`OTw|AcyUjo5)JYT(8q8H*beX4#X_nMoh>es8iDh-Ys z&z4vwYAXW^U zu3znAV8?X5V`S(2o5Qr}fd_fm{D2HFNh`>G!~Fu-w|52JO_z5wNqzWeSV=xk;1$J> z+arz~-0xMpqJKd~pcD2=Hh`Zrl>DCG6~B1s%f%0FX^aRAhrvNwQc%wq>XCs471Vpc zcU(kNx+A}vjKkaRvAR*=qr|B?p_Bi$LF)qTOQM{Ir0Fqq&Z`N zpeJ}*gDnwJ=80sOXSw27SpML?BsawVhhh19QD(A-YSK`S20iWZm>++1W{9QM+Yz4! zJ%9WIY*Kop=CD>+RUz7?kF39sOyyUbGuGMt%Bx+RsY)8Re$HxWJjN1r2{S!uK!n(j-bh$;m5?Wv3W3ogHtqHGIhxDp;V(M-?MYl%>@vCL%6MH>!h2hgCoOb4D*!B zmb~d8&Lmzp@x|kNu%^`SsP)Es{pYqio*(LXa;2avB{Rd^xWAOy;2itayP0_iQjHx? z*AQcqEH+d~iVvV2o{k<4LkKP0_{`19mI%TpCnL;KPgY-wc*ZUTihuj&>kYfV(@Qx} zLI!YMDyt)h1<%J>sUElL9r_MtPr<|!Z5Qaju4T~%I5LGfzE8F!0-o$*{8$D)?P9cP z6{QBCj{irq`JXLLn-6H*-OiS5__41@25$3)=9V6pL;EG6n8QdmuEA>eZ&qM-A z=FzP;ZlwzPETN?0Xu0+&8~4P+fYOT}HE3`JR=A67Tzd0<-o{-`D9>8B4OMv8ylH_b z*Wo~)J_A>m+#4~(4)A#b=~EJ9A{>mW^p8A(9EnNy-P2)B_l3Grp=MAmcwq!Nc;Xk` zn>ThT)IioC#+FmpKeulrZg0}3RwO$QQ&CN2OeI`)Ih9L?U&^VBFswBVkE)X`WLRpR z)k8AX_nd)NvbUIw+Eqxl(UokiN`^I9B^lpJp-o&nA#O58OMP`MCOWLSgndI!E3mgswv|o18gPK_G4Zx@Xhqi2w!xl(Q+} zyx{?I^hJFEeGaTG48-{|fVDC?K9;@eCtN_f% zhxKf6Y$=45T&#e|GO#heg-+LvFY9AixYX%7`?B6S^1*s3r4iHb2M+Ed+AOyZe35hnE40`4;W>qr~IdbocvN0y${zejoP{ zfHc*7{(isZ6}?x4s4T{5%^^Zq9q^PK;AaGKv7u}SIQX!IiHnN^977-{Au8kmrx6%+ zf~w}*DgrO#EJQV(N&FU}Y!Jl39pJ|V#;<`h1af9$EXF6^l`x=7SFg~2>rE@4!z*rJ zU%t3#m412tx+XZ%y!c02M~SWhihluA{{mc{_CUl~~r)Z9euxCmbmX3>a-^UdOWBx^K~FD
VUnz}0{lXDWTf!AstV%GL~&X8 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¥2M&rDef(~V#= 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

+6y5I69#ghF8$JX9n3Eh${asA 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

*~nY--&At)GjM5_u)} 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 MvW)8YnmzLW0B(eqx&QzG delta 1157678 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�D)&P&;7t*~EvGic*12Gpi4Jn0m�JDg9N&Ccn7rsf-A={n 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%0A^L zbS1Laz1h2)h3pRb$zAK!xp#kT-L`5wR2>}zXbfFlNlk1|9vT7 z$7r+W558+B4+^AU&ranRTJ*5AMuXsk2X~Lf(o_p%o+7Ct8TlOZJmn7%CO@Opsa=DStZAsgMFF+6-AHy!z0sB_6n&t7jf>@!NeV zCUr9Yv#9Qy_tMMPy9nMF-MJw(3iQRKX8*6O%uc)xX+P`zjqPDL5F~&UO+tpt*iV|2f%m|HHkmbT>$&{?@9IJUd$<|> zj_ESAh$O>y?c1(>JG5^HefzAage5%Uq7)i`Ujh}E>QBdONACNFUe01N6-TNc=_DJJfd?n{C1pg8Wrf%$QPbQo+Mim zpB?Th37CL|77x-`03DE{DPo)*Sn2pSL24M6^X-+Sb{71GOvR=z zK4{&@RFB?EOrL(xn$C3m{e61(iTAhY-6P(&(K|V+F_pA2t)~x2c`5TMddC(Kyxg$@ zKP`IU^1%4Y7}hrS!?hlds;zl(vpTnvC$|gCI+8Gf`HJMj3W6~!HK8m3wv0}<$Uvfq z2JG)nCwHM1{LUNZBKHY-De60~1Bq*4(qjskXkWt{`j(Fx9ZWb&nFP|QjijSg#B<tQllosxtMAo{eC#e`GVYsh>rIKT&tu=P{7_s4#nZjsDhoFiaau^Wmf ziz{}R96uMaEBku7Yv_FgwAll_mxi7Nbo|JS=<6fscLb~g{Zi`o|LL+doXGAm9*$d>SG6V+*E66Z#J5M5yBckGG+* z(OA)Oh_yvwi&b7Q%o44CjuC}y>HtqUQOGK*l0y2QQ|Mpjd73Dk0EOs|_xwNX{Rezh z#ri*vXV0c>vPm}moIQKaZWc(R1w^{QBKCU`I~Eia5z(tyuh*7;U<6M9ett|9~l z7ZoKaLWC$mQ6n`7NPqwVQ2_(|-p|b0l7bDspX=X0@-jQmGtcxnQ=WOs1M*E2bKTU& zi5(-r#I)7T4RwsKi^EP7T*r@8w&DS~uY_OyLAiDE>)EcP%VNS^DXt`+l%O@74f#1e zDIQ|sA+>U2qaKt`Sqm}${FBhHS^Kt&75xhr%+qe~u7Am$OwvZh>v~wej9v}deS_t% z2+`#cc?ysD`ce4<2^co{3Hi#1(ziY(#y{KrggjrGmB_|EDfg6yyVD^ve1 z4sl%#<%D`ZBE)Yx|rDB8QC=L=O8V@Ep9BiE_3Hl`0=8-}X`+2&ywu%&G2 zi|C`JY{!f81YfTjL-pKC^@eKBOL9{hs?T4NuTZd=;;@5TOR40Jro)WlBAbyIxfa9a zPa7DyAurV*xtC-$A(=9%klZn@WLJz}D&I7sP65fHfMi~Pci9NpZ9=WvyevB(}IWy^So zAKFN+bm3V=YV$UER&L&Q~{A~&}jAgTnS>Ny2N0}0OxCMQ8VB}lgQ(TvG#em{Nco7Z4E_tj#Ep zo5Td=XpLbz3uHHYrasx=fdMG&!~nt6~lQU~5h@;q1ocEkj&jtkPRRKDLK?#s|{g!V?TM?9)DwxtwYY zE!9HUPUs0WBbG0Y%Oq?U&=Z1UkTKxgm;!WtJ{SGPL8$r|Rr9I(7_mN8AEO-sRUc@_ zx+Dk5r|skdrOSP~K0X=JY}R(Bd>t)(un?fIzHiGxx;~G*EgCT-E+Mt0PuHhjBf!e7 z)d*^7nTd6JSso`H`ak+gJ|IcrB$`#f_LXcTsuZI7jjv=c5vCI1@Ayhi6S0Gcf8{Hg zMsmeE5&f>O#4qOk7ye58qSF71uf!N|-&f)n}Muf(XD?<+B4f5%sH=zsE+?D{|Y zN>)wg>l!BEuYDz75*7cJe(NhC!sOrimDCV1-zI+LE15C{MEq0wU0=zCz2rCc5@W!9 zU&;B}OLqNFzLKHZ|ILZ3Z~`V_JWcCg`%0D&6+cM*##geM2>IvqJNA-tB36E5FF8U) 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

OQ-xFlYo0a_U1P-#lc5gWJ|;jSq323 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≻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�SU%F}3Hlc}572XLRFvPC2Mg3!?IH~whYIo~ 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 B7(M_1 diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/wasm.worker-Bj4v8ZR2.js b/crates/rocket-sense-server/static/subtr-actor/assets/wasm.worker-Bj4v8ZR2.js deleted file mode 100644 index 5e7d7d50..00000000 --- a/crates/rocket-sense-server/static/subtr-actor/assets/wasm.worker-Bj4v8ZR2.js +++ /dev/null @@ -1 +0,0 @@ -(function(){"use strict";function ge(e,t,n){const r=G(e,c.__wbindgen_malloc),o=w,a=c.get_replay_frames_data_json_with_progress(r,o,t,Z(n)?4294967297:n>>>0);if(a[3])throw V(a[2]);var i=W(a[0],a[1]).slice();return c.__wbindgen_free(a[0],a[1]*1,1),i}function be(e){const t=G(e,c.__wbindgen_malloc),n=w,r=c.validate_replay(t,n);if(r[2])throw V(r[1]);return V(r[0])}function ye(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(I(t,n))},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=L(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=w;O().setInt32(t+4,a,!0),O().setInt32(t+0,o,!0)},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var a=Z(o)?0:L(o,c.__wbindgen_malloc,c.__wbindgen_realloc),i=w;O().setInt32(t+4,i,!0),O().setInt32(t+0,a,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(I(t,n))},__wbg_call_4708e0c13bdc8e95:function(){return K(function(t,n,r){return t.call(n,r)},arguments)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(I(t,n))}finally{c.__wbindgen_free(r,o,1)}},__wbg_log_d095c16a726a937c:function(t,n){console.log(I(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(W(t,n))},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return K(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=L(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=w;O().setInt32(t+4,a,!0),O().setInt32(t+0,o,!0)},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return I(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=c.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function pe(e){const t=c.__externref_table_alloc();return c.__wbindgen_externrefs.set(t,e),t}function W(e,t){return e=e>>>0,S().subarray(e/1,e/1+t)}let x=null;function O(){return(x===null||x.buffer.detached===!0||x.buffer.detached===void 0&&x.buffer!==c.memory.buffer)&&(x=new DataView(c.memory.buffer)),x}function I(e,t){return e=e>>>0,we(e,t)}let E=null;function S(){return(E===null||E.byteLength===0)&&(E=new Uint8Array(c.memory.buffer)),E}function K(e,t){try{return e.apply(this,t)}catch(n){const r=pe(n);c.__wbindgen_exn_store(r)}}function Z(e){return e==null}function G(e,t){const n=t(e.length*1,1)>>>0;return S().set(e,n/1),w=e.length,n}function L(e,t,n){if(n===void 0){const s=D.encode(e),f=t(s.length,1)>>>0;return S().subarray(f,f+s.length).set(s),w=s.length,f}let r=e.length,o=t(r,1)>>>0;const a=S();let i=0;for(;i127)break;a[o+i]=s}if(i!==r){i!==0&&(e=e.slice(i)),o=n(o,r,r=i+e.length*3,1)>>>0;const s=S().subarray(o+i,o+r),f=D.encodeInto(e,s);i+=f.written,o=n(o,r,i,1)>>>0}return w=i,o}function V(e){const t=c.__wbindgen_externrefs.get(e);return c.__externref_table_dealloc(e),t}let R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});R.decode();const he=2146435072;let j=0;function we(e,t){return j+=t,j>=he&&(R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),R.decode(),j=t),R.decode(S().subarray(e,e+t))}const D=new TextEncoder;"encodeInto"in D||(D.encodeInto=function(e,t){const n=D.encode(e);return t.set(n),{read:e.length,written:n.length}});let w=0,c;function ke(e,t){return c=e.exports,x=null,E=null,c.__wbindgen_start(),c}async function xe(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Ae(e){if(c!==void 0)return c;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-Xy9_Ya42.wasm",self.location.href).href,self.location.href));const t=ye();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await xe(await e,t);return ke(n)}const q="octane",ve={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Oe={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Se(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Te=Se([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function J(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Q(e){if(!e)return null;switch(J(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function ee(e){return e?Oe[J(e)]??null:null}function Ie(e){return Q(e)??ee(e)}function Ee(e){return ve[e]}function H(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t))}}}function De(e){const t=Q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const i=Te[n];if(i)return i}const r=ee(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return q;const a=[];for(const[i,s]of Object.entries(o))a.push(i),H(s,a);for(const i of a){const s=Ie(i);if(s)return s}return q}function k(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function B(e,t){return Math.max(0,e-t)}function te(e){return new Map(e.map(t=>[t.id,t]))}const y=70,ne=73,Be=3072,Pe=4096,Ne=1792,Re=4184,ze=940,Me=3308,Fe=2816,re=3584,Ce=2484,Le=1788,Ve=2300,je=2048,He=1036,Ue=1024,Ye=1024,$e=4240,oe=34;function z(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function M(e,t,n,r,o){z(e,-t,n,r,o),z(e,t,n,r,o)}function U(e,t,n,r,o){z(e,t,-n,r,o),z(e,t,n,r,o)}function T(e,t,n,r,o){M(e,t,-n,r,o),M(e,t,n,r,o)}function Xe(){const e=[];return U(e,0,$e,y,"small"),T(e,Ne,Re,y,"small"),T(e,Be,Pe,ne,"big"),T(e,ze,Me,y,"small"),U(e,0,Fe,y,"small"),T(e,re,Ce,y,"small"),T(e,Le,Ve,y,"small"),T(e,je,He,y,"small"),U(e,0,Ye,y,"small"),M(e,re,0,ne,"big"),M(e,Ue,0,y,"small"),e}function Y(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function We(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ke(e){let t=null;for(const n of e){const r=Y(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ze(e,t,n,r){const o=te(t),a=new Map;for(const l of e.boost_pad_events??[]){if(Y(l.kind)===null){r?.advance();continue}const u=a.get(l.pad_id);u?u.push(l):a.set(l.pad_id,[l]),r?.advance()}const i=e.boost_pads;if(!i||i.length===0)return r?.advance(oe),Xe();const s=[...i].sort((l,d)=>l.index-d.index),f=new Array(s.length);for(let l=0;l=72?"big":"small"),p=b.sort((_,h)=>_.time-h.time),m=new Array(p.length);for(let _=0;_=0?e.frame:null}function Ge(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=$(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function qe(e,t){return`bookmark:${$(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Je(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const a=Ge(r,e);return a===null?[]:[{id:qe(r,o),description:r.description,frame:$(r),time:B(a,t)}]})}function Qe(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const A={distance:270,height:100,pitch:-4,fov:110},et=.005,tt=Number.POSITIVE_INFINITY,nt=!0,rt=.15,ot=10,at=.1,it=10;function ae(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function ie(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function se(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ce(e,t){const n=se(se(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function st(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:ie(t.rotation)}}function le(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function ue(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function de(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ct={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function lt(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ct};const t=e.Data.rigid_body,n=ie(t.rotation),r=n?ae(ce({x:1,y:0,z:0},n)):null,o=n?ae(ce({x:0,y:0,z:1},n)):null,a=e.Data.camera,i=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:ue(a?.pitch),cameraYaw:ue(a?.yaw),throttle:le(i?.throttle),steer:le(i?.steer),dodgeImpulse:de(i?.dodge_impulse),dodgeTorque:de(i?.dodge_torque)}}function ut(e){return e.position!==null}function dt(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=P(t[r].position);for(let a=r+1;aat){o=P(s.position);continue}if(ft(o,s.position)>it){o=P(s.position);continue}const u={x:(i.linearVelocity.x+s.linearVelocity.x)/2,y:(i.linearVelocity.y+s.linearVelocity.y)/2,z:(i.linearVelocity.z+s.linearVelocity.z)/2},b={x:o.x+u.x*d,y:o.y+u.y*d,z:o.z+u.z*d},g=(a-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:b.x*(1-g)+s.position.x*g,y:b.y*(1-g)+s.position.y*g,z:b.z*(1-g)+s.position.z*g},s.position=P(o)}}function _t(e){return{motionSmoothing:e.motionSmoothing??nt,smoothingBlendFactor:e.smoothingBlendFactor??rt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??ot)}}function _e(){return typeof performance>"u"?Date.now():performance.now()}function gt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((i,[,s])=>i+s.frames.length,0),r=e.boost_pads?.length??oe,o=e.boost_pad_events?.length??0,a=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,a)].reduce((i,s)=>i+s,0)}function bt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=gt(e),o=bt(e);let a=0,i=0,s=-1,f=-1,l=_e();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,u=n.progressReportMinDelta??et,b=Math.max(1,n.progressReportFrameInterval??tt),g=()=>{if(!t)return!1;const m=Math.max(0,Math.min(1,a/r));if(m<=s)return!1;const h=i-f>=b;return m>=1||m-s>=u||h?(s=m,f=i,t(m,{progress:m,processedFrames:Math.min(i,o),totalFrames:o,processedUnits:a,totalUnits:r}),!0):!1},p=(m=!1)=>{const _=_e();return!m&&_-lr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=wt(e?.stats);return{fov:v(t,"CameraFOV")??A.fov,height:v(t,"CameraHeight")??A.height,pitch:v(t,"CameraPitch")??A.pitch,distance:v(t,"CameraDistance")??A.distance,stiffness:v(t,"CameraStiffness")??A.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??A.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??A.transitionSpeed}}function xt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const a of o)r.set(a.name,a),a.remote_id&&n.set(k(a.remote_id),a),t?.advance();return{byId:n,byName:r}}function At(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(k(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function vt(e,t){const n=new Set(e.meta.team_zero.map(f=>f.name)),r=new Set(e.meta.team_one.map(f=>f.name)),o=xt(e,t),a=At(e),i=[];let s=0;for(const[f,l]of e.frame_data.players){const d=new Array(l.frames.length);let u;for(let m=0;mt.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Tt(e,t,n){const r=e.player?k(e.player):null,o=r?t.get(r)?.name??r:null,a=o?`${o} scored`:"Goal";return{id:X("goal",e.frame,r??"team"),time:B(e.time,n),frame:e.frame,kind:"goal",label:a,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function It(e,t,n){const r=k(e.player),o=t.get(r)?.name??r,a=e.kind.toLowerCase(),i=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:X(a,e.frame,r),time:B(e.time,n),frame:e.frame,kind:a,label:`${o} ${i}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Et(e,t,n){const r=k(e.attacker),o=k(e.victim),a=t.get(r),i=t.get(o);return{id:X("demo",e.frame,`${r}:${o}`),time:B(e.time,n),frame:e.frame,kind:"demo",label:`${a?.name??r} demoed ${i?.name??o}`,shortLabel:"D",playerId:r,playerName:a?.name??r,secondaryPlayerId:o,secondaryPlayerName:i?.name??o,location:e.victim_location,isTeamZero:a?.isTeamZero??null}}function Dt(e,t,n,r,o){const a=te(t),i=[];for(const s of e.goal_events??[])i.push(Tt(s,a,r)),o?.advance();for(const s of e.player_stat_events??[])i.push(It(s,a,r)),o?.advance();for(const s of e.demolish_infos??[])i.push(Et(s,a,r)),o?.advance();for(const s of n)i.push(Qe(s));return i.length===0&&o?.advance(),St(i)}function Bt(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=pt(e,n),a=vt(e,n),i=Ot(e,n),s=_t(t);fe(o,i,s);for(const u of a)fe(o,u.frames,s);const f=Ze(e,a,r,n),l=Je(e,r,n),d=Dt(e,a,l,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:i,boostPads:f,players:a,tickMarks:l,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(u=>u.name),teamOneNames:e.meta.team_one.map(u=>u.name)}}function F(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,F(n)]));if(Array.isArray(e))return e.map(t=>F(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=F(r);return t}return e}async function Pt(){const e=Ae;typeof e=="function"&&await e()}function N(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Pt();const t=new Uint8Array(e.data.bytes);N({type:"progress",progress:{stage:"validating",progress:0}});const n=F(be(t));if(!n.valid)throw new Error(n.error??"Replay validation failed");const r=ge(t,s=>{N({type:"progress",progress:s})},e.data.reportEveryNFrames);N({type:"progress",progress:{stage:"normalizing",progress:0}});const o=JSON.parse(new TextDecoder().decode(r)),a=Bt(o,{motionSmoothing:e.data.motionSmoothing,smoothingBlendFactor:e.data.smoothingBlendFactor,smoothingAnchorInterval:e.data.smoothingAnchorInterval,progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(s){N({type:"progress",progress:{stage:"normalizing",progress:s}})}}),i=new TextEncoder().encode(JSON.stringify(a));self.postMessage({type:"done",rawBuffer:r.buffer,replayBuffer:i.buffer},[r.buffer,i.buffer])}catch(t){N({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/wasm.worker-zm5sJFWS.js b/crates/rocket-sense-server/static/subtr-actor/assets/wasm.worker-zm5sJFWS.js new file mode 100644 index 00000000..1f671e38 --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/assets/wasm.worker-zm5sJFWS.js @@ -0,0 +1,2 @@ +(function(){"use strict";function ge(e,t,n){const r=q(e,c.__wbindgen_malloc),o=p,a=c.get_replay_frames_data_json_with_progress(r,o,t,v(n)?4294967297:n>>>0);if(a[3])throw Y(a[2]);var i=H(a[0],a[1]).slice();return c.__wbindgen_free(a[0],a[1]*1,1),i}function ye(e){const t=q(e,c.__wbindgen_malloc),n=p,r=c.validate_replay(t,n);if(r[2])throw Y(r[1]);return Y(r[0])}function pe(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(E(t,n))},__wbg_Number_04624de7d0e8332d:function(t){return Number(t)},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(t,n){const r=n,o=typeof r=="bigint"?r:void 0;y().setBigInt64(t+8,v(o)?BigInt(0):o,!0),y().setInt32(t+0,!v(o),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(t){const n=t,r=typeof n=="boolean"?n:void 0;return v(r)?16777215:r?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(t,n){const r=U(n),o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(t,n){return t in n},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(t){return typeof t=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(t){return typeof t=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(t){const n=t;return typeof n=="object"&&n!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(t){return t===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(t,n){return t===n},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(t,n){return t==n},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(t,n){const r=n,o=typeof r=="number"?r:void 0;y().setFloat64(t+8,v(o)?0:o,!0),y().setInt32(t+0,!v(o),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var a=v(o)?0:M(o,c.__wbindgen_malloc,c.__wbindgen_realloc),i=p;y().setInt32(t+4,i,!0),y().setInt32(t+0,a,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(E(t,n))},__wbg_call_389efe28435a9388:function(){return D(function(t,n){return t.call(n)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return D(function(t,n,r){return t.call(n,r)},arguments)},__wbg_done_57b39ecd9addfe81:function(t){return t.done},__wbg_entries_58c7934c745daac7:function(t){return Object.entries(t)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(E(t,n))}finally{c.__wbindgen_free(r,o,1)}},__wbg_get_9b94d73e6221f75c:function(t,n){return t[n>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return D(function(t,n){return Reflect.get(t,n)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(t,n){return t[n]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(t){let n;try{n=t instanceof ArrayBuffer}catch{n=!1}return n},__wbg_instanceof_Map_53af74335dec57f4:function(t){let n;try{n=t instanceof Map}catch{n=!1}return n},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(t){let n;try{n=t instanceof Uint8Array}catch{n=!1}return n},__wbg_isArray_d314bb98fcf08331:function(t){return Array.isArray(t)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(t){return Number.isSafeInteger(t)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(t){return t.length},__wbg_length_35a7bace40f36eac:function(t){return t.length},__wbg_log_f1a1b5cd3f9c7822:function(t,n){console.log(E(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(t){return new Uint8Array(t)},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(H(t,n))},__wbg_next_3482f54c49e8af19:function(){return D(function(t){return t.next()},arguments)},__wbg_next_418f80d8f5303233:function(t){return t.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(t,n,r){Uint8Array.prototype.set.call(H(t,n),r)},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return D(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg_value_0546255b415e96c1:function(t){return t.value},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return E(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=c.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function he(e){const t=c.__externref_table_alloc();return c.__wbindgen_externrefs.set(t,e),t}function U(e){const t=typeof e;if(t=="number"||t=="boolean"||e==null)return`${e}`;if(t=="string")return`"${e}"`;if(t=="symbol"){const o=e.description;return o==null?"Symbol":`Symbol(${o})`}if(t=="function"){const o=e.name;return typeof o=="string"&&o.length>0?`Function(${o})`:"Function"}if(Array.isArray(e)){const o=e.length;let a="[";o>0&&(a+=U(e[0]));for(let i=1;i1)r=n[1];else return toString.call(e);if(r=="Object")try{return"Object("+JSON.stringify(e)+")"}catch{return"Object"}return e instanceof Error?`${e.name}: ${e.message} +${e.stack}`:r}function H(e,t){return e=e>>>0,I().subarray(e/1,e/1+t)}let A=null;function y(){return(A===null||A.buffer.detached===!0||A.buffer.detached===void 0&&A.buffer!==c.memory.buffer)&&(A=new DataView(c.memory.buffer)),A}function E(e,t){return e=e>>>0,ke(e,t)}let B=null;function I(){return(B===null||B.byteLength===0)&&(B=new Uint8Array(c.memory.buffer)),B}function D(e,t){try{return e.apply(this,t)}catch(n){const r=he(n);c.__wbindgen_exn_store(r)}}function v(e){return e==null}function q(e,t){const n=t(e.length*1,1)>>>0;return I().set(e,n/1),p=e.length,n}function M(e,t,n){if(n===void 0){const s=N.encode(e),m=t(s.length,1)>>>0;return I().subarray(m,m+s.length).set(s),p=s.length,m}let r=e.length,o=t(r,1)>>>0;const a=I();let i=0;for(;i127)break;a[o+i]=s}if(i!==r){i!==0&&(e=e.slice(i)),o=n(o,r,r=i+e.length*3,1)>>>0;const s=I().subarray(o+i,o+r),m=N.encodeInto(e,s);i+=m.written,o=n(o,r,i,1)>>>0}return p=i,o}function Y(e){const t=c.__wbindgen_externrefs.get(e);return c.__externref_table_dealloc(e),t}let z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});z.decode();const we=2146435072;let $=0;function ke(e,t){return $+=t,$>=we&&(z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),z.decode(),$=t),z.decode(I().subarray(e,e+t))}const N=new TextEncoder;"encodeInto"in N||(N.encodeInto=function(e,t){const n=N.encode(e);return t.set(n),{read:e.length,written:n.length}});let p=0,c;function xe(e,t){return c=e.exports,A=null,B=null,c.__wbindgen_start(),c}async function Ae(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function ve(e){if(c!==void 0)return c;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",self.location.href).href,self.location.href));const t=pe();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await Ae(await e,t);return xe(n)}const J="octane",Se={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Oe={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Ie(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Te=Ie([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function Q(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function ee(e){if(!e)return null;switch(Q(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function te(e){return e?Oe[Q(e)]??null:null}function Ee(e){return ee(e)??te(e)}function Be(e){return Se[e]}function X(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),X(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),X(r[1],t))}}}function De(e){const t=ee(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const i=Te[n];if(i)return i}const r=te(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return J;const a=[];for(const[i,s]of Object.entries(o))a.push(i),X(s,a);for(const i of a){const s=Ee(i);if(s)return s}return J}function x(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function P(e,t){return Math.max(0,e-t)}function ne(e){return new Map(e.map(t=>[t.id,t]))}const h=70,re=73,Ne=3072,Pe=4096,Fe=1792,Re=4184,Me=940,ze=3308,Ce=2816,oe=3584,je=2484,Le=1788,Ve=2300,Ue=2048,He=1036,Ye=1024,$e=1024,Xe=4240,ae=34;function C(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function j(e,t,n,r,o){C(e,-t,n,r,o),C(e,t,n,r,o)}function W(e,t,n,r,o){C(e,t,-n,r,o),C(e,t,n,r,o)}function T(e,t,n,r,o){j(e,t,-n,r,o),j(e,t,n,r,o)}function We(){const e=[];return W(e,0,Xe,h,"small"),T(e,Fe,Re,h,"small"),T(e,Ne,Pe,re,"big"),T(e,Me,ze,h,"small"),W(e,0,Ce,h,"small"),T(e,oe,je,h,"small"),T(e,Le,Ve,h,"small"),T(e,Ue,He,h,"small"),W(e,0,$e,h,"small"),j(e,oe,0,re,"big"),j(e,Ye,0,h,"small"),e}function K(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function Ke(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ze(e){let t=null;for(const n of e){const r=K(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ge(e,t,n,r){const o=ne(t),a=new Map;for(const u of e.boost_pad_events??[]){if(K(u.kind)===null){r?.advance();continue}const l=a.get(u.pad_id);l?l.push(u):a.set(u.pad_id,[u]),r?.advance()}const i=e.boost_pads;if(!i||i.length===0)return r?.advance(ae),We();const s=[...i].sort((u,d)=>u.index-d.index),m=new Array(s.length);for(let u=0;u=72?"big":"small"),w=g.sort((_,k)=>_.time-k.time),f=new Array(w.length);for(let _=0;_=0?e.frame:null}function qe(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=Z(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function Je(e,t){return`bookmark:${Z(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Qe(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const a=qe(r,e);return a===null?[]:[{id:Je(r,o),description:r.description,frame:Z(r),time:P(a,t)}]})}function et(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const S={distance:270,height:100,pitch:-4,fov:110},tt=.005,nt=Number.POSITIVE_INFINITY,rt=!0,ot=.15,at=10,it=.1,st=10;function ie(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function se(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function ce(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ue(e,t){const n=ce(ce(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function ct(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:se(t.rotation)}}function le(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function de(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function fe(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ut={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function lt(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ut};const t=e.Data.rigid_body,n=se(t.rotation),r=n?ie(ue({x:1,y:0,z:0},n)):null,o=n?ie(ue({x:0,y:0,z:1},n)):null,a=e.Data.camera,i=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:de(a?.pitch),cameraYaw:de(a?.yaw),throttle:le(i?.throttle),steer:le(i?.steer),dodgeImpulse:fe(i?.dodge_impulse),dodgeTorque:fe(i?.dodge_torque)}}function dt(e){return e.position!==null}function ft(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=F(t[r].position);for(let a=r+1;ait){o=F(s.position);continue}if(_t(o,s.position)>st){o=F(s.position);continue}const l={x:(i.linearVelocity.x+s.linearVelocity.x)/2,y:(i.linearVelocity.y+s.linearVelocity.y)/2,z:(i.linearVelocity.z+s.linearVelocity.z)/2},g={x:o.x+l.x*d,y:o.y+l.y*d,z:o.z+l.z*d},b=(a-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:g.x*(1-b)+s.position.x*b,y:g.y*(1-b)+s.position.y*b,z:g.z*(1-b)+s.position.z*b},s.position=F(o)}}function bt(e){return{motionSmoothing:e.motionSmoothing??rt,smoothingBlendFactor:e.smoothingBlendFactor??ot,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??at)}}function be(){return typeof performance>"u"?Date.now():performance.now()}function gt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((i,[,s])=>i+s.frames.length,0),r=e.boost_pads?.length??ae,o=e.boost_pad_events?.length??0,a=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,a)].reduce((i,s)=>i+s,0)}function yt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function pt(e,t,n={}){const r=gt(e),o=yt(e);let a=0,i=0,s=-1,m=-1,u=be();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,l=n.progressReportMinDelta??tt,g=Math.max(1,n.progressReportFrameInterval??nt),b=()=>{if(!t)return!1;const f=Math.max(0,Math.min(1,a/r));if(f<=s)return!1;const k=i-m>=g;return f>=1||f-s>=l||k?(s=f,m=i,t(f,{progress:f,processedFrames:Math.min(i,o),totalFrames:o,processedUnits:a,totalUnits:r}),!0):!1},w=(f=!1)=>{const _=be();return!f&&_-ur===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function xt(e){const t=kt(e?.stats);return{fov:O(t,"CameraFOV")??S.fov,height:O(t,"CameraHeight")??S.height,pitch:O(t,"CameraPitch")??S.pitch,distance:O(t,"CameraDistance")??S.distance,stiffness:O(t,"CameraStiffness")??S.stiffness,swivelSpeed:O(t,"CameraSwivelSpeed")??S.swivelSpeed,transitionSpeed:O(t,"CameraTransitionSpeed")??S.transitionSpeed}}function At(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const a of o)r.set(a.name,a),a.remote_id&&n.set(x(a.remote_id),a),t?.advance();return{byId:n,byName:r}}function vt(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(x(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function St(e,t){const n=new Set(e.meta.team_zero.map(m=>m.name)),r=new Set(e.meta.team_one.map(m=>m.name)),o=At(e,t),a=vt(e),i=[];let s=0;for(const[m,u]of e.frame_data.players){const d=new Array(u.frames.length);let l;for(let f=0;ft.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Tt(e,t,n){const r=e.player?x(e.player):null,o=r?t.get(r)?.name??r:null,a=o?`${o} scored`:"Goal";return{id:G("goal",e.frame,r??"team"),time:P(e.time,n),frame:e.frame,kind:"goal",label:a,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function Et(e,t,n){const r=x(e.player),o=t.get(r)?.name??r,a=e.kind.toLowerCase(),i=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:G(a,e.frame,r),time:P(e.time,n),frame:e.frame,kind:a,label:`${o} ${i}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Bt(e,t,n){const r=x(e.attacker),o=x(e.victim),a=t.get(r),i=t.get(o);return{id:G("demo",e.frame,`${r}:${o}`),time:P(e.time,n),frame:e.frame,kind:"demo",label:`${a?.name??r} demoed ${i?.name??o}`,shortLabel:"D",playerId:r,playerName:a?.name??r,secondaryPlayerId:o,secondaryPlayerName:i?.name??o,location:e.victim_location,isTeamZero:a?.isTeamZero??null}}function Dt(e,t,n,r,o){const a=ne(t),i=[];for(const s of e.goal_events??[])i.push(Tt(s,a,r)),o?.advance();for(const s of e.player_stat_events??[])i.push(Et(s,a,r)),o?.advance();for(const s of e.demolish_infos??[])i.push(Bt(s,a,r)),o?.advance();for(const s of n)i.push(et(s));return i.length===0&&o?.advance(),It(i)}function Nt(e,t={}){const n=pt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=ht(e,n),a=St(e,n),i=Ot(e,n),s=bt(t);_e(o,i,s);for(const l of a)_e(o,l.frames,s);const m=Ge(e,a,r,n),u=Qe(e,r,n),d=Dt(e,a,u,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:i,boostPads:m,players:a,tickMarks:u,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(l=>l.name),teamOneNames:e.meta.team_one.map(l=>l.name)}}function L(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,L(n)]));if(Array.isArray(e))return e.map(t=>L(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=L(r);return t}return e}async function Pt(){const e=ve;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Pt();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=L(ye(t));if(!n.valid)throw new Error(n.error??"Replay validation failed");const r=ge(t,s=>{R({type:"progress",progress:s})},e.data.reportEveryNFrames);R({type:"progress",progress:{stage:"normalizing",progress:0}});const o=JSON.parse(new TextDecoder().decode(r)),a=Nt(o,{motionSmoothing:e.data.motionSmoothing,smoothingBlendFactor:e.data.smoothingBlendFactor,smoothingAnchorInterval:e.data.smoothingAnchorInterval,progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(s){R({type:"progress",progress:{stage:"normalizing",progress:s}})}}),i=new TextEncoder().encode(JSON.stringify(a));self.postMessage({type:"done",rawBuffer:r.buffer,replayBuffer:i.buffer},[r.buffer,i.buffer])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/index.html b/crates/rocket-sense-server/static/subtr-actor/index.html index 3f930690..132f6a76 100644 --- a/crates/rocket-sense-server/static/subtr-actor/index.html +++ b/crates/rocket-sense-server/static/subtr-actor/index.html @@ -5,7 +5,8 @@ stat evaluation player - + +
diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/index-Bi0g-Y6P.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/index-Bi0g-Y6P.js new file mode 100644 index 00000000..61ada380 --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/review/assets/index-Bi0g-Y6P.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./main-DhIgxjyS.js","./preload-helper-PPVm8Dsz.js","./main-BmO1EVHp.css"])))=>i.map(i=>d[i]); +import{_ as u}from"./preload-helper-PPVm8Dsz.js";(function(){const r=document.createElement("link").relList;if(r&&r.supports&&r.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))n(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const o of t.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&n(o)}).observe(document,{childList:!0,subtree:!0});function c(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function n(e){if(e.ep)return;e.ep=!0;const t=c(e);fetch(e.href,t)}})();const s=document.querySelector("#app");if(!(s instanceof HTMLElement))throw new Error("Missing #app mount element");const{mountStatEvaluationPlayer:a}=await u(async()=>{const{mountStatEvaluationPlayer:i}=await import("./main-DhIgxjyS.js");return{mountStatEvaluationPlayer:i}},__vite__mapDeps([0,1,2]),import.meta.url);a(s); diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/index-DqmYE4Q0.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/index-DqmYE4Q0.js deleted file mode 100644 index 061c93a6..00000000 --- a/crates/rocket-sense-server/static/subtr-actor/review/assets/index-DqmYE4Q0.js +++ /dev/null @@ -1,2 +0,0 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./main-DHjpjWsc.js","./main-D554jl9D.css"])))=>i.map(i=>d[i]); -(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))u(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const r of t.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&u(r)}).observe(document,{childList:!0,subtree:!0});function a(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function u(e){if(e.ep)return;e.ep=!0;const t=a(e);fetch(e.href,t)}})();const g="modulepreload",v=function(l,i){return new URL(l,i).href},h={},P=function(i,a,u){let e=Promise.resolve();if(a&&a.length>0){let E=function(n){return Promise.all(n.map(c=>Promise.resolve(c).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};const r=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),p=o?.nonce||o?.getAttribute("nonce");e=E(a.map(n=>{if(n=v(n,u),n in h)return;h[n]=!0;const c=n.endsWith(".css"),f=c?'[rel="stylesheet"]':"";if(u)for(let d=r.length-1;d>=0;d--){const m=r[d];if(m.href===n&&(!c||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${f}`))return;const s=document.createElement("link");if(s.rel=c?"stylesheet":g,c||(s.as="script"),s.crossOrigin="",s.href=n,p&&s.setAttribute("nonce",p),document.head.appendChild(s),c)return new Promise((d,m)=>{s.addEventListener("load",d),s.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${n}`)))})}))}function t(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return e.then(r=>{for(const o of r||[])o.status==="rejected"&&t(o.reason);return i().catch(t)})},y=document.querySelector("#app");if(!(y instanceof HTMLElement))throw new Error("Missing #app mount element");const{mountStatEvaluationPlayer:w}=await P(async()=>{const{mountStatEvaluationPlayer:l}=await import("./main-DHjpjWsc.js");return{mountStatEvaluationPlayer:l}},__vite__mapDeps([0,1]),import.meta.url);w(y); diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/main-D554jl9D.css b/crates/rocket-sense-server/static/subtr-actor/review/assets/main-BmO1EVHp.css similarity index 98% rename from crates/rocket-sense-server/static/subtr-actor/review/assets/main-D554jl9D.css rename to crates/rocket-sense-server/static/subtr-actor/review/assets/main-BmO1EVHp.css index b8d95020..17d9fd0b 100644 --- a/crates/rocket-sense-server/static/subtr-actor/review/assets/main-D554jl9D.css +++ b/crates/rocket-sense-server/static/subtr-actor/review/assets/main-BmO1EVHp.css @@ -1 +1 @@ -:root{color-scheme:dark;font-family:IBM Plex Sans,Avenir Next,sans-serif;font-size:13px;--surface: rgba(8, 20, 30, .82);--surface-strong: rgba(7, 16, 24, .94);--surface-soft: rgba(12, 28, 40, .72);--border: rgba(167, 199, 222, .14);--text: #edf5fa;--muted: #9eb4c6;--blue: #4b94ff;--blue-soft: rgba(75, 148, 255, .18);--orange: #f39a37;--orange-soft: rgba(243, 154, 55, .18);--ui-gap-xs: .22rem;--ui-gap-sm: .34rem;--ui-gap-md: .5rem;--ui-panel-padding: .52rem;--ui-control-font-size: .72rem;--ui-control-line-height: 1.15;--ui-control-padding-block: .22rem;--ui-control-padding-inline: .38rem;--ui-control-height: 1.55rem;--ui-radius-sm: .36rem;--ui-radius-md: .5rem;--ui-radius-lg: .72rem;--ui-radius-pill: 999px;--ui-border-subtle: rgba(255, 255, 255, .1);--ui-border-hover: rgba(255, 255, 255, .18);--ui-overlay-bg: rgba(4, 12, 18, .82);--ui-overlay-bg-strong: rgba(4, 12, 18, .9);background:radial-gradient(circle at top left,rgba(73,112,158,.28),transparent 32%),radial-gradient(circle at top right,rgba(243,154,55,.12),transparent 24%),linear-gradient(180deg,#071018,#0b1721);color:var(--text)}*,*:before,*:after{box-sizing:border-box}html,body,#app{width:100%;height:100%;overflow:hidden}body{margin:0}button,select,input{font:inherit}.shell{min-height:100dvh;height:100dvh;padding:0;display:block}.workspace{height:100%;display:block;min-height:0}.panel h2,.stats-panel h2{margin:0}.panel-copy{color:#bdd0de}.viewport-panel,.panel,.stats-panel{position:relative;border:1px solid var(--border);border-radius:1.4rem;background:var(--surface);box-shadow:0 22px 56px #0000003d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.viewport-panel{width:100%;height:100%;min-height:100dvh;overflow:hidden;border:0;border-radius:0;background:#061019;box-shadow:none}.viewport{position:absolute;inset:0}.top-chrome{position:absolute;top:.8rem;left:.8rem;z-index:20}.launcher-toggle{width:2.65rem;min-width:0;aspect-ratio:1;display:grid;place-items:center;padding:0;border-color:transparent;border-radius:var(--ui-radius-md);background:#050e16ad;box-shadow:0 12px 30px #0000004d;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.launcher-toggle:hover,.launcher-toggle[aria-expanded=true]{border-color:#ffffff29;background:#081824d1}.launcher-toggle-bars,.launcher-toggle-bars:before,.launcher-toggle-bars:after{display:block;width:1.18rem;height:.12rem;border-radius:var(--ui-radius-pill);background:#edf5fa}.launcher-toggle-bars{position:relative}.launcher-toggle-bars:before,.launcher-toggle-bars:after{content:"";position:absolute;left:0}.launcher-toggle-bars:before{top:-.38rem}.launcher-toggle-bars:after{top:.38rem}.launcher-menu{position:absolute;top:calc(100% + .55rem);left:0;width:min(22rem,calc(100vw - 1.6rem));max-height:calc(100dvh - 7.5rem);overflow:auto;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg-strong);box-shadow:0 18px 54px #0000005c;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.launcher-menu[hidden]{display:none}.launcher-section{display:grid;gap:var(--ui-gap-xs)}.launcher-section h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.launcher-section button{width:100%;text-align:left}.hidden-file-input,.visually-hidden{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.team-blue{--team-accent: var(--blue);--team-soft: var(--blue-soft)}.team-orange{--team-accent: var(--orange);--team-soft: var(--orange-soft)}.floating-window-layer,.stats-window-layer{position:absolute;inset:0;z-index:12;pointer-events:none}.floating-window,.stats-window,.scoreboard-window{position:absolute;left:clamp(.8rem,var(--window-x, 1rem),calc(100vw - 18rem));top:clamp(.8rem,var(--window-y, 1rem),calc(100dvh - 12rem));width:min(26rem,calc(100vw - 1.6rem));overflow:visible;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg);box-shadow:0 16px 44px #00000052;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:auto;-webkit-user-select:none;user-select:none}.floating-window[hidden],.stats-window[hidden],.scoreboard-window[hidden]{display:none}.scoreboard-window{left:50%;top:.7rem;width:auto;min-width:4.4rem;transform:translate(-50%);gap:var(--ui-gap-sm);padding:.34rem .62rem;border-radius:999px}.scoreboard-window-body{display:grid;gap:.42rem}.scoreboard-scoreline{display:grid;grid-template-columns:minmax(1.2rem,auto) auto minmax(1.2rem,auto);align-items:center;justify-content:center;gap:.3rem;min-width:0;font-variant-numeric:tabular-nums}.scoreboard-goal-value{color:var(--team-accent);font-size:1rem;font-weight:850;line-height:1;text-align:center}.scoreboard-divider{color:var(--muted);font-size:1rem;font-weight:800;line-height:1}.scoreboard-empty{margin:0;color:var(--muted);font-size:.74rem;text-align:center}@media(max-width:900px){.scoreboard-window{top:3.25rem}}@media(max-width:640px){.scoreboard-window{min-width:4rem;padding:.32rem .56rem}.scoreboard-scoreline{gap:.24rem}.scoreboard-goal-value{font-size:.92rem}}.floating-window-camera{width:min(26rem,calc(100vw - 1.6rem))}.floating-window-recording{--window-x: calc(100vw - 27rem) ;width:min(26rem,calc(100vw - 1.6rem))}.floating-window-playback{--window-x: calc(100vw - 23rem) ;width:min(21rem,calc(100vw - 1.6rem))}.floating-window-mechanics{width:auto;min-width:min(18rem,calc(100vw - 1.6rem));max-width:min(42rem,calc(100vw - 1.6rem))}.mechanics-timeline-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,42rem);overflow:auto}.floating-window-event-playlist{width:min(27rem,calc(100vw - 1.6rem))}.floating-window-mechanics-review{width:min(30rem,calc(100vw - 1.6rem))}.floating-window-replay-loading{width:min(32rem,calc(100vw - 1.6rem))}.floating-window-boost-pickups{width:min(34rem,calc(100vw - 1.6rem))}.floating-window-touch-controls,.floating-window-touch-legend{width:min(24rem,calc(100vw - 1.6rem))}.floating-window-shot-visualization{width:min(38rem,calc(100vw - 1.6rem))}.floating-window-header,.stats-window-header{display:flex;align-items:start;justify-content:space-between;gap:var(--ui-gap-md);cursor:grab}.stats-window-header-actions-only{justify-content:end}.floating-window:active .floating-window-header,.stats-window:active .stats-window-header{cursor:grabbing}.floating-window-header h2,.stats-window-header h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.floating-window-hide,.stats-window-action{flex-shrink:0;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-md);font-size:var(--ui-control-font-size)}.mechanics-review-window-body{display:grid;gap:var(--ui-gap-md);max-height:min(74dvh,42rem);min-height:0;overflow:hidden auto;scrollbar-width:thin}.event-playlist-window-body{display:grid;gap:var(--ui-gap-sm);min-height:0}.touch-color-legend-body{display:grid;gap:var(--ui-gap-md);max-height:min(70dvh,38rem);overflow:auto;scrollbar-width:thin}.touch-color-legend-explainer{display:grid;gap:var(--ui-gap-xs);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);color:#c3d3df;font-size:.78rem;background:#ffffff0a}.touch-color-legend-group{display:grid;gap:var(--ui-gap-xs)}.touch-color-legend-heading{width:100%;min-height:1.45rem;margin:0;padding:.12rem .32rem;border-radius:var(--ui-radius-sm);color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.1em;text-align:left;text-transform:uppercase}.touch-color-legend-heading[data-active=true]{border-color:#8ec5ff6b;background:#21476b94;color:#f3f8fc}.touch-color-legend-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.touch-color-legend-item{min-width:0;display:flex;align-items:center;gap:var(--ui-gap-xs);color:#e8f0f7;font-size:.76rem}.touch-color-legend-swatch{flex:0 0 auto;width:.78rem;height:.78rem;border:1px solid rgba(255,255,255,.35);border-radius:50%;box-shadow:0 0 0 1px #00000038}.event-playlist-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.event-playlist-filter{position:relative;min-width:0}.event-playlist-filter summary{display:inline-flex;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0a;color:var(--text);font-size:var(--ui-control-font-size);cursor:pointer;list-style:none}.event-playlist-filter summary::-webkit-details-marker{display:none}.event-playlist-filter-panel{position:absolute;z-index:5;top:calc(100% + .4rem);left:0;width:min(22rem,calc(100vw - 3rem));max-height:min(28rem,calc(100dvh - 10rem));overflow:auto;display:grid;gap:var(--ui-gap-md);padding:.85rem;border:1px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#090e16fa;box-shadow:0 16px 34px #00000057}.event-playlist-filter-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem}.event-playlist-filter-group{display:grid;gap:.45rem}.event-playlist-filter-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.event-playlist-filter-option{min-width:0}.event-playlist-follow{flex-shrink:0}.event-playlist-list{max-height:min(31rem,calc(100dvh - 11rem));overflow:auto;display:grid;gap:.45rem;padding-right:.15rem;scrollbar-width:thin}.event-playlist-item{--event-color: #d1d9e0;appearance:none;width:100%;display:grid;grid-template-columns:3.4rem minmax(0,1fr);gap:.7rem;align-items:start;padding:.6rem .7rem;border:1px solid rgba(255,255,255,.09);border-left:.28rem solid var(--event-color);border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.event-playlist-item:hover,.event-playlist-item[data-active=true]{border-color:color-mix(in srgb,var(--event-color) 48%,rgba(255,255,255,.12));background:color-mix(in srgb,var(--event-color) 15%,rgba(255,255,255,.045))}.event-playlist-time{color:var(--muted);font-size:.72rem;font-variant-numeric:tabular-nums;line-height:1.35}.event-playlist-main{min-width:0;display:grid;gap:.15rem}.shot-visualization{display:grid;gap:var(--ui-gap-md);min-height:0}.shot-visualization-summary{color:var(--text);font-size:.78rem;font-weight:700;font-variant-numeric:tabular-nums}.shot-chart-canvas{width:100%;aspect-ratio:16 / 10;display:block;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#0f2b24}.shot-visualization-layout{display:grid;grid-template-columns:minmax(10rem,.78fr) minmax(15rem,1.22fr);gap:var(--ui-gap-md);min-height:0}.shot-list{display:grid;align-content:start;gap:.45rem;max-height:18rem;overflow:auto;padding-right:.15rem;scrollbar-width:thin}.shot-list-item{appearance:none;width:100%;display:grid;gap:.15rem;min-height:3.1rem;padding:.52rem .62rem;border:1px solid rgba(255,255,255,.09);border-left:.24rem solid #62d2a2;border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.shot-list-item[data-selected=true]{border-color:#f8fafcb8;background:#87afd429}.shot-list-item[data-active=true]{border-left-color:#e11d48}.shot-list-title{min-width:0;overflow:hidden;color:var(--text);font-size:.78rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.shot-list-meta{color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums;white-space:nowrap}.shot-demo-panel{display:grid;gap:var(--ui-gap-sm);min-width:0}.shot-demo-scene{width:100%;height:12rem;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#07111c}.shot-demo-scene canvas{width:100%;height:100%;display:block}.shot-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin:0}.shot-details div{min-width:0;padding:.48rem .56rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.shot-details dt{color:var(--muted);font-size:.62rem;font-weight:700;text-transform:uppercase}.shot-details dd{min-width:0;margin:.14rem 0 0;overflow:hidden;color:var(--text);font-size:.76rem;font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.shot-visualization-empty{margin:0;color:var(--muted);font-size:.78rem}.event-playlist-main strong{min-width:0;overflow-wrap:anywhere;font-size:.82rem;line-height:1.3}.event-playlist-main span{min-width:0;overflow-wrap:anywhere;color:var(--muted);font-size:.68rem;line-height:1.35}.mechanics-review-load-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center}.mechanics-review-file{display:inline-grid;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0e;color:var(--text);cursor:pointer}.mechanics-review-file input{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.mechanics-review-url{min-width:0}.mechanics-review-status{min-height:1.2rem;color:var(--muted);font-size:.78rem}.mechanics-review-current{display:grid;gap:var(--ui-gap-sm);padding:.55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-index{color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mechanics-review-current h3{margin:0;font-size:.96rem;line-height:1.2}.mechanics-review-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm);margin:0}.mechanics-review-fields div{min-width:0}.mechanics-review-fields dt{color:var(--muted);font-size:.68rem;text-transform:uppercase}.mechanics-review-fields dd{margin:.1rem 0 0;overflow-wrap:anywhere}.mechanics-review-wide{grid-column:1 / -1}.mechanics-review-actions,.mechanics-review-decision-actions,.mechanics-review-list-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.mechanics-review-actions button,.mechanics-review-decision-actions button{flex:1 1 0}#mechanics-review-confirm{border-color:#4caf7885}#mechanics-review-reject{border-color:#dc5f5f94}.mechanics-review-list-header{color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.mechanics-review-replays{display:grid;gap:var(--ui-gap-xs)}.replay-loading-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,40rem);min-height:0}.replay-loading-summary{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.replay-loading-list{max-height:min(38rem,calc(100dvh - 9rem));overflow:auto;display:grid;gap:var(--ui-gap-xs);padding-right:.15rem;scrollbar-width:thin}.mechanics-review-replay-load{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem var(--ui-gap-sm);min-width:0;padding:.5rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-replay-load.loaded{border-color:#4caf786b}.mechanics-review-replay-load.error{border-color:#dc5f5f94}.mechanics-review-replay-load-main{display:grid;min-width:0;gap:.16rem}.mechanics-review-replay-load-title,.mechanics-review-replay-load-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load-title{color:var(--text);font-size:.78rem;font-weight:700}.mechanics-review-replay-load-meta{color:var(--muted);font-size:.68rem}.mechanics-review-replay-load-status{max-width:11rem;overflow:hidden;color:var(--muted);font-size:.68rem;text-align:right;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-status{color:#83d4a4}.mechanics-review-replay-load.error .mechanics-review-replay-load-status{color:#ff9b9b}.mechanics-review-replay-load-progress{grid-column:1 / -1;height:.25rem;overflow:hidden;border-radius:999px;background:#ffffff14}.mechanics-review-replay-load-progress span{display:block;width:0;height:100%;border-radius:inherit;background:#77a9ff;transition:width .14s ease}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-progress span{background:#4caf78}.mechanics-review-replay-load.error .mechanics-review-replay-load-progress span{background:#dc5f5f}.mechanics-review-list{max-height:min(22rem,calc(100dvh - 27rem));display:grid;gap:var(--ui-gap-xs);overflow:auto;padding-right:.15rem;scrollbar-width:thin}.mechanics-review-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;width:100%;min-height:2rem;text-align:left}.mechanics-review-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item strong{color:var(--muted);font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item[data-active=true]{border-color:#4b94ff6b;background:#4b94ff29}.viewport canvas{display:block;width:100%;height:100%}.replay-load-modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:1.25rem;background:radial-gradient(circle at top,rgba(89,157,219,.18),transparent 30%),#040b12c2;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.replay-load-modal[hidden]{display:none}.replay-load-modal__dialog{width:min(32rem,100%);display:grid;gap:.75rem;padding:1.4rem 1.45rem;border-radius:1.35rem;border:1px solid rgba(255,255,255,.12);background:linear-gradient(180deg,#0b1724f5,#070f18f0);box-shadow:0 24px 70px #0006}.replay-load-modal__eyebrow{margin:0;font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#87afd4}.replay-load-modal__title,.replay-load-modal__status,.replay-load-modal__meta{margin:0}.replay-load-modal__title{font-size:clamp(1.45rem,4vw,2.1rem);line-height:1.1;color:#f3f8fc}.replay-load-modal__status{color:#e6f0f7;font-size:1rem}.replay-load-modal__phase-list{display:grid;gap:.52rem}.replay-load-modal__phase-row{display:grid;gap:.28rem}.replay-load-modal__phase-label{margin:0;font-size:.82rem;letter-spacing:.04em;color:#9eb4c6}.replay-load-modal__phase-row[data-state=active] .replay-load-modal__phase-label{color:#edf5fa}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-label{color:#c5d9e7}.replay-load-modal__phase-bar{overflow:hidden;height:.58rem;border-radius:999px;background:#ffffff1a}.replay-load-modal__phase-fill{width:0%;height:100%;border-radius:inherit;background:linear-gradient(90deg,#4b94ff,#8ec5ff 55%,#f39a37);transition:width .14s ease}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-fill{opacity:.95}.replay-load-modal__phase-fill[data-indeterminate=true]{width:100%!important;background:linear-gradient(90deg,#4b94ff40,#4b94ffcc 28%,#8ec5fff2,#f39a37cc 72%,#f39a3740);background-size:180% 100%;animation:replay-load-phase-indeterminate 1.1s linear infinite}@keyframes replay-load-phase-indeterminate{0%{background-position:0% 0%}to{background-position:180% 0%}}.replay-load-modal__meta{color:#9eb4c6;font-size:.92rem}.empty-state{position:absolute;left:50%;top:50%;z-index:10;display:grid;gap:.55rem;min-width:min(20rem,calc(100vw - 2rem));transform:translate(-50%,-50%);padding:.85rem .95rem;border-radius:1rem;border:1px solid rgba(169,201,226,.14);background:#040c12d1;color:#bfd2de;text-align:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.empty-state[hidden]{display:none}.empty-state p{margin:0}.stats-panel{padding:1.15rem 1.15rem 1rem}.panel-heading{display:flex;justify-content:space-between;align-items:start;gap:1rem;margin-bottom:1rem}.player-stats-stack{display:grid;gap:.9rem}.player-team-stack{display:grid;gap:.85rem}.player-team-group{display:grid;gap:.7rem;padding:.75rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.player-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.42rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.player-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.player-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.player-stats-grid{display:flex;gap:.7rem;flex-wrap:wrap}.player-card{flex:1 1 13rem;min-width:12rem;padding:.85rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.player-card.team-blue{background:var(--blue-soft);border-color:#4b94ff42}.player-card.team-orange{background:var(--orange-soft);border-color:#f39a3747}.player-card.shared{background:linear-gradient(180deg,#ffffff0f,#ffffff06),#ffffff09;border-color:#ffffff1f}.player-card-header{display:flex;justify-content:space-between;align-items:center;gap:.4rem;margin-bottom:.45rem}.player-name{font-size:.85rem;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-row{display:flex;justify-content:space-between;gap:.5rem;padding:.15rem 0;font-size:.8rem}.label,.detail-grid dt,.stat-row .label{color:#89a4ba}.stat-row .value,.detail-grid dd{font-variant-numeric:tabular-nums}.role-indicator,.depth-indicator{flex-shrink:0;padding:.18rem .45rem;border-radius:999px;font-size:.64rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.role-back,.depth-last{background:#ea55552e;color:#ff9b9b}.role-forward,.depth-upfield{background:#4ac6762e;color:#9ce5a8}.role-other,.depth-level{background:#8495a82e;color:#c0cbd6}.role-mid,.depth-mid{background:#f39a372e;color:#ffc680}.stat-module-section{display:grid;gap:.45rem}.stat-module-label{font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#6f889d}.sidebar{min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;align-items:start;gap:1rem}.stat-window-empty{margin:0;color:#9eb4c6;font-size:.88rem}.stats-window-toolbar,.stats-window-scope-row,.stats-window-actions{display:flex;align-items:center;gap:var(--ui-gap-sm);flex-wrap:wrap}.stats-window-toolbar{justify-content:end}.stats-window-scope-select{min-width:min(100%,13rem)}.stats-window-add-button{width:var(--ui-control-height);min-width:var(--ui-control-height);padding:0;font-size:1rem;font-weight:800;line-height:1}.stats-window-add-button[aria-expanded=true]{border-color:var(--ui-border-hover);background:#ffffff1a}.stats-window-scope-select.team-blue,.stats-window-scope-select.team-orange,.stats-window-stat-target.team-blue,.stats-window-stat-target.team-orange{border-color:var(--team-accent);box-shadow:inset .22rem 0 0 var(--team-accent)}.stats-window-picker{display:grid;gap:var(--ui-gap-sm);padding:var(--ui-panel-padding);border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff0a}.stats-window-picker[hidden]{display:none}.stats-window-picker-list{display:grid;gap:var(--ui-gap-xs);overflow:visible}.stats-window-picker-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.45rem;align-items:center;width:100%;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);text-align:left}.stats-window-picker-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-picker-item strong{color:#87afd4;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.stats-window-stat-list,.stats-window-entity-list,.stats-window-team-list{display:grid;gap:var(--ui-gap-sm)}.stats-window-team-group{display:grid;gap:var(--ui-gap-sm);padding:.48rem .5rem .55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.stats-window-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.34rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.stats-window-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.stats-window-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.stats-window-entity{display:grid;gap:var(--ui-gap-xs);padding-left:.5rem;border-left:2px solid rgba(255,255,255,.12)}.stats-window-entity.team-blue,.stats-window-entity.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),transparent 70%)}.stats-window-entity-title{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.stats-window-stat-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--ui-gap-sm);align-items:center;min-height:1.45rem;font-size:.8rem}.stats-window-stat-name{min-width:0;color:#9eb4c6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-stat-target{max-width:7rem;margin-left:.35rem;padding:.16rem .3rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.stats-window-stat-value{color:#edf5fa;font-variant-numeric:tabular-nums}.stats-window-stat-remove{padding:.18rem .36rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.goal-label-list{display:grid;gap:var(--ui-gap-sm);min-width:min(26rem,72vw)}.goal-label-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;padding:.56rem .62rem;border-left:2px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#ffffff09}.goal-label-item.team-blue,.goal-label-item.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),rgba(255,255,255,.03))}.goal-label-item header{min-width:0}.goal-label-item h3{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.goal-label-item header span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.goal-label-tags{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:.32rem}.goal-label-tag{padding:.16rem .38rem;border-radius:var(--ui-radius-sm);background:#8ec5ff21;color:#cfe6ff;font-size:.68rem;font-weight:800}.goal-label-tag-empty{background:#8495a829;color:#c0cbd6}.goal-label-actions{justify-self:end;display:flex;gap:.28rem}.goal-label-actions button{min-height:1.8rem;padding:.2rem .48rem;font-size:.72rem}.goal-label-actions .goal-label-watch{border-color:#65d6ad5c;background:#65d6ad2e;color:#d7ffef}.stats-window:has(.kickoff-overview){width:min(34rem,calc(100vw - 1.6rem))}.kickoff-overview{display:grid;gap:var(--ui-gap-md);width:100%;min-width:0}.kickoff-overview-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-md);align-items:start;padding-bottom:.52rem;border-bottom:1px solid rgba(255,255,255,.1)}.kickoff-overview-hero h3{margin:0;color:#edf5fa;font-size:.92rem;font-weight:800}.kickoff-overview-hero span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem}.kickoff-overview-victor{max-width:9rem;padding:.2rem .46rem;border-radius:var(--ui-radius-sm);background:#8495a82e;color:#d8e5ee;font-size:.72rem;font-weight:800;text-align:center}.kickoff-overview-victor.team-blue,.kickoff-overview-victor.team-orange{background:var(--team-soft);color:color-mix(in srgb,var(--team-accent) 72%,#ffffff)}.kickoff-overview-summary{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-metric{display:grid;gap:.12rem;min-width:0;padding:.46rem .52rem;border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff09}.kickoff-metric span,.kickoff-detail-row span{color:#89a4ba;font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-metric strong{min-width:0;color:#edf5fa;font-size:.78rem;overflow-wrap:anywhere}.kickoff-detail-grid{display:grid;gap:.18rem}.kickoff-detail-row{display:grid;grid-template-columns:minmax(7.5rem,1fr) auto;gap:var(--ui-gap-sm);align-items:baseline;min-height:1.38rem;font-size:.78rem}.kickoff-detail-row strong{color:#edf5fa;font-variant-numeric:tabular-nums}.kickoff-strategy-list{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-strategy-team{display:grid;gap:.34rem;min-width:0;padding:.54rem .58rem;border-radius:var(--ui-radius-md);border:1px solid color-mix(in srgb,var(--team-accent) 26%,transparent);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.kickoff-strategy-team h4{margin:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-strategy-line{margin:0;color:#edf5fa;font-size:.78rem;line-height:1.35;overflow-wrap:anywhere}.kickoff-support-list{display:grid;gap:.22rem;margin:0;padding:0;list-style:none}.kickoff-support-list li{color:#afc4d4;font-size:.74rem;line-height:1.3;overflow-wrap:anywhere}@media(min-width:46rem){.kickoff-overview-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:720px){.kickoff-overview-summary,.kickoff-detail-grid,.kickoff-strategy-list,.kickoff-overview-hero{grid-template-columns:1fr}.kickoff-overview-victor{justify-self:start}}.panel{padding:var(--ui-panel-padding);display:grid;gap:var(--ui-gap-md)}.panel>label,.panel>.detail-grid,.panel>.transport-row,.panel>.module-list{margin-top:0}.panel-copy{margin:0;font-size:.92rem;line-height:1.45}.transport-row{display:flex;gap:var(--ui-gap-sm)}.transport-row>*{flex:1 1 auto}.playback-rate-control{display:grid;gap:var(--ui-gap-xs)}.playback-rate-header{align-items:center;display:flex;justify-content:space-between}.playback-rate-header strong{font-variant-numeric:tabular-nums}.playback-rate-notches{color:var(--ui-muted);display:grid;font-size:.72rem;grid-template-columns:repeat(5,minmax(0,1fr));line-height:1.1;text-align:center}.playback-rate-notches span:first-child{text-align:left}.playback-rate-notches span:last-child{text-align:right}.recording-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm)}.camera-presets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.camera-presets button{font-size:var(--ui-control-font-size)}.camera-presets button[data-active=true]{border-color:#8ec5ff6b;background:linear-gradient(180deg,#21476bf5,#0c1b2afa);color:#f3f8fc;box-shadow:inset 0 0 0 1px #8ec5ff1f}.camera-ball-cam{display:grid;gap:var(--ui-gap-xs)}.camera-ball-cam-modes{grid-template-columns:repeat(3,minmax(0,1fr))}.camera-settings-controls{display:grid;gap:var(--ui-gap-sm)}.camera-settings-controls[hidden]{display:none}.camera-setting-label{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);font-size:.8rem;color:#9fb3c4}.camera-setting-label strong{color:#e8f0f7;font-variant-numeric:tabular-nums}button,select,input[type=file],input[type=range]{border-radius:var(--ui-radius-md)}button,select,input[type=file]{min-height:var(--ui-control-height);border:1px solid var(--ui-border-subtle);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);background:var(--surface-strong);color:var(--text);font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height)}button{cursor:pointer}select{appearance:none;padding-right:1.35rem;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - .76rem) 50%,calc(100% - .52rem) 50%;background-repeat:no-repeat;background-size:.24rem .24rem}button:hover:not(:disabled),select:hover:not(:disabled){border-color:var(--ui-border-hover)}button:disabled,select:disabled,input:disabled{opacity:.55;cursor:not-allowed}input[type=range]{width:100%;margin-top:var(--ui-gap-xs);accent-color:var(--blue)}.metric-readout{font-size:.88rem;font-weight:700;font-variant-numeric:tabular-nums}.toggle{display:inline-flex;align-items:center;gap:.4rem;color:#bfd0dd}.detail-grid{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem .7rem}.detail-grid dt,.detail-grid dd{margin:0}.detail-grid dt{font-size:.68rem;margin-bottom:.12rem}.detail-grid dd{font-size:.84rem;color:var(--text);overflow-wrap:anywhere}.module-groups{display:grid;gap:var(--ui-gap-md)}.module-summary-group{display:grid;gap:var(--ui-gap-xs)}.module-summary-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.module-list{display:flex;flex-wrap:wrap;gap:.5rem}.mechanics-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin-bottom:.65rem}.mechanics-event-list{display:grid;grid-template-columns:repeat(var(--event-source-columns, 1),minmax(9.5rem,1fr));align-items:stretch}.module-settings{display:grid;gap:.75rem}.module-settings-card{display:grid;gap:.75rem;padding:.85rem .9rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.module-settings-subgroup{display:grid;gap:.65rem;padding-top:.15rem;border-top:1px solid rgba(255,255,255,.06)}.module-settings-options{display:grid;gap:.45rem}.module-settings-group-title{margin:0;color:#d7e5ef;font-size:.78rem;font-weight:800}.module-settings-header{display:flex;align-items:start;justify-content:space-between;gap:.8rem}.module-settings-header h3{margin:.1rem 0 0;font-size:.96rem}.module-settings-eyebrow{margin:0;font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#87afd4}.boost-pickup-filter-panel{display:grid;gap:.65rem}.boost-pickup-filter-summary{display:flex;justify-content:end}.boost-pickup-filter-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1rem}.boost-pickup-filter-group{display:grid;align-content:start;gap:.35rem;min-width:0}.boost-pickup-filter-group[hidden]{display:none}.boost-pickup-filter-group-wide{grid-column:1 / -1}.boost-pickup-filter-options{display:flex;flex-wrap:wrap;gap:.35rem .8rem;min-width:0}.boost-pickup-filter-options .toggle{min-width:0}.module-summary-item{appearance:none;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-pill);border:1px solid var(--ui-border-subtle);background:#ffffff08;color:var(--muted);font:inherit;font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height);cursor:pointer;transition:border-color .14s ease,background-color .14s ease,color .14s ease}.module-summary-item:hover{border-color:var(--ui-border-hover);color:var(--text)}.module-summary-item strong{font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.module-summary-item[data-active=true]{border-color:#4b94ff38;background:#4b94ff14;color:#dceafb}@media(max-width:1180px){.sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:860px){.shell{padding:0}.sidebar{grid-template-columns:1fr}.panel-heading{display:grid}.detail-grid{grid-template-columns:1fr 1fr}.viewport-panel{min-height:100dvh}}@media(max-width:560px){.detail-grid{grid-template-columns:1fr}.transport-row{flex-direction:column}.floating-window,.stats-window{left:.55rem;right:.55rem;width:auto}}@media(max-width:720px){.viewport-panel:has(.floating-window:not([hidden])) .viewport{inset:0 0 52dvh}.floating-window{position:fixed;inset:auto 0 0;width:100%;max-width:none;height:52dvh;max-height:52dvh;overflow:auto;border-width:1px 0 0 0;border-radius:1rem 1rem 0 0;transform:none;z-index:30}.floating-window .floating-window-header{cursor:default}}.missed-event-body{display:flex;flex-direction:column;gap:.5rem;padding:.6rem .7rem;max-height:50vh;font-size:.8rem}.missed-event-controls{display:flex;align-items:center;gap:.4rem}.missed-event-controls select{flex:1 1 auto}.missed-event-list{list-style:none;margin:0;padding:0;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.missed-event-list li{display:flex;align-items:center;justify-content:space-between;gap:.4rem;padding:.2rem .3rem;border-radius:.3rem;background:#1c272ee6}.missed-event-status{margin:0;min-height:1rem;color:#9fadb7} +:root{color-scheme:dark;font-family:IBM Plex Sans,Avenir Next,sans-serif;font-size:13px;--surface: rgba(8, 20, 30, .82);--surface-strong: rgba(7, 16, 24, .94);--surface-soft: rgba(12, 28, 40, .72);--border: rgba(167, 199, 222, .14);--text: #edf5fa;--muted: #9eb4c6;--blue: #4b94ff;--blue-soft: rgba(75, 148, 255, .18);--orange: #f39a37;--orange-soft: rgba(243, 154, 55, .18);--ui-gap-xs: .22rem;--ui-gap-sm: .34rem;--ui-gap-md: .5rem;--ui-panel-padding: .52rem;--ui-control-font-size: .72rem;--ui-control-line-height: 1.15;--ui-control-padding-block: .22rem;--ui-control-padding-inline: .38rem;--ui-control-height: 1.55rem;--ui-radius-sm: .36rem;--ui-radius-md: .5rem;--ui-radius-lg: .72rem;--ui-radius-pill: 999px;--ui-border-subtle: rgba(255, 255, 255, .1);--ui-border-hover: rgba(255, 255, 255, .18);--ui-overlay-bg: rgba(4, 12, 18, .82);--ui-overlay-bg-strong: rgba(4, 12, 18, .9);background:radial-gradient(circle at top left,rgba(73,112,158,.28),transparent 32%),radial-gradient(circle at top right,rgba(243,154,55,.12),transparent 24%),linear-gradient(180deg,#071018,#0b1721);color:var(--text)}*,*:before,*:after{box-sizing:border-box}html,body,#app{width:100%;height:100%;overflow:hidden}body{margin:0}button,select,input{font:inherit}.shell{min-height:100dvh;height:100dvh;padding:0;display:block}.workspace{height:100%;display:block;min-height:0}.panel h2,.stats-panel h2{margin:0}.panel-copy{color:#bdd0de}.viewport-panel,.panel,.stats-panel{position:relative;border:1px solid var(--border);border-radius:1.4rem;background:var(--surface);box-shadow:0 22px 56px #0000003d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.viewport-panel{width:100%;height:100%;min-height:100dvh;overflow:hidden;border:0;border-radius:0;background:#061019;box-shadow:none}.viewport{position:absolute;inset:0}.top-chrome{position:absolute;top:.8rem;left:.8rem;z-index:20}.launcher-toggle{width:2.65rem;min-width:0;aspect-ratio:1;display:grid;place-items:center;padding:0;border-color:transparent;border-radius:var(--ui-radius-md);background:#050e16ad;box-shadow:0 12px 30px #0000004d;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.launcher-toggle:hover,.launcher-toggle[aria-expanded=true]{border-color:#ffffff29;background:#081824d1}.launcher-toggle-bars,.launcher-toggle-bars:before,.launcher-toggle-bars:after{display:block;width:1.18rem;height:.12rem;border-radius:var(--ui-radius-pill);background:#edf5fa}.launcher-toggle-bars{position:relative}.launcher-toggle-bars:before,.launcher-toggle-bars:after{content:"";position:absolute;left:0}.launcher-toggle-bars:before{top:-.38rem}.launcher-toggle-bars:after{top:.38rem}.launcher-menu{position:absolute;top:calc(100% + .55rem);left:0;width:min(22rem,calc(100vw - 1.6rem));max-height:calc(100dvh - 7.5rem);overflow:auto;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg-strong);box-shadow:0 18px 54px #0000005c;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.launcher-menu[hidden]{display:none}.launcher-section{display:grid;gap:var(--ui-gap-xs)}.launcher-section h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.launcher-section button{width:100%;text-align:left}.hidden-file-input,.visually-hidden{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.team-blue{--team-accent: var(--blue);--team-soft: var(--blue-soft)}.team-orange{--team-accent: var(--orange);--team-soft: var(--orange-soft)}.floating-window-layer,.stats-window-layer{position:absolute;inset:0;z-index:12;pointer-events:none}.floating-window,.stats-window,.scoreboard-window{position:absolute;left:clamp(.8rem,var(--window-x, 1rem),calc(100vw - 18rem));top:clamp(.8rem,var(--window-y, 1rem),calc(100dvh - 12rem));width:min(26rem,calc(100vw - 1.6rem));overflow:visible;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg);box-shadow:0 16px 44px #00000052;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:auto;-webkit-user-select:none;user-select:none}.floating-window[hidden],.stats-window[hidden],.scoreboard-window[hidden]{display:none}.scoreboard-window{left:50%;top:.7rem;width:auto;min-width:4.4rem;transform:translate(-50%);gap:var(--ui-gap-sm);padding:.34rem .62rem;border-radius:999px}.scoreboard-window-body{display:grid;gap:.42rem}.scoreboard-scoreline{display:grid;grid-template-columns:minmax(1.2rem,auto) auto minmax(1.2rem,auto);align-items:center;justify-content:center;gap:.3rem;min-width:0;font-variant-numeric:tabular-nums}.scoreboard-goal-value{color:var(--team-accent);font-size:1rem;font-weight:850;line-height:1;text-align:center}.scoreboard-divider{color:var(--muted);font-size:1rem;font-weight:800;line-height:1}.scoreboard-empty{margin:0;color:var(--muted);font-size:.74rem;text-align:center}@media(max-width:900px){.scoreboard-window{top:3.25rem}}@media(max-width:640px){.scoreboard-window{min-width:4rem;padding:.32rem .56rem}.scoreboard-scoreline{gap:.24rem}.scoreboard-goal-value{font-size:.92rem}}.floating-window-camera{width:min(26rem,calc(100vw - 1.6rem))}.floating-window-recording{--window-x: calc(100vw - 27rem) ;width:min(26rem,calc(100vw - 1.6rem))}.floating-window-playback{--window-x: calc(100vw - 23rem) ;width:min(21rem,calc(100vw - 1.6rem))}.floating-window-mechanics{width:auto;min-width:min(18rem,calc(100vw - 1.6rem));max-width:min(42rem,calc(100vw - 1.6rem))}.mechanics-timeline-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,42rem);overflow:auto}.floating-window-event-playlist{width:min(27rem,calc(100vw - 1.6rem))}.floating-window-mechanics-review{width:min(30rem,calc(100vw - 1.6rem))}.floating-window-replay-loading{width:min(32rem,calc(100vw - 1.6rem))}.floating-window-boost-pickups{width:min(34rem,calc(100vw - 1.6rem))}.floating-window-touch-controls,.floating-window-touch-legend{width:min(24rem,calc(100vw - 1.6rem))}.floating-window-shot-visualization{width:min(38rem,calc(100vw - 1.6rem))}.floating-window-header,.stats-window-header{display:flex;align-items:start;justify-content:space-between;gap:var(--ui-gap-md);cursor:grab}.stats-window-header-actions-only{justify-content:end}.floating-window:active .floating-window-header,.stats-window:active .stats-window-header{cursor:grabbing}.floating-window-header h2,.stats-window-header h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.floating-window-hide,.stats-window-action{flex-shrink:0;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-md);font-size:var(--ui-control-font-size)}.mechanics-review-window-body{display:grid;gap:var(--ui-gap-md);max-height:min(74dvh,42rem);min-height:0;overflow:hidden auto;scrollbar-width:thin}.event-playlist-window-body{display:grid;gap:var(--ui-gap-sm);min-height:0}.touch-color-legend-body{display:grid;gap:var(--ui-gap-md);max-height:min(70dvh,38rem);overflow:auto;scrollbar-width:thin}.touch-color-legend-explainer{display:grid;gap:var(--ui-gap-xs);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);color:#c3d3df;font-size:.78rem;background:#ffffff0a}.touch-color-legend-group{display:grid;gap:var(--ui-gap-xs)}.touch-color-legend-heading{width:100%;min-height:1.45rem;margin:0;padding:.12rem .32rem;border-radius:var(--ui-radius-sm);color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.1em;text-align:left;text-transform:uppercase}.touch-color-legend-heading[data-active=true]{border-color:#8ec5ff6b;background:#21476b94;color:#f3f8fc}.touch-color-legend-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.touch-color-legend-item{min-width:0;display:flex;align-items:center;gap:var(--ui-gap-xs);color:#e8f0f7;font-size:.76rem}.touch-color-legend-swatch{flex:0 0 auto;width:.78rem;height:.78rem;border:1px solid rgba(255,255,255,.35);border-radius:50%;box-shadow:0 0 0 1px #00000038}.event-playlist-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.event-playlist-filter{position:relative;min-width:0}.event-playlist-filter summary{display:inline-flex;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0a;color:var(--text);font-size:var(--ui-control-font-size);cursor:pointer;list-style:none}.event-playlist-filter summary::-webkit-details-marker{display:none}.event-playlist-filter-panel{position:absolute;z-index:5;top:calc(100% + .4rem);left:0;width:min(22rem,calc(100vw - 3rem));max-height:min(28rem,calc(100dvh - 10rem));overflow:auto;display:grid;gap:var(--ui-gap-md);padding:.85rem;border:1px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#090e16fa;box-shadow:0 16px 34px #00000057}.event-playlist-filter-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem}.event-playlist-filter-group{display:grid;gap:.45rem}.event-playlist-filter-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.event-playlist-filter-option{min-width:0}.event-playlist-follow{flex-shrink:0}.event-playlist-list{max-height:min(31rem,calc(100dvh - 11rem));overflow:auto;display:grid;gap:.45rem;padding-right:.15rem;scrollbar-width:thin}.event-playlist-item{--event-color: #d1d9e0;appearance:none;width:100%;display:grid;grid-template-columns:3.4rem minmax(0,1fr);gap:.7rem;align-items:start;padding:.6rem .7rem;border:1px solid rgba(255,255,255,.09);border-left:.28rem solid var(--event-color);border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.event-playlist-item:hover,.event-playlist-item[data-active=true]{border-color:color-mix(in srgb,var(--event-color) 48%,rgba(255,255,255,.12));background:color-mix(in srgb,var(--event-color) 15%,rgba(255,255,255,.045))}.event-playlist-time{color:var(--muted);font-size:.72rem;font-variant-numeric:tabular-nums;line-height:1.35}.event-playlist-main{min-width:0;display:grid;gap:.15rem}.shot-visualization{display:grid;gap:var(--ui-gap-md);min-height:0}.shot-visualization-summary{color:var(--text);font-size:.78rem;font-weight:700;font-variant-numeric:tabular-nums}.shot-chart-canvas{width:100%;aspect-ratio:16 / 10;display:block;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#0f2b24}.shot-visualization-layout{display:grid;grid-template-columns:minmax(10rem,.78fr) minmax(15rem,1.22fr);gap:var(--ui-gap-md);min-height:0}.shot-list{display:grid;align-content:start;gap:.45rem;max-height:18rem;overflow:auto;padding-right:.15rem;scrollbar-width:thin}.shot-list-item{appearance:none;width:100%;display:grid;gap:.15rem;min-height:3.1rem;padding:.52rem .62rem;border:1px solid rgba(255,255,255,.09);border-left:.24rem solid #62d2a2;border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.shot-list-item[data-selected=true]{border-color:#f8fafcb8;background:#87afd429}.shot-list-item[data-active=true]{border-left-color:#e11d48}.shot-list-title{min-width:0;overflow:hidden;color:var(--text);font-size:.78rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.shot-list-meta{color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums;white-space:nowrap}.shot-demo-panel{display:grid;gap:var(--ui-gap-sm);min-width:0}.shot-demo-scene{width:100%;height:12rem;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#07111c}.shot-demo-scene canvas{width:100%;height:100%;display:block}.shot-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin:0}.shot-details div{min-width:0;padding:.48rem .56rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.shot-details dt{color:var(--muted);font-size:.62rem;font-weight:700;text-transform:uppercase}.shot-details dd{min-width:0;margin:.14rem 0 0;overflow:hidden;color:var(--text);font-size:.76rem;font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.shot-visualization-empty{margin:0;color:var(--muted);font-size:.78rem}.event-playlist-main strong{min-width:0;overflow-wrap:anywhere;font-size:.82rem;line-height:1.3}.event-playlist-main span{min-width:0;overflow-wrap:anywhere;color:var(--muted);font-size:.68rem;line-height:1.35}.mechanics-review-load-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center}.mechanics-review-file{display:inline-grid;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0e;color:var(--text);cursor:pointer}.mechanics-review-file input{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.mechanics-review-url{min-width:0}.mechanics-review-status{min-height:1.2rem;color:var(--muted);font-size:.78rem}.mechanics-review-current{display:grid;gap:var(--ui-gap-sm);padding:.55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-index{color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mechanics-review-current h3{margin:0;font-size:.96rem;line-height:1.2}.mechanics-review-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm);margin:0}.mechanics-review-fields div{min-width:0}.mechanics-review-fields dt{color:var(--muted);font-size:.68rem;text-transform:uppercase}.mechanics-review-fields dd{margin:.1rem 0 0;overflow-wrap:anywhere}.mechanics-review-wide{grid-column:1 / -1}.mechanics-review-actions,.mechanics-review-decision-actions,.mechanics-review-list-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.mechanics-review-actions button,.mechanics-review-decision-actions button{flex:1 1 0}#mechanics-review-confirm{border-color:#4caf7885}#mechanics-review-reject{border-color:#dc5f5f94}.mechanics-review-list-header{color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.mechanics-review-replays{display:grid;gap:var(--ui-gap-xs)}.replay-loading-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,40rem);min-height:0}.replay-loading-summary{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.replay-loading-list{max-height:min(38rem,calc(100dvh - 9rem));overflow:auto;display:grid;gap:var(--ui-gap-xs);padding-right:.15rem;scrollbar-width:thin}.mechanics-review-replay-load{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem var(--ui-gap-sm);min-width:0;padding:.5rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-replay-load.loaded{border-color:#4caf786b}.mechanics-review-replay-load.error{border-color:#dc5f5f94}.mechanics-review-replay-load-main{display:grid;min-width:0;gap:.16rem}.mechanics-review-replay-load-title,.mechanics-review-replay-load-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load-title{color:var(--text);font-size:.78rem;font-weight:700}.mechanics-review-replay-load-meta{color:var(--muted);font-size:.68rem}.mechanics-review-replay-load-status{max-width:11rem;overflow:hidden;color:var(--muted);font-size:.68rem;text-align:right;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-status{color:#83d4a4}.mechanics-review-replay-load.error .mechanics-review-replay-load-status{color:#ff9b9b}.mechanics-review-replay-load-progress{grid-column:1 / -1;height:.25rem;overflow:hidden;border-radius:999px;background:#ffffff14}.mechanics-review-replay-load-progress span{display:block;width:0;height:100%;border-radius:inherit;background:#77a9ff;transition:width .14s ease}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-progress span{background:#4caf78}.mechanics-review-replay-load.error .mechanics-review-replay-load-progress span{background:#dc5f5f}.mechanics-review-list{max-height:min(22rem,calc(100dvh - 27rem));display:grid;gap:var(--ui-gap-xs);overflow:auto;padding-right:.15rem;scrollbar-width:thin}.mechanics-review-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;width:100%;min-height:2rem;text-align:left}.mechanics-review-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item strong{color:var(--muted);font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item[data-active=true]{border-color:#4b94ff6b;background:#4b94ff29}.viewport canvas{display:block;width:100%;height:100%}.replay-load-modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:1.25rem;background:radial-gradient(circle at top,rgba(89,157,219,.18),transparent 30%),#040b12c2;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.replay-load-modal[hidden]{display:none}.replay-load-modal__dialog{width:min(32rem,100%);display:grid;gap:.75rem;padding:1.4rem 1.45rem;border-radius:1.35rem;border:1px solid rgba(255,255,255,.12);background:linear-gradient(180deg,#0b1724f5,#070f18f0);box-shadow:0 24px 70px #0006}.replay-load-modal__eyebrow{margin:0;font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#87afd4}.replay-load-modal__title,.replay-load-modal__status,.replay-load-modal__meta{margin:0}.replay-load-modal__title{font-size:clamp(1.45rem,4vw,2.1rem);line-height:1.1;color:#f3f8fc}.replay-load-modal__status{color:#e6f0f7;font-size:1rem}.replay-load-modal__phase-list{display:grid;gap:.52rem}.replay-load-modal__phase-row{display:grid;gap:.28rem}.replay-load-modal__phase-label{margin:0;font-size:.82rem;letter-spacing:.04em;color:#9eb4c6}.replay-load-modal__phase-row[data-state=active] .replay-load-modal__phase-label{color:#edf5fa}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-label{color:#c5d9e7}.replay-load-modal__phase-bar{overflow:hidden;height:.58rem;border-radius:999px;background:#ffffff1a}.replay-load-modal__phase-fill{width:0%;height:100%;border-radius:inherit;background:linear-gradient(90deg,#4b94ff,#8ec5ff 55%,#f39a37);transition:width .14s ease}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-fill{opacity:.95}.replay-load-modal__phase-fill[data-indeterminate=true]{width:100%!important;background:linear-gradient(90deg,#4b94ff40,#4b94ffcc 28%,#8ec5fff2,#f39a37cc 72%,#f39a3740);background-size:180% 100%;animation:replay-load-phase-indeterminate 1.1s linear infinite}@keyframes replay-load-phase-indeterminate{0%{background-position:0% 0%}to{background-position:180% 0%}}.replay-load-modal__meta{color:#9eb4c6;font-size:.92rem}.empty-state{position:absolute;left:50%;top:50%;z-index:10;display:grid;gap:.55rem;min-width:min(20rem,calc(100vw - 2rem));transform:translate(-50%,-50%);padding:.85rem .95rem;border-radius:1rem;border:1px solid rgba(169,201,226,.14);background:#040c12d1;color:#bfd2de;text-align:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.empty-state[hidden]{display:none}.empty-state p{margin:0}.stats-panel{padding:1.15rem 1.15rem 1rem}.panel-heading{display:flex;justify-content:space-between;align-items:start;gap:1rem;margin-bottom:1rem}.player-stats-stack{display:grid;gap:.9rem}.player-team-stack{display:grid;gap:.85rem}.player-team-group{display:grid;gap:.7rem;padding:.75rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.player-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.42rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.player-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.player-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.player-stats-grid{display:flex;gap:.7rem;flex-wrap:wrap}.player-card{flex:1 1 13rem;min-width:12rem;padding:.85rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.player-card.team-blue{background:var(--blue-soft);border-color:#4b94ff42}.player-card.team-orange{background:var(--orange-soft);border-color:#f39a3747}.player-card.shared{background:linear-gradient(180deg,#ffffff0f,#ffffff06),#ffffff09;border-color:#ffffff1f}.player-card-header{display:flex;justify-content:space-between;align-items:center;gap:.4rem;margin-bottom:.45rem}.player-name{font-size:.85rem;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-row{display:flex;justify-content:space-between;gap:.5rem;padding:.15rem 0;font-size:.8rem}.label,.detail-grid dt,.stat-row .label{color:#89a4ba}.stat-row .value,.detail-grid dd{font-variant-numeric:tabular-nums}.role-indicator,.depth-indicator{flex-shrink:0;padding:.18rem .45rem;border-radius:999px;font-size:.64rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.role-back,.depth-last{background:#ea55552e;color:#ff9b9b}.role-forward,.depth-upfield{background:#4ac6762e;color:#9ce5a8}.role-other,.depth-level{background:#8495a82e;color:#c0cbd6}.role-mid,.depth-mid{background:#f39a372e;color:#ffc680}.stat-module-section{display:grid;gap:.45rem}.stat-module-label{font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#6f889d}.sidebar{min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;align-items:start;gap:1rem}.stat-window-empty{margin:0;color:#9eb4c6;font-size:.88rem}.stats-window-toolbar,.stats-window-scope-row,.stats-window-actions{display:flex;align-items:center;gap:var(--ui-gap-sm);flex-wrap:wrap}.stats-window-toolbar{justify-content:end}.stats-window-scope-select{min-width:min(100%,13rem)}.stats-window-add-button{width:var(--ui-control-height);min-width:var(--ui-control-height);padding:0;font-size:1rem;font-weight:800;line-height:1}.stats-window-add-button[aria-expanded=true]{border-color:var(--ui-border-hover);background:#ffffff1a}.stats-window-scope-select.team-blue,.stats-window-scope-select.team-orange,.stats-window-stat-target.team-blue,.stats-window-stat-target.team-orange{border-color:var(--team-accent);box-shadow:inset .22rem 0 0 var(--team-accent)}.stats-window-picker{display:grid;gap:var(--ui-gap-sm);padding:var(--ui-panel-padding);border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff0a}.stats-window-picker[hidden]{display:none}.stats-window-picker-list{display:grid;gap:var(--ui-gap-xs);overflow:visible}.stats-window-picker-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.45rem;align-items:center;width:100%;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);text-align:left}.stats-window-picker-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-picker-item strong{color:#87afd4;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.stats-window-stat-list,.stats-window-entity-list,.stats-window-team-list{display:grid;gap:var(--ui-gap-sm)}.stats-window-team-group{display:grid;gap:var(--ui-gap-sm);padding:.48rem .5rem .55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.stats-window-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.34rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.stats-window-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.stats-window-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.stats-window-entity{display:grid;gap:var(--ui-gap-xs);padding-left:.5rem;border-left:2px solid rgba(255,255,255,.12)}.stats-window-entity.team-blue,.stats-window-entity.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),transparent 70%)}.stats-window-entity-title{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.stats-window-stat-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--ui-gap-sm);align-items:center;min-height:1.45rem;font-size:.8rem}.stats-window-stat-name{min-width:0;color:#9eb4c6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-stat-target{max-width:7rem;margin-left:.35rem;padding:.16rem .3rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.stats-window-stat-value{color:#edf5fa;font-variant-numeric:tabular-nums}.stats-window-stat-remove{padding:.18rem .36rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.goal-label-list{display:grid;gap:var(--ui-gap-sm);min-width:min(26rem,72vw)}.goal-label-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;padding:.56rem .62rem;border-left:2px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#ffffff09}.goal-label-item.team-blue,.goal-label-item.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),rgba(255,255,255,.03))}.goal-label-item header{min-width:0}.goal-label-item h3{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.goal-label-item header span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.goal-label-tags{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:.32rem}.goal-label-tag{padding:.16rem .38rem;border-radius:var(--ui-radius-sm);background:#8ec5ff21;color:#cfe6ff;font-size:.68rem;font-weight:800}.goal-label-tag-empty{background:#8495a829;color:#c0cbd6}.goal-label-actions{justify-self:end;display:flex;gap:.28rem}.goal-label-actions button{min-height:1.8rem;padding:.2rem .48rem;font-size:.72rem}.goal-label-actions .goal-label-watch{border-color:#65d6ad5c;background:#65d6ad2e;color:#d7ffef}.stats-window:has(.kickoff-overview){width:min(34rem,calc(100vw - 1.6rem))}.kickoff-overview{display:grid;gap:var(--ui-gap-md);width:100%;min-width:0}.kickoff-overview-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-md);align-items:start;padding-bottom:.52rem;border-bottom:1px solid rgba(255,255,255,.1)}.kickoff-overview-hero h3{margin:0;color:#edf5fa;font-size:.92rem;font-weight:800}.kickoff-overview-hero span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem}.kickoff-overview-victor{max-width:9rem;padding:.2rem .46rem;border-radius:var(--ui-radius-sm);background:#8495a82e;color:#d8e5ee;font-size:.72rem;font-weight:800;text-align:center}.kickoff-overview-victor.team-blue,.kickoff-overview-victor.team-orange{background:var(--team-soft);color:color-mix(in srgb,var(--team-accent) 72%,#ffffff)}.kickoff-overview-summary{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-metric{display:grid;gap:.12rem;min-width:0;padding:.46rem .52rem;border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff09}.kickoff-metric span,.kickoff-detail-row span{color:#89a4ba;font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-metric strong{min-width:0;color:#edf5fa;font-size:.78rem;overflow-wrap:anywhere}.kickoff-detail-grid{display:grid;gap:.18rem}.kickoff-detail-row{display:grid;grid-template-columns:minmax(7.5rem,1fr) auto;gap:var(--ui-gap-sm);align-items:baseline;min-height:1.38rem;font-size:.78rem}.kickoff-detail-row strong{color:#edf5fa;font-variant-numeric:tabular-nums}.kickoff-strategy-list{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-strategy-team{display:grid;gap:.34rem;min-width:0;padding:.54rem .58rem;border-radius:var(--ui-radius-md);border:1px solid color-mix(in srgb,var(--team-accent) 26%,transparent);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.kickoff-strategy-team h4{margin:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-strategy-line{margin:0;color:#edf5fa;font-size:.78rem;line-height:1.35;overflow-wrap:anywhere}.kickoff-support-list{display:grid;gap:.22rem;margin:0;padding:0;list-style:none}.kickoff-support-list li{color:#afc4d4;font-size:.74rem;line-height:1.3;overflow-wrap:anywhere}@media(min-width:46rem){.kickoff-overview-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:720px){.kickoff-overview-summary,.kickoff-detail-grid,.kickoff-strategy-list,.kickoff-overview-hero{grid-template-columns:1fr}.kickoff-overview-victor{justify-self:start}}.panel{padding:var(--ui-panel-padding);display:grid;gap:var(--ui-gap-md)}.panel>label,.panel>.detail-grid,.panel>.transport-row,.panel>.module-list{margin-top:0}.panel-copy{margin:0;font-size:.92rem;line-height:1.45}.transport-row{display:flex;gap:var(--ui-gap-sm)}.transport-row>*{flex:1 1 auto}.playback-rate-control{display:grid;gap:var(--ui-gap-xs)}.playback-rate-header{align-items:center;display:flex;justify-content:space-between}.playback-rate-header strong{font-variant-numeric:tabular-nums}.playback-rate-notches{color:var(--ui-muted);display:grid;font-size:.72rem;grid-template-columns:repeat(5,minmax(0,1fr));line-height:1.1;text-align:center}.playback-rate-notches span:first-child{text-align:left}.playback-rate-notches span:last-child{text-align:right}.recording-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm)}.camera-presets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.camera-presets button{font-size:var(--ui-control-font-size)}.camera-presets button[data-active=true]{border-color:#8ec5ff6b;background:linear-gradient(180deg,#21476bf5,#0c1b2afa);color:#f3f8fc;box-shadow:inset 0 0 0 1px #8ec5ff1f}.camera-ball-cam{display:grid;gap:var(--ui-gap-xs)}.camera-ball-cam-modes{grid-template-columns:repeat(3,minmax(0,1fr))}.camera-settings-controls{display:grid;gap:var(--ui-gap-sm)}.camera-settings-controls[hidden]{display:none}.camera-setting-label{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);font-size:.8rem;color:#9fb3c4}.camera-setting-label strong{color:#e8f0f7;font-variant-numeric:tabular-nums}button,select,input[type=file],input[type=range]{border-radius:var(--ui-radius-md)}button,select,input[type=file]{min-height:var(--ui-control-height);border:1px solid var(--ui-border-subtle);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);background:var(--surface-strong);color:var(--text);font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height)}button{cursor:pointer}select{appearance:none;padding-right:1.35rem;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - .76rem) 50%,calc(100% - .52rem) 50%;background-repeat:no-repeat;background-size:.24rem .24rem}button:hover:not(:disabled),select:hover:not(:disabled){border-color:var(--ui-border-hover)}button:disabled,select:disabled,input:disabled{opacity:.55;cursor:not-allowed}input[type=range]{width:100%;margin-top:var(--ui-gap-xs);accent-color:var(--blue)}.metric-readout{font-size:.88rem;font-weight:700;font-variant-numeric:tabular-nums}.toggle{display:inline-flex;align-items:center;gap:.4rem;color:#bfd0dd}.detail-grid{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem .7rem}.detail-grid dt,.detail-grid dd{margin:0}.detail-grid dt{font-size:.68rem;margin-bottom:.12rem}.detail-grid dd{font-size:.84rem;color:var(--text);overflow-wrap:anywhere}.module-groups{display:grid;gap:var(--ui-gap-md)}.module-summary-group{display:grid;gap:var(--ui-gap-xs)}.module-summary-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.module-list{display:flex;flex-wrap:wrap;gap:.5rem}.mechanics-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin-bottom:.65rem}.mechanics-event-list{display:grid;grid-template-columns:repeat(var(--event-source-columns, 1),minmax(9.5rem,1fr));align-items:stretch}.module-settings{display:grid;gap:.75rem}.module-settings-card{display:grid;gap:.75rem;padding:.85rem .9rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.module-settings-subgroup{display:grid;gap:.65rem;padding-top:.15rem;border-top:1px solid rgba(255,255,255,.06)}.module-settings-options{display:grid;gap:.45rem}.module-settings-group-title{margin:0;color:#d7e5ef;font-size:.78rem;font-weight:800}.module-settings-header{display:flex;align-items:start;justify-content:space-between;gap:.8rem}.module-settings-header h3{margin:.1rem 0 0;font-size:.96rem}.module-settings-eyebrow{margin:0;font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#87afd4}.boost-pickup-filter-panel{display:grid;gap:.65rem}.boost-pickup-filter-summary{display:flex;justify-content:end}.boost-pickup-filter-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1rem}.boost-pickup-filter-group{display:grid;align-content:start;gap:.35rem;min-width:0}.boost-pickup-filter-group[hidden]{display:none}.boost-pickup-filter-group-wide{grid-column:1 / -1}.boost-pickup-filter-options{display:flex;flex-wrap:wrap;gap:.35rem .8rem;min-width:0}.boost-pickup-filter-options .toggle{min-width:0}.module-summary-item{appearance:none;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-pill);border:1px solid var(--ui-border-subtle);background:#ffffff08;color:var(--muted);font:inherit;font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height);cursor:pointer;transition:border-color .14s ease,background-color .14s ease,color .14s ease}.module-summary-item:hover{border-color:var(--ui-border-hover);color:var(--text)}.module-summary-item strong{font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.module-summary-item[data-active=true]{border-color:#4b94ff38;background:#4b94ff14;color:#dceafb}@media(max-width:1180px){.sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:860px){.shell{padding:0}.sidebar{grid-template-columns:1fr}.panel-heading{display:grid}.detail-grid{grid-template-columns:1fr 1fr}.viewport-panel{min-height:100dvh}}@media(max-width:560px){.detail-grid{grid-template-columns:1fr}.transport-row{flex-direction:column}.floating-window,.stats-window{left:.55rem;right:.55rem;width:auto}}@media(max-width:720px){.viewport-panel:has(.floating-window:not([hidden])) .viewport{inset:0 0 52dvh}.floating-window{position:fixed;inset:auto 0 0;width:100%;max-width:none;height:52dvh;max-height:52dvh;overflow:auto;border-width:1px 0 0 0;border-radius:1rem 1rem 0 0;transform:none;z-index:30}.floating-window .floating-window-header{cursor:default}}.missed-event-body{display:flex;flex-direction:column;gap:.5rem;padding:.6rem .7rem;max-height:50vh;font-size:.8rem}.missed-event-controls{display:flex;align-items:center;gap:.4rem}.missed-event-controls select{flex:1 1 auto}.missed-event-list{list-style:none;margin:0;padding:0;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.missed-event-list li{display:flex;align-items:center;justify-content:space-between;gap:.4rem;padding:.2rem .3rem;border-radius:.3rem;background:#1c272ee6}.missed-event-status{margin:0;min-height:1rem;color:#9fadb7}.training-pack-shots{list-style:none;margin:.4rem 0 0;padding:0;overflow-y:auto;max-height:12rem;display:flex;flex-direction:column;gap:.25rem;font-size:.8rem}.training-pack-shots li{display:flex;align-items:center;justify-content:space-between;gap:.4rem;padding:.2rem .3rem;border-radius:.3rem;background:#1c272ee6}.training-pack-status{margin:.4rem 0 0;min-height:1rem;font-size:.8rem;color:#9fadb7} diff --git a/crates/rocket-sense-server/static/subtr-actor/assets/main-DHjpjWsc.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/main-DhIgxjyS.js similarity index 68% rename from crates/rocket-sense-server/static/subtr-actor/assets/main-DHjpjWsc.js rename to crates/rocket-sense-server/static/subtr-actor/review/assets/main-DhIgxjyS.js index 6d6e503a..e501fc2a 100644 --- a/crates/rocket-sense-server/static/subtr-actor/assets/main-DHjpjWsc.js +++ b/crates/rocket-sense-server/static/subtr-actor/review/assets/main-DhIgxjyS.js @@ -1,8 +1,8 @@ -function fh(n,e){if(n.frames.length===0)return 0;let t=0,i=n.frames.length-1;for(;t<=i;){const s=Math.floor((t+i)/2),a=n.frames[s]?.time??0;if(ae)i=s-1;else return s}return Math.max(0,t-1)}class vw{_listeners=new Map;on(e,t){let i=this._listeners.get(e);return i||(i=new Set,this._listeners.set(e,i)),i.add(t),this}once(e,t){const i=(...s)=>{this.off(e,i),t(...s)};return this.on(e,i)}off(e,t){const i=this._listeners.get(e);return i?(t?i.delete(t):i.clear(),i.size===0&&this._listeners.delete(e),this):this}removeListener(e,t){return this.off(e,t)}removeAllListeners(e){return e?this._listeners.delete(e):this._listeners.clear(),this}emit(e,...t){const i=this._listeners.get(e);if(!i||i.size===0)return!1;for(const s of[...i])s(...t);return!0}}function ff(n){return n?{x:n.x,y:n.z,z:n.y}:null}function E1(n){return n?{x:n.x,y:n.z,z:n.y,w:-n.w}:null}function C1(n){return n*100/255}const oy={Octane:{length:118.0074,width:84.19941,height:36.15907,offsetX:13.87566,offsetZ:20.75499},Dominus:{length:127.9268,width:83.27995,height:31.3,offsetX:9,offsetZ:15.75},Plank:{length:128.8198,width:84.67036,height:29.3944,offsetX:9.00857,offsetZ:12.0942},Breakout:{length:131.4924,width:80.521,height:30.3,offsetX:12.5,offsetZ:11.75},Hybrid:{length:127.0192,width:82.18787,height:34.15907,offsetX:13.87566,offsetZ:20.75499},Merc:{length:120.72,width:76.71,height:41.66,offsetX:11.37566,offsetZ:21.504988}},A1={21:{name:"Backfire",hitbox:"Octane"},22:{name:"Breakout",hitbox:"Breakout"},23:{name:"Octane",hitbox:"Octane"},24:{name:"Paladin",hitbox:"Plank"},25:{name:"Road Hog",hitbox:"Octane"},26:{name:"Gizmo",hitbox:"Octane"},28:{name:"X-Devil",hitbox:"Hybrid"},29:{name:"Hotshot",hitbox:"Dominus"},30:{name:"Merc",hitbox:"Merc"},31:{name:"Venom",hitbox:"Hybrid"},402:{name:"Takumi",hitbox:"Octane"},403:{name:"Dominus",hitbox:"Dominus"},404:{name:"Scarab",hitbox:"Octane"},523:{name:"Zippy",hitbox:"Octane"},597:{name:"DeLorean Time Machine",hitbox:"Dominus"},600:{name:"Ripper",hitbox:"Dominus"},607:{name:"Grog",hitbox:"Octane"},1018:{name:"Dominus GT",hitbox:"Dominus"},1159:{name:"X-Devil Mk2",hitbox:"Hybrid"},1171:{name:"Masamune",hitbox:"Dominus"},1172:{name:"Marauder",hitbox:"Octane"},1286:{name:"Aftershock",hitbox:"Dominus"},1295:{name:"Takumi RX-T",hitbox:"Octane"},1300:{name:"Road Hog XL",hitbox:"Octane"},1317:{name:"Esper",hitbox:"Hybrid"},1416:{name:"Breakout Type-S",hitbox:"Breakout"},1475:{name:"Proteus",hitbox:"Octane"},1478:{name:"Triton",hitbox:"Octane"},1533:{name:"Vulcan",hitbox:"Octane"},1568:{name:"Octane ZSR",hitbox:"Octane"},1603:{name:"Twin Mill III",hitbox:"Plank"},1623:{name:"Bone Shaker",hitbox:"Octane"},1624:{name:"Endo",hitbox:"Hybrid"},1675:{name:"Ice Charger",hitbox:"Dominus"},1689:{name:"Nemesis",hitbox:"Dominus"},1691:{name:"Mantis",hitbox:"Plank"},1856:{name:"Jager 619",hitbox:"Hybrid"},1883:{name:"Imperator DT5",hitbox:"Dominus"},1894:{name:"Samurai",hitbox:"Breakout"},1919:{name:"Centio",hitbox:"Plank"},1932:{name:"Animus GP",hitbox:"Breakout"},2070:{name:"Werewolf",hitbox:"Dominus"},2268:{name:"Fast & Furious Dodge Charger",hitbox:"Dominus"},2269:{name:"Fast & Furious Nissan Skyline",hitbox:"Hybrid"},2665:{name:"The Dark Knight's Tumbler",hitbox:"Octane"},2666:{name:"Batmobile (1989)",hitbox:"Dominus"},2853:{name:"Twinzer",hitbox:"Octane"},2919:{name:"Jurassic Jeep Wrangler",hitbox:"Octane"},2949:{name:"Fast 4WD",hitbox:"Octane"},2950:{name:"MR11",hitbox:"Dominus"},2951:{name:"Gazella GT",hitbox:"Dominus"},3031:{name:"Cyclone",hitbox:"Breakout"},3155:{name:"Maverick",hitbox:"Dominus"},3156:{name:"Maverick G1",hitbox:"Dominus"},3157:{name:"Maverick GXT",hitbox:"Dominus"},3265:{name:"McLaren 570S",hitbox:"Dominus"},3311:{name:"Komodo",hitbox:"Breakout"},3426:{name:"Diestro",hitbox:"Dominus"},3451:{name:"Nimbus",hitbox:"Hybrid"},3582:{name:"Insidio",hitbox:"Hybrid"},3594:{name:"Artemis G1",hitbox:"Plank"},3614:{name:"Artemis",hitbox:"Plank"},3622:{name:"Artemis GXT",hitbox:"Plank"},3702:{name:"Tygris",hitbox:"Hybrid"},3875:{name:"Guardian GXT",hitbox:"Dominus"},3879:{name:"Guardian",hitbox:"Dominus"},3880:{name:"Guardian G1",hitbox:"Dominus"},4014:{name:"K.I.T.T.",hitbox:"Dominus"},4155:{name:"Ecto-1",hitbox:"Dominus"},4268:{name:"Sentinel",hitbox:"Plank"},4284:{name:"Fennec",hitbox:"Octane"},4318:{name:"Mudcat",hitbox:"Octane"},4319:{name:"Mudcat G1",hitbox:"Octane"},4320:{name:"Mudcat GXT",hitbox:"Octane"},4367:{name:"Chikara GXT",hitbox:"Dominus"},4472:{name:"Chikara",hitbox:"Dominus"},4473:{name:"Chikara G1",hitbox:"Dominus"},4745:{name:"Ronin GXT",hitbox:"Dominus"},4770:{name:"Dominus",hitbox:"Dominus"},4780:{name:"Battle Bus",hitbox:"Merc"},4781:{name:"Peregrine TT",hitbox:"Dominus"},4782:{name:"Psyclops",hitbox:"Body_Tritip_Handling"},4861:{name:"Ronin",hitbox:"Dominus"},4864:{name:"Ronin G1",hitbox:"Dominus"},4906:{name:"Harbinger",hitbox:"Octane"},5020:{name:"Outlaw",hitbox:"Octane"},5039:{name:"Harbinger GXT",hitbox:"Octane"},5188:{name:"Scarab",hitbox:"Octane"},5265:{name:"Formula 1 2021",hitbox:"Plank"},5361:{name:"Dingo",hitbox:"Octane"},5470:{name:"R3MX",hitbox:"Hybrid"},5488:{name:"R3MX GXT",hitbox:"Hybrid"},5547:{name:"007's Aston Martin DB5",hitbox:"Octane"},5709:{name:"NASCAR Ford Mustang",hitbox:"Dominus"},5713:{name:"Ford F-150 RLE",hitbox:"Octane"},5773:{name:"NASCAR Toyota Camry",hitbox:"Dominus"},5823:{name:"NASCAR Chevrolet Camaro",hitbox:"Dominus"},5837:{name:"Outlaw GXT",hitbox:"Octane"},5858:{name:"Tyranno",hitbox:"Dominus"},5879:{name:"Fast & Furious Pontiac Fiero",hitbox:"Hybrid"},5951:{name:"Jackal",hitbox:"Octane"},5964:{name:"Lamborghini Huracan STO",hitbox:"Dominus"},5979:{name:"Tyranno GXT",hitbox:"Dominus"},6122:{name:"Masamune",hitbox:"Dominus"},6243:{name:"Nexus",hitbox:"Breakout"},6244:{name:"BMW M240i",hitbox:"Dominus"},6247:{name:"McLaren 765LT",hitbox:"Dominus"},6260:{name:"007's Aston Martin Valhalla",hitbox:"Dominus"},6489:{name:"Nexus SC",hitbox:"Breakout"},6836:{name:"Ford Mustang Shelby GT350R RLE",hitbox:"Dominus"},6939:{name:"Ford Mustang Mach-E RLE",hitbox:"Octane"},7012:{name:"Tesla Cybertruck",hitbox:"Hybrid"},7052:{name:"Formula 1 2022",hitbox:"Plank"},7211:{name:"Mamba",hitbox:"Dominus"},7336:{name:"Nomad",hitbox:"Merc"},7337:{name:"NASCAR Next Gen Chevrolet Camaro",hitbox:"Dominus"},7338:{name:"NASCAR Next Gen Ford Mustang",hitbox:"Dominus"},7341:{name:"NASCAR Next Gen Toyota Camry",hitbox:"Dominus"},7343:{name:"007's Aston Martin DBS",hitbox:"Dominus"},7415:{name:"Batmobile (2022)",hitbox:"Dominus"},7477:{name:"Nomad GXT",hitbox:"Merc"},7512:{name:"Lamborghini Countach LPI 800-4",hitbox:"Dominus"},7532:{name:"Maestro",hitbox:"Dominus"},7593:{name:"Nissan Z Performance",hitbox:"Dominus"},7651:{name:"Redline",hitbox:"Breakout"},7696:{name:"Whiplash",hitbox:"Breakout"},7772:{name:"Ferrari 296 GTB",hitbox:"Dominus"},7815:{name:"Ford Bronco Raptor RLE",hitbox:"Merc"},7890:{name:"Fuse",hitbox:"Breakout"},7901:{name:"Fast & Furious Mazda RX-7",hitbox:"Breakout"},7947:{name:"Honda Civic Type R",hitbox:"Octane"},7948:{name:"Honda Civic Type R-LE",hitbox:"Octane"},7979:{name:"Stampede",hitbox:"Merc"},8006:{name:"Mako",hitbox:"Breakout"},8360:{name:"Emperor",hitbox:"Breakout"},8361:{name:"Emperor II",hitbox:"Breakout"},8383:{name:"Xentari",hitbox:"Octane"},8454:{name:"Admiral",hitbox:"Dominus"},8524:{name:"Bugatti Centodieci",hitbox:"Plank"},8565:{name:"Emperor II: Frozen",hitbox:"Breakout"},8566:{name:"Emperor II: Scorched",hitbox:"Breakout"},8669:{name:"Ace",hitbox:"Breakout"},8806:{name:"Volkswagen Golf GTI",hitbox:"Octane"},8807:{name:"Volkswagen Golf GTI RLE",hitbox:"Octane"},9053:{name:"Fast & Furious Dodge Charger SRT Hellcat",hitbox:"Dominus"},9084:{name:"Nissan Silvia",hitbox:"Hybrid"},9085:{name:"Nissan Silvia RLE",hitbox:"Hybrid"},9088:{name:"Porsche 911 Turbo",hitbox:"Dominus"},9089:{name:"Porsche 911 Turbo RLE",hitbox:"Dominus"},9140:{name:"Bumblebee",hitbox:"Dominus"},9357:{name:"Diesel",hitbox:"Breakout"},9388:{name:"Lightning McQueen",hitbox:"Dominus"},9427:{name:"Primo",hitbox:"Hybrid"},9894:{name:"Scorpion",hitbox:"Dominus"},10044:{name:"Beskar",hitbox:"Hybrid"},10094:{name:"Ford Mustang GTD",hitbox:"Dominus"},10440:{name:"Nissan Fairlady Z",hitbox:"Dominus"},10441:{name:"Nissan Fairlady Z RLE",hitbox:"Dominus"},10689:{name:"Behemoth",hitbox:"Merc"},10694:{name:"Lockjaw",hitbox:"Dominus"},10697:{name:"The Incredibile",hitbox:"Breakout"},10698:{name:"1966 Cadillac DeVille",hitbox:"Breakout"},10805:{name:"Nissan Skyline GT-R (R32)",hitbox:"Hybrid"},10817:{name:"Quadra Turbo-R",hitbox:"Breakout"},10822:{name:"McLaren Senna",hitbox:"Breakout"},10896:{name:"BMW 1 Series",hitbox:"Octane"},10897:{name:"BMW 1 Series RLE",hitbox:"Octane"},10900:{name:"Shokunin",hitbox:"Octane"},10901:{name:"Shokunin GXT",hitbox:"Octane"},11016:{name:"Porsche 911 GT3 RS",hitbox:"Dominus"},11038:{name:"Revolver",hitbox:"Breakout"},11095:{name:"Dodge Charger Daytona Scat Pack",hitbox:"Dominus"},11098:{name:"Turtle Van",hitbox:"Merc"},11138:{name:"Void Burn",hitbox:"Hybrid"},11141:{name:"Lamborghini Urus SE",hitbox:"Hybrid"},11314:{name:"Jeep Wrangler Rubicon",hitbox:"Merc"},11315:{name:"Ford Mustang Shelby GT500",hitbox:"Dominus"},11336:{name:"Dominus: Neon",hitbox:"Dominus"},11379:{name:"Ram 1500 RHO",hitbox:"Hybrid"},11394:{name:"Azura",hitbox:"Breakout"},11505:{name:"Breakout X",hitbox:"Breakout"},11534:{name:"BMW M3 (E30)",hitbox:"Dominus"},11603:{name:"Fennec ZR-F",hitbox:"Octane"},11677:{name:"Chevrolet Corvette ZR1",hitbox:"Breakout"},11736:{name:"Recoil AV",hitbox:"Merc"},11800:{name:"Megastar",hitbox:"Breakout"},11905:{name:"The Mystery Machine",hitbox:"Merc"},11932:{name:"Hearse",hitbox:"Hybrid"},11933:{name:"Porsche 918 Spyder",hitbox:"Breakout"},11941:{name:"Mercedes-AMG GT 63 S",hitbox:"Dominus"},11949:{name:"Pontiac Firebird",hitbox:"Breakout"},11950:{name:"Chevrolet Astro",hitbox:"Merc"},12142:{name:"Homer's Car",hitbox:"Dominus"},12173:{name:"Ferrari F40",hitbox:"Breakout"}},R1=A1;function bw(n){const e=R1[String(n)];return e?{name:e.name,hitboxType:e.hitbox}:null}function P1(n){if(!n)return null;const e={fov:n.fov,height:n.height,angle:n.angle,distance:n.distance,stiffness:n.stiffness,swivelSpeed:n.swivel_speed};return n.transition_speed!=null&&(e.transitionSpeed=n.transition_speed),e}const I1=2200,L1=!0,D1=!1,k1=.15,O1=10,F1=.1,N1=10,U1=.1,B1=.15,z1=10;function Uo(n,e){if(n.length===0)return null;let t=0,i=n.length-1;if(e<=n[0].time)return n[0];if(e>=n[i].time)return n[i];for(;t>1;n[s].time<=e?t=s:i=s-1}return n[t]}class H1{position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;visible=!0}class V1{constructor(e,t,i){this.isBig=e,this.position=t,this.events=i}isAvailable=!0}class G1 extends vw{constructor(e,t,i,s,a,r=null){super(),this.id=e,this.name=t,this.team=i,this.carName=s,this.hitboxType=a,this.cameraSettings=r}position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;steer=0;boost=0;isBoosting=!1;isSupersonic=!1;isKickoffReset=!1;isVisible=!0;isBallCam=!0}class xw extends vw{constructor(e,t={}){super(),this.raw=e,this.options=t,this._compile()}duration=0;playerList=[];frameTimes=[];rawStartTime=0;ball=new H1;players=new Map;boostPads=new Map;_currentTime=0;_ballTimeline=[];_playerTimelines={};_ballFlags=[];_playerFlags={};_playerCameraEvents={};_teams={};_timelineCompaction=null;_compile(){const e=this.raw.frame_data,t=this.raw.meta,i=e.metadata_frames,s=i[0]?.time??0;this.rawStartTime=s;const a=l=>Math.max(0,l-s);this.duration=i.length?a(i[i.length-1].time):0,this.frameTimes=i.map(l=>a(l.time));const r=new Map;t.team_zero.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:0})),t.team_one.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:1})),e.ball_data.frames.forEach((l,c)=>{if(l==="Empty"||!("Data"in l))return;const u=this._rbToKeyframe(l.Data.rigid_body,a(i[c]?.time??s),c);u&&this._ballTimeline.push(u)}),e.players.forEach(([l,c])=>{const u=this._idKey(l),d=r.get(u);let h=d?.info.name??null,f=d?.team??0;if(!h){for(const T of c.frames)if(T!=="Empty"&&"Data"in T&&T.Data.player_name){h=T.Data.player_name,T.Data.is_team_0!=null&&(f=T.Data.is_team_0?0:1);break}}h||(h=`Player_${u}`);const p=d?.info,g=p?.car_body_id!=null?bw(p.car_body_id):null,_=p?.car_body_name??g?.name??"Octane",m=p?.car_hitbox_family??g?.hitboxType??"Octane",v=[],y=[];c.frames.forEach((T,x)=>{const M=a(i[x]?.time??s);if(T==="Empty"||!("Data"in T))return;const C=this._rbToKeyframe(T.Data.rigid_body,M,x);C&&v.push(C);const w=T.Data.input?.steer;y.push({time:M,boost:C1(T.Data.boost_amount??0),isBoosting:!!T.Data.boost_active,present:!0,steer:w==null?0:Math.max(-1,Math.min(1,(w-128)/128))})});const b=P1(p?.camera_settings);this._playerTimelines[h]=v,this._playerFlags[h]=y,this._teams[h]=f,this.playerList.push({id:u,name:h,team:f,carName:_,hitboxType:m,cameraSettings:b}),this.players.set(h,new G1(u,h,f,_,m,b))});const o=new Map;this.playerList.forEach(l=>o.set(l.id,l.name));for(const[l,c]of this.raw.player_camera_events??[]){const u=o.get(this._idKey(l));u&&(this._playerCameraEvents[u]=c.map(d=>({time:a(i[d.frame]?.time??s),ballCam:d.ball_cam_active})))}this._preprocessMotionTimelines(),this._compileBoostPads(),this.seek(0)}_timelineProcessingOptions(){return{motionSmoothing:this.options.motionSmoothing??L1,smoothingBlendFactor:this.options.smoothingBlendFactor??k1,smoothingAnchorInterval:this.options.smoothingAnchorInterval??O1,timelineCompaction:this.options.timelineCompaction??D1,disableFrameFiltering:this.options.disableFrameFiltering??!1}}_preprocessMotionTimelines(){const e=this._timelineProcessingOptions();e.motionSmoothing&&this._applyVelocityBasedPositionCorrection(e),e.timelineCompaction&&this._applyTimelineCompaction(),e.disableFrameFiltering||this._filterInconsistentFrames()}_applyTimelineCompaction(){const e=this._buildTimelineCompaction();!e||e.gaps.length===0&&e.prematchEndTime===null||(this._timelineCompaction=e,this._ballTimeline=this._compactTimeline(this._ballTimeline,e),Object.entries(this._playerTimelines).forEach(([t,i])=>{this._playerTimelines[t]=this._compactTimeline(i,e)}),Object.entries(this._playerFlags).forEach(([t,i])=>{this._playerFlags[t]=this._compactTimeline(i,e)}),this.frameTimes=this.frameTimes.map(t=>this._compactTime(t,e)),this.duration=e.compactedDuration)}_buildTimelineCompaction(){if(this.frameTimes.length===0)return null;const e=this._detectPostGoalTimeGaps(),t=this._detectFirstKickoffGoTime(),i=t==null?null:Bo(t,e),a=e.reduce((r,o)=>r+o.duration,0)+(i??0);return a<=0?null:{gaps:e,prematchEndTime:i,removedDuration:a,compactedDuration:Math.max(0,this.duration-a)}}_detectPostGoalTimeGaps(){const e=[];for(const t of this.raw.goal_events??[]){const i=t.frame;if(!Number.isInteger(i)||i<0||i>=this.frameTimes.length)continue;const s=this.frameTimes[i];for(let a=i+1;a10)break;const l=o-r;if(l>.3){e.push({beforeFrame:a-1,afterFrame:a,beforeTime:r,afterTime:o,duration:l});break}}}return e}_detectFirstKickoffGoTime(){const e=this.raw.frame_data.metadata_frames;let t=!1;for(let s=0;s0&&(t=!0),t&&a===0)return this.frameTimes[s]??null}const i=e.findIndex(s=>s.replicated_game_state_name===54);return i===-1?null:this.frameTimes[i]??null}_compactTimeline(e,t){const i=this._remapReplayGaps(e,t.gaps);return t.prematchEndTime===null?i:this._remapPrematch(i,t.prematchEndTime)}_remapReplayGaps(e,t){if(t.length===0)return e;const i=[];t.forEach((a,r)=>{const o=e.find(l=>l.time>=a.afterTime);o&&i.push({...o,time:Bo(a.afterTime,t.slice(0,r+1))})});const s=e.filter(a=>!uy(a.time,t)).map(a=>({...a,time:Bo(a.time,t)}));for(const a of i){if(s.some(o=>Math.abs(o.time-a.time)<.001))continue;let r=s.findIndex(o=>o.time>a.time);r===-1&&(r=s.length),s.splice(r,0,a)}return s}_remapPrematch(e,t){let i=null;for(const a of e)if(a.timea.time>=t).map(a=>({...a,time:a.time-t}));return i&&(s.length===0||s[0].time>.001)&&s.unshift({...i,time:0}),s}_compactTime(e,t){const i=Bo(e,t.gaps);return t.prematchEndTime===null?i:Math.max(0,i-t.prematchEndTime)}_applyVelocityBasedPositionCorrection(e){const t=i=>{if(i.length<3)return;let s=0;for(;s=i.length-1)return;let a={...i[s].position};for(let r=s+1;rF1){a={...l.position};continue}if(cy(a,l.position)>N1){a={...l.position};continue}const u={x:(o.velocity.x+l.velocity.x)/2,y:(o.velocity.y+l.velocity.y)/2,z:(o.velocity.z+l.velocity.z)/2},d={x:a.x+u.x*c,y:a.y+u.y*c,z:a.z+u.z*c},h=(r-s)%e.smoothingAnchorInterval===0?.5:e.smoothingBlendFactor;a={x:d.x*(1-h)+l.position.x*h,y:d.y*(1-h)+l.position.y*h,z:d.z*(1-h)+l.position.z*h},l.position={...a}}};t(this._ballTimeline),Object.values(this._playerTimelines).forEach(t)}_filterInconsistentFrames(){this._ballTimeline=this._filterInconsistentTimeline(this._ballTimeline),Object.entries(this._playerTimelines).forEach(([e,t])=>{this._playerTimelines[e]=this._filterInconsistentTimeline(t)})}_filterInconsistentTimeline(e){if(e.length<2)return e;const t=[e[0]];let i=0;for(let s=1;s.001){const u=o*c,d=cy(r.position,a.position),h=Math.abs(d-u)/u;if(Number.isFinite(h)&&h>B1)continue}}t.push(a),i=s}return t}_compileBoostPads(){const e=new Map;(this.raw.boost_pad_events??[]).forEach(t=>{const i=t.kind==="Available"?!0:t.kind&&typeof t.kind=="object"&&"PickedUp"in t.kind?!1:null;if(i===null)return;const s=Math.max(0,t.time-this.rawStartTime);if(this._timelineCompaction&&this._isRemovedByTimelineCompaction(s))return;const a=this._timelineCompaction?this._compactTime(s,this._timelineCompaction):s,r=e.get(t.pad_id);r?r.push({time:a,available:i}):e.set(t.pad_id,[{time:a,available:i}])}),(this.raw.boost_pads??[]).forEach(t=>{const i=(t.pad_id?e.get(t.pad_id):void 0)??[];i.sort((s,a)=>s.time-a.time),this.boostPads.set(t.index,new V1(t.size==="Big",t.position,i))})}_rbToKeyframe(e,t,i){const s=ff(e.location);return s?{time:t,frame:i,position:s,rotation:E1(e.rotation),velocity:ff(e.linear_velocity)??{x:0,y:0,z:0},angularVelocity:ff(e.angular_velocity),sleeping:!!e.sleeping}:null}_isRemovedByTimelineCompaction(e){const t=this._timelineCompaction;if(!t)return!1;if(uy(e,t.gaps))return!0;const i=Bo(e,t.gaps);return t.prematchEndTime!==null&&i=I1}const r=Uo(this._playerFlags[i]??[],e);r&&(s.boost=r.boost,s.isBoosting=r.isBoosting,s.steer=r.steer);const o=Uo(this._playerCameraEvents[i]??[],e);o&&o.ballCam!=null&&(s.isBallCam=o.ballCam);const l=this._playerTimelines[i]??[];s.isVisible=l.length>0&&e>=l[0].time-.001&&e<=l[l.length-1].time+1}for(const i of this.boostPads.values()){if(i.events.length===0)continue;const s=Uo(i.events,e);i.isAvailable=s&&s.time<=e?s.available:!0}}frameIndexAt(e){const t=this.frameTimes;if(t.length===0||e<=t[0])return 0;let i=0,s=t.length-1;if(e>=t[s])return s;for(;i>1;t[a]<=e?i=a:s=a-1}return i}getBall(){return this.ball}getPlayer(e){return this.players.get(e)}getPlayerById(e){for(const t of this.players.values())if(t.id===e)return t}getAllPlayers(){return Array.from(this.players.values())}getPlayerTeams(){return{...this._teams}}getGameTimeMap(){return[]}getCountdownEvents(){return[]}getPlayerStatsTimelines(){return{}}getGameEventTimeline(){return[]}getAdvancedStats(){return null}getEvents(){return[]}getEventsInRange(){return[]}getTextOverlaysAt(){return[]}getGamePhaseAt(){return null}}function ly(n){return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)}function cy(n,e){const t=e.x-n.x,i=e.y-n.y,s=e.z-n.z;return Math.sqrt(t*t+i*i+s*s)}function Bo(n,e){let t=0;for(const i of e){if(n=i.afterTime){t+=i.duration;continue}return i.beforeTime-t}return n-t}function uy(n,e){return e.some(t=>n>t.beforeTime&&n>8&255]+Mn[n>>16&255]+Mn[n>>24&255]+"-"+Mn[e&255]+Mn[e>>8&255]+"-"+Mn[e>>16&15|64]+Mn[e>>24&255]+"-"+Mn[t&63|128]+Mn[t>>8&255]+"-"+Mn[t>>16&255]+Mn[t>>24&255]+Mn[i&255]+Mn[i>>8&255]+Mn[i>>16&255]+Mn[i>>24&255]).toLowerCase()}function Ze(n,e,t){return Math.max(e,Math.min(t,n))}function Z_(n,e){return(n%e+e)%e}function MC(n,e,t,i,s){return i+(n-e)*(s-i)/(t-e)}function EC(n,e,t){return n!==e?(t-n)/(e-n):0}function Al(n,e,t){return(1-t)*n+t*e}function CC(n,e,t,i){return Al(n,e,1-Math.exp(-t*i))}function AC(n,e=1){return e-Math.abs(Z_(n,e*2)-e)}function RC(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function PC(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function IC(n,e){return n+Math.floor(Math.random()*(e-n+1))}function LC(n,e){return n+Math.random()*(e-n)}function DC(n){return n*(.5-Math.random())}function kC(n){n!==void 0&&(dy=n);let e=dy+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function OC(n){return n*nr}function FC(n){return n*To}function NC(n){return(n&n-1)===0&&n!==0}function UC(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function BC(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function zC(n,e,t,i,s){const a=Math.cos,r=Math.sin,o=a(t/2),l=r(t/2),c=a((e+i)/2),u=r((e+i)/2),d=a((e-i)/2),h=r((e-i)/2),f=a((i-e)/2),p=r((i-e)/2);switch(s){case"XYX":n.set(o*u,l*d,l*h,o*c);break;case"YZY":n.set(l*h,o*u,l*d,o*c);break;case"ZXZ":n.set(l*d,l*h,o*u,o*c);break;case"XZX":n.set(o*u,l*p,l*f,o*c);break;case"YXY":n.set(l*f,o*u,l*p,o*c);break;case"ZYZ":n.set(l*p,l*f,o*u,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}}function zn(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function ut(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}const vt={DEG2RAD:nr,RAD2DEG:To,generateUUID:pi,clamp:Ze,euclideanModulo:Z_,mapLinear:MC,inverseLerp:EC,lerp:Al,damp:CC,pingpong:AC,smoothstep:RC,smootherstep:PC,randInt:IC,randFloat:LC,randFloatSpread:DC,seededRandom:kC,degToRad:OC,radToDeg:FC,isPowerOfTwo:NC,ceilPowerOfTwo:UC,floorPowerOfTwo:BC,setQuaternionFromProperEuler:zC,normalize:ut,denormalize:zn};class te{constructor(e=0,t=0){te.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6],this.y=s[1]*t+s[4]*i+s[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Ze(this.x,e.x,t.x),this.y=Ze(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Ze(this.x,e,t),this.y=Ze(this.y,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ze(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Ze(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),s=Math.sin(t),a=this.x-e.x,r=this.y-e.y;return this.x=a*i-r*s+e.x,this.y=a*s+r*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class dt{constructor(e=0,t=0,i=0,s=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=s}static slerpFlat(e,t,i,s,a,r,o){let l=i[s+0],c=i[s+1],u=i[s+2],d=i[s+3];const h=a[r+0],f=a[r+1],p=a[r+2],g=a[r+3];if(o===0){e[t+0]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d;return}if(o===1){e[t+0]=h,e[t+1]=f,e[t+2]=p,e[t+3]=g;return}if(d!==g||l!==h||c!==f||u!==p){let _=1-o;const m=l*h+c*f+u*p+d*g,v=m>=0?1:-1,y=1-m*m;if(y>Number.EPSILON){const T=Math.sqrt(y),x=Math.atan2(T,m*v);_=Math.sin(_*x)/T,o=Math.sin(o*x)/T}const b=o*v;if(l=l*_+h*b,c=c*_+f*b,u=u*_+p*b,d=d*_+g*b,_===1-o){const T=1/Math.sqrt(l*l+c*c+u*u+d*d);l*=T,c*=T,u*=T,d*=T}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,s,a,r){const o=i[s],l=i[s+1],c=i[s+2],u=i[s+3],d=a[r],h=a[r+1],f=a[r+2],p=a[r+3];return e[t]=o*p+u*d+l*f-c*h,e[t+1]=l*p+u*h+c*d-o*f,e[t+2]=c*p+u*f+o*h-l*d,e[t+3]=u*p-o*d-l*h-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,s){return this._x=e,this._y=t,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const i=e._x,s=e._y,a=e._z,r=e._order,o=Math.cos,l=Math.sin,c=o(i/2),u=o(s/2),d=o(a/2),h=l(i/2),f=l(s/2),p=l(a/2);switch(r){case"XYZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"YXZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"ZXY":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"ZYX":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"YZX":this._x=h*u*d+c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d-h*f*p;break;case"XZY":this._x=h*u*d-c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d+h*f*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+r)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,s=Math.sin(i);return this._x=e.x*s,this._y=e.y*s,this._z=e.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],s=t[4],a=t[8],r=t[1],o=t[5],l=t[9],c=t[2],u=t[6],d=t[10],h=i+o+d;if(h>0){const f=.5/Math.sqrt(h+1);this._w=.25/f,this._x=(u-l)*f,this._y=(a-c)*f,this._z=(r-s)*f}else if(i>o&&i>d){const f=2*Math.sqrt(1+i-o-d);this._w=(u-l)/f,this._x=.25*f,this._y=(s+r)/f,this._z=(a+c)/f}else if(o>d){const f=2*Math.sqrt(1+o-i-d);this._w=(a-c)/f,this._x=(s+r)/f,this._y=.25*f,this._z=(l+u)/f}else{const f=2*Math.sqrt(1+d-i-o);this._w=(r-s)/f,this._x=(a+c)/f,this._y=(l+u)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Ze(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const s=Math.min(1,t/i);return this.slerp(e,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,s=e._y,a=e._z,r=e._w,o=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+r*o+s*c-a*l,this._y=s*u+r*l+a*o-i*c,this._z=a*u+r*c+i*l-s*o,this._w=r*u-i*o-s*l-a*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);const i=this._x,s=this._y,a=this._z,r=this._w;let o=r*e._w+i*e._x+s*e._y+a*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=r,this._x=i,this._y=s,this._z=a,this;const l=1-o*o;if(l<=Number.EPSILON){const f=1-t;return this._w=f*r+t*this._w,this._x=f*i+t*this._x,this._y=f*s+t*this._y,this._z=f*a+t*this._z,this.normalize(),this}const c=Math.sqrt(l),u=Math.atan2(c,o),d=Math.sin((1-t)*u)/c,h=Math.sin(t*u)/c;return this._w=r*d+this._w*h,this._x=i*d+this._x*h,this._y=s*d+this._y*h,this._z=a*d+this._z*h,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),a=Math.sqrt(i);return this.set(s*Math.sin(e),s*Math.cos(e),a*Math.sin(t),a*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class S{constructor(e=0,t=0,i=0){S.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(hy.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(hy.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[3]*i+a[6]*s,this.y=a[1]*t+a[4]*i+a[7]*s,this.z=a[2]*t+a[5]*i+a[8]*s,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=e.elements,r=1/(a[3]*t+a[7]*i+a[11]*s+a[15]);return this.x=(a[0]*t+a[4]*i+a[8]*s+a[12])*r,this.y=(a[1]*t+a[5]*i+a[9]*s+a[13])*r,this.z=(a[2]*t+a[6]*i+a[10]*s+a[14])*r,this}applyQuaternion(e){const t=this.x,i=this.y,s=this.z,a=e.x,r=e.y,o=e.z,l=e.w,c=2*(r*s-o*i),u=2*(o*t-a*s),d=2*(a*i-r*t);return this.x=t+l*c+r*d-o*u,this.y=i+l*u+o*c-a*d,this.z=s+l*d+a*u-r*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*s,this.y=a[1]*t+a[5]*i+a[9]*s,this.z=a[2]*t+a[6]*i+a[10]*s,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Ze(this.x,e.x,t.x),this.y=Ze(this.y,e.y,t.y),this.z=Ze(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Ze(this.x,e,t),this.y=Ze(this.y,e,t),this.z=Ze(this.z,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ze(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,s=e.y,a=e.z,r=t.x,o=t.y,l=t.z;return this.x=s*l-a*o,this.y=a*r-i*l,this.z=i*o-s*r,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return pf.copy(this).projectOnVector(e),this.sub(pf)}reflect(e){return this.sub(pf.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Ze(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,s=this.z-e.z;return t*t+i*i+s*s}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const s=Math.sin(t)*e;return this.x=s*Math.sin(i),this.y=Math.cos(t)*e,this.z=s*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),s=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=s,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const pf=new S,hy=new dt;class st{constructor(e,t,i,s,a,r,o,l,c){st.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c)}set(e,t,i,s,a,r,o,l,c){const u=this.elements;return u[0]=e,u[1]=s,u[2]=o,u[3]=t,u[4]=a,u[5]=l,u[6]=i,u[7]=r,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[3],l=i[6],c=i[1],u=i[4],d=i[7],h=i[2],f=i[5],p=i[8],g=s[0],_=s[3],m=s[6],v=s[1],y=s[4],b=s[7],T=s[2],x=s[5],M=s[8];return a[0]=r*g+o*v+l*T,a[3]=r*_+o*y+l*x,a[6]=r*m+o*b+l*M,a[1]=c*g+u*v+d*T,a[4]=c*_+u*y+d*x,a[7]=c*m+u*b+d*M,a[2]=h*g+f*v+p*T,a[5]=h*_+f*y+p*x,a[8]=h*m+f*b+p*M,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8];return t*r*u-t*o*c-i*a*u+i*o*l+s*a*c-s*r*l}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=u*r-o*c,h=o*l-u*a,f=c*a-r*l,p=t*d+i*h+s*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const g=1/p;return e[0]=d*g,e[1]=(s*c-u*i)*g,e[2]=(o*i-s*r)*g,e[3]=h*g,e[4]=(u*t-s*l)*g,e[5]=(s*a-o*t)*g,e[6]=f*g,e[7]=(i*l-c*t)*g,e[8]=(r*t-i*a)*g,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,s,a,r,o){const l=Math.cos(a),c=Math.sin(a);return this.set(i*l,i*c,-i*(l*r+c*o)+r+e,-s*c,s*l,-s*(-c*r+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(mf.makeScale(e,t)),this}rotate(e){return this.premultiply(mf.makeRotation(-e)),this}translate(e,t){return this.premultiply(mf.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<9;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}}const mf=new st;function cS(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}const HC={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function Yr(n,e){return new HC[n](e)}function Hl(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function uS(){const n=Hl("canvas");return n.style.display="block",n}const fy={};function Vl(n){n in fy||(fy[n]=!0,console.warn(n))}function VC(n,e,t){return new Promise(function(i,s){function a(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:s();break;case n.TIMEOUT_EXPIRED:setTimeout(a,t);break;default:i()}}setTimeout(a,t)})}const py=new st().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),my=new st().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function GC(){const n={enabled:!0,workingColorSpace:xn,spaces:{},convert:function(s,a,r){return this.enabled===!1||a===r||!a||!r||(this.spaces[a].transfer===Pt&&(s.r=Fs(s.r),s.g=Fs(s.g),s.b=Fs(s.b)),this.spaces[a].primaries!==this.spaces[r].primaries&&(s.applyMatrix3(this.spaces[a].toXYZ),s.applyMatrix3(this.spaces[r].fromXYZ)),this.spaces[r].transfer===Pt&&(s.r=to(s.r),s.g=to(s.g),s.b=to(s.b))),s},workingToColorSpace:function(s,a){return this.convert(s,this.workingColorSpace,a)},colorSpaceToWorking:function(s,a){return this.convert(s,a,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===Ls?Bl:this.spaces[s].transfer},getToneMappingMode:function(s){return this.spaces[s].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(s,a=this.workingColorSpace){return s.fromArray(this.spaces[a].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,a,r){return s.copy(this.spaces[a].toXYZ).multiply(this.spaces[r].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(s,a){return Vl("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(s,a)},toWorkingColorSpace:function(s,a){return Vl("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(s,a)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[xn]:{primaries:e,whitePoint:i,transfer:Bl,toXYZ:py,fromXYZ:my,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:gt},outputColorSpaceConfig:{drawingBufferColorSpace:gt}},[gt]:{primaries:e,whitePoint:i,transfer:Pt,toXYZ:py,fromXYZ:my,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:gt}}}),n}const at=GC();function Fs(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function to(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}let yr;class dS{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{yr===void 0&&(yr=Hl("canvas")),yr.width=e.width,yr.height=e.height;const s=yr.getContext("2d");e instanceof ImageData?s.putImageData(e,0,0):s.drawImage(e,0,0,e.width,e.height),i=yr}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=Hl("canvas");t.width=e.width,t.height=e.height;const i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);const s=i.getImageData(0,0,e.width,e.height),a=s.data;for(let r=0;r1),this.pmremVersion=0}get width(){return this.source.getSize(gf).x}get height(){return this.source.getSize(gf).y}get depth(){return this.source.getSize(gf).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Texture.setValues(): property '${t}' does not exist.`);continue}s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==mh)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case ps:e.x=e.x-Math.floor(e.x);break;case Hn:e.x=e.x<0?0:1;break;case go:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case ps:e.y=e.y-Math.floor(e.y);break;case Hn:e.y=e.y<0?0:1;break;case go:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}}Bt.DEFAULT_IMAGE=null;Bt.DEFAULT_MAPPING=mh;Bt.DEFAULT_ANISOTROPY=1;class qe{constructor(e=0,t=0,i=0,s=1){qe.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=s}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=this.w,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*s+r[12]*a,this.y=r[1]*t+r[5]*i+r[9]*s+r[13]*a,this.z=r[2]*t+r[6]*i+r[10]*s+r[14]*a,this.w=r[3]*t+r[7]*i+r[11]*s+r[15]*a,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,s,a;const l=e.elements,c=l[0],u=l[4],d=l[8],h=l[1],f=l[5],p=l[9],g=l[2],_=l[6],m=l[10];if(Math.abs(u-h)<.01&&Math.abs(d-g)<.01&&Math.abs(p-_)<.01){if(Math.abs(u+h)<.1&&Math.abs(d+g)<.1&&Math.abs(p+_)<.1&&Math.abs(c+f+m-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const y=(c+1)/2,b=(f+1)/2,T=(m+1)/2,x=(u+h)/4,M=(d+g)/4,C=(p+_)/4;return y>b&&y>T?y<.01?(i=0,s=.707106781,a=.707106781):(i=Math.sqrt(y),s=x/i,a=M/i):b>T?b<.01?(i=.707106781,s=0,a=.707106781):(s=Math.sqrt(b),i=x/s,a=C/s):T<.01?(i=.707106781,s=.707106781,a=0):(a=Math.sqrt(T),i=M/a,s=C/a),this.set(i,s,a,t),this}let v=Math.sqrt((_-p)*(_-p)+(d-g)*(d-g)+(h-u)*(h-u));return Math.abs(v)<.001&&(v=1),this.x=(_-p)/v,this.y=(d-g)/v,this.z=(h-u)/v,this.w=Math.acos((c+f+m-1)/2),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Ze(this.x,e.x,t.x),this.y=Ze(this.y,e.y,t.y),this.z=Ze(this.z,e.z,t.z),this.w=Ze(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Ze(this.x,e,t),this.y=Ze(this.y,e,t),this.z=Ze(this.z,e,t),this.w=Ze(this.w,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ze(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class J_ extends gs{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Vt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new qe(0,0,e,t),this.scissorTest=!1,this.viewport=new qe(0,0,e,t);const s={width:e,height:t,depth:i.depth},a=new Bt(s);this.textures=[];const r=i.count;for(let o=0;o1;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Ii),Ii.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(zo),yc.subVectors(this.max,zo),vr.subVectors(e.a,zo),br.subVectors(e.b,zo),xr.subVectors(e.c,zo),Vs.subVectors(br,vr),Gs.subVectors(xr,br),ga.subVectors(vr,xr);let t=[0,-Vs.z,Vs.y,0,-Gs.z,Gs.y,0,-ga.z,ga.y,Vs.z,0,-Vs.x,Gs.z,0,-Gs.x,ga.z,0,-ga.x,-Vs.y,Vs.x,0,-Gs.y,Gs.x,0,-ga.y,ga.x,0];return!yf(t,vr,br,xr,yc)||(t=[1,0,0,0,1,0,0,0,1],!yf(t,vr,br,xr,yc))?!1:(vc.crossVectors(Vs,Gs),t=[vc.x,vc.y,vc.z],yf(t,vr,br,xr,yc))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ii).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ii).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(vs[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),vs[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),vs[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),vs[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),vs[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),vs[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),vs[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),vs[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(vs),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}}const vs=[new S,new S,new S,new S,new S,new S,new S,new S],Ii=new S,gc=new vn,vr=new S,br=new S,xr=new S,Vs=new S,Gs=new S,ga=new S,zo=new S,yc=new S,vc=new S,ya=new S;function yf(n,e,t,i,s){for(let a=0,r=n.length-3;a<=r;a+=3){ya.fromArray(n,a);const o=s.x*Math.abs(ya.x)+s.y*Math.abs(ya.y)+s.z*Math.abs(ya.z),l=e.dot(ya),c=t.dot(ya),u=i.dot(ya);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>o)return!1}return!0}const qC=new vn,Ho=new S,vf=new S;class bn{constructor(e=new S,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const i=this.center;t!==void 0?i.copy(t):qC.setFromPoints(e).getCenter(i);let s=0;for(let a=0,r=e.length;athis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;Ho.subVectors(e,this.center);const t=Ho.lengthSq();if(t>this.radius*this.radius){const i=Math.sqrt(t),s=(i-this.radius)*.5;this.center.addScaledVector(Ho,s/i),this.radius+=s}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(vf.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Ho.copy(e.center).add(vf)),this.expandByPoint(Ho.copy(e.center).sub(vf))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}}const bs=new S,bf=new S,bc=new S,$s=new S,xf=new S,xc=new S,wf=new S;class fr{constructor(e=new S,t=new S(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,bs)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=bs.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(bs.copy(this.origin).addScaledVector(this.direction,t),bs.distanceToSquared(e))}distanceSqToSegment(e,t,i,s){bf.copy(e).add(t).multiplyScalar(.5),bc.copy(t).sub(e).normalize(),$s.copy(this.origin).sub(bf);const a=e.distanceTo(t)*.5,r=-this.direction.dot(bc),o=$s.dot(this.direction),l=-$s.dot(bc),c=$s.lengthSq(),u=Math.abs(1-r*r);let d,h,f,p;if(u>0)if(d=r*l-o,h=r*o-l,p=a*u,d>=0)if(h>=-p)if(h<=p){const g=1/u;d*=g,h*=g,f=d*(d+r*h+2*o)+h*(r*d+h+2*l)+c}else h=a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h=-a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h<=-p?(d=Math.max(0,-(-r*a+o)),h=d>0?-a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c):h<=p?(d=0,h=Math.min(Math.max(-a,-l),a),f=h*(h+2*l)+c):(d=Math.max(0,-(r*a+o)),h=d>0?a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c);else h=r>0?-a:a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,d),s&&s.copy(bf).addScaledVector(bc,h),f}intersectSphere(e,t){bs.subVectors(e.center,this.origin);const i=bs.dot(this.direction),s=bs.dot(bs)-i*i,a=e.radius*e.radius;if(s>a)return null;const r=Math.sqrt(a-s),o=i-r,l=i+r;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,s,a,r,o,l;const c=1/this.direction.x,u=1/this.direction.y,d=1/this.direction.z,h=this.origin;return c>=0?(i=(e.min.x-h.x)*c,s=(e.max.x-h.x)*c):(i=(e.max.x-h.x)*c,s=(e.min.x-h.x)*c),u>=0?(a=(e.min.y-h.y)*u,r=(e.max.y-h.y)*u):(a=(e.max.y-h.y)*u,r=(e.min.y-h.y)*u),i>r||a>s||((a>i||isNaN(i))&&(i=a),(r=0?(o=(e.min.z-h.z)*d,l=(e.max.z-h.z)*d):(o=(e.max.z-h.z)*d,l=(e.min.z-h.z)*d),i>l||o>s)||((o>i||i!==i)&&(i=o),(l=0?i:s,t)}intersectsBox(e){return this.intersectBox(e,bs)!==null}intersectTriangle(e,t,i,s,a){xf.subVectors(t,e),xc.subVectors(i,e),wf.crossVectors(xf,xc);let r=this.direction.dot(wf),o;if(r>0){if(s)return null;o=1}else if(r<0)o=-1,r=-r;else return null;$s.subVectors(this.origin,e);const l=o*this.direction.dot(xc.crossVectors($s,xc));if(l<0)return null;const c=o*this.direction.dot(xf.cross($s));if(c<0||l+c>r)return null;const u=-o*$s.dot(wf);return u<0?null:this.at(u/r,a)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Me{constructor(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){Me.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_)}set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){const m=this.elements;return m[0]=e,m[4]=t,m[8]=i,m[12]=s,m[1]=a,m[5]=r,m[9]=o,m[13]=l,m[2]=c,m[6]=u,m[10]=d,m[14]=h,m[3]=f,m[7]=p,m[11]=g,m[15]=_,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Me().fromArray(this.elements)}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){const t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,i=e.elements,s=1/wr.setFromMatrixColumn(e,0).length(),a=1/wr.setFromMatrixColumn(e,1).length(),r=1/wr.setFromMatrixColumn(e,2).length();return t[0]=i[0]*s,t[1]=i[1]*s,t[2]=i[2]*s,t[3]=0,t[4]=i[4]*a,t[5]=i[5]*a,t[6]=i[6]*a,t[7]=0,t[8]=i[8]*r,t[9]=i[9]*r,t[10]=i[10]*r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,i=e.x,s=e.y,a=e.z,r=Math.cos(i),o=Math.sin(i),l=Math.cos(s),c=Math.sin(s),u=Math.cos(a),d=Math.sin(a);if(e.order==="XYZ"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=-l*d,t[8]=c,t[1]=f+p*c,t[5]=h-g*c,t[9]=-o*l,t[2]=g-h*c,t[6]=p+f*c,t[10]=r*l}else if(e.order==="YXZ"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h+g*o,t[4]=p*o-f,t[8]=r*c,t[1]=r*d,t[5]=r*u,t[9]=-o,t[2]=f*o-p,t[6]=g+h*o,t[10]=r*l}else if(e.order==="ZXY"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h-g*o,t[4]=-r*d,t[8]=p+f*o,t[1]=f+p*o,t[5]=r*u,t[9]=g-h*o,t[2]=-r*c,t[6]=o,t[10]=r*l}else if(e.order==="ZYX"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=p*c-f,t[8]=h*c+g,t[1]=l*d,t[5]=g*c+h,t[9]=f*c-p,t[2]=-c,t[6]=o*l,t[10]=r*l}else if(e.order==="YZX"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=g-h*d,t[8]=p*d+f,t[1]=d,t[5]=r*u,t[9]=-o*u,t[2]=-c*u,t[6]=f*d+p,t[10]=h-g*d}else if(e.order==="XZY"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=-d,t[8]=c*u,t[1]=h*d+g,t[5]=r*u,t[9]=f*d-p,t[2]=p*d-f,t[6]=o*u,t[10]=g*d+h}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(YC,e,jC)}lookAt(e,t,i){const s=this.elements;return li.subVectors(e,t),li.lengthSq()===0&&(li.z=1),li.normalize(),Ws.crossVectors(i,li),Ws.lengthSq()===0&&(Math.abs(i.z)===1?li.x+=1e-4:li.z+=1e-4,li.normalize(),Ws.crossVectors(i,li)),Ws.normalize(),wc.crossVectors(li,Ws),s[0]=Ws.x,s[4]=wc.x,s[8]=li.x,s[1]=Ws.y,s[5]=wc.y,s[9]=li.y,s[2]=Ws.z,s[6]=wc.z,s[10]=li.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[4],l=i[8],c=i[12],u=i[1],d=i[5],h=i[9],f=i[13],p=i[2],g=i[6],_=i[10],m=i[14],v=i[3],y=i[7],b=i[11],T=i[15],x=s[0],M=s[4],C=s[8],w=s[12],E=s[1],R=s[5],D=s[9],O=s[13],k=s[2],U=s[6],F=s[10],W=s[14],H=s[3],ne=s[7],oe=s[11],pe=s[15];return a[0]=r*x+o*E+l*k+c*H,a[4]=r*M+o*R+l*U+c*ne,a[8]=r*C+o*D+l*F+c*oe,a[12]=r*w+o*O+l*W+c*pe,a[1]=u*x+d*E+h*k+f*H,a[5]=u*M+d*R+h*U+f*ne,a[9]=u*C+d*D+h*F+f*oe,a[13]=u*w+d*O+h*W+f*pe,a[2]=p*x+g*E+_*k+m*H,a[6]=p*M+g*R+_*U+m*ne,a[10]=p*C+g*D+_*F+m*oe,a[14]=p*w+g*O+_*W+m*pe,a[3]=v*x+y*E+b*k+T*H,a[7]=v*M+y*R+b*U+T*ne,a[11]=v*C+y*D+b*F+T*oe,a[15]=v*w+y*O+b*W+T*pe,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[4],s=e[8],a=e[12],r=e[1],o=e[5],l=e[9],c=e[13],u=e[2],d=e[6],h=e[10],f=e[14],p=e[3],g=e[7],_=e[11],m=e[15];return p*(+a*l*d-s*c*d-a*o*h+i*c*h+s*o*f-i*l*f)+g*(+t*l*f-t*c*h+a*r*h-s*r*f+s*c*u-a*l*u)+_*(+t*c*d-t*o*f-a*r*d+i*r*f+a*o*u-i*c*u)+m*(-s*o*u-t*l*d+t*o*h+s*r*d-i*r*h+i*l*u)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){const s=this.elements;return e.isVector3?(s[12]=e.x,s[13]=e.y,s[14]=e.z):(s[12]=e,s[13]=t,s[14]=i),this}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=e[9],h=e[10],f=e[11],p=e[12],g=e[13],_=e[14],m=e[15],v=d*_*c-g*h*c+g*l*f-o*_*f-d*l*m+o*h*m,y=p*h*c-u*_*c-p*l*f+r*_*f+u*l*m-r*h*m,b=u*g*c-p*d*c+p*o*f-r*g*f-u*o*m+r*d*m,T=p*d*l-u*g*l-p*o*h+r*g*h+u*o*_-r*d*_,x=t*v+i*y+s*b+a*T;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/x;return e[0]=v*M,e[1]=(g*h*a-d*_*a-g*s*f+i*_*f+d*s*m-i*h*m)*M,e[2]=(o*_*a-g*l*a+g*s*c-i*_*c-o*s*m+i*l*m)*M,e[3]=(d*l*a-o*h*a-d*s*c+i*h*c+o*s*f-i*l*f)*M,e[4]=y*M,e[5]=(u*_*a-p*h*a+p*s*f-t*_*f-u*s*m+t*h*m)*M,e[6]=(p*l*a-r*_*a-p*s*c+t*_*c+r*s*m-t*l*m)*M,e[7]=(r*h*a-u*l*a+u*s*c-t*h*c-r*s*f+t*l*f)*M,e[8]=b*M,e[9]=(p*d*a-u*g*a-p*i*f+t*g*f+u*i*m-t*d*m)*M,e[10]=(r*g*a-p*o*a+p*i*c-t*g*c-r*i*m+t*o*m)*M,e[11]=(u*o*a-r*d*a-u*i*c+t*d*c+r*i*f-t*o*f)*M,e[12]=T*M,e[13]=(u*g*s-p*d*s+p*i*h-t*g*h-u*i*_+t*d*_)*M,e[14]=(p*o*s-r*g*s-p*i*l+t*g*l+r*i*_-t*o*_)*M,e[15]=(r*d*s-u*o*s+u*i*l-t*d*l-r*i*h+t*o*h)*M,this}scale(e){const t=this.elements,i=e.x,s=e.y,a=e.z;return t[0]*=i,t[4]*=s,t[8]*=a,t[1]*=i,t[5]*=s,t[9]*=a,t[2]*=i,t[6]*=s,t[10]*=a,t[3]*=i,t[7]*=s,t[11]*=a,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],i=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],s=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,i,s))}makeTranslation(e,t,i){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const i=Math.cos(t),s=Math.sin(t),a=1-i,r=e.x,o=e.y,l=e.z,c=a*r,u=a*o;return this.set(c*r+i,c*o-s*l,c*l+s*o,0,c*o+s*l,u*o+i,u*l-s*r,0,c*l-s*o,u*l+s*r,a*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,s,a,r){return this.set(1,i,a,0,e,1,r,0,t,s,1,0,0,0,0,1),this}compose(e,t,i){const s=this.elements,a=t._x,r=t._y,o=t._z,l=t._w,c=a+a,u=r+r,d=o+o,h=a*c,f=a*u,p=a*d,g=r*u,_=r*d,m=o*d,v=l*c,y=l*u,b=l*d,T=i.x,x=i.y,M=i.z;return s[0]=(1-(g+m))*T,s[1]=(f+b)*T,s[2]=(p-y)*T,s[3]=0,s[4]=(f-b)*x,s[5]=(1-(h+m))*x,s[6]=(_+v)*x,s[7]=0,s[8]=(p+y)*M,s[9]=(_-v)*M,s[10]=(1-(h+g))*M,s[11]=0,s[12]=e.x,s[13]=e.y,s[14]=e.z,s[15]=1,this}decompose(e,t,i){const s=this.elements;let a=wr.set(s[0],s[1],s[2]).length();const r=wr.set(s[4],s[5],s[6]).length(),o=wr.set(s[8],s[9],s[10]).length();this.determinant()<0&&(a=-a),e.x=s[12],e.y=s[13],e.z=s[14],Li.copy(this);const c=1/a,u=1/r,d=1/o;return Li.elements[0]*=c,Li.elements[1]*=c,Li.elements[2]*=c,Li.elements[4]*=u,Li.elements[5]*=u,Li.elements[6]*=u,Li.elements[8]*=d,Li.elements[9]*=d,Li.elements[10]*=d,t.setFromRotationMatrix(Li),i.x=a,i.y=r,i.z=o,this}makePerspective(e,t,i,s,a,r,o=hi,l=!1){const c=this.elements,u=2*a/(t-e),d=2*a/(i-s),h=(t+e)/(t-e),f=(i+s)/(i-s);let p,g;if(l)p=a/(r-a),g=r*a/(r-a);else if(o===hi)p=-(r+a)/(r-a),g=-2*r*a/(r-a);else if(o===So)p=-r/(r-a),g=-r*a/(r-a);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=h,c[12]=0,c[1]=0,c[5]=d,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,i,s,a,r,o=hi,l=!1){const c=this.elements,u=2/(t-e),d=2/(i-s),h=-(t+e)/(t-e),f=-(i+s)/(i-s);let p,g;if(l)p=1/(r-a),g=r/(r-a);else if(o===hi)p=-2/(r-a),g=-(r+a)/(r-a);else if(o===So)p=-1/(r-a),g=-a/(r-a);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=0,c[12]=h,c[1]=0,c[5]=d,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<16;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}}const wr=new S,Li=new Me,YC=new S(0,0,0),jC=new S(1,1,1),Ws=new S,wc=new S,li=new S,_y=new Me,gy=new dt;class an{constructor(e=0,t=0,i=0,s=an.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=s}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,s=this._order){return this._x=e,this._y=t,this._z=i,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){const s=e.elements,a=s[0],r=s[4],o=s[8],l=s[1],c=s[5],u=s[9],d=s[2],h=s[6],f=s[10];switch(t){case"XYZ":this._y=Math.asin(Ze(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,f),this._z=Math.atan2(-r,a)):(this._x=Math.atan2(h,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Ze(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-d,a),this._z=0);break;case"ZXY":this._x=Math.asin(Ze(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-d,f),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(l,a));break;case"ZYX":this._y=Math.asin(-Ze(d,-1,1)),Math.abs(d)<.9999999?(this._x=Math.atan2(h,f),this._z=Math.atan2(l,a)):(this._x=0,this._z=Math.atan2(-r,c));break;case"YZX":this._z=Math.asin(Ze(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-d,a)):(this._x=0,this._y=Math.atan2(o,f));break;case"XZY":this._z=Math.asin(-Ze(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(h,c),this._y=Math.atan2(o,a)):(this._x=Math.atan2(-u,f),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,i===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return _y.makeRotationFromQuaternion(e),this.setFromRotationMatrix(_y,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return gy.setFromEuler(this),this.setFromQuaternion(gy,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}an.DEFAULT_ORDER="XYZ";class Eh{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(o=>({...o})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(e),s.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(s.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(s.boundingBox=this.boundingBox.toJSON()));function a(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=a(e.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),u.length>0&&(i.images=u),d.length>0&&(i.shapes=d),h.length>0&&(i.skeletons=h),f.length>0&&(i.animations=f),p.length>0&&(i.nodes=p)}return i.object=s,i;function r(o){const l=[];for(const c in o){const u=o[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;i0?s.multiplyScalar(1/Math.sqrt(a)):s.set(0,0,0)}static getBarycoord(e,t,i,s,a){Di.subVectors(s,t),ws.subVectors(i,t),Tf.subVectors(e,t);const r=Di.dot(Di),o=Di.dot(ws),l=Di.dot(Tf),c=ws.dot(ws),u=ws.dot(Tf),d=r*c-o*o;if(d===0)return a.set(0,0,0),null;const h=1/d,f=(c*l-o*u)*h,p=(r*u-o*l)*h;return a.set(1-f-p,p,f)}static containsPoint(e,t,i,s){return this.getBarycoord(e,t,i,s,Ss)===null?!1:Ss.x>=0&&Ss.y>=0&&Ss.x+Ss.y<=1}static getInterpolation(e,t,i,s,a,r,o,l){return this.getBarycoord(e,t,i,s,Ss)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(a,Ss.x),l.addScaledVector(r,Ss.y),l.addScaledVector(o,Ss.z),l)}static getInterpolatedAttribute(e,t,i,s,a,r){return Af.setScalar(0),Rf.setScalar(0),Pf.setScalar(0),Af.fromBufferAttribute(e,t),Rf.fromBufferAttribute(e,i),Pf.fromBufferAttribute(e,s),r.setScalar(0),r.addScaledVector(Af,a.x),r.addScaledVector(Rf,a.y),r.addScaledVector(Pf,a.z),r}static isFrontFacing(e,t,i,s){return Di.subVectors(i,t),ws.subVectors(e,t),Di.cross(ws).dot(s)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,s){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[s]),this}setFromAttributeAndIndices(e,t,i,s){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,s),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Di.subVectors(this.c,this.b),ws.subVectors(this.a,this.b),Di.cross(ws).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Qn.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return Qn.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,s,a){return Qn.getInterpolation(e,this.a,this.b,this.c,t,i,s,a)}containsPoint(e){return Qn.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Qn.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,s=this.b,a=this.c;let r,o;Mr.subVectors(s,i),Er.subVectors(a,i),Mf.subVectors(e,i);const l=Mr.dot(Mf),c=Er.dot(Mf);if(l<=0&&c<=0)return t.copy(i);Ef.subVectors(e,s);const u=Mr.dot(Ef),d=Er.dot(Ef);if(u>=0&&d<=u)return t.copy(s);const h=l*d-u*c;if(h<=0&&l>=0&&u<=0)return r=l/(l-u),t.copy(i).addScaledVector(Mr,r);Cf.subVectors(e,a);const f=Mr.dot(Cf),p=Er.dot(Cf);if(p>=0&&f<=p)return t.copy(a);const g=f*c-l*p;if(g<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(i).addScaledVector(Er,o);const _=u*p-f*d;if(_<=0&&d-u>=0&&f-p>=0)return Sy.subVectors(a,s),o=(d-u)/(d-u+(f-p)),t.copy(s).addScaledVector(Sy,o);const m=1/(_+g+h);return r=g*m,o=h*m,t.copy(i).addScaledVector(Mr,r).addScaledVector(Er,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}const hS={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Xs={h:0,s:0,l:0},Tc={h:0,s:0,l:0};function If(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}class ue{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){const s=e;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=gt){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,at.colorSpaceToWorking(this,t),this}setRGB(e,t,i,s=at.workingColorSpace){return this.r=e,this.g=t,this.b=i,at.colorSpaceToWorking(this,s),this}setHSL(e,t,i,s=at.workingColorSpace){if(e=Z_(e,1),t=Ze(t,0,1),i=Ze(i,0,1),t===0)this.r=this.g=this.b=i;else{const a=i<=.5?i*(1+t):i+t-i*t,r=2*i-a;this.r=If(r,a,e+1/3),this.g=If(r,a,e),this.b=If(r,a,e-1/3)}return at.colorSpaceToWorking(this,s),this}setStyle(e,t=gt){function i(a){a!==void 0&&parseFloat(a)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(e)){let a;const r=s[1],o=s[2];switch(r){case"rgb":case"rgba":if(a=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(255,parseInt(a[1],10))/255,Math.min(255,parseInt(a[2],10))/255,Math.min(255,parseInt(a[3],10))/255,t);if(a=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(100,parseInt(a[1],10))/100,Math.min(100,parseInt(a[2],10))/100,Math.min(100,parseInt(a[3],10))/100,t);break;case"hsl":case"hsla":if(a=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setHSL(parseFloat(a[1])/360,parseFloat(a[2])/100,parseFloat(a[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(e)){const a=s[1],r=a.length;if(r===3)return this.setRGB(parseInt(a.charAt(0),16)/15,parseInt(a.charAt(1),16)/15,parseInt(a.charAt(2),16)/15,t);if(r===6)return this.setHex(parseInt(a,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=gt){const i=hS[e.toLowerCase()];return i!==void 0?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Fs(e.r),this.g=Fs(e.g),this.b=Fs(e.b),this}copyLinearToSRGB(e){return this.r=to(e.r),this.g=to(e.g),this.b=to(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=gt){return at.workingToColorSpace(En.copy(this),e),Math.round(Ze(En.r*255,0,255))*65536+Math.round(Ze(En.g*255,0,255))*256+Math.round(Ze(En.b*255,0,255))}getHexString(e=gt){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=at.workingColorSpace){at.workingToColorSpace(En.copy(this),t);const i=En.r,s=En.g,a=En.b,r=Math.max(i,s,a),o=Math.min(i,s,a);let l,c;const u=(o+r)/2;if(o===r)l=0,c=0;else{const d=r-o;switch(c=u<=.5?d/(r+o):d/(2-r-o),r){case i:l=(s-a)/d+(s0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==tr&&(i.blending=this.blending),this.side!==fs&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Ol&&(i.blendSrc=this.blendSrc),this.blendDst!==Fl&&(i.blendDst=this.blendDst),this.blendEquation!==Is&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==sr&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==xm&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Ua&&(i.stencilFail=this.stencilFail),this.stencilZFail!==Ua&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==Ua&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function s(a){const r=[];for(const o in a){const l=a[o];delete l.metadata,r.push(l)}return r}if(t){const a=s(e.textures),r=s(e.images);a.length>0&&(i.textures=a),r.length>0&&(i.images=r)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const s=t.length;i=new Array(s);for(let a=0;a!==s;++a)i[a]=t[a].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}}class Ye extends Qt{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ue(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new an,this.combine=nc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const Ds=nA();function nA(){const n=new ArrayBuffer(4),e=new Float32Array(n),t=new Uint32Array(n),i=new Uint32Array(512),s=new Uint32Array(512);for(let l=0;l<256;++l){const c=l-127;c<-27?(i[l]=0,i[l|256]=32768,s[l]=24,s[l|256]=24):c<-14?(i[l]=1024>>-c-14,i[l|256]=1024>>-c-14|32768,s[l]=-c-1,s[l|256]=-c-1):c<=15?(i[l]=c+15<<10,i[l|256]=c+15<<10|32768,s[l]=13,s[l|256]=13):c<128?(i[l]=31744,i[l|256]=64512,s[l]=24,s[l|256]=24):(i[l]=31744,i[l|256]=64512,s[l]=13,s[l|256]=13)}const a=new Uint32Array(2048),r=new Uint32Array(64),o=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,u=0;for(;(c&8388608)===0;)c<<=1,u-=8388608;c&=-8388609,u+=947912704,a[l]=c|u}for(let l=1024;l<2048;++l)a[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)r[l]=l<<23;r[31]=1199570944,r[32]=2147483648;for(let l=33;l<63;++l)r[l]=2147483648+(l-32<<23);r[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(o[l]=1024);return{floatView:e,uint32View:t,baseTable:i,shiftTable:s,mantissaTable:a,exponentTable:r,offsetTable:o}}function Yn(n){Math.abs(n)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),n=Ze(n,-65504,65504),Ds.floatView[0]=n;const e=Ds.uint32View[0],t=e>>23&511;return Ds.baseTable[t]+((e&8388607)>>Ds.shiftTable[t])}function ul(n){const e=n>>10;return Ds.uint32View[0]=Ds.mantissaTable[Ds.offsetTable[e]+(n&1023)]+Ds.exponentTable[e],Ds.floatView[0]}class dl{static toHalfFloat(e){return Yn(e)}static fromHalfFloat(e){return ul(e)}}const nn=new S,Mc=new te;let iA=0;class rt{constructor(e,t,i=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:iA++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=zl,this.updateRanges=[],this.gpuType=Sn,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let s=0,a=this.itemSize;st.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new vn);const e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new S(-1/0,-1/0,-1/0),new S(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,s=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const s={};let a=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let d=0,h=c.length;d0&&(s[l]=u,a=!0)}a&&(e.data.morphAttributes=s,e.data.morphTargetsRelative=this.morphTargetsRelative);const r=this.groups;r.length>0&&(e.data.groups=JSON.parse(JSON.stringify(r)));const o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null&&this.setIndex(i.clone());const s=e.attributes;for(const c in s){const u=s[c];this.setAttribute(c,u.clone(t))}const a=e.morphAttributes;for(const c in a){const u=[],d=a[c];for(let h=0,f=d.length;h0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;a(e.far-e.near)**2))&&(Ty.copy(a).invert(),va.copy(e.ray).applyMatrix4(Ty),!(i.boundingBox!==null&&va.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,va)))}_computeIntersections(e,t,i){let s;const a=this.geometry,r=this.material,o=a.index,l=a.attributes.position,c=a.attributes.uv,u=a.attributes.uv1,d=a.attributes.normal,h=a.groups,f=a.drawRange;if(o!==null)if(Array.isArray(r))for(let p=0,g=h.length;pt.far?null:{distance:c,point:Ic.clone(),object:n}}function Lc(n,e,t,i,s,a,r,o,l,c){n.getVertexPosition(o,Cc),n.getVertexPosition(l,Ac),n.getVertexPosition(c,Rc);const u=dA(n,e,t,i,Cc,Ac,Rc,Ey);if(u){const d=new S;Qn.getBarycoord(Ey,Cc,Ac,Rc,d),s&&(u.uv=Qn.getInterpolatedAttribute(s,o,l,c,d,new te)),a&&(u.uv1=Qn.getInterpolatedAttribute(a,o,l,c,d,new te)),r&&(u.normal=Qn.getInterpolatedAttribute(r,o,l,c,d,new S),u.normal.dot(i.direction)>0&&u.normal.multiplyScalar(-1));const h={a:o,b:l,c,normal:new S,materialIndex:0};Qn.getNormal(Cc,Ac,Rc,h.normal),u.face=h,u.barycoord=d}return u}class Ei extends Ge{constructor(e=1,t=1,i=1,s=1,a=1,r=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:s,heightSegments:a,depthSegments:r};const o=this;s=Math.floor(s),a=Math.floor(a),r=Math.floor(r);const l=[],c=[],u=[],d=[];let h=0,f=0;p("z","y","x",-1,-1,i,t,e,r,a,0),p("z","y","x",1,-1,i,t,-e,r,a,1),p("x","z","y",1,1,e,i,t,s,r,2),p("x","z","y",1,-1,e,i,-t,s,r,3),p("x","y","z",1,-1,e,t,i,s,a,4),p("x","y","z",-1,-1,e,t,-i,s,a,5),this.setIndex(l),this.setAttribute("position",new Ee(c,3)),this.setAttribute("normal",new Ee(u,3)),this.setAttribute("uv",new Ee(d,2));function p(g,_,m,v,y,b,T,x,M,C,w){const E=b/M,R=T/C,D=b/2,O=T/2,k=x/2,U=M+1,F=C+1;let W=0,H=0;const ne=new S;for(let oe=0;oe0?1:-1,u.push(ne.x,ne.y,ne.z),d.push(Ie/M),d.push(1-oe/C),W+=1}}for(let oe=0;oee)i=s-1;else return s}return Math.max(0,t-1)}class Cw{_listeners=new Map;on(e,t){let i=this._listeners.get(e);return i||(i=new Set,this._listeners.set(e,i)),i.add(t),this}once(e,t){const i=(...s)=>{this.off(e,i),t(...s)};return this.on(e,i)}off(e,t){const i=this._listeners.get(e);return i?(t?i.delete(t):i.clear(),i.size===0&&this._listeners.delete(e),this):this}removeListener(e,t){return this.off(e,t)}removeAllListeners(e){return e?this._listeners.delete(e):this._listeners.clear(),this}emit(e,...t){const i=this._listeners.get(e);if(!i||i.size===0)return!1;for(const s of[...i])s(...t);return!0}}function vf(n){return n?{x:n.x,y:n.z,z:n.y}:null}function N1(n){return n?{x:n.x,y:n.z,z:n.y,w:-n.w}:null}function U1(n){return n*100/255}const py={Octane:{length:118.0074,width:84.19941,height:36.15907,offsetX:13.87566,offsetZ:20.75499},Dominus:{length:127.9268,width:83.27995,height:31.3,offsetX:9,offsetZ:15.75},Plank:{length:128.8198,width:84.67036,height:29.3944,offsetX:9.00857,offsetZ:12.0942},Breakout:{length:131.4924,width:80.521,height:30.3,offsetX:12.5,offsetZ:11.75},Hybrid:{length:127.0192,width:82.18787,height:34.15907,offsetX:13.87566,offsetZ:20.75499},Merc:{length:120.72,width:76.71,height:41.66,offsetX:11.37566,offsetZ:21.504988}},B1={21:{name:"Backfire",hitbox:"Octane"},22:{name:"Breakout",hitbox:"Breakout"},23:{name:"Octane",hitbox:"Octane"},24:{name:"Paladin",hitbox:"Plank"},25:{name:"Road Hog",hitbox:"Octane"},26:{name:"Gizmo",hitbox:"Octane"},28:{name:"X-Devil",hitbox:"Hybrid"},29:{name:"Hotshot",hitbox:"Dominus"},30:{name:"Merc",hitbox:"Merc"},31:{name:"Venom",hitbox:"Hybrid"},402:{name:"Takumi",hitbox:"Octane"},403:{name:"Dominus",hitbox:"Dominus"},404:{name:"Scarab",hitbox:"Octane"},523:{name:"Zippy",hitbox:"Octane"},597:{name:"DeLorean Time Machine",hitbox:"Dominus"},600:{name:"Ripper",hitbox:"Dominus"},607:{name:"Grog",hitbox:"Octane"},1018:{name:"Dominus GT",hitbox:"Dominus"},1159:{name:"X-Devil Mk2",hitbox:"Hybrid"},1171:{name:"Masamune",hitbox:"Dominus"},1172:{name:"Marauder",hitbox:"Octane"},1286:{name:"Aftershock",hitbox:"Dominus"},1295:{name:"Takumi RX-T",hitbox:"Octane"},1300:{name:"Road Hog XL",hitbox:"Octane"},1317:{name:"Esper",hitbox:"Hybrid"},1416:{name:"Breakout Type-S",hitbox:"Breakout"},1475:{name:"Proteus",hitbox:"Octane"},1478:{name:"Triton",hitbox:"Octane"},1533:{name:"Vulcan",hitbox:"Octane"},1568:{name:"Octane ZSR",hitbox:"Octane"},1603:{name:"Twin Mill III",hitbox:"Plank"},1623:{name:"Bone Shaker",hitbox:"Octane"},1624:{name:"Endo",hitbox:"Hybrid"},1675:{name:"Ice Charger",hitbox:"Dominus"},1689:{name:"Nemesis",hitbox:"Dominus"},1691:{name:"Mantis",hitbox:"Plank"},1856:{name:"Jager 619",hitbox:"Hybrid"},1883:{name:"Imperator DT5",hitbox:"Dominus"},1894:{name:"Samurai",hitbox:"Breakout"},1919:{name:"Centio",hitbox:"Plank"},1932:{name:"Animus GP",hitbox:"Breakout"},2070:{name:"Werewolf",hitbox:"Dominus"},2268:{name:"Fast & Furious Dodge Charger",hitbox:"Dominus"},2269:{name:"Fast & Furious Nissan Skyline",hitbox:"Hybrid"},2665:{name:"The Dark Knight's Tumbler",hitbox:"Octane"},2666:{name:"Batmobile (1989)",hitbox:"Dominus"},2853:{name:"Twinzer",hitbox:"Octane"},2919:{name:"Jurassic Jeep Wrangler",hitbox:"Octane"},2949:{name:"Fast 4WD",hitbox:"Octane"},2950:{name:"MR11",hitbox:"Dominus"},2951:{name:"Gazella GT",hitbox:"Dominus"},3031:{name:"Cyclone",hitbox:"Breakout"},3155:{name:"Maverick",hitbox:"Dominus"},3156:{name:"Maverick G1",hitbox:"Dominus"},3157:{name:"Maverick GXT",hitbox:"Dominus"},3265:{name:"McLaren 570S",hitbox:"Dominus"},3311:{name:"Komodo",hitbox:"Breakout"},3426:{name:"Diestro",hitbox:"Dominus"},3451:{name:"Nimbus",hitbox:"Hybrid"},3582:{name:"Insidio",hitbox:"Hybrid"},3594:{name:"Artemis G1",hitbox:"Plank"},3614:{name:"Artemis",hitbox:"Plank"},3622:{name:"Artemis GXT",hitbox:"Plank"},3702:{name:"Tygris",hitbox:"Hybrid"},3875:{name:"Guardian GXT",hitbox:"Dominus"},3879:{name:"Guardian",hitbox:"Dominus"},3880:{name:"Guardian G1",hitbox:"Dominus"},4014:{name:"K.I.T.T.",hitbox:"Dominus"},4155:{name:"Ecto-1",hitbox:"Dominus"},4268:{name:"Sentinel",hitbox:"Plank"},4284:{name:"Fennec",hitbox:"Octane"},4318:{name:"Mudcat",hitbox:"Octane"},4319:{name:"Mudcat G1",hitbox:"Octane"},4320:{name:"Mudcat GXT",hitbox:"Octane"},4367:{name:"Chikara GXT",hitbox:"Dominus"},4472:{name:"Chikara",hitbox:"Dominus"},4473:{name:"Chikara G1",hitbox:"Dominus"},4745:{name:"Ronin GXT",hitbox:"Dominus"},4770:{name:"Dominus",hitbox:"Dominus"},4780:{name:"Battle Bus",hitbox:"Merc"},4781:{name:"Peregrine TT",hitbox:"Dominus"},4782:{name:"Psyclops",hitbox:"Body_Tritip_Handling"},4861:{name:"Ronin",hitbox:"Dominus"},4864:{name:"Ronin G1",hitbox:"Dominus"},4906:{name:"Harbinger",hitbox:"Octane"},5020:{name:"Outlaw",hitbox:"Octane"},5039:{name:"Harbinger GXT",hitbox:"Octane"},5188:{name:"Scarab",hitbox:"Octane"},5265:{name:"Formula 1 2021",hitbox:"Plank"},5361:{name:"Dingo",hitbox:"Octane"},5470:{name:"R3MX",hitbox:"Hybrid"},5488:{name:"R3MX GXT",hitbox:"Hybrid"},5547:{name:"007's Aston Martin DB5",hitbox:"Octane"},5709:{name:"NASCAR Ford Mustang",hitbox:"Dominus"},5713:{name:"Ford F-150 RLE",hitbox:"Octane"},5773:{name:"NASCAR Toyota Camry",hitbox:"Dominus"},5823:{name:"NASCAR Chevrolet Camaro",hitbox:"Dominus"},5837:{name:"Outlaw GXT",hitbox:"Octane"},5858:{name:"Tyranno",hitbox:"Dominus"},5879:{name:"Fast & Furious Pontiac Fiero",hitbox:"Hybrid"},5951:{name:"Jackal",hitbox:"Octane"},5964:{name:"Lamborghini Huracan STO",hitbox:"Dominus"},5979:{name:"Tyranno GXT",hitbox:"Dominus"},6122:{name:"Masamune",hitbox:"Dominus"},6243:{name:"Nexus",hitbox:"Breakout"},6244:{name:"BMW M240i",hitbox:"Dominus"},6247:{name:"McLaren 765LT",hitbox:"Dominus"},6260:{name:"007's Aston Martin Valhalla",hitbox:"Dominus"},6489:{name:"Nexus SC",hitbox:"Breakout"},6836:{name:"Ford Mustang Shelby GT350R RLE",hitbox:"Dominus"},6939:{name:"Ford Mustang Mach-E RLE",hitbox:"Octane"},7012:{name:"Tesla Cybertruck",hitbox:"Hybrid"},7052:{name:"Formula 1 2022",hitbox:"Plank"},7211:{name:"Mamba",hitbox:"Dominus"},7336:{name:"Nomad",hitbox:"Merc"},7337:{name:"NASCAR Next Gen Chevrolet Camaro",hitbox:"Dominus"},7338:{name:"NASCAR Next Gen Ford Mustang",hitbox:"Dominus"},7341:{name:"NASCAR Next Gen Toyota Camry",hitbox:"Dominus"},7343:{name:"007's Aston Martin DBS",hitbox:"Dominus"},7415:{name:"Batmobile (2022)",hitbox:"Dominus"},7477:{name:"Nomad GXT",hitbox:"Merc"},7512:{name:"Lamborghini Countach LPI 800-4",hitbox:"Dominus"},7532:{name:"Maestro",hitbox:"Dominus"},7593:{name:"Nissan Z Performance",hitbox:"Dominus"},7651:{name:"Redline",hitbox:"Breakout"},7696:{name:"Whiplash",hitbox:"Breakout"},7772:{name:"Ferrari 296 GTB",hitbox:"Dominus"},7815:{name:"Ford Bronco Raptor RLE",hitbox:"Merc"},7890:{name:"Fuse",hitbox:"Breakout"},7901:{name:"Fast & Furious Mazda RX-7",hitbox:"Breakout"},7947:{name:"Honda Civic Type R",hitbox:"Octane"},7948:{name:"Honda Civic Type R-LE",hitbox:"Octane"},7979:{name:"Stampede",hitbox:"Merc"},8006:{name:"Mako",hitbox:"Breakout"},8360:{name:"Emperor",hitbox:"Breakout"},8361:{name:"Emperor II",hitbox:"Breakout"},8383:{name:"Xentari",hitbox:"Octane"},8454:{name:"Admiral",hitbox:"Dominus"},8524:{name:"Bugatti Centodieci",hitbox:"Plank"},8565:{name:"Emperor II: Frozen",hitbox:"Breakout"},8566:{name:"Emperor II: Scorched",hitbox:"Breakout"},8669:{name:"Ace",hitbox:"Breakout"},8806:{name:"Volkswagen Golf GTI",hitbox:"Octane"},8807:{name:"Volkswagen Golf GTI RLE",hitbox:"Octane"},9053:{name:"Fast & Furious Dodge Charger SRT Hellcat",hitbox:"Dominus"},9084:{name:"Nissan Silvia",hitbox:"Hybrid"},9085:{name:"Nissan Silvia RLE",hitbox:"Hybrid"},9088:{name:"Porsche 911 Turbo",hitbox:"Dominus"},9089:{name:"Porsche 911 Turbo RLE",hitbox:"Dominus"},9140:{name:"Bumblebee",hitbox:"Dominus"},9357:{name:"Diesel",hitbox:"Breakout"},9388:{name:"Lightning McQueen",hitbox:"Dominus"},9427:{name:"Primo",hitbox:"Hybrid"},9894:{name:"Scorpion",hitbox:"Dominus"},10044:{name:"Beskar",hitbox:"Hybrid"},10094:{name:"Ford Mustang GTD",hitbox:"Dominus"},10440:{name:"Nissan Fairlady Z",hitbox:"Dominus"},10441:{name:"Nissan Fairlady Z RLE",hitbox:"Dominus"},10689:{name:"Behemoth",hitbox:"Merc"},10694:{name:"Lockjaw",hitbox:"Dominus"},10697:{name:"The Incredibile",hitbox:"Breakout"},10698:{name:"1966 Cadillac DeVille",hitbox:"Breakout"},10805:{name:"Nissan Skyline GT-R (R32)",hitbox:"Hybrid"},10817:{name:"Quadra Turbo-R",hitbox:"Breakout"},10822:{name:"McLaren Senna",hitbox:"Breakout"},10896:{name:"BMW 1 Series",hitbox:"Octane"},10897:{name:"BMW 1 Series RLE",hitbox:"Octane"},10900:{name:"Shokunin",hitbox:"Octane"},10901:{name:"Shokunin GXT",hitbox:"Octane"},11016:{name:"Porsche 911 GT3 RS",hitbox:"Dominus"},11038:{name:"Revolver",hitbox:"Breakout"},11095:{name:"Dodge Charger Daytona Scat Pack",hitbox:"Dominus"},11098:{name:"Turtle Van",hitbox:"Merc"},11138:{name:"Void Burn",hitbox:"Hybrid"},11141:{name:"Lamborghini Urus SE",hitbox:"Hybrid"},11314:{name:"Jeep Wrangler Rubicon",hitbox:"Merc"},11315:{name:"Ford Mustang Shelby GT500",hitbox:"Dominus"},11336:{name:"Dominus: Neon",hitbox:"Dominus"},11379:{name:"Ram 1500 RHO",hitbox:"Hybrid"},11394:{name:"Azura",hitbox:"Breakout"},11505:{name:"Breakout X",hitbox:"Breakout"},11534:{name:"BMW M3 (E30)",hitbox:"Dominus"},11603:{name:"Fennec ZR-F",hitbox:"Octane"},11677:{name:"Chevrolet Corvette ZR1",hitbox:"Breakout"},11736:{name:"Recoil AV",hitbox:"Merc"},11800:{name:"Megastar",hitbox:"Breakout"},11905:{name:"The Mystery Machine",hitbox:"Merc"},11932:{name:"Hearse",hitbox:"Hybrid"},11933:{name:"Porsche 918 Spyder",hitbox:"Breakout"},11941:{name:"Mercedes-AMG GT 63 S",hitbox:"Dominus"},11949:{name:"Pontiac Firebird",hitbox:"Breakout"},11950:{name:"Chevrolet Astro",hitbox:"Merc"},12142:{name:"Homer's Car",hitbox:"Dominus"},12173:{name:"Ferrari F40",hitbox:"Breakout"}},z1=B1;function Aw(n){const e=z1[String(n)];return e?{name:e.name,hitboxType:e.hitbox}:null}function H1(n){if(!n)return null;const e={fov:n.fov,height:n.height,angle:n.angle,distance:n.distance,stiffness:n.stiffness,swivelSpeed:n.swivel_speed};return n.transition_speed!=null&&(e.transitionSpeed=n.transition_speed),e}const V1=2200,G1=!0,$1=!1,W1=.15,X1=10,K1=.1,q1=10,Y1=.1,j1=.15,Z1=10;function Ho(n,e){if(n.length===0)return null;let t=0,i=n.length-1;if(e<=n[0].time)return n[0];if(e>=n[i].time)return n[i];for(;t>1;n[s].time<=e?t=s:i=s-1}return n[t]}class J1{position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;visible=!0}class Q1{constructor(e,t,i){this.isBig=e,this.position=t,this.events=i}isAvailable=!0}class eC extends Cw{constructor(e,t,i,s,a,r=null){super(),this.id=e,this.name=t,this.team=i,this.carName=s,this.hitboxType=a,this.cameraSettings=r}position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;steer=0;boost=0;isBoosting=!1;isSupersonic=!1;isKickoffReset=!1;isVisible=!0;isBallCam=!0}class Rw extends Cw{constructor(e,t={}){super(),this.raw=e,this.options=t,this._compile()}duration=0;playerList=[];frameTimes=[];rawStartTime=0;ball=new J1;players=new Map;boostPads=new Map;_currentTime=0;_ballTimeline=[];_playerTimelines={};_ballFlags=[];_playerFlags={};_playerCameraEvents={};_teams={};_timelineCompaction=null;_compile(){const e=this.raw.frame_data,t=this.raw.meta,i=e.metadata_frames,s=i[0]?.time??0;this.rawStartTime=s;const a=l=>Math.max(0,l-s);this.duration=i.length?a(i[i.length-1].time):0,this.frameTimes=i.map(l=>a(l.time));const r=new Map;t.team_zero.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:0})),t.team_one.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:1})),e.ball_data.frames.forEach((l,c)=>{if(l==="Empty"||!("Data"in l))return;const u=this._rbToKeyframe(l.Data.rigid_body,a(i[c]?.time??s),c);u&&this._ballTimeline.push(u)}),e.players.forEach(([l,c])=>{const u=this._idKey(l),d=r.get(u);let h=d?.info.name??null,f=d?.team??0;if(!h){for(const T of c.frames)if(T!=="Empty"&&"Data"in T&&T.Data.player_name){h=T.Data.player_name,T.Data.is_team_0!=null&&(f=T.Data.is_team_0?0:1);break}}h||(h=`Player_${u}`);const p=d?.info,g=p?.car_body_id!=null?Aw(p.car_body_id):null,_=p?.car_body_name??g?.name??"Octane",m=p?.car_hitbox_family??g?.hitboxType??"Octane",v=[],y=[];c.frames.forEach((T,x)=>{const M=a(i[x]?.time??s);if(T==="Empty"||!("Data"in T))return;const C=this._rbToKeyframe(T.Data.rigid_body,M,x);C&&v.push(C);const w=T.Data.input?.steer;y.push({time:M,boost:U1(T.Data.boost_amount??0),isBoosting:!!T.Data.boost_active,present:!0,steer:w==null?0:Math.max(-1,Math.min(1,(w-128)/128))})});const b=H1(p?.camera_settings);this._playerTimelines[h]=v,this._playerFlags[h]=y,this._teams[h]=f,this.playerList.push({id:u,name:h,team:f,carName:_,hitboxType:m,cameraSettings:b}),this.players.set(h,new eC(u,h,f,_,m,b))});const o=new Map;this.playerList.forEach(l=>o.set(l.id,l.name));for(const[l,c]of this.raw.player_camera_events??[]){const u=o.get(this._idKey(l));u&&(this._playerCameraEvents[u]=c.map(d=>({time:a(i[d.frame]?.time??s),ballCam:d.ball_cam_active})))}this._preprocessMotionTimelines(),this._compileBoostPads(),this.seek(0)}_timelineProcessingOptions(){return{motionSmoothing:this.options.motionSmoothing??G1,smoothingBlendFactor:this.options.smoothingBlendFactor??W1,smoothingAnchorInterval:this.options.smoothingAnchorInterval??X1,timelineCompaction:this.options.timelineCompaction??$1,disableFrameFiltering:this.options.disableFrameFiltering??!1}}_preprocessMotionTimelines(){const e=this._timelineProcessingOptions();e.motionSmoothing&&this._applyVelocityBasedPositionCorrection(e),e.timelineCompaction&&this._applyTimelineCompaction(),e.disableFrameFiltering||this._filterInconsistentFrames()}_applyTimelineCompaction(){const e=this._buildTimelineCompaction();!e||e.gaps.length===0&&e.prematchEndTime===null||(this._timelineCompaction=e,this._ballTimeline=this._compactTimeline(this._ballTimeline,e),Object.entries(this._playerTimelines).forEach(([t,i])=>{this._playerTimelines[t]=this._compactTimeline(i,e)}),Object.entries(this._playerFlags).forEach(([t,i])=>{this._playerFlags[t]=this._compactTimeline(i,e)}),this.frameTimes=this.frameTimes.map(t=>this._compactTime(t,e)),this.duration=e.compactedDuration)}_buildTimelineCompaction(){if(this.frameTimes.length===0)return null;const e=this._detectPostGoalTimeGaps(),t=this._detectFirstKickoffGoTime(),i=t==null?null:Vo(t,e),a=e.reduce((r,o)=>r+o.duration,0)+(i??0);return a<=0?null:{gaps:e,prematchEndTime:i,removedDuration:a,compactedDuration:Math.max(0,this.duration-a)}}_detectPostGoalTimeGaps(){const e=[];for(const t of this.raw.goal_events??[]){const i=t.frame;if(!Number.isInteger(i)||i<0||i>=this.frameTimes.length)continue;const s=this.frameTimes[i];for(let a=i+1;a10)break;const l=o-r;if(l>.3){e.push({beforeFrame:a-1,afterFrame:a,beforeTime:r,afterTime:o,duration:l});break}}}return e}_detectFirstKickoffGoTime(){const e=this.raw.frame_data.metadata_frames;let t=!1;for(let s=0;s0&&(t=!0),t&&a===0)return this.frameTimes[s]??null}const i=e.findIndex(s=>s.replicated_game_state_name===54);return i===-1?null:this.frameTimes[i]??null}_compactTimeline(e,t){const i=this._remapReplayGaps(e,t.gaps);return t.prematchEndTime===null?i:this._remapPrematch(i,t.prematchEndTime)}_remapReplayGaps(e,t){if(t.length===0)return e;const i=[];t.forEach((a,r)=>{const o=e.find(l=>l.time>=a.afterTime);o&&i.push({...o,time:Vo(a.afterTime,t.slice(0,r+1))})});const s=e.filter(a=>!gy(a.time,t)).map(a=>({...a,time:Vo(a.time,t)}));for(const a of i){if(s.some(o=>Math.abs(o.time-a.time)<.001))continue;let r=s.findIndex(o=>o.time>a.time);r===-1&&(r=s.length),s.splice(r,0,a)}return s}_remapPrematch(e,t){let i=null;for(const a of e)if(a.timea.time>=t).map(a=>({...a,time:a.time-t}));return i&&(s.length===0||s[0].time>.001)&&s.unshift({...i,time:0}),s}_compactTime(e,t){const i=Vo(e,t.gaps);return t.prematchEndTime===null?i:Math.max(0,i-t.prematchEndTime)}_applyVelocityBasedPositionCorrection(e){const t=i=>{if(i.length<3)return;let s=0;for(;s=i.length-1)return;let a={...i[s].position};for(let r=s+1;rK1){a={...l.position};continue}if(_y(a,l.position)>q1){a={...l.position};continue}const u={x:(o.velocity.x+l.velocity.x)/2,y:(o.velocity.y+l.velocity.y)/2,z:(o.velocity.z+l.velocity.z)/2},d={x:a.x+u.x*c,y:a.y+u.y*c,z:a.z+u.z*c},h=(r-s)%e.smoothingAnchorInterval===0?.5:e.smoothingBlendFactor;a={x:d.x*(1-h)+l.position.x*h,y:d.y*(1-h)+l.position.y*h,z:d.z*(1-h)+l.position.z*h},l.position={...a}}};t(this._ballTimeline),Object.values(this._playerTimelines).forEach(t)}_filterInconsistentFrames(){this._ballTimeline=this._filterInconsistentTimeline(this._ballTimeline),Object.entries(this._playerTimelines).forEach(([e,t])=>{this._playerTimelines[e]=this._filterInconsistentTimeline(t)})}_filterInconsistentTimeline(e){if(e.length<2)return e;const t=[e[0]];let i=0;for(let s=1;s.001){const u=o*c,d=_y(r.position,a.position),h=Math.abs(d-u)/u;if(Number.isFinite(h)&&h>j1)continue}}t.push(a),i=s}return t}_compileBoostPads(){const e=new Map;(this.raw.boost_pad_events??[]).forEach(t=>{const i=t.kind==="Available"?!0:t.kind&&typeof t.kind=="object"&&"PickedUp"in t.kind?!1:null;if(i===null)return;const s=Math.max(0,t.time-this.rawStartTime);if(this._timelineCompaction&&this._isRemovedByTimelineCompaction(s))return;const a=this._timelineCompaction?this._compactTime(s,this._timelineCompaction):s,r=e.get(t.pad_id);r?r.push({time:a,available:i}):e.set(t.pad_id,[{time:a,available:i}])}),(this.raw.boost_pads??[]).forEach(t=>{const i=(t.pad_id?e.get(t.pad_id):void 0)??[];i.sort((s,a)=>s.time-a.time),this.boostPads.set(t.index,new Q1(t.size==="Big",t.position,i))})}_rbToKeyframe(e,t,i){const s=vf(e.location);return s?{time:t,frame:i,position:s,rotation:N1(e.rotation),velocity:vf(e.linear_velocity)??{x:0,y:0,z:0},angularVelocity:vf(e.angular_velocity),sleeping:!!e.sleeping}:null}_isRemovedByTimelineCompaction(e){const t=this._timelineCompaction;if(!t)return!1;if(gy(e,t.gaps))return!0;const i=Vo(e,t.gaps);return t.prematchEndTime!==null&&i=V1}const r=Ho(this._playerFlags[i]??[],e);r&&(s.boost=r.boost,s.isBoosting=r.isBoosting,s.steer=r.steer);const o=Ho(this._playerCameraEvents[i]??[],e);o&&o.ballCam!=null&&(s.isBallCam=o.ballCam);const l=this._playerTimelines[i]??[];s.isVisible=l.length>0&&e>=l[0].time-.001&&e<=l[l.length-1].time+1}for(const i of this.boostPads.values()){if(i.events.length===0)continue;const s=Ho(i.events,e);i.isAvailable=s&&s.time<=e?s.available:!0}}frameIndexAt(e){const t=this.frameTimes;if(t.length===0||e<=t[0])return 0;let i=0,s=t.length-1;if(e>=t[s])return s;for(;i>1;t[a]<=e?i=a:s=a-1}return i}getBall(){return this.ball}getPlayer(e){return this.players.get(e)}getPlayerById(e){for(const t of this.players.values())if(t.id===e)return t}getAllPlayers(){return Array.from(this.players.values())}getPlayerTeams(){return{...this._teams}}getGameTimeMap(){return[]}getCountdownEvents(){return[]}getPlayerStatsTimelines(){return{}}getGameEventTimeline(){return[]}getAdvancedStats(){return null}getEvents(){return[]}getEventsInRange(){return[]}getTextOverlaysAt(){return[]}getGamePhaseAt(){return null}}function my(n){return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)}function _y(n,e){const t=e.x-n.x,i=e.y-n.y,s=e.z-n.z;return Math.sqrt(t*t+i*i+s*s)}function Vo(n,e){let t=0;for(const i of e){if(n=i.afterTime){t+=i.duration;continue}return i.beforeTime-t}return n-t}function gy(n,e){return e.some(t=>n>t.beforeTime&&n>8&255]+Mn[n>>16&255]+Mn[n>>24&255]+"-"+Mn[e&255]+Mn[e>>8&255]+"-"+Mn[e>>16&15|64]+Mn[e>>24&255]+"-"+Mn[t&63|128]+Mn[t>>8&255]+"-"+Mn[t>>16&255]+Mn[t>>24&255]+Mn[i&255]+Mn[i>>8&255]+Mn[i>>16&255]+Mn[i>>24&255]).toLowerCase()}function Ze(n,e,t){return Math.max(e,Math.min(t,n))}function sg(n,e){return(n%e+e)%e}function FC(n,e,t,i,s){return i+(n-e)*(s-i)/(t-e)}function NC(n,e,t){return n!==e?(t-n)/(e-n):0}function Il(n,e,t){return(1-t)*n+t*e}function UC(n,e,t,i){return Il(n,e,1-Math.exp(-t*i))}function BC(n,e=1){return e-Math.abs(sg(n,e*2)-e)}function zC(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function HC(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function VC(n,e){return n+Math.floor(Math.random()*(e-n+1))}function GC(n,e){return n+Math.random()*(e-n)}function $C(n){return n*(.5-Math.random())}function WC(n){n!==void 0&&(yy=n);let e=yy+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function XC(n){return n*ir}function KC(n){return n*Co}function qC(n){return(n&n-1)===0&&n!==0}function YC(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function jC(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function ZC(n,e,t,i,s){const a=Math.cos,r=Math.sin,o=a(t/2),l=r(t/2),c=a((e+i)/2),u=r((e+i)/2),d=a((e-i)/2),h=r((e-i)/2),f=a((i-e)/2),p=r((i-e)/2);switch(s){case"XYX":n.set(o*u,l*d,l*h,o*c);break;case"YZY":n.set(l*h,o*u,l*d,o*c);break;case"ZXZ":n.set(l*d,l*h,o*u,o*c);break;case"XZX":n.set(o*u,l*p,l*f,o*c);break;case"YXY":n.set(l*f,o*u,l*p,o*c);break;case"ZYZ":n.set(l*p,l*f,o*u,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}}function zn(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function ut(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}const vt={DEG2RAD:ir,RAD2DEG:Co,generateUUID:pi,clamp:Ze,euclideanModulo:sg,mapLinear:FC,inverseLerp:NC,lerp:Il,damp:UC,pingpong:BC,smoothstep:zC,smootherstep:HC,randInt:VC,randFloat:GC,randFloatSpread:$C,seededRandom:WC,degToRad:XC,radToDeg:KC,isPowerOfTwo:qC,ceilPowerOfTwo:YC,floorPowerOfTwo:jC,setQuaternionFromProperEuler:ZC,normalize:ut,denormalize:zn};class te{constructor(e=0,t=0){te.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6],this.y=s[1]*t+s[4]*i+s[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Ze(this.x,e.x,t.x),this.y=Ze(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Ze(this.x,e,t),this.y=Ze(this.y,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ze(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Ze(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),s=Math.sin(t),a=this.x-e.x,r=this.y-e.y;return this.x=a*i-r*s+e.x,this.y=a*s+r*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class dt{constructor(e=0,t=0,i=0,s=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=s}static slerpFlat(e,t,i,s,a,r,o){let l=i[s+0],c=i[s+1],u=i[s+2],d=i[s+3];const h=a[r+0],f=a[r+1],p=a[r+2],g=a[r+3];if(o===0){e[t+0]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d;return}if(o===1){e[t+0]=h,e[t+1]=f,e[t+2]=p,e[t+3]=g;return}if(d!==g||l!==h||c!==f||u!==p){let _=1-o;const m=l*h+c*f+u*p+d*g,v=m>=0?1:-1,y=1-m*m;if(y>Number.EPSILON){const T=Math.sqrt(y),x=Math.atan2(T,m*v);_=Math.sin(_*x)/T,o=Math.sin(o*x)/T}const b=o*v;if(l=l*_+h*b,c=c*_+f*b,u=u*_+p*b,d=d*_+g*b,_===1-o){const T=1/Math.sqrt(l*l+c*c+u*u+d*d);l*=T,c*=T,u*=T,d*=T}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,s,a,r){const o=i[s],l=i[s+1],c=i[s+2],u=i[s+3],d=a[r],h=a[r+1],f=a[r+2],p=a[r+3];return e[t]=o*p+u*d+l*f-c*h,e[t+1]=l*p+u*h+c*d-o*f,e[t+2]=c*p+u*f+o*h-l*d,e[t+3]=u*p-o*d-l*h-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,s){return this._x=e,this._y=t,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const i=e._x,s=e._y,a=e._z,r=e._order,o=Math.cos,l=Math.sin,c=o(i/2),u=o(s/2),d=o(a/2),h=l(i/2),f=l(s/2),p=l(a/2);switch(r){case"XYZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"YXZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"ZXY":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"ZYX":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"YZX":this._x=h*u*d+c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d-h*f*p;break;case"XZY":this._x=h*u*d-c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d+h*f*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+r)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,s=Math.sin(i);return this._x=e.x*s,this._y=e.y*s,this._z=e.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],s=t[4],a=t[8],r=t[1],o=t[5],l=t[9],c=t[2],u=t[6],d=t[10],h=i+o+d;if(h>0){const f=.5/Math.sqrt(h+1);this._w=.25/f,this._x=(u-l)*f,this._y=(a-c)*f,this._z=(r-s)*f}else if(i>o&&i>d){const f=2*Math.sqrt(1+i-o-d);this._w=(u-l)/f,this._x=.25*f,this._y=(s+r)/f,this._z=(a+c)/f}else if(o>d){const f=2*Math.sqrt(1+o-i-d);this._w=(a-c)/f,this._x=(s+r)/f,this._y=.25*f,this._z=(l+u)/f}else{const f=2*Math.sqrt(1+d-i-o);this._w=(r-s)/f,this._x=(a+c)/f,this._y=(l+u)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Ze(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const s=Math.min(1,t/i);return this.slerp(e,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,s=e._y,a=e._z,r=e._w,o=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+r*o+s*c-a*l,this._y=s*u+r*l+a*o-i*c,this._z=a*u+r*c+i*l-s*o,this._w=r*u-i*o-s*l-a*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);const i=this._x,s=this._y,a=this._z,r=this._w;let o=r*e._w+i*e._x+s*e._y+a*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=r,this._x=i,this._y=s,this._z=a,this;const l=1-o*o;if(l<=Number.EPSILON){const f=1-t;return this._w=f*r+t*this._w,this._x=f*i+t*this._x,this._y=f*s+t*this._y,this._z=f*a+t*this._z,this.normalize(),this}const c=Math.sqrt(l),u=Math.atan2(c,o),d=Math.sin((1-t)*u)/c,h=Math.sin(t*u)/c;return this._w=r*d+this._w*h,this._x=i*d+this._x*h,this._y=s*d+this._y*h,this._z=a*d+this._z*h,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),a=Math.sqrt(i);return this.set(s*Math.sin(e),s*Math.cos(e),a*Math.sin(t),a*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class S{constructor(e=0,t=0,i=0){S.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(vy.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(vy.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[3]*i+a[6]*s,this.y=a[1]*t+a[4]*i+a[7]*s,this.z=a[2]*t+a[5]*i+a[8]*s,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=e.elements,r=1/(a[3]*t+a[7]*i+a[11]*s+a[15]);return this.x=(a[0]*t+a[4]*i+a[8]*s+a[12])*r,this.y=(a[1]*t+a[5]*i+a[9]*s+a[13])*r,this.z=(a[2]*t+a[6]*i+a[10]*s+a[14])*r,this}applyQuaternion(e){const t=this.x,i=this.y,s=this.z,a=e.x,r=e.y,o=e.z,l=e.w,c=2*(r*s-o*i),u=2*(o*t-a*s),d=2*(a*i-r*t);return this.x=t+l*c+r*d-o*u,this.y=i+l*u+o*c-a*d,this.z=s+l*d+a*u-r*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*s,this.y=a[1]*t+a[5]*i+a[9]*s,this.z=a[2]*t+a[6]*i+a[10]*s,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Ze(this.x,e.x,t.x),this.y=Ze(this.y,e.y,t.y),this.z=Ze(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Ze(this.x,e,t),this.y=Ze(this.y,e,t),this.z=Ze(this.z,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ze(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,s=e.y,a=e.z,r=t.x,o=t.y,l=t.z;return this.x=s*l-a*o,this.y=a*r-i*l,this.z=i*o-s*r,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return bf.copy(this).projectOnVector(e),this.sub(bf)}reflect(e){return this.sub(bf.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Ze(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,s=this.z-e.z;return t*t+i*i+s*s}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const s=Math.sin(t)*e;return this.x=s*Math.sin(i),this.y=Math.cos(t)*e,this.z=s*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),s=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=s,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const bf=new S,vy=new dt;class at{constructor(e,t,i,s,a,r,o,l,c){at.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c)}set(e,t,i,s,a,r,o,l,c){const u=this.elements;return u[0]=e,u[1]=s,u[2]=o,u[3]=t,u[4]=a,u[5]=l,u[6]=i,u[7]=r,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[3],l=i[6],c=i[1],u=i[4],d=i[7],h=i[2],f=i[5],p=i[8],g=s[0],_=s[3],m=s[6],v=s[1],y=s[4],b=s[7],T=s[2],x=s[5],M=s[8];return a[0]=r*g+o*v+l*T,a[3]=r*_+o*y+l*x,a[6]=r*m+o*b+l*M,a[1]=c*g+u*v+d*T,a[4]=c*_+u*y+d*x,a[7]=c*m+u*b+d*M,a[2]=h*g+f*v+p*T,a[5]=h*_+f*y+p*x,a[8]=h*m+f*b+p*M,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8];return t*r*u-t*o*c-i*a*u+i*o*l+s*a*c-s*r*l}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=u*r-o*c,h=o*l-u*a,f=c*a-r*l,p=t*d+i*h+s*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const g=1/p;return e[0]=d*g,e[1]=(s*c-u*i)*g,e[2]=(o*i-s*r)*g,e[3]=h*g,e[4]=(u*t-s*l)*g,e[5]=(s*a-o*t)*g,e[6]=f*g,e[7]=(i*l-c*t)*g,e[8]=(r*t-i*a)*g,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,s,a,r,o){const l=Math.cos(a),c=Math.sin(a);return this.set(i*l,i*c,-i*(l*r+c*o)+r+e,-s*c,s*l,-s*(-c*r+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(xf.makeScale(e,t)),this}rotate(e){return this.premultiply(xf.makeRotation(-e)),this}translate(e,t){return this.premultiply(xf.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<9;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}}const xf=new at;function gS(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}const JC={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function Zr(n,e){return new JC[n](e)}function Wl(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function yS(){const n=Wl("canvas");return n.style.display="block",n}const by={};function Xl(n){n in by||(by[n]=!0,console.warn(n))}function QC(n,e,t){return new Promise(function(i,s){function a(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:s();break;case n.TIMEOUT_EXPIRED:setTimeout(a,t);break;default:i()}}setTimeout(a,t)})}const xy=new at().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),wy=new at().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function eA(){const n={enabled:!0,workingColorSpace:xn,spaces:{},convert:function(s,a,r){return this.enabled===!1||a===r||!a||!r||(this.spaces[a].transfer===Pt&&(s.r=Fs(s.r),s.g=Fs(s.g),s.b=Fs(s.b)),this.spaces[a].primaries!==this.spaces[r].primaries&&(s.applyMatrix3(this.spaces[a].toXYZ),s.applyMatrix3(this.spaces[r].fromXYZ)),this.spaces[r].transfer===Pt&&(s.r=io(s.r),s.g=io(s.g),s.b=io(s.b))),s},workingToColorSpace:function(s,a){return this.convert(s,this.workingColorSpace,a)},colorSpaceToWorking:function(s,a){return this.convert(s,a,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===Ls?Gl:this.spaces[s].transfer},getToneMappingMode:function(s){return this.spaces[s].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(s,a=this.workingColorSpace){return s.fromArray(this.spaces[a].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,a,r){return s.copy(this.spaces[a].toXYZ).multiply(this.spaces[r].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(s,a){return Xl("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(s,a)},toWorkingColorSpace:function(s,a){return Xl("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(s,a)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[xn]:{primaries:e,whitePoint:i,transfer:Gl,toXYZ:xy,fromXYZ:wy,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:gt},outputColorSpaceConfig:{drawingBufferColorSpace:gt}},[gt]:{primaries:e,whitePoint:i,transfer:Pt,toXYZ:xy,fromXYZ:wy,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:gt}}}),n}const rt=eA();function Fs(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function io(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}let vr;class vS{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{vr===void 0&&(vr=Wl("canvas")),vr.width=e.width,vr.height=e.height;const s=vr.getContext("2d");e instanceof ImageData?s.putImageData(e,0,0):s.drawImage(e,0,0,e.width,e.height),i=vr}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=Wl("canvas");t.width=e.width,t.height=e.height;const i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);const s=i.getImageData(0,0,e.width,e.height),a=s.data;for(let r=0;r1),this.pmremVersion=0}get width(){return this.source.getSize(Sf).x}get height(){return this.source.getSize(Sf).y}get depth(){return this.source.getSize(Sf).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Texture.setValues(): property '${t}' does not exist.`);continue}s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==xh)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case ps:e.x=e.x-Math.floor(e.x);break;case Hn:e.x=e.x<0?0:1;break;case bo:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case ps:e.y=e.y-Math.floor(e.y);break;case Hn:e.y=e.y<0?0:1;break;case bo:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}}Bt.DEFAULT_IMAGE=null;Bt.DEFAULT_MAPPING=xh;Bt.DEFAULT_ANISOTROPY=1;class qe{constructor(e=0,t=0,i=0,s=1){qe.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=s}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=this.w,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*s+r[12]*a,this.y=r[1]*t+r[5]*i+r[9]*s+r[13]*a,this.z=r[2]*t+r[6]*i+r[10]*s+r[14]*a,this.w=r[3]*t+r[7]*i+r[11]*s+r[15]*a,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,s,a;const l=e.elements,c=l[0],u=l[4],d=l[8],h=l[1],f=l[5],p=l[9],g=l[2],_=l[6],m=l[10];if(Math.abs(u-h)<.01&&Math.abs(d-g)<.01&&Math.abs(p-_)<.01){if(Math.abs(u+h)<.1&&Math.abs(d+g)<.1&&Math.abs(p+_)<.1&&Math.abs(c+f+m-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const y=(c+1)/2,b=(f+1)/2,T=(m+1)/2,x=(u+h)/4,M=(d+g)/4,C=(p+_)/4;return y>b&&y>T?y<.01?(i=0,s=.707106781,a=.707106781):(i=Math.sqrt(y),s=x/i,a=M/i):b>T?b<.01?(i=.707106781,s=0,a=.707106781):(s=Math.sqrt(b),i=x/s,a=C/s):T<.01?(i=.707106781,s=.707106781,a=0):(a=Math.sqrt(T),i=M/a,s=C/a),this.set(i,s,a,t),this}let v=Math.sqrt((_-p)*(_-p)+(d-g)*(d-g)+(h-u)*(h-u));return Math.abs(v)<.001&&(v=1),this.x=(_-p)/v,this.y=(d-g)/v,this.z=(h-u)/v,this.w=Math.acos((c+f+m-1)/2),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Ze(this.x,e.x,t.x),this.y=Ze(this.y,e.y,t.y),this.z=Ze(this.z,e.z,t.z),this.w=Ze(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Ze(this.x,e,t),this.y=Ze(this.y,e,t),this.z=Ze(this.z,e,t),this.w=Ze(this.w,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Ze(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class ag extends gs{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Vt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new qe(0,0,e,t),this.scissorTest=!1,this.viewport=new qe(0,0,e,t);const s={width:e,height:t,depth:i.depth},a=new Bt(s);this.textures=[];const r=i.count;for(let o=0;o1;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Li),Li.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(Go),wc.subVectors(this.max,Go),br.subVectors(e.a,Go),xr.subVectors(e.b,Go),wr.subVectors(e.c,Go),Vs.subVectors(xr,br),Gs.subVectors(wr,xr),ya.subVectors(br,wr);let t=[0,-Vs.z,Vs.y,0,-Gs.z,Gs.y,0,-ya.z,ya.y,Vs.z,0,-Vs.x,Gs.z,0,-Gs.x,ya.z,0,-ya.x,-Vs.y,Vs.x,0,-Gs.y,Gs.x,0,-ya.y,ya.x,0];return!Tf(t,br,xr,wr,wc)||(t=[1,0,0,0,1,0,0,0,1],!Tf(t,br,xr,wr,wc))?!1:(Sc.crossVectors(Vs,Gs),t=[Sc.x,Sc.y,Sc.z],Tf(t,br,xr,wr,wc))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Li).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Li).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(vs[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),vs[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),vs[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),vs[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),vs[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),vs[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),vs[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),vs[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(vs),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}}const vs=[new S,new S,new S,new S,new S,new S,new S,new S],Li=new S,xc=new vn,br=new S,xr=new S,wr=new S,Vs=new S,Gs=new S,ya=new S,Go=new S,wc=new S,Sc=new S,va=new S;function Tf(n,e,t,i,s){for(let a=0,r=n.length-3;a<=r;a+=3){va.fromArray(n,a);const o=s.x*Math.abs(va.x)+s.y*Math.abs(va.y)+s.z*Math.abs(va.z),l=e.dot(va),c=t.dot(va),u=i.dot(va);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>o)return!1}return!0}const aA=new vn,$o=new S,Mf=new S;class bn{constructor(e=new S,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const i=this.center;t!==void 0?i.copy(t):aA.setFromPoints(e).getCenter(i);let s=0;for(let a=0,r=e.length;athis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;$o.subVectors(e,this.center);const t=$o.lengthSq();if(t>this.radius*this.radius){const i=Math.sqrt(t),s=(i-this.radius)*.5;this.center.addScaledVector($o,s/i),this.radius+=s}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Mf.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint($o.copy(e.center).add(Mf)),this.expandByPoint($o.copy(e.center).sub(Mf))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}}const bs=new S,Ef=new S,Tc=new S,$s=new S,Cf=new S,Mc=new S,Af=new S;class pr{constructor(e=new S,t=new S(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,bs)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=bs.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(bs.copy(this.origin).addScaledVector(this.direction,t),bs.distanceToSquared(e))}distanceSqToSegment(e,t,i,s){Ef.copy(e).add(t).multiplyScalar(.5),Tc.copy(t).sub(e).normalize(),$s.copy(this.origin).sub(Ef);const a=e.distanceTo(t)*.5,r=-this.direction.dot(Tc),o=$s.dot(this.direction),l=-$s.dot(Tc),c=$s.lengthSq(),u=Math.abs(1-r*r);let d,h,f,p;if(u>0)if(d=r*l-o,h=r*o-l,p=a*u,d>=0)if(h>=-p)if(h<=p){const g=1/u;d*=g,h*=g,f=d*(d+r*h+2*o)+h*(r*d+h+2*l)+c}else h=a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h=-a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h<=-p?(d=Math.max(0,-(-r*a+o)),h=d>0?-a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c):h<=p?(d=0,h=Math.min(Math.max(-a,-l),a),f=h*(h+2*l)+c):(d=Math.max(0,-(r*a+o)),h=d>0?a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c);else h=r>0?-a:a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,d),s&&s.copy(Ef).addScaledVector(Tc,h),f}intersectSphere(e,t){bs.subVectors(e.center,this.origin);const i=bs.dot(this.direction),s=bs.dot(bs)-i*i,a=e.radius*e.radius;if(s>a)return null;const r=Math.sqrt(a-s),o=i-r,l=i+r;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,s,a,r,o,l;const c=1/this.direction.x,u=1/this.direction.y,d=1/this.direction.z,h=this.origin;return c>=0?(i=(e.min.x-h.x)*c,s=(e.max.x-h.x)*c):(i=(e.max.x-h.x)*c,s=(e.min.x-h.x)*c),u>=0?(a=(e.min.y-h.y)*u,r=(e.max.y-h.y)*u):(a=(e.max.y-h.y)*u,r=(e.min.y-h.y)*u),i>r||a>s||((a>i||isNaN(i))&&(i=a),(r=0?(o=(e.min.z-h.z)*d,l=(e.max.z-h.z)*d):(o=(e.max.z-h.z)*d,l=(e.min.z-h.z)*d),i>l||o>s)||((o>i||i!==i)&&(i=o),(l=0?i:s,t)}intersectsBox(e){return this.intersectBox(e,bs)!==null}intersectTriangle(e,t,i,s,a){Cf.subVectors(t,e),Mc.subVectors(i,e),Af.crossVectors(Cf,Mc);let r=this.direction.dot(Af),o;if(r>0){if(s)return null;o=1}else if(r<0)o=-1,r=-r;else return null;$s.subVectors(this.origin,e);const l=o*this.direction.dot(Mc.crossVectors($s,Mc));if(l<0)return null;const c=o*this.direction.dot(Cf.cross($s));if(c<0||l+c>r)return null;const u=-o*$s.dot(Af);return u<0?null:this.at(u/r,a)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Me{constructor(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){Me.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_)}set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){const m=this.elements;return m[0]=e,m[4]=t,m[8]=i,m[12]=s,m[1]=a,m[5]=r,m[9]=o,m[13]=l,m[2]=c,m[6]=u,m[10]=d,m[14]=h,m[3]=f,m[7]=p,m[11]=g,m[15]=_,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Me().fromArray(this.elements)}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){const t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,i=e.elements,s=1/Sr.setFromMatrixColumn(e,0).length(),a=1/Sr.setFromMatrixColumn(e,1).length(),r=1/Sr.setFromMatrixColumn(e,2).length();return t[0]=i[0]*s,t[1]=i[1]*s,t[2]=i[2]*s,t[3]=0,t[4]=i[4]*a,t[5]=i[5]*a,t[6]=i[6]*a,t[7]=0,t[8]=i[8]*r,t[9]=i[9]*r,t[10]=i[10]*r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,i=e.x,s=e.y,a=e.z,r=Math.cos(i),o=Math.sin(i),l=Math.cos(s),c=Math.sin(s),u=Math.cos(a),d=Math.sin(a);if(e.order==="XYZ"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=-l*d,t[8]=c,t[1]=f+p*c,t[5]=h-g*c,t[9]=-o*l,t[2]=g-h*c,t[6]=p+f*c,t[10]=r*l}else if(e.order==="YXZ"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h+g*o,t[4]=p*o-f,t[8]=r*c,t[1]=r*d,t[5]=r*u,t[9]=-o,t[2]=f*o-p,t[6]=g+h*o,t[10]=r*l}else if(e.order==="ZXY"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h-g*o,t[4]=-r*d,t[8]=p+f*o,t[1]=f+p*o,t[5]=r*u,t[9]=g-h*o,t[2]=-r*c,t[6]=o,t[10]=r*l}else if(e.order==="ZYX"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=p*c-f,t[8]=h*c+g,t[1]=l*d,t[5]=g*c+h,t[9]=f*c-p,t[2]=-c,t[6]=o*l,t[10]=r*l}else if(e.order==="YZX"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=g-h*d,t[8]=p*d+f,t[1]=d,t[5]=r*u,t[9]=-o*u,t[2]=-c*u,t[6]=f*d+p,t[10]=h-g*d}else if(e.order==="XZY"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=-d,t[8]=c*u,t[1]=h*d+g,t[5]=r*u,t[9]=f*d-p,t[2]=p*d-f,t[6]=o*u,t[10]=g*d+h}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(rA,e,oA)}lookAt(e,t,i){const s=this.elements;return li.subVectors(e,t),li.lengthSq()===0&&(li.z=1),li.normalize(),Ws.crossVectors(i,li),Ws.lengthSq()===0&&(Math.abs(i.z)===1?li.x+=1e-4:li.z+=1e-4,li.normalize(),Ws.crossVectors(i,li)),Ws.normalize(),Ec.crossVectors(li,Ws),s[0]=Ws.x,s[4]=Ec.x,s[8]=li.x,s[1]=Ws.y,s[5]=Ec.y,s[9]=li.y,s[2]=Ws.z,s[6]=Ec.z,s[10]=li.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[4],l=i[8],c=i[12],u=i[1],d=i[5],h=i[9],f=i[13],p=i[2],g=i[6],_=i[10],m=i[14],v=i[3],y=i[7],b=i[11],T=i[15],x=s[0],M=s[4],C=s[8],w=s[12],E=s[1],R=s[5],k=s[9],O=s[13],D=s[2],U=s[6],F=s[10],W=s[14],H=s[3],ne=s[7],oe=s[11],pe=s[15];return a[0]=r*x+o*E+l*D+c*H,a[4]=r*M+o*R+l*U+c*ne,a[8]=r*C+o*k+l*F+c*oe,a[12]=r*w+o*O+l*W+c*pe,a[1]=u*x+d*E+h*D+f*H,a[5]=u*M+d*R+h*U+f*ne,a[9]=u*C+d*k+h*F+f*oe,a[13]=u*w+d*O+h*W+f*pe,a[2]=p*x+g*E+_*D+m*H,a[6]=p*M+g*R+_*U+m*ne,a[10]=p*C+g*k+_*F+m*oe,a[14]=p*w+g*O+_*W+m*pe,a[3]=v*x+y*E+b*D+T*H,a[7]=v*M+y*R+b*U+T*ne,a[11]=v*C+y*k+b*F+T*oe,a[15]=v*w+y*O+b*W+T*pe,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[4],s=e[8],a=e[12],r=e[1],o=e[5],l=e[9],c=e[13],u=e[2],d=e[6],h=e[10],f=e[14],p=e[3],g=e[7],_=e[11],m=e[15];return p*(+a*l*d-s*c*d-a*o*h+i*c*h+s*o*f-i*l*f)+g*(+t*l*f-t*c*h+a*r*h-s*r*f+s*c*u-a*l*u)+_*(+t*c*d-t*o*f-a*r*d+i*r*f+a*o*u-i*c*u)+m*(-s*o*u-t*l*d+t*o*h+s*r*d-i*r*h+i*l*u)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){const s=this.elements;return e.isVector3?(s[12]=e.x,s[13]=e.y,s[14]=e.z):(s[12]=e,s[13]=t,s[14]=i),this}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=e[9],h=e[10],f=e[11],p=e[12],g=e[13],_=e[14],m=e[15],v=d*_*c-g*h*c+g*l*f-o*_*f-d*l*m+o*h*m,y=p*h*c-u*_*c-p*l*f+r*_*f+u*l*m-r*h*m,b=u*g*c-p*d*c+p*o*f-r*g*f-u*o*m+r*d*m,T=p*d*l-u*g*l-p*o*h+r*g*h+u*o*_-r*d*_,x=t*v+i*y+s*b+a*T;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/x;return e[0]=v*M,e[1]=(g*h*a-d*_*a-g*s*f+i*_*f+d*s*m-i*h*m)*M,e[2]=(o*_*a-g*l*a+g*s*c-i*_*c-o*s*m+i*l*m)*M,e[3]=(d*l*a-o*h*a-d*s*c+i*h*c+o*s*f-i*l*f)*M,e[4]=y*M,e[5]=(u*_*a-p*h*a+p*s*f-t*_*f-u*s*m+t*h*m)*M,e[6]=(p*l*a-r*_*a-p*s*c+t*_*c+r*s*m-t*l*m)*M,e[7]=(r*h*a-u*l*a+u*s*c-t*h*c-r*s*f+t*l*f)*M,e[8]=b*M,e[9]=(p*d*a-u*g*a-p*i*f+t*g*f+u*i*m-t*d*m)*M,e[10]=(r*g*a-p*o*a+p*i*c-t*g*c-r*i*m+t*o*m)*M,e[11]=(u*o*a-r*d*a-u*i*c+t*d*c+r*i*f-t*o*f)*M,e[12]=T*M,e[13]=(u*g*s-p*d*s+p*i*h-t*g*h-u*i*_+t*d*_)*M,e[14]=(p*o*s-r*g*s-p*i*l+t*g*l+r*i*_-t*o*_)*M,e[15]=(r*d*s-u*o*s+u*i*l-t*d*l-r*i*h+t*o*h)*M,this}scale(e){const t=this.elements,i=e.x,s=e.y,a=e.z;return t[0]*=i,t[4]*=s,t[8]*=a,t[1]*=i,t[5]*=s,t[9]*=a,t[2]*=i,t[6]*=s,t[10]*=a,t[3]*=i,t[7]*=s,t[11]*=a,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],i=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],s=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,i,s))}makeTranslation(e,t,i){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const i=Math.cos(t),s=Math.sin(t),a=1-i,r=e.x,o=e.y,l=e.z,c=a*r,u=a*o;return this.set(c*r+i,c*o-s*l,c*l+s*o,0,c*o+s*l,u*o+i,u*l-s*r,0,c*l-s*o,u*l+s*r,a*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,s,a,r){return this.set(1,i,a,0,e,1,r,0,t,s,1,0,0,0,0,1),this}compose(e,t,i){const s=this.elements,a=t._x,r=t._y,o=t._z,l=t._w,c=a+a,u=r+r,d=o+o,h=a*c,f=a*u,p=a*d,g=r*u,_=r*d,m=o*d,v=l*c,y=l*u,b=l*d,T=i.x,x=i.y,M=i.z;return s[0]=(1-(g+m))*T,s[1]=(f+b)*T,s[2]=(p-y)*T,s[3]=0,s[4]=(f-b)*x,s[5]=(1-(h+m))*x,s[6]=(_+v)*x,s[7]=0,s[8]=(p+y)*M,s[9]=(_-v)*M,s[10]=(1-(h+g))*M,s[11]=0,s[12]=e.x,s[13]=e.y,s[14]=e.z,s[15]=1,this}decompose(e,t,i){const s=this.elements;let a=Sr.set(s[0],s[1],s[2]).length();const r=Sr.set(s[4],s[5],s[6]).length(),o=Sr.set(s[8],s[9],s[10]).length();this.determinant()<0&&(a=-a),e.x=s[12],e.y=s[13],e.z=s[14],ki.copy(this);const c=1/a,u=1/r,d=1/o;return ki.elements[0]*=c,ki.elements[1]*=c,ki.elements[2]*=c,ki.elements[4]*=u,ki.elements[5]*=u,ki.elements[6]*=u,ki.elements[8]*=d,ki.elements[9]*=d,ki.elements[10]*=d,t.setFromRotationMatrix(ki),i.x=a,i.y=r,i.z=o,this}makePerspective(e,t,i,s,a,r,o=hi,l=!1){const c=this.elements,u=2*a/(t-e),d=2*a/(i-s),h=(t+e)/(t-e),f=(i+s)/(i-s);let p,g;if(l)p=a/(r-a),g=r*a/(r-a);else if(o===hi)p=-(r+a)/(r-a),g=-2*r*a/(r-a);else if(o===Eo)p=-r/(r-a),g=-r*a/(r-a);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=h,c[12]=0,c[1]=0,c[5]=d,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,i,s,a,r,o=hi,l=!1){const c=this.elements,u=2/(t-e),d=2/(i-s),h=-(t+e)/(t-e),f=-(i+s)/(i-s);let p,g;if(l)p=1/(r-a),g=r/(r-a);else if(o===hi)p=-2/(r-a),g=-(r+a)/(r-a);else if(o===Eo)p=-1/(r-a),g=-a/(r-a);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=0,c[12]=h,c[1]=0,c[5]=d,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<16;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}}const Sr=new S,ki=new Me,rA=new S(0,0,0),oA=new S(1,1,1),Ws=new S,Ec=new S,li=new S,Sy=new Me,Ty=new dt;class an{constructor(e=0,t=0,i=0,s=an.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=s}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,s=this._order){return this._x=e,this._y=t,this._z=i,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){const s=e.elements,a=s[0],r=s[4],o=s[8],l=s[1],c=s[5],u=s[9],d=s[2],h=s[6],f=s[10];switch(t){case"XYZ":this._y=Math.asin(Ze(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,f),this._z=Math.atan2(-r,a)):(this._x=Math.atan2(h,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Ze(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-d,a),this._z=0);break;case"ZXY":this._x=Math.asin(Ze(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-d,f),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(l,a));break;case"ZYX":this._y=Math.asin(-Ze(d,-1,1)),Math.abs(d)<.9999999?(this._x=Math.atan2(h,f),this._z=Math.atan2(l,a)):(this._x=0,this._z=Math.atan2(-r,c));break;case"YZX":this._z=Math.asin(Ze(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-d,a)):(this._x=0,this._y=Math.atan2(o,f));break;case"XZY":this._z=Math.asin(-Ze(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(h,c),this._y=Math.atan2(o,a)):(this._x=Math.atan2(-u,f),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,i===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return Sy.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Sy,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Ty.setFromEuler(this),this.setFromQuaternion(Ty,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}an.DEFAULT_ORDER="XYZ";class Lh{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(o=>({...o})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(e),s.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(s.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(s.boundingBox=this.boundingBox.toJSON()));function a(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=a(e.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),u.length>0&&(i.images=u),d.length>0&&(i.shapes=d),h.length>0&&(i.skeletons=h),f.length>0&&(i.animations=f),p.length>0&&(i.nodes=p)}return i.object=s,i;function r(o){const l=[];for(const c in o){const u=o[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;i0?s.multiplyScalar(1/Math.sqrt(a)):s.set(0,0,0)}static getBarycoord(e,t,i,s,a){Di.subVectors(s,t),ws.subVectors(i,t),Pf.subVectors(e,t);const r=Di.dot(Di),o=Di.dot(ws),l=Di.dot(Pf),c=ws.dot(ws),u=ws.dot(Pf),d=r*c-o*o;if(d===0)return a.set(0,0,0),null;const h=1/d,f=(c*l-o*u)*h,p=(r*u-o*l)*h;return a.set(1-f-p,p,f)}static containsPoint(e,t,i,s){return this.getBarycoord(e,t,i,s,Ss)===null?!1:Ss.x>=0&&Ss.y>=0&&Ss.x+Ss.y<=1}static getInterpolation(e,t,i,s,a,r,o,l){return this.getBarycoord(e,t,i,s,Ss)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(a,Ss.x),l.addScaledVector(r,Ss.y),l.addScaledVector(o,Ss.z),l)}static getInterpolatedAttribute(e,t,i,s,a,r){return Df.setScalar(0),Of.setScalar(0),Ff.setScalar(0),Df.fromBufferAttribute(e,t),Of.fromBufferAttribute(e,i),Ff.fromBufferAttribute(e,s),r.setScalar(0),r.addScaledVector(Df,a.x),r.addScaledVector(Of,a.y),r.addScaledVector(Ff,a.z),r}static isFrontFacing(e,t,i,s){return Di.subVectors(i,t),ws.subVectors(e,t),Di.cross(ws).dot(s)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,s){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[s]),this}setFromAttributeAndIndices(e,t,i,s){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,s),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Di.subVectors(this.c,this.b),ws.subVectors(this.a,this.b),Di.cross(ws).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Qn.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return Qn.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,s,a){return Qn.getInterpolation(e,this.a,this.b,this.c,t,i,s,a)}containsPoint(e){return Qn.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Qn.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,s=this.b,a=this.c;let r,o;Er.subVectors(s,i),Cr.subVectors(a,i),If.subVectors(e,i);const l=Er.dot(If),c=Cr.dot(If);if(l<=0&&c<=0)return t.copy(i);Lf.subVectors(e,s);const u=Er.dot(Lf),d=Cr.dot(Lf);if(u>=0&&d<=u)return t.copy(s);const h=l*d-u*c;if(h<=0&&l>=0&&u<=0)return r=l/(l-u),t.copy(i).addScaledVector(Er,r);kf.subVectors(e,a);const f=Er.dot(kf),p=Cr.dot(kf);if(p>=0&&f<=p)return t.copy(a);const g=f*c-l*p;if(g<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(i).addScaledVector(Cr,o);const _=u*p-f*d;if(_<=0&&d-u>=0&&f-p>=0)return Py.subVectors(a,s),o=(d-u)/(d-u+(f-p)),t.copy(s).addScaledVector(Py,o);const m=1/(_+g+h);return r=g*m,o=h*m,t.copy(i).addScaledVector(Er,r).addScaledVector(Cr,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}const bS={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Xs={h:0,s:0,l:0},Ac={h:0,s:0,l:0};function Nf(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}class ue{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){const s=e;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=gt){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,rt.colorSpaceToWorking(this,t),this}setRGB(e,t,i,s=rt.workingColorSpace){return this.r=e,this.g=t,this.b=i,rt.colorSpaceToWorking(this,s),this}setHSL(e,t,i,s=rt.workingColorSpace){if(e=sg(e,1),t=Ze(t,0,1),i=Ze(i,0,1),t===0)this.r=this.g=this.b=i;else{const a=i<=.5?i*(1+t):i+t-i*t,r=2*i-a;this.r=Nf(r,a,e+1/3),this.g=Nf(r,a,e),this.b=Nf(r,a,e-1/3)}return rt.colorSpaceToWorking(this,s),this}setStyle(e,t=gt){function i(a){a!==void 0&&parseFloat(a)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(e)){let a;const r=s[1],o=s[2];switch(r){case"rgb":case"rgba":if(a=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(255,parseInt(a[1],10))/255,Math.min(255,parseInt(a[2],10))/255,Math.min(255,parseInt(a[3],10))/255,t);if(a=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(100,parseInt(a[1],10))/100,Math.min(100,parseInt(a[2],10))/100,Math.min(100,parseInt(a[3],10))/100,t);break;case"hsl":case"hsla":if(a=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setHSL(parseFloat(a[1])/360,parseFloat(a[2])/100,parseFloat(a[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(e)){const a=s[1],r=a.length;if(r===3)return this.setRGB(parseInt(a.charAt(0),16)/15,parseInt(a.charAt(1),16)/15,parseInt(a.charAt(2),16)/15,t);if(r===6)return this.setHex(parseInt(a,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=gt){const i=bS[e.toLowerCase()];return i!==void 0?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Fs(e.r),this.g=Fs(e.g),this.b=Fs(e.b),this}copyLinearToSRGB(e){return this.r=io(e.r),this.g=io(e.g),this.b=io(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=gt){return rt.workingToColorSpace(En.copy(this),e),Math.round(Ze(En.r*255,0,255))*65536+Math.round(Ze(En.g*255,0,255))*256+Math.round(Ze(En.b*255,0,255))}getHexString(e=gt){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=rt.workingColorSpace){rt.workingToColorSpace(En.copy(this),t);const i=En.r,s=En.g,a=En.b,r=Math.max(i,s,a),o=Math.min(i,s,a);let l,c;const u=(o+r)/2;if(o===r)l=0,c=0;else{const d=r-o;switch(c=u<=.5?d/(r+o):d/(2-r-o),r){case i:l=(s-a)/d+(s0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==nr&&(i.blending=this.blending),this.side!==fs&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==Bl&&(i.blendSrc=this.blendSrc),this.blendDst!==zl&&(i.blendDst=this.blendDst),this.blendEquation!==Is&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==ar&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Am&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Ba&&(i.stencilFail=this.stencilFail),this.stencilZFail!==Ba&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==Ba&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function s(a){const r=[];for(const o in a){const l=a[o];delete l.metadata,r.push(l)}return r}if(t){const a=s(e.textures),r=s(e.images);a.length>0&&(i.textures=a),r.length>0&&(i.images=r)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const s=t.length;i=new Array(s);for(let a=0;a!==s;++a)i[a]=t[a].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}}class Ye extends Qt{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new ue(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new an,this.combine=rc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const ks=fA();function fA(){const n=new ArrayBuffer(4),e=new Float32Array(n),t=new Uint32Array(n),i=new Uint32Array(512),s=new Uint32Array(512);for(let l=0;l<256;++l){const c=l-127;c<-27?(i[l]=0,i[l|256]=32768,s[l]=24,s[l|256]=24):c<-14?(i[l]=1024>>-c-14,i[l|256]=1024>>-c-14|32768,s[l]=-c-1,s[l|256]=-c-1):c<=15?(i[l]=c+15<<10,i[l|256]=c+15<<10|32768,s[l]=13,s[l|256]=13):c<128?(i[l]=31744,i[l|256]=64512,s[l]=24,s[l|256]=24):(i[l]=31744,i[l|256]=64512,s[l]=13,s[l|256]=13)}const a=new Uint32Array(2048),r=new Uint32Array(64),o=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,u=0;for(;(c&8388608)===0;)c<<=1,u-=8388608;c&=-8388609,u+=947912704,a[l]=c|u}for(let l=1024;l<2048;++l)a[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)r[l]=l<<23;r[31]=1199570944,r[32]=2147483648;for(let l=33;l<63;++l)r[l]=2147483648+(l-32<<23);r[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(o[l]=1024);return{floatView:e,uint32View:t,baseTable:i,shiftTable:s,mantissaTable:a,exponentTable:r,offsetTable:o}}function Yn(n){Math.abs(n)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),n=Ze(n,-65504,65504),ks.floatView[0]=n;const e=ks.uint32View[0],t=e>>23&511;return ks.baseTable[t]+((e&8388607)>>ks.shiftTable[t])}function fl(n){const e=n>>10;return ks.uint32View[0]=ks.mantissaTable[ks.offsetTable[e]+(n&1023)]+ks.exponentTable[e],ks.floatView[0]}class pl{static toHalfFloat(e){return Yn(e)}static fromHalfFloat(e){return fl(e)}}const nn=new S,Rc=new te;let pA=0;class ot{constructor(e,t,i=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:pA++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=$l,this.updateRanges=[],this.gpuType=Sn,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let s=0,a=this.itemSize;st.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new vn);const e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new S(-1/0,-1/0,-1/0),new S(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,s=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const s={};let a=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let d=0,h=c.length;d0&&(s[l]=u,a=!0)}a&&(e.data.morphAttributes=s,e.data.morphTargetsRelative=this.morphTargetsRelative);const r=this.groups;r.length>0&&(e.data.groups=JSON.parse(JSON.stringify(r)));const o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null&&this.setIndex(i.clone());const s=e.attributes;for(const c in s){const u=s[c];this.setAttribute(c,u.clone(t))}const a=e.morphAttributes;for(const c in a){const u=[],d=a[c];for(let h=0,f=d.length;h0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;a(e.far-e.near)**2))&&(Iy.copy(a).invert(),ba.copy(e.ray).applyMatrix4(Iy),!(i.boundingBox!==null&&ba.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,ba)))}_computeIntersections(e,t,i){let s;const a=this.geometry,r=this.material,o=a.index,l=a.attributes.position,c=a.attributes.uv,u=a.attributes.uv1,d=a.attributes.normal,h=a.groups,f=a.drawRange;if(o!==null)if(Array.isArray(r))for(let p=0,g=h.length;pt.far?null:{distance:c,point:Oc.clone(),object:n}}function Fc(n,e,t,i,s,a,r,o,l,c){n.getVertexPosition(o,Ic),n.getVertexPosition(l,Lc),n.getVertexPosition(c,kc);const u=wA(n,e,t,i,Ic,Lc,kc,ky);if(u){const d=new S;Qn.getBarycoord(ky,Ic,Lc,kc,d),s&&(u.uv=Qn.getInterpolatedAttribute(s,o,l,c,d,new te)),a&&(u.uv1=Qn.getInterpolatedAttribute(a,o,l,c,d,new te)),r&&(u.normal=Qn.getInterpolatedAttribute(r,o,l,c,d,new S),u.normal.dot(i.direction)>0&&u.normal.multiplyScalar(-1));const h={a:o,b:l,c,normal:new S,materialIndex:0};Qn.getNormal(Ic,Lc,kc,h.normal),u.face=h,u.barycoord=d}return u}class Ci extends Ge{constructor(e=1,t=1,i=1,s=1,a=1,r=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:s,heightSegments:a,depthSegments:r};const o=this;s=Math.floor(s),a=Math.floor(a),r=Math.floor(r);const l=[],c=[],u=[],d=[];let h=0,f=0;p("z","y","x",-1,-1,i,t,e,r,a,0),p("z","y","x",1,-1,i,t,-e,r,a,1),p("x","z","y",1,1,e,i,t,s,r,2),p("x","z","y",1,-1,e,i,-t,s,r,3),p("x","y","z",1,-1,e,t,i,s,a,4),p("x","y","z",-1,-1,e,t,-i,s,a,5),this.setIndex(l),this.setAttribute("position",new Ee(c,3)),this.setAttribute("normal",new Ee(u,3)),this.setAttribute("uv",new Ee(d,2));function p(g,_,m,v,y,b,T,x,M,C,w){const E=b/M,R=T/C,k=b/2,O=T/2,D=x/2,U=M+1,F=C+1;let W=0,H=0;const ne=new S;for(let oe=0;oe0?1:-1,u.push(ne.x,ne.y,ne.z),d.push(Ie/M),d.push(1-oe/C),W+=1}}for(let oe=0;oe0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const i={};for(const s in this.extensions)this.extensions[s]===!0&&(i[s]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}}class Ah extends Qe{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Me,this.projectionMatrix=new Me,this.projectionMatrixInverse=new Me,this.coordinateSystem=hi,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const Ks=new S,Cy=new te,Ay=new te;class Jt extends Ah{constructor(e=50,t=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=To*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(nr*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return To*2*Math.atan(Math.tan(nr*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,i){Ks.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(Ks.x,Ks.y).multiplyScalar(-e/Ks.z),Ks.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(Ks.x,Ks.y).multiplyScalar(-e/Ks.z)}getViewSize(e,t){return this.getViewBounds(e,Cy,Ay),t.subVectors(Ay,Cy)}setViewOffset(e,t,i,s,a,r){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=a,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(nr*.5*this.fov)/this.zoom,i=2*t,s=this.aspect*i,a=-.5*s;const r=this.view;if(this.view!==null&&this.view.enabled){const l=r.fullWidth,c=r.fullHeight;a+=r.offsetX*s/l,t-=r.offsetY*i/c,s*=r.width/l,i*=r.height/c}const o=this.filmOffset;o!==0&&(a+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(a,a+s,t,t-i,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const Ar=-90,Rr=1;class mS extends Qe{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Jt(Ar,Rr,e,t);s.layers=this.layers,this.add(s);const a=new Jt(Ar,Rr,e,t);a.layers=this.layers,this.add(a);const r=new Jt(Ar,Rr,e,t);r.layers=this.layers,this.add(r);const o=new Jt(Ar,Rr,e,t);o.layers=this.layers,this.add(o);const l=new Jt(Ar,Rr,e,t);l.layers=this.layers,this.add(l);const c=new Jt(Ar,Rr,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[i,s,a,r,o,l]=t;for(const c of t)this.remove(c);if(e===hi)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),a.up.set(0,0,-1),a.lookAt(0,1,0),r.up.set(0,0,1),r.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===So)i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),a.up.set(0,0,1),a.lookAt(0,1,0),r.up.set(0,0,-1),r.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(const c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[a,r,o,l,c,u]=this.children,d=e.getRenderTarget(),h=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;const g=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0,s),e.render(t,a),e.setRenderTarget(i,1,s),e.render(t,r),e.setRenderTarget(i,2,s),e.render(t,o),e.setRenderTarget(i,3,s),e.render(t,l),e.setRenderTarget(i,4,s),e.render(t,c),i.texture.generateMipmaps=g,e.setRenderTarget(i,5,s),e.render(t,u),e.setRenderTarget(d,h,f),e.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class sc extends Bt{constructor(e=[],t=Bs,i,s,a,r,o,l,c,u){super(e,t,i,s,a,r,o,l,c,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class _S extends ms{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},s=[i,i,i,i,i,i];this.texture=new sc(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:` +}`;class ti extends Qt{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=TA,this.fragmentShader=MA,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=Ao(e.uniforms),this.uniformsGroups=SA(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){const t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(const s in this.uniforms){const r=this.uniforms[s].value;r&&r.isTexture?t.uniforms[s]={type:"t",value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[s]={type:"c",value:r.getHex()}:r&&r.isVector2?t.uniforms[s]={type:"v2",value:r.toArray()}:r&&r.isVector3?t.uniforms[s]={type:"v3",value:r.toArray()}:r&&r.isVector4?t.uniforms[s]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?t.uniforms[s]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?t.uniforms[s]={type:"m4",value:r.toArray()}:t.uniforms[s]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const i={};for(const s in this.extensions)this.extensions[s]===!0&&(i[s]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}}class Dh extends Qe{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Me,this.projectionMatrix=new Me,this.projectionMatrixInverse=new Me,this.coordinateSystem=hi,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const Ks=new S,Dy=new te,Oy=new te;class Jt extends Dh{constructor(e=50,t=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=Co*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(ir*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return Co*2*Math.atan(Math.tan(ir*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,i){Ks.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(Ks.x,Ks.y).multiplyScalar(-e/Ks.z),Ks.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(Ks.x,Ks.y).multiplyScalar(-e/Ks.z)}getViewSize(e,t){return this.getViewBounds(e,Dy,Oy),t.subVectors(Oy,Dy)}setViewOffset(e,t,i,s,a,r){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=a,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(ir*.5*this.fov)/this.zoom,i=2*t,s=this.aspect*i,a=-.5*s;const r=this.view;if(this.view!==null&&this.view.enabled){const l=r.fullWidth,c=r.fullHeight;a+=r.offsetX*s/l,t-=r.offsetY*i/c,s*=r.width/l,i*=r.height/c}const o=this.filmOffset;o!==0&&(a+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(a,a+s,t,t-i,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const Rr=-90,Pr=1;class SS extends Qe{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Jt(Rr,Pr,e,t);s.layers=this.layers,this.add(s);const a=new Jt(Rr,Pr,e,t);a.layers=this.layers,this.add(a);const r=new Jt(Rr,Pr,e,t);r.layers=this.layers,this.add(r);const o=new Jt(Rr,Pr,e,t);o.layers=this.layers,this.add(o);const l=new Jt(Rr,Pr,e,t);l.layers=this.layers,this.add(l);const c=new Jt(Rr,Pr,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[i,s,a,r,o,l]=t;for(const c of t)this.remove(c);if(e===hi)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),a.up.set(0,0,-1),a.lookAt(0,1,0),r.up.set(0,0,1),r.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===Eo)i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),a.up.set(0,0,1),a.lookAt(0,1,0),r.up.set(0,0,-1),r.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(const c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[a,r,o,l,c,u]=this.children,d=e.getRenderTarget(),h=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;const g=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0,s),e.render(t,a),e.setRenderTarget(i,1,s),e.render(t,r),e.setRenderTarget(i,2,s),e.render(t,o),e.setRenderTarget(i,3,s),e.render(t,l),e.setRenderTarget(i,4,s),e.render(t,c),i.texture.generateMipmaps=g,e.setRenderTarget(i,5,s),e.render(t,u),e.setRenderTarget(d,h,f),e.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class lc extends Bt{constructor(e=[],t=Bs,i,s,a,r,o,l,c,u){super(e,t,i,s,a,r,o,l,c,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class TS extends ms{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},s=[i,i,i,i,i,i];this.texture=new lc(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:` varying vec3 vWorldDirection; @@ -37,9 +37,9 @@ function fh(n,e){if(n.frames.length===0)return 0;let t=0,i=n.frames.length-1;for gl_FragColor = texture2D( tEquirect, sampleUV ); } - `},s=new Ei(5,5,5),a=new ti({name:"CubemapFromEquirect",uniforms:Mo(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:un,blending:ks});a.uniforms.tEquirect.value=t;const r=new we(s,a),o=t.minFilter;return t.minFilter===Ti&&(t.minFilter=Vt),new mS(1,10,this).update(e,r),t.minFilter=o,r.geometry.dispose(),r.material.dispose(),this}clear(e,t=!0,i=!0,s=!0){const a=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,i,s);e.setRenderTarget(a)}}class Mt extends Qe{constructor(){super(),this.isGroup=!0,this.type="Group"}}const mA={type:"move"};class Gu{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Mt,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Mt,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new S,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new S),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Mt,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new S,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new S),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){const t=this._hand;if(t)for(const i of e.hand.values())this._getHandJoint(t,i)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(e,t,i){let s=null,a=null,r=null;const o=this._targetRay,l=this._grip,c=this._hand;if(e&&t.session.visibilityState!=="visible-blurred"){if(c&&e.hand){r=!0;for(const g of e.hand.values()){const _=t.getJointPose(g,i),m=this._getHandJoint(c,g);_!==null&&(m.matrix.fromArray(_.transform.matrix),m.matrix.decompose(m.position,m.rotation,m.scale),m.matrixWorldNeedsUpdate=!0,m.jointRadius=_.radius),m.visible=_!==null}const u=c.joints["index-finger-tip"],d=c.joints["thumb-tip"],h=u.position.distanceTo(d.position),f=.02,p=.005;c.inputState.pinching&&h>f+p?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&h<=f-p&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(a=t.getPose(e.gripSpace,i),a!==null&&(l.matrix.fromArray(a.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,a.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(a.linearVelocity)):l.hasLinearVelocity=!1,a.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(a.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(s=t.getPose(e.targetRaySpace,i),s===null&&a!==null&&(s=a),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(mA)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=a!==null),c!==null&&(c.visible=r!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){const i=new Mt;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}}class Rh{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new ue(e),this.density=t}clone(){return new Rh(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class Ph{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new ue(e),this.near=t,this.far=i}clone(){return new Ph(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class ac extends Qe{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new an,this.environmentIntensity=1,this.environmentRotation=new an,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class rc{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=zl,this.updateRanges=[],this.version=0,this.uuid=pi()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let s=0,a=this.stride;se.far||t.push({distance:l,point:$o.clone(),uv:Qn.getInterpolation($o,Dc,Xo,kc,Ry,kf,Py,new te),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}}function Oc(n,e,t,i,s,a){Dr.subVectors(n,t).addScalar(.5).multiply(i),s!==void 0?(Wo.x=a*Dr.x-s*Dr.y,Wo.y=s*Dr.x+a*Dr.y):Wo.copy(Dr),n.copy(e),n.x+=Wo.x,n.y+=Wo.y,n.applyMatrix4(gS)}const Fc=new S,Iy=new S;class yS extends Qe{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);const t=e.levels;for(let i=0,s=t.length;i0){let i,s;for(i=1,s=t.length;i0){Fc.setFromMatrixPosition(this.matrixWorld);const s=e.ray.origin.distanceTo(Fc);this.getObjectForDistance(s).raycast(e,t)}}update(e){const t=this.levels;if(t.length>1){Fc.setFromMatrixPosition(e.matrixWorld),Iy.setFromMatrixPosition(this.matrixWorld);const i=Fc.distanceTo(Iy)/e.zoom;t[0].object.visible=!0;let s,a;for(s=1,a=t.length;s=r)t[s-1].object.visible=!1,t[s].object.visible=!0;else break}for(this._currentLevel=s-1;s1?null:t.copy(e.start).addScaledVector(i,a)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||bA.getNormalMatrix(e),s=this.coplanarPoint(Nf).applyMatrix4(e),a=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(a),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const ba=new bn,xA=new te(.5,.5),Bc=new S;class Po{constructor(e=new Ps,t=new Ps,i=new Ps,s=new Ps,a=new Ps,r=new Ps){this.planes=[e,t,i,s,a,r]}set(e,t,i,s,a,r){const o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(s),o[4].copy(a),o[5].copy(r),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=hi,i=!1){const s=this.planes,a=e.elements,r=a[0],o=a[1],l=a[2],c=a[3],u=a[4],d=a[5],h=a[6],f=a[7],p=a[8],g=a[9],_=a[10],m=a[11],v=a[12],y=a[13],b=a[14],T=a[15];if(s[0].setComponents(c-r,f-u,m-p,T-v).normalize(),s[1].setComponents(c+r,f+u,m+p,T+v).normalize(),s[2].setComponents(c+o,f+d,m+g,T+y).normalize(),s[3].setComponents(c-o,f-d,m-g,T-y).normalize(),i)s[4].setComponents(l,h,_,b).normalize(),s[5].setComponents(c-l,f-h,m-_,T-b).normalize();else if(s[4].setComponents(c-l,f-h,m-_,T-b).normalize(),t===hi)s[5].setComponents(c+l,f+h,m+_,T+b).normalize();else if(t===So)s[5].setComponents(l,h,_,b).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),ba.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),ba.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(ba)}intersectsSprite(e){ba.center.set(0,0,0);const t=xA.distanceTo(e.center);return ba.radius=.7071067811865476+t,ba.applyMatrix4(e.matrixWorld),this.intersectsSphere(ba)}intersectsSphere(e){const t=this.planes,i=e.center,s=-e.radius;for(let a=0;a<6;a++)if(t[a].distanceToPoint(i)0?e.max.x:e.min.x,Bc.y=s.normal.y>0?e.max.y:e.min.y,Bc.z=s.normal.z>0?e.max.z:e.min.z,s.distanceToPoint(Bc)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}const Ji=new Me,Qi=new Po;class Oh{constructor(){this.coordinateSystem=hi}intersectsObject(e,t){if(!t.isArrayCamera||t.cameras.length===0)return!1;for(let i=0;i=a.length&&a.push({start:-1,count:-1,z:-1,index:-1});const o=a[this.index];r.push(o),this.index++,o.start=e,o.count=t,o.z=i,o.index=s}reset(){this.list.length=0,this.index=0}}const Wn=new Me,MA=new ue(1,1,1),zy=new Po,EA=new Oh,zc=new vn,xa=new bn,Yo=new S,Hy=new S,CA=new S,Bf=new TA,Cn=new we,Hc=[];function AA(n,e,t=0){const i=e.itemSize;if(n.isInterleavedBufferAttribute||n.array.constructor!==e.array.constructor){const s=n.count;for(let a=0;a65535?new Uint32Array(s):new Uint16Array(s);t.setIndex(new rt(a,1))}this._geometryInitialized=!0}}_validateGeometry(e){const t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw new Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(const i in t.attributes){if(!e.hasAttribute(i))throw new Error(`THREE.BatchedMesh: Added geometry missing "${i}". All geometries must have consistent attributes.`);const s=e.getAttribute(i),a=t.getAttribute(i);if(s.itemSize!==a.itemSize||s.normalized!==a.normalized)throw new Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(e){const t=this._instanceInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid instanceId ${e}. Instance is either out of range or has been deleted.`)}validateGeometryId(e){const t=this._geometryInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid geometryId ${e}. Geometry is either out of range or has been deleted.`)}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new vn);const e=this.boundingBox,t=this._instanceInfo;e.makeEmpty();for(let i=0,s=t.length;i=this.maxInstanceCount&&this._availableInstanceIds.length===0)throw new Error("THREE.BatchedMesh: Maximum item count reached.");const i={visible:!0,active:!0,geometryIndex:e};let s=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(Uf),s=this._availableInstanceIds.shift(),this._instanceInfo[s]=i):(s=this._instanceInfo.length,this._instanceInfo.push(i));const a=this._matricesTexture;Wn.identity().toArray(a.image.data,s*16),a.needsUpdate=!0;const r=this._colorsTexture;return r&&(MA.toArray(r.image.data,s*4),r.needsUpdate=!0),this._visibilityChanged=!0,s}addGeometry(e,t=-1,i=-1){this._initializeGeometry(e),this._validateGeometry(e);const s={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},a=this._geometryInfo;s.vertexStart=this._nextVertexStart,s.reservedVertexCount=t===-1?e.getAttribute("position").count:t;const r=e.getIndex();if(r!==null&&(s.indexStart=this._nextIndexStart,s.reservedIndexCount=i===-1?r.count:i),s.indexStart!==-1&&s.indexStart+s.reservedIndexCount>this._maxIndexCount||s.vertexStart+s.reservedVertexCount>this._maxVertexCount)throw new Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");let l;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(Uf),l=this._availableGeometryIds.shift(),a[l]=s):(l=this._geometryCount,this._geometryCount++,a.push(s)),this.setGeometryAt(l,e),this._nextIndexStart=s.indexStart+s.reservedIndexCount,this._nextVertexStart=s.vertexStart+s.reservedVertexCount,l}setGeometryAt(e,t){if(e>=this._geometryCount)throw new Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(t);const i=this.geometry,s=i.getIndex()!==null,a=i.getIndex(),r=t.getIndex(),o=this._geometryInfo[e];if(s&&r.count>o.reservedIndexCount||t.attributes.position.count>o.reservedVertexCount)throw new Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");const l=o.vertexStart,c=o.reservedVertexCount;o.vertexCount=t.getAttribute("position").count;for(const u in i.attributes){const d=t.getAttribute(u),h=i.getAttribute(u);AA(d,h,l);const f=d.itemSize;for(let p=d.count,g=c;p=t.length||t[e].active===!1)return this;const i=this._instanceInfo;for(let s=0,a=i.length;so).sort((r,o)=>i[r].vertexStart-i[o].vertexStart),a=this.geometry;for(let r=0,o=i.length;r=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingBox===null){const a=new vn,r=i.index,o=i.attributes.position;for(let l=s.start,c=s.start+s.count;l=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingSphere===null){const a=new bn;this.getBoundingBoxAt(e,zc),zc.getCenter(a.center);const r=i.index,o=i.attributes.position;let l=0;for(let c=s.start,u=s.start+s.count;co.active);if(Math.max(...i.map(o=>o.vertexStart+o.reservedVertexCount))>e)throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${t}. Cannot shrink further.`);if(this.geometry.index&&Math.max(...i.map(l=>l.indexStart+l.reservedIndexCount))>t)throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${t}. Cannot shrink further.`);const a=this.geometry;a.dispose(),this._maxVertexCount=e,this._maxIndexCount=t,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new Ge,this._initializeGeometry(a));const r=this.geometry;a.index&&wa(a.index.array,r.index.array);for(const o in a.attributes)wa(a.attributes[o].array,r.attributes[o].array)}raycast(e,t){const i=this._instanceInfo,s=this._geometryInfo,a=this.matrixWorld,r=this.geometry;Cn.material=this.material,Cn.geometry.index=r.index,Cn.geometry.attributes=r.attributes,Cn.geometry.boundingBox===null&&(Cn.geometry.boundingBox=new vn),Cn.geometry.boundingSphere===null&&(Cn.geometry.boundingSphere=new bn);for(let o=0,l=i.length;o({...t,boundingBox:t.boundingBox!==null?t.boundingBox.clone():null,boundingSphere:t.boundingSphere!==null?t.boundingSphere.clone():null})),this._instanceInfo=e._instanceInfo.map(t=>({...t})),this._availableInstanceIds=e._availableInstanceIds.slice(),this._availableGeometryIds=e._availableGeometryIds.slice(),this._nextIndexStart=e._nextIndexStart,this._nextVertexStart=e._nextVertexStart,this._geometryCount=e._geometryCount,this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._indirectTexture=e._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),this._colorsTexture!==null&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,this._colorsTexture!==null&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(e,t,i,s,a){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const r=s.getIndex(),o=r===null?1:r.array.BYTES_PER_ELEMENT,l=this._instanceInfo,c=this._multiDrawStarts,u=this._multiDrawCounts,d=this._geometryInfo,h=this.perObjectFrustumCulled,f=this._indirectTexture,p=f.image.data,g=i.isArrayCamera?EA:zy;h&&!i.isArrayCamera&&(Wn.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse).multiply(this.matrixWorld),zy.setFromProjectionMatrix(Wn,i.coordinateSystem,i.reversedDepth));let _=0;if(this.sortObjects){Wn.copy(this.matrixWorld).invert(),Yo.setFromMatrixPosition(i.matrixWorld).applyMatrix4(Wn),Hy.set(0,0,-1).transformDirection(i.matrixWorld).transformDirection(Wn);for(let y=0,b=l.length;y0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;ai)return;zf.applyMatrix4(n.matrixWorld);const c=e.ray.origin.distanceTo(zf);if(!(ce.far))return{distance:c,point:Gy.clone().applyMatrix4(n.matrixWorld),index:r,face:null,faceIndex:null,barycoord:null,object:n}}const $y=new S,Wy=new S;class Ln extends In{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[];for(let s=0,a=t.count;s0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;as.far)return;a.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:e,face:null,faceIndex:null,barycoord:null,object:r})}}class bS extends Bt{constructor(e,t,i,s,a=Vt,r=Vt,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;const u=this;function d(){u.needsUpdate=!0,u._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d)}"requestVideoFrameCallback"in e&&(this._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d))}clone(){return new this.constructor(this.image).copy(this)}update(){const e=this.image;"requestVideoFrameCallback"in e===!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){this._requestVideoFrameCallbackId!==0&&this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),super.dispose()}}class RA extends bS{constructor(e,t,i,s,a,r,o,l){super({},e,t,i,s,a,r,o,l),this.isVideoFrameTexture=!0}update(){}clone(){return new this.constructor().copy(this)}setFrame(e){this.image=e,this.needsUpdate=!0}}class PA extends Bt{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=dn,this.minFilter=dn,this.generateMipmaps=!1,this.needsUpdate=!0}}class Fh extends Bt{constructor(e,t,i,s,a,r,o,l,c,u,d,h){super(null,r,o,l,c,u,s,a,d,h),this.isCompressedTexture=!0,this.image={width:t,height:i},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class IA extends Fh{constructor(e,t,i,s,a,r){super(e,t,i,a,r),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=Hn,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}}class LA extends Fh{constructor(e,t,i){super(void 0,e[0].width,e[0].height,t,i,Bs),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}}class oc extends Bt{constructor(e,t,i,s,a,r,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class tg extends Bt{constructor(e,t,i=zs,s,a,r,o=dn,l=dn,c,u=bo,d=1){if(u!==bo&&u!==xo)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const h={width:e,height:t,depth:d};super(h,s,a,r,o,l,u,i,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new ia(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){const t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}}class ng extends Bt{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}}class Nh extends Ge{constructor(e=1,t=1,i=4,s=8,a=1){super(),this.type="CapsuleGeometry",this.parameters={radius:e,height:t,capSegments:i,radialSegments:s,heightSegments:a},t=Math.max(0,t),i=Math.max(1,Math.floor(i)),s=Math.max(3,Math.floor(s)),a=Math.max(1,Math.floor(a));const r=[],o=[],l=[],c=[],u=t/2,d=Math.PI/2*e,h=t,f=2*d+h,p=i*2+a,g=s+1,_=new S,m=new S;for(let v=0;v<=p;v++){let y=0,b=0,T=0,x=0;if(v<=i){const w=v/i,E=w*Math.PI/2;b=-u-e*Math.cos(E),T=e*Math.sin(E),x=-e*Math.cos(E),y=w*d}else if(v<=i+a){const w=(v-i)/a;b=-u+w*t,T=e,x=0,y=d+w*h}else{const w=(v-i-a)/i,E=w*Math.PI/2;b=u+e*Math.sin(E),T=e*Math.cos(E),x=e*Math.sin(E),y=d+h+w*d}const M=Math.max(0,Math.min(1,y/f));let C=0;v===0?C=.5/s:v===p&&(C=-.5/s);for(let w=0;w<=s;w++){const E=w/s,R=E*Math.PI*2,D=Math.sin(R),O=Math.cos(R);m.x=-T*O,m.y=b,m.z=T*D,o.push(m.x,m.y,m.z),_.set(-T*O,x,T*D),_.normalize(),l.push(_.x,_.y,_.z),c.push(E+C,M)}if(v>0){const w=(v-1)*g;for(let E=0;E0&&y(!0),t>0&&y(!1)),this.setIndex(u),this.setAttribute("position",new Ee(d,3)),this.setAttribute("normal",new Ee(h,3)),this.setAttribute("uv",new Ee(f,2));function v(){const b=new S,T=new S;let x=0;const M=(t-e)/i;for(let C=0;C<=a;C++){const w=[],E=C/a,R=E*(t-e)+e;for(let D=0;D<=s;D++){const O=D/s,k=O*l+o,U=Math.sin(k),F=Math.cos(k);T.x=R*U,T.y=-E*i+_,T.z=R*F,d.push(T.x,T.y,T.z),b.set(U,M,F).normalize(),h.push(b.x,b.y,b.z),f.push(O,1-E),w.push(p++)}g.push(w)}for(let C=0;C0||w!==0)&&(u.push(E,R,O),x+=3),(t>0||w!==a-1)&&(u.push(R,D,O),x+=3)}c.addGroup(m,x,0),m+=x}function y(b){const T=p,x=new te,M=new S;let C=0;const w=b===!0?e:t,E=b===!0?1:-1;for(let D=1;D<=s;D++)d.push(0,_*E,0),h.push(0,E,0),f.push(.5,.5),p++;const R=p;for(let D=0;D<=s;D++){const k=D/s*l+o,U=Math.cos(k),F=Math.sin(k);M.x=w*F,M.y=_*E,M.z=w*U,d.push(M.x,M.y,M.z),h.push(0,E,0),x.x=U*.5+.5,x.y=F*.5*E+.5,f.push(x.x,x.y),p++}for(let D=0;D.9&&M<.1&&(y<.2&&(r[v+0]+=1),b<.2&&(r[v+2]+=1),T<.2&&(r[v+4]+=1))}}function h(v){a.push(v.x,v.y,v.z)}function f(v,y){const b=v*3;y.x=e[b+0],y.y=e[b+1],y.z=e[b+2]}function p(){const v=new S,y=new S,b=new S,T=new S,x=new te,M=new te,C=new te;for(let w=0,E=0;w0)l=s-1;else{l=s;break}if(s=l,i[s]===r)return s/(a-1);const u=i[s],h=i[s+1]-u,f=(r-u)/h;return(s+f)/(a-1)}getTangent(e,t){let s=e-1e-4,a=e+1e-4;s<0&&(s=0),a>1&&(a=1);const r=this.getPoint(s),o=this.getPoint(a),l=t||(r.isVector2?new te:new S);return l.copy(o).sub(r).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t=!1){const i=new S,s=[],a=[],r=[],o=new S,l=new Me;for(let f=0;f<=e;f++){const p=f/e;s[f]=this.getTangentAt(p,new S)}a[0]=new S,r[0]=new S;let c=Number.MAX_VALUE;const u=Math.abs(s[0].x),d=Math.abs(s[0].y),h=Math.abs(s[0].z);u<=c&&(c=u,i.set(1,0,0)),d<=c&&(c=d,i.set(0,1,0)),h<=c&&i.set(0,0,1),o.crossVectors(s[0],i).normalize(),a[0].crossVectors(s[0],o),r[0].crossVectors(s[0],a[0]);for(let f=1;f<=e;f++){if(a[f]=a[f-1].clone(),r[f]=r[f-1].clone(),o.crossVectors(s[f-1],s[f]),o.length()>Number.EPSILON){o.normalize();const p=Math.acos(Ze(s[f-1].dot(s[f]),-1,1));a[f].applyMatrix4(l.makeRotationAxis(o,p))}r[f].crossVectors(s[f],a[f])}if(t===!0){let f=Math.acos(Ze(a[0].dot(a[e]),-1,1));f/=e,s[0].dot(o.crossVectors(a[0],a[e]))>0&&(f=-f);for(let p=1;p<=e;p++)a[p].applyMatrix4(l.makeRotationAxis(s[p],f*p)),r[p].crossVectors(s[p],a[p])}return{tangents:s,normals:a,binormals:r}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class zh extends Ri{constructor(e=0,t=0,i=1,s=1,a=0,r=Math.PI*2,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=s,this.aStartAngle=a,this.aEndAngle=r,this.aClockwise=o,this.aRotation=l}getPoint(e,t=new te){const i=t,s=Math.PI*2;let a=this.aEndAngle-this.aStartAngle;const r=Math.abs(a)s;)a-=s;a0?0:(Math.floor(Math.abs(o)/a)+1)*a:l===0&&o===a-1&&(o=a-2,l=1);let c,u;this.closed||o>0?c=s[(o-1)%a]:(Yc.subVectors(s[0],s[1]).add(s[0]),c=Yc);const d=s[o%a],h=s[(o+1)%a];if(this.closed||o+2s.length-2?s.length-1:r+1],d=s[r>s.length-3?s.length-1:r+2];return i.set(qy(o,l.x,c.x,u.x,d.x),qy(o,l.y,c.y,u.y,d.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const r=s[a]-i,o=this.curves[a],l=o.getLength(),c=l===0?0:1-r/l;return o.getPointAt(c,t)}a++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,s=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const d=c.getPoint(0);d.equals(this.currentPoint)||this.lineTo(d.x,d.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class Ns extends Zd{constructor(e){super(e),this.uuid=pi(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,s=this.holes.length;i80*t){o=1/0,l=1/0;let u=-1/0,d=-1/0;for(let h=t;hu&&(u=f),p>d&&(d=p)}c=Math.max(u-o,d-l),c=c!==0?32767/c:0}return Gl(a,r,t,o,l,c,0),r}function MS(n,e,t,i,s){let a;if(s===nR(n,e,t,i)>0)for(let r=e;r=e;r-=i)a=Yy(r/i|0,n[r],n[r+1],a);return a&&Co(a,a.next)&&(Wl(a),a=a.next),a}function cr(n,e){if(!n)return n;e||(e=n);let t=n,i;do if(i=!1,!t.steiner&&(Co(t,t.next)||Kt(t.prev,t,t.next)===0)){if(Wl(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function Gl(n,e,t,i,s,a,r){if(!n)return;!r&&a&&jA(n,i,s,a);let o=n;for(;n.prev!==n.next;){const l=n.prev,c=n.next;if(a?VA(n,i,s,a):HA(n)){e.push(l.i,n.i,c.i),Wl(n),n=c.next,o=c.next;continue}if(n=c,n===o){r?r===1?(n=GA(cr(n),e),Gl(n,e,t,i,s,a,2)):r===2&&$A(n,e,t,i,s,a):Gl(cr(n),e,t,i,s,a,1);break}}}function HA(n){const e=n.prev,t=n,i=n.next;if(Kt(e,t,i)>=0)return!1;const s=e.x,a=t.x,r=i.x,o=e.y,l=t.y,c=i.y,u=Math.min(s,a,r),d=Math.min(o,l,c),h=Math.max(s,a,r),f=Math.max(o,l,c);let p=i.next;for(;p!==e;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=f&&hl(s,o,a,l,r,c,p.x,p.y)&&Kt(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function VA(n,e,t,i){const s=n.prev,a=n,r=n.next;if(Kt(s,a,r)>=0)return!1;const o=s.x,l=a.x,c=r.x,u=s.y,d=a.y,h=r.y,f=Math.min(o,l,c),p=Math.min(u,d,h),g=Math.max(o,l,c),_=Math.max(u,d,h),m=Tm(f,p,e,t,i),v=Tm(g,_,e,t,i);let y=n.prevZ,b=n.nextZ;for(;y&&y.z>=m&&b&&b.z<=v;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&hl(o,u,l,d,c,h,y.x,y.y)&&Kt(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&hl(o,u,l,d,c,h,b.x,b.y)&&Kt(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=m;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&hl(o,u,l,d,c,h,y.x,y.y)&&Kt(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&hl(o,u,l,d,c,h,b.x,b.y)&&Kt(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function GA(n,e){let t=n;do{const i=t.prev,s=t.next.next;!Co(i,s)&&CS(i,t,t.next,s)&&$l(i,s)&&$l(s,i)&&(e.push(i.i,t.i,s.i),Wl(t),Wl(t.next),t=n=s),t=t.next}while(t!==n);return cr(t)}function $A(n,e,t,i,s,a){let r=n;do{let o=r.next.next;for(;o!==r.prev;){if(r.i!==o.i&&QA(r,o)){let l=AS(r,o);r=cr(r,r.next),l=cr(l,l.next),Gl(r,e,t,i,s,a,0),Gl(l,e,t,i,s,a,0);return}o=o.next}r=r.next}while(r!==n)}function WA(n,e,t,i){const s=[];for(let a=0,r=e.length;a=t.next.y&&t.next.y!==t.y){const d=t.x+(s-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(d<=i&&d>a&&(a=d,r=t.x=t.x&&t.x>=l&&i!==t.x&&ES(sr.x||t.x===r.x&&YA(r,t)))&&(r=t,u=d)}t=t.next}while(t!==o);return r}function YA(n,e){return Kt(n.prev,n,e.prev)<0&&Kt(e.next,n,n.next)<0}function jA(n,e,t,i){let s=n;do s.z===0&&(s.z=Tm(s.x,s.y,e,t,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==n);s.prevZ.nextZ=null,s.prevZ=null,ZA(s)}function ZA(n){let e,t=1;do{let i=n,s;n=null;let a=null;for(e=0;i;){e++;let r=i,o=0;for(let c=0;c0||l>0&&r;)o!==0&&(l===0||!r||i.z<=r.z)?(s=i,i=i.nextZ,o--):(s=r,r=r.nextZ,l--),a?a.nextZ=s:n=s,s.prevZ=a,a=s;i=r}a.nextZ=null,t*=2}while(e>1);return n}function Tm(n,e,t,i,s){return n=(n-t)*s|0,e=(e-i)*s|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n|e<<1}function JA(n){let e=n,t=n;do(e.x=(n-r)*(a-o)&&(n-r)*(i-o)>=(t-r)*(e-o)&&(t-r)*(a-o)>=(s-r)*(i-o)}function hl(n,e,t,i,s,a,r,o){return!(n===r&&e===o)&&ES(n,e,t,i,s,a,r,o)}function QA(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!eR(n,e)&&($l(n,e)&&$l(e,n)&&tR(n,e)&&(Kt(n.prev,n,e.prev)||Kt(n,e.prev,e))||Co(n,e)&&Kt(n.prev,n,n.next)>0&&Kt(e.prev,e,e.next)>0)}function Kt(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function Co(n,e){return n.x===e.x&&n.y===e.y}function CS(n,e,t,i){const s=Zc(Kt(n,e,t)),a=Zc(Kt(n,e,i)),r=Zc(Kt(t,i,n)),o=Zc(Kt(t,i,e));return!!(s!==a&&r!==o||s===0&&jc(n,t,e)||a===0&&jc(n,i,e)||r===0&&jc(t,n,i)||o===0&&jc(t,e,i))}function jc(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function Zc(n){return n>0?1:n<0?-1:0}function eR(n,e){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&CS(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}function $l(n,e){return Kt(n.prev,n,n.next)<0?Kt(n,e,n.next)>=0&&Kt(n,n.prev,e)>=0:Kt(n,e,n.prev)<0||Kt(n,n.next,e)<0}function tR(n,e){let t=n,i=!1;const s=(n.x+e.x)/2,a=(n.y+e.y)/2;do t.y>a!=t.next.y>a&&t.next.y!==t.y&&s<(t.next.x-t.x)*(a-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==n);return i}function AS(n,e){const t=Mm(n.i,n.x,n.y),i=Mm(e.i,e.x,e.y),s=n.next,a=e.prev;return n.next=e,e.prev=n,t.next=s,s.prev=t,i.next=t,t.prev=i,a.next=i,i.prev=a,i}function Yy(n,e,t,i){const s=Mm(n,e,t);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function Wl(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function Mm(n,e,t){return{i:n,x:e,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function nR(n,e,t,i){let s=0;for(let a=e,r=t-i;a2&&n[e-1].equals(n[0])&&n.pop()}function Zy(n,e){for(let t=0;tNumber.EPSILON){const J=Math.sqrt(A),le=Math.sqrt(it*it+I*I),ee=j.x-$e/J,He=j.y+ge/J,ye=Y.x-I/le,Ue=Y.y+it/le,Be=((ye-ee)*I-(Ue-He)*it)/(ge*I-$e*it);Q=ee+ge*Be-G.x,_e=He+$e*Be-G.y;const de=Q*Q+_e*_e;if(de<=2)return new te(Q,_e);ce=Math.sqrt(de/2)}else{let J=!1;ge>Number.EPSILON?it>Number.EPSILON&&(J=!0):ge<-Number.EPSILON?it<-Number.EPSILON&&(J=!0):Math.sign($e)===Math.sign(I)&&(J=!0),J?(Q=-$e,_e=ge,ce=Math.sqrt(A)):(Q=ge,_e=$e,ce=Math.sqrt(A/2))}return new te(Q/ce,_e/ce)}const ne=[];for(let G=0,j=U.length,Y=j-1,Q=G+1;G=0;G--){const j=G/_,Y=f*Math.cos(j*Math.PI/2),Q=p*Math.sin(j*Math.PI/2)+g;for(let _e=0,ce=U.length;_e=0;){const Q=Y;let _e=Y-1;_e<0&&(_e=G.length-1);for(let ce=0,ge=u+_*2;ce0)&&f.push(y,b,x),(m!==i-1||l0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class Ya extends Qt{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new ue(16777215),this.specular=new ue(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ue(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ha,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new an,this.combine=nc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class IS extends Qt{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new ue(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ue(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ha,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class LS extends Qt{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ha,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class qh extends Qt{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new ue(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ue(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ha,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new an,this.combine=nc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class dg extends Qt{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=Qw,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class hg extends Qt{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class DS extends Qt{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new ue(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ha,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class kS extends Rt{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function ja(n,e){return!n||n.constructor===e?n:typeof e.BYTES_PER_ELEMENT=="number"?new e(n):Array.prototype.slice.call(n)}function OS(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function FS(n){function e(s,a){return n[s]-n[a]}const t=n.length,i=new Array(t);for(let s=0;s!==t;++s)i[s]=s;return i.sort(e),i}function Em(n,e,t){const i=n.length,s=new n.constructor(i);for(let a=0,r=0;r!==i;++a){const o=t[a]*e;for(let l=0;l!==e;++l)s[r++]=n[o+l]}return s}function fg(n,e,t,i){let s=1,a=n[0];for(;a!==void 0&&a[i]===void 0;)a=n[s++];if(a===void 0)return;let r=a[i];if(r!==void 0)if(Array.isArray(r))do r=a[i],r!==void 0&&(e.push(a.time),t.push(...r)),a=n[s++];while(a!==void 0);else if(r.toArray!==void 0)do r=a[i],r!==void 0&&(e.push(a.time),r.toArray(t,t.length)),a=n[s++];while(a!==void 0);else do r=a[i],r!==void 0&&(e.push(a.time),t.push(r)),a=n[s++];while(a!==void 0)}function oR(n,e,t,i,s=30){const a=n.clone();a.name=e;const r=[];for(let l=0;l=i)){d.push(c.times[f]);for(let g=0;ga.tracks[l].times[0]&&(o=a.tracks[l].times[0]);for(let l=0;l=o.times[p]){const m=p*d+u,v=m+d-u;g=o.values.slice(m,v)}else{const m=o.createInterpolant(),v=u,y=d-u;m.evaluate(a),g=m.resultBuffer.slice(v,y)}l==="quaternion"&&new dt().fromArray(g).normalize().conjugate().toArray(g);const _=c.times.length;for(let m=0;m<_;++m){const v=m*f+h;if(l==="quaternion")dt.multiplyQuaternionsFlat(c.values,v,g,0,c.values,v);else{const y=f-h*2;for(let b=0;b=a)){const o=t[1];e=a)break t}r=i,i=0;break n}break e}for(;i>>1;et;)--r;if(++r,a!==0||r!==s){a>=r&&(r=Math.max(r,1),a=r-1);const o=this.getValueSize();this.times=i.slice(a,r),this.values=this.values.slice(a*o,r*o)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const i=this.times,s=this.values,a=i.length;a===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let r=null;for(let o=0;o!==a;o++){const l=i[o];if(typeof l=="number"&&isNaN(l)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(r!==null&&r>l){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,l,r),e=!1;break}r=l}if(s!==void 0&&OS(s))for(let o=0,l=s.length;o!==l;++o){const c=s[o];if(isNaN(c)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,c),e=!1;break}}return e}optimize(){const e=this.times.slice(),t=this.values.slice(),i=this.getValueSize(),s=this.getInterpolation()===Vu,a=e.length-1;let r=1;for(let o=1;o0){e[r]=e[a];for(let o=a*i,l=r*i,c=0;c!==i;++c)t[l+c]=t[o+c];++r}return r!==e.length?(this.times=e.slice(0,r),this.values=t.slice(0,r*i)):(this.times=e,this.values=t),this}clone(){const e=this.times.slice(),t=this.values.slice(),i=this.constructor,s=new i(this.name,e,t);return s.createInterpolant=this.createInterpolant,s}}Pi.prototype.ValueTypeName="";Pi.prototype.TimeBufferType=Float32Array;Pi.prototype.ValueBufferType=Float32Array;Pi.prototype.DefaultInterpolation=rr;class pr extends Pi{constructor(e,t,i){super(e,t,i)}}pr.prototype.ValueTypeName="bool";pr.prototype.ValueBufferType=Array;pr.prototype.DefaultInterpolation=wo;pr.prototype.InterpolantFactoryMethodLinear=void 0;pr.prototype.InterpolantFactoryMethodSmooth=void 0;class mg extends Pi{constructor(e,t,i,s){super(e,t,i,s)}}mg.prototype.ValueTypeName="color";class ca extends Pi{constructor(e,t,i,s){super(e,t,i,s)}}ca.prototype.ValueTypeName="number";class BS extends Lo{constructor(e,t,i,s){super(e,t,i,s)}interpolate_(e,t,i,s){const a=this.resultBuffer,r=this.sampleValues,o=this.valueSize,l=(i-t)/(s-t);let c=e*o;for(let u=c+o;c!==u;c+=4)dt.slerpFlat(a,0,r,c-o,r,c,l);return a}}class _s extends Pi{constructor(e,t,i,s){super(e,t,i,s)}InterpolantFactoryMethodLinear(e){return new BS(this.times,this.values,this.getValueSize(),e)}}_s.prototype.ValueTypeName="quaternion";_s.prototype.InterpolantFactoryMethodSmooth=void 0;class mr extends Pi{constructor(e,t,i){super(e,t,i)}}mr.prototype.ValueTypeName="string";mr.prototype.ValueBufferType=Array;mr.prototype.DefaultInterpolation=wo;mr.prototype.InterpolantFactoryMethodLinear=void 0;mr.prototype.InterpolantFactoryMethodSmooth=void 0;class Hs extends Pi{constructor(e,t,i,s){super(e,t,i,s)}}Hs.prototype.ValueTypeName="vector";class ua{constructor(e="",t=-1,i=[],s=Sh){this.name=e,this.tracks=i,this.duration=t,this.blendMode=s,this.uuid=pi(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){const t=[],i=e.tracks,s=1/(e.fps||1);for(let r=0,o=i.length;r!==o;++r)t.push(dR(i[r]).scale(s));const a=new this(e.name,e.duration,t,e.blendMode);return a.uuid=e.uuid,a.userData=JSON.parse(e.userData||"{}"),a}static toJSON(e){const t=[],i=e.tracks,s={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let a=0,r=i.length;a!==r;++a)t.push(Pi.toJSON(i[a]));return s}static CreateFromMorphTargetSequence(e,t,i,s){const a=t.length,r=[];for(let o=0;o1){const d=u[1];let h=s[d];h||(s[d]=h=[]),h.push(c)}}const r=[];for(const o in s)r.push(this.CreateFromMorphTargetSequence(o,s[o],t,i));return r}static parseAnimation(e,t){if(console.warn("THREE.AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(d,h,f,p,g){if(f.length!==0){const _=[],m=[];fg(f,_,m,p),_.length!==0&&g.push(new d(h,_,m))}},s=[],a=e.name||"default",r=e.fps||30,o=e.blendMode;let l=e.length||-1;const c=e.hierarchy||[];for(let d=0;d{t&&t(a),this.manager.itemEnd(e)},0),a;if(Ts[e]!==void 0){Ts[e].push({onLoad:t,onProgress:i,onError:s});return}Ts[e]=[],Ts[e].push({onLoad:t,onProgress:i,onError:s});const r=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,l=this.responseType;fetch(r).then(c=>{if(c.status===200||c.status===0){if(c.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||c.body===void 0||c.body.getReader===void 0)return c;const u=Ts[e],d=c.body.getReader(),h=c.headers.get("X-File-Size")||c.headers.get("Content-Length"),f=h?parseInt(h):0,p=f!==0;let g=0;const _=new ReadableStream({start(m){v();function v(){d.read().then(({done:y,value:b})=>{if(y)m.close();else{g+=b.byteLength;const T=new ProgressEvent("progress",{lengthComputable:p,loaded:g,total:f});for(let x=0,M=u.length;x{m.error(y)})}}});return new Response(_)}else throw new hR(`fetch for "${c.url}" responded with ${c.status}: ${c.statusText}`,c)}).then(c=>{switch(l){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then(u=>new DOMParser().parseFromString(u,o));case"json":return c.json();default:if(o==="")return c.text();{const d=/charset="?([^;"\s]*)"?/i.exec(o),h=d&&d[1]?d[1].toLowerCase():void 0,f=new TextDecoder(h);return c.arrayBuffer().then(p=>f.decode(p))}}}).then(c=>{cs.add(`file:${e}`,c);const u=Ts[e];delete Ts[e];for(let d=0,h=u.length;d{const u=Ts[e];if(u===void 0)throw this.manager.itemError(e),c;delete Ts[e];for(let d=0,h=u.length;d{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}class fR extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Gn(this.manager);r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t=[];for(let i=0;i0:s.vertexColors=e.vertexColors),e.uniforms!==void 0)for(const a in e.uniforms){const r=e.uniforms[a];switch(s.uniforms[a]={},r.type){case"t":s.uniforms[a].value=i(r.value);break;case"c":s.uniforms[a].value=new ue().setHex(r.value);break;case"v2":s.uniforms[a].value=new te().fromArray(r.value);break;case"v3":s.uniforms[a].value=new S().fromArray(r.value);break;case"v4":s.uniforms[a].value=new qe().fromArray(r.value);break;case"m3":s.uniforms[a].value=new st().fromArray(r.value);break;case"m4":s.uniforms[a].value=new Me().fromArray(r.value);break;default:s.uniforms[a].value=r.value}}if(e.defines!==void 0&&(s.defines=e.defines),e.vertexShader!==void 0&&(s.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(s.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(s.glslVersion=e.glslVersion),e.extensions!==void 0)for(const a in e.extensions)s.extensions[a]=e.extensions[a];if(e.lights!==void 0&&(s.lights=e.lights),e.clipping!==void 0&&(s.clipping=e.clipping),e.size!==void 0&&(s.size=e.size),e.sizeAttenuation!==void 0&&(s.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(s.map=i(e.map)),e.matcap!==void 0&&(s.matcap=i(e.matcap)),e.alphaMap!==void 0&&(s.alphaMap=i(e.alphaMap)),e.bumpMap!==void 0&&(s.bumpMap=i(e.bumpMap)),e.bumpScale!==void 0&&(s.bumpScale=e.bumpScale),e.normalMap!==void 0&&(s.normalMap=i(e.normalMap)),e.normalMapType!==void 0&&(s.normalMapType=e.normalMapType),e.normalScale!==void 0){let a=e.normalScale;Array.isArray(a)===!1&&(a=[a,a]),s.normalScale=new te().fromArray(a)}return e.displacementMap!==void 0&&(s.displacementMap=i(e.displacementMap)),e.displacementScale!==void 0&&(s.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(s.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(s.roughnessMap=i(e.roughnessMap)),e.metalnessMap!==void 0&&(s.metalnessMap=i(e.metalnessMap)),e.emissiveMap!==void 0&&(s.emissiveMap=i(e.emissiveMap)),e.emissiveIntensity!==void 0&&(s.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(s.specularMap=i(e.specularMap)),e.specularIntensityMap!==void 0&&(s.specularIntensityMap=i(e.specularIntensityMap)),e.specularColorMap!==void 0&&(s.specularColorMap=i(e.specularColorMap)),e.envMap!==void 0&&(s.envMap=i(e.envMap)),e.envMapRotation!==void 0&&s.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(s.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(s.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(s.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(s.lightMap=i(e.lightMap)),e.lightMapIntensity!==void 0&&(s.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(s.aoMap=i(e.aoMap)),e.aoMapIntensity!==void 0&&(s.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(s.gradientMap=i(e.gradientMap)),e.clearcoatMap!==void 0&&(s.clearcoatMap=i(e.clearcoatMap)),e.clearcoatRoughnessMap!==void 0&&(s.clearcoatRoughnessMap=i(e.clearcoatRoughnessMap)),e.clearcoatNormalMap!==void 0&&(s.clearcoatNormalMap=i(e.clearcoatNormalMap)),e.clearcoatNormalScale!==void 0&&(s.clearcoatNormalScale=new te().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(s.iridescenceMap=i(e.iridescenceMap)),e.iridescenceThicknessMap!==void 0&&(s.iridescenceThicknessMap=i(e.iridescenceThicknessMap)),e.transmissionMap!==void 0&&(s.transmissionMap=i(e.transmissionMap)),e.thicknessMap!==void 0&&(s.thicknessMap=i(e.thicknessMap)),e.anisotropyMap!==void 0&&(s.anisotropyMap=i(e.anisotropyMap)),e.sheenColorMap!==void 0&&(s.sheenColorMap=i(e.sheenColorMap)),e.sheenRoughnessMap!==void 0&&(s.sheenRoughnessMap=i(e.sheenRoughnessMap)),s}setTextures(e){return this.textures=e,this}createMaterialFromType(e){return Zh.createMaterialFromType(e)}static createMaterialFromType(e){const t={ShadowMaterial:RS,SpriteMaterial:Ih,RawShaderMaterial:PS,ShaderMaterial:ti,PointsMaterial:sa,MeshPhysicalMaterial:ii,MeshStandardMaterial:Pn,MeshPhongMaterial:Ya,MeshToonMaterial:IS,MeshNormalMaterial:LS,MeshLambertMaterial:qh,MeshDepthMaterial:dg,MeshDistanceMaterial:hg,MeshBasicMaterial:Ye,MeshMatcapMaterial:DS,LineDashedMaterial:kS,LineBasicMaterial:Rt,Material:Qt};return new t[e]}}class Us{static extractUrlBase(e){const t=e.lastIndexOf("/");return t===-1?"./":e.slice(0,t+1)}static resolveURL(e,t){return typeof e!="string"||e===""?"":(/^https?:\/\//i.test(t)&&/^\//.test(e)&&(t=t.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(e)||/^data:.*,.*$/i.test(e)||/^blob:.*$/i.test(e)?e:t+e)}}class XS extends Ge{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){const e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}}class KS extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Gn(a.manager);r.setPath(a.path),r.setRequestHeader(a.requestHeader),r.setWithCredentials(a.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t={},i={};function s(f,p){if(t[p]!==void 0)return t[p];const _=f.interleavedBuffers[p],m=a(f,_.buffer),v=Yr(_.type,m),y=new rc(v,_.stride);return y.uuid=_.uuid,t[p]=y,y}function a(f,p){if(i[p]!==void 0)return i[p];const _=f.arrayBuffers[p],m=new Uint32Array(_).buffer;return i[p]=m,m}const r=e.isInstancedBufferGeometry?new XS:new Ge,o=e.data.index;if(o!==void 0){const f=Yr(o.type,o.array);r.setIndex(new rt(f,1))}const l=e.data.attributes;for(const f in l){const p=l[f];let g;if(p.isInterleavedBufferAttribute){const _=s(e.data,p.data);g=new la(_,p.itemSize,p.offset,p.normalized)}else{const _=Yr(p.type,p.array),m=p.isInstancedBufferAttribute?or:rt;g=new m(_,p.itemSize,p.normalized)}p.name!==void 0&&(g.name=p.name),p.usage!==void 0&&g.setUsage(p.usage),r.setAttribute(f,g)}const c=e.data.morphAttributes;if(c)for(const f in c){const p=c[f],g=[];for(let _=0,m=p.length;_0){const l=new _g(t);a=new Xl(l),a.setCrossOrigin(this.crossOrigin);for(let c=0,u=e.length;c0){s=new Xl(this.manager),s.setCrossOrigin(this.crossOrigin);for(let r=0,o=e.length;r{let _=null,m=null;return g.boundingBox!==void 0&&(_=new vn().fromJSON(g.boundingBox)),g.boundingSphere!==void 0&&(m=new bn().fromJSON(g.boundingSphere)),{...g,boundingBox:_,boundingSphere:m}}),r._instanceInfo=e.instanceInfo,r._availableInstanceIds=e._availableInstanceIds,r._availableGeometryIds=e._availableGeometryIds,r._nextIndexStart=e.nextIndexStart,r._nextVertexStart=e.nextVertexStart,r._geometryCount=e.geometryCount,r._maxInstanceCount=e.maxInstanceCount,r._maxVertexCount=e.maxVertexCount,r._maxIndexCount=e.maxIndexCount,r._geometryInitialized=e.geometryInitialized,r._matricesTexture=c(e.matricesTexture.uuid),r._indirectTexture=c(e.indirectTexture.uuid),e.colorsTexture!==void 0&&(r._colorsTexture=c(e.colorsTexture.uuid)),e.boundingSphere!==void 0&&(r.boundingSphere=new bn().fromJSON(e.boundingSphere)),e.boundingBox!==void 0&&(r.boundingBox=new vn().fromJSON(e.boundingBox));break;case"LOD":r=new yS;break;case"Line":r=new In(o(e.geometry),l(e.material));break;case"LineLoop":r=new eg(o(e.geometry),l(e.material));break;case"LineSegments":r=new Ln(o(e.geometry),l(e.material));break;case"PointCloud":case"Points":r=new ir(o(e.geometry),l(e.material));break;case"Sprite":r=new Lh(l(e.material));break;case"Group":r=new Mt;break;case"Bone":r=new Eo;break;default:r=new Qe}if(r.uuid=e.uuid,e.name!==void 0&&(r.name=e.name),e.matrix!==void 0?(r.matrix.fromArray(e.matrix),e.matrixAutoUpdate!==void 0&&(r.matrixAutoUpdate=e.matrixAutoUpdate),r.matrixAutoUpdate&&r.matrix.decompose(r.position,r.quaternion,r.scale)):(e.position!==void 0&&r.position.fromArray(e.position),e.rotation!==void 0&&r.rotation.fromArray(e.rotation),e.quaternion!==void 0&&r.quaternion.fromArray(e.quaternion),e.scale!==void 0&&r.scale.fromArray(e.scale)),e.up!==void 0&&r.up.fromArray(e.up),e.castShadow!==void 0&&(r.castShadow=e.castShadow),e.receiveShadow!==void 0&&(r.receiveShadow=e.receiveShadow),e.shadow&&(e.shadow.intensity!==void 0&&(r.shadow.intensity=e.shadow.intensity),e.shadow.bias!==void 0&&(r.shadow.bias=e.shadow.bias),e.shadow.normalBias!==void 0&&(r.shadow.normalBias=e.shadow.normalBias),e.shadow.radius!==void 0&&(r.shadow.radius=e.shadow.radius),e.shadow.mapSize!==void 0&&r.shadow.mapSize.fromArray(e.shadow.mapSize),e.shadow.camera!==void 0&&(r.shadow.camera=this.parseObject(e.shadow.camera))),e.visible!==void 0&&(r.visible=e.visible),e.frustumCulled!==void 0&&(r.frustumCulled=e.frustumCulled),e.renderOrder!==void 0&&(r.renderOrder=e.renderOrder),e.userData!==void 0&&(r.userData=e.userData),e.layers!==void 0&&(r.layers.mask=e.layers),e.children!==void 0){const h=e.children;for(let f=0;f"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"},this._abortController=new AbortController}setOptions(e){return this.options=e,this}load(e,t,i,s){e===void 0&&(e=""),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);const a=this,r=cs.get(`image-bitmap:${e}`);if(r!==void 0){if(a.manager.itemStart(e),r.then){r.then(c=>{if(Kf.has(r)===!0)s&&s(Kf.get(r)),a.manager.itemError(e),a.manager.itemEnd(e);else return t&&t(c),a.manager.itemEnd(e),c});return}return setTimeout(function(){t&&t(r),a.manager.itemEnd(e)},0),r}const o={};o.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",o.headers=this.requestHeader,o.signal=typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;const l=fetch(e,o).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(a.options,{colorSpaceConversion:"none"}))}).then(function(c){return cs.add(`image-bitmap:${e}`,c),t&&t(c),a.manager.itemEnd(e),c}).catch(function(c){s&&s(c),Kf.set(l,c),cs.remove(`image-bitmap:${e}`),a.manager.itemError(e),a.manager.itemEnd(e)});cs.add(`image-bitmap:${e}`,l),a.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}let Jc;class yg{static getContext(){return Jc===void 0&&(Jc=new(window.AudioContext||window.webkitAudioContext)),Jc}static setContext(e){Jc=e}}class xR extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Gn(this.manager);r.setResponseType("arraybuffer"),r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(l){try{const c=l.slice(0);yg.getContext().decodeAudioData(c,function(d){t(d)}).catch(o)}catch(c){o(c)}},i,s);function o(l){s?s(l):console.error(l),a.manager.itemError(e)}}}const a0=new Me,r0=new Me,Sa=new Me;class wR{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Jt,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Jt,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){const t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,Sa.copy(e.projectionMatrix);const s=t.eyeSep/2,a=s*t.near/t.focus,r=t.near*Math.tan(nr*t.fov*.5)/t.zoom;let o,l;r0.elements[12]=-s,a0.elements[12]=s,o=-r*t.aspect+a,l=r*t.aspect+a,Sa.elements[0]=2*t.near/(l-o),Sa.elements[8]=(l+o)/(l-o),this.cameraL.projectionMatrix.copy(Sa),o=-r*t.aspect-a,l=r*t.aspect-a,Sa.elements[0]=2*t.near/(l-o),Sa.elements[8]=(l+o)/(l-o),this.cameraR.projectionMatrix.copy(Sa)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(r0),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(a0)}}class YS extends Jt{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}}class vg{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const t=performance.now();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}const Ta=new S,qf=new dt,SR=new S,Ma=new S,Ea=new S;class TR extends Qe{constructor(){super(),this.type="AudioListener",this.context=yg.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new vg}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return this.filter!==null?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);const t=this.context.listener;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(Ta,qf,SR),Ma.set(0,0,-1).applyQuaternion(qf),Ea.set(0,1,0).applyQuaternion(qf),t.positionX){const i=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(Ta.x,i),t.positionY.linearRampToValueAtTime(Ta.y,i),t.positionZ.linearRampToValueAtTime(Ta.z,i),t.forwardX.linearRampToValueAtTime(Ma.x,i),t.forwardY.linearRampToValueAtTime(Ma.y,i),t.forwardZ.linearRampToValueAtTime(Ma.z,i),t.upX.linearRampToValueAtTime(Ea.x,i),t.upY.linearRampToValueAtTime(Ea.y,i),t.upZ.linearRampToValueAtTime(Ea.z,i)}else t.setPosition(Ta.x,Ta.y,Ta.z),t.setOrientation(Ma.x,Ma.y,Ma.z,Ea.x,Ea.y,Ea.z)}}class jS extends Qe{constructor(e){super(),this.type="Audio",this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType="buffer",this.autoplay&&this.play(),this}play(e=0){if(this.isPlaying===!0){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}this._startedAt=this.context.currentTime+e;const t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(e=0){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this._progress=0,this.source!==null&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(i,s,this._addIndex*t,1,t);for(let l=t,c=t+t;l!==c;++l)if(i[l]!==i[l+t]){o.setValue(i,s);break}}saveOriginalState(){const e=this.binding,t=this.buffer,i=this.valueSize,s=i*this._origIndex;e.getValue(t,s);for(let a=i,r=s;a!==r;++a)t[a]=t[s+a%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){const e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let r=0;r!==a;++r)e[t+r]=e[i+r]}_slerp(e,t,i,s){dt.slerpFlat(e,t,e,t,e,i,s)}_slerpAdditive(e,t,i,s,a){const r=this._workIndex*a;dt.multiplyQuaternionsFlat(e,r,e,t,e,i),dt.slerpFlat(e,t,e,t,e,r,s)}_lerp(e,t,i,s,a){const r=1-s;for(let o=0;o!==a;++o){const l=t+o;e[l]=e[l]*r+e[i+o]*s}}_lerpAdditive(e,t,i,s,a){for(let r=0;r!==a;++r){const o=t+r;e[o]=e[o]+e[i+r]*s}}}const bg="\\[\\]\\.:\\/",AR=new RegExp("["+bg+"]","g"),xg="[^"+bg+"]",RR="[^"+bg.replace("\\.","")+"]",PR=/((?:WC+[\/:])*)/.source.replace("WC",xg),IR=/(WCOD+)?/.source.replace("WCOD",RR),LR=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",xg),DR=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",xg),kR=new RegExp("^"+PR+IR+LR+DR+"$"),OR=["material","materials","bones","map"];class FR{constructor(e,t,i){const s=i||yt.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,s)}getValue(e,t){this.bind();const i=this._targetGroup.nCachedObjects_,s=this._bindings[i];s!==void 0&&s.getValue(e,t)}setValue(e,t){const i=this._bindings;for(let s=this._targetGroup.nCachedObjects_,a=i.length;s!==a;++s)i[s].setValue(e,t)}bind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}}class yt{constructor(e,t,i){this.path=t,this.parsedPath=i||yt.parseTrackName(t),this.node=yt.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new yt.Composite(e,t,i):new yt(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(AR,"")}static parseTrackName(e){const t=kR.exec(e);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+e);const i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(s!==void 0&&s!==-1){const a=i.nodeName.substring(s+1);OR.indexOf(a)!==-1&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=a)}if(i.propertyName===null||i.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){const i=e.skeleton.getBoneByName(t);if(i!==void 0)return i}if(e.children){const i=function(a){for(let r=0;r=a){const d=a++,h=e[d];t[h.uuid]=u,e[u]=h,t[c]=d,e[d]=l;for(let f=0,p=s;f!==p;++f){const g=i[f],_=g[d],m=g[u];g[u]=_,g[d]=m}}}this.nCachedObjects_=a}uncache(){const e=this._objects,t=this._indicesByUUID,i=this._bindings,s=i.length;let a=this.nCachedObjects_,r=e.length;for(let o=0,l=arguments.length;o!==l;++o){const c=arguments[o],u=c.uuid,d=t[u];if(d!==void 0)if(delete t[u],d0&&(t[f.uuid]=d),e[d]=f,e.pop();for(let p=0,g=s;p!==g;++p){const _=i[p];_[d]=_[h],_.pop()}}}this.nCachedObjects_=a}subscribe_(e,t){const i=this._bindingsIndicesByPath;let s=i[e];const a=this._bindings;if(s!==void 0)return a[s];const r=this._paths,o=this._parsedPaths,l=this._objects,c=l.length,u=this.nCachedObjects_,d=new Array(c);s=a.length,i[e]=s,r.push(e),o.push(t),a.push(d);for(let h=u,f=l.length;h!==f;++h){const p=l[h];d[h]=new yt(p,e,t)}return d}unsubscribe_(e){const t=this._bindingsIndicesByPath,i=t[e];if(i!==void 0){const s=this._paths,a=this._parsedPaths,r=this._bindings,o=r.length-1,l=r[o],c=e[o];t[c]=i,r[i]=l,r.pop(),a[i]=a[o],a.pop(),s[i]=s[o],s.pop()}}}class JS{constructor(e,t,i=null,s=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=s;const a=t.tracks,r=a.length,o=new Array(r),l={endingStart:Ka,endingEnd:Ka};for(let c=0;c!==r;++c){const u=a[c].createInterpolant(null);o[c]=u,u.settings=l}this._interpolantSettings=l,this._interpolants=o,this._propertyBindings=new Array(r),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=jw,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i=!1){if(e.fadeOut(t),this.fadeIn(t),i===!0){const s=this._clip.duration,a=e._clip.duration,r=a/s,o=s/a;e.warp(1,r,t),this.warp(o,1,t)}return this}crossFadeTo(e,t,i=!1){return e.crossFadeFrom(this,t,i)}stopFading(){const e=this._weightInterpolant;return e!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){const s=this._mixer,a=s.time,r=this.timeScale;let o=this._timeScaleInterpolant;o===null&&(o=s._lendControlInterpolant(),this._timeScaleInterpolant=o);const l=o.parameterPositions,c=o.sampleValues;return l[0]=a,l[1]=a+i,c[0]=e/r,c[1]=t/r,this}stopWarping(){const e=this._timeScaleInterpolant;return e!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,s){if(!this.enabled){this._updateWeight(e);return}const a=this._startTime;if(a!==null){const l=(e-a)*i;l<0||i===0?t=0:(this._startTime=null,t=i*l)}t*=this._updateTimeScale(e);const r=this._updateTime(t),o=this._updateWeight(e);if(o>0){const l=this._interpolants,c=this._propertyBindings;switch(this.blendMode){case q_:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulateAdditive(o);break;case Sh:default:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulate(s,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;const i=this._weightInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopFading(),s===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;const i=this._timeScaleInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){const t=this._clip.duration,i=this.loop;let s=this.time+e,a=this._loopCount;const r=i===Zw;if(e===0)return a===-1?s:r&&(a&1)===1?t-s:s;if(i===Xd){a===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(a===-1&&(e>=0?(a=0,this._setEndings(!0,this.repetitions===0,r)):this._setEndings(this.repetitions===0,!0,r)),s>=t||s<0){const o=Math.floor(s/t);s-=t*o,a+=Math.abs(o);const l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=e>0?t:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(l===1){const c=e<0;this._setEndings(c,!c,r)}else this._setEndings(!1,!1,r);this._loopCount=a,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this.time=s;if(r&&(a&1)===1)return t-s}return s}_setEndings(e,t,i){const s=this._interpolantSettings;i?(s.endingStart=qa,s.endingEnd=qa):(e?s.endingStart=this.zeroSlopeAtStart?qa:Ka:s.endingStart=Ul,t?s.endingEnd=this.zeroSlopeAtEnd?qa:Ka:s.endingEnd=Ul)}_scheduleFading(e,t,i){const s=this._mixer,a=s.time;let r=this._weightInterpolant;r===null&&(r=s._lendControlInterpolant(),this._weightInterpolant=r);const o=r.parameterPositions,l=r.sampleValues;return o[0]=a,l[0]=t,o[1]=a+e,l[1]=i,this}}const UR=new Float32Array(1);class QS extends gs{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){const i=e._localRoot||this._root,s=e._clip.tracks,a=s.length,r=e._propertyBindings,o=e._interpolants,l=i.uuid,c=this._bindingsByRootAndName;let u=c[l];u===void 0&&(u={},c[l]=u);for(let d=0;d!==a;++d){const h=s[d],f=h.name;let p=u[f];if(p!==void 0)++p.referenceCount,r[d]=p;else{if(p=r[d],p!==void 0){p._cacheIndex===null&&(++p.referenceCount,this._addInactiveBinding(p,l,f));continue}const g=t&&t._propertyBindings[d].binding.parsedPath;p=new ZS(yt.create(i,f,g),h.ValueTypeName,h.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,l,f),r[d]=p}o[d].resultBuffer=p.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){const i=(e._localRoot||this._root).uuid,s=e._clip.uuid,a=this._actionsByClip[s];this._bindAction(e,a&&a.knownActions[0]),this._addInactiveAction(e,s,i)}const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];a.useCount++===0&&(this._lendBinding(a),a.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];--a.useCount===0&&(a.restoreOriginalState(),this._takeBackBinding(a))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){const t=e._cacheIndex;return t!==null&&t=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;const t=this._actions,i=this._nActiveActions,s=this.time+=e,a=Math.sign(e),r=this._accuIndex^=1;for(let c=0;c!==i;++c)t[c]._update(s,e,a,r);const o=this._bindings,l=this._nActiveBindings;for(let c=0;c!==l;++c)o[c].apply(r);return this}setTime(e){this.time=0;for(let t=0;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,u0).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const d0=new S,Qc=new S,Fr=new S,Nr=new S,Yf=new S,YR=new S,jR=new S;class ZR{constructor(e=new S,t=new S){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){d0.subVectors(e,this.start),Qc.subVectors(this.end,this.start);const i=Qc.dot(Qc);let a=Qc.dot(d0)/i;return t&&(a=Ze(a,0,1)),a}closestPointToPoint(e,t,i){const s=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(s).add(this.start)}distanceSqToLine3(e,t=YR,i=jR){const s=10000000000000001e-32;let a,r;const o=this.start,l=e.start,c=this.end,u=e.end;Fr.subVectors(c,o),Nr.subVectors(u,l),Yf.subVectors(o,l);const d=Fr.dot(Fr),h=Nr.dot(Nr),f=Nr.dot(Yf);if(d<=s&&h<=s)return t.copy(o),i.copy(l),t.sub(i),t.dot(t);if(d<=s)a=0,r=f/h,r=Ze(r,0,1);else{const p=Fr.dot(Yf);if(h<=s)r=0,a=Ze(-p/d,0,1);else{const g=Fr.dot(Nr),_=d*h-g*g;_!==0?a=Ze((g*f-p*h)/_,0,1):a=0,r=(g*a+f)/h,r<0?(r=0,a=Ze(-p/d,0,1)):r>1&&(r=1,a=Ze((g-p)/d,0,1))}}return t.copy(o).add(Fr.multiplyScalar(a)),i.copy(l).add(Nr.multiplyScalar(r)),t.sub(i),t.dot(t)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}const h0=new S;class JR extends Qe{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const i=new Ge,s=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let r=0,o=1,l=32;r1)for(let d=0;d.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{g0.set(e.z,0,-e.x).normalize();const t=Math.acos(e.y);this.quaternion.setFromAxisAngle(g0,t)}}setLength(e,t=e*.2,i=t*.2){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(i,t,i),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class uP extends Ln{constructor(e=1){const t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],i=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],s=new Ge;s.setAttribute("position",new Ee(t,3)),s.setAttribute("color",new Ee(i,3));const a=new Rt({vertexColors:!0,toneMapped:!1});super(s,a),this.type="AxesHelper"}setColors(e,t,i){const s=new ue,a=this.geometry.attributes.color.array;return s.set(e),s.toArray(a,0),s.toArray(a,3),s.set(t),s.toArray(a,6),s.toArray(a,9),s.set(i),s.toArray(a,12),s.toArray(a,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class dP{constructor(){this.type="ShapePath",this.color=new ue,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new Zd,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,i,s){return this.currentPath.quadraticCurveTo(e,t,i,s),this}bezierCurveTo(e,t,i,s,a,r){return this.currentPath.bezierCurveTo(e,t,i,s,a,r),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){function t(m){const v=[];for(let y=0,b=m.length;yNumber.EPSILON){if(E<0&&(M=v[x],w=-w,C=v[T],E=-E),m.yC.y)continue;if(m.y===M.y){if(m.x===M.x)return!0}else{const R=E*(m.x-M.x)-w*(m.y-M.y);if(R===0)return!0;if(R<0)continue;b=!b}}else{if(m.y!==M.y)continue;if(C.x<=m.x&&m.x<=M.x||M.x<=m.x&&m.x<=C.x)return!0}}return b}const s=Mi.isClockWise,a=this.subPaths;if(a.length===0)return[];let r,o,l;const c=[];if(a.length===1)return o=a[0],l=new Ns,l.curves=o.curves,c.push(l),c;let u=!s(a[0].getPoints());u=e?!u:u;const d=[],h=[];let f=[],p=0,g;h[p]=void 0,f[p]=[];for(let m=0,v=a.length;m1){let m=!1,v=0;for(let y=0,b=h.length;y0&&m===!1&&(f=d)}let _;for(let m=0,v=h.length;me?(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2):(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0),n}function fP(n,e){const t=n.image&&n.image.width?n.image.width/n.image.height:1;return t>e?(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0):(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2),n}function pP(n){return n.repeat.x=1,n.repeat.y=1,n.offset.x=0,n.offset.y=0,n}function Rm(n,e,t,i){const s=mP(i);switch(t){case W_:return n*e;case bh:return n*e/s.components*s.byteLength;case ic:return n*e/s.components*s.byteLength;case K_:return n*e*2/s.components*s.byteLength;case xh:return n*e*2/s.components*s.byteLength;case X_:return n*e*3/s.components*s.byteLength;case Vn:return n*e*4/s.components*s.byteLength;case wh:return n*e*4/s.components*s.byteLength;case Tl:case Ml:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case El:case Cl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case vd:case xd:return Math.max(n,16)*Math.max(e,8)/4;case yd:case bd:return Math.max(n,8)*Math.max(e,8)/2;case wd:case Sd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Td:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Md:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Ed:return Math.floor((n+4)/5)*Math.floor((e+3)/4)*16;case Cd:return Math.floor((n+4)/5)*Math.floor((e+4)/5)*16;case Ad:return Math.floor((n+5)/6)*Math.floor((e+4)/5)*16;case Rd:return Math.floor((n+5)/6)*Math.floor((e+5)/6)*16;case Pd:return Math.floor((n+7)/8)*Math.floor((e+4)/5)*16;case Id:return Math.floor((n+7)/8)*Math.floor((e+5)/6)*16;case Ld:return Math.floor((n+7)/8)*Math.floor((e+7)/8)*16;case Dd:return Math.floor((n+9)/10)*Math.floor((e+4)/5)*16;case kd:return Math.floor((n+9)/10)*Math.floor((e+5)/6)*16;case Od:return Math.floor((n+9)/10)*Math.floor((e+7)/8)*16;case Fd:return Math.floor((n+9)/10)*Math.floor((e+9)/10)*16;case Nd:return Math.floor((n+11)/12)*Math.floor((e+9)/10)*16;case Ud:return Math.floor((n+11)/12)*Math.floor((e+11)/12)*16;case Bd:case zd:case Hd:return Math.ceil(n/4)*Math.ceil(e/4)*16;case Vd:case Gd:return Math.ceil(n/4)*Math.ceil(e/4)*8;case $d:case Wd:return Math.ceil(n/4)*Math.ceil(e/4)*16}throw new Error(`Unable to determine texture byte length for ${t} format.`)}function mP(n){switch(n){case Yi:case H_:return{byteLength:1,components:1};case yo:case V_:case ls:return{byteLength:2,components:1};case yh:case vh:return{byteLength:2,components:4};case zs:case gh:case Sn:return{byteLength:4,components:1};case G_:case $_:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${n}.`)}class _P{static contain(e,t){return hP(e,t)}static cover(e,t){return fP(e,t)}static fill(e){return pP(e)}static getByteLength(e,t,i,s){return Rm(e,t,i,s)}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:ph}}));typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=ph);function nT(){let n=null,e=!1,t=null,i=null;function s(a,r){t(a,r),i=n.requestAnimationFrame(s)}return{start:function(){e!==!0&&t!==null&&(i=n.requestAnimationFrame(s),e=!0)},stop:function(){n.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(a){t=a},setContext:function(a){n=a}}}function gP(n){const e=new WeakMap;function t(o,l){const c=o.array,u=o.usage,d=c.byteLength,h=n.createBuffer();n.bindBuffer(l,h),n.bufferData(l,c,u),o.onUploadCallback();let f;if(c instanceof Float32Array)f=n.FLOAT;else if(typeof Float16Array<"u"&&c instanceof Float16Array)f=n.HALF_FLOAT;else if(c instanceof Uint16Array)o.isFloat16BufferAttribute?f=n.HALF_FLOAT:f=n.UNSIGNED_SHORT;else if(c instanceof Int16Array)f=n.SHORT;else if(c instanceof Uint32Array)f=n.UNSIGNED_INT;else if(c instanceof Int32Array)f=n.INT;else if(c instanceof Int8Array)f=n.BYTE;else if(c instanceof Uint8Array)f=n.UNSIGNED_BYTE;else if(c instanceof Uint8ClampedArray)f=n.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+c);return{buffer:h,type:f,bytesPerElement:c.BYTES_PER_ELEMENT,version:o.version,size:d}}function i(o,l,c){const u=l.array,d=l.updateRanges;if(n.bindBuffer(c,o),d.length===0)n.bufferSubData(c,0,u);else{d.sort((f,p)=>f.start-p.start);let h=0;for(let f=1;ff+p?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&h<=f-p&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(a=t.getPose(e.gripSpace,i),a!==null&&(l.matrix.fromArray(a.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,a.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(a.linearVelocity)):l.hasLinearVelocity=!1,a.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(a.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(s=t.getPose(e.targetRaySpace,i),s===null&&a!==null&&(s=a),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(EA)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=a!==null),c!==null&&(c.visible=r!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){const i=new Mt;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}}class Oh{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new ue(e),this.density=t}clone(){return new Oh(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class Fh{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new ue(e),this.near=t,this.far=i}clone(){return new Fh(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class cc extends Qe{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new an,this.environmentIntensity=1,this.environmentRotation=new an,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class uc{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=$l,this.updateRanges=[],this.version=0,this.uuid=pi()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let s=0,a=this.stride;se.far||t.push({distance:l,point:Ko.clone(),uv:Qn.getInterpolation(Ko,Nc,Yo,Uc,Fy,zf,Ny,new te),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}}function Bc(n,e,t,i,s,a){Dr.subVectors(n,t).addScalar(.5).multiply(i),s!==void 0?(qo.x=a*Dr.x-s*Dr.y,qo.y=s*Dr.x+a*Dr.y):qo.copy(Dr),n.copy(e),n.x+=qo.x,n.y+=qo.y,n.applyMatrix4(MS)}const zc=new S,Uy=new S;class ES extends Qe{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);const t=e.levels;for(let i=0,s=t.length;i0){let i,s;for(i=1,s=t.length;i0){zc.setFromMatrixPosition(this.matrixWorld);const s=e.ray.origin.distanceTo(zc);this.getObjectForDistance(s).raycast(e,t)}}update(e){const t=this.levels;if(t.length>1){zc.setFromMatrixPosition(e.matrixWorld),Uy.setFromMatrixPosition(this.matrixWorld);const i=zc.distanceTo(Uy)/e.zoom;t[0].object.visible=!0;let s,a;for(s=1,a=t.length;s=r)t[s-1].object.visible=!1,t[s].object.visible=!0;else break}for(this._currentLevel=s-1;s1?null:t.copy(e.start).addScaledVector(i,a)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||IA.getNormalMatrix(e),s=this.coplanarPoint(Gf).applyMatrix4(e),a=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(a),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const xa=new bn,LA=new te(.5,.5),Gc=new S;class ko{constructor(e=new Ps,t=new Ps,i=new Ps,s=new Ps,a=new Ps,r=new Ps){this.planes=[e,t,i,s,a,r]}set(e,t,i,s,a,r){const o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(s),o[4].copy(a),o[5].copy(r),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=hi,i=!1){const s=this.planes,a=e.elements,r=a[0],o=a[1],l=a[2],c=a[3],u=a[4],d=a[5],h=a[6],f=a[7],p=a[8],g=a[9],_=a[10],m=a[11],v=a[12],y=a[13],b=a[14],T=a[15];if(s[0].setComponents(c-r,f-u,m-p,T-v).normalize(),s[1].setComponents(c+r,f+u,m+p,T+v).normalize(),s[2].setComponents(c+o,f+d,m+g,T+y).normalize(),s[3].setComponents(c-o,f-d,m-g,T-y).normalize(),i)s[4].setComponents(l,h,_,b).normalize(),s[5].setComponents(c-l,f-h,m-_,T-b).normalize();else if(s[4].setComponents(c-l,f-h,m-_,T-b).normalize(),t===hi)s[5].setComponents(c+l,f+h,m+_,T+b).normalize();else if(t===Eo)s[5].setComponents(l,h,_,b).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),xa.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),xa.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(xa)}intersectsSprite(e){xa.center.set(0,0,0);const t=LA.distanceTo(e.center);return xa.radius=.7071067811865476+t,xa.applyMatrix4(e.matrixWorld),this.intersectsSphere(xa)}intersectsSphere(e){const t=this.planes,i=e.center,s=-e.radius;for(let a=0;a<6;a++)if(t[a].distanceToPoint(i)0?e.max.x:e.min.x,Gc.y=s.normal.y>0?e.max.y:e.min.y,Gc.z=s.normal.z>0?e.max.z:e.min.z,s.distanceToPoint(Gc)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}const Qi=new Me,es=new ko;class Hh{constructor(){this.coordinateSystem=hi}intersectsObject(e,t){if(!t.isArrayCamera||t.cameras.length===0)return!1;for(let i=0;i=a.length&&a.push({start:-1,count:-1,z:-1,index:-1});const o=a[this.index];r.push(o),this.index++,o.start=e,o.count=t,o.z=i,o.index=s}reset(){this.list.length=0,this.index=0}}const Wn=new Me,FA=new ue(1,1,1),Ky=new ko,NA=new Hh,$c=new vn,wa=new bn,Jo=new S,qy=new S,UA=new S,Wf=new OA,Cn=new we,Wc=[];function BA(n,e,t=0){const i=e.itemSize;if(n.isInterleavedBufferAttribute||n.array.constructor!==e.array.constructor){const s=n.count;for(let a=0;a65535?new Uint32Array(s):new Uint16Array(s);t.setIndex(new ot(a,1))}this._geometryInitialized=!0}}_validateGeometry(e){const t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw new Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(const i in t.attributes){if(!e.hasAttribute(i))throw new Error(`THREE.BatchedMesh: Added geometry missing "${i}". All geometries must have consistent attributes.`);const s=e.getAttribute(i),a=t.getAttribute(i);if(s.itemSize!==a.itemSize||s.normalized!==a.normalized)throw new Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(e){const t=this._instanceInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid instanceId ${e}. Instance is either out of range or has been deleted.`)}validateGeometryId(e){const t=this._geometryInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid geometryId ${e}. Geometry is either out of range or has been deleted.`)}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new vn);const e=this.boundingBox,t=this._instanceInfo;e.makeEmpty();for(let i=0,s=t.length;i=this.maxInstanceCount&&this._availableInstanceIds.length===0)throw new Error("THREE.BatchedMesh: Maximum item count reached.");const i={visible:!0,active:!0,geometryIndex:e};let s=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort($f),s=this._availableInstanceIds.shift(),this._instanceInfo[s]=i):(s=this._instanceInfo.length,this._instanceInfo.push(i));const a=this._matricesTexture;Wn.identity().toArray(a.image.data,s*16),a.needsUpdate=!0;const r=this._colorsTexture;return r&&(FA.toArray(r.image.data,s*4),r.needsUpdate=!0),this._visibilityChanged=!0,s}addGeometry(e,t=-1,i=-1){this._initializeGeometry(e),this._validateGeometry(e);const s={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},a=this._geometryInfo;s.vertexStart=this._nextVertexStart,s.reservedVertexCount=t===-1?e.getAttribute("position").count:t;const r=e.getIndex();if(r!==null&&(s.indexStart=this._nextIndexStart,s.reservedIndexCount=i===-1?r.count:i),s.indexStart!==-1&&s.indexStart+s.reservedIndexCount>this._maxIndexCount||s.vertexStart+s.reservedVertexCount>this._maxVertexCount)throw new Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");let l;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort($f),l=this._availableGeometryIds.shift(),a[l]=s):(l=this._geometryCount,this._geometryCount++,a.push(s)),this.setGeometryAt(l,e),this._nextIndexStart=s.indexStart+s.reservedIndexCount,this._nextVertexStart=s.vertexStart+s.reservedVertexCount,l}setGeometryAt(e,t){if(e>=this._geometryCount)throw new Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(t);const i=this.geometry,s=i.getIndex()!==null,a=i.getIndex(),r=t.getIndex(),o=this._geometryInfo[e];if(s&&r.count>o.reservedIndexCount||t.attributes.position.count>o.reservedVertexCount)throw new Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");const l=o.vertexStart,c=o.reservedVertexCount;o.vertexCount=t.getAttribute("position").count;for(const u in i.attributes){const d=t.getAttribute(u),h=i.getAttribute(u);BA(d,h,l);const f=d.itemSize;for(let p=d.count,g=c;p=t.length||t[e].active===!1)return this;const i=this._instanceInfo;for(let s=0,a=i.length;so).sort((r,o)=>i[r].vertexStart-i[o].vertexStart),a=this.geometry;for(let r=0,o=i.length;r=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingBox===null){const a=new vn,r=i.index,o=i.attributes.position;for(let l=s.start,c=s.start+s.count;l=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingSphere===null){const a=new bn;this.getBoundingBoxAt(e,$c),$c.getCenter(a.center);const r=i.index,o=i.attributes.position;let l=0;for(let c=s.start,u=s.start+s.count;co.active);if(Math.max(...i.map(o=>o.vertexStart+o.reservedVertexCount))>e)throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${t}. Cannot shrink further.`);if(this.geometry.index&&Math.max(...i.map(l=>l.indexStart+l.reservedIndexCount))>t)throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${t}. Cannot shrink further.`);const a=this.geometry;a.dispose(),this._maxVertexCount=e,this._maxIndexCount=t,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new Ge,this._initializeGeometry(a));const r=this.geometry;a.index&&Sa(a.index.array,r.index.array);for(const o in a.attributes)Sa(a.attributes[o].array,r.attributes[o].array)}raycast(e,t){const i=this._instanceInfo,s=this._geometryInfo,a=this.matrixWorld,r=this.geometry;Cn.material=this.material,Cn.geometry.index=r.index,Cn.geometry.attributes=r.attributes,Cn.geometry.boundingBox===null&&(Cn.geometry.boundingBox=new vn),Cn.geometry.boundingSphere===null&&(Cn.geometry.boundingSphere=new bn);for(let o=0,l=i.length;o({...t,boundingBox:t.boundingBox!==null?t.boundingBox.clone():null,boundingSphere:t.boundingSphere!==null?t.boundingSphere.clone():null})),this._instanceInfo=e._instanceInfo.map(t=>({...t})),this._availableInstanceIds=e._availableInstanceIds.slice(),this._availableGeometryIds=e._availableGeometryIds.slice(),this._nextIndexStart=e._nextIndexStart,this._nextVertexStart=e._nextVertexStart,this._geometryCount=e._geometryCount,this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._indirectTexture=e._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),this._colorsTexture!==null&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,this._colorsTexture!==null&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(e,t,i,s,a){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const r=s.getIndex(),o=r===null?1:r.array.BYTES_PER_ELEMENT,l=this._instanceInfo,c=this._multiDrawStarts,u=this._multiDrawCounts,d=this._geometryInfo,h=this.perObjectFrustumCulled,f=this._indirectTexture,p=f.image.data,g=i.isArrayCamera?NA:Ky;h&&!i.isArrayCamera&&(Wn.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse).multiply(this.matrixWorld),Ky.setFromProjectionMatrix(Wn,i.coordinateSystem,i.reversedDepth));let _=0;if(this.sortObjects){Wn.copy(this.matrixWorld).invert(),Jo.setFromMatrixPosition(i.matrixWorld).applyMatrix4(Wn),qy.set(0,0,-1).transformDirection(i.matrixWorld).transformDirection(Wn);for(let y=0,b=l.length;y0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;ai)return;Xf.applyMatrix4(n.matrixWorld);const c=e.ray.origin.distanceTo(Xf);if(!(ce.far))return{distance:c,point:jy.clone().applyMatrix4(n.matrixWorld),index:r,face:null,faceIndex:null,barycoord:null,object:n}}const Zy=new S,Jy=new S;class Ln extends In{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[];for(let s=0,a=t.count;s0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;as.far)return;a.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:e,face:null,faceIndex:null,barycoord:null,object:r})}}class AS extends Bt{constructor(e,t,i,s,a=Vt,r=Vt,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;const u=this;function d(){u.needsUpdate=!0,u._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d)}"requestVideoFrameCallback"in e&&(this._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d))}clone(){return new this.constructor(this.image).copy(this)}update(){const e=this.image;"requestVideoFrameCallback"in e===!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){this._requestVideoFrameCallbackId!==0&&this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),super.dispose()}}class zA extends AS{constructor(e,t,i,s,a,r,o,l){super({},e,t,i,s,a,r,o,l),this.isVideoFrameTexture=!0}update(){}clone(){return new this.constructor().copy(this)}setFrame(e){this.image=e,this.needsUpdate=!0}}class HA extends Bt{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=dn,this.minFilter=dn,this.generateMipmaps=!1,this.needsUpdate=!0}}class Vh extends Bt{constructor(e,t,i,s,a,r,o,l,c,u,d,h){super(null,r,o,l,c,u,s,a,d,h),this.isCompressedTexture=!0,this.image={width:t,height:i},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class VA extends Vh{constructor(e,t,i,s,a,r){super(e,t,i,a,r),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=Hn,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}}class GA extends Vh{constructor(e,t,i){super(void 0,e[0].width,e[0].height,t,i,Bs),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}}class dc extends Bt{constructor(e,t,i,s,a,r,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class lg extends Bt{constructor(e,t,i=zs,s,a,r,o=dn,l=dn,c,u=So,d=1){if(u!==So&&u!==To)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const h={width:e,height:t,depth:d};super(h,s,a,r,o,l,u,i,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new sa(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){const t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}}class cg extends Bt{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}}class Gh extends Ge{constructor(e=1,t=1,i=4,s=8,a=1){super(),this.type="CapsuleGeometry",this.parameters={radius:e,height:t,capSegments:i,radialSegments:s,heightSegments:a},t=Math.max(0,t),i=Math.max(1,Math.floor(i)),s=Math.max(3,Math.floor(s)),a=Math.max(1,Math.floor(a));const r=[],o=[],l=[],c=[],u=t/2,d=Math.PI/2*e,h=t,f=2*d+h,p=i*2+a,g=s+1,_=new S,m=new S;for(let v=0;v<=p;v++){let y=0,b=0,T=0,x=0;if(v<=i){const w=v/i,E=w*Math.PI/2;b=-u-e*Math.cos(E),T=e*Math.sin(E),x=-e*Math.cos(E),y=w*d}else if(v<=i+a){const w=(v-i)/a;b=-u+w*t,T=e,x=0,y=d+w*h}else{const w=(v-i-a)/i,E=w*Math.PI/2;b=u+e*Math.sin(E),T=e*Math.cos(E),x=e*Math.sin(E),y=d+h+w*d}const M=Math.max(0,Math.min(1,y/f));let C=0;v===0?C=.5/s:v===p&&(C=-.5/s);for(let w=0;w<=s;w++){const E=w/s,R=E*Math.PI*2,k=Math.sin(R),O=Math.cos(R);m.x=-T*O,m.y=b,m.z=T*k,o.push(m.x,m.y,m.z),_.set(-T*O,x,T*k),_.normalize(),l.push(_.x,_.y,_.z),c.push(E+C,M)}if(v>0){const w=(v-1)*g;for(let E=0;E0&&y(!0),t>0&&y(!1)),this.setIndex(u),this.setAttribute("position",new Ee(d,3)),this.setAttribute("normal",new Ee(h,3)),this.setAttribute("uv",new Ee(f,2));function v(){const b=new S,T=new S;let x=0;const M=(t-e)/i;for(let C=0;C<=a;C++){const w=[],E=C/a,R=E*(t-e)+e;for(let k=0;k<=s;k++){const O=k/s,D=O*l+o,U=Math.sin(D),F=Math.cos(D);T.x=R*U,T.y=-E*i+_,T.z=R*F,d.push(T.x,T.y,T.z),b.set(U,M,F).normalize(),h.push(b.x,b.y,b.z),f.push(O,1-E),w.push(p++)}g.push(w)}for(let C=0;C0||w!==0)&&(u.push(E,R,O),x+=3),(t>0||w!==a-1)&&(u.push(R,k,O),x+=3)}c.addGroup(m,x,0),m+=x}function y(b){const T=p,x=new te,M=new S;let C=0;const w=b===!0?e:t,E=b===!0?1:-1;for(let k=1;k<=s;k++)d.push(0,_*E,0),h.push(0,E,0),f.push(.5,.5),p++;const R=p;for(let k=0;k<=s;k++){const D=k/s*l+o,U=Math.cos(D),F=Math.sin(D);M.x=w*F,M.y=_*E,M.z=w*U,d.push(M.x,M.y,M.z),h.push(0,E,0),x.x=U*.5+.5,x.y=F*.5*E+.5,f.push(x.x,x.y),p++}for(let k=0;k.9&&M<.1&&(y<.2&&(r[v+0]+=1),b<.2&&(r[v+2]+=1),T<.2&&(r[v+4]+=1))}}function h(v){a.push(v.x,v.y,v.z)}function f(v,y){const b=v*3;y.x=e[b+0],y.y=e[b+1],y.z=e[b+2]}function p(){const v=new S,y=new S,b=new S,T=new S,x=new te,M=new te,C=new te;for(let w=0,E=0;w0)l=s-1;else{l=s;break}if(s=l,i[s]===r)return s/(a-1);const u=i[s],h=i[s+1]-u,f=(r-u)/h;return(s+f)/(a-1)}getTangent(e,t){let s=e-1e-4,a=e+1e-4;s<0&&(s=0),a>1&&(a=1);const r=this.getPoint(s),o=this.getPoint(a),l=t||(r.isVector2?new te:new S);return l.copy(o).sub(r).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t=!1){const i=new S,s=[],a=[],r=[],o=new S,l=new Me;for(let f=0;f<=e;f++){const p=f/e;s[f]=this.getTangentAt(p,new S)}a[0]=new S,r[0]=new S;let c=Number.MAX_VALUE;const u=Math.abs(s[0].x),d=Math.abs(s[0].y),h=Math.abs(s[0].z);u<=c&&(c=u,i.set(1,0,0)),d<=c&&(c=d,i.set(0,1,0)),h<=c&&i.set(0,0,1),o.crossVectors(s[0],i).normalize(),a[0].crossVectors(s[0],o),r[0].crossVectors(s[0],a[0]);for(let f=1;f<=e;f++){if(a[f]=a[f-1].clone(),r[f]=r[f-1].clone(),o.crossVectors(s[f-1],s[f]),o.length()>Number.EPSILON){o.normalize();const p=Math.acos(Ze(s[f-1].dot(s[f]),-1,1));a[f].applyMatrix4(l.makeRotationAxis(o,p))}r[f].crossVectors(s[f],a[f])}if(t===!0){let f=Math.acos(Ze(a[0].dot(a[e]),-1,1));f/=e,s[0].dot(o.crossVectors(a[0],a[e]))>0&&(f=-f);for(let p=1;p<=e;p++)a[p].applyMatrix4(l.makeRotationAxis(s[p],f*p)),r[p].crossVectors(s[p],a[p])}return{tangents:s,normals:a,binormals:r}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class Xh extends Pi{constructor(e=0,t=0,i=1,s=1,a=0,r=Math.PI*2,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=s,this.aStartAngle=a,this.aEndAngle=r,this.aClockwise=o,this.aRotation=l}getPoint(e,t=new te){const i=t,s=Math.PI*2;let a=this.aEndAngle-this.aStartAngle;const r=Math.abs(a)s;)a-=s;a0?0:(Math.floor(Math.abs(o)/a)+1)*a:l===0&&o===a-1&&(o=a-2,l=1);let c,u;this.closed||o>0?c=s[(o-1)%a]:(Qc.subVectors(s[0],s[1]).add(s[0]),c=Qc);const d=s[o%a],h=s[(o+1)%a];if(this.closed||o+2s.length-2?s.length-1:r+1],d=s[r>s.length-3?s.length-1:r+2];return i.set(t0(o,l.x,c.x,u.x,d.x),t0(o,l.y,c.y,u.y,d.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const r=s[a]-i,o=this.curves[a],l=o.getLength(),c=l===0?0:1-r/l;return o.getPointAt(c,t)}a++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,s=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const d=c.getPoint(0);d.equals(this.currentPoint)||this.lineTo(d.x,d.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class Ns extends ih{constructor(e){super(e),this.uuid=pi(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,s=this.holes.length;i80*t){o=1/0,l=1/0;let u=-1/0,d=-1/0;for(let h=t;hu&&(u=f),p>d&&(d=p)}c=Math.max(u-o,d-l),c=c!==0?32767/c:0}return Kl(a,r,t,o,l,c,0),r}function kS(n,e,t,i,s){let a;if(s===fR(n,e,t,i)>0)for(let r=e;r=e;r-=i)a=n0(r/i|0,n[r],n[r+1],a);return a&&Po(a,a.next)&&(Yl(a),a=a.next),a}function ur(n,e){if(!n)return n;e||(e=n);let t=n,i;do if(i=!1,!t.steiner&&(Po(t,t.next)||Kt(t.prev,t,t.next)===0)){if(Yl(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function Kl(n,e,t,i,s,a,r){if(!n)return;!r&&a&&oR(n,i,s,a);let o=n;for(;n.prev!==n.next;){const l=n.prev,c=n.next;if(a?QA(n,i,s,a):JA(n)){e.push(l.i,n.i,c.i),Yl(n),n=c.next,o=c.next;continue}if(n=c,n===o){r?r===1?(n=eR(ur(n),e),Kl(n,e,t,i,s,a,2)):r===2&&tR(n,e,t,i,s,a):Kl(ur(n),e,t,i,s,a,1);break}}}function JA(n){const e=n.prev,t=n,i=n.next;if(Kt(e,t,i)>=0)return!1;const s=e.x,a=t.x,r=i.x,o=e.y,l=t.y,c=i.y,u=Math.min(s,a,r),d=Math.min(o,l,c),h=Math.max(s,a,r),f=Math.max(o,l,c);let p=i.next;for(;p!==e;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=f&&ml(s,o,a,l,r,c,p.x,p.y)&&Kt(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function QA(n,e,t,i){const s=n.prev,a=n,r=n.next;if(Kt(s,a,r)>=0)return!1;const o=s.x,l=a.x,c=r.x,u=s.y,d=a.y,h=r.y,f=Math.min(o,l,c),p=Math.min(u,d,h),g=Math.max(o,l,c),_=Math.max(u,d,h),m=Im(f,p,e,t,i),v=Im(g,_,e,t,i);let y=n.prevZ,b=n.nextZ;for(;y&&y.z>=m&&b&&b.z<=v;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&ml(o,u,l,d,c,h,y.x,y.y)&&Kt(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&ml(o,u,l,d,c,h,b.x,b.y)&&Kt(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=m;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&ml(o,u,l,d,c,h,y.x,y.y)&&Kt(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&ml(o,u,l,d,c,h,b.x,b.y)&&Kt(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function eR(n,e){let t=n;do{const i=t.prev,s=t.next.next;!Po(i,s)&&OS(i,t,t.next,s)&&ql(i,s)&&ql(s,i)&&(e.push(i.i,t.i,s.i),Yl(t),Yl(t.next),t=n=s),t=t.next}while(t!==n);return ur(t)}function tR(n,e,t,i,s,a){let r=n;do{let o=r.next.next;for(;o!==r.prev;){if(r.i!==o.i&&uR(r,o)){let l=FS(r,o);r=ur(r,r.next),l=ur(l,l.next),Kl(r,e,t,i,s,a,0),Kl(l,e,t,i,s,a,0);return}o=o.next}r=r.next}while(r!==n)}function nR(n,e,t,i){const s=[];for(let a=0,r=e.length;a=t.next.y&&t.next.y!==t.y){const d=t.x+(s-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(d<=i&&d>a&&(a=d,r=t.x=t.x&&t.x>=l&&i!==t.x&&DS(sr.x||t.x===r.x&&rR(r,t)))&&(r=t,u=d)}t=t.next}while(t!==o);return r}function rR(n,e){return Kt(n.prev,n,e.prev)<0&&Kt(e.next,n,n.next)<0}function oR(n,e,t,i){let s=n;do s.z===0&&(s.z=Im(s.x,s.y,e,t,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==n);s.prevZ.nextZ=null,s.prevZ=null,lR(s)}function lR(n){let e,t=1;do{let i=n,s;n=null;let a=null;for(e=0;i;){e++;let r=i,o=0;for(let c=0;c0||l>0&&r;)o!==0&&(l===0||!r||i.z<=r.z)?(s=i,i=i.nextZ,o--):(s=r,r=r.nextZ,l--),a?a.nextZ=s:n=s,s.prevZ=a,a=s;i=r}a.nextZ=null,t*=2}while(e>1);return n}function Im(n,e,t,i,s){return n=(n-t)*s|0,e=(e-i)*s|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n|e<<1}function cR(n){let e=n,t=n;do(e.x=(n-r)*(a-o)&&(n-r)*(i-o)>=(t-r)*(e-o)&&(t-r)*(a-o)>=(s-r)*(i-o)}function ml(n,e,t,i,s,a,r,o){return!(n===r&&e===o)&&DS(n,e,t,i,s,a,r,o)}function uR(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!dR(n,e)&&(ql(n,e)&&ql(e,n)&&hR(n,e)&&(Kt(n.prev,n,e.prev)||Kt(n,e.prev,e))||Po(n,e)&&Kt(n.prev,n,n.next)>0&&Kt(e.prev,e,e.next)>0)}function Kt(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function Po(n,e){return n.x===e.x&&n.y===e.y}function OS(n,e,t,i){const s=tu(Kt(n,e,t)),a=tu(Kt(n,e,i)),r=tu(Kt(t,i,n)),o=tu(Kt(t,i,e));return!!(s!==a&&r!==o||s===0&&eu(n,t,e)||a===0&&eu(n,i,e)||r===0&&eu(t,n,i)||o===0&&eu(t,e,i))}function eu(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function tu(n){return n>0?1:n<0?-1:0}function dR(n,e){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&OS(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}function ql(n,e){return Kt(n.prev,n,n.next)<0?Kt(n,e,n.next)>=0&&Kt(n,n.prev,e)>=0:Kt(n,e,n.prev)<0||Kt(n,n.next,e)<0}function hR(n,e){let t=n,i=!1;const s=(n.x+e.x)/2,a=(n.y+e.y)/2;do t.y>a!=t.next.y>a&&t.next.y!==t.y&&s<(t.next.x-t.x)*(a-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==n);return i}function FS(n,e){const t=Lm(n.i,n.x,n.y),i=Lm(e.i,e.x,e.y),s=n.next,a=e.prev;return n.next=e,e.prev=n,t.next=s,s.prev=t,i.next=t,t.prev=i,a.next=i,i.prev=a,i}function n0(n,e,t,i){const s=Lm(n,e,t);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function Yl(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function Lm(n,e,t){return{i:n,x:e,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function fR(n,e,t,i){let s=0;for(let a=e,r=t-i;a2&&n[e-1].equals(n[0])&&n.pop()}function s0(n,e){for(let t=0;tNumber.EPSILON){const J=Math.sqrt(A),le=Math.sqrt(it*it+I*I),ee=j.x-$e/J,He=j.y+ge/J,ye=Y.x-I/le,Ue=Y.y+it/le,Be=((ye-ee)*I-(Ue-He)*it)/(ge*I-$e*it);Q=ee+ge*Be-G.x,_e=He+$e*Be-G.y;const de=Q*Q+_e*_e;if(de<=2)return new te(Q,_e);ce=Math.sqrt(de/2)}else{let J=!1;ge>Number.EPSILON?it>Number.EPSILON&&(J=!0):ge<-Number.EPSILON?it<-Number.EPSILON&&(J=!0):Math.sign($e)===Math.sign(I)&&(J=!0),J?(Q=-$e,_e=ge,ce=Math.sqrt(A)):(Q=ge,_e=$e,ce=Math.sqrt(A/2))}return new te(Q/ce,_e/ce)}const ne=[];for(let G=0,j=U.length,Y=j-1,Q=G+1;G=0;G--){const j=G/_,Y=f*Math.cos(j*Math.PI/2),Q=p*Math.sin(j*Math.PI/2)+g;for(let _e=0,ce=U.length;_e=0;){const Q=Y;let _e=Y-1;_e<0&&(_e=G.length-1);for(let ce=0,ge=u+_*2;ce0)&&f.push(y,b,x),(m!==i-1||l0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class ja extends Qt{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new ue(16777215),this.specular=new ue(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ue(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fa,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new an,this.combine=rc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class BS extends Qt{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new ue(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ue(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fa,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class zS extends Qt{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fa,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class ef extends Qt{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new ue(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new ue(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fa,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new an,this.combine=rc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class yg extends Qt{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=oS,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class vg extends Qt{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class HS extends Qt{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new ue(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=fa,this.normalScale=new te(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class VS extends Rt{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function Za(n,e){return!n||n.constructor===e?n:typeof e.BYTES_PER_ELEMENT=="number"?new e(n):Array.prototype.slice.call(n)}function GS(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function $S(n){function e(s,a){return n[s]-n[a]}const t=n.length,i=new Array(t);for(let s=0;s!==t;++s)i[s]=s;return i.sort(e),i}function km(n,e,t){const i=n.length,s=new n.constructor(i);for(let a=0,r=0;r!==i;++a){const o=t[a]*e;for(let l=0;l!==e;++l)s[r++]=n[o+l]}return s}function bg(n,e,t,i){let s=1,a=n[0];for(;a!==void 0&&a[i]===void 0;)a=n[s++];if(a===void 0)return;let r=a[i];if(r!==void 0)if(Array.isArray(r))do r=a[i],r!==void 0&&(e.push(a.time),t.push(...r)),a=n[s++];while(a!==void 0);else if(r.toArray!==void 0)do r=a[i],r!==void 0&&(e.push(a.time),r.toArray(t,t.length)),a=n[s++];while(a!==void 0);else do r=a[i],r!==void 0&&(e.push(a.time),t.push(r)),a=n[s++];while(a!==void 0)}function yR(n,e,t,i,s=30){const a=n.clone();a.name=e;const r=[];for(let l=0;l=i)){d.push(c.times[f]);for(let g=0;ga.tracks[l].times[0]&&(o=a.tracks[l].times[0]);for(let l=0;l=o.times[p]){const m=p*d+u,v=m+d-u;g=o.values.slice(m,v)}else{const m=o.createInterpolant(),v=u,y=d-u;m.evaluate(a),g=m.resultBuffer.slice(v,y)}l==="quaternion"&&new dt().fromArray(g).normalize().conjugate().toArray(g);const _=c.times.length;for(let m=0;m<_;++m){const v=m*f+h;if(l==="quaternion")dt.multiplyQuaternionsFlat(c.values,v,g,0,c.values,v);else{const y=f-h*2;for(let b=0;b=a)){const o=t[1];e=a)break t}r=i,i=0;break n}break e}for(;i>>1;et;)--r;if(++r,a!==0||r!==s){a>=r&&(r=Math.max(r,1),a=r-1);const o=this.getValueSize();this.times=i.slice(a,r),this.values=this.values.slice(a*o,r*o)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const i=this.times,s=this.values,a=i.length;a===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let r=null;for(let o=0;o!==a;o++){const l=i[o];if(typeof l=="number"&&isNaN(l)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(r!==null&&r>l){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,l,r),e=!1;break}r=l}if(s!==void 0&&GS(s))for(let o=0,l=s.length;o!==l;++o){const c=s[o];if(isNaN(c)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,c),e=!1;break}}return e}optimize(){const e=this.times.slice(),t=this.values.slice(),i=this.getValueSize(),s=this.getInterpolation()===Xu,a=e.length-1;let r=1;for(let o=1;o0){e[r]=e[a];for(let o=a*i,l=r*i,c=0;c!==i;++c)t[l+c]=t[o+c];++r}return r!==e.length?(this.times=e.slice(0,r),this.values=t.slice(0,r*i)):(this.times=e,this.values=t),this}clone(){const e=this.times.slice(),t=this.values.slice(),i=this.constructor,s=new i(this.name,e,t);return s.createInterpolant=this.createInterpolant,s}}Ii.prototype.ValueTypeName="";Ii.prototype.TimeBufferType=Float32Array;Ii.prototype.ValueBufferType=Float32Array;Ii.prototype.DefaultInterpolation=or;class mr extends Ii{constructor(e,t,i){super(e,t,i)}}mr.prototype.ValueTypeName="bool";mr.prototype.ValueBufferType=Array;mr.prototype.DefaultInterpolation=Mo;mr.prototype.InterpolantFactoryMethodLinear=void 0;mr.prototype.InterpolantFactoryMethodSmooth=void 0;class wg extends Ii{constructor(e,t,i,s){super(e,t,i,s)}}wg.prototype.ValueTypeName="color";class ua extends Ii{constructor(e,t,i,s){super(e,t,i,s)}}ua.prototype.ValueTypeName="number";class KS extends Oo{constructor(e,t,i,s){super(e,t,i,s)}interpolate_(e,t,i,s){const a=this.resultBuffer,r=this.sampleValues,o=this.valueSize,l=(i-t)/(s-t);let c=e*o;for(let u=c+o;c!==u;c+=4)dt.slerpFlat(a,0,r,c-o,r,c,l);return a}}class _s extends Ii{constructor(e,t,i,s){super(e,t,i,s)}InterpolantFactoryMethodLinear(e){return new KS(this.times,this.values,this.getValueSize(),e)}}_s.prototype.ValueTypeName="quaternion";_s.prototype.InterpolantFactoryMethodSmooth=void 0;class _r extends Ii{constructor(e,t,i){super(e,t,i)}}_r.prototype.ValueTypeName="string";_r.prototype.ValueBufferType=Array;_r.prototype.DefaultInterpolation=Mo;_r.prototype.InterpolantFactoryMethodLinear=void 0;_r.prototype.InterpolantFactoryMethodSmooth=void 0;class Hs extends Ii{constructor(e,t,i,s){super(e,t,i,s)}}Hs.prototype.ValueTypeName="vector";class da{constructor(e="",t=-1,i=[],s=Rh){this.name=e,this.tracks=i,this.duration=t,this.blendMode=s,this.uuid=pi(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){const t=[],i=e.tracks,s=1/(e.fps||1);for(let r=0,o=i.length;r!==o;++r)t.push(wR(i[r]).scale(s));const a=new this(e.name,e.duration,t,e.blendMode);return a.uuid=e.uuid,a.userData=JSON.parse(e.userData||"{}"),a}static toJSON(e){const t=[],i=e.tracks,s={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let a=0,r=i.length;a!==r;++a)t.push(Ii.toJSON(i[a]));return s}static CreateFromMorphTargetSequence(e,t,i,s){const a=t.length,r=[];for(let o=0;o1){const d=u[1];let h=s[d];h||(s[d]=h=[]),h.push(c)}}const r=[];for(const o in s)r.push(this.CreateFromMorphTargetSequence(o,s[o],t,i));return r}static parseAnimation(e,t){if(console.warn("THREE.AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(d,h,f,p,g){if(f.length!==0){const _=[],m=[];bg(f,_,m,p),_.length!==0&&g.push(new d(h,_,m))}},s=[],a=e.name||"default",r=e.fps||30,o=e.blendMode;let l=e.length||-1;const c=e.hierarchy||[];for(let d=0;d{t&&t(a),this.manager.itemEnd(e)},0),a;if(Ts[e]!==void 0){Ts[e].push({onLoad:t,onProgress:i,onError:s});return}Ts[e]=[],Ts[e].push({onLoad:t,onProgress:i,onError:s});const r=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,l=this.responseType;fetch(r).then(c=>{if(c.status===200||c.status===0){if(c.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||c.body===void 0||c.body.getReader===void 0)return c;const u=Ts[e],d=c.body.getReader(),h=c.headers.get("X-File-Size")||c.headers.get("Content-Length"),f=h?parseInt(h):0,p=f!==0;let g=0;const _=new ReadableStream({start(m){v();function v(){d.read().then(({done:y,value:b})=>{if(y)m.close();else{g+=b.byteLength;const T=new ProgressEvent("progress",{lengthComputable:p,loaded:g,total:f});for(let x=0,M=u.length;x{m.error(y)})}}});return new Response(_)}else throw new SR(`fetch for "${c.url}" responded with ${c.status}: ${c.statusText}`,c)}).then(c=>{switch(l){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then(u=>new DOMParser().parseFromString(u,o));case"json":return c.json();default:if(o==="")return c.text();{const d=/charset="?([^;"\s]*)"?/i.exec(o),h=d&&d[1]?d[1].toLowerCase():void 0,f=new TextDecoder(h);return c.arrayBuffer().then(p=>f.decode(p))}}}).then(c=>{cs.add(`file:${e}`,c);const u=Ts[e];delete Ts[e];for(let d=0,h=u.length;d{const u=Ts[e];if(u===void 0)throw this.manager.itemError(e),c;delete Ts[e];for(let d=0,h=u.length;d{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}class TR extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Gn(this.manager);r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t=[];for(let i=0;i0:s.vertexColors=e.vertexColors),e.uniforms!==void 0)for(const a in e.uniforms){const r=e.uniforms[a];switch(s.uniforms[a]={},r.type){case"t":s.uniforms[a].value=i(r.value);break;case"c":s.uniforms[a].value=new ue().setHex(r.value);break;case"v2":s.uniforms[a].value=new te().fromArray(r.value);break;case"v3":s.uniforms[a].value=new S().fromArray(r.value);break;case"v4":s.uniforms[a].value=new qe().fromArray(r.value);break;case"m3":s.uniforms[a].value=new at().fromArray(r.value);break;case"m4":s.uniforms[a].value=new Me().fromArray(r.value);break;default:s.uniforms[a].value=r.value}}if(e.defines!==void 0&&(s.defines=e.defines),e.vertexShader!==void 0&&(s.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(s.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(s.glslVersion=e.glslVersion),e.extensions!==void 0)for(const a in e.extensions)s.extensions[a]=e.extensions[a];if(e.lights!==void 0&&(s.lights=e.lights),e.clipping!==void 0&&(s.clipping=e.clipping),e.size!==void 0&&(s.size=e.size),e.sizeAttenuation!==void 0&&(s.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(s.map=i(e.map)),e.matcap!==void 0&&(s.matcap=i(e.matcap)),e.alphaMap!==void 0&&(s.alphaMap=i(e.alphaMap)),e.bumpMap!==void 0&&(s.bumpMap=i(e.bumpMap)),e.bumpScale!==void 0&&(s.bumpScale=e.bumpScale),e.normalMap!==void 0&&(s.normalMap=i(e.normalMap)),e.normalMapType!==void 0&&(s.normalMapType=e.normalMapType),e.normalScale!==void 0){let a=e.normalScale;Array.isArray(a)===!1&&(a=[a,a]),s.normalScale=new te().fromArray(a)}return e.displacementMap!==void 0&&(s.displacementMap=i(e.displacementMap)),e.displacementScale!==void 0&&(s.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(s.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(s.roughnessMap=i(e.roughnessMap)),e.metalnessMap!==void 0&&(s.metalnessMap=i(e.metalnessMap)),e.emissiveMap!==void 0&&(s.emissiveMap=i(e.emissiveMap)),e.emissiveIntensity!==void 0&&(s.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(s.specularMap=i(e.specularMap)),e.specularIntensityMap!==void 0&&(s.specularIntensityMap=i(e.specularIntensityMap)),e.specularColorMap!==void 0&&(s.specularColorMap=i(e.specularColorMap)),e.envMap!==void 0&&(s.envMap=i(e.envMap)),e.envMapRotation!==void 0&&s.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(s.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(s.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(s.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(s.lightMap=i(e.lightMap)),e.lightMapIntensity!==void 0&&(s.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(s.aoMap=i(e.aoMap)),e.aoMapIntensity!==void 0&&(s.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(s.gradientMap=i(e.gradientMap)),e.clearcoatMap!==void 0&&(s.clearcoatMap=i(e.clearcoatMap)),e.clearcoatRoughnessMap!==void 0&&(s.clearcoatRoughnessMap=i(e.clearcoatRoughnessMap)),e.clearcoatNormalMap!==void 0&&(s.clearcoatNormalMap=i(e.clearcoatNormalMap)),e.clearcoatNormalScale!==void 0&&(s.clearcoatNormalScale=new te().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(s.iridescenceMap=i(e.iridescenceMap)),e.iridescenceThicknessMap!==void 0&&(s.iridescenceThicknessMap=i(e.iridescenceThicknessMap)),e.transmissionMap!==void 0&&(s.transmissionMap=i(e.transmissionMap)),e.thicknessMap!==void 0&&(s.thicknessMap=i(e.thicknessMap)),e.anisotropyMap!==void 0&&(s.anisotropyMap=i(e.anisotropyMap)),e.sheenColorMap!==void 0&&(s.sheenColorMap=i(e.sheenColorMap)),e.sheenRoughnessMap!==void 0&&(s.sheenRoughnessMap=i(e.sheenRoughnessMap)),s}setTextures(e){return this.textures=e,this}createMaterialFromType(e){return sf.createMaterialFromType(e)}static createMaterialFromType(e){const t={ShadowMaterial:NS,SpriteMaterial:Nh,RawShaderMaterial:US,ShaderMaterial:ti,PointsMaterial:aa,MeshPhysicalMaterial:ii,MeshStandardMaterial:Pn,MeshPhongMaterial:ja,MeshToonMaterial:BS,MeshNormalMaterial:zS,MeshLambertMaterial:ef,MeshDepthMaterial:yg,MeshDistanceMaterial:vg,MeshBasicMaterial:Ye,MeshMatcapMaterial:HS,LineDashedMaterial:VS,LineBasicMaterial:Rt,Material:Qt};return new t[e]}}class Us{static extractUrlBase(e){const t=e.lastIndexOf("/");return t===-1?"./":e.slice(0,t+1)}static resolveURL(e,t){return typeof e!="string"||e===""?"":(/^https?:\/\//i.test(t)&&/^\//.test(e)&&(t=t.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(e)||/^data:.*,.*$/i.test(e)||/^blob:.*$/i.test(e)?e:t+e)}}class eT extends Ge{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){const e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}}class tT extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Gn(a.manager);r.setPath(a.path),r.setRequestHeader(a.requestHeader),r.setWithCredentials(a.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t={},i={};function s(f,p){if(t[p]!==void 0)return t[p];const _=f.interleavedBuffers[p],m=a(f,_.buffer),v=Zr(_.type,m),y=new uc(v,_.stride);return y.uuid=_.uuid,t[p]=y,y}function a(f,p){if(i[p]!==void 0)return i[p];const _=f.arrayBuffers[p],m=new Uint32Array(_).buffer;return i[p]=m,m}const r=e.isInstancedBufferGeometry?new eT:new Ge,o=e.data.index;if(o!==void 0){const f=Zr(o.type,o.array);r.setIndex(new ot(f,1))}const l=e.data.attributes;for(const f in l){const p=l[f];let g;if(p.isInterleavedBufferAttribute){const _=s(e.data,p.data);g=new ca(_,p.itemSize,p.offset,p.normalized)}else{const _=Zr(p.type,p.array),m=p.isInstancedBufferAttribute?lr:ot;g=new m(_,p.itemSize,p.normalized)}p.name!==void 0&&(g.name=p.name),p.usage!==void 0&&g.setUsage(p.usage),r.setAttribute(f,g)}const c=e.data.morphAttributes;if(c)for(const f in c){const p=c[f],g=[];for(let _=0,m=p.length;_0){const l=new Sg(t);a=new jl(l),a.setCrossOrigin(this.crossOrigin);for(let c=0,u=e.length;c0){s=new jl(this.manager),s.setCrossOrigin(this.crossOrigin);for(let r=0,o=e.length;r{let _=null,m=null;return g.boundingBox!==void 0&&(_=new vn().fromJSON(g.boundingBox)),g.boundingSphere!==void 0&&(m=new bn().fromJSON(g.boundingSphere)),{...g,boundingBox:_,boundingSphere:m}}),r._instanceInfo=e.instanceInfo,r._availableInstanceIds=e._availableInstanceIds,r._availableGeometryIds=e._availableGeometryIds,r._nextIndexStart=e.nextIndexStart,r._nextVertexStart=e.nextVertexStart,r._geometryCount=e.geometryCount,r._maxInstanceCount=e.maxInstanceCount,r._maxVertexCount=e.maxVertexCount,r._maxIndexCount=e.maxIndexCount,r._geometryInitialized=e.geometryInitialized,r._matricesTexture=c(e.matricesTexture.uuid),r._indirectTexture=c(e.indirectTexture.uuid),e.colorsTexture!==void 0&&(r._colorsTexture=c(e.colorsTexture.uuid)),e.boundingSphere!==void 0&&(r.boundingSphere=new bn().fromJSON(e.boundingSphere)),e.boundingBox!==void 0&&(r.boundingBox=new vn().fromJSON(e.boundingBox));break;case"LOD":r=new ES;break;case"Line":r=new In(o(e.geometry),l(e.material));break;case"LineLoop":r=new og(o(e.geometry),l(e.material));break;case"LineSegments":r=new Ln(o(e.geometry),l(e.material));break;case"PointCloud":case"Points":r=new sr(o(e.geometry),l(e.material));break;case"Sprite":r=new Uh(l(e.material));break;case"Group":r=new Mt;break;case"Bone":r=new Ro;break;default:r=new Qe}if(r.uuid=e.uuid,e.name!==void 0&&(r.name=e.name),e.matrix!==void 0?(r.matrix.fromArray(e.matrix),e.matrixAutoUpdate!==void 0&&(r.matrixAutoUpdate=e.matrixAutoUpdate),r.matrixAutoUpdate&&r.matrix.decompose(r.position,r.quaternion,r.scale)):(e.position!==void 0&&r.position.fromArray(e.position),e.rotation!==void 0&&r.rotation.fromArray(e.rotation),e.quaternion!==void 0&&r.quaternion.fromArray(e.quaternion),e.scale!==void 0&&r.scale.fromArray(e.scale)),e.up!==void 0&&r.up.fromArray(e.up),e.castShadow!==void 0&&(r.castShadow=e.castShadow),e.receiveShadow!==void 0&&(r.receiveShadow=e.receiveShadow),e.shadow&&(e.shadow.intensity!==void 0&&(r.shadow.intensity=e.shadow.intensity),e.shadow.bias!==void 0&&(r.shadow.bias=e.shadow.bias),e.shadow.normalBias!==void 0&&(r.shadow.normalBias=e.shadow.normalBias),e.shadow.radius!==void 0&&(r.shadow.radius=e.shadow.radius),e.shadow.mapSize!==void 0&&r.shadow.mapSize.fromArray(e.shadow.mapSize),e.shadow.camera!==void 0&&(r.shadow.camera=this.parseObject(e.shadow.camera))),e.visible!==void 0&&(r.visible=e.visible),e.frustumCulled!==void 0&&(r.frustumCulled=e.frustumCulled),e.renderOrder!==void 0&&(r.renderOrder=e.renderOrder),e.userData!==void 0&&(r.userData=e.userData),e.layers!==void 0&&(r.layers.mask=e.layers),e.children!==void 0){const h=e.children;for(let f=0;f"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"},this._abortController=new AbortController}setOptions(e){return this.options=e,this}load(e,t,i,s){e===void 0&&(e=""),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);const a=this,r=cs.get(`image-bitmap:${e}`);if(r!==void 0){if(a.manager.itemStart(e),r.then){r.then(c=>{if(Qf.has(r)===!0)s&&s(Qf.get(r)),a.manager.itemError(e),a.manager.itemEnd(e);else return t&&t(c),a.manager.itemEnd(e),c});return}return setTimeout(function(){t&&t(r),a.manager.itemEnd(e)},0),r}const o={};o.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",o.headers=this.requestHeader,o.signal=typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;const l=fetch(e,o).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(a.options,{colorSpaceConversion:"none"}))}).then(function(c){return cs.add(`image-bitmap:${e}`,c),t&&t(c),a.manager.itemEnd(e),c}).catch(function(c){s&&s(c),Qf.set(l,c),cs.remove(`image-bitmap:${e}`),a.manager.itemError(e),a.manager.itemEnd(e)});cs.add(`image-bitmap:${e}`,l),a.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}let nu;class Mg{static getContext(){return nu===void 0&&(nu=new(window.AudioContext||window.webkitAudioContext)),nu}static setContext(e){nu=e}}class LR extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Gn(this.manager);r.setResponseType("arraybuffer"),r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(l){try{const c=l.slice(0);Mg.getContext().decodeAudioData(c,function(d){t(d)}).catch(o)}catch(c){o(c)}},i,s);function o(l){s?s(l):console.error(l),a.manager.itemError(e)}}}const h0=new Me,f0=new Me,Ta=new Me;class kR{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Jt,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Jt,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){const t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,Ta.copy(e.projectionMatrix);const s=t.eyeSep/2,a=s*t.near/t.focus,r=t.near*Math.tan(ir*t.fov*.5)/t.zoom;let o,l;f0.elements[12]=-s,h0.elements[12]=s,o=-r*t.aspect+a,l=r*t.aspect+a,Ta.elements[0]=2*t.near/(l-o),Ta.elements[8]=(l+o)/(l-o),this.cameraL.projectionMatrix.copy(Ta),o=-r*t.aspect-a,l=r*t.aspect-a,Ta.elements[0]=2*t.near/(l-o),Ta.elements[8]=(l+o)/(l-o),this.cameraR.projectionMatrix.copy(Ta)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(f0),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(h0)}}class iT extends Jt{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}}class Eg{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const t=performance.now();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}const Ma=new S,ep=new dt,DR=new S,Ea=new S,Ca=new S;class OR extends Qe{constructor(){super(),this.type="AudioListener",this.context=Mg.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Eg}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return this.filter!==null?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);const t=this.context.listener;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(Ma,ep,DR),Ea.set(0,0,-1).applyQuaternion(ep),Ca.set(0,1,0).applyQuaternion(ep),t.positionX){const i=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(Ma.x,i),t.positionY.linearRampToValueAtTime(Ma.y,i),t.positionZ.linearRampToValueAtTime(Ma.z,i),t.forwardX.linearRampToValueAtTime(Ea.x,i),t.forwardY.linearRampToValueAtTime(Ea.y,i),t.forwardZ.linearRampToValueAtTime(Ea.z,i),t.upX.linearRampToValueAtTime(Ca.x,i),t.upY.linearRampToValueAtTime(Ca.y,i),t.upZ.linearRampToValueAtTime(Ca.z,i)}else t.setPosition(Ma.x,Ma.y,Ma.z),t.setOrientation(Ea.x,Ea.y,Ea.z,Ca.x,Ca.y,Ca.z)}}class sT extends Qe{constructor(e){super(),this.type="Audio",this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType="buffer",this.autoplay&&this.play(),this}play(e=0){if(this.isPlaying===!0){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}this._startedAt=this.context.currentTime+e;const t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(e=0){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this._progress=0,this.source!==null&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(i,s,this._addIndex*t,1,t);for(let l=t,c=t+t;l!==c;++l)if(i[l]!==i[l+t]){o.setValue(i,s);break}}saveOriginalState(){const e=this.binding,t=this.buffer,i=this.valueSize,s=i*this._origIndex;e.getValue(t,s);for(let a=i,r=s;a!==r;++a)t[a]=t[s+a%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){const e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let r=0;r!==a;++r)e[t+r]=e[i+r]}_slerp(e,t,i,s){dt.slerpFlat(e,t,e,t,e,i,s)}_slerpAdditive(e,t,i,s,a){const r=this._workIndex*a;dt.multiplyQuaternionsFlat(e,r,e,t,e,i),dt.slerpFlat(e,t,e,t,e,r,s)}_lerp(e,t,i,s,a){const r=1-s;for(let o=0;o!==a;++o){const l=t+o;e[l]=e[l]*r+e[i+o]*s}}_lerpAdditive(e,t,i,s,a){for(let r=0;r!==a;++r){const o=t+r;e[o]=e[o]+e[i+r]*s}}}const Cg="\\[\\]\\.:\\/",BR=new RegExp("["+Cg+"]","g"),Ag="[^"+Cg+"]",zR="[^"+Cg.replace("\\.","")+"]",HR=/((?:WC+[\/:])*)/.source.replace("WC",Ag),VR=/(WCOD+)?/.source.replace("WCOD",zR),GR=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Ag),$R=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Ag),WR=new RegExp("^"+HR+VR+GR+$R+"$"),XR=["material","materials","bones","map"];class KR{constructor(e,t,i){const s=i||yt.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,s)}getValue(e,t){this.bind();const i=this._targetGroup.nCachedObjects_,s=this._bindings[i];s!==void 0&&s.getValue(e,t)}setValue(e,t){const i=this._bindings;for(let s=this._targetGroup.nCachedObjects_,a=i.length;s!==a;++s)i[s].setValue(e,t)}bind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}}class yt{constructor(e,t,i){this.path=t,this.parsedPath=i||yt.parseTrackName(t),this.node=yt.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new yt.Composite(e,t,i):new yt(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(BR,"")}static parseTrackName(e){const t=WR.exec(e);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+e);const i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(s!==void 0&&s!==-1){const a=i.nodeName.substring(s+1);XR.indexOf(a)!==-1&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=a)}if(i.propertyName===null||i.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){const i=e.skeleton.getBoneByName(t);if(i!==void 0)return i}if(e.children){const i=function(a){for(let r=0;r=a){const d=a++,h=e[d];t[h.uuid]=u,e[u]=h,t[c]=d,e[d]=l;for(let f=0,p=s;f!==p;++f){const g=i[f],_=g[d],m=g[u];g[u]=_,g[d]=m}}}this.nCachedObjects_=a}uncache(){const e=this._objects,t=this._indicesByUUID,i=this._bindings,s=i.length;let a=this.nCachedObjects_,r=e.length;for(let o=0,l=arguments.length;o!==l;++o){const c=arguments[o],u=c.uuid,d=t[u];if(d!==void 0)if(delete t[u],d0&&(t[f.uuid]=d),e[d]=f,e.pop();for(let p=0,g=s;p!==g;++p){const _=i[p];_[d]=_[h],_.pop()}}}this.nCachedObjects_=a}subscribe_(e,t){const i=this._bindingsIndicesByPath;let s=i[e];const a=this._bindings;if(s!==void 0)return a[s];const r=this._paths,o=this._parsedPaths,l=this._objects,c=l.length,u=this.nCachedObjects_,d=new Array(c);s=a.length,i[e]=s,r.push(e),o.push(t),a.push(d);for(let h=u,f=l.length;h!==f;++h){const p=l[h];d[h]=new yt(p,e,t)}return d}unsubscribe_(e){const t=this._bindingsIndicesByPath,i=t[e];if(i!==void 0){const s=this._paths,a=this._parsedPaths,r=this._bindings,o=r.length-1,l=r[o],c=e[o];t[c]=i,r[i]=l,r.pop(),a[i]=a[o],a.pop(),s[i]=s[o],s.pop()}}}class rT{constructor(e,t,i=null,s=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=s;const a=t.tracks,r=a.length,o=new Array(r),l={endingStart:qa,endingEnd:qa};for(let c=0;c!==r;++c){const u=a[c].createInterpolant(null);o[c]=u,u.settings=l}this._interpolantSettings=l,this._interpolants=o,this._propertyBindings=new Array(r),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=sS,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i=!1){if(e.fadeOut(t),this.fadeIn(t),i===!0){const s=this._clip.duration,a=e._clip.duration,r=a/s,o=s/a;e.warp(1,r,t),this.warp(o,1,t)}return this}crossFadeTo(e,t,i=!1){return e.crossFadeFrom(this,t,i)}stopFading(){const e=this._weightInterpolant;return e!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){const s=this._mixer,a=s.time,r=this.timeScale;let o=this._timeScaleInterpolant;o===null&&(o=s._lendControlInterpolant(),this._timeScaleInterpolant=o);const l=o.parameterPositions,c=o.sampleValues;return l[0]=a,l[1]=a+i,c[0]=e/r,c[1]=t/r,this}stopWarping(){const e=this._timeScaleInterpolant;return e!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,s){if(!this.enabled){this._updateWeight(e);return}const a=this._startTime;if(a!==null){const l=(e-a)*i;l<0||i===0?t=0:(this._startTime=null,t=i*l)}t*=this._updateTimeScale(e);const r=this._updateTime(t),o=this._updateWeight(e);if(o>0){const l=this._interpolants,c=this._propertyBindings;switch(this.blendMode){case tg:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulateAdditive(o);break;case Rh:default:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulate(s,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;const i=this._weightInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopFading(),s===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;const i=this._timeScaleInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){const t=this._clip.duration,i=this.loop;let s=this.time+e,a=this._loopCount;const r=i===aS;if(e===0)return a===-1?s:r&&(a&1)===1?t-s:s;if(i===Jd){a===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(a===-1&&(e>=0?(a=0,this._setEndings(!0,this.repetitions===0,r)):this._setEndings(this.repetitions===0,!0,r)),s>=t||s<0){const o=Math.floor(s/t);s-=t*o,a+=Math.abs(o);const l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=e>0?t:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(l===1){const c=e<0;this._setEndings(c,!c,r)}else this._setEndings(!1,!1,r);this._loopCount=a,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this.time=s;if(r&&(a&1)===1)return t-s}return s}_setEndings(e,t,i){const s=this._interpolantSettings;i?(s.endingStart=Ya,s.endingEnd=Ya):(e?s.endingStart=this.zeroSlopeAtStart?Ya:qa:s.endingStart=Vl,t?s.endingEnd=this.zeroSlopeAtEnd?Ya:qa:s.endingEnd=Vl)}_scheduleFading(e,t,i){const s=this._mixer,a=s.time;let r=this._weightInterpolant;r===null&&(r=s._lendControlInterpolant(),this._weightInterpolant=r);const o=r.parameterPositions,l=r.sampleValues;return o[0]=a,l[0]=t,o[1]=a+e,l[1]=i,this}}const YR=new Float32Array(1);class oT extends gs{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){const i=e._localRoot||this._root,s=e._clip.tracks,a=s.length,r=e._propertyBindings,o=e._interpolants,l=i.uuid,c=this._bindingsByRootAndName;let u=c[l];u===void 0&&(u={},c[l]=u);for(let d=0;d!==a;++d){const h=s[d],f=h.name;let p=u[f];if(p!==void 0)++p.referenceCount,r[d]=p;else{if(p=r[d],p!==void 0){p._cacheIndex===null&&(++p.referenceCount,this._addInactiveBinding(p,l,f));continue}const g=t&&t._propertyBindings[d].binding.parsedPath;p=new aT(yt.create(i,f,g),h.ValueTypeName,h.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,l,f),r[d]=p}o[d].resultBuffer=p.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){const i=(e._localRoot||this._root).uuid,s=e._clip.uuid,a=this._actionsByClip[s];this._bindAction(e,a&&a.knownActions[0]),this._addInactiveAction(e,s,i)}const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];a.useCount++===0&&(this._lendBinding(a),a.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];--a.useCount===0&&(a.restoreOriginalState(),this._takeBackBinding(a))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){const t=e._cacheIndex;return t!==null&&t=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;const t=this._actions,i=this._nActiveActions,s=this.time+=e,a=Math.sign(e),r=this._accuIndex^=1;for(let c=0;c!==i;++c)t[c]._update(s,e,a,r);const o=this._bindings,l=this._nActiveBindings;for(let c=0;c!==l;++c)o[c].apply(r);return this}setTime(e){this.time=0;for(let t=0;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,g0).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const y0=new S,iu=new S,Nr=new S,Ur=new S,tp=new S,rP=new S,oP=new S;class lP{constructor(e=new S,t=new S){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){y0.subVectors(e,this.start),iu.subVectors(this.end,this.start);const i=iu.dot(iu);let a=iu.dot(y0)/i;return t&&(a=Ze(a,0,1)),a}closestPointToPoint(e,t,i){const s=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(s).add(this.start)}distanceSqToLine3(e,t=rP,i=oP){const s=10000000000000001e-32;let a,r;const o=this.start,l=e.start,c=this.end,u=e.end;Nr.subVectors(c,o),Ur.subVectors(u,l),tp.subVectors(o,l);const d=Nr.dot(Nr),h=Ur.dot(Ur),f=Ur.dot(tp);if(d<=s&&h<=s)return t.copy(o),i.copy(l),t.sub(i),t.dot(t);if(d<=s)a=0,r=f/h,r=Ze(r,0,1);else{const p=Nr.dot(tp);if(h<=s)r=0,a=Ze(-p/d,0,1);else{const g=Nr.dot(Ur),_=d*h-g*g;_!==0?a=Ze((g*f-p*h)/_,0,1):a=0,r=(g*a+f)/h,r<0?(r=0,a=Ze(-p/d,0,1)):r>1&&(r=1,a=Ze((g-p)/d,0,1))}}return t.copy(o).add(Nr.multiplyScalar(a)),i.copy(l).add(Ur.multiplyScalar(r)),t.sub(i),t.dot(t)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}const v0=new S;class cP extends Qe{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const i=new Ge,s=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let r=0,o=1,l=32;r1)for(let d=0;d.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{T0.set(e.z,0,-e.x).normalize();const t=Math.acos(e.y);this.quaternion.setFromAxisAngle(T0,t)}}setLength(e,t=e*.2,i=t*.2){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(i,t,i),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class xP extends Ln{constructor(e=1){const t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],i=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],s=new Ge;s.setAttribute("position",new Ee(t,3)),s.setAttribute("color",new Ee(i,3));const a=new Rt({vertexColors:!0,toneMapped:!1});super(s,a),this.type="AxesHelper"}setColors(e,t,i){const s=new ue,a=this.geometry.attributes.color.array;return s.set(e),s.toArray(a,0),s.toArray(a,3),s.set(t),s.toArray(a,6),s.toArray(a,9),s.set(i),s.toArray(a,12),s.toArray(a,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class wP{constructor(){this.type="ShapePath",this.color=new ue,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new ih,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,i,s){return this.currentPath.quadraticCurveTo(e,t,i,s),this}bezierCurveTo(e,t,i,s,a,r){return this.currentPath.bezierCurveTo(e,t,i,s,a,r),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){function t(m){const v=[];for(let y=0,b=m.length;yNumber.EPSILON){if(E<0&&(M=v[x],w=-w,C=v[T],E=-E),m.yC.y)continue;if(m.y===M.y){if(m.x===M.x)return!0}else{const R=E*(m.x-M.x)-w*(m.y-M.y);if(R===0)return!0;if(R<0)continue;b=!b}}else{if(m.y!==M.y)continue;if(C.x<=m.x&&m.x<=M.x||M.x<=m.x&&m.x<=C.x)return!0}}return b}const s=Ei.isClockWise,a=this.subPaths;if(a.length===0)return[];let r,o,l;const c=[];if(a.length===1)return o=a[0],l=new Ns,l.curves=o.curves,c.push(l),c;let u=!s(a[0].getPoints());u=e?!u:u;const d=[],h=[];let f=[],p=0,g;h[p]=void 0,f[p]=[];for(let m=0,v=a.length;m1){let m=!1,v=0;for(let y=0,b=h.length;y0&&m===!1&&(f=d)}let _;for(let m=0,v=h.length;me?(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2):(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0),n}function TP(n,e){const t=n.image&&n.image.width?n.image.width/n.image.height:1;return t>e?(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0):(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2),n}function MP(n){return n.repeat.x=1,n.repeat.y=1,n.offset.x=0,n.offset.y=0,n}function Fm(n,e,t,i){const s=EP(i);switch(t){case J_:return n*e;case Eh:return n*e/s.components*s.byteLength;case oc:return n*e/s.components*s.byteLength;case eg:return n*e*2/s.components*s.byteLength;case Ch:return n*e*2/s.components*s.byteLength;case Q_:return n*e*3/s.components*s.byteLength;case Vn:return n*e*4/s.components*s.byteLength;case Ah:return n*e*4/s.components*s.byteLength;case Cl:case Al:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Rl:case Pl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Md:case Cd:return Math.max(n,16)*Math.max(e,8)/4;case Td:case Ed:return Math.max(n,8)*Math.max(e,8)/2;case Ad:case Rd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Pd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Id:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Ld:return Math.floor((n+4)/5)*Math.floor((e+3)/4)*16;case kd:return Math.floor((n+4)/5)*Math.floor((e+4)/5)*16;case Dd:return Math.floor((n+5)/6)*Math.floor((e+4)/5)*16;case Od:return Math.floor((n+5)/6)*Math.floor((e+5)/6)*16;case Fd:return Math.floor((n+7)/8)*Math.floor((e+4)/5)*16;case Nd:return Math.floor((n+7)/8)*Math.floor((e+5)/6)*16;case Ud:return Math.floor((n+7)/8)*Math.floor((e+7)/8)*16;case Bd:return Math.floor((n+9)/10)*Math.floor((e+4)/5)*16;case zd:return Math.floor((n+9)/10)*Math.floor((e+5)/6)*16;case Hd:return Math.floor((n+9)/10)*Math.floor((e+7)/8)*16;case Vd:return Math.floor((n+9)/10)*Math.floor((e+9)/10)*16;case Gd:return Math.floor((n+11)/12)*Math.floor((e+9)/10)*16;case $d:return Math.floor((n+11)/12)*Math.floor((e+11)/12)*16;case Wd:case Xd:case Kd:return Math.ceil(n/4)*Math.ceil(e/4)*16;case qd:case Yd:return Math.ceil(n/4)*Math.ceil(e/4)*8;case jd:case Zd:return Math.ceil(n/4)*Math.ceil(e/4)*16}throw new Error(`Unable to determine texture byte length for ${t} format.`)}function EP(n){switch(n){case ji:case q_:return{byteLength:1,components:1};case xo:case Y_:case ls:return{byteLength:2,components:1};case Th:case Mh:return{byteLength:2,components:4};case zs:case Sh:case Sn:return{byteLength:4,components:1};case j_:case Z_:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${n}.`)}class CP{static contain(e,t){return SP(e,t)}static cover(e,t){return TP(e,t)}static fill(e){return MP(e)}static getByteLength(e,t,i,s){return Fm(e,t,i,s)}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:bh}}));typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=bh);function uT(){let n=null,e=!1,t=null,i=null;function s(a,r){t(a,r),i=n.requestAnimationFrame(s)}return{start:function(){e!==!0&&t!==null&&(i=n.requestAnimationFrame(s),e=!0)},stop:function(){n.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(a){t=a},setContext:function(a){n=a}}}function AP(n){const e=new WeakMap;function t(o,l){const c=o.array,u=o.usage,d=c.byteLength,h=n.createBuffer();n.bindBuffer(l,h),n.bufferData(l,c,u),o.onUploadCallback();let f;if(c instanceof Float32Array)f=n.FLOAT;else if(typeof Float16Array<"u"&&c instanceof Float16Array)f=n.HALF_FLOAT;else if(c instanceof Uint16Array)o.isFloat16BufferAttribute?f=n.HALF_FLOAT:f=n.UNSIGNED_SHORT;else if(c instanceof Int16Array)f=n.SHORT;else if(c instanceof Uint32Array)f=n.UNSIGNED_INT;else if(c instanceof Int32Array)f=n.INT;else if(c instanceof Int8Array)f=n.BYTE;else if(c instanceof Uint8Array)f=n.UNSIGNED_BYTE;else if(c instanceof Uint8ClampedArray)f=n.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+c);return{buffer:h,type:f,bytesPerElement:c.BYTES_PER_ELEMENT,version:o.version,size:d}}function i(o,l,c){const u=l.array,d=l.updateRanges;if(n.bindBuffer(c,o),d.length===0)n.bufferSubData(c,0,u);else{d.sort((f,p)=>f.start-p.start);let h=0;for(let f=1;f 0 +#endif`,$P=`#if NUM_CLIPPING_PLANES > 0 vec4 plane; #ifdef ALPHA_TO_COVERAGE float distanceToPlane, distanceGradient; @@ -289,26 +289,26 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve if ( clipped ) discard; #endif #endif -#endif`,kP=`#if NUM_CLIPPING_PLANES > 0 +#endif`,WP=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,OP=`#if NUM_CLIPPING_PLANES > 0 +#endif`,XP=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; -#endif`,FP=`#if NUM_CLIPPING_PLANES > 0 +#endif`,KP=`#if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; -#endif`,NP=`#if defined( USE_COLOR_ALPHA ) +#endif`,qP=`#if defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; #elif defined( USE_COLOR ) diffuseColor.rgb *= vColor; -#endif`,UP=`#if defined( USE_COLOR_ALPHA ) +#endif`,YP=`#if defined( USE_COLOR_ALPHA ) varying vec4 vColor; #elif defined( USE_COLOR ) varying vec3 vColor; -#endif`,BP=`#if defined( USE_COLOR_ALPHA ) +#endif`,jP=`#if defined( USE_COLOR_ALPHA ) varying vec4 vColor; #elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) varying vec3 vColor; -#endif`,zP=`#if defined( USE_COLOR_ALPHA ) +#endif`,ZP=`#if defined( USE_COLOR_ALPHA ) vColor = vec4( 1.0 ); #elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) vColor = vec3( 1.0 ); @@ -322,7 +322,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve #ifdef USE_BATCHING_COLOR vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) ); vColor.xyz *= batchingColor.xyz; -#endif`,HP=`#define PI 3.141592653589793 +#endif`,JP=`#define PI 3.141592653589793 #define PI2 6.283185307179586 #define PI_HALF 1.5707963267948966 #define RECIPROCAL_PI 0.3183098861837907 @@ -396,7 +396,7 @@ vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,VP=`#ifdef ENVMAP_TYPE_CUBE_UV +} // validated`,QP=`#ifdef ENVMAP_TYPE_CUBE_UV #define cubeUV_minMipLevel 4.0 #define cubeUV_minTileSize 16.0 float getFace( vec3 direction ) { @@ -489,7 +489,7 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { return vec4( mix( color0, color1, mipF ), 1.0 ); } } -#endif`,GP=`vec3 transformedNormal = objectNormal; +#endif`,eI=`vec3 transformedNormal = objectNormal; #ifdef USE_TANGENT vec3 transformedTangent = objectTangent; #endif @@ -518,21 +518,21 @@ transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif -#endif`,$P=`#ifdef USE_DISPLACEMENTMAP +#endif`,tI=`#ifdef USE_DISPLACEMENTMAP uniform sampler2D displacementMap; uniform float displacementScale; uniform float displacementBias; -#endif`,WP=`#ifdef USE_DISPLACEMENTMAP +#endif`,nI=`#ifdef USE_DISPLACEMENTMAP transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,XP=`#ifdef USE_EMISSIVEMAP +#endif`,iI=`#ifdef USE_EMISSIVEMAP vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE emissiveColor = sRGBTransferEOTF( emissiveColor ); #endif totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,KP=`#ifdef USE_EMISSIVEMAP +#endif`,sI=`#ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; -#endif`,qP="gl_FragColor = linearToOutputTexel( gl_FragColor );",YP=`vec4 LinearTransferOETF( in vec4 value ) { +#endif`,aI="gl_FragColor = linearToOutputTexel( gl_FragColor );",rI=`vec4 LinearTransferOETF( in vec4 value ) { return value; } vec4 sRGBTransferEOTF( in vec4 value ) { @@ -540,7 +540,7 @@ vec4 sRGBTransferEOTF( in vec4 value ) { } vec4 sRGBTransferOETF( in vec4 value ) { return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,jP=`#ifdef USE_ENVMAP +}`,oI=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vec3 cameraToFrag; if ( isOrthographic ) { @@ -569,7 +569,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #elif defined( ENVMAP_BLENDING_ADD ) outgoingLight += envColor.xyz * specularStrength * reflectivity; #endif -#endif`,ZP=`#ifdef USE_ENVMAP +#endif`,lI=`#ifdef USE_ENVMAP uniform float envMapIntensity; uniform float flipEnvMap; uniform mat3 envMapRotation; @@ -579,7 +579,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform sampler2D envMap; #endif -#endif`,JP=`#ifdef USE_ENVMAP +#endif`,cI=`#ifdef USE_ENVMAP uniform float reflectivity; #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS @@ -590,7 +590,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #else varying vec3 vReflect; #endif -#endif`,QP=`#ifdef USE_ENVMAP +#endif`,uI=`#ifdef USE_ENVMAP #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS #endif @@ -601,7 +601,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { varying vec3 vReflect; uniform float refractionRatio; #endif -#endif`,eI=`#ifdef USE_ENVMAP +#endif`,dI=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vWorldPosition = worldPosition.xyz; #else @@ -618,18 +618,18 @@ vec4 sRGBTransferOETF( in vec4 value ) { vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); #endif #endif -#endif`,tI=`#ifdef USE_FOG +#endif`,hI=`#ifdef USE_FOG vFogDepth = - mvPosition.z; -#endif`,nI=`#ifdef USE_FOG +#endif`,fI=`#ifdef USE_FOG varying float vFogDepth; -#endif`,iI=`#ifdef USE_FOG +#endif`,pI=`#ifdef USE_FOG #ifdef FOG_EXP2 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); #else float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); #endif gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,sI=`#ifdef USE_FOG +#endif`,mI=`#ifdef USE_FOG uniform vec3 fogColor; varying float vFogDepth; #ifdef FOG_EXP2 @@ -638,7 +638,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform float fogNear; uniform float fogFar; #endif -#endif`,aI=`#ifdef USE_GRADIENTMAP +#endif`,_I=`#ifdef USE_GRADIENTMAP uniform sampler2D gradientMap; #endif vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { @@ -650,12 +650,12 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { vec2 fw = fwidth( coord ) * 0.5; return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); #endif -}`,rI=`#ifdef USE_LIGHTMAP +}`,gI=`#ifdef USE_LIGHTMAP uniform sampler2D lightMap; uniform float lightMapIntensity; -#endif`,oI=`LambertMaterial material; +#endif`,yI=`LambertMaterial material; material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,lI=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,vI=`varying vec3 vViewPosition; struct LambertMaterial { vec3 diffuseColor; float specularStrength; @@ -669,7 +669,7 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometr reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,cI=`uniform bool receiveShadow; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,bI=`uniform bool receiveShadow; uniform vec3 ambientLightColor; #if defined( USE_LIGHT_PROBES ) uniform vec3 lightProbe[ 9 ]; @@ -785,7 +785,7 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); return irradiance; } -#endif`,uI=`#ifdef USE_ENVMAP +#endif`,xI=`#ifdef USE_ENVMAP vec3 getIBLIrradiance( const in vec3 normal ) { #ifdef ENVMAP_TYPE_CUBE_UV vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); @@ -818,8 +818,8 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi #endif } #endif -#endif`,dI=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,hI=`varying vec3 vViewPosition; +#endif`,wI=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,SI=`varying vec3 vViewPosition; struct ToonMaterial { vec3 diffuseColor; }; @@ -831,11 +831,11 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPo reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,fI=`BlinnPhongMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,TI=`BlinnPhongMaterial material; material.diffuseColor = diffuseColor.rgb; material.specularColor = specular; material.specularShininess = shininess; -material.specularStrength = specularStrength;`,pI=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,MI=`varying vec3 vViewPosition; struct BlinnPhongMaterial { vec3 diffuseColor; vec3 specularColor; @@ -852,7 +852,7 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geom reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,mI=`PhysicalMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,EI=`PhysicalMaterial material; material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); @@ -938,7 +938,7 @@ material.roughness = min( material.roughness, 1.0 ); material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,_I=`struct PhysicalMaterial { +#endif`,CI=`struct PhysicalMaterial { vec3 diffuseColor; float roughness; vec3 specularColor; @@ -1239,7 +1239,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia #define RE_IndirectSpecular RE_IndirectSpecular_Physical float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,gI=` +}`,AI=` vec3 geometryPosition = - vViewPosition; vec3 geometryNormal = normal; vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); @@ -1354,7 +1354,7 @@ IncidentLight directLight; #if defined( RE_IndirectSpecular ) vec3 radiance = vec3( 0.0 ); vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,yI=`#if defined( RE_IndirectDiffuse ) +#endif`,RI=`#if defined( RE_IndirectDiffuse ) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; @@ -1373,32 +1373,32 @@ IncidentLight directLight; #ifdef USE_CLEARCOAT clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); #endif -#endif`,vI=`#if defined( RE_IndirectDiffuse ) +#endif`,PI=`#if defined( RE_IndirectDiffuse ) RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); #endif #if defined( RE_IndirectSpecular ) RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,bI=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,II=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,xI=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,LI=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) uniform float logDepthBufFC; varying float vFragDepth; varying float vIsPerspective; -#endif`,wI=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,kI=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER varying float vFragDepth; varying float vIsPerspective; -#endif`,SI=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,DI=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER vFragDepth = 1.0 + gl_Position.w; vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,TI=`#ifdef USE_MAP +#endif`,OI=`#ifdef USE_MAP vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); #endif diffuseColor *= sampledDiffuseColor; -#endif`,MI=`#ifdef USE_MAP +#endif`,FI=`#ifdef USE_MAP uniform sampler2D map; -#endif`,EI=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) +#endif`,NI=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) #if defined( USE_POINTS_UV ) vec2 uv = vUv; #else @@ -1410,7 +1410,7 @@ IncidentLight directLight; #endif #ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,CI=`#if defined( USE_POINTS_UV ) +#endif`,UI=`#if defined( USE_POINTS_UV ) varying vec2 vUv; #else #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) @@ -1422,19 +1422,19 @@ IncidentLight directLight; #endif #ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,AI=`float metalnessFactor = metalness; +#endif`,BI=`float metalnessFactor = metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); metalnessFactor *= texelMetalness.b; -#endif`,RI=`#ifdef USE_METALNESSMAP +#endif`,zI=`#ifdef USE_METALNESSMAP uniform sampler2D metalnessMap; -#endif`,PI=`#ifdef USE_INSTANCING_MORPH +#endif`,HI=`#ifdef USE_INSTANCING_MORPH float morphTargetInfluences[ MORPHTARGETS_COUNT ]; float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; } -#endif`,II=`#if defined( USE_MORPHCOLORS ) +#endif`,VI=`#if defined( USE_MORPHCOLORS ) vColor *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { #if defined( USE_COLOR_ALPHA ) @@ -1443,12 +1443,12 @@ IncidentLight directLight; if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; #endif } -#endif`,LI=`#ifdef USE_MORPHNORMALS +#endif`,GI=`#ifdef USE_MORPHNORMALS objectNormal *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; } -#endif`,DI=`#ifdef USE_MORPHTARGETS +#endif`,$I=`#ifdef USE_MORPHTARGETS #ifndef USE_INSTANCING_MORPH uniform float morphTargetBaseInfluence; uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; @@ -1462,12 +1462,12 @@ IncidentLight directLight; ivec3 morphUV = ivec3( x, y, morphTargetIndex ); return texelFetch( morphTargetsTexture, morphUV, 0 ); } -#endif`,kI=`#ifdef USE_MORPHTARGETS +#endif`,WI=`#ifdef USE_MORPHTARGETS transformed *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; } -#endif`,OI=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#endif`,XI=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #ifdef FLAT_SHADED vec3 fdx = dFdx( vViewPosition ); vec3 fdy = dFdy( vViewPosition ); @@ -1508,7 +1508,7 @@ IncidentLight directLight; tbn2[1] *= faceDirection; #endif #endif -vec3 nonPerturbedNormal = normal;`,FI=`#ifdef USE_NORMALMAP_OBJECTSPACE +vec3 nonPerturbedNormal = normal;`,KI=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; #ifdef FLIP_SIDED normal = - normal; @@ -1523,25 +1523,25 @@ vec3 nonPerturbedNormal = normal;`,FI=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = normalize( tbn * mapN ); #elif defined( USE_BUMPMAP ) normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,NI=`#ifndef FLAT_SHADED +#endif`,qI=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,UI=`#ifndef FLAT_SHADED +#endif`,YI=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,BI=`#ifndef FLAT_SHADED +#endif`,jI=`#ifndef FLAT_SHADED vNormal = normalize( transformedNormal ); #ifdef USE_TANGENT vTangent = normalize( transformedTangent ); vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); #endif -#endif`,zI=`#ifdef USE_NORMALMAP +#endif`,ZI=`#ifdef USE_NORMALMAP uniform sampler2D normalMap; uniform vec2 normalScale; #endif @@ -1563,13 +1563,13 @@ vec3 nonPerturbedNormal = normal;`,FI=`#ifdef USE_NORMALMAP_OBJECTSPACE float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); return mat3( T * scale, B * scale, N ); } -#endif`,HI=`#ifdef USE_CLEARCOAT +#endif`,JI=`#ifdef USE_CLEARCOAT vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,VI=`#ifdef USE_CLEARCOAT_NORMALMAP +#endif`,QI=`#ifdef USE_CLEARCOAT_NORMALMAP vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,GI=`#ifdef USE_CLEARCOATMAP +#endif`,eL=`#ifdef USE_CLEARCOATMAP uniform sampler2D clearcoatMap; #endif #ifdef USE_CLEARCOAT_NORMALMAP @@ -1578,18 +1578,18 @@ vec3 nonPerturbedNormal = normal;`,FI=`#ifdef USE_NORMALMAP_OBJECTSPACE #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP uniform sampler2D clearcoatRoughnessMap; -#endif`,$I=`#ifdef USE_IRIDESCENCEMAP +#endif`,tL=`#ifdef USE_IRIDESCENCEMAP uniform sampler2D iridescenceMap; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP uniform sampler2D iridescenceThicknessMap; -#endif`,WI=`#ifdef OPAQUE +#endif`,nL=`#ifdef OPAQUE diffuseColor.a = 1.0; #endif #ifdef USE_TRANSMISSION diffuseColor.a *= material.transmissionAlpha; #endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,XI=`vec3 packNormalToRGB( const in vec3 normal ) { +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,iL=`vec3 packNormalToRGB( const in vec3 normal ) { return normalize( normal ) * 0.5 + 0.5; } vec3 unpackRGBToNormal( const in vec3 rgb ) { @@ -1658,9 +1658,9 @@ float viewZToPerspectiveDepth( const in float viewZ, const in float near, const } float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { return ( near * far ) / ( ( far - near ) * depth - far ); -}`,KI=`#ifdef PREMULTIPLIED_ALPHA +}`,sL=`#ifdef PREMULTIPLIED_ALPHA gl_FragColor.rgb *= gl_FragColor.a; -#endif`,qI=`vec4 mvPosition = vec4( transformed, 1.0 ); +#endif`,aL=`vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING mvPosition = batchingMatrix * mvPosition; #endif @@ -1668,22 +1668,22 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const mvPosition = instanceMatrix * mvPosition; #endif mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING +gl_Position = projectionMatrix * mvPosition;`,rL=`#ifdef DITHERING gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,jI=`#ifdef DITHERING +#endif`,oL=`#ifdef DITHERING vec3 dithering( vec3 color ) { float grid_position = rand( gl_FragCoord.xy ); vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); return color + dither_shift_RGB; } -#endif`,ZI=`float roughnessFactor = roughness; +#endif`,lL=`float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); roughnessFactor *= texelRoughness.g; -#endif`,JI=`#ifdef USE_ROUGHNESSMAP +#endif`,cL=`#ifdef USE_ROUGHNESSMAP uniform sampler2D roughnessMap; -#endif`,QI=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,uL=`#if NUM_SPOT_LIGHT_COORDS > 0 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif #if NUM_SPOT_LIGHT_MAPS > 0 @@ -1878,7 +1878,7 @@ gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING } return mix( 1.0, shadow, shadowIntensity ); } -#endif`,eL=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,dL=`#if NUM_SPOT_LIGHT_COORDS > 0 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif @@ -1919,7 +1919,7 @@ gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING }; uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; #endif -#endif`,tL=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) +#endif`,hL=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); vec4 shadowWorldPosition; #endif @@ -1951,7 +1951,7 @@ gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end -#endif`,nL=`float getShadowMask() { +#endif`,fL=`float getShadowMask() { float shadow = 1.0; #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 @@ -1983,12 +1983,12 @@ gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING #endif #endif return shadow; -}`,iL=`#ifdef USE_SKINNING +}`,pL=`#ifdef USE_SKINNING mat4 boneMatX = getBoneMatrix( skinIndex.x ); mat4 boneMatY = getBoneMatrix( skinIndex.y ); mat4 boneMatZ = getBoneMatrix( skinIndex.z ); mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,sL=`#ifdef USE_SKINNING +#endif`,mL=`#ifdef USE_SKINNING uniform mat4 bindMatrix; uniform mat4 bindMatrixInverse; uniform highp sampler2D boneTexture; @@ -2003,7 +2003,7 @@ gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); return mat4( v1, v2, v3, v4 ); } -#endif`,aL=`#ifdef USE_SKINNING +#endif`,_L=`#ifdef USE_SKINNING vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); vec4 skinned = vec4( 0.0 ); skinned += boneMatX * skinVertex * skinWeight.x; @@ -2011,7 +2011,7 @@ gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING skinned += boneMatZ * skinVertex * skinWeight.z; skinned += boneMatW * skinVertex * skinWeight.w; transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,rL=`#ifdef USE_SKINNING +#endif`,gL=`#ifdef USE_SKINNING mat4 skinMatrix = mat4( 0.0 ); skinMatrix += skinWeight.x * boneMatX; skinMatrix += skinWeight.y * boneMatY; @@ -2022,17 +2022,17 @@ gl_Position = projectionMatrix * mvPosition;`,YI=`#ifdef DITHERING #ifdef USE_TANGENT objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif -#endif`,oL=`float specularStrength; +#endif`,yL=`float specularStrength; #ifdef USE_SPECULARMAP vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else specularStrength = 1.0; -#endif`,lL=`#ifdef USE_SPECULARMAP +#endif`,vL=`#ifdef USE_SPECULARMAP uniform sampler2D specularMap; -#endif`,cL=`#if defined( TONE_MAPPING ) +#endif`,bL=`#if defined( TONE_MAPPING ) gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,uL=`#ifndef saturate +#endif`,xL=`#ifndef saturate #define saturate( a ) clamp( a, 0.0, 1.0 ) #endif uniform float toneMappingExposure; @@ -2129,7 +2129,7 @@ vec3 NeutralToneMapping( vec3 color ) { float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); return mix( color, vec3( newPeak ), g ); } -vec3 CustomToneMapping( vec3 color ) { return color; }`,dL=`#ifdef USE_TRANSMISSION +vec3 CustomToneMapping( vec3 color ) { return color; }`,wL=`#ifdef USE_TRANSMISSION material.transmission = transmission; material.transmissionAlpha = 1.0; material.thickness = thickness; @@ -2150,7 +2150,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,dL=`#ifdef USE_TRANSMISS material.attenuationColor, material.attenuationDistance ); material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,hL=`#ifdef USE_TRANSMISSION +#endif`,SL=`#ifdef USE_TRANSMISSION uniform float transmission; uniform float thickness; uniform float attenuationDistance; @@ -2276,7 +2276,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,dL=`#ifdef USE_TRANSMISS float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); } -#endif`,fL=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,TL=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2346,7 +2346,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,dL=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,pL=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,ML=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2440,7 +2440,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,dL=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,mL=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,EL=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) vUv = vec3( uv, 1 ).xy; #endif #ifdef USE_MAP @@ -2511,7 +2511,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,dL=`#ifdef USE_TRANSMISS #endif #ifdef USE_THICKNESSMAP vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,_L=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 +#endif`,CL=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 vec4 worldPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING worldPosition = batchingMatrix * worldPosition; @@ -2520,12 +2520,12 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,dL=`#ifdef USE_TRANSMISS worldPosition = instanceMatrix * worldPosition; #endif worldPosition = modelMatrix * worldPosition; -#endif`;const gL=`varying vec2 vUv; +#endif`;const AL=`varying vec2 vUv; uniform mat3 uvTransform; void main() { vUv = ( uvTransform * vec3( uv, 1 ) ).xy; gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,yL=`uniform sampler2D t2D; +}`,RL=`uniform sampler2D t2D; uniform float backgroundIntensity; varying vec2 vUv; void main() { @@ -2537,14 +2537,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,vL=`varying vec3 vWorldDirection; +}`,PL=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,bL=`#ifdef ENVMAP_TYPE_CUBE +}`,IL=`#ifdef ENVMAP_TYPE_CUBE uniform samplerCube envMap; #elif defined( ENVMAP_TYPE_CUBE_UV ) uniform sampler2D envMap; @@ -2567,14 +2567,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,xL=`varying vec3 vWorldDirection; +}`,LL=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,wL=`uniform samplerCube tCube; +}`,kL=`uniform samplerCube tCube; uniform float tFlip; uniform float opacity; varying vec3 vWorldDirection; @@ -2584,7 +2584,7 @@ void main() { gl_FragColor.a *= opacity; #include #include -}`,SL=`#include +}`,DL=`#include #include #include #include @@ -2611,7 +2611,7 @@ void main() { #include #include vHighPrecisionZW = gl_Position.zw; -}`,TL=`#if DEPTH_PACKING == 3200 +}`,OL=`#if DEPTH_PACKING == 3200 uniform float opacity; #endif #include @@ -2649,7 +2649,7 @@ void main() { #elif DEPTH_PACKING == 3203 gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); #endif -}`,ML=`#define DISTANCE +}`,FL=`#define DISTANCE varying vec3 vWorldPosition; #include #include @@ -2676,7 +2676,7 @@ void main() { #include #include vWorldPosition = worldPosition.xyz; -}`,EL=`#define DISTANCE +}`,NL=`#define DISTANCE uniform vec3 referencePosition; uniform float nearDistance; uniform float farDistance; @@ -2700,13 +2700,13 @@ void main () { dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); dist = saturate( dist ); gl_FragColor = packDepthToRGBA( dist ); -}`,CL=`varying vec3 vWorldDirection; +}`,UL=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include -}`,AL=`uniform sampler2D tEquirect; +}`,BL=`uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { @@ -2715,7 +2715,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); #include #include -}`,RL=`uniform float scale; +}`,zL=`uniform float scale; attribute float lineDistance; varying float vLineDistance; #include @@ -2737,7 +2737,7 @@ void main() { #include #include #include -}`,PL=`uniform vec3 diffuse; +}`,HL=`uniform vec3 diffuse; uniform float opacity; uniform float dashSize; uniform float totalSize; @@ -2765,7 +2765,7 @@ void main() { #include #include #include -}`,IL=`#include +}`,VL=`#include #include #include #include @@ -2797,7 +2797,7 @@ void main() { #include #include #include -}`,LL=`uniform vec3 diffuse; +}`,GL=`uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; @@ -2845,7 +2845,7 @@ void main() { #include #include #include -}`,DL=`#define LAMBERT +}`,$L=`#define LAMBERT varying vec3 vViewPosition; #include #include @@ -2884,7 +2884,7 @@ void main() { #include #include #include -}`,kL=`#define LAMBERT +}`,WL=`#define LAMBERT uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -2941,7 +2941,7 @@ void main() { #include #include #include -}`,OL=`#define MATCAP +}`,XL=`#define MATCAP varying vec3 vViewPosition; #include #include @@ -2975,7 +2975,7 @@ void main() { #include #include vViewPosition = - mvPosition.xyz; -}`,FL=`#define MATCAP +}`,KL=`#define MATCAP uniform vec3 diffuse; uniform float opacity; uniform sampler2D matcap; @@ -3021,7 +3021,7 @@ void main() { #include #include #include -}`,NL=`#define NORMAL +}`,qL=`#define NORMAL #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; #endif @@ -3054,7 +3054,7 @@ void main() { #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) vViewPosition = - mvPosition.xyz; #endif -}`,UL=`#define NORMAL +}`,YL=`#define NORMAL uniform float opacity; #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; @@ -3076,7 +3076,7 @@ void main() { #ifdef OPAQUE gl_FragColor.a = 1.0; #endif -}`,BL=`#define PHONG +}`,jL=`#define PHONG varying vec3 vViewPosition; #include #include @@ -3115,7 +3115,7 @@ void main() { #include #include #include -}`,zL=`#define PHONG +}`,ZL=`#define PHONG uniform vec3 diffuse; uniform vec3 emissive; uniform vec3 specular; @@ -3174,7 +3174,7 @@ void main() { #include #include #include -}`,HL=`#define STANDARD +}`,JL=`#define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; @@ -3217,7 +3217,7 @@ void main() { #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif -}`,VL=`#define STANDARD +}`,QL=`#define STANDARD #ifdef PHYSICAL #define IOR #define USE_SPECULAR @@ -3342,7 +3342,7 @@ void main() { #include #include #include -}`,GL=`#define TOON +}`,e2=`#define TOON varying vec3 vViewPosition; #include #include @@ -3379,7 +3379,7 @@ void main() { #include #include #include -}`,$L=`#define TOON +}`,t2=`#define TOON uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3432,7 +3432,7 @@ void main() { #include #include #include -}`,WL=`uniform float size; +}`,n2=`uniform float size; uniform float scale; #include #include @@ -3463,7 +3463,7 @@ void main() { #include #include #include -}`,XL=`uniform vec3 diffuse; +}`,i2=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3488,7 +3488,7 @@ void main() { #include #include #include -}`,KL=`#include +}`,s2=`#include #include #include #include @@ -3511,7 +3511,7 @@ void main() { #include #include #include -}`,qL=`uniform vec3 color; +}`,a2=`uniform vec3 color; uniform float opacity; #include #include @@ -3527,7 +3527,7 @@ void main() { #include #include #include -}`,YL=`uniform float rotation; +}`,r2=`uniform float rotation; uniform vec2 center; #include #include @@ -3551,7 +3551,7 @@ void main() { #include #include #include -}`,jL=`uniform vec3 diffuse; +}`,o2=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3576,7 +3576,7 @@ void main() { #include #include #include -}`,mt={alphahash_fragment:yP,alphahash_pars_fragment:vP,alphamap_fragment:bP,alphamap_pars_fragment:xP,alphatest_fragment:wP,alphatest_pars_fragment:SP,aomap_fragment:TP,aomap_pars_fragment:MP,batching_pars_vertex:EP,batching_vertex:CP,begin_vertex:AP,beginnormal_vertex:RP,bsdfs:PP,iridescence_fragment:IP,bumpmap_pars_fragment:LP,clipping_planes_fragment:DP,clipping_planes_pars_fragment:kP,clipping_planes_pars_vertex:OP,clipping_planes_vertex:FP,color_fragment:NP,color_pars_fragment:UP,color_pars_vertex:BP,color_vertex:zP,common:HP,cube_uv_reflection_fragment:VP,defaultnormal_vertex:GP,displacementmap_pars_vertex:$P,displacementmap_vertex:WP,emissivemap_fragment:XP,emissivemap_pars_fragment:KP,colorspace_fragment:qP,colorspace_pars_fragment:YP,envmap_fragment:jP,envmap_common_pars_fragment:ZP,envmap_pars_fragment:JP,envmap_pars_vertex:QP,envmap_physical_pars_fragment:uI,envmap_vertex:eI,fog_vertex:tI,fog_pars_vertex:nI,fog_fragment:iI,fog_pars_fragment:sI,gradientmap_pars_fragment:aI,lightmap_pars_fragment:rI,lights_lambert_fragment:oI,lights_lambert_pars_fragment:lI,lights_pars_begin:cI,lights_toon_fragment:dI,lights_toon_pars_fragment:hI,lights_phong_fragment:fI,lights_phong_pars_fragment:pI,lights_physical_fragment:mI,lights_physical_pars_fragment:_I,lights_fragment_begin:gI,lights_fragment_maps:yI,lights_fragment_end:vI,logdepthbuf_fragment:bI,logdepthbuf_pars_fragment:xI,logdepthbuf_pars_vertex:wI,logdepthbuf_vertex:SI,map_fragment:TI,map_pars_fragment:MI,map_particle_fragment:EI,map_particle_pars_fragment:CI,metalnessmap_fragment:AI,metalnessmap_pars_fragment:RI,morphinstance_vertex:PI,morphcolor_vertex:II,morphnormal_vertex:LI,morphtarget_pars_vertex:DI,morphtarget_vertex:kI,normal_fragment_begin:OI,normal_fragment_maps:FI,normal_pars_fragment:NI,normal_pars_vertex:UI,normal_vertex:BI,normalmap_pars_fragment:zI,clearcoat_normal_fragment_begin:HI,clearcoat_normal_fragment_maps:VI,clearcoat_pars_fragment:GI,iridescence_pars_fragment:$I,opaque_fragment:WI,packing:XI,premultiplied_alpha_fragment:KI,project_vertex:qI,dithering_fragment:YI,dithering_pars_fragment:jI,roughnessmap_fragment:ZI,roughnessmap_pars_fragment:JI,shadowmap_pars_fragment:QI,shadowmap_pars_vertex:eL,shadowmap_vertex:tL,shadowmask_pars_fragment:nL,skinbase_vertex:iL,skinning_pars_vertex:sL,skinning_vertex:aL,skinnormal_vertex:rL,specularmap_fragment:oL,specularmap_pars_fragment:lL,tonemapping_fragment:cL,tonemapping_pars_fragment:uL,transmission_fragment:dL,transmission_pars_fragment:hL,uv_pars_fragment:fL,uv_pars_vertex:pL,uv_vertex:mL,worldpos_vertex:_L,background_vert:gL,background_frag:yL,backgroundCube_vert:vL,backgroundCube_frag:bL,cube_vert:xL,cube_frag:wL,depth_vert:SL,depth_frag:TL,distanceRGBA_vert:ML,distanceRGBA_frag:EL,equirect_vert:CL,equirect_frag:AL,linedashed_vert:RL,linedashed_frag:PL,meshbasic_vert:IL,meshbasic_frag:LL,meshlambert_vert:DL,meshlambert_frag:kL,meshmatcap_vert:OL,meshmatcap_frag:FL,meshnormal_vert:NL,meshnormal_frag:UL,meshphong_vert:BL,meshphong_frag:zL,meshphysical_vert:HL,meshphysical_frag:VL,meshtoon_vert:GL,meshtoon_frag:$L,points_vert:WL,points_frag:XL,shadow_vert:KL,shadow_frag:qL,sprite_vert:YL,sprite_frag:jL},Te={common:{diffuse:{value:new ue(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new st},alphaMap:{value:null},alphaMapTransform:{value:new st},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new st}},envmap:{envMap:{value:null},envMapRotation:{value:new st},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new st}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new st}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new st},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new st},normalScale:{value:new te(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new st},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new st}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new st}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new st}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ue(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ue(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new st},alphaTest:{value:0},uvTransform:{value:new st}},sprite:{diffuse:{value:new ue(16777215)},opacity:{value:1},center:{value:new te(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new st},alphaMap:{value:null},alphaMapTransform:{value:new st},alphaTest:{value:0}}},Wi={basic:{uniforms:Nn([Te.common,Te.specularmap,Te.envmap,Te.aomap,Te.lightmap,Te.fog]),vertexShader:mt.meshbasic_vert,fragmentShader:mt.meshbasic_frag},lambert:{uniforms:Nn([Te.common,Te.specularmap,Te.envmap,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.fog,Te.lights,{emissive:{value:new ue(0)}}]),vertexShader:mt.meshlambert_vert,fragmentShader:mt.meshlambert_frag},phong:{uniforms:Nn([Te.common,Te.specularmap,Te.envmap,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.fog,Te.lights,{emissive:{value:new ue(0)},specular:{value:new ue(1118481)},shininess:{value:30}}]),vertexShader:mt.meshphong_vert,fragmentShader:mt.meshphong_frag},standard:{uniforms:Nn([Te.common,Te.envmap,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.roughnessmap,Te.metalnessmap,Te.fog,Te.lights,{emissive:{value:new ue(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:mt.meshphysical_vert,fragmentShader:mt.meshphysical_frag},toon:{uniforms:Nn([Te.common,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.gradientmap,Te.fog,Te.lights,{emissive:{value:new ue(0)}}]),vertexShader:mt.meshtoon_vert,fragmentShader:mt.meshtoon_frag},matcap:{uniforms:Nn([Te.common,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.fog,{matcap:{value:null}}]),vertexShader:mt.meshmatcap_vert,fragmentShader:mt.meshmatcap_frag},points:{uniforms:Nn([Te.points,Te.fog]),vertexShader:mt.points_vert,fragmentShader:mt.points_frag},dashed:{uniforms:Nn([Te.common,Te.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:mt.linedashed_vert,fragmentShader:mt.linedashed_frag},depth:{uniforms:Nn([Te.common,Te.displacementmap]),vertexShader:mt.depth_vert,fragmentShader:mt.depth_frag},normal:{uniforms:Nn([Te.common,Te.bumpmap,Te.normalmap,Te.displacementmap,{opacity:{value:1}}]),vertexShader:mt.meshnormal_vert,fragmentShader:mt.meshnormal_frag},sprite:{uniforms:Nn([Te.sprite,Te.fog]),vertexShader:mt.sprite_vert,fragmentShader:mt.sprite_frag},background:{uniforms:{uvTransform:{value:new st},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:mt.background_vert,fragmentShader:mt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new st}},vertexShader:mt.backgroundCube_vert,fragmentShader:mt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:mt.cube_vert,fragmentShader:mt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:mt.equirect_vert,fragmentShader:mt.equirect_frag},distanceRGBA:{uniforms:Nn([Te.common,Te.displacementmap,{referencePosition:{value:new S},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:mt.distanceRGBA_vert,fragmentShader:mt.distanceRGBA_frag},shadow:{uniforms:Nn([Te.lights,Te.fog,{color:{value:new ue(0)},opacity:{value:1}}]),vertexShader:mt.shadow_vert,fragmentShader:mt.shadow_frag}};Wi.physical={uniforms:Nn([Wi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new st},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new st},clearcoatNormalScale:{value:new te(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new st},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new st},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new st},sheen:{value:0},sheenColor:{value:new ue(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new st},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new st},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new st},transmissionSamplerSize:{value:new te},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new st},attenuationDistance:{value:0},attenuationColor:{value:new ue(0)},specularColor:{value:new ue(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new st},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new st},anisotropyVector:{value:new te},anisotropyMap:{value:null},anisotropyMapTransform:{value:new st}}]),vertexShader:mt.meshphysical_vert,fragmentShader:mt.meshphysical_frag};const au={r:0,b:0,g:0},Ra=new an,ZL=new Me;function JL(n,e,t,i,s,a,r){const o=new ue(0);let l=a===!0?0:1,c,u,d=null,h=0,f=null;function p(y){let b=y.isScene===!0?y.background:null;return b&&b.isTexture&&(b=(y.backgroundBlurriness>0?t:e).get(b)),b}function g(y){let b=!1;const T=p(y);T===null?m(o,l):T&&T.isColor&&(m(T,1),b=!0);const x=n.xr.getEnvironmentBlendMode();x==="additive"?i.buffers.color.setClear(0,0,0,1,r):x==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,r),(n.autoClear||b)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function _(y,b){const T=p(b);T&&(T.isCubeTexture||T.mapping===Ao)?(u===void 0&&(u=new we(new Ei(1,1,1),new ti({name:"BackgroundCubeMaterial",uniforms:Mo(Wi.backgroundCube.uniforms),vertexShader:Wi.backgroundCube.vertexShader,fragmentShader:Wi.backgroundCube.fragmentShader,side:un,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(x,M,C){this.matrixWorld.copyPosition(C.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(u)),Ra.copy(b.backgroundRotation),Ra.x*=-1,Ra.y*=-1,Ra.z*=-1,T.isCubeTexture&&T.isRenderTargetTexture===!1&&(Ra.y*=-1,Ra.z*=-1),u.material.uniforms.envMap.value=T,u.material.uniforms.flipEnvMap.value=T.isCubeTexture&&T.isRenderTargetTexture===!1?-1:1,u.material.uniforms.backgroundBlurriness.value=b.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,u.material.uniforms.backgroundRotation.value.setFromMatrix4(ZL.makeRotationFromEuler(Ra)),u.material.toneMapped=at.getTransfer(T.colorSpace)!==Pt,(d!==T||h!==T.version||f!==n.toneMapping)&&(u.material.needsUpdate=!0,d=T,h=T.version,f=n.toneMapping),u.layers.enableAll(),y.unshift(u,u.geometry,u.material,0,0,null)):T&&T.isTexture&&(c===void 0&&(c=new we(new Dn(2,2),new ti({name:"BackgroundMaterial",uniforms:Mo(Wi.background.uniforms),vertexShader:Wi.background.vertexShader,fragmentShader:Wi.background.fragmentShader,side:fs,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=T,c.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,c.material.toneMapped=at.getTransfer(T.colorSpace)!==Pt,T.matrixAutoUpdate===!0&&T.updateMatrix(),c.material.uniforms.uvTransform.value.copy(T.matrix),(d!==T||h!==T.version||f!==n.toneMapping)&&(c.material.needsUpdate=!0,d=T,h=T.version,f=n.toneMapping),c.layers.enableAll(),y.unshift(c,c.geometry,c.material,0,0,null))}function m(y,b){y.getRGB(au,fS(n)),i.buffers.color.setClear(au.r,au.g,au.b,b,r)}function v(){u!==void 0&&(u.geometry.dispose(),u.material.dispose(),u=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(y,b=1){o.set(y),l=b,m(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(y){l=y,m(o,l)},render:g,addToRenderList:_,dispose:v}}function QL(n,e){const t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},s=h(null);let a=s,r=!1;function o(E,R,D,O,k){let U=!1;const F=d(O,D,R);a!==F&&(a=F,c(a.object)),U=f(E,O,D,k),U&&p(E,O,D,k),k!==null&&e.update(k,n.ELEMENT_ARRAY_BUFFER),(U||r)&&(r=!1,b(E,R,D,O),k!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(k).buffer))}function l(){return n.createVertexArray()}function c(E){return n.bindVertexArray(E)}function u(E){return n.deleteVertexArray(E)}function d(E,R,D){const O=D.wireframe===!0;let k=i[E.id];k===void 0&&(k={},i[E.id]=k);let U=k[R.id];U===void 0&&(U={},k[R.id]=U);let F=U[O];return F===void 0&&(F=h(l()),U[O]=F),F}function h(E){const R=[],D=[],O=[];for(let k=0;k=0){const oe=k[H];let pe=U[H];if(pe===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(pe=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(pe=E.instanceColor)),oe===void 0||oe.attribute!==pe||pe&&oe.data!==pe.data)return!0;F++}return a.attributesNum!==F||a.index!==O}function p(E,R,D,O){const k={},U=R.attributes;let F=0;const W=D.getAttributes();for(const H in W)if(W[H].location>=0){let oe=U[H];oe===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(oe=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(oe=E.instanceColor));const pe={};pe.attribute=oe,oe&&oe.data&&(pe.data=oe.data),k[H]=pe,F++}a.attributes=k,a.attributesNum=F,a.index=O}function g(){const E=a.newAttributes;for(let R=0,D=E.length;R=0){let ne=k[W];if(ne===void 0&&(W==="instanceMatrix"&&E.instanceMatrix&&(ne=E.instanceMatrix),W==="instanceColor"&&E.instanceColor&&(ne=E.instanceColor)),ne!==void 0){const oe=ne.normalized,pe=ne.itemSize,Ie=e.get(ne);if(Ie===void 0)continue;const De=Ie.buffer,Xe=Ie.type,ke=Ie.bytesPerElement,Z=Xe===n.INT||Xe===n.UNSIGNED_INT||ne.gpuType===gh;if(ne.isInterleavedBufferAttribute){const se=ne.data,Se=se.stride,X=ne.offset;if(se.isInstancedInterleavedBuffer){for(let ie=0;ie0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";M="mediump"}return M==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp";const u=l(c);u!==c&&(console.warn("THREE.WebGLRenderer:",c,"not supported, using",u,"instead."),c=u);const d=t.logarithmicDepthBuffer===!0,h=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control"),f=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),p=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),g=n.getParameter(n.MAX_TEXTURE_SIZE),_=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),m=n.getParameter(n.MAX_VERTEX_ATTRIBS),v=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),y=n.getParameter(n.MAX_VARYING_VECTORS),b=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),T=p>0,x=n.getParameter(n.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:l,textureFormatReadable:r,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:d,reversedDepthBuffer:h,maxTextures:f,maxVertexTextures:p,maxTextureSize:g,maxCubemapSize:_,maxAttributes:m,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,vertexTextures:T,maxSamples:x}}function n2(n){const e=this;let t=null,i=0,s=!1,a=!1;const r=new Ps,o=new st,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(d,h){const f=d.length!==0||h||i!==0||s;return s=h,i=d.length,f},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(d,h){t=u(d,h,0)},this.setState=function(d,h,f){const p=d.clippingPlanes,g=d.clipIntersection,_=d.clipShadows,m=n.get(d);if(!s||p===null||p.length===0||a&&!_)a?u(null):c();else{const v=a?0:i,y=v*4;let b=m.clippingState||null;l.value=b,b=u(p,h,y,f);for(let T=0;T!==y;++T)b[T]=t[T];m.clippingState=b,this.numIntersection=g?this.numPlanes:0,this.numPlanes+=v}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(d,h,f,p){const g=d!==null?d.length:0;let _=null;if(g!==0){if(_=l.value,p!==!0||_===null){const m=f+g*4,v=h.matrixWorldInverse;o.getNormalMatrix(v),(_===null||_.length0){const c=new _S(l.height);return c.fromEquirectangularTexture(n,r),e.set(r,c),r.addEventListener("dispose",s),t(c.texture,r.mapping)}else return null}}return r}function s(r){const o=r.target;o.removeEventListener("dispose",s);const l=e.get(o);l!==void 0&&(e.delete(o),l.dispose())}function a(){e=new WeakMap}return{get:i,dispose:a}}const jr=4,y0=[.125,.215,.35,.446,.526,.582],Ha=20,Jf=new uc,v0=new ue;let Qf=null,ep=0,tp=0,np=!1;const Ba=(1+Math.sqrt(5))/2,Ur=1/Ba,b0=[new S(-Ba,Ur,0),new S(Ba,Ur,0),new S(-Ur,0,Ba),new S(Ur,0,Ba),new S(0,Ba,-Ur),new S(0,Ba,Ur),new S(-1,1,-1),new S(1,1,-1),new S(-1,1,1),new S(1,1,1)],s2=new S;class Jd{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,s=100,a={}){const{size:r=256,position:o=s2}=a;Qf=this._renderer.getRenderTarget(),ep=this._renderer.getActiveCubeFace(),tp=this._renderer.getActiveMipmapLevel(),np=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(r);const l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(e,i,s,l,o),t>0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=S0(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=w0(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?T:0,T,T),d.setRenderTarget(s),m&&d.render(_,l),d.render(e,l)}_.geometry.dispose(),_.material.dispose(),d.toneMapping=f,d.autoClear=h,e.background=v}_textureToCubeUV(e,t){const i=this._renderer,s=e.mapping===Bs||e.mapping===oa;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=S0()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=w0());const a=s?this._cubemapMaterial:this._equirectMaterial,r=new we(this._lodPlanes[0],a),o=a.uniforms;o.envMap.value=e;const l=this._cubeSize;ru(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(r,Jf)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;const s=this._lodPlanes.length;for(let a=1;aHa&&console.warn(`sigmaRadians, ${a}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${Ha}`);const m=[];let v=0;for(let M=0;My-jr?s-y+jr:0),x=4*(this._cubeSize-b);ru(t,T,x,3*b,2*b),l.setRenderTarget(t),l.render(d,Jf)}}function a2(n){const e=[],t=[],i=[];let s=n;const a=n-jr+1+y0.length;for(let r=0;rn-jr?l=y0[r-n+jr-1]:r===0&&(l=0),i.push(l);const c=1/(o-2),u=-c,d=1+c,h=[u,u,d,u,d,d,u,u,d,d,u,d],f=6,p=6,g=3,_=2,m=1,v=new Float32Array(g*p*f),y=new Float32Array(_*p*f),b=new Float32Array(m*p*f);for(let x=0;x2?0:-1,w=[M,C,0,M+2/3,C,0,M+2/3,C+1,0,M,C,0,M+2/3,C+1,0,M,C+1,0];v.set(w,g*p*x),y.set(h,_*p*x);const E=[x,x,x,x,x,x];b.set(E,m*p*x)}const T=new Ge;T.setAttribute("position",new rt(v,g)),T.setAttribute("uv",new rt(y,_)),T.setAttribute("faceIndex",new rt(b,m)),e.push(T),s>jr&&s--}return{lodPlanes:e,sizeLods:t,sigmas:i}}function x0(n,e,t){const i=new ms(n,e,t);return i.texture.mapping=Ao,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function ru(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function r2(n,e,t){const i=new Float32Array(Ha),s=new S(0,1,0);return new ti({name:"SphericalGaussianBlur",defines:{n:Ha,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:Mg(),fragmentShader:` +}`,mt={alphahash_fragment:RP,alphahash_pars_fragment:PP,alphamap_fragment:IP,alphamap_pars_fragment:LP,alphatest_fragment:kP,alphatest_pars_fragment:DP,aomap_fragment:OP,aomap_pars_fragment:FP,batching_pars_vertex:NP,batching_vertex:UP,begin_vertex:BP,beginnormal_vertex:zP,bsdfs:HP,iridescence_fragment:VP,bumpmap_pars_fragment:GP,clipping_planes_fragment:$P,clipping_planes_pars_fragment:WP,clipping_planes_pars_vertex:XP,clipping_planes_vertex:KP,color_fragment:qP,color_pars_fragment:YP,color_pars_vertex:jP,color_vertex:ZP,common:JP,cube_uv_reflection_fragment:QP,defaultnormal_vertex:eI,displacementmap_pars_vertex:tI,displacementmap_vertex:nI,emissivemap_fragment:iI,emissivemap_pars_fragment:sI,colorspace_fragment:aI,colorspace_pars_fragment:rI,envmap_fragment:oI,envmap_common_pars_fragment:lI,envmap_pars_fragment:cI,envmap_pars_vertex:uI,envmap_physical_pars_fragment:xI,envmap_vertex:dI,fog_vertex:hI,fog_pars_vertex:fI,fog_fragment:pI,fog_pars_fragment:mI,gradientmap_pars_fragment:_I,lightmap_pars_fragment:gI,lights_lambert_fragment:yI,lights_lambert_pars_fragment:vI,lights_pars_begin:bI,lights_toon_fragment:wI,lights_toon_pars_fragment:SI,lights_phong_fragment:TI,lights_phong_pars_fragment:MI,lights_physical_fragment:EI,lights_physical_pars_fragment:CI,lights_fragment_begin:AI,lights_fragment_maps:RI,lights_fragment_end:PI,logdepthbuf_fragment:II,logdepthbuf_pars_fragment:LI,logdepthbuf_pars_vertex:kI,logdepthbuf_vertex:DI,map_fragment:OI,map_pars_fragment:FI,map_particle_fragment:NI,map_particle_pars_fragment:UI,metalnessmap_fragment:BI,metalnessmap_pars_fragment:zI,morphinstance_vertex:HI,morphcolor_vertex:VI,morphnormal_vertex:GI,morphtarget_pars_vertex:$I,morphtarget_vertex:WI,normal_fragment_begin:XI,normal_fragment_maps:KI,normal_pars_fragment:qI,normal_pars_vertex:YI,normal_vertex:jI,normalmap_pars_fragment:ZI,clearcoat_normal_fragment_begin:JI,clearcoat_normal_fragment_maps:QI,clearcoat_pars_fragment:eL,iridescence_pars_fragment:tL,opaque_fragment:nL,packing:iL,premultiplied_alpha_fragment:sL,project_vertex:aL,dithering_fragment:rL,dithering_pars_fragment:oL,roughnessmap_fragment:lL,roughnessmap_pars_fragment:cL,shadowmap_pars_fragment:uL,shadowmap_pars_vertex:dL,shadowmap_vertex:hL,shadowmask_pars_fragment:fL,skinbase_vertex:pL,skinning_pars_vertex:mL,skinning_vertex:_L,skinnormal_vertex:gL,specularmap_fragment:yL,specularmap_pars_fragment:vL,tonemapping_fragment:bL,tonemapping_pars_fragment:xL,transmission_fragment:wL,transmission_pars_fragment:SL,uv_pars_fragment:TL,uv_pars_vertex:ML,uv_vertex:EL,worldpos_vertex:CL,background_vert:AL,background_frag:RL,backgroundCube_vert:PL,backgroundCube_frag:IL,cube_vert:LL,cube_frag:kL,depth_vert:DL,depth_frag:OL,distanceRGBA_vert:FL,distanceRGBA_frag:NL,equirect_vert:UL,equirect_frag:BL,linedashed_vert:zL,linedashed_frag:HL,meshbasic_vert:VL,meshbasic_frag:GL,meshlambert_vert:$L,meshlambert_frag:WL,meshmatcap_vert:XL,meshmatcap_frag:KL,meshnormal_vert:qL,meshnormal_frag:YL,meshphong_vert:jL,meshphong_frag:ZL,meshphysical_vert:JL,meshphysical_frag:QL,meshtoon_vert:e2,meshtoon_frag:t2,points_vert:n2,points_frag:i2,shadow_vert:s2,shadow_frag:a2,sprite_vert:r2,sprite_frag:o2},Te={common:{diffuse:{value:new ue(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new at},alphaMap:{value:null},alphaMapTransform:{value:new at},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new at}},envmap:{envMap:{value:null},envMapRotation:{value:new at},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new at}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new at}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new at},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new at},normalScale:{value:new te(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new at},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new at}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new at}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new at}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new ue(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new ue(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new at},alphaTest:{value:0},uvTransform:{value:new at}},sprite:{diffuse:{value:new ue(16777215)},opacity:{value:1},center:{value:new te(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new at},alphaMap:{value:null},alphaMapTransform:{value:new at},alphaTest:{value:0}}},Xi={basic:{uniforms:Nn([Te.common,Te.specularmap,Te.envmap,Te.aomap,Te.lightmap,Te.fog]),vertexShader:mt.meshbasic_vert,fragmentShader:mt.meshbasic_frag},lambert:{uniforms:Nn([Te.common,Te.specularmap,Te.envmap,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.fog,Te.lights,{emissive:{value:new ue(0)}}]),vertexShader:mt.meshlambert_vert,fragmentShader:mt.meshlambert_frag},phong:{uniforms:Nn([Te.common,Te.specularmap,Te.envmap,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.fog,Te.lights,{emissive:{value:new ue(0)},specular:{value:new ue(1118481)},shininess:{value:30}}]),vertexShader:mt.meshphong_vert,fragmentShader:mt.meshphong_frag},standard:{uniforms:Nn([Te.common,Te.envmap,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.roughnessmap,Te.metalnessmap,Te.fog,Te.lights,{emissive:{value:new ue(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:mt.meshphysical_vert,fragmentShader:mt.meshphysical_frag},toon:{uniforms:Nn([Te.common,Te.aomap,Te.lightmap,Te.emissivemap,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.gradientmap,Te.fog,Te.lights,{emissive:{value:new ue(0)}}]),vertexShader:mt.meshtoon_vert,fragmentShader:mt.meshtoon_frag},matcap:{uniforms:Nn([Te.common,Te.bumpmap,Te.normalmap,Te.displacementmap,Te.fog,{matcap:{value:null}}]),vertexShader:mt.meshmatcap_vert,fragmentShader:mt.meshmatcap_frag},points:{uniforms:Nn([Te.points,Te.fog]),vertexShader:mt.points_vert,fragmentShader:mt.points_frag},dashed:{uniforms:Nn([Te.common,Te.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:mt.linedashed_vert,fragmentShader:mt.linedashed_frag},depth:{uniforms:Nn([Te.common,Te.displacementmap]),vertexShader:mt.depth_vert,fragmentShader:mt.depth_frag},normal:{uniforms:Nn([Te.common,Te.bumpmap,Te.normalmap,Te.displacementmap,{opacity:{value:1}}]),vertexShader:mt.meshnormal_vert,fragmentShader:mt.meshnormal_frag},sprite:{uniforms:Nn([Te.sprite,Te.fog]),vertexShader:mt.sprite_vert,fragmentShader:mt.sprite_frag},background:{uniforms:{uvTransform:{value:new at},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:mt.background_vert,fragmentShader:mt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new at}},vertexShader:mt.backgroundCube_vert,fragmentShader:mt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:mt.cube_vert,fragmentShader:mt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:mt.equirect_vert,fragmentShader:mt.equirect_frag},distanceRGBA:{uniforms:Nn([Te.common,Te.displacementmap,{referencePosition:{value:new S},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:mt.distanceRGBA_vert,fragmentShader:mt.distanceRGBA_frag},shadow:{uniforms:Nn([Te.lights,Te.fog,{color:{value:new ue(0)},opacity:{value:1}}]),vertexShader:mt.shadow_vert,fragmentShader:mt.shadow_frag}};Xi.physical={uniforms:Nn([Xi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new at},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new at},clearcoatNormalScale:{value:new te(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new at},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new at},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new at},sheen:{value:0},sheenColor:{value:new ue(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new at},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new at},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new at},transmissionSamplerSize:{value:new te},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new at},attenuationDistance:{value:0},attenuationColor:{value:new ue(0)},specularColor:{value:new ue(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new at},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new at},anisotropyVector:{value:new te},anisotropyMap:{value:null},anisotropyMapTransform:{value:new at}}]),vertexShader:mt.meshphysical_vert,fragmentShader:mt.meshphysical_frag};const cu={r:0,b:0,g:0},Pa=new an,l2=new Me;function c2(n,e,t,i,s,a,r){const o=new ue(0);let l=a===!0?0:1,c,u,d=null,h=0,f=null;function p(y){let b=y.isScene===!0?y.background:null;return b&&b.isTexture&&(b=(y.backgroundBlurriness>0?t:e).get(b)),b}function g(y){let b=!1;const T=p(y);T===null?m(o,l):T&&T.isColor&&(m(T,1),b=!0);const x=n.xr.getEnvironmentBlendMode();x==="additive"?i.buffers.color.setClear(0,0,0,1,r):x==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,r),(n.autoClear||b)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function _(y,b){const T=p(b);T&&(T.isCubeTexture||T.mapping===Io)?(u===void 0&&(u=new we(new Ci(1,1,1),new ti({name:"BackgroundCubeMaterial",uniforms:Ao(Xi.backgroundCube.uniforms),vertexShader:Xi.backgroundCube.vertexShader,fragmentShader:Xi.backgroundCube.fragmentShader,side:un,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(x,M,C){this.matrixWorld.copyPosition(C.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(u)),Pa.copy(b.backgroundRotation),Pa.x*=-1,Pa.y*=-1,Pa.z*=-1,T.isCubeTexture&&T.isRenderTargetTexture===!1&&(Pa.y*=-1,Pa.z*=-1),u.material.uniforms.envMap.value=T,u.material.uniforms.flipEnvMap.value=T.isCubeTexture&&T.isRenderTargetTexture===!1?-1:1,u.material.uniforms.backgroundBlurriness.value=b.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,u.material.uniforms.backgroundRotation.value.setFromMatrix4(l2.makeRotationFromEuler(Pa)),u.material.toneMapped=rt.getTransfer(T.colorSpace)!==Pt,(d!==T||h!==T.version||f!==n.toneMapping)&&(u.material.needsUpdate=!0,d=T,h=T.version,f=n.toneMapping),u.layers.enableAll(),y.unshift(u,u.geometry,u.material,0,0,null)):T&&T.isTexture&&(c===void 0&&(c=new we(new kn(2,2),new ti({name:"BackgroundMaterial",uniforms:Ao(Xi.background.uniforms),vertexShader:Xi.background.vertexShader,fragmentShader:Xi.background.fragmentShader,side:fs,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=T,c.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,c.material.toneMapped=rt.getTransfer(T.colorSpace)!==Pt,T.matrixAutoUpdate===!0&&T.updateMatrix(),c.material.uniforms.uvTransform.value.copy(T.matrix),(d!==T||h!==T.version||f!==n.toneMapping)&&(c.material.needsUpdate=!0,d=T,h=T.version,f=n.toneMapping),c.layers.enableAll(),y.unshift(c,c.geometry,c.material,0,0,null))}function m(y,b){y.getRGB(cu,xS(n)),i.buffers.color.setClear(cu.r,cu.g,cu.b,b,r)}function v(){u!==void 0&&(u.geometry.dispose(),u.material.dispose(),u=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(y,b=1){o.set(y),l=b,m(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(y){l=y,m(o,l)},render:g,addToRenderList:_,dispose:v}}function u2(n,e){const t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},s=h(null);let a=s,r=!1;function o(E,R,k,O,D){let U=!1;const F=d(O,k,R);a!==F&&(a=F,c(a.object)),U=f(E,O,k,D),U&&p(E,O,k,D),D!==null&&e.update(D,n.ELEMENT_ARRAY_BUFFER),(U||r)&&(r=!1,b(E,R,k,O),D!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(D).buffer))}function l(){return n.createVertexArray()}function c(E){return n.bindVertexArray(E)}function u(E){return n.deleteVertexArray(E)}function d(E,R,k){const O=k.wireframe===!0;let D=i[E.id];D===void 0&&(D={},i[E.id]=D);let U=D[R.id];U===void 0&&(U={},D[R.id]=U);let F=U[O];return F===void 0&&(F=h(l()),U[O]=F),F}function h(E){const R=[],k=[],O=[];for(let D=0;D=0){const oe=D[H];let pe=U[H];if(pe===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(pe=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(pe=E.instanceColor)),oe===void 0||oe.attribute!==pe||pe&&oe.data!==pe.data)return!0;F++}return a.attributesNum!==F||a.index!==O}function p(E,R,k,O){const D={},U=R.attributes;let F=0;const W=k.getAttributes();for(const H in W)if(W[H].location>=0){let oe=U[H];oe===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(oe=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(oe=E.instanceColor));const pe={};pe.attribute=oe,oe&&oe.data&&(pe.data=oe.data),D[H]=pe,F++}a.attributes=D,a.attributesNum=F,a.index=O}function g(){const E=a.newAttributes;for(let R=0,k=E.length;R=0){let ne=D[W];if(ne===void 0&&(W==="instanceMatrix"&&E.instanceMatrix&&(ne=E.instanceMatrix),W==="instanceColor"&&E.instanceColor&&(ne=E.instanceColor)),ne!==void 0){const oe=ne.normalized,pe=ne.itemSize,Ie=e.get(ne);if(Ie===void 0)continue;const ke=Ie.buffer,Xe=Ie.type,De=Ie.bytesPerElement,Z=Xe===n.INT||Xe===n.UNSIGNED_INT||ne.gpuType===Sh;if(ne.isInterleavedBufferAttribute){const ae=ne.data,Se=ae.stride,X=ne.offset;if(ae.isInstancedInterleavedBuffer){for(let ie=0;ie0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";M="mediump"}return M==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp";const u=l(c);u!==c&&(console.warn("THREE.WebGLRenderer:",c,"not supported, using",u,"instead."),c=u);const d=t.logarithmicDepthBuffer===!0,h=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control"),f=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),p=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),g=n.getParameter(n.MAX_TEXTURE_SIZE),_=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),m=n.getParameter(n.MAX_VERTEX_ATTRIBS),v=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),y=n.getParameter(n.MAX_VARYING_VECTORS),b=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),T=p>0,x=n.getParameter(n.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:l,textureFormatReadable:r,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:d,reversedDepthBuffer:h,maxTextures:f,maxVertexTextures:p,maxTextureSize:g,maxCubemapSize:_,maxAttributes:m,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,vertexTextures:T,maxSamples:x}}function f2(n){const e=this;let t=null,i=0,s=!1,a=!1;const r=new Ps,o=new at,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(d,h){const f=d.length!==0||h||i!==0||s;return s=h,i=d.length,f},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(d,h){t=u(d,h,0)},this.setState=function(d,h,f){const p=d.clippingPlanes,g=d.clipIntersection,_=d.clipShadows,m=n.get(d);if(!s||p===null||p.length===0||a&&!_)a?u(null):c();else{const v=a?0:i,y=v*4;let b=m.clippingState||null;l.value=b,b=u(p,h,y,f);for(let T=0;T!==y;++T)b[T]=t[T];m.clippingState=b,this.numIntersection=g?this.numPlanes:0,this.numPlanes+=v}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(d,h,f,p){const g=d!==null?d.length:0;let _=null;if(g!==0){if(_=l.value,p!==!0||_===null){const m=f+g*4,v=h.matrixWorldInverse;o.getNormalMatrix(v),(_===null||_.length0){const c=new TS(l.height);return c.fromEquirectangularTexture(n,r),e.set(r,c),r.addEventListener("dispose",s),t(c.texture,r.mapping)}else return null}}return r}function s(r){const o=r.target;o.removeEventListener("dispose",s);const l=e.get(o);l!==void 0&&(e.delete(o),l.dispose())}function a(){e=new WeakMap}return{get:i,dispose:a}}const Jr=4,M0=[.125,.215,.35,.446,.526,.582],Va=20,sp=new pc,E0=new ue;let ap=null,rp=0,op=0,lp=!1;const za=(1+Math.sqrt(5))/2,Br=1/za,C0=[new S(-za,Br,0),new S(za,Br,0),new S(-Br,0,za),new S(Br,0,za),new S(0,za,-Br),new S(0,za,Br),new S(-1,1,-1),new S(1,1,-1),new S(-1,1,1),new S(1,1,1)],m2=new S;class sh{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,s=100,a={}){const{size:r=256,position:o=m2}=a;ap=this._renderer.getRenderTarget(),rp=this._renderer.getActiveCubeFace(),op=this._renderer.getActiveMipmapLevel(),lp=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(r);const l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(e,i,s,l,o),t>0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=P0(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=R0(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?T:0,T,T),d.setRenderTarget(s),m&&d.render(_,l),d.render(e,l)}_.geometry.dispose(),_.material.dispose(),d.toneMapping=f,d.autoClear=h,e.background=v}_textureToCubeUV(e,t){const i=this._renderer,s=e.mapping===Bs||e.mapping===la;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=P0()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=R0());const a=s?this._cubemapMaterial:this._equirectMaterial,r=new we(this._lodPlanes[0],a),o=a.uniforms;o.envMap.value=e;const l=this._cubeSize;uu(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(r,sp)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;const s=this._lodPlanes.length;for(let a=1;aVa&&console.warn(`sigmaRadians, ${a}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${Va}`);const m=[];let v=0;for(let M=0;My-Jr?s-y+Jr:0),x=4*(this._cubeSize-b);uu(t,T,x,3*b,2*b),l.setRenderTarget(t),l.render(d,sp)}}function _2(n){const e=[],t=[],i=[];let s=n;const a=n-Jr+1+M0.length;for(let r=0;rn-Jr?l=M0[r-n+Jr-1]:r===0&&(l=0),i.push(l);const c=1/(o-2),u=-c,d=1+c,h=[u,u,d,u,d,d,u,u,d,d,u,d],f=6,p=6,g=3,_=2,m=1,v=new Float32Array(g*p*f),y=new Float32Array(_*p*f),b=new Float32Array(m*p*f);for(let x=0;x2?0:-1,w=[M,C,0,M+2/3,C,0,M+2/3,C+1,0,M,C,0,M+2/3,C+1,0,M,C+1,0];v.set(w,g*p*x),y.set(h,_*p*x);const E=[x,x,x,x,x,x];b.set(E,m*p*x)}const T=new Ge;T.setAttribute("position",new ot(v,g)),T.setAttribute("uv",new ot(y,_)),T.setAttribute("faceIndex",new ot(b,m)),e.push(T),s>Jr&&s--}return{lodPlanes:e,sizeLods:t,sigmas:i}}function A0(n,e,t){const i=new ms(n,e,t);return i.texture.mapping=Io,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function uu(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function g2(n,e,t){const i=new Float32Array(Va),s=new S(0,1,0);return new ti({name:"SphericalGaussianBlur",defines:{n:Va,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:Lg(),fragmentShader:` precision mediump float; precision mediump int; @@ -3636,7 +3636,7 @@ void main() { } } - `,blending:ks,depthTest:!1,depthWrite:!1})}function w0(){return new ti({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:Mg(),fragmentShader:` + `,blending:Ds,depthTest:!1,depthWrite:!1})}function R0(){return new ti({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:Lg(),fragmentShader:` precision mediump float; precision mediump int; @@ -3655,7 +3655,7 @@ void main() { gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:ks,depthTest:!1,depthWrite:!1})}function S0(){return new ti({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Mg(),fragmentShader:` + `,blending:Ds,depthTest:!1,depthWrite:!1})}function P0(){return new ti({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Lg(),fragmentShader:` precision mediump float; precision mediump int; @@ -3671,7 +3671,7 @@ void main() { gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:ks,depthTest:!1,depthWrite:!1})}function Mg(){return` + `,blending:Ds,depthTest:!1,depthWrite:!1})}function Lg(){return` precision mediump float; precision mediump int; @@ -3726,17 +3726,17 @@ void main() { gl_Position = vec4( position, 1.0 ); } - `}function o2(n){let e=new WeakMap,t=null;function i(o){if(o&&o.isTexture){const l=o.mapping,c=l===ar||l===Nl,u=l===Bs||l===oa;if(c||u){let d=e.get(o);const h=d!==void 0?d.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==h)return t===null&&(t=new Jd(n)),d=c?t.fromEquirectangular(o,d):t.fromCubemap(o,d),d.texture.pmremVersion=o.pmremVersion,e.set(o,d),d.texture;if(d!==void 0)return d.texture;{const f=o.image;return c&&f&&f.height>0||u&&f&&s(f)?(t===null&&(t=new Jd(n)),d=c?t.fromEquirectangular(o):t.fromCubemap(o),d.texture.pmremVersion=o.pmremVersion,e.set(o,d),o.addEventListener("dispose",a),d.texture):null}}}return o}function s(o){let l=0;const c=6;for(let u=0;ue.maxTextureSize&&(T=Math.ceil(b/e.maxTextureSize),b=e.maxTextureSize);const x=new Float32Array(b*T*4*d),M=new Th(x,b,T,d);M.type=Sn,M.needsUpdate=!0;const C=y*4;for(let E=0;E0)return n;const s=e*t;let a=M0[s];if(a===void 0&&(a=new Float32Array(s),M0[s]=a),e!==0){i.toArray(a,0);for(let r=1,o=0;r!==e;++r)o+=t,n[r].toArray(a,o)}return a}function hn(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t0||u&&f&&s(f)?(t===null&&(t=new sh(n)),d=c?t.fromEquirectangular(o):t.fromCubemap(o),d.texture.pmremVersion=o.pmremVersion,e.set(o,d),o.addEventListener("dispose",a),d.texture):null}}}return o}function s(o){let l=0;const c=6;for(let u=0;ue.maxTextureSize&&(T=Math.ceil(b/e.maxTextureSize),b=e.maxTextureSize);const x=new Float32Array(b*T*4*d),M=new Ph(x,b,T,d);M.type=Sn,M.needsUpdate=!0;const C=y*4;for(let E=0;E0)return n;const s=e*t;let a=L0[s];if(a===void 0&&(a=new Float32Array(s),L0[s]=a),e!==0){i.toArray(a,0);for(let r=1,o=0;r!==e;++r)o+=t,n[r].toArray(a,o)}return a}function hn(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t":" "} ${o}: ${t[r]}`)}return i.join(` -`)}const L0=new st;function oD(n){at._getMatrix(L0,at.workingColorSpace,n);const e=`mat3( ${L0.elements.map(t=>t.toFixed(4))} )`;switch(at.getTransfer(n)){case Bl:return[e,"LinearTransferOETF"];case Pt:return[e,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function D0(n,e,t){const i=n.getShaderParameter(e,n.COMPILE_STATUS),a=(n.getShaderInfoLog(e)||"").trim();if(i&&a==="")return"";const r=/ERROR: 0:(\d+)/.exec(a);if(r){const o=parseInt(r[1]);return t.toUpperCase()+` +`)}const B0=new at;function yk(n){rt._getMatrix(B0,rt.workingColorSpace,n);const e=`mat3( ${B0.elements.map(t=>t.toFixed(4))} )`;switch(rt.getTransfer(n)){case Gl:return[e,"LinearTransferOETF"];case Pt:return[e,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function z0(n,e,t){const i=n.getShaderParameter(e,n.COMPILE_STATUS),a=(n.getShaderInfoLog(e)||"").trim();if(i&&a==="")return"";const r=/ERROR: 0:(\d+)/.exec(a);if(r){const o=parseInt(r[1]);return t.toUpperCase()+` `+a+` -`+rD(n.getShaderSource(e),o)}else return a}function lD(n,e){const t=oD(e);return[`vec4 ${n}( vec4 value ) {`,` return ${t[1]}( vec4( value.rgb * ${t[0]}, value.a ) );`,"}"].join(` -`)}function cD(n,e){let t;switch(e){case Gw:t="Linear";break;case $w:t="Reinhard";break;case Ww:t="Cineon";break;case z_:t="ACESFilmic";break;case Kw:t="AgX";break;case qw:t="Neutral";break;case Xw:t="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",e),t="Linear"}return"vec3 "+n+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}const ou=new S;function uD(){at.getLuminanceCoefficients(ou);const n=ou.x.toFixed(4),e=ou.y.toFixed(4),t=ou.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${n}, ${e}, ${t} );`," return dot( weights, rgb );","}"].join(` -`)}function dD(n){return[n.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",n.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(fl).join(` -`)}function hD(n){const e=[];for(const t in n){const i=n[t];i!==!1&&e.push("#define "+t+" "+i)}return e.join(` -`)}function fD(n,e){const t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let s=0;s/gm;function Pm(n){return n.replace(pD,_D)}const mD=new Map;function _D(n,e){let t=mt[e];if(t===void 0){const i=mD.get(e);if(i!==void 0)t=mt[i],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',e,i);else throw new Error("Can not resolve #include <"+e+">")}return Pm(t)}const gD=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function F0(n){return n.replace(gD,yD)}function yD(n,e,t,i){let s="";for(let a=parseInt(e);a/gm;function Nm(n){return n.replace(Mk,Ck)}const Ek=new Map;function Ck(n,e){let t=mt[e];if(t===void 0){const i=Ek.get(e);if(i!==void 0)t=mt[i],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',e,i);else throw new Error("Can not resolve #include <"+e+">")}return Nm(t)}const Ak=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function G0(n){return n.replace(Ak,Rk)}function Rk(n,e,t,i){let s="";for(let a=parseInt(e);a0&&(_+=` -`),m=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p].filter(fl).join(` +`),m=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p].filter(_l).join(` `),m.length>0&&(m+=` -`)):(_=[N0(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` -`].filter(fl).join(` -`),m=[N0(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+u:"",t.envMap?"#define "+d:"",h?"#define CUBEUV_TEXEL_WIDTH "+h.texelWidth:"",h?"#define CUBEUV_TEXEL_HEIGHT "+h.texelHeight:"",h?"#define CUBEUV_MAX_MIP "+h.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor||t.batchingColor?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Os?"#define TONE_MAPPING":"",t.toneMapping!==Os?mt.tonemapping_pars_fragment:"",t.toneMapping!==Os?cD("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",mt.colorspace_pars_fragment,lD("linearToOutputTexel",t.outputColorSpace),uD(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` -`].filter(fl).join(` -`)),r=Pm(r),r=k0(r,t),r=O0(r,t),o=Pm(o),o=k0(o,t),o=O0(o,t),r=F0(r),o=F0(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es +`)):(_=[$0(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` +`].filter(_l).join(` +`),m=[$0(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+u:"",t.envMap?"#define "+d:"",h?"#define CUBEUV_TEXEL_WIDTH "+h.texelWidth:"",h?"#define CUBEUV_TEXEL_HEIGHT "+h.texelHeight:"",h?"#define CUBEUV_MAX_MIP "+h.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor||t.batchingColor?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Os?"#define TONE_MAPPING":"",t.toneMapping!==Os?mt.tonemapping_pars_fragment:"",t.toneMapping!==Os?bk("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",mt.colorspace_pars_fragment,vk("linearToOutputTexel",t.outputColorSpace),xk(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` +`].filter(_l).join(` +`)),r=Nm(r),r=H0(r,t),r=V0(r,t),o=Nm(o),o=H0(o,t),o=V0(o,t),r=G0(r),o=G0(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es `,_=[f,"#define attribute in","#define varying out","#define texture2D texture"].join(` `)+` -`+_,m=["#define varying in",t.glslVersion===wm?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===wm?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` +`+_,m=["#define varying in",t.glslVersion===Rm?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===Rm?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` `)+` -`+m);const y=v+_+r,b=v+m+o,T=I0(s,s.VERTEX_SHADER,y),x=I0(s,s.FRAGMENT_SHADER,b);s.attachShader(g,T),s.attachShader(g,x),t.index0AttributeName!==void 0?s.bindAttribLocation(g,0,t.index0AttributeName):t.morphTargets===!0&&s.bindAttribLocation(g,0,"position"),s.linkProgram(g);function M(R){if(n.debug.checkShaderErrors){const D=s.getProgramInfoLog(g)||"",O=s.getShaderInfoLog(T)||"",k=s.getShaderInfoLog(x)||"",U=D.trim(),F=O.trim(),W=k.trim();let H=!0,ne=!0;if(s.getProgramParameter(g,s.LINK_STATUS)===!1)if(H=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(s,g,T,x);else{const oe=D0(s,T,"vertex"),pe=D0(s,x,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(g,s.VALIDATE_STATUS)+` +`+m);const y=v+_+r,b=v+m+o,T=U0(s,s.VERTEX_SHADER,y),x=U0(s,s.FRAGMENT_SHADER,b);s.attachShader(g,T),s.attachShader(g,x),t.index0AttributeName!==void 0?s.bindAttribLocation(g,0,t.index0AttributeName):t.morphTargets===!0&&s.bindAttribLocation(g,0,"position"),s.linkProgram(g);function M(R){if(n.debug.checkShaderErrors){const k=s.getProgramInfoLog(g)||"",O=s.getShaderInfoLog(T)||"",D=s.getShaderInfoLog(x)||"",U=k.trim(),F=O.trim(),W=D.trim();let H=!0,ne=!0;if(s.getProgramParameter(g,s.LINK_STATUS)===!1)if(H=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(s,g,T,x);else{const oe=z0(s,T,"vertex"),pe=z0(s,x,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(g,s.VALIDATE_STATUS)+` Material Name: `+R.name+` Material Type: `+R.type+` Program Info Log: `+U+` `+oe+` -`+pe)}else U!==""?console.warn("THREE.WebGLProgram: Program Info Log:",U):(F===""||W==="")&&(ne=!1);ne&&(R.diagnostics={runnable:H,programLog:U,vertexShader:{log:F,prefix:_},fragmentShader:{log:W,prefix:m}})}s.deleteShader(T),s.deleteShader(x),C=new $u(s,g),w=fD(s,g)}let C;this.getUniforms=function(){return C===void 0&&M(this),C};let w;this.getAttributes=function(){return w===void 0&&M(this),w};let E=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=s.getProgramParameter(g,sD)),E},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(g),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=aD++,this.cacheKey=e,this.usedTimes=1,this.program=g,this.vertexShader=T,this.fragmentShader=x,this}let MD=0;class ED{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){const t=e.vertexShader,i=e.fragmentShader,s=this._getShaderStage(t),a=this._getShaderStage(i),r=this._getShaderCacheForMaterial(e);return r.has(s)===!1&&(r.add(s),s.usedTimes++),r.has(a)===!1&&(r.add(a),a.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;let i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){const t=this.shaderCache;let i=t.get(e);return i===void 0&&(i=new CD(e),t.set(e,i)),i}}class CD{constructor(e){this.id=MD++,this.code=e,this.usedTimes=0}}function AD(n,e,t,i,s,a,r){const o=new Eh,l=new ED,c=new Set,u=[],d=s.logarithmicDepthBuffer,h=s.vertexTextures;let f=s.precision;const p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function g(w){return c.add(w),w===0?"uv":`uv${w}`}function _(w,E,R,D,O){const k=D.fog,U=O.geometry,F=w.isMeshStandardMaterial?D.environment:null,W=(w.isMeshStandardMaterial?t:e).get(w.envMap||F),H=W&&W.mapping===Ao?W.image.height:null,ne=p[w.type];w.precision!==null&&(f=s.getMaxPrecision(w.precision),f!==w.precision&&console.warn("THREE.WebGLProgram.getParameters:",w.precision,"not supported, using",f,"instead."));const oe=U.morphAttributes.position||U.morphAttributes.normal||U.morphAttributes.color,pe=oe!==void 0?oe.length:0;let Ie=0;U.morphAttributes.position!==void 0&&(Ie=1),U.morphAttributes.normal!==void 0&&(Ie=2),U.morphAttributes.color!==void 0&&(Ie=3);let De,Xe,ke,Z;if(ne){const Et=Wi[ne];De=Et.vertexShader,Xe=Et.fragmentShader}else De=w.vertexShader,Xe=w.fragmentShader,l.update(w),ke=l.getVertexShaderID(w),Z=l.getFragmentShaderID(w);const se=n.getRenderTarget(),Se=n.state.buffers.depth.getReversed(),X=O.isInstancedMesh===!0,ie=O.isBatchedMesh===!0,xe=!!w.map,Ae=!!w.matcap,L=!!W,G=!!w.aoMap,j=!!w.lightMap,Y=!!w.bumpMap,Q=!!w.normalMap,_e=!!w.displacementMap,ce=!!w.emissiveMap,ge=!!w.metalnessMap,$e=!!w.roughnessMap,it=w.anisotropy>0,I=w.clearcoat>0,A=w.dispersion>0,V=w.iridescence>0,J=w.sheen>0,le=w.transmission>0,ee=it&&!!w.anisotropyMap,He=I&&!!w.clearcoatMap,ye=I&&!!w.clearcoatNormalMap,Ue=I&&!!w.clearcoatRoughnessMap,Be=V&&!!w.iridescenceMap,de=V&&!!w.iridescenceThicknessMap,Pe=J&&!!w.sheenColorMap,Je=J&&!!w.sheenRoughnessMap,Ve=!!w.specularMap,Ce=!!w.specularColorMap,ht=!!w.specularIntensityMap,N=le&&!!w.transmissionMap,me=le&&!!w.thicknessMap,be=!!w.gradientMap,Fe=!!w.alphaMap,he=w.alphaTest>0,re=!!w.alphaHash,ze=!!w.extensions;let lt=Os;w.toneMapped&&(se===null||se.isXRRenderTarget===!0)&&(lt=n.toneMapping);const kt={shaderID:ne,shaderType:w.type,shaderName:w.name,vertexShader:De,fragmentShader:Xe,defines:w.defines,customVertexShaderID:ke,customFragmentShaderID:Z,isRawShaderMaterial:w.isRawShaderMaterial===!0,glslVersion:w.glslVersion,precision:f,batching:ie,batchingColor:ie&&O._colorsTexture!==null,instancing:X,instancingColor:X&&O.instanceColor!==null,instancingMorph:X&&O.morphTexture!==null,supportsVertexTextures:h,outputColorSpace:se===null?n.outputColorSpace:se.isXRRenderTarget===!0?se.texture.colorSpace:xn,alphaToCoverage:!!w.alphaToCoverage,map:xe,matcap:Ae,envMap:L,envMapMode:L&&W.mapping,envMapCubeUVHeight:H,aoMap:G,lightMap:j,bumpMap:Y,normalMap:Q,displacementMap:h&&_e,emissiveMap:ce,normalMapObjectSpace:Q&&w.normalMapType===tS,normalMapTangentSpace:Q&&w.normalMapType===ha,metalnessMap:ge,roughnessMap:$e,anisotropy:it,anisotropyMap:ee,clearcoat:I,clearcoatMap:He,clearcoatNormalMap:ye,clearcoatRoughnessMap:Ue,dispersion:A,iridescence:V,iridescenceMap:Be,iridescenceThicknessMap:de,sheen:J,sheenColorMap:Pe,sheenRoughnessMap:Je,specularMap:Ve,specularColorMap:Ce,specularIntensityMap:ht,transmission:le,transmissionMap:N,thicknessMap:me,gradientMap:be,opaque:w.transparent===!1&&w.blending===tr&&w.alphaToCoverage===!1,alphaMap:Fe,alphaTest:he,alphaHash:re,combine:w.combine,mapUv:xe&&g(w.map.channel),aoMapUv:G&&g(w.aoMap.channel),lightMapUv:j&&g(w.lightMap.channel),bumpMapUv:Y&&g(w.bumpMap.channel),normalMapUv:Q&&g(w.normalMap.channel),displacementMapUv:_e&&g(w.displacementMap.channel),emissiveMapUv:ce&&g(w.emissiveMap.channel),metalnessMapUv:ge&&g(w.metalnessMap.channel),roughnessMapUv:$e&&g(w.roughnessMap.channel),anisotropyMapUv:ee&&g(w.anisotropyMap.channel),clearcoatMapUv:He&&g(w.clearcoatMap.channel),clearcoatNormalMapUv:ye&&g(w.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Ue&&g(w.clearcoatRoughnessMap.channel),iridescenceMapUv:Be&&g(w.iridescenceMap.channel),iridescenceThicknessMapUv:de&&g(w.iridescenceThicknessMap.channel),sheenColorMapUv:Pe&&g(w.sheenColorMap.channel),sheenRoughnessMapUv:Je&&g(w.sheenRoughnessMap.channel),specularMapUv:Ve&&g(w.specularMap.channel),specularColorMapUv:Ce&&g(w.specularColorMap.channel),specularIntensityMapUv:ht&&g(w.specularIntensityMap.channel),transmissionMapUv:N&&g(w.transmissionMap.channel),thicknessMapUv:me&&g(w.thicknessMap.channel),alphaMapUv:Fe&&g(w.alphaMap.channel),vertexTangents:!!U.attributes.tangent&&(Q||it),vertexColors:w.vertexColors,vertexAlphas:w.vertexColors===!0&&!!U.attributes.color&&U.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!U.attributes.uv&&(xe||Fe),fog:!!k,useFog:w.fog===!0,fogExp2:!!k&&k.isFogExp2,flatShading:w.flatShading===!0&&w.wireframe===!1,sizeAttenuation:w.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:Se,skinning:O.isSkinnedMesh===!0,morphTargets:U.morphAttributes.position!==void 0,morphNormals:U.morphAttributes.normal!==void 0,morphColors:U.morphAttributes.color!==void 0,morphTargetsCount:pe,morphTextureStride:Ie,numDirLights:E.directional.length,numPointLights:E.point.length,numSpotLights:E.spot.length,numSpotLightMaps:E.spotLightMap.length,numRectAreaLights:E.rectArea.length,numHemiLights:E.hemi.length,numDirLightShadows:E.directionalShadowMap.length,numPointLightShadows:E.pointShadowMap.length,numSpotLightShadows:E.spotShadowMap.length,numSpotLightShadowsWithMaps:E.numSpotLightShadowsWithMaps,numLightProbes:E.numLightProbes,numClippingPlanes:r.numPlanes,numClipIntersection:r.numIntersection,dithering:w.dithering,shadowMapEnabled:n.shadowMap.enabled&&R.length>0,shadowMapType:n.shadowMap.type,toneMapping:lt,decodeVideoTexture:xe&&w.map.isVideoTexture===!0&&at.getTransfer(w.map.colorSpace)===Pt,decodeVideoTextureEmissive:ce&&w.emissiveMap.isVideoTexture===!0&&at.getTransfer(w.emissiveMap.colorSpace)===Pt,premultipliedAlpha:w.premultipliedAlpha,doubleSided:w.side===ct,flipSided:w.side===un,useDepthPacking:w.depthPacking>=0,depthPacking:w.depthPacking||0,index0AttributeName:w.index0AttributeName,extensionClipCullDistance:ze&&w.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(ze&&w.extensions.multiDraw===!0||ie)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:w.customProgramCacheKey()};return kt.vertexUv1s=c.has(1),kt.vertexUv2s=c.has(2),kt.vertexUv3s=c.has(3),c.clear(),kt}function m(w){const E=[];if(w.shaderID?E.push(w.shaderID):(E.push(w.customVertexShaderID),E.push(w.customFragmentShaderID)),w.defines!==void 0)for(const R in w.defines)E.push(R),E.push(w.defines[R]);return w.isRawShaderMaterial===!1&&(v(E,w),y(E,w),E.push(n.outputColorSpace)),E.push(w.customProgramCacheKey),E.join()}function v(w,E){w.push(E.precision),w.push(E.outputColorSpace),w.push(E.envMapMode),w.push(E.envMapCubeUVHeight),w.push(E.mapUv),w.push(E.alphaMapUv),w.push(E.lightMapUv),w.push(E.aoMapUv),w.push(E.bumpMapUv),w.push(E.normalMapUv),w.push(E.displacementMapUv),w.push(E.emissiveMapUv),w.push(E.metalnessMapUv),w.push(E.roughnessMapUv),w.push(E.anisotropyMapUv),w.push(E.clearcoatMapUv),w.push(E.clearcoatNormalMapUv),w.push(E.clearcoatRoughnessMapUv),w.push(E.iridescenceMapUv),w.push(E.iridescenceThicknessMapUv),w.push(E.sheenColorMapUv),w.push(E.sheenRoughnessMapUv),w.push(E.specularMapUv),w.push(E.specularColorMapUv),w.push(E.specularIntensityMapUv),w.push(E.transmissionMapUv),w.push(E.thicknessMapUv),w.push(E.combine),w.push(E.fogExp2),w.push(E.sizeAttenuation),w.push(E.morphTargetsCount),w.push(E.morphAttributeCount),w.push(E.numDirLights),w.push(E.numPointLights),w.push(E.numSpotLights),w.push(E.numSpotLightMaps),w.push(E.numHemiLights),w.push(E.numRectAreaLights),w.push(E.numDirLightShadows),w.push(E.numPointLightShadows),w.push(E.numSpotLightShadows),w.push(E.numSpotLightShadowsWithMaps),w.push(E.numLightProbes),w.push(E.shadowMapType),w.push(E.toneMapping),w.push(E.numClippingPlanes),w.push(E.numClipIntersection),w.push(E.depthPacking)}function y(w,E){o.disableAll(),E.supportsVertexTextures&&o.enable(0),E.instancing&&o.enable(1),E.instancingColor&&o.enable(2),E.instancingMorph&&o.enable(3),E.matcap&&o.enable(4),E.envMap&&o.enable(5),E.normalMapObjectSpace&&o.enable(6),E.normalMapTangentSpace&&o.enable(7),E.clearcoat&&o.enable(8),E.iridescence&&o.enable(9),E.alphaTest&&o.enable(10),E.vertexColors&&o.enable(11),E.vertexAlphas&&o.enable(12),E.vertexUv1s&&o.enable(13),E.vertexUv2s&&o.enable(14),E.vertexUv3s&&o.enable(15),E.vertexTangents&&o.enable(16),E.anisotropy&&o.enable(17),E.alphaHash&&o.enable(18),E.batching&&o.enable(19),E.dispersion&&o.enable(20),E.batchingColor&&o.enable(21),E.gradientMap&&o.enable(22),w.push(o.mask),o.disableAll(),E.fog&&o.enable(0),E.useFog&&o.enable(1),E.flatShading&&o.enable(2),E.logarithmicDepthBuffer&&o.enable(3),E.reversedDepthBuffer&&o.enable(4),E.skinning&&o.enable(5),E.morphTargets&&o.enable(6),E.morphNormals&&o.enable(7),E.morphColors&&o.enable(8),E.premultipliedAlpha&&o.enable(9),E.shadowMapEnabled&&o.enable(10),E.doubleSided&&o.enable(11),E.flipSided&&o.enable(12),E.useDepthPacking&&o.enable(13),E.dithering&&o.enable(14),E.transmission&&o.enable(15),E.sheen&&o.enable(16),E.opaque&&o.enable(17),E.pointsUvs&&o.enable(18),E.decodeVideoTexture&&o.enable(19),E.decodeVideoTextureEmissive&&o.enable(20),E.alphaToCoverage&&o.enable(21),w.push(o.mask)}function b(w){const E=p[w.type];let R;if(E){const D=Wi[E];R=pS.clone(D.uniforms)}else R=w.uniforms;return R}function T(w,E){let R;for(let D=0,O=u.length;D0?i.push(m):f.transparent===!0?s.push(m):t.push(m)}function l(d,h,f,p,g,_){const m=r(d,h,f,p,g,_);f.transmission>0?i.unshift(m):f.transparent===!0?s.unshift(m):t.unshift(m)}function c(d,h){t.length>1&&t.sort(d||PD),i.length>1&&i.sort(h||U0),s.length>1&&s.sort(h||U0)}function u(){for(let d=e,h=n.length;d=a.length?(r=new B0,a.push(r)):r=a[s],r}function t(){n=new WeakMap}return{get:e,dispose:t}}function LD(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new S,color:new ue};break;case"SpotLight":t={position:new S,direction:new S,color:new ue,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new S,color:new ue,distance:0,decay:0};break;case"HemisphereLight":t={direction:new S,skyColor:new ue,groundColor:new ue};break;case"RectAreaLight":t={color:new ue,position:new S,halfWidth:new S,halfHeight:new S};break}return n[e.id]=t,t}}}function DD(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new te};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new te};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new te,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}let kD=0;function OD(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function FD(n){const e=new LD,t=DD(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new S);const s=new S,a=new Me,r=new Me;function o(c){let u=0,d=0,h=0;for(let w=0;w<9;w++)i.probe[w].set(0,0,0);let f=0,p=0,g=0,_=0,m=0,v=0,y=0,b=0,T=0,x=0,M=0;c.sort(OD);for(let w=0,E=c.length;w0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=Te.LTC_FLOAT_1,i.rectAreaLTC2=Te.LTC_FLOAT_2):(i.rectAreaLTC1=Te.LTC_HALF_1,i.rectAreaLTC2=Te.LTC_HALF_2)),i.ambient[0]=u,i.ambient[1]=d,i.ambient[2]=h;const C=i.hash;(C.directionalLength!==f||C.pointLength!==p||C.spotLength!==g||C.rectAreaLength!==_||C.hemiLength!==m||C.numDirectionalShadows!==v||C.numPointShadows!==y||C.numSpotShadows!==b||C.numSpotMaps!==T||C.numLightProbes!==M)&&(i.directional.length=f,i.spot.length=g,i.rectArea.length=_,i.point.length=p,i.hemi.length=m,i.directionalShadow.length=v,i.directionalShadowMap.length=v,i.pointShadow.length=y,i.pointShadowMap.length=y,i.spotShadow.length=b,i.spotShadowMap.length=b,i.directionalShadowMatrix.length=v,i.pointShadowMatrix.length=y,i.spotLightMatrix.length=b+T-x,i.spotLightMap.length=T,i.numSpotLightShadowsWithMaps=x,i.numLightProbes=M,C.directionalLength=f,C.pointLength=p,C.spotLength=g,C.rectAreaLength=_,C.hemiLength=m,C.numDirectionalShadows=v,C.numPointShadows=y,C.numSpotShadows=b,C.numSpotMaps=T,C.numLightProbes=M,i.version=kD++)}function l(c,u){let d=0,h=0,f=0,p=0,g=0;const _=u.matrixWorldInverse;for(let m=0,v=c.length;m=r.length?(o=new z0(n),r.push(o)):o=r[a],o}function i(){e=new WeakMap}return{get:t,dispose:i}}const UD=`void main() { +`+pe)}else U!==""?console.warn("THREE.WebGLProgram: Program Info Log:",U):(F===""||W==="")&&(ne=!1);ne&&(R.diagnostics={runnable:H,programLog:U,vertexShader:{log:F,prefix:_},fragmentShader:{log:W,prefix:m}})}s.deleteShader(T),s.deleteShader(x),C=new qu(s,g),w=Tk(s,g)}let C;this.getUniforms=function(){return C===void 0&&M(this),C};let w;this.getAttributes=function(){return w===void 0&&M(this),w};let E=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=s.getProgramParameter(g,mk)),E},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(g),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=_k++,this.cacheKey=e,this.usedTimes=1,this.program=g,this.vertexShader=T,this.fragmentShader=x,this}let Fk=0;class Nk{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){const t=e.vertexShader,i=e.fragmentShader,s=this._getShaderStage(t),a=this._getShaderStage(i),r=this._getShaderCacheForMaterial(e);return r.has(s)===!1&&(r.add(s),s.usedTimes++),r.has(a)===!1&&(r.add(a),a.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;let i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){const t=this.shaderCache;let i=t.get(e);return i===void 0&&(i=new Uk(e),t.set(e,i)),i}}class Uk{constructor(e){this.id=Fk++,this.code=e,this.usedTimes=0}}function Bk(n,e,t,i,s,a,r){const o=new Lh,l=new Nk,c=new Set,u=[],d=s.logarithmicDepthBuffer,h=s.vertexTextures;let f=s.precision;const p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function g(w){return c.add(w),w===0?"uv":`uv${w}`}function _(w,E,R,k,O){const D=k.fog,U=O.geometry,F=w.isMeshStandardMaterial?k.environment:null,W=(w.isMeshStandardMaterial?t:e).get(w.envMap||F),H=W&&W.mapping===Io?W.image.height:null,ne=p[w.type];w.precision!==null&&(f=s.getMaxPrecision(w.precision),f!==w.precision&&console.warn("THREE.WebGLProgram.getParameters:",w.precision,"not supported, using",f,"instead."));const oe=U.morphAttributes.position||U.morphAttributes.normal||U.morphAttributes.color,pe=oe!==void 0?oe.length:0;let Ie=0;U.morphAttributes.position!==void 0&&(Ie=1),U.morphAttributes.normal!==void 0&&(Ie=2),U.morphAttributes.color!==void 0&&(Ie=3);let ke,Xe,De,Z;if(ne){const Et=Xi[ne];ke=Et.vertexShader,Xe=Et.fragmentShader}else ke=w.vertexShader,Xe=w.fragmentShader,l.update(w),De=l.getVertexShaderID(w),Z=l.getFragmentShaderID(w);const ae=n.getRenderTarget(),Se=n.state.buffers.depth.getReversed(),X=O.isInstancedMesh===!0,ie=O.isBatchedMesh===!0,xe=!!w.map,Ae=!!w.matcap,L=!!W,G=!!w.aoMap,j=!!w.lightMap,Y=!!w.bumpMap,Q=!!w.normalMap,_e=!!w.displacementMap,ce=!!w.emissiveMap,ge=!!w.metalnessMap,$e=!!w.roughnessMap,it=w.anisotropy>0,I=w.clearcoat>0,A=w.dispersion>0,V=w.iridescence>0,J=w.sheen>0,le=w.transmission>0,ee=it&&!!w.anisotropyMap,He=I&&!!w.clearcoatMap,ye=I&&!!w.clearcoatNormalMap,Ue=I&&!!w.clearcoatRoughnessMap,Be=V&&!!w.iridescenceMap,de=V&&!!w.iridescenceThicknessMap,Pe=J&&!!w.sheenColorMap,Je=J&&!!w.sheenRoughnessMap,Ve=!!w.specularMap,Ce=!!w.specularColorMap,ht=!!w.specularIntensityMap,N=le&&!!w.transmissionMap,me=le&&!!w.thicknessMap,be=!!w.gradientMap,Fe=!!w.alphaMap,he=w.alphaTest>0,re=!!w.alphaHash,ze=!!w.extensions;let lt=Os;w.toneMapped&&(ae===null||ae.isXRRenderTarget===!0)&&(lt=n.toneMapping);const Dt={shaderID:ne,shaderType:w.type,shaderName:w.name,vertexShader:ke,fragmentShader:Xe,defines:w.defines,customVertexShaderID:De,customFragmentShaderID:Z,isRawShaderMaterial:w.isRawShaderMaterial===!0,glslVersion:w.glslVersion,precision:f,batching:ie,batchingColor:ie&&O._colorsTexture!==null,instancing:X,instancingColor:X&&O.instanceColor!==null,instancingMorph:X&&O.morphTexture!==null,supportsVertexTextures:h,outputColorSpace:ae===null?n.outputColorSpace:ae.isXRRenderTarget===!0?ae.texture.colorSpace:xn,alphaToCoverage:!!w.alphaToCoverage,map:xe,matcap:Ae,envMap:L,envMapMode:L&&W.mapping,envMapCubeUVHeight:H,aoMap:G,lightMap:j,bumpMap:Y,normalMap:Q,displacementMap:h&&_e,emissiveMap:ce,normalMapObjectSpace:Q&&w.normalMapType===cS,normalMapTangentSpace:Q&&w.normalMapType===fa,metalnessMap:ge,roughnessMap:$e,anisotropy:it,anisotropyMap:ee,clearcoat:I,clearcoatMap:He,clearcoatNormalMap:ye,clearcoatRoughnessMap:Ue,dispersion:A,iridescence:V,iridescenceMap:Be,iridescenceThicknessMap:de,sheen:J,sheenColorMap:Pe,sheenRoughnessMap:Je,specularMap:Ve,specularColorMap:Ce,specularIntensityMap:ht,transmission:le,transmissionMap:N,thicknessMap:me,gradientMap:be,opaque:w.transparent===!1&&w.blending===nr&&w.alphaToCoverage===!1,alphaMap:Fe,alphaTest:he,alphaHash:re,combine:w.combine,mapUv:xe&&g(w.map.channel),aoMapUv:G&&g(w.aoMap.channel),lightMapUv:j&&g(w.lightMap.channel),bumpMapUv:Y&&g(w.bumpMap.channel),normalMapUv:Q&&g(w.normalMap.channel),displacementMapUv:_e&&g(w.displacementMap.channel),emissiveMapUv:ce&&g(w.emissiveMap.channel),metalnessMapUv:ge&&g(w.metalnessMap.channel),roughnessMapUv:$e&&g(w.roughnessMap.channel),anisotropyMapUv:ee&&g(w.anisotropyMap.channel),clearcoatMapUv:He&&g(w.clearcoatMap.channel),clearcoatNormalMapUv:ye&&g(w.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Ue&&g(w.clearcoatRoughnessMap.channel),iridescenceMapUv:Be&&g(w.iridescenceMap.channel),iridescenceThicknessMapUv:de&&g(w.iridescenceThicknessMap.channel),sheenColorMapUv:Pe&&g(w.sheenColorMap.channel),sheenRoughnessMapUv:Je&&g(w.sheenRoughnessMap.channel),specularMapUv:Ve&&g(w.specularMap.channel),specularColorMapUv:Ce&&g(w.specularColorMap.channel),specularIntensityMapUv:ht&&g(w.specularIntensityMap.channel),transmissionMapUv:N&&g(w.transmissionMap.channel),thicknessMapUv:me&&g(w.thicknessMap.channel),alphaMapUv:Fe&&g(w.alphaMap.channel),vertexTangents:!!U.attributes.tangent&&(Q||it),vertexColors:w.vertexColors,vertexAlphas:w.vertexColors===!0&&!!U.attributes.color&&U.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!U.attributes.uv&&(xe||Fe),fog:!!D,useFog:w.fog===!0,fogExp2:!!D&&D.isFogExp2,flatShading:w.flatShading===!0&&w.wireframe===!1,sizeAttenuation:w.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:Se,skinning:O.isSkinnedMesh===!0,morphTargets:U.morphAttributes.position!==void 0,morphNormals:U.morphAttributes.normal!==void 0,morphColors:U.morphAttributes.color!==void 0,morphTargetsCount:pe,morphTextureStride:Ie,numDirLights:E.directional.length,numPointLights:E.point.length,numSpotLights:E.spot.length,numSpotLightMaps:E.spotLightMap.length,numRectAreaLights:E.rectArea.length,numHemiLights:E.hemi.length,numDirLightShadows:E.directionalShadowMap.length,numPointLightShadows:E.pointShadowMap.length,numSpotLightShadows:E.spotShadowMap.length,numSpotLightShadowsWithMaps:E.numSpotLightShadowsWithMaps,numLightProbes:E.numLightProbes,numClippingPlanes:r.numPlanes,numClipIntersection:r.numIntersection,dithering:w.dithering,shadowMapEnabled:n.shadowMap.enabled&&R.length>0,shadowMapType:n.shadowMap.type,toneMapping:lt,decodeVideoTexture:xe&&w.map.isVideoTexture===!0&&rt.getTransfer(w.map.colorSpace)===Pt,decodeVideoTextureEmissive:ce&&w.emissiveMap.isVideoTexture===!0&&rt.getTransfer(w.emissiveMap.colorSpace)===Pt,premultipliedAlpha:w.premultipliedAlpha,doubleSided:w.side===ct,flipSided:w.side===un,useDepthPacking:w.depthPacking>=0,depthPacking:w.depthPacking||0,index0AttributeName:w.index0AttributeName,extensionClipCullDistance:ze&&w.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(ze&&w.extensions.multiDraw===!0||ie)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:w.customProgramCacheKey()};return Dt.vertexUv1s=c.has(1),Dt.vertexUv2s=c.has(2),Dt.vertexUv3s=c.has(3),c.clear(),Dt}function m(w){const E=[];if(w.shaderID?E.push(w.shaderID):(E.push(w.customVertexShaderID),E.push(w.customFragmentShaderID)),w.defines!==void 0)for(const R in w.defines)E.push(R),E.push(w.defines[R]);return w.isRawShaderMaterial===!1&&(v(E,w),y(E,w),E.push(n.outputColorSpace)),E.push(w.customProgramCacheKey),E.join()}function v(w,E){w.push(E.precision),w.push(E.outputColorSpace),w.push(E.envMapMode),w.push(E.envMapCubeUVHeight),w.push(E.mapUv),w.push(E.alphaMapUv),w.push(E.lightMapUv),w.push(E.aoMapUv),w.push(E.bumpMapUv),w.push(E.normalMapUv),w.push(E.displacementMapUv),w.push(E.emissiveMapUv),w.push(E.metalnessMapUv),w.push(E.roughnessMapUv),w.push(E.anisotropyMapUv),w.push(E.clearcoatMapUv),w.push(E.clearcoatNormalMapUv),w.push(E.clearcoatRoughnessMapUv),w.push(E.iridescenceMapUv),w.push(E.iridescenceThicknessMapUv),w.push(E.sheenColorMapUv),w.push(E.sheenRoughnessMapUv),w.push(E.specularMapUv),w.push(E.specularColorMapUv),w.push(E.specularIntensityMapUv),w.push(E.transmissionMapUv),w.push(E.thicknessMapUv),w.push(E.combine),w.push(E.fogExp2),w.push(E.sizeAttenuation),w.push(E.morphTargetsCount),w.push(E.morphAttributeCount),w.push(E.numDirLights),w.push(E.numPointLights),w.push(E.numSpotLights),w.push(E.numSpotLightMaps),w.push(E.numHemiLights),w.push(E.numRectAreaLights),w.push(E.numDirLightShadows),w.push(E.numPointLightShadows),w.push(E.numSpotLightShadows),w.push(E.numSpotLightShadowsWithMaps),w.push(E.numLightProbes),w.push(E.shadowMapType),w.push(E.toneMapping),w.push(E.numClippingPlanes),w.push(E.numClipIntersection),w.push(E.depthPacking)}function y(w,E){o.disableAll(),E.supportsVertexTextures&&o.enable(0),E.instancing&&o.enable(1),E.instancingColor&&o.enable(2),E.instancingMorph&&o.enable(3),E.matcap&&o.enable(4),E.envMap&&o.enable(5),E.normalMapObjectSpace&&o.enable(6),E.normalMapTangentSpace&&o.enable(7),E.clearcoat&&o.enable(8),E.iridescence&&o.enable(9),E.alphaTest&&o.enable(10),E.vertexColors&&o.enable(11),E.vertexAlphas&&o.enable(12),E.vertexUv1s&&o.enable(13),E.vertexUv2s&&o.enable(14),E.vertexUv3s&&o.enable(15),E.vertexTangents&&o.enable(16),E.anisotropy&&o.enable(17),E.alphaHash&&o.enable(18),E.batching&&o.enable(19),E.dispersion&&o.enable(20),E.batchingColor&&o.enable(21),E.gradientMap&&o.enable(22),w.push(o.mask),o.disableAll(),E.fog&&o.enable(0),E.useFog&&o.enable(1),E.flatShading&&o.enable(2),E.logarithmicDepthBuffer&&o.enable(3),E.reversedDepthBuffer&&o.enable(4),E.skinning&&o.enable(5),E.morphTargets&&o.enable(6),E.morphNormals&&o.enable(7),E.morphColors&&o.enable(8),E.premultipliedAlpha&&o.enable(9),E.shadowMapEnabled&&o.enable(10),E.doubleSided&&o.enable(11),E.flipSided&&o.enable(12),E.useDepthPacking&&o.enable(13),E.dithering&&o.enable(14),E.transmission&&o.enable(15),E.sheen&&o.enable(16),E.opaque&&o.enable(17),E.pointsUvs&&o.enable(18),E.decodeVideoTexture&&o.enable(19),E.decodeVideoTextureEmissive&&o.enable(20),E.alphaToCoverage&&o.enable(21),w.push(o.mask)}function b(w){const E=p[w.type];let R;if(E){const k=Xi[E];R=wS.clone(k.uniforms)}else R=w.uniforms;return R}function T(w,E){let R;for(let k=0,O=u.length;k0?i.push(m):f.transparent===!0?s.push(m):t.push(m)}function l(d,h,f,p,g,_){const m=r(d,h,f,p,g,_);f.transmission>0?i.unshift(m):f.transparent===!0?s.unshift(m):t.unshift(m)}function c(d,h){t.length>1&&t.sort(d||Hk),i.length>1&&i.sort(h||W0),s.length>1&&s.sort(h||W0)}function u(){for(let d=e,h=n.length;d=a.length?(r=new X0,a.push(r)):r=a[s],r}function t(){n=new WeakMap}return{get:e,dispose:t}}function Gk(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new S,color:new ue};break;case"SpotLight":t={position:new S,direction:new S,color:new ue,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new S,color:new ue,distance:0,decay:0};break;case"HemisphereLight":t={direction:new S,skyColor:new ue,groundColor:new ue};break;case"RectAreaLight":t={color:new ue,position:new S,halfWidth:new S,halfHeight:new S};break}return n[e.id]=t,t}}}function $k(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new te};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new te};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new te,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}let Wk=0;function Xk(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function Kk(n){const e=new Gk,t=$k(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new S);const s=new S,a=new Me,r=new Me;function o(c){let u=0,d=0,h=0;for(let w=0;w<9;w++)i.probe[w].set(0,0,0);let f=0,p=0,g=0,_=0,m=0,v=0,y=0,b=0,T=0,x=0,M=0;c.sort(Xk);for(let w=0,E=c.length;w0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=Te.LTC_FLOAT_1,i.rectAreaLTC2=Te.LTC_FLOAT_2):(i.rectAreaLTC1=Te.LTC_HALF_1,i.rectAreaLTC2=Te.LTC_HALF_2)),i.ambient[0]=u,i.ambient[1]=d,i.ambient[2]=h;const C=i.hash;(C.directionalLength!==f||C.pointLength!==p||C.spotLength!==g||C.rectAreaLength!==_||C.hemiLength!==m||C.numDirectionalShadows!==v||C.numPointShadows!==y||C.numSpotShadows!==b||C.numSpotMaps!==T||C.numLightProbes!==M)&&(i.directional.length=f,i.spot.length=g,i.rectArea.length=_,i.point.length=p,i.hemi.length=m,i.directionalShadow.length=v,i.directionalShadowMap.length=v,i.pointShadow.length=y,i.pointShadowMap.length=y,i.spotShadow.length=b,i.spotShadowMap.length=b,i.directionalShadowMatrix.length=v,i.pointShadowMatrix.length=y,i.spotLightMatrix.length=b+T-x,i.spotLightMap.length=T,i.numSpotLightShadowsWithMaps=x,i.numLightProbes=M,C.directionalLength=f,C.pointLength=p,C.spotLength=g,C.rectAreaLength=_,C.hemiLength=m,C.numDirectionalShadows=v,C.numPointShadows=y,C.numSpotShadows=b,C.numSpotMaps=T,C.numLightProbes=M,i.version=Wk++)}function l(c,u){let d=0,h=0,f=0,p=0,g=0;const _=u.matrixWorldInverse;for(let m=0,v=c.length;m=r.length?(o=new K0(n),r.push(o)):o=r[a],o}function i(){e=new WeakMap}return{get:t,dispose:i}}const Yk=`void main() { gl_Position = vec4( position, 1.0 ); -}`,BD=`uniform sampler2D shadow_pass; +}`,jk=`uniform sampler2D shadow_pass; uniform vec2 resolution; uniform float radius; #include @@ -3805,12 +3805,12 @@ void main() { squared_mean = squared_mean / samples; float std_dev = sqrt( squared_mean - mean * mean ); gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); -}`;function zD(n,e,t){let i=new Po;const s=new te,a=new te,r=new qe,o=new dg({depthPacking:eS}),l=new hg,c={},u=t.maxTextureSize,d={[fs]:un,[un]:fs,[ct]:ct},h=new ti({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new te},radius:{value:4}},vertexShader:UD,fragmentShader:BD}),f=h.clone();f.defines.HORIZONTAL_PASS=1;const p=new Ge;p.setAttribute("position",new rt(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new we(p,h),_=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=N_;let m=this.type;this.render=function(x,M,C){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||x.length===0)return;const w=n.getRenderTarget(),E=n.getActiveCubeFace(),R=n.getActiveMipmapLevel(),D=n.state;D.setBlending(ks),D.buffers.depth.getReversed()===!0?D.buffers.color.setClear(0,0,0,0):D.buffers.color.setClear(1,1,1,1),D.buffers.depth.setTest(!0),D.setScissorTest(!1);const O=m!==as&&this.type===as,k=m===as&&this.type!==as;for(let U=0,F=x.length;Uu||s.y>u)&&(s.x>u&&(a.x=Math.floor(u/ne.x),s.x=a.x*ne.x,H.mapSize.x=a.x),s.y>u&&(a.y=Math.floor(u/ne.y),s.y=a.y*ne.y,H.mapSize.y=a.y)),H.map===null||O===!0||k===!0){const pe=this.type!==as?{minFilter:dn,magFilter:dn}:{};H.map!==null&&H.map.dispose(),H.map=new ms(s.x,s.y,pe),H.map.texture.name=W.name+".shadowMap",H.camera.updateProjectionMatrix()}n.setRenderTarget(H.map),n.clear();const oe=H.getViewportCount();for(let pe=0;pe0||M.map&&M.alphaTest>0||M.alphaToCoverage===!0){const D=E.uuid,O=M.uuid;let k=c[D];k===void 0&&(k={},c[D]=k);let U=k[O];U===void 0&&(U=E.clone(),k[O]=U,M.addEventListener("dispose",T)),E=U}if(E.visible=M.visible,E.wireframe=M.wireframe,w===as?E.side=M.shadowSide!==null?M.shadowSide:M.side:E.side=M.shadowSide!==null?M.shadowSide:d[M.side],E.alphaMap=M.alphaMap,E.alphaTest=M.alphaToCoverage===!0?.5:M.alphaTest,E.map=M.map,E.clipShadows=M.clipShadows,E.clippingPlanes=M.clippingPlanes,E.clipIntersection=M.clipIntersection,E.displacementMap=M.displacementMap,E.displacementScale=M.displacementScale,E.displacementBias=M.displacementBias,E.wireframeLinewidth=M.wireframeLinewidth,E.linewidth=M.linewidth,C.isPointLight===!0&&E.isMeshDistanceMaterial===!0){const D=n.properties.get(E);D.light=C}return E}function b(x,M,C,w,E){if(x.visible===!1)return;if(x.layers.test(M.layers)&&(x.isMesh||x.isLine||x.isPoints)&&(x.castShadow||x.receiveShadow&&E===as)&&(!x.frustumCulled||i.intersectsObject(x))){x.modelViewMatrix.multiplyMatrices(C.matrixWorldInverse,x.matrixWorld);const O=e.update(x),k=x.material;if(Array.isArray(k)){const U=O.groups;for(let F=0,W=U.length;F=1):H.indexOf("OpenGL ES")!==-1&&(W=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),F=W>=2);let ne=null,oe={};const pe=n.getParameter(n.SCISSOR_BOX),Ie=n.getParameter(n.VIEWPORT),De=new qe().fromArray(pe),Xe=new qe().fromArray(Ie);function ke(N,me,be,Fe){const he=new Uint8Array(4),re=n.createTexture();n.bindTexture(N,re),n.texParameteri(N,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(N,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let ze=0;ze"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new te,u=new WeakMap;let d;const h=new WeakMap;let f=!1;try{f=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function p(I,A){return f?new OffscreenCanvas(I,A):Hl("canvas")}function g(I,A,V){let J=1;const le=it(I);if((le.width>V||le.height>V)&&(J=V/Math.max(le.width,le.height)),J<1)if(typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&I instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&I instanceof ImageBitmap||typeof VideoFrame<"u"&&I instanceof VideoFrame){const ee=Math.floor(J*le.width),He=Math.floor(J*le.height);d===void 0&&(d=p(ee,He));const ye=A?p(ee,He):d;return ye.width=ee,ye.height=He,ye.getContext("2d").drawImage(I,0,0,ee,He),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+le.width+"x"+le.height+") to ("+ee+"x"+He+")."),ye}else return"data"in I&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+le.width+"x"+le.height+")."),I;return I}function _(I){return I.generateMipmaps}function m(I){n.generateMipmap(I)}function v(I){return I.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:I.isWebGL3DRenderTarget?n.TEXTURE_3D:I.isWebGLArrayRenderTarget||I.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function y(I,A,V,J,le=!1){if(I!==null){if(n[I]!==void 0)return n[I];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+I+"'")}let ee=A;if(A===n.RED&&(V===n.FLOAT&&(ee=n.R32F),V===n.HALF_FLOAT&&(ee=n.R16F),V===n.UNSIGNED_BYTE&&(ee=n.R8)),A===n.RED_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.R8UI),V===n.UNSIGNED_SHORT&&(ee=n.R16UI),V===n.UNSIGNED_INT&&(ee=n.R32UI),V===n.BYTE&&(ee=n.R8I),V===n.SHORT&&(ee=n.R16I),V===n.INT&&(ee=n.R32I)),A===n.RG&&(V===n.FLOAT&&(ee=n.RG32F),V===n.HALF_FLOAT&&(ee=n.RG16F),V===n.UNSIGNED_BYTE&&(ee=n.RG8)),A===n.RG_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RG8UI),V===n.UNSIGNED_SHORT&&(ee=n.RG16UI),V===n.UNSIGNED_INT&&(ee=n.RG32UI),V===n.BYTE&&(ee=n.RG8I),V===n.SHORT&&(ee=n.RG16I),V===n.INT&&(ee=n.RG32I)),A===n.RGB_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGB8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGB16UI),V===n.UNSIGNED_INT&&(ee=n.RGB32UI),V===n.BYTE&&(ee=n.RGB8I),V===n.SHORT&&(ee=n.RGB16I),V===n.INT&&(ee=n.RGB32I)),A===n.RGBA_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGBA8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGBA16UI),V===n.UNSIGNED_INT&&(ee=n.RGBA32UI),V===n.BYTE&&(ee=n.RGBA8I),V===n.SHORT&&(ee=n.RGBA16I),V===n.INT&&(ee=n.RGBA32I)),A===n.RGB&&(V===n.UNSIGNED_INT_5_9_9_9_REV&&(ee=n.RGB9_E5),V===n.UNSIGNED_INT_10F_11F_11F_REV&&(ee=n.R11F_G11F_B10F)),A===n.RGBA){const He=le?Bl:at.getTransfer(J);V===n.FLOAT&&(ee=n.RGBA32F),V===n.HALF_FLOAT&&(ee=n.RGBA16F),V===n.UNSIGNED_BYTE&&(ee=He===Pt?n.SRGB8_ALPHA8:n.RGBA8),V===n.UNSIGNED_SHORT_4_4_4_4&&(ee=n.RGBA4),V===n.UNSIGNED_SHORT_5_5_5_1&&(ee=n.RGB5_A1)}return(ee===n.R16F||ee===n.R32F||ee===n.RG16F||ee===n.RG32F||ee===n.RGBA16F||ee===n.RGBA32F)&&e.get("EXT_color_buffer_float"),ee}function b(I,A){let V;return I?A===null||A===zs||A===vo?V=n.DEPTH24_STENCIL8:A===Sn?V=n.DEPTH32F_STENCIL8:A===yo&&(V=n.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):A===null||A===zs||A===vo?V=n.DEPTH_COMPONENT24:A===Sn?V=n.DEPTH_COMPONENT32F:A===yo&&(V=n.DEPTH_COMPONENT16),V}function T(I,A){return _(I)===!0||I.isFramebufferTexture&&I.minFilter!==dn&&I.minFilter!==Vt?Math.log2(Math.max(A.width,A.height))+1:I.mipmaps!==void 0&&I.mipmaps.length>0?I.mipmaps.length:I.isCompressedTexture&&Array.isArray(I.image)?A.mipmaps.length:1}function x(I){const A=I.target;A.removeEventListener("dispose",x),C(A),A.isVideoTexture&&u.delete(A)}function M(I){const A=I.target;A.removeEventListener("dispose",M),E(A)}function C(I){const A=i.get(I);if(A.__webglInit===void 0)return;const V=I.source,J=h.get(V);if(J){const le=J[A.__cacheKey];le.usedTimes--,le.usedTimes===0&&w(I),Object.keys(J).length===0&&h.delete(V)}i.remove(I)}function w(I){const A=i.get(I);n.deleteTexture(A.__webglTexture);const V=I.source,J=h.get(V);delete J[A.__cacheKey],r.memory.textures--}function E(I){const A=i.get(I);if(I.depthTexture&&(I.depthTexture.dispose(),i.remove(I.depthTexture)),I.isWebGLCubeRenderTarget)for(let J=0;J<6;J++){if(Array.isArray(A.__webglFramebuffer[J]))for(let le=0;le=s.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+I+" texture units while this GPU supports only "+s.maxTextures),R+=1,I}function k(I){const A=[];return A.push(I.wrapS),A.push(I.wrapT),A.push(I.wrapR||0),A.push(I.magFilter),A.push(I.minFilter),A.push(I.anisotropy),A.push(I.internalFormat),A.push(I.format),A.push(I.type),A.push(I.generateMipmaps),A.push(I.premultiplyAlpha),A.push(I.flipY),A.push(I.unpackAlignment),A.push(I.colorSpace),A.join()}function U(I,A){const V=i.get(I);if(I.isVideoTexture&&ge(I),I.isRenderTargetTexture===!1&&I.isExternalTexture!==!0&&I.version>0&&V.__version!==I.version){const J=I.image;if(J===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(J.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{Z(V,I,A);return}}else I.isExternalTexture&&(V.__webglTexture=I.sourceTexture?I.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,V.__webglTexture,n.TEXTURE0+A)}function F(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_2D_ARRAY,V.__webglTexture,n.TEXTURE0+A)}function W(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_3D,V.__webglTexture,n.TEXTURE0+A)}function H(I,A){const V=i.get(I);if(I.version>0&&V.__version!==I.version){se(V,I,A);return}t.bindTexture(n.TEXTURE_CUBE_MAP,V.__webglTexture,n.TEXTURE0+A)}const ne={[ps]:n.REPEAT,[Hn]:n.CLAMP_TO_EDGE,[go]:n.MIRRORED_REPEAT},oe={[dn]:n.NEAREST,[_h]:n.NEAREST_MIPMAP_NEAREST,[Xa]:n.NEAREST_MIPMAP_LINEAR,[Vt]:n.LINEAR,[eo]:n.LINEAR_MIPMAP_NEAREST,[Ti]:n.LINEAR_MIPMAP_LINEAR},pe={[nS]:n.NEVER,[lS]:n.ALWAYS,[iS]:n.LESS,[j_]:n.LEQUAL,[sS]:n.EQUAL,[oS]:n.GEQUAL,[aS]:n.GREATER,[rS]:n.NOTEQUAL};function Ie(I,A){if(A.type===Sn&&e.has("OES_texture_float_linear")===!1&&(A.magFilter===Vt||A.magFilter===eo||A.magFilter===Xa||A.magFilter===Ti||A.minFilter===Vt||A.minFilter===eo||A.minFilter===Xa||A.minFilter===Ti)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(I,n.TEXTURE_WRAP_S,ne[A.wrapS]),n.texParameteri(I,n.TEXTURE_WRAP_T,ne[A.wrapT]),(I===n.TEXTURE_3D||I===n.TEXTURE_2D_ARRAY)&&n.texParameteri(I,n.TEXTURE_WRAP_R,ne[A.wrapR]),n.texParameteri(I,n.TEXTURE_MAG_FILTER,oe[A.magFilter]),n.texParameteri(I,n.TEXTURE_MIN_FILTER,oe[A.minFilter]),A.compareFunction&&(n.texParameteri(I,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(I,n.TEXTURE_COMPARE_FUNC,pe[A.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(A.magFilter===dn||A.minFilter!==Xa&&A.minFilter!==Ti||A.type===Sn&&e.has("OES_texture_float_linear")===!1)return;if(A.anisotropy>1||i.get(A).__currentAnisotropy){const V=e.get("EXT_texture_filter_anisotropic");n.texParameterf(I,V.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(A.anisotropy,s.getMaxAnisotropy())),i.get(A).__currentAnisotropy=A.anisotropy}}}function De(I,A){let V=!1;I.__webglInit===void 0&&(I.__webglInit=!0,A.addEventListener("dispose",x));const J=A.source;let le=h.get(J);le===void 0&&(le={},h.set(J,le));const ee=k(A);if(ee!==I.__cacheKey){le[ee]===void 0&&(le[ee]={texture:n.createTexture(),usedTimes:0},r.memory.textures++,V=!0),le[ee].usedTimes++;const He=le[I.__cacheKey];He!==void 0&&(le[I.__cacheKey].usedTimes--,He.usedTimes===0&&w(A)),I.__cacheKey=ee,I.__webglTexture=le[ee].texture}return V}function Xe(I,A,V){return Math.floor(Math.floor(I/V)/A)}function ke(I,A,V,J){const ee=I.updateRanges;if(ee.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,A.width,A.height,V,J,A.data);else{ee.sort((de,Pe)=>de.start-Pe.start);let He=0;for(let de=1;de0){N&&me&&t.texStorage2D(n.TEXTURE_2D,Fe,Ve,ht[0].width,ht[0].height);for(let he=0,re=ht.length;he0){const ze=Rm(Ce.width,Ce.height,A.format,A.type);for(const lt of A.layerUpdates){const kt=Ce.data.subarray(lt*ze/Ce.data.BYTES_PER_ELEMENT,(lt+1)*ze/Ce.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,he,0,0,lt,Ce.width,Ce.height,1,Pe,kt)}A.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,he,0,0,0,Ce.width,Ce.height,de.depth,Pe,Ce.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,he,Ve,Ce.width,Ce.height,de.depth,0,Ce.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else N?be&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,he,0,0,0,Ce.width,Ce.height,de.depth,Pe,Je,Ce.data):t.texImage3D(n.TEXTURE_2D_ARRAY,he,Ve,Ce.width,Ce.height,de.depth,0,Pe,Je,Ce.data)}else{N&&me&&t.texStorage2D(n.TEXTURE_2D,Fe,Ve,ht[0].width,ht[0].height);for(let he=0,re=ht.length;he0){const he=Rm(de.width,de.height,A.format,A.type);for(const re of A.layerUpdates){const ze=de.data.subarray(re*he/de.data.BYTES_PER_ELEMENT,(re+1)*he/de.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,re,de.width,de.height,1,Pe,Je,ze)}A.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,de.width,de.height,de.depth,Pe,Je,de.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,Ve,de.width,de.height,de.depth,0,Pe,Je,de.data);else if(A.isData3DTexture)N?(me&&t.texStorage3D(n.TEXTURE_3D,Fe,Ve,de.width,de.height,de.depth),be&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,de.width,de.height,de.depth,Pe,Je,de.data)):t.texImage3D(n.TEXTURE_3D,0,Ve,de.width,de.height,de.depth,0,Pe,Je,de.data);else if(A.isFramebufferTexture){if(me)if(N)t.texStorage2D(n.TEXTURE_2D,Fe,Ve,de.width,de.height);else{let he=de.width,re=de.height;for(let ze=0;ze>=1,re>>=1}}else if(ht.length>0){if(N&&me){const he=it(ht[0]);t.texStorage2D(n.TEXTURE_2D,Fe,Ve,he.width,he.height)}for(let he=0,re=ht.length;he0&&Fe++;const re=it(Pe[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,Fe,ht,re.width,re.height)}for(let re=0;re<6;re++)if(de){N?be&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+re,0,0,0,Pe[re].width,Pe[re].height,Ve,Ce,Pe[re].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+re,0,ht,Pe[re].width,Pe[re].height,0,Ve,Ce,Pe[re].data);for(let ze=0;ze>ee),Je=Math.max(1,A.height>>ee);le===n.TEXTURE_3D||le===n.TEXTURE_2D_ARRAY?t.texImage3D(le,ee,Ue,Pe,Je,A.depth,0,He,ye,null):t.texImage2D(le,ee,Ue,Pe,Je,0,He,ye,null)}t.bindFramebuffer(n.FRAMEBUFFER,I),ce(A)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,J,le,de.__webglTexture,0,_e(A)):(le===n.TEXTURE_2D||le>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&le<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,J,le,de.__webglTexture,ee),t.bindFramebuffer(n.FRAMEBUFFER,null)}function X(I,A,V){if(n.bindRenderbuffer(n.RENDERBUFFER,I),A.depthBuffer){const J=A.depthTexture,le=J&&J.isDepthTexture?J.type:null,ee=b(A.stencilBuffer,le),He=A.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ye=_e(A);ce(A)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,ye,ee,A.width,A.height):V?n.renderbufferStorageMultisample(n.RENDERBUFFER,ye,ee,A.width,A.height):n.renderbufferStorage(n.RENDERBUFFER,ee,A.width,A.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,He,n.RENDERBUFFER,I)}else{const J=A.textures;for(let le=0;le{delete A.__boundDepthTexture,delete A.__depthDisposeCallback,J.removeEventListener("dispose",le)};J.addEventListener("dispose",le),A.__depthDisposeCallback=le}A.__boundDepthTexture=J}if(I.depthTexture&&!A.__autoAllocateDepthBuffer){if(V)throw new Error("target.depthTexture not supported in Cube render targets");const J=I.texture.mipmaps;J&&J.length>0?ie(A.__webglFramebuffer[0],I):ie(A.__webglFramebuffer,I)}else if(V){A.__webglDepthbuffer=[];for(let J=0;J<6;J++)if(t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[J]),A.__webglDepthbuffer[J]===void 0)A.__webglDepthbuffer[J]=n.createRenderbuffer(),X(A.__webglDepthbuffer[J],I,!1);else{const le=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer[J];n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,le,n.RENDERBUFFER,ee)}}else{const J=I.texture.mipmaps;if(J&&J.length>0?t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer),A.__webglDepthbuffer===void 0)A.__webglDepthbuffer=n.createRenderbuffer(),X(A.__webglDepthbuffer,I,!1);else{const le=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,le,n.RENDERBUFFER,ee)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Ae(I,A,V){const J=i.get(I);A!==void 0&&Se(J.__webglFramebuffer,I,I.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),V!==void 0&&xe(I)}function L(I){const A=I.texture,V=i.get(I),J=i.get(A);I.addEventListener("dispose",M);const le=I.textures,ee=I.isWebGLCubeRenderTarget===!0,He=le.length>1;if(He||(J.__webglTexture===void 0&&(J.__webglTexture=n.createTexture()),J.__version=A.version,r.memory.textures++),ee){V.__webglFramebuffer=[];for(let ye=0;ye<6;ye++)if(A.mipmaps&&A.mipmaps.length>0){V.__webglFramebuffer[ye]=[];for(let Ue=0;Ue0){V.__webglFramebuffer=[];for(let ye=0;ye0&&ce(I)===!1){V.__webglMultisampledFramebuffer=n.createFramebuffer(),V.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,V.__webglMultisampledFramebuffer);for(let ye=0;ye0)for(let Ue=0;Ue0)for(let Ue=0;Ue0){if(ce(I)===!1){const A=I.textures,V=I.width,J=I.height;let le=n.COLOR_BUFFER_BIT;const ee=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,He=i.get(I),ye=A.length>1;if(ye)for(let Be=0;Be0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,He.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,He.__webglFramebuffer);for(let Be=0;Be0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&A.__useRenderToTexture!==!1}function ge(I){const A=r.render.frame;u.get(I)!==A&&(u.set(I,A),I.update())}function $e(I,A){const V=I.colorSpace,J=I.format,le=I.type;return I.isCompressedTexture===!0||I.isVideoTexture===!0||V!==xn&&V!==Ls&&(at.getTransfer(V)===Pt?(J!==Vn||le!==Yi)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",V)),A}function it(I){return typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement?(c.width=I.naturalWidth||I.width,c.height=I.naturalHeight||I.height):typeof VideoFrame<"u"&&I instanceof VideoFrame?(c.width=I.displayWidth,c.height=I.displayHeight):(c.width=I.width,c.height=I.height),c}this.allocateTextureUnit=O,this.resetTextureUnits=D,this.setTexture2D=U,this.setTexture2DArray=F,this.setTexture3D=W,this.setTextureCube=H,this.rebindTextures=Ae,this.setupRenderTarget=L,this.updateRenderTargetMipmap=G,this.updateMultisampleRenderTarget=Q,this.setupDepthRenderbuffer=xe,this.setupFrameBufferTexture=Se,this.useMultisampledRTT=ce}function oT(n,e){function t(i,s=Ls){let a;const r=at.getTransfer(s);if(i===Yi)return n.UNSIGNED_BYTE;if(i===yh)return n.UNSIGNED_SHORT_4_4_4_4;if(i===vh)return n.UNSIGNED_SHORT_5_5_5_1;if(i===G_)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===$_)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===H_)return n.BYTE;if(i===V_)return n.SHORT;if(i===yo)return n.UNSIGNED_SHORT;if(i===gh)return n.INT;if(i===zs)return n.UNSIGNED_INT;if(i===Sn)return n.FLOAT;if(i===ls)return n.HALF_FLOAT;if(i===W_)return n.ALPHA;if(i===X_)return n.RGB;if(i===Vn)return n.RGBA;if(i===bo)return n.DEPTH_COMPONENT;if(i===xo)return n.DEPTH_STENCIL;if(i===bh)return n.RED;if(i===ic)return n.RED_INTEGER;if(i===K_)return n.RG;if(i===xh)return n.RG_INTEGER;if(i===wh)return n.RGBA_INTEGER;if(i===Tl||i===Ml||i===El||i===Cl)if(r===Pt)if(a=e.get("WEBGL_compressed_texture_s3tc_srgb"),a!==null){if(i===Tl)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Ml)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===El)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Cl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(a=e.get("WEBGL_compressed_texture_s3tc"),a!==null){if(i===Tl)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Ml)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===El)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Cl)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===yd||i===vd||i===bd||i===xd)if(a=e.get("WEBGL_compressed_texture_pvrtc"),a!==null){if(i===yd)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===vd)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===bd)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===xd)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===wd||i===Sd||i===Td)if(a=e.get("WEBGL_compressed_texture_etc"),a!==null){if(i===wd||i===Sd)return r===Pt?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(i===Td)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===Md||i===Ed||i===Cd||i===Ad||i===Rd||i===Pd||i===Id||i===Ld||i===Dd||i===kd||i===Od||i===Fd||i===Nd||i===Ud)if(a=e.get("WEBGL_compressed_texture_astc"),a!==null){if(i===Md)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===Ed)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===Cd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===Ad)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===Rd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===Pd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===Id)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===Ld)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===Dd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===kd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===Od)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===Fd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===Nd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===Ud)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===Bd||i===zd||i===Hd)if(a=e.get("EXT_texture_compression_bptc"),a!==null){if(i===Bd)return r===Pt?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===zd)return a.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===Hd)return a.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===Vd||i===Gd||i===$d||i===Wd)if(a=e.get("EXT_texture_compression_rgtc"),a!==null){if(i===Vd)return a.COMPRESSED_RED_RGTC1_EXT;if(i===Gd)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===$d)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===Wd)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===vo?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}const $D=` +}`;function Zk(n,e,t){let i=new ko;const s=new te,a=new te,r=new qe,o=new yg({depthPacking:lS}),l=new vg,c={},u=t.maxTextureSize,d={[fs]:un,[un]:fs,[ct]:ct},h=new ti({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new te},radius:{value:4}},vertexShader:Yk,fragmentShader:jk}),f=h.clone();f.defines.HORIZONTAL_PASS=1;const p=new Ge;p.setAttribute("position",new ot(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new we(p,h),_=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=$_;let m=this.type;this.render=function(x,M,C){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||x.length===0)return;const w=n.getRenderTarget(),E=n.getActiveCubeFace(),R=n.getActiveMipmapLevel(),k=n.state;k.setBlending(Ds),k.buffers.depth.getReversed()===!0?k.buffers.color.setClear(0,0,0,0):k.buffers.color.setClear(1,1,1,1),k.buffers.depth.setTest(!0),k.setScissorTest(!1);const O=m!==as&&this.type===as,D=m===as&&this.type!==as;for(let U=0,F=x.length;Uu||s.y>u)&&(s.x>u&&(a.x=Math.floor(u/ne.x),s.x=a.x*ne.x,H.mapSize.x=a.x),s.y>u&&(a.y=Math.floor(u/ne.y),s.y=a.y*ne.y,H.mapSize.y=a.y)),H.map===null||O===!0||D===!0){const pe=this.type!==as?{minFilter:dn,magFilter:dn}:{};H.map!==null&&H.map.dispose(),H.map=new ms(s.x,s.y,pe),H.map.texture.name=W.name+".shadowMap",H.camera.updateProjectionMatrix()}n.setRenderTarget(H.map),n.clear();const oe=H.getViewportCount();for(let pe=0;pe0||M.map&&M.alphaTest>0||M.alphaToCoverage===!0){const k=E.uuid,O=M.uuid;let D=c[k];D===void 0&&(D={},c[k]=D);let U=D[O];U===void 0&&(U=E.clone(),D[O]=U,M.addEventListener("dispose",T)),E=U}if(E.visible=M.visible,E.wireframe=M.wireframe,w===as?E.side=M.shadowSide!==null?M.shadowSide:M.side:E.side=M.shadowSide!==null?M.shadowSide:d[M.side],E.alphaMap=M.alphaMap,E.alphaTest=M.alphaToCoverage===!0?.5:M.alphaTest,E.map=M.map,E.clipShadows=M.clipShadows,E.clippingPlanes=M.clippingPlanes,E.clipIntersection=M.clipIntersection,E.displacementMap=M.displacementMap,E.displacementScale=M.displacementScale,E.displacementBias=M.displacementBias,E.wireframeLinewidth=M.wireframeLinewidth,E.linewidth=M.linewidth,C.isPointLight===!0&&E.isMeshDistanceMaterial===!0){const k=n.properties.get(E);k.light=C}return E}function b(x,M,C,w,E){if(x.visible===!1)return;if(x.layers.test(M.layers)&&(x.isMesh||x.isLine||x.isPoints)&&(x.castShadow||x.receiveShadow&&E===as)&&(!x.frustumCulled||i.intersectsObject(x))){x.modelViewMatrix.multiplyMatrices(C.matrixWorldInverse,x.matrixWorld);const O=e.update(x),D=x.material;if(Array.isArray(D)){const U=O.groups;for(let F=0,W=U.length;F=1):H.indexOf("OpenGL ES")!==-1&&(W=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),F=W>=2);let ne=null,oe={};const pe=n.getParameter(n.SCISSOR_BOX),Ie=n.getParameter(n.VIEWPORT),ke=new qe().fromArray(pe),Xe=new qe().fromArray(Ie);function De(N,me,be,Fe){const he=new Uint8Array(4),re=n.createTexture();n.bindTexture(N,re),n.texParameteri(N,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(N,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let ze=0;ze"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new te,u=new WeakMap;let d;const h=new WeakMap;let f=!1;try{f=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function p(I,A){return f?new OffscreenCanvas(I,A):Wl("canvas")}function g(I,A,V){let J=1;const le=it(I);if((le.width>V||le.height>V)&&(J=V/Math.max(le.width,le.height)),J<1)if(typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&I instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&I instanceof ImageBitmap||typeof VideoFrame<"u"&&I instanceof VideoFrame){const ee=Math.floor(J*le.width),He=Math.floor(J*le.height);d===void 0&&(d=p(ee,He));const ye=A?p(ee,He):d;return ye.width=ee,ye.height=He,ye.getContext("2d").drawImage(I,0,0,ee,He),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+le.width+"x"+le.height+") to ("+ee+"x"+He+")."),ye}else return"data"in I&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+le.width+"x"+le.height+")."),I;return I}function _(I){return I.generateMipmaps}function m(I){n.generateMipmap(I)}function v(I){return I.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:I.isWebGL3DRenderTarget?n.TEXTURE_3D:I.isWebGLArrayRenderTarget||I.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function y(I,A,V,J,le=!1){if(I!==null){if(n[I]!==void 0)return n[I];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+I+"'")}let ee=A;if(A===n.RED&&(V===n.FLOAT&&(ee=n.R32F),V===n.HALF_FLOAT&&(ee=n.R16F),V===n.UNSIGNED_BYTE&&(ee=n.R8)),A===n.RED_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.R8UI),V===n.UNSIGNED_SHORT&&(ee=n.R16UI),V===n.UNSIGNED_INT&&(ee=n.R32UI),V===n.BYTE&&(ee=n.R8I),V===n.SHORT&&(ee=n.R16I),V===n.INT&&(ee=n.R32I)),A===n.RG&&(V===n.FLOAT&&(ee=n.RG32F),V===n.HALF_FLOAT&&(ee=n.RG16F),V===n.UNSIGNED_BYTE&&(ee=n.RG8)),A===n.RG_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RG8UI),V===n.UNSIGNED_SHORT&&(ee=n.RG16UI),V===n.UNSIGNED_INT&&(ee=n.RG32UI),V===n.BYTE&&(ee=n.RG8I),V===n.SHORT&&(ee=n.RG16I),V===n.INT&&(ee=n.RG32I)),A===n.RGB_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGB8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGB16UI),V===n.UNSIGNED_INT&&(ee=n.RGB32UI),V===n.BYTE&&(ee=n.RGB8I),V===n.SHORT&&(ee=n.RGB16I),V===n.INT&&(ee=n.RGB32I)),A===n.RGBA_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGBA8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGBA16UI),V===n.UNSIGNED_INT&&(ee=n.RGBA32UI),V===n.BYTE&&(ee=n.RGBA8I),V===n.SHORT&&(ee=n.RGBA16I),V===n.INT&&(ee=n.RGBA32I)),A===n.RGB&&(V===n.UNSIGNED_INT_5_9_9_9_REV&&(ee=n.RGB9_E5),V===n.UNSIGNED_INT_10F_11F_11F_REV&&(ee=n.R11F_G11F_B10F)),A===n.RGBA){const He=le?Gl:rt.getTransfer(J);V===n.FLOAT&&(ee=n.RGBA32F),V===n.HALF_FLOAT&&(ee=n.RGBA16F),V===n.UNSIGNED_BYTE&&(ee=He===Pt?n.SRGB8_ALPHA8:n.RGBA8),V===n.UNSIGNED_SHORT_4_4_4_4&&(ee=n.RGBA4),V===n.UNSIGNED_SHORT_5_5_5_1&&(ee=n.RGB5_A1)}return(ee===n.R16F||ee===n.R32F||ee===n.RG16F||ee===n.RG32F||ee===n.RGBA16F||ee===n.RGBA32F)&&e.get("EXT_color_buffer_float"),ee}function b(I,A){let V;return I?A===null||A===zs||A===wo?V=n.DEPTH24_STENCIL8:A===Sn?V=n.DEPTH32F_STENCIL8:A===xo&&(V=n.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):A===null||A===zs||A===wo?V=n.DEPTH_COMPONENT24:A===Sn?V=n.DEPTH_COMPONENT32F:A===xo&&(V=n.DEPTH_COMPONENT16),V}function T(I,A){return _(I)===!0||I.isFramebufferTexture&&I.minFilter!==dn&&I.minFilter!==Vt?Math.log2(Math.max(A.width,A.height))+1:I.mipmaps!==void 0&&I.mipmaps.length>0?I.mipmaps.length:I.isCompressedTexture&&Array.isArray(I.image)?A.mipmaps.length:1}function x(I){const A=I.target;A.removeEventListener("dispose",x),C(A),A.isVideoTexture&&u.delete(A)}function M(I){const A=I.target;A.removeEventListener("dispose",M),E(A)}function C(I){const A=i.get(I);if(A.__webglInit===void 0)return;const V=I.source,J=h.get(V);if(J){const le=J[A.__cacheKey];le.usedTimes--,le.usedTimes===0&&w(I),Object.keys(J).length===0&&h.delete(V)}i.remove(I)}function w(I){const A=i.get(I);n.deleteTexture(A.__webglTexture);const V=I.source,J=h.get(V);delete J[A.__cacheKey],r.memory.textures--}function E(I){const A=i.get(I);if(I.depthTexture&&(I.depthTexture.dispose(),i.remove(I.depthTexture)),I.isWebGLCubeRenderTarget)for(let J=0;J<6;J++){if(Array.isArray(A.__webglFramebuffer[J]))for(let le=0;le=s.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+I+" texture units while this GPU supports only "+s.maxTextures),R+=1,I}function D(I){const A=[];return A.push(I.wrapS),A.push(I.wrapT),A.push(I.wrapR||0),A.push(I.magFilter),A.push(I.minFilter),A.push(I.anisotropy),A.push(I.internalFormat),A.push(I.format),A.push(I.type),A.push(I.generateMipmaps),A.push(I.premultiplyAlpha),A.push(I.flipY),A.push(I.unpackAlignment),A.push(I.colorSpace),A.join()}function U(I,A){const V=i.get(I);if(I.isVideoTexture&&ge(I),I.isRenderTargetTexture===!1&&I.isExternalTexture!==!0&&I.version>0&&V.__version!==I.version){const J=I.image;if(J===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(J.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{Z(V,I,A);return}}else I.isExternalTexture&&(V.__webglTexture=I.sourceTexture?I.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,V.__webglTexture,n.TEXTURE0+A)}function F(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_2D_ARRAY,V.__webglTexture,n.TEXTURE0+A)}function W(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_3D,V.__webglTexture,n.TEXTURE0+A)}function H(I,A){const V=i.get(I);if(I.version>0&&V.__version!==I.version){ae(V,I,A);return}t.bindTexture(n.TEXTURE_CUBE_MAP,V.__webglTexture,n.TEXTURE0+A)}const ne={[ps]:n.REPEAT,[Hn]:n.CLAMP_TO_EDGE,[bo]:n.MIRRORED_REPEAT},oe={[dn]:n.NEAREST,[wh]:n.NEAREST_MIPMAP_NEAREST,[Ka]:n.NEAREST_MIPMAP_LINEAR,[Vt]:n.LINEAR,[no]:n.LINEAR_MIPMAP_NEAREST,[Mi]:n.LINEAR_MIPMAP_LINEAR},pe={[uS]:n.NEVER,[_S]:n.ALWAYS,[dS]:n.LESS,[ig]:n.LEQUAL,[hS]:n.EQUAL,[mS]:n.GEQUAL,[fS]:n.GREATER,[pS]:n.NOTEQUAL};function Ie(I,A){if(A.type===Sn&&e.has("OES_texture_float_linear")===!1&&(A.magFilter===Vt||A.magFilter===no||A.magFilter===Ka||A.magFilter===Mi||A.minFilter===Vt||A.minFilter===no||A.minFilter===Ka||A.minFilter===Mi)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(I,n.TEXTURE_WRAP_S,ne[A.wrapS]),n.texParameteri(I,n.TEXTURE_WRAP_T,ne[A.wrapT]),(I===n.TEXTURE_3D||I===n.TEXTURE_2D_ARRAY)&&n.texParameteri(I,n.TEXTURE_WRAP_R,ne[A.wrapR]),n.texParameteri(I,n.TEXTURE_MAG_FILTER,oe[A.magFilter]),n.texParameteri(I,n.TEXTURE_MIN_FILTER,oe[A.minFilter]),A.compareFunction&&(n.texParameteri(I,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(I,n.TEXTURE_COMPARE_FUNC,pe[A.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(A.magFilter===dn||A.minFilter!==Ka&&A.minFilter!==Mi||A.type===Sn&&e.has("OES_texture_float_linear")===!1)return;if(A.anisotropy>1||i.get(A).__currentAnisotropy){const V=e.get("EXT_texture_filter_anisotropic");n.texParameterf(I,V.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(A.anisotropy,s.getMaxAnisotropy())),i.get(A).__currentAnisotropy=A.anisotropy}}}function ke(I,A){let V=!1;I.__webglInit===void 0&&(I.__webglInit=!0,A.addEventListener("dispose",x));const J=A.source;let le=h.get(J);le===void 0&&(le={},h.set(J,le));const ee=D(A);if(ee!==I.__cacheKey){le[ee]===void 0&&(le[ee]={texture:n.createTexture(),usedTimes:0},r.memory.textures++,V=!0),le[ee].usedTimes++;const He=le[I.__cacheKey];He!==void 0&&(le[I.__cacheKey].usedTimes--,He.usedTimes===0&&w(A)),I.__cacheKey=ee,I.__webglTexture=le[ee].texture}return V}function Xe(I,A,V){return Math.floor(Math.floor(I/V)/A)}function De(I,A,V,J){const ee=I.updateRanges;if(ee.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,A.width,A.height,V,J,A.data);else{ee.sort((de,Pe)=>de.start-Pe.start);let He=0;for(let de=1;de0){N&&me&&t.texStorage2D(n.TEXTURE_2D,Fe,Ve,ht[0].width,ht[0].height);for(let he=0,re=ht.length;he0){const ze=Fm(Ce.width,Ce.height,A.format,A.type);for(const lt of A.layerUpdates){const Dt=Ce.data.subarray(lt*ze/Ce.data.BYTES_PER_ELEMENT,(lt+1)*ze/Ce.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,he,0,0,lt,Ce.width,Ce.height,1,Pe,Dt)}A.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,he,0,0,0,Ce.width,Ce.height,de.depth,Pe,Ce.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,he,Ve,Ce.width,Ce.height,de.depth,0,Ce.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else N?be&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,he,0,0,0,Ce.width,Ce.height,de.depth,Pe,Je,Ce.data):t.texImage3D(n.TEXTURE_2D_ARRAY,he,Ve,Ce.width,Ce.height,de.depth,0,Pe,Je,Ce.data)}else{N&&me&&t.texStorage2D(n.TEXTURE_2D,Fe,Ve,ht[0].width,ht[0].height);for(let he=0,re=ht.length;he0){const he=Fm(de.width,de.height,A.format,A.type);for(const re of A.layerUpdates){const ze=de.data.subarray(re*he/de.data.BYTES_PER_ELEMENT,(re+1)*he/de.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,re,de.width,de.height,1,Pe,Je,ze)}A.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,de.width,de.height,de.depth,Pe,Je,de.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,Ve,de.width,de.height,de.depth,0,Pe,Je,de.data);else if(A.isData3DTexture)N?(me&&t.texStorage3D(n.TEXTURE_3D,Fe,Ve,de.width,de.height,de.depth),be&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,de.width,de.height,de.depth,Pe,Je,de.data)):t.texImage3D(n.TEXTURE_3D,0,Ve,de.width,de.height,de.depth,0,Pe,Je,de.data);else if(A.isFramebufferTexture){if(me)if(N)t.texStorage2D(n.TEXTURE_2D,Fe,Ve,de.width,de.height);else{let he=de.width,re=de.height;for(let ze=0;ze>=1,re>>=1}}else if(ht.length>0){if(N&&me){const he=it(ht[0]);t.texStorage2D(n.TEXTURE_2D,Fe,Ve,he.width,he.height)}for(let he=0,re=ht.length;he0&&Fe++;const re=it(Pe[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,Fe,ht,re.width,re.height)}for(let re=0;re<6;re++)if(de){N?be&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+re,0,0,0,Pe[re].width,Pe[re].height,Ve,Ce,Pe[re].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+re,0,ht,Pe[re].width,Pe[re].height,0,Ve,Ce,Pe[re].data);for(let ze=0;ze>ee),Je=Math.max(1,A.height>>ee);le===n.TEXTURE_3D||le===n.TEXTURE_2D_ARRAY?t.texImage3D(le,ee,Ue,Pe,Je,A.depth,0,He,ye,null):t.texImage2D(le,ee,Ue,Pe,Je,0,He,ye,null)}t.bindFramebuffer(n.FRAMEBUFFER,I),ce(A)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,J,le,de.__webglTexture,0,_e(A)):(le===n.TEXTURE_2D||le>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&le<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,J,le,de.__webglTexture,ee),t.bindFramebuffer(n.FRAMEBUFFER,null)}function X(I,A,V){if(n.bindRenderbuffer(n.RENDERBUFFER,I),A.depthBuffer){const J=A.depthTexture,le=J&&J.isDepthTexture?J.type:null,ee=b(A.stencilBuffer,le),He=A.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ye=_e(A);ce(A)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,ye,ee,A.width,A.height):V?n.renderbufferStorageMultisample(n.RENDERBUFFER,ye,ee,A.width,A.height):n.renderbufferStorage(n.RENDERBUFFER,ee,A.width,A.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,He,n.RENDERBUFFER,I)}else{const J=A.textures;for(let le=0;le{delete A.__boundDepthTexture,delete A.__depthDisposeCallback,J.removeEventListener("dispose",le)};J.addEventListener("dispose",le),A.__depthDisposeCallback=le}A.__boundDepthTexture=J}if(I.depthTexture&&!A.__autoAllocateDepthBuffer){if(V)throw new Error("target.depthTexture not supported in Cube render targets");const J=I.texture.mipmaps;J&&J.length>0?ie(A.__webglFramebuffer[0],I):ie(A.__webglFramebuffer,I)}else if(V){A.__webglDepthbuffer=[];for(let J=0;J<6;J++)if(t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[J]),A.__webglDepthbuffer[J]===void 0)A.__webglDepthbuffer[J]=n.createRenderbuffer(),X(A.__webglDepthbuffer[J],I,!1);else{const le=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer[J];n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,le,n.RENDERBUFFER,ee)}}else{const J=I.texture.mipmaps;if(J&&J.length>0?t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer),A.__webglDepthbuffer===void 0)A.__webglDepthbuffer=n.createRenderbuffer(),X(A.__webglDepthbuffer,I,!1);else{const le=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,le,n.RENDERBUFFER,ee)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Ae(I,A,V){const J=i.get(I);A!==void 0&&Se(J.__webglFramebuffer,I,I.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),V!==void 0&&xe(I)}function L(I){const A=I.texture,V=i.get(I),J=i.get(A);I.addEventListener("dispose",M);const le=I.textures,ee=I.isWebGLCubeRenderTarget===!0,He=le.length>1;if(He||(J.__webglTexture===void 0&&(J.__webglTexture=n.createTexture()),J.__version=A.version,r.memory.textures++),ee){V.__webglFramebuffer=[];for(let ye=0;ye<6;ye++)if(A.mipmaps&&A.mipmaps.length>0){V.__webglFramebuffer[ye]=[];for(let Ue=0;Ue0){V.__webglFramebuffer=[];for(let ye=0;ye0&&ce(I)===!1){V.__webglMultisampledFramebuffer=n.createFramebuffer(),V.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,V.__webglMultisampledFramebuffer);for(let ye=0;ye0)for(let Ue=0;Ue0)for(let Ue=0;Ue0){if(ce(I)===!1){const A=I.textures,V=I.width,J=I.height;let le=n.COLOR_BUFFER_BIT;const ee=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,He=i.get(I),ye=A.length>1;if(ye)for(let Be=0;Be0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,He.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,He.__webglFramebuffer);for(let Be=0;Be0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&A.__useRenderToTexture!==!1}function ge(I){const A=r.render.frame;u.get(I)!==A&&(u.set(I,A),I.update())}function $e(I,A){const V=I.colorSpace,J=I.format,le=I.type;return I.isCompressedTexture===!0||I.isVideoTexture===!0||V!==xn&&V!==Ls&&(rt.getTransfer(V)===Pt?(J!==Vn||le!==ji)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",V)),A}function it(I){return typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement?(c.width=I.naturalWidth||I.width,c.height=I.naturalHeight||I.height):typeof VideoFrame<"u"&&I instanceof VideoFrame?(c.width=I.displayWidth,c.height=I.displayHeight):(c.width=I.width,c.height=I.height),c}this.allocateTextureUnit=O,this.resetTextureUnits=k,this.setTexture2D=U,this.setTexture2DArray=F,this.setTexture3D=W,this.setTextureCube=H,this.rebindTextures=Ae,this.setupRenderTarget=L,this.updateRenderTargetMipmap=G,this.updateMultisampleRenderTarget=Q,this.setupDepthRenderbuffer=xe,this.setupFrameBufferTexture=Se,this.useMultisampledRTT=ce}function mT(n,e){function t(i,s=Ls){let a;const r=rt.getTransfer(s);if(i===ji)return n.UNSIGNED_BYTE;if(i===Th)return n.UNSIGNED_SHORT_4_4_4_4;if(i===Mh)return n.UNSIGNED_SHORT_5_5_5_1;if(i===j_)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===Z_)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===q_)return n.BYTE;if(i===Y_)return n.SHORT;if(i===xo)return n.UNSIGNED_SHORT;if(i===Sh)return n.INT;if(i===zs)return n.UNSIGNED_INT;if(i===Sn)return n.FLOAT;if(i===ls)return n.HALF_FLOAT;if(i===J_)return n.ALPHA;if(i===Q_)return n.RGB;if(i===Vn)return n.RGBA;if(i===So)return n.DEPTH_COMPONENT;if(i===To)return n.DEPTH_STENCIL;if(i===Eh)return n.RED;if(i===oc)return n.RED_INTEGER;if(i===eg)return n.RG;if(i===Ch)return n.RG_INTEGER;if(i===Ah)return n.RGBA_INTEGER;if(i===Cl||i===Al||i===Rl||i===Pl)if(r===Pt)if(a=e.get("WEBGL_compressed_texture_s3tc_srgb"),a!==null){if(i===Cl)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Al)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Rl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Pl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(a=e.get("WEBGL_compressed_texture_s3tc"),a!==null){if(i===Cl)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Al)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Rl)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Pl)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===Td||i===Md||i===Ed||i===Cd)if(a=e.get("WEBGL_compressed_texture_pvrtc"),a!==null){if(i===Td)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===Md)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===Ed)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===Cd)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===Ad||i===Rd||i===Pd)if(a=e.get("WEBGL_compressed_texture_etc"),a!==null){if(i===Ad||i===Rd)return r===Pt?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(i===Pd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===Id||i===Ld||i===kd||i===Dd||i===Od||i===Fd||i===Nd||i===Ud||i===Bd||i===zd||i===Hd||i===Vd||i===Gd||i===$d)if(a=e.get("WEBGL_compressed_texture_astc"),a!==null){if(i===Id)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===Ld)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===kd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===Dd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===Od)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===Fd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===Nd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===Ud)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===Bd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===zd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===Hd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===Vd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===Gd)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===$d)return r===Pt?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===Wd||i===Xd||i===Kd)if(a=e.get("EXT_texture_compression_bptc"),a!==null){if(i===Wd)return r===Pt?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===Xd)return a.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===Kd)return a.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===qd||i===Yd||i===jd||i===Zd)if(a=e.get("EXT_texture_compression_rgtc"),a!==null){if(i===qd)return a.COMPRESSED_RED_RGTC1_EXT;if(i===Yd)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===jd)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===Zd)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===wo?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}const tD=` void main() { gl_Position = vec4( position, 1.0 ); -}`,WD=` +}`,nD=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -3829,16 +3829,16 @@ void main() { } -}`;class XD{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){const i=new ng(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){const t=e.cameras[0].viewport,i=new ti({vertexShader:$D,fragmentShader:WD,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new we(new Dn(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class KD extends gs{constructor(e,t){super();const i=this;let s=null,a=1,r=null,o="local-floor",l=1,c=null,u=null,d=null,h=null,f=null,p=null;const g=typeof XRWebGLBinding<"u",_=new XD,m={},v=t.getContextAttributes();let y=null,b=null;const T=[],x=[],M=new te;let C=null;const w=new Jt;w.viewport=new qe;const E=new Jt;E.viewport=new qe;const R=[w,E],D=new YS;let O=null,k=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(Z){let se=T[Z];return se===void 0&&(se=new Gu,T[Z]=se),se.getTargetRaySpace()},this.getControllerGrip=function(Z){let se=T[Z];return se===void 0&&(se=new Gu,T[Z]=se),se.getGripSpace()},this.getHand=function(Z){let se=T[Z];return se===void 0&&(se=new Gu,T[Z]=se),se.getHandSpace()};function U(Z){const se=x.indexOf(Z.inputSource);if(se===-1)return;const Se=T[se];Se!==void 0&&(Se.update(Z.inputSource,Z.frame,c||r),Se.dispatchEvent({type:Z.type,data:Z.inputSource}))}function F(){s.removeEventListener("select",U),s.removeEventListener("selectstart",U),s.removeEventListener("selectend",U),s.removeEventListener("squeeze",U),s.removeEventListener("squeezestart",U),s.removeEventListener("squeezeend",U),s.removeEventListener("end",F),s.removeEventListener("inputsourceschange",W);for(let Z=0;Z=0&&(x[X]=null,T[X].disconnect(Se))}for(let se=0;se=x.length){x.push(Se),X=xe;break}else if(x[xe]===null){x[xe]=Se,X=xe;break}if(X===-1)break}const ie=T[X];ie&&ie.connect(Se)}}const H=new S,ne=new S;function oe(Z,se,Se){H.setFromMatrixPosition(se.matrixWorld),ne.setFromMatrixPosition(Se.matrixWorld);const X=H.distanceTo(ne),ie=se.projectionMatrix.elements,xe=Se.projectionMatrix.elements,Ae=ie[14]/(ie[10]-1),L=ie[14]/(ie[10]+1),G=(ie[9]+1)/ie[5],j=(ie[9]-1)/ie[5],Y=(ie[8]-1)/ie[0],Q=(xe[8]+1)/xe[0],_e=Ae*Y,ce=Ae*Q,ge=X/(-Y+Q),$e=ge*-Y;if(se.matrixWorld.decompose(Z.position,Z.quaternion,Z.scale),Z.translateX($e),Z.translateZ(ge),Z.matrixWorld.compose(Z.position,Z.quaternion,Z.scale),Z.matrixWorldInverse.copy(Z.matrixWorld).invert(),ie[10]===-1)Z.projectionMatrix.copy(se.projectionMatrix),Z.projectionMatrixInverse.copy(se.projectionMatrixInverse);else{const it=Ae+ge,I=L+ge,A=_e-$e,V=ce+(X-$e),J=G*L/I*it,le=j*L/I*it;Z.projectionMatrix.makePerspective(A,V,J,le,it,I),Z.projectionMatrixInverse.copy(Z.projectionMatrix).invert()}}function pe(Z,se){se===null?Z.matrixWorld.copy(Z.matrix):Z.matrixWorld.multiplyMatrices(se.matrixWorld,Z.matrix),Z.matrixWorldInverse.copy(Z.matrixWorld).invert()}this.updateCamera=function(Z){if(s===null)return;let se=Z.near,Se=Z.far;_.texture!==null&&(_.depthNear>0&&(se=_.depthNear),_.depthFar>0&&(Se=_.depthFar)),D.near=E.near=w.near=se,D.far=E.far=w.far=Se,(O!==D.near||k!==D.far)&&(s.updateRenderState({depthNear:D.near,depthFar:D.far}),O=D.near,k=D.far),D.layers.mask=Z.layers.mask|6,w.layers.mask=D.layers.mask&3,E.layers.mask=D.layers.mask&5;const X=Z.parent,ie=D.cameras;pe(D,X);for(let xe=0;xe0&&(_.alphaTest.value=m.alphaTest);const v=e.get(m),y=v.envMap,b=v.envMapRotation;y&&(_.envMap.value=y,Pa.copy(b),Pa.x*=-1,Pa.y*=-1,Pa.z*=-1,y.isCubeTexture&&y.isRenderTargetTexture===!1&&(Pa.y*=-1,Pa.z*=-1),_.envMapRotation.value.setFromMatrix4(qD.makeRotationFromEuler(Pa)),_.flipEnvMap.value=y.isCubeTexture&&y.isRenderTargetTexture===!1?-1:1,_.reflectivity.value=m.reflectivity,_.ior.value=m.ior,_.refractionRatio.value=m.refractionRatio),m.lightMap&&(_.lightMap.value=m.lightMap,_.lightMapIntensity.value=m.lightMapIntensity,t(m.lightMap,_.lightMapTransform)),m.aoMap&&(_.aoMap.value=m.aoMap,_.aoMapIntensity.value=m.aoMapIntensity,t(m.aoMap,_.aoMapTransform))}function r(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform))}function o(_,m){_.dashSize.value=m.dashSize,_.totalSize.value=m.dashSize+m.gapSize,_.scale.value=m.scale}function l(_,m,v,y){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.size.value=m.size*v,_.scale.value=y*.5,m.map&&(_.map.value=m.map,t(m.map,_.uvTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function c(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.rotation.value=m.rotation,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function u(_,m){_.specular.value.copy(m.specular),_.shininess.value=Math.max(m.shininess,1e-4)}function d(_,m){m.gradientMap&&(_.gradientMap.value=m.gradientMap)}function h(_,m){_.metalness.value=m.metalness,m.metalnessMap&&(_.metalnessMap.value=m.metalnessMap,t(m.metalnessMap,_.metalnessMapTransform)),_.roughness.value=m.roughness,m.roughnessMap&&(_.roughnessMap.value=m.roughnessMap,t(m.roughnessMap,_.roughnessMapTransform)),m.envMap&&(_.envMapIntensity.value=m.envMapIntensity)}function f(_,m,v){_.ior.value=m.ior,m.sheen>0&&(_.sheenColor.value.copy(m.sheenColor).multiplyScalar(m.sheen),_.sheenRoughness.value=m.sheenRoughness,m.sheenColorMap&&(_.sheenColorMap.value=m.sheenColorMap,t(m.sheenColorMap,_.sheenColorMapTransform)),m.sheenRoughnessMap&&(_.sheenRoughnessMap.value=m.sheenRoughnessMap,t(m.sheenRoughnessMap,_.sheenRoughnessMapTransform))),m.clearcoat>0&&(_.clearcoat.value=m.clearcoat,_.clearcoatRoughness.value=m.clearcoatRoughness,m.clearcoatMap&&(_.clearcoatMap.value=m.clearcoatMap,t(m.clearcoatMap,_.clearcoatMapTransform)),m.clearcoatRoughnessMap&&(_.clearcoatRoughnessMap.value=m.clearcoatRoughnessMap,t(m.clearcoatRoughnessMap,_.clearcoatRoughnessMapTransform)),m.clearcoatNormalMap&&(_.clearcoatNormalMap.value=m.clearcoatNormalMap,t(m.clearcoatNormalMap,_.clearcoatNormalMapTransform),_.clearcoatNormalScale.value.copy(m.clearcoatNormalScale),m.side===un&&_.clearcoatNormalScale.value.negate())),m.dispersion>0&&(_.dispersion.value=m.dispersion),m.iridescence>0&&(_.iridescence.value=m.iridescence,_.iridescenceIOR.value=m.iridescenceIOR,_.iridescenceThicknessMinimum.value=m.iridescenceThicknessRange[0],_.iridescenceThicknessMaximum.value=m.iridescenceThicknessRange[1],m.iridescenceMap&&(_.iridescenceMap.value=m.iridescenceMap,t(m.iridescenceMap,_.iridescenceMapTransform)),m.iridescenceThicknessMap&&(_.iridescenceThicknessMap.value=m.iridescenceThicknessMap,t(m.iridescenceThicknessMap,_.iridescenceThicknessMapTransform))),m.transmission>0&&(_.transmission.value=m.transmission,_.transmissionSamplerMap.value=v.texture,_.transmissionSamplerSize.value.set(v.width,v.height),m.transmissionMap&&(_.transmissionMap.value=m.transmissionMap,t(m.transmissionMap,_.transmissionMapTransform)),_.thickness.value=m.thickness,m.thicknessMap&&(_.thicknessMap.value=m.thicknessMap,t(m.thicknessMap,_.thicknessMapTransform)),_.attenuationDistance.value=m.attenuationDistance,_.attenuationColor.value.copy(m.attenuationColor)),m.anisotropy>0&&(_.anisotropyVector.value.set(m.anisotropy*Math.cos(m.anisotropyRotation),m.anisotropy*Math.sin(m.anisotropyRotation)),m.anisotropyMap&&(_.anisotropyMap.value=m.anisotropyMap,t(m.anisotropyMap,_.anisotropyMapTransform))),_.specularIntensity.value=m.specularIntensity,_.specularColor.value.copy(m.specularColor),m.specularColorMap&&(_.specularColorMap.value=m.specularColorMap,t(m.specularColorMap,_.specularColorMapTransform)),m.specularIntensityMap&&(_.specularIntensityMap.value=m.specularIntensityMap,t(m.specularIntensityMap,_.specularIntensityMapTransform))}function p(_,m){m.matcap&&(_.matcap.value=m.matcap)}function g(_,m){const v=e.get(m).light;_.referencePosition.value.setFromMatrixPosition(v.matrixWorld),_.nearDistance.value=v.shadow.camera.near,_.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function jD(n,e,t,i){let s={},a={},r=[];const o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(v,y){const b=y.program;i.uniformBlockBinding(v,b)}function c(v,y){let b=s[v.id];b===void 0&&(p(v),b=u(v),s[v.id]=b,v.addEventListener("dispose",_));const T=y.program;i.updateUBOMapping(v,T);const x=e.render.frame;a[v.id]!==x&&(h(v),a[v.id]=x)}function u(v){const y=d();v.__bindingPointIndex=y;const b=n.createBuffer(),T=v.__size,x=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,b),n.bufferData(n.UNIFORM_BUFFER,T,x),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,y,b),b}function d(){for(let v=0;v0&&(b+=T-x),v.__size=b,v.__cache={},this}function g(v){const y={boundary:0,storage:0};return typeof v=="number"||typeof v=="boolean"?(y.boundary=4,y.storage=4):v.isVector2?(y.boundary=8,y.storage=8):v.isVector3||v.isColor?(y.boundary=16,y.storage=12):v.isVector4?(y.boundary=16,y.storage=16):v.isMatrix3?(y.boundary=48,y.storage=48):v.isMatrix4?(y.boundary=64,y.storage=64):v.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",v),y}function _(v){const y=v.target;y.removeEventListener("dispose",_);const b=r.indexOf(y.__bindingPointIndex);r.splice(b,1),n.deleteBuffer(s[y.id]),delete s[y.id],delete a[y.id]}function m(){for(const v in s)n.deleteBuffer(s[v]);r=[],s={},a={}}return{bind:l,update:c,dispose:m}}class Eg{constructor(e={}){const{canvas:t=uS(),context:i=null,depth:s=!0,stencil:a=!1,alpha:r=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:u="default",failIfMajorPerformanceCaveat:d=!1,reversedDepthBuffer:h=!1}=e;this.isWebGLRenderer=!0;let f;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");f=i.getContextAttributes().alpha}else f=r;const p=new Uint32Array(4),g=new Int32Array(4);let _=null,m=null;const v=[],y=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=Os,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const b=this;let T=!1;this._outputColorSpace=gt;let x=0,M=0,C=null,w=-1,E=null;const R=new qe,D=new qe;let O=null;const k=new ue(0);let U=0,F=t.width,W=t.height,H=1,ne=null,oe=null;const pe=new qe(0,0,F,W),Ie=new qe(0,0,F,W);let De=!1;const Xe=new Po;let ke=!1,Z=!1;const se=new Me,Se=new S,X=new qe,ie={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let xe=!1;function Ae(){return C===null?H:1}let L=i;function G(P,B){return t.getContext(P,B)}try{const P={alpha:!0,depth:s,stencil:a,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:u,failIfMajorPerformanceCaveat:d};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${ph}`),t.addEventListener("webglcontextlost",be,!1),t.addEventListener("webglcontextrestored",Fe,!1),t.addEventListener("webglcontextcreationerror",he,!1),L===null){const B="webgl2";if(L=G(B,P),L===null)throw G(B)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(P){throw console.error("THREE.WebGLRenderer: "+P.message),P}let j,Y,Q,_e,ce,ge,$e,it,I,A,V,J,le,ee,He,ye,Ue,Be,de,Pe,Je,Ve,Ce,ht;function N(){j=new l2(L),j.init(),Ve=new oT(L,j),Y=new t2(L,j,e,Ve),Q=new VD(L,j),Y.reversedDepthBuffer&&h&&Q.buffers.depth.setReversed(!0),_e=new d2(L),ce=new RD,ge=new GD(L,j,Q,ce,Y,Ve,_e),$e=new i2(b),it=new o2(b),I=new gP(L),Ce=new QL(L,I),A=new c2(L,I,_e,Ce),V=new f2(L,A,I,_e),de=new h2(L,Y,ge),ye=new n2(ce),J=new AD(b,$e,it,j,Y,Ce,ye),le=new YD(b,ce),ee=new ID,He=new ND(j),Be=new JL(b,$e,it,Q,V,f,l),Ue=new zD(b,V,Y),ht=new jD(L,_e,Y,Q),Pe=new e2(L,j,_e),Je=new u2(L,j,_e),_e.programs=J.programs,b.capabilities=Y,b.extensions=j,b.properties=ce,b.renderLists=ee,b.shadowMap=Ue,b.state=Q,b.info=_e}N();const me=new KD(b,L);this.xr=me,this.getContext=function(){return L},this.getContextAttributes=function(){return L.getContextAttributes()},this.forceContextLoss=function(){const P=j.get("WEBGL_lose_context");P&&P.loseContext()},this.forceContextRestore=function(){const P=j.get("WEBGL_lose_context");P&&P.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(P){P!==void 0&&(H=P,this.setSize(F,W,!1))},this.getSize=function(P){return P.set(F,W)},this.setSize=function(P,B,K=!0){if(me.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}F=P,W=B,t.width=Math.floor(P*H),t.height=Math.floor(B*H),K===!0&&(t.style.width=P+"px",t.style.height=B+"px"),this.setViewport(0,0,P,B)},this.getDrawingBufferSize=function(P){return P.set(F*H,W*H).floor()},this.setDrawingBufferSize=function(P,B,K){F=P,W=B,H=K,t.width=Math.floor(P*K),t.height=Math.floor(B*K),this.setViewport(0,0,P,B)},this.getCurrentViewport=function(P){return P.copy(R)},this.getViewport=function(P){return P.copy(pe)},this.setViewport=function(P,B,K,q){P.isVector4?pe.set(P.x,P.y,P.z,P.w):pe.set(P,B,K,q),Q.viewport(R.copy(pe).multiplyScalar(H).round())},this.getScissor=function(P){return P.copy(Ie)},this.setScissor=function(P,B,K,q){P.isVector4?Ie.set(P.x,P.y,P.z,P.w):Ie.set(P,B,K,q),Q.scissor(D.copy(Ie).multiplyScalar(H).round())},this.getScissorTest=function(){return De},this.setScissorTest=function(P){Q.setScissorTest(De=P)},this.setOpaqueSort=function(P){ne=P},this.setTransparentSort=function(P){oe=P},this.getClearColor=function(P){return P.copy(Be.getClearColor())},this.setClearColor=function(){Be.setClearColor(...arguments)},this.getClearAlpha=function(){return Be.getClearAlpha()},this.setClearAlpha=function(){Be.setClearAlpha(...arguments)},this.clear=function(P=!0,B=!0,K=!0){let q=0;if(P){let z=!1;if(C!==null){const fe=C.texture.format;z=fe===wh||fe===xh||fe===ic}if(z){const fe=C.texture.type,Re=fe===Yi||fe===zs||fe===yo||fe===vo||fe===yh||fe===vh,Ne=Be.getClearColor(),Oe=Be.getClearAlpha(),je=Ne.r,et=Ne.g,We=Ne.b;Re?(p[0]=je,p[1]=et,p[2]=We,p[3]=Oe,L.clearBufferuiv(L.COLOR,0,p)):(g[0]=je,g[1]=et,g[2]=We,g[3]=Oe,L.clearBufferiv(L.COLOR,0,g))}else q|=L.COLOR_BUFFER_BIT}B&&(q|=L.DEPTH_BUFFER_BIT),K&&(q|=L.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),L.clear(q)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",be,!1),t.removeEventListener("webglcontextrestored",Fe,!1),t.removeEventListener("webglcontextcreationerror",he,!1),Be.dispose(),ee.dispose(),He.dispose(),ce.dispose(),$e.dispose(),it.dispose(),V.dispose(),Ce.dispose(),ht.dispose(),J.dispose(),me.dispose(),me.removeEventListener("sessionstart",Zi),me.removeEventListener("sessionend",ty),ma.stop()};function be(P){P.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),T=!0}function Fe(){console.log("THREE.WebGLRenderer: Context Restored."),T=!1;const P=_e.autoReset,B=Ue.enabled,K=Ue.autoUpdate,q=Ue.needsUpdate,z=Ue.type;N(),_e.autoReset=P,Ue.enabled=B,Ue.autoUpdate=K,Ue.needsUpdate=q,Ue.type=z}function he(P){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",P.statusMessage)}function re(P){const B=P.target;B.removeEventListener("dispose",re),ze(B)}function ze(P){lt(P),ce.remove(P)}function lt(P){const B=ce.get(P).programs;B!==void 0&&(B.forEach(function(K){J.releaseProgram(K)}),P.isShaderMaterial&&J.releaseShaderCache(P))}this.renderBufferDirect=function(P,B,K,q,z,fe){B===null&&(B=ie);const Re=z.isMesh&&z.matrixWorld.determinant()<0,Ne=b1(P,B,K,q,z);Q.setMaterial(q,Re);let Oe=K.index,je=1;if(q.wireframe===!0){if(Oe=A.getWireframeAttribute(K),Oe===void 0)return;je=2}const et=K.drawRange,We=K.attributes.position;let wt=et.start*je,It=(et.start+et.count)*je;fe!==null&&(wt=Math.max(wt,fe.start*je),It=Math.min(It,(fe.start+fe.count)*je)),Oe!==null?(wt=Math.max(wt,0),It=Math.min(It,Oe.count)):We!=null&&(wt=Math.max(wt,0),It=Math.min(It,We.count));const qt=It-wt;if(qt<0||qt===1/0)return;Ce.setup(z,q,Ne,K,Oe);let Ft,Dt=Pe;if(Oe!==null&&(Ft=I.get(Oe),Dt=Je,Dt.setIndex(Ft)),z.isMesh)q.wireframe===!0?(Q.setLineWidth(q.wireframeLinewidth*Ae()),Dt.setMode(L.LINES)):Dt.setMode(L.TRIANGLES);else if(z.isLine){let Ke=q.linewidth;Ke===void 0&&(Ke=1),Q.setLineWidth(Ke*Ae()),z.isLineSegments?Dt.setMode(L.LINES):z.isLineLoop?Dt.setMode(L.LINE_LOOP):Dt.setMode(L.LINE_STRIP)}else z.isPoints?Dt.setMode(L.POINTS):z.isSprite&&Dt.setMode(L.TRIANGLES);if(z.isBatchedMesh)if(z._multiDrawInstances!==null)Vl("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),Dt.renderMultiDrawInstances(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount,z._multiDrawInstances);else if(j.get("WEBGL_multi_draw"))Dt.renderMultiDraw(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount);else{const Ke=z._multiDrawStarts,Gt=z._multiDrawCounts,St=z._multiDrawCount,ri=Oe?I.get(Oe).bytesPerElement:1,gr=ce.get(q).currentProgram.getUniforms();for(let oi=0;oi{function fe(){if(q.forEach(function(Re){ce.get(Re).currentProgram.isReady()&&q.delete(Re)}),q.size===0){z(P);return}setTimeout(fe,10)}j.get("KHR_parallel_shader_compile")!==null?fe():setTimeout(fe,10)})};let Et=null;function ys(P){Et&&Et(P)}function Zi(){ma.stop()}function ty(){ma.start()}const ma=new nT;ma.setAnimationLoop(ys),typeof self<"u"&&ma.setContext(self),this.setAnimationLoop=function(P){Et=P,me.setAnimationLoop(P),P===null?ma.stop():ma.start()},me.addEventListener("sessionstart",Zi),me.addEventListener("sessionend",ty),this.render=function(P,B){if(B!==void 0&&B.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(T===!0)return;if(P.matrixWorldAutoUpdate===!0&&P.updateMatrixWorld(),B.parent===null&&B.matrixWorldAutoUpdate===!0&&B.updateMatrixWorld(),me.enabled===!0&&me.isPresenting===!0&&(me.cameraAutoUpdate===!0&&me.updateCamera(B),B=me.getCamera()),P.isScene===!0&&P.onBeforeRender(b,P,B,C),m=He.get(P,y.length),m.init(B),y.push(m),se.multiplyMatrices(B.projectionMatrix,B.matrixWorldInverse),Xe.setFromProjectionMatrix(se,hi,B.reversedDepth),Z=this.localClippingEnabled,ke=ye.init(this.clippingPlanes,Z),_=ee.get(P,v.length),_.init(),v.push(_),me.enabled===!0&&me.isPresenting===!0){const fe=b.xr.getDepthSensingMesh();fe!==null&&df(fe,B,-1/0,b.sortObjects)}df(P,B,0,b.sortObjects),_.finish(),b.sortObjects===!0&&_.sort(ne,oe),xe=me.enabled===!1||me.isPresenting===!1||me.hasDepthSensing()===!1,xe&&Be.addToRenderList(_,P),this.info.render.frame++,ke===!0&&ye.beginShadows();const K=m.state.shadowsArray;Ue.render(K,P,B),ke===!0&&ye.endShadows(),this.info.autoReset===!0&&this.info.reset();const q=_.opaque,z=_.transmissive;if(m.setupLights(),B.isArrayCamera){const fe=B.cameras;if(z.length>0)for(let Re=0,Ne=fe.length;Re0&&iy(q,z,P,B),xe&&Be.render(P),ny(_,P,B);C!==null&&M===0&&(ge.updateMultisampleRenderTarget(C),ge.updateRenderTargetMipmap(C)),P.isScene===!0&&P.onAfterRender(b,P,B),Ce.resetDefaultState(),w=-1,E=null,y.pop(),y.length>0?(m=y[y.length-1],ke===!0&&ye.setGlobalState(b.clippingPlanes,m.state.camera)):m=null,v.pop(),v.length>0?_=v[v.length-1]:_=null};function df(P,B,K,q){if(P.visible===!1)return;if(P.layers.test(B.layers)){if(P.isGroup)K=P.renderOrder;else if(P.isLOD)P.autoUpdate===!0&&P.update(B);else if(P.isLight)m.pushLight(P),P.castShadow&&m.pushShadow(P);else if(P.isSprite){if(!P.frustumCulled||Xe.intersectsSprite(P)){q&&X.setFromMatrixPosition(P.matrixWorld).applyMatrix4(se);const Re=V.update(P),Ne=P.material;Ne.visible&&_.push(P,Re,Ne,K,X.z,null)}}else if((P.isMesh||P.isLine||P.isPoints)&&(!P.frustumCulled||Xe.intersectsObject(P))){const Re=V.update(P),Ne=P.material;if(q&&(P.boundingSphere!==void 0?(P.boundingSphere===null&&P.computeBoundingSphere(),X.copy(P.boundingSphere.center)):(Re.boundingSphere===null&&Re.computeBoundingSphere(),X.copy(Re.boundingSphere.center)),X.applyMatrix4(P.matrixWorld).applyMatrix4(se)),Array.isArray(Ne)){const Oe=Re.groups;for(let je=0,et=Oe.length;je0&&mc(z,B,K),fe.length>0&&mc(fe,B,K),Re.length>0&&mc(Re,B,K),Q.buffers.depth.setTest(!0),Q.buffers.depth.setMask(!0),Q.buffers.color.setMask(!0),Q.setPolygonOffset(!1)}function iy(P,B,K,q){if((K.isScene===!0?K.overrideMaterial:null)!==null)return;m.state.transmissionRenderTarget[q.id]===void 0&&(m.state.transmissionRenderTarget[q.id]=new ms(1,1,{generateMipmaps:!0,type:j.has("EXT_color_buffer_half_float")||j.has("EXT_color_buffer_float")?ls:Yi,minFilter:Ti,samples:4,stencilBuffer:a,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:at.workingColorSpace}));const fe=m.state.transmissionRenderTarget[q.id],Re=q.viewport||R;fe.setSize(Re.z*b.transmissionResolutionScale,Re.w*b.transmissionResolutionScale);const Ne=b.getRenderTarget(),Oe=b.getActiveCubeFace(),je=b.getActiveMipmapLevel();b.setRenderTarget(fe),b.getClearColor(k),U=b.getClearAlpha(),U<1&&b.setClearColor(16777215,.5),b.clear(),xe&&Be.render(K);const et=b.toneMapping;b.toneMapping=Os;const We=q.viewport;if(q.viewport!==void 0&&(q.viewport=void 0),m.setupLightsView(q),ke===!0&&ye.setGlobalState(b.clippingPlanes,q),mc(P,K,q),ge.updateMultisampleRenderTarget(fe),ge.updateRenderTargetMipmap(fe),j.has("WEBGL_multisampled_render_to_texture")===!1){let wt=!1;for(let It=0,qt=B.length;It0),We=!!K.morphAttributes.position,wt=!!K.morphAttributes.normal,It=!!K.morphAttributes.color;let qt=Os;q.toneMapped&&(C===null||C.isXRRenderTarget===!0)&&(qt=b.toneMapping);const Ft=K.morphAttributes.position||K.morphAttributes.normal||K.morphAttributes.color,Dt=Ft!==void 0?Ft.length:0,Ke=ce.get(q),Gt=m.state.lights;if(ke===!0&&(Z===!0||P!==E)){const On=P===E&&q.id===w;ye.setState(q,P,On)}let St=!1;q.version===Ke.__version?(Ke.needsLights&&Ke.lightsStateVersion!==Gt.state.version||Ke.outputColorSpace!==Ne||z.isBatchedMesh&&Ke.batching===!1||!z.isBatchedMesh&&Ke.batching===!0||z.isBatchedMesh&&Ke.batchingColor===!0&&z.colorTexture===null||z.isBatchedMesh&&Ke.batchingColor===!1&&z.colorTexture!==null||z.isInstancedMesh&&Ke.instancing===!1||!z.isInstancedMesh&&Ke.instancing===!0||z.isSkinnedMesh&&Ke.skinning===!1||!z.isSkinnedMesh&&Ke.skinning===!0||z.isInstancedMesh&&Ke.instancingColor===!0&&z.instanceColor===null||z.isInstancedMesh&&Ke.instancingColor===!1&&z.instanceColor!==null||z.isInstancedMesh&&Ke.instancingMorph===!0&&z.morphTexture===null||z.isInstancedMesh&&Ke.instancingMorph===!1&&z.morphTexture!==null||Ke.envMap!==Oe||q.fog===!0&&Ke.fog!==fe||Ke.numClippingPlanes!==void 0&&(Ke.numClippingPlanes!==ye.numPlanes||Ke.numIntersection!==ye.numIntersection)||Ke.vertexAlphas!==je||Ke.vertexTangents!==et||Ke.morphTargets!==We||Ke.morphNormals!==wt||Ke.morphColors!==It||Ke.toneMapping!==qt||Ke.morphTargetsCount!==Dt)&&(St=!0):(St=!0,Ke.__version=q.version);let ri=Ke.currentProgram;St===!0&&(ri=_c(q,B,z));let gr=!1,oi=!1,No=!1;const $t=ri.getUniforms(),mi=Ke.uniforms;if(Q.useProgram(ri.program)&&(gr=!0,oi=!0,No=!0),q.id!==w&&(w=q.id,oi=!0),gr||E!==P){Q.buffers.depth.getReversed()&&P.reversedDepth!==!0&&(P._reversedDepth=!0,P.updateProjectionMatrix()),$t.setValue(L,"projectionMatrix",P.projectionMatrix),$t.setValue(L,"viewMatrix",P.matrixWorldInverse);const $n=$t.map.cameraPosition;$n!==void 0&&$n.setValue(L,Se.setFromMatrixPosition(P.matrixWorld)),Y.logarithmicDepthBuffer&&$t.setValue(L,"logDepthBufFC",2/(Math.log(P.far+1)/Math.LN2)),(q.isMeshPhongMaterial||q.isMeshToonMaterial||q.isMeshLambertMaterial||q.isMeshBasicMaterial||q.isMeshStandardMaterial||q.isShaderMaterial)&&$t.setValue(L,"isOrthographic",P.isOrthographicCamera===!0),E!==P&&(E=P,oi=!0,No=!0)}if(z.isSkinnedMesh){$t.setOptional(L,z,"bindMatrix"),$t.setOptional(L,z,"bindMatrixInverse");const On=z.skeleton;On&&(On.boneTexture===null&&On.computeBoneTexture(),$t.setValue(L,"boneTexture",On.boneTexture,ge))}z.isBatchedMesh&&($t.setOptional(L,z,"batchingTexture"),$t.setValue(L,"batchingTexture",z._matricesTexture,ge),$t.setOptional(L,z,"batchingIdTexture"),$t.setValue(L,"batchingIdTexture",z._indirectTexture,ge),$t.setOptional(L,z,"batchingColorTexture"),z._colorsTexture!==null&&$t.setValue(L,"batchingColorTexture",z._colorsTexture,ge));const _i=K.morphAttributes;if((_i.position!==void 0||_i.normal!==void 0||_i.color!==void 0)&&de.update(z,K,ri),(oi||Ke.receiveShadow!==z.receiveShadow)&&(Ke.receiveShadow=z.receiveShadow,$t.setValue(L,"receiveShadow",z.receiveShadow)),q.isMeshGouraudMaterial&&q.envMap!==null&&(mi.envMap.value=Oe,mi.flipEnvMap.value=Oe.isCubeTexture&&Oe.isRenderTargetTexture===!1?-1:1),q.isMeshStandardMaterial&&q.envMap===null&&B.environment!==null&&(mi.envMapIntensity.value=B.environmentIntensity),oi&&($t.setValue(L,"toneMappingExposure",b.toneMappingExposure),Ke.needsLights&&x1(mi,No),fe&&q.fog===!0&&le.refreshFogUniforms(mi,fe),le.refreshMaterialUniforms(mi,q,H,W,m.state.transmissionRenderTarget[P.id]),$u.upload(L,ay(Ke),mi,ge)),q.isShaderMaterial&&q.uniformsNeedUpdate===!0&&($u.upload(L,ay(Ke),mi,ge),q.uniformsNeedUpdate=!1),q.isSpriteMaterial&&$t.setValue(L,"center",z.center),$t.setValue(L,"modelViewMatrix",z.modelViewMatrix),$t.setValue(L,"normalMatrix",z.normalMatrix),$t.setValue(L,"modelMatrix",z.matrixWorld),q.isShaderMaterial||q.isRawShaderMaterial){const On=q.uniformsGroups;for(let $n=0,hf=On.length;$n0&&ge.useMultisampledRTT(P)===!1?z=ce.get(P).__webglMultisampledFramebuffer:Array.isArray(et)?z=et[K]:z=et,R.copy(P.viewport),D.copy(P.scissor),O=P.scissorTest}else R.copy(pe).multiplyScalar(H).floor(),D.copy(Ie).multiplyScalar(H).floor(),O=De;if(K!==0&&(z=S1),Q.bindFramebuffer(L.FRAMEBUFFER,z)&&q&&Q.drawBuffers(P,z),Q.viewport(R),Q.scissor(D),Q.setScissorTest(O),fe){const Oe=ce.get(P.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_CUBE_MAP_POSITIVE_X+B,Oe.__webglTexture,K)}else if(Re){const Oe=B;for(let je=0;je=0&&B<=P.width-q&&K>=0&&K<=P.height-z&&(P.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+Ne),L.readPixels(B,K,q,z,Ve.convert(et),Ve.convert(We),fe))}finally{const je=C!==null?ce.get(C).__webglFramebuffer:null;Q.bindFramebuffer(L.FRAMEBUFFER,je)}}},this.readRenderTargetPixelsAsync=async function(P,B,K,q,z,fe,Re,Ne=0){if(!(P&&P.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Oe=ce.get(P).__webglFramebuffer;if(P.isWebGLCubeRenderTarget&&Re!==void 0&&(Oe=Oe[Re]),Oe)if(B>=0&&B<=P.width-q&&K>=0&&K<=P.height-z){Q.bindFramebuffer(L.FRAMEBUFFER,Oe);const je=P.textures[Ne],et=je.format,We=je.type;if(!Y.textureFormatReadable(et))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Y.textureTypeReadable(We))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const wt=L.createBuffer();L.bindBuffer(L.PIXEL_PACK_BUFFER,wt),L.bufferData(L.PIXEL_PACK_BUFFER,fe.byteLength,L.STREAM_READ),P.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+Ne),L.readPixels(B,K,q,z,Ve.convert(et),Ve.convert(We),0);const It=C!==null?ce.get(C).__webglFramebuffer:null;Q.bindFramebuffer(L.FRAMEBUFFER,It);const qt=L.fenceSync(L.SYNC_GPU_COMMANDS_COMPLETE,0);return L.flush(),await VC(L,qt,4),L.bindBuffer(L.PIXEL_PACK_BUFFER,wt),L.getBufferSubData(L.PIXEL_PACK_BUFFER,0,fe),L.deleteBuffer(wt),L.deleteSync(qt),fe}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(P,B=null,K=0){const q=Math.pow(2,-K),z=Math.floor(P.image.width*q),fe=Math.floor(P.image.height*q),Re=B!==null?B.x:0,Ne=B!==null?B.y:0;ge.setTexture2D(P,0),L.copyTexSubImage2D(L.TEXTURE_2D,K,0,0,Re,Ne,z,fe),Q.unbindTexture()};const T1=L.createFramebuffer(),M1=L.createFramebuffer();this.copyTextureToTexture=function(P,B,K=null,q=null,z=0,fe=null){fe===null&&(z!==0?(Vl("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),fe=z,z=0):fe=0);let Re,Ne,Oe,je,et,We,wt,It,qt;const Ft=P.isCompressedTexture?P.mipmaps[fe]:P.image;if(K!==null)Re=K.max.x-K.min.x,Ne=K.max.y-K.min.y,Oe=K.isBox3?K.max.z-K.min.z:1,je=K.min.x,et=K.min.y,We=K.isBox3?K.min.z:0;else{const _i=Math.pow(2,-z);Re=Math.floor(Ft.width*_i),Ne=Math.floor(Ft.height*_i),P.isDataArrayTexture?Oe=Ft.depth:P.isData3DTexture?Oe=Math.floor(Ft.depth*_i):Oe=1,je=0,et=0,We=0}q!==null?(wt=q.x,It=q.y,qt=q.z):(wt=0,It=0,qt=0);const Dt=Ve.convert(B.format),Ke=Ve.convert(B.type);let Gt;B.isData3DTexture?(ge.setTexture3D(B,0),Gt=L.TEXTURE_3D):B.isDataArrayTexture||B.isCompressedArrayTexture?(ge.setTexture2DArray(B,0),Gt=L.TEXTURE_2D_ARRAY):(ge.setTexture2D(B,0),Gt=L.TEXTURE_2D),L.pixelStorei(L.UNPACK_FLIP_Y_WEBGL,B.flipY),L.pixelStorei(L.UNPACK_PREMULTIPLY_ALPHA_WEBGL,B.premultiplyAlpha),L.pixelStorei(L.UNPACK_ALIGNMENT,B.unpackAlignment);const St=L.getParameter(L.UNPACK_ROW_LENGTH),ri=L.getParameter(L.UNPACK_IMAGE_HEIGHT),gr=L.getParameter(L.UNPACK_SKIP_PIXELS),oi=L.getParameter(L.UNPACK_SKIP_ROWS),No=L.getParameter(L.UNPACK_SKIP_IMAGES);L.pixelStorei(L.UNPACK_ROW_LENGTH,Ft.width),L.pixelStorei(L.UNPACK_IMAGE_HEIGHT,Ft.height),L.pixelStorei(L.UNPACK_SKIP_PIXELS,je),L.pixelStorei(L.UNPACK_SKIP_ROWS,et),L.pixelStorei(L.UNPACK_SKIP_IMAGES,We);const $t=P.isDataArrayTexture||P.isData3DTexture,mi=B.isDataArrayTexture||B.isData3DTexture;if(P.isDepthTexture){const _i=ce.get(P),On=ce.get(B),$n=ce.get(_i.__renderTarget),hf=ce.get(On.__renderTarget);Q.bindFramebuffer(L.READ_FRAMEBUFFER,$n.__webglFramebuffer),Q.bindFramebuffer(L.DRAW_FRAMEBUFFER,hf.__webglFramebuffer);for(let _a=0;_aMath.PI&&(i-=Xn),s<-Math.PI?s+=Xn:s>Math.PI&&(s-=Xn),i<=s?this._spherical.theta=Math.max(i,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+s)/2?Math.max(i,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const r=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),a=r!=this._spherical.radius}if(ln.setFromSpherical(this._spherical),ln.applyQuaternion(this._quatInverse),t.copy(this.target).add(ln),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let r=null;if(this.object.isPerspectiveCamera){const o=ln.length();r=this._clampDistance(o*this._scale);const l=o-r;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),a=!!l}else if(this.object.isOrthographicCamera){const o=new S(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),a=l!==this.object.zoom;const c=new S(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),r=ln.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;r!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(r).add(this.object.position):(lu.origin.copy(this.object.position),lu.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(lu.direction))sp||8*(1-this._lastQuaternion.dot(this.object.quaternion))>sp||this._lastTargetPosition.distanceToSquared(this.target)>sp?(this.dispatchEvent(H0),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?Xn/60*this.autoRotateSpeed*e:Xn/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){ln.setFromMatrixColumn(t,0),ln.multiplyScalar(-e),this._panOffset.add(ln)}_panUp(e,t){this.screenSpacePanning===!0?ln.setFromMatrixColumn(t,1):(ln.setFromMatrixColumn(t,0),ln.crossVectors(this.object.up,ln)),ln.multiplyScalar(e),this._panOffset.add(ln)}_pan(e,t){const i=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;ln.copy(s).sub(this.target);let a=ln.length();a*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*a/i.clientHeight,this.object.matrix),this._panUp(2*t*a/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),s=e-i.left,a=t-i.top,r=i.width,o=i.height;this._mouse.x=s/r*2-1,this._mouse.y=-(a/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(Xn*this._rotateDelta.x/t.clientHeight),this._rotateUp(Xn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(i,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(i,s)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyStart.set(0,a)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),s=.5*(e.pageX+i.x),a=.5*(e.pageY+i.y);this._rotateEnd.set(s,a)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(Xn*this._rotateDelta.x/t.clientHeight),this._rotateUp(Xn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(i,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyEnd.set(0,a),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const r=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(r,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t(O=F.indexOf(` -`))&&k=C.byteLength||!(U=d(C)))&&r(1,"no header found"),(F=U.match(w))||r(3,"bad initial token"),k.valid|=1,k.programtype=F[1],k.string+=U+` -`;U=d(C),U!==!1;){if(k.string+=U+` -`,U.charAt(0)==="#"){k.comments+=U+` -`;continue}if((F=U.match(E))&&(k.gamma=parseFloat(F[1])),(F=U.match(R))&&(k.exposure=parseFloat(F[1])),(F=U.match(D))&&(k.valid|=2,k.format=F[1]),(F=U.match(O))&&(k.valid|=4,k.height=parseInt(F[1],10),k.width=parseInt(F[2],10)),k.valid&2&&k.valid&4)break}return k.valid&2||r(3,"missing format specifier"),k.valid&4||r(3,"missing image size specifier"),k},f=function(C,w,E){const R=w;if(R<8||R>32767||C[0]!==2||C[1]!==2||C[2]&128)return new Uint8Array(C);R!==(C[2]<<8|C[3])&&r(3,"wrong scanline width");const D=new Uint8Array(4*w*E);D.length||r(4,"unable to allocate buffer space");let O=0,k=0;const U=4*R,F=new Uint8Array(4),W=new Uint8Array(U);let H=E;for(;H>0&&kC.byteLength&&r(1),F[0]=C[k++],F[1]=C[k++],F[2]=C[k++],F[3]=C[k++],(F[0]!=2||F[1]!=2||(F[2]<<8|F[3])!=R)&&r(3,"bad rgbe scanline format");let ne=0,oe;for(;ne128;if(Ie&&(oe-=128),(oe===0||ne+oe>U)&&r(3,"bad scanline data"),Ie){const De=C[k++];for(let Xe=0;Xe{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(const t of e)t.dispose()}}function Br(n){return new qh({color:0,emissive:16777215,emissiveIntensity:n})}let cT=null;function pk(){return typeof document<"u"&&document.baseURI?document.baseURI:typeof window<"u"&&window.location?.href?window.location.href:import.meta.url}function mk(){return"./"}function _k(n){return/^[a-z][a-z\d+\-.]*:/i.test(n)||n.startsWith("//")}function gk(n=cT){const e=n==null||n===""?mk():String(n);return new URL(e,pk()).href}function wi(n,e=cT){const t=String(n);return _k(t)?t:new URL(t.replace(/^\/+/,""),gk(e)).href}class yk{constructor(e,t={}){if(this.container=typeof e=="string"?document.getElementById(e):e,this.assetBase=t.assetBase,!this.container){console.error("Invalid container passed to SceneManager");return}this.scene=new ac,this.scene.background=new ue(8900331);const i=this.container.clientWidth,s=this.container.clientHeight;this.camera=new Jt(75,i/s,10,5e4),this.camera.position.set(0,2e3,5e3),this.renderer=new Eg({antialias:!0,preserveDrawingBuffer:t.preserveDrawingBuffer===!0}),this.renderer.setSize(i,s),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=U_,this.renderer.toneMapping=z_,this.renderer.toneMappingExposure=1,this.renderer.outputColorSpace=gt,this.container.appendChild(this.renderer.domElement),window.addEventListener("resize",()=>this.onWindowResize())}initDefaultEnvironment(){if(!this._neutralEnvTexture){const e=new Jd(this.renderer);this._neutralEnvTexture=e.fromScene(new fk,.04).texture,e.dispose()}if(this.scene.environment=this._neutralEnvTexture,!this._defaultLightsAdded){const e=new Do(16777215,1.5);e.position.set(3e3,8e3,4e3),this.scene.add(e);const t=new dc(16777215,.4);this.scene.add(t),this._defaultLightsAdded=!0}}applyEnvironment(e){return new Promise(t=>{const i=new hk,s=wi(e.skyboxUrl,this.assetBase);i.load(s,a=>{this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),a.mapping=ar,this.scene.background=a,this.scene.environment=a,this.currentEnvironmentId=e.id;const r=e.rotation??{};this._skyboxBaseRotation={x:vt.degToRad(r.x??0),y:vt.degToRad(r.y??0),z:vt.degToRad(r.z??0)},this._skyboxAnimatedY=0,this._skyboxAnimation=e.animation??null,this._applySkyboxRotation(),typeof e.exposure=="number"&&(this.renderer.toneMappingExposure=e.exposure),console.log(`[SceneManager] environment applied: ${e.id}`),t(!0)},void 0,a=>{console.error(`[SceneManager] Failed to load environment "${e.id}":`,a),t(!1)})})}_applySkyboxRotation(){const e=this._skyboxBaseRotation;if(!e)return;const t=e.y+(this._skyboxAnimatedY??0);this.scene.backgroundRotation&&this.scene.backgroundRotation.set(e.x,t,e.z),this.scene.environmentRotation&&this.scene.environmentRotation.set(e.x,t,e.z)}updateSkyboxAnimation(e){const t=this._skyboxAnimation;!t||!t.enabled||!e||(this._skyboxAnimatedY=(this._skyboxAnimatedY??0)+vt.degToRad(t.speed*e),this._applySkyboxRotation())}setDefaultBackground(){this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),this.scene.background=new ue(1710638),this.initDefaultEnvironment(),this.renderer.toneMappingExposure=1,this._skyboxAnimation=null,this._skyboxBaseRotation=null,this.currentEnvironmentId=null,console.log("[SceneManager] Using neutral default environment (no skybox)")}setExposure(e){this.renderer&&(this.renderer.toneMappingExposure=e)}onWindowResize(){if(!this.container||!this.renderer)return;const e=this.container.clientWidth,t=this.container.clientHeight;this.camera.aspect=e/t,this.camera.updateProjectionMatrix(),this.renderer.setSize(e,t)}render(){this.renderer&&this.renderer.render(this.scene,this.camera)}dispose(){this.renderer&&(this.renderer.dispose(),this.renderer.domElement&&this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement),this.renderer=null)}}function G0(n,e){if(e===Jw)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),n;if(e===Kd||e===Y_){let t=n.getIndex();if(t===null){const r=[],o=n.getAttribute("position");if(o!==void 0){for(let l=0;l=2.0 are supported."));return}const c=new Zk(a,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let u=0;u=0&&o[d]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+d+'".')}}c.setExtensions(r),c.setPlugins(o),c.parse(i,s)}parseAsync(e,t){const i=this;return new Promise(function(s,a){i.parse(e,t,s,a)})}}function vk(){let n={};return{get:function(e){return n[e]},add:function(e,t){n[e]=t},remove:function(e){delete n[e]},removeAll:function(){n={}}}}const xt={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class bk{constructor(e){this.parser=e,this.name=xt.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,a.source,r)}}class kk{constructor(e){this.parser=e,this.name=xt.EXT_TEXTURE_WEBP}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class Ok{constructor(e){this.parser=e,this.name=xt.EXT_TEXTURE_AVIF}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class Fk{constructor(e){this.name=xt.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const s=i.extensions[this.name],a=this.parser.getDependency("buffer",s.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return a.then(function(o){const l=s.byteOffset||0,c=s.byteLength||0,u=s.count,d=s.byteStride,h=new Uint8Array(o,l,c);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(u,d,h,s.mode,s.filter).then(function(f){return f.buffer}):r.ready.then(function(){const f=new ArrayBuffer(u*d);return r.decodeGltfBuffer(new Uint8Array(f),u,d,h,s.mode,s.filter),f})})}else return null}}class Nk{constructor(e){this.name=xt.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;const s=t.meshes[i.mesh];for(const c of s.primitives)if(c.mode!==xi.TRIANGLES&&c.mode!==xi.TRIANGLE_STRIP&&c.mode!==xi.TRIANGLE_FAN&&c.mode!==void 0)return null;const r=i.extensions[this.name].attributes,o=[],l={};for(const c in r)o.push(this.parser.getDependency("accessor",r[c]).then(u=>(l[c]=u,l[c])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(c=>{const u=c.pop(),d=u.isGroup?u.children:[u],h=c[0].count,f=[];for(const p of d){const g=new Me,_=new S,m=new dt,v=new S(1,1,1),y=new kh(p.geometry,p.material,h);for(let b=0;b0||n.search(/^data\:image\/jpeg/)===0?"image/jpeg":n.search(/\.webp($|\?)/i)>0||n.search(/^data\:image\/webp/)===0?"image/webp":n.search(/\.ktx2($|\?)/i)>0||n.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const jk=new Me;class Zk{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new vk,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,s=-1,a=!1,r=-1;if(typeof navigator<"u"){const o=navigator.userAgent;i=/^((?!chrome|android).)*safari/i.test(o)===!0;const l=o.match(/Version\/(\d+)/);s=i&&l?parseInt(l[1],10):-1,a=o.indexOf("Firefox")>-1,r=a?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||i&&s<17||a&&r<98?this.textureLoader=new Yh(this.options.manager):this.textureLoader=new qS(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Gn(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,s=this.json,a=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(r){return r._markDefs&&r._markDefs()}),Promise.all(this._invokeAll(function(r){return r.beforeRoot&&r.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(r){const o={scene:r[0][s.scene||0],scenes:r[0],animations:r[1],cameras:r[2],asset:s.asset,parser:i,userData:{}};return Ia(a,o,s),rs(o,s),Promise.all(i._invokeAll(function(l){return l.afterRoot&&l.afterRoot(o)})).then(function(){for(const l of o.scenes)l.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let s=0,a=t.length;s{const l=this.associations.get(r);l!=null&&this.associations.set(o,l);for(const[c,u]of r.children.entries())a(u,o.children[c])};return a(i,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i=2&&_.setY(w,x[M*l+1]),l>=3&&_.setZ(w,x[M*l+2]),l>=4&&_.setW(w,x[M*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}_.normalized=p}return _})}loadTexture(e){const t=this.json,i=this.options,a=t.textures[e].source,r=t.images[a];let o=this.textureLoader;if(r.uri){const l=i.manager.getHandler(r.uri);l!==null&&(o=l)}return this.loadTextureImage(e,a,o)}loadTextureImage(e,t,i){const s=this,a=this.json,r=a.textures[e],o=a.images[t],l=(o.uri||o.bufferView)+":"+r.sampler;if(this.textureCache[l])return this.textureCache[l];const c=this.loadImageSource(t,i).then(function(u){u.flipY=!1,u.name=r.name||o.name||"",u.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(u.name=o.uri);const h=(a.samplers||{})[r.sampler]||{};return u.magFilter=W0[h.magFilter]||Vt,u.minFilter=W0[h.minFilter]||Ti,u.wrapS=X0[h.wrapS]||ps,u.wrapT=X0[h.wrapT]||ps,u.generateMipmaps=!u.isCompressedTexture&&u.minFilter!==dn&&u.minFilter!==Vt,s.associations.set(u,{textures:e}),u}).catch(function(){return null});return this.textureCache[l]=c,c}loadImageSource(e,t){const i=this,s=this.json,a=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(d=>d.clone());const r=s.images[e],o=self.URL||self.webkitURL;let l=r.uri||"",c=!1;if(r.bufferView!==void 0)l=i.getDependency("bufferView",r.bufferView).then(function(d){c=!0;const h=new Blob([d],{type:r.mimeType});return l=o.createObjectURL(h),l});else if(r.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const u=Promise.resolve(l).then(function(d){return new Promise(function(h,f){let p=h;t.isImageBitmapLoader===!0&&(p=function(g){const _=new Bt(g);_.needsUpdate=!0,h(_)}),t.load(Us.resolveURL(d,a.path),p,void 0,f)})}).then(function(d){return c===!0&&o.revokeObjectURL(l),rs(d,r),d.userData.mimeType=r.mimeType||Yk(r.uri),d}).catch(function(d){throw console.error("THREE.GLTFLoader: Couldn't load texture",l),d});return this.sourceCache[e]=u,u}assignTexture(e,t,i,s){const a=this;return this.getDependency("texture",i.index).then(function(r){if(!r)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(r=r.clone(),r.channel=i.texCoord),a.extensions[xt.KHR_TEXTURE_TRANSFORM]){const o=i.extensions!==void 0?i.extensions[xt.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const l=a.associations.get(r);r=a.extensions[xt.KHR_TEXTURE_TRANSFORM].extendTexture(r,o),a.associations.set(r,l)}}return s!==void 0&&(r.colorSpace=s),e[t]=r,r})}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const s=t.attributes.tangent===void 0,a=t.attributes.color!==void 0,r=t.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new sa,Qt.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,l.sizeAttenuation=!1,this.cache.add(o,l)),i=l}else if(e.isLine){const o="LineBasicMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new Rt,Qt.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,this.cache.add(o,l)),i=l}if(s||a||r){let o="ClonedMaterial:"+i.uuid+":";s&&(o+="derivative-tangents:"),a&&(o+="vertex-colors:"),r&&(o+="flat-shading:");let l=this.cache.get(o);l||(l=i.clone(),a&&(l.vertexColors=!0),r&&(l.flatShading=!0),s&&(l.normalScale&&(l.normalScale.y*=-1),l.clearcoatNormalScale&&(l.clearcoatNormalScale.y*=-1)),this.cache.add(o,l),this.associations.set(l,this.associations.get(i))),i=l}e.material=i}getMaterialType(){return Pn}loadMaterial(e){const t=this,i=this.json,s=this.extensions,a=i.materials[e];let r;const o={},l=a.extensions||{},c=[];if(l[xt.KHR_MATERIALS_UNLIT]){const d=s[xt.KHR_MATERIALS_UNLIT];r=d.getMaterialType(),c.push(d.extendParams(o,a,t))}else{const d=a.pbrMetallicRoughness||{};if(o.color=new ue(1,1,1),o.opacity=1,Array.isArray(d.baseColorFactor)){const h=d.baseColorFactor;o.color.setRGB(h[0],h[1],h[2],xn),o.opacity=h[3]}d.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",d.baseColorTexture,gt)),o.metalness=d.metallicFactor!==void 0?d.metallicFactor:1,o.roughness=d.roughnessFactor!==void 0?d.roughnessFactor:1,d.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,"metalnessMap",d.metallicRoughnessTexture)),c.push(t.assignTexture(o,"roughnessMap",d.metallicRoughnessTexture))),r=this._invokeOne(function(h){return h.getMaterialType&&h.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(h){return h.extendMaterialParams&&h.extendMaterialParams(e,o)})))}a.doubleSided===!0&&(o.side=ct);const u=a.alphaMode||rp.OPAQUE;if(u===rp.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,u===rp.MASK&&(o.alphaTest=a.alphaCutoff!==void 0?a.alphaCutoff:.5)),a.normalTexture!==void 0&&r!==Ye&&(c.push(t.assignTexture(o,"normalMap",a.normalTexture)),o.normalScale=new te(1,1),a.normalTexture.scale!==void 0)){const d=a.normalTexture.scale;o.normalScale.set(d,d)}if(a.occlusionTexture!==void 0&&r!==Ye&&(c.push(t.assignTexture(o,"aoMap",a.occlusionTexture)),a.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=a.occlusionTexture.strength)),a.emissiveFactor!==void 0&&r!==Ye){const d=a.emissiveFactor;o.emissive=new ue().setRGB(d[0],d[1],d[2],xn)}return a.emissiveTexture!==void 0&&r!==Ye&&c.push(t.assignTexture(o,"emissiveMap",a.emissiveTexture,gt)),Promise.all(c).then(function(){const d=new r(o);return a.name&&(d.name=a.name),rs(d,a),t.associations.set(d,{materials:e}),a.extensions&&Ia(s,d,a),d})}createUniqueName(e){const t=yt.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,s=this.primitiveCache;function a(o){return i[xt.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return K0(l,o,t)})}const r=[];for(let o=0,l=e.length;o0&&Kk(m,a),m.name=t.createUniqueName(a.name||"mesh_"+e),rs(m,a),_.extensions&&Ia(s,m,_),t.assignFinalMaterial(m),d.push(m)}for(let f=0,p=d.length;f1?u=new Mt:c.length===1?u=c[0]:u=new Qe,u!==c[0])for(let d=0,h=c.length;d1){const d=s.associations.get(u);s.associations.set(u,{...d})}return s.associations.get(u).nodes=e,u}),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],s=this,a=new Mt;i.name&&(a.name=s.createUniqueName(i.name)),rs(a,i),i.extensions&&Ia(t,a,i);const r=i.nodes||[],o=[];for(let l=0,c=r.length;l{const d=new Map;for(const[h,f]of s.associations)(h instanceof Qt||h instanceof Bt)&&d.set(h,f);return u.traverse(h=>{const f=s.associations.get(h);f!=null&&d.set(h,f)}),d};return s.associations=c(a),a})}_createAnimationTracks(e,t,i,s,a){const r=[],o=e.name?e.name:e.uuid,l=[];Ys[a.path]===Ys.weights?e.traverse(function(h){h.morphTargetInfluences&&l.push(h.name?h.name:h.uuid)}):l.push(o);let c;switch(Ys[a.path]){case Ys.weights:c=ca;break;case Ys.rotation:c=_s;break;case Ys.translation:case Ys.scale:c=Hs;break;default:i.itemSize===1?c=ca:c=Hs;break}const u=s.interpolation!==void 0?$k[s.interpolation]:rr,d=this._getArrayFromAccessor(i);for(let h=0,f=l.length;h{this.parse(r,t,s)},i,s)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,gt,i).catch(i)}decodeDracoFile(e,t,i,s,a=xn,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:a};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(lp.has(e)){const l=lp.get(e);if(l.key===i)return l.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let s;const a=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(a,r).then(l=>(s=l,new Promise((c,u)=>{s._callbacks[a]={resolve:c,reject:u},s.postMessage({type:"decode",id:a,taskConfig:t,buffer:e},[e])}))).then(l=>this._createGeometry(l.geometry));return o.catch(()=>!0).then(()=>{s&&a&&this._releaseTask(s,a)}),lp.set(e,{key:i,promise:o}),o}_createGeometry(e){const t=new Ge;e.index&&t.setIndex(new rt(e.index.array,1));for(let i=0;i{i.load(e,s,void 0,a)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(i=>{const s=i[0];e||(this.decoderConfig.wasmBinary=i[1]);const a=Qk.toString(),r=["/* draco decoder */",s,"","/* worker */",a.substring(a.indexOf("{")+1,a.lastIndexOf("}"))].join(` -`);this.workerSourceURL=URL.createObjectURL(new Blob([r]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtha._taskLoad?-1:1});const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{const d=u.draco,h=new d.Decoder;try{const f=t(d,h,new Int8Array(l),c),p=f.attributes.map(g=>g.array.buffer);f.index&&p.push(f.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:f},p)}catch(f){console.error(f),self.postMessage({type:"error",id:o.id,error:f.message})}finally{d.destroy(h)}});break}};function t(r,o,l,c){const u=c.attributeIDs,d=c.attributeTypes;let h,f;const p=o.GetEncodedGeometryType(l);if(p===r.TRIANGULAR_MESH)h=new r.Mesh,f=o.DecodeArrayToMesh(l,l.byteLength,h);else if(p===r.POINT_CLOUD)h=new r.PointCloud,f=o.DecodeArrayToPointCloud(l,l.byteLength,h);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!f.ok()||h.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+f.error_msg());const g={index:null,attributes:[]};for(const _ in u){const m=self[d[_]];let v,y;if(c.useUniqueIDs)y=u[_],v=o.GetAttributeByUniqueId(h,y);else{if(y=o.GetAttributeId(h,r[u[_]]),y===-1)continue;v=o.GetAttribute(h,y)}const b=s(r,o,h,_,m,v);_==="color"&&(b.vertexColorSpace=c.vertexColorSpace),g.attributes.push(b)}return p===r.TRIANGULAR_MESH&&(g.index=i(r,o,h)),r.destroy(h),g}function i(r,o,l){const u=l.num_faces()*3,d=u*4,h=r._malloc(d);o.GetTrianglesUInt32Array(l,d,h);const f=new Uint32Array(r.HEAPF32.buffer,h,u).slice();return r._free(h),{array:f,itemSize:1}}function s(r,o,l,c,u,d){const h=d.num_components(),p=l.num_points()*h,g=p*u.BYTES_PER_ELEMENT,_=a(r,u),m=r._malloc(g);o.GetAttributeDataArrayForAllPoints(l,d,_,g,m);const v=new u(r.HEAPF32.buffer,m,p).slice();return r._free(m),{name:c,array:v,itemSize:h}}function a(r,o){switch(o){case Float32Array:return r.DT_FLOAT32;case Int8Array:return r.DT_INT8;case Int16Array:return r.DT_INT16;case Int32Array:return r.DT_INT32;case Uint8Array:return r.DT_UINT8;case Uint16Array:return r.DT_UINT16;case Uint32Array:return r.DT_UINT32}}}const eO=/^[og]\s*(.+)?/,tO=/^mtllib /,nO=/^usemtl /,iO=/^usemap /,q0=/\s+/,Y0=new S,cp=new S,j0=new S,Z0=new S,yi=new S,cu=new ue;function sO(){const n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(s,a){const r=this._finalize(!1);r&&(r.inherited||r.groupCount<=0)&&this.materials.splice(r.index,1);const o={index:this.materials.length,name:s||"",mtllib:Array.isArray(a)&&a.length>0?a[a.length-1]:"",smooth:r!==void 0?r.smooth:this.smooth,groupStart:r!==void 0?r.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(l){const c={index:typeof l=="number"?l:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(o),o},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(s){const a=this.currentMaterial();if(a&&a.groupEnd===-1&&(a.groupEnd=this.geometry.vertices.length/3,a.groupCount=a.groupEnd-a.groupStart,a.inherited=!1),s&&this.materials.length>1)for(let r=this.materials.length-1;r>=0;r--)this.materials[r].groupCount<=0&&this.materials.splice(r,1);return s&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),a}},i&&i.name&&typeof i.clone=="function"){const s=i.clone(0);s.inherited=!0,this.object.materials.push(s)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){const s=this.vertices,a=this.object.geometry.vertices;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){const s=this.normals,a=this.object.geometry.normals;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addFaceNormal:function(e,t,i){const s=this.vertices,a=this.object.geometry.normals;Y0.fromArray(s,e),cp.fromArray(s,t),j0.fromArray(s,i),yi.subVectors(j0,cp),Z0.subVectors(Y0,cp),yi.cross(Z0),yi.normalize(),a.push(yi.x,yi.y,yi.z),a.push(yi.x,yi.y,yi.z),a.push(yi.x,yi.y,yi.z)},addColor:function(e,t,i){const s=this.colors,a=this.object.geometry.colors;s[e]!==void 0&&a.push(s[e+0],s[e+1],s[e+2]),s[t]!==void 0&&a.push(s[t+0],s[t+1],s[t+2]),s[i]!==void 0&&a.push(s[i+0],s[i+1],s[i+2])},addUV:function(e,t,i){const s=this.uvs,a=this.object.geometry.uvs;a.push(s[e+0],s[e+1]),a.push(s[t+0],s[t+1]),a.push(s[i+0],s[i+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,s,a,r,o,l,c){const u=this.vertices.length;let d=this.parseVertexIndex(e,u),h=this.parseVertexIndex(t,u),f=this.parseVertexIndex(i,u);if(this.addVertex(d,h,f),this.addColor(d,h,f),o!==void 0&&o!==""){const p=this.normals.length;d=this.parseNormalIndex(o,p),h=this.parseNormalIndex(l,p),f=this.parseNormalIndex(c,p),this.addNormal(d,h,f)}else this.addFaceNormal(d,h,f);if(s!==void 0&&s!==""){const p=this.uvs.length;d=this.parseUVIndex(s,p),h=this.parseUVIndex(a,p),f=this.parseUVIndex(r,p),this.addUV(d,h,f),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let i=0,s=e.length;i=0&&(x[X]=null,T[X].disconnect(Se))}for(let ae=0;ae=x.length){x.push(Se),X=xe;break}else if(x[xe]===null){x[xe]=Se,X=xe;break}if(X===-1)break}const ie=T[X];ie&&ie.connect(Se)}}const H=new S,ne=new S;function oe(Z,ae,Se){H.setFromMatrixPosition(ae.matrixWorld),ne.setFromMatrixPosition(Se.matrixWorld);const X=H.distanceTo(ne),ie=ae.projectionMatrix.elements,xe=Se.projectionMatrix.elements,Ae=ie[14]/(ie[10]-1),L=ie[14]/(ie[10]+1),G=(ie[9]+1)/ie[5],j=(ie[9]-1)/ie[5],Y=(ie[8]-1)/ie[0],Q=(xe[8]+1)/xe[0],_e=Ae*Y,ce=Ae*Q,ge=X/(-Y+Q),$e=ge*-Y;if(ae.matrixWorld.decompose(Z.position,Z.quaternion,Z.scale),Z.translateX($e),Z.translateZ(ge),Z.matrixWorld.compose(Z.position,Z.quaternion,Z.scale),Z.matrixWorldInverse.copy(Z.matrixWorld).invert(),ie[10]===-1)Z.projectionMatrix.copy(ae.projectionMatrix),Z.projectionMatrixInverse.copy(ae.projectionMatrixInverse);else{const it=Ae+ge,I=L+ge,A=_e-$e,V=ce+(X-$e),J=G*L/I*it,le=j*L/I*it;Z.projectionMatrix.makePerspective(A,V,J,le,it,I),Z.projectionMatrixInverse.copy(Z.projectionMatrix).invert()}}function pe(Z,ae){ae===null?Z.matrixWorld.copy(Z.matrix):Z.matrixWorld.multiplyMatrices(ae.matrixWorld,Z.matrix),Z.matrixWorldInverse.copy(Z.matrixWorld).invert()}this.updateCamera=function(Z){if(s===null)return;let ae=Z.near,Se=Z.far;_.texture!==null&&(_.depthNear>0&&(ae=_.depthNear),_.depthFar>0&&(Se=_.depthFar)),k.near=E.near=w.near=ae,k.far=E.far=w.far=Se,(O!==k.near||D!==k.far)&&(s.updateRenderState({depthNear:k.near,depthFar:k.far}),O=k.near,D=k.far),k.layers.mask=Z.layers.mask|6,w.layers.mask=k.layers.mask&3,E.layers.mask=k.layers.mask&5;const X=Z.parent,ie=k.cameras;pe(k,X);for(let xe=0;xe0&&(_.alphaTest.value=m.alphaTest);const v=e.get(m),y=v.envMap,b=v.envMapRotation;y&&(_.envMap.value=y,Ia.copy(b),Ia.x*=-1,Ia.y*=-1,Ia.z*=-1,y.isCubeTexture&&y.isRenderTargetTexture===!1&&(Ia.y*=-1,Ia.z*=-1),_.envMapRotation.value.setFromMatrix4(aD.makeRotationFromEuler(Ia)),_.flipEnvMap.value=y.isCubeTexture&&y.isRenderTargetTexture===!1?-1:1,_.reflectivity.value=m.reflectivity,_.ior.value=m.ior,_.refractionRatio.value=m.refractionRatio),m.lightMap&&(_.lightMap.value=m.lightMap,_.lightMapIntensity.value=m.lightMapIntensity,t(m.lightMap,_.lightMapTransform)),m.aoMap&&(_.aoMap.value=m.aoMap,_.aoMapIntensity.value=m.aoMapIntensity,t(m.aoMap,_.aoMapTransform))}function r(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform))}function o(_,m){_.dashSize.value=m.dashSize,_.totalSize.value=m.dashSize+m.gapSize,_.scale.value=m.scale}function l(_,m,v,y){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.size.value=m.size*v,_.scale.value=y*.5,m.map&&(_.map.value=m.map,t(m.map,_.uvTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function c(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.rotation.value=m.rotation,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function u(_,m){_.specular.value.copy(m.specular),_.shininess.value=Math.max(m.shininess,1e-4)}function d(_,m){m.gradientMap&&(_.gradientMap.value=m.gradientMap)}function h(_,m){_.metalness.value=m.metalness,m.metalnessMap&&(_.metalnessMap.value=m.metalnessMap,t(m.metalnessMap,_.metalnessMapTransform)),_.roughness.value=m.roughness,m.roughnessMap&&(_.roughnessMap.value=m.roughnessMap,t(m.roughnessMap,_.roughnessMapTransform)),m.envMap&&(_.envMapIntensity.value=m.envMapIntensity)}function f(_,m,v){_.ior.value=m.ior,m.sheen>0&&(_.sheenColor.value.copy(m.sheenColor).multiplyScalar(m.sheen),_.sheenRoughness.value=m.sheenRoughness,m.sheenColorMap&&(_.sheenColorMap.value=m.sheenColorMap,t(m.sheenColorMap,_.sheenColorMapTransform)),m.sheenRoughnessMap&&(_.sheenRoughnessMap.value=m.sheenRoughnessMap,t(m.sheenRoughnessMap,_.sheenRoughnessMapTransform))),m.clearcoat>0&&(_.clearcoat.value=m.clearcoat,_.clearcoatRoughness.value=m.clearcoatRoughness,m.clearcoatMap&&(_.clearcoatMap.value=m.clearcoatMap,t(m.clearcoatMap,_.clearcoatMapTransform)),m.clearcoatRoughnessMap&&(_.clearcoatRoughnessMap.value=m.clearcoatRoughnessMap,t(m.clearcoatRoughnessMap,_.clearcoatRoughnessMapTransform)),m.clearcoatNormalMap&&(_.clearcoatNormalMap.value=m.clearcoatNormalMap,t(m.clearcoatNormalMap,_.clearcoatNormalMapTransform),_.clearcoatNormalScale.value.copy(m.clearcoatNormalScale),m.side===un&&_.clearcoatNormalScale.value.negate())),m.dispersion>0&&(_.dispersion.value=m.dispersion),m.iridescence>0&&(_.iridescence.value=m.iridescence,_.iridescenceIOR.value=m.iridescenceIOR,_.iridescenceThicknessMinimum.value=m.iridescenceThicknessRange[0],_.iridescenceThicknessMaximum.value=m.iridescenceThicknessRange[1],m.iridescenceMap&&(_.iridescenceMap.value=m.iridescenceMap,t(m.iridescenceMap,_.iridescenceMapTransform)),m.iridescenceThicknessMap&&(_.iridescenceThicknessMap.value=m.iridescenceThicknessMap,t(m.iridescenceThicknessMap,_.iridescenceThicknessMapTransform))),m.transmission>0&&(_.transmission.value=m.transmission,_.transmissionSamplerMap.value=v.texture,_.transmissionSamplerSize.value.set(v.width,v.height),m.transmissionMap&&(_.transmissionMap.value=m.transmissionMap,t(m.transmissionMap,_.transmissionMapTransform)),_.thickness.value=m.thickness,m.thicknessMap&&(_.thicknessMap.value=m.thicknessMap,t(m.thicknessMap,_.thicknessMapTransform)),_.attenuationDistance.value=m.attenuationDistance,_.attenuationColor.value.copy(m.attenuationColor)),m.anisotropy>0&&(_.anisotropyVector.value.set(m.anisotropy*Math.cos(m.anisotropyRotation),m.anisotropy*Math.sin(m.anisotropyRotation)),m.anisotropyMap&&(_.anisotropyMap.value=m.anisotropyMap,t(m.anisotropyMap,_.anisotropyMapTransform))),_.specularIntensity.value=m.specularIntensity,_.specularColor.value.copy(m.specularColor),m.specularColorMap&&(_.specularColorMap.value=m.specularColorMap,t(m.specularColorMap,_.specularColorMapTransform)),m.specularIntensityMap&&(_.specularIntensityMap.value=m.specularIntensityMap,t(m.specularIntensityMap,_.specularIntensityMapTransform))}function p(_,m){m.matcap&&(_.matcap.value=m.matcap)}function g(_,m){const v=e.get(m).light;_.referencePosition.value.setFromMatrixPosition(v.matrixWorld),_.nearDistance.value=v.shadow.camera.near,_.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function oD(n,e,t,i){let s={},a={},r=[];const o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(v,y){const b=y.program;i.uniformBlockBinding(v,b)}function c(v,y){let b=s[v.id];b===void 0&&(p(v),b=u(v),s[v.id]=b,v.addEventListener("dispose",_));const T=y.program;i.updateUBOMapping(v,T);const x=e.render.frame;a[v.id]!==x&&(h(v),a[v.id]=x)}function u(v){const y=d();v.__bindingPointIndex=y;const b=n.createBuffer(),T=v.__size,x=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,b),n.bufferData(n.UNIFORM_BUFFER,T,x),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,y,b),b}function d(){for(let v=0;v0&&(b+=T-x),v.__size=b,v.__cache={},this}function g(v){const y={boundary:0,storage:0};return typeof v=="number"||typeof v=="boolean"?(y.boundary=4,y.storage=4):v.isVector2?(y.boundary=8,y.storage=8):v.isVector3||v.isColor?(y.boundary=16,y.storage=12):v.isVector4?(y.boundary=16,y.storage=16):v.isMatrix3?(y.boundary=48,y.storage=48):v.isMatrix4?(y.boundary=64,y.storage=64):v.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",v),y}function _(v){const y=v.target;y.removeEventListener("dispose",_);const b=r.indexOf(y.__bindingPointIndex);r.splice(b,1),n.deleteBuffer(s[y.id]),delete s[y.id],delete a[y.id]}function m(){for(const v in s)n.deleteBuffer(s[v]);r=[],s={},a={}}return{bind:l,update:c,dispose:m}}class kg{constructor(e={}){const{canvas:t=yS(),context:i=null,depth:s=!0,stencil:a=!1,alpha:r=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:u="default",failIfMajorPerformanceCaveat:d=!1,reversedDepthBuffer:h=!1}=e;this.isWebGLRenderer=!0;let f;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");f=i.getContextAttributes().alpha}else f=r;const p=new Uint32Array(4),g=new Int32Array(4);let _=null,m=null;const v=[],y=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=Os,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const b=this;let T=!1;this._outputColorSpace=gt;let x=0,M=0,C=null,w=-1,E=null;const R=new qe,k=new qe;let O=null;const D=new ue(0);let U=0,F=t.width,W=t.height,H=1,ne=null,oe=null;const pe=new qe(0,0,F,W),Ie=new qe(0,0,F,W);let ke=!1;const Xe=new ko;let De=!1,Z=!1;const ae=new Me,Se=new S,X=new qe,ie={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let xe=!1;function Ae(){return C===null?H:1}let L=i;function G(P,B){return t.getContext(P,B)}try{const P={alpha:!0,depth:s,stencil:a,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:u,failIfMajorPerformanceCaveat:d};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${bh}`),t.addEventListener("webglcontextlost",be,!1),t.addEventListener("webglcontextrestored",Fe,!1),t.addEventListener("webglcontextcreationerror",he,!1),L===null){const B="webgl2";if(L=G(B,P),L===null)throw G(B)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(P){throw console.error("THREE.WebGLRenderer: "+P.message),P}let j,Y,Q,_e,ce,ge,$e,it,I,A,V,J,le,ee,He,ye,Ue,Be,de,Pe,Je,Ve,Ce,ht;function N(){j=new v2(L),j.init(),Ve=new mT(L,j),Y=new h2(L,j,e,Ve),Q=new Qk(L,j),Y.reversedDepthBuffer&&h&&Q.buffers.depth.setReversed(!0),_e=new w2(L),ce=new zk,ge=new eD(L,j,Q,ce,Y,Ve,_e),$e=new p2(b),it=new y2(b),I=new AP(L),Ce=new u2(L,I),A=new b2(L,I,_e,Ce),V=new T2(L,A,I,_e),de=new S2(L,Y,ge),ye=new f2(ce),J=new Bk(b,$e,it,j,Y,Ce,ye),le=new rD(b,ce),ee=new Vk,He=new qk(j),Be=new c2(b,$e,it,Q,V,f,l),Ue=new Zk(b,V,Y),ht=new oD(L,_e,Y,Q),Pe=new d2(L,j,_e),Je=new x2(L,j,_e),_e.programs=J.programs,b.capabilities=Y,b.extensions=j,b.properties=ce,b.renderLists=ee,b.shadowMap=Ue,b.state=Q,b.info=_e}N();const me=new sD(b,L);this.xr=me,this.getContext=function(){return L},this.getContextAttributes=function(){return L.getContextAttributes()},this.forceContextLoss=function(){const P=j.get("WEBGL_lose_context");P&&P.loseContext()},this.forceContextRestore=function(){const P=j.get("WEBGL_lose_context");P&&P.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(P){P!==void 0&&(H=P,this.setSize(F,W,!1))},this.getSize=function(P){return P.set(F,W)},this.setSize=function(P,B,K=!0){if(me.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}F=P,W=B,t.width=Math.floor(P*H),t.height=Math.floor(B*H),K===!0&&(t.style.width=P+"px",t.style.height=B+"px"),this.setViewport(0,0,P,B)},this.getDrawingBufferSize=function(P){return P.set(F*H,W*H).floor()},this.setDrawingBufferSize=function(P,B,K){F=P,W=B,H=K,t.width=Math.floor(P*K),t.height=Math.floor(B*K),this.setViewport(0,0,P,B)},this.getCurrentViewport=function(P){return P.copy(R)},this.getViewport=function(P){return P.copy(pe)},this.setViewport=function(P,B,K,q){P.isVector4?pe.set(P.x,P.y,P.z,P.w):pe.set(P,B,K,q),Q.viewport(R.copy(pe).multiplyScalar(H).round())},this.getScissor=function(P){return P.copy(Ie)},this.setScissor=function(P,B,K,q){P.isVector4?Ie.set(P.x,P.y,P.z,P.w):Ie.set(P,B,K,q),Q.scissor(k.copy(Ie).multiplyScalar(H).round())},this.getScissorTest=function(){return ke},this.setScissorTest=function(P){Q.setScissorTest(ke=P)},this.setOpaqueSort=function(P){ne=P},this.setTransparentSort=function(P){oe=P},this.getClearColor=function(P){return P.copy(Be.getClearColor())},this.setClearColor=function(){Be.setClearColor(...arguments)},this.getClearAlpha=function(){return Be.getClearAlpha()},this.setClearAlpha=function(){Be.setClearAlpha(...arguments)},this.clear=function(P=!0,B=!0,K=!0){let q=0;if(P){let z=!1;if(C!==null){const fe=C.texture.format;z=fe===Ah||fe===Ch||fe===oc}if(z){const fe=C.texture.type,Re=fe===ji||fe===zs||fe===xo||fe===wo||fe===Th||fe===Mh,Ne=Be.getClearColor(),Oe=Be.getClearAlpha(),je=Ne.r,et=Ne.g,We=Ne.b;Re?(p[0]=je,p[1]=et,p[2]=We,p[3]=Oe,L.clearBufferuiv(L.COLOR,0,p)):(g[0]=je,g[1]=et,g[2]=We,g[3]=Oe,L.clearBufferiv(L.COLOR,0,g))}else q|=L.COLOR_BUFFER_BIT}B&&(q|=L.DEPTH_BUFFER_BIT),K&&(q|=L.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),L.clear(q)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",be,!1),t.removeEventListener("webglcontextrestored",Fe,!1),t.removeEventListener("webglcontextcreationerror",he,!1),Be.dispose(),ee.dispose(),He.dispose(),ce.dispose(),$e.dispose(),it.dispose(),V.dispose(),Ce.dispose(),ht.dispose(),J.dispose(),me.dispose(),me.removeEventListener("sessionstart",Ji),me.removeEventListener("sessionend",ly),_a.stop()};function be(P){P.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),T=!0}function Fe(){console.log("THREE.WebGLRenderer: Context Restored."),T=!1;const P=_e.autoReset,B=Ue.enabled,K=Ue.autoUpdate,q=Ue.needsUpdate,z=Ue.type;N(),_e.autoReset=P,Ue.enabled=B,Ue.autoUpdate=K,Ue.needsUpdate=q,Ue.type=z}function he(P){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",P.statusMessage)}function re(P){const B=P.target;B.removeEventListener("dispose",re),ze(B)}function ze(P){lt(P),ce.remove(P)}function lt(P){const B=ce.get(P).programs;B!==void 0&&(B.forEach(function(K){J.releaseProgram(K)}),P.isShaderMaterial&&J.releaseShaderCache(P))}this.renderBufferDirect=function(P,B,K,q,z,fe){B===null&&(B=ie);const Re=z.isMesh&&z.matrixWorld.determinant()<0,Ne=P1(P,B,K,q,z);Q.setMaterial(q,Re);let Oe=K.index,je=1;if(q.wireframe===!0){if(Oe=A.getWireframeAttribute(K),Oe===void 0)return;je=2}const et=K.drawRange,We=K.attributes.position;let wt=et.start*je,It=(et.start+et.count)*je;fe!==null&&(wt=Math.max(wt,fe.start*je),It=Math.min(It,(fe.start+fe.count)*je)),Oe!==null?(wt=Math.max(wt,0),It=Math.min(It,Oe.count)):We!=null&&(wt=Math.max(wt,0),It=Math.min(It,We.count));const qt=It-wt;if(qt<0||qt===1/0)return;Ce.setup(z,q,Ne,K,Oe);let Ft,kt=Pe;if(Oe!==null&&(Ft=I.get(Oe),kt=Je,kt.setIndex(Ft)),z.isMesh)q.wireframe===!0?(Q.setLineWidth(q.wireframeLinewidth*Ae()),kt.setMode(L.LINES)):kt.setMode(L.TRIANGLES);else if(z.isLine){let Ke=q.linewidth;Ke===void 0&&(Ke=1),Q.setLineWidth(Ke*Ae()),z.isLineSegments?kt.setMode(L.LINES):z.isLineLoop?kt.setMode(L.LINE_LOOP):kt.setMode(L.LINE_STRIP)}else z.isPoints?kt.setMode(L.POINTS):z.isSprite&&kt.setMode(L.TRIANGLES);if(z.isBatchedMesh)if(z._multiDrawInstances!==null)Xl("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),kt.renderMultiDrawInstances(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount,z._multiDrawInstances);else if(j.get("WEBGL_multi_draw"))kt.renderMultiDraw(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount);else{const Ke=z._multiDrawStarts,Gt=z._multiDrawCounts,St=z._multiDrawCount,ri=Oe?I.get(Oe).bytesPerElement:1,yr=ce.get(q).currentProgram.getUniforms();for(let oi=0;oi{function fe(){if(q.forEach(function(Re){ce.get(Re).currentProgram.isReady()&&q.delete(Re)}),q.size===0){z(P);return}setTimeout(fe,10)}j.get("KHR_parallel_shader_compile")!==null?fe():setTimeout(fe,10)})};let Et=null;function ys(P){Et&&Et(P)}function Ji(){_a.stop()}function ly(){_a.start()}const _a=new uT;_a.setAnimationLoop(ys),typeof self<"u"&&_a.setContext(self),this.setAnimationLoop=function(P){Et=P,me.setAnimationLoop(P),P===null?_a.stop():_a.start()},me.addEventListener("sessionstart",Ji),me.addEventListener("sessionend",ly),this.render=function(P,B){if(B!==void 0&&B.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(T===!0)return;if(P.matrixWorldAutoUpdate===!0&&P.updateMatrixWorld(),B.parent===null&&B.matrixWorldAutoUpdate===!0&&B.updateMatrixWorld(),me.enabled===!0&&me.isPresenting===!0&&(me.cameraAutoUpdate===!0&&me.updateCamera(B),B=me.getCamera()),P.isScene===!0&&P.onBeforeRender(b,P,B,C),m=He.get(P,y.length),m.init(B),y.push(m),ae.multiplyMatrices(B.projectionMatrix,B.matrixWorldInverse),Xe.setFromProjectionMatrix(ae,hi,B.reversedDepth),Z=this.localClippingEnabled,De=ye.init(this.clippingPlanes,Z),_=ee.get(P,v.length),_.init(),v.push(_),me.enabled===!0&&me.isPresenting===!0){const fe=b.xr.getDepthSensingMesh();fe!==null&&gf(fe,B,-1/0,b.sortObjects)}gf(P,B,0,b.sortObjects),_.finish(),b.sortObjects===!0&&_.sort(ne,oe),xe=me.enabled===!1||me.isPresenting===!1||me.hasDepthSensing()===!1,xe&&Be.addToRenderList(_,P),this.info.render.frame++,De===!0&&ye.beginShadows();const K=m.state.shadowsArray;Ue.render(K,P,B),De===!0&&ye.endShadows(),this.info.autoReset===!0&&this.info.reset();const q=_.opaque,z=_.transmissive;if(m.setupLights(),B.isArrayCamera){const fe=B.cameras;if(z.length>0)for(let Re=0,Ne=fe.length;Re0&&uy(q,z,P,B),xe&&Be.render(P),cy(_,P,B);C!==null&&M===0&&(ge.updateMultisampleRenderTarget(C),ge.updateRenderTargetMipmap(C)),P.isScene===!0&&P.onAfterRender(b,P,B),Ce.resetDefaultState(),w=-1,E=null,y.pop(),y.length>0?(m=y[y.length-1],De===!0&&ye.setGlobalState(b.clippingPlanes,m.state.camera)):m=null,v.pop(),v.length>0?_=v[v.length-1]:_=null};function gf(P,B,K,q){if(P.visible===!1)return;if(P.layers.test(B.layers)){if(P.isGroup)K=P.renderOrder;else if(P.isLOD)P.autoUpdate===!0&&P.update(B);else if(P.isLight)m.pushLight(P),P.castShadow&&m.pushShadow(P);else if(P.isSprite){if(!P.frustumCulled||Xe.intersectsSprite(P)){q&&X.setFromMatrixPosition(P.matrixWorld).applyMatrix4(ae);const Re=V.update(P),Ne=P.material;Ne.visible&&_.push(P,Re,Ne,K,X.z,null)}}else if((P.isMesh||P.isLine||P.isPoints)&&(!P.frustumCulled||Xe.intersectsObject(P))){const Re=V.update(P),Ne=P.material;if(q&&(P.boundingSphere!==void 0?(P.boundingSphere===null&&P.computeBoundingSphere(),X.copy(P.boundingSphere.center)):(Re.boundingSphere===null&&Re.computeBoundingSphere(),X.copy(Re.boundingSphere.center)),X.applyMatrix4(P.matrixWorld).applyMatrix4(ae)),Array.isArray(Ne)){const Oe=Re.groups;for(let je=0,et=Oe.length;je0&&vc(z,B,K),fe.length>0&&vc(fe,B,K),Re.length>0&&vc(Re,B,K),Q.buffers.depth.setTest(!0),Q.buffers.depth.setMask(!0),Q.buffers.color.setMask(!0),Q.setPolygonOffset(!1)}function uy(P,B,K,q){if((K.isScene===!0?K.overrideMaterial:null)!==null)return;m.state.transmissionRenderTarget[q.id]===void 0&&(m.state.transmissionRenderTarget[q.id]=new ms(1,1,{generateMipmaps:!0,type:j.has("EXT_color_buffer_half_float")||j.has("EXT_color_buffer_float")?ls:ji,minFilter:Mi,samples:4,stencilBuffer:a,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:rt.workingColorSpace}));const fe=m.state.transmissionRenderTarget[q.id],Re=q.viewport||R;fe.setSize(Re.z*b.transmissionResolutionScale,Re.w*b.transmissionResolutionScale);const Ne=b.getRenderTarget(),Oe=b.getActiveCubeFace(),je=b.getActiveMipmapLevel();b.setRenderTarget(fe),b.getClearColor(D),U=b.getClearAlpha(),U<1&&b.setClearColor(16777215,.5),b.clear(),xe&&Be.render(K);const et=b.toneMapping;b.toneMapping=Os;const We=q.viewport;if(q.viewport!==void 0&&(q.viewport=void 0),m.setupLightsView(q),De===!0&&ye.setGlobalState(b.clippingPlanes,q),vc(P,K,q),ge.updateMultisampleRenderTarget(fe),ge.updateRenderTargetMipmap(fe),j.has("WEBGL_multisampled_render_to_texture")===!1){let wt=!1;for(let It=0,qt=B.length;It0),We=!!K.morphAttributes.position,wt=!!K.morphAttributes.normal,It=!!K.morphAttributes.color;let qt=Os;q.toneMapped&&(C===null||C.isXRRenderTarget===!0)&&(qt=b.toneMapping);const Ft=K.morphAttributes.position||K.morphAttributes.normal||K.morphAttributes.color,kt=Ft!==void 0?Ft.length:0,Ke=ce.get(q),Gt=m.state.lights;if(De===!0&&(Z===!0||P!==E)){const On=P===E&&q.id===w;ye.setState(q,P,On)}let St=!1;q.version===Ke.__version?(Ke.needsLights&&Ke.lightsStateVersion!==Gt.state.version||Ke.outputColorSpace!==Ne||z.isBatchedMesh&&Ke.batching===!1||!z.isBatchedMesh&&Ke.batching===!0||z.isBatchedMesh&&Ke.batchingColor===!0&&z.colorTexture===null||z.isBatchedMesh&&Ke.batchingColor===!1&&z.colorTexture!==null||z.isInstancedMesh&&Ke.instancing===!1||!z.isInstancedMesh&&Ke.instancing===!0||z.isSkinnedMesh&&Ke.skinning===!1||!z.isSkinnedMesh&&Ke.skinning===!0||z.isInstancedMesh&&Ke.instancingColor===!0&&z.instanceColor===null||z.isInstancedMesh&&Ke.instancingColor===!1&&z.instanceColor!==null||z.isInstancedMesh&&Ke.instancingMorph===!0&&z.morphTexture===null||z.isInstancedMesh&&Ke.instancingMorph===!1&&z.morphTexture!==null||Ke.envMap!==Oe||q.fog===!0&&Ke.fog!==fe||Ke.numClippingPlanes!==void 0&&(Ke.numClippingPlanes!==ye.numPlanes||Ke.numIntersection!==ye.numIntersection)||Ke.vertexAlphas!==je||Ke.vertexTangents!==et||Ke.morphTargets!==We||Ke.morphNormals!==wt||Ke.morphColors!==It||Ke.toneMapping!==qt||Ke.morphTargetsCount!==kt)&&(St=!0):(St=!0,Ke.__version=q.version);let ri=Ke.currentProgram;St===!0&&(ri=bc(q,B,z));let yr=!1,oi=!1,zo=!1;const $t=ri.getUniforms(),mi=Ke.uniforms;if(Q.useProgram(ri.program)&&(yr=!0,oi=!0,zo=!0),q.id!==w&&(w=q.id,oi=!0),yr||E!==P){Q.buffers.depth.getReversed()&&P.reversedDepth!==!0&&(P._reversedDepth=!0,P.updateProjectionMatrix()),$t.setValue(L,"projectionMatrix",P.projectionMatrix),$t.setValue(L,"viewMatrix",P.matrixWorldInverse);const $n=$t.map.cameraPosition;$n!==void 0&&$n.setValue(L,Se.setFromMatrixPosition(P.matrixWorld)),Y.logarithmicDepthBuffer&&$t.setValue(L,"logDepthBufFC",2/(Math.log(P.far+1)/Math.LN2)),(q.isMeshPhongMaterial||q.isMeshToonMaterial||q.isMeshLambertMaterial||q.isMeshBasicMaterial||q.isMeshStandardMaterial||q.isShaderMaterial)&&$t.setValue(L,"isOrthographic",P.isOrthographicCamera===!0),E!==P&&(E=P,oi=!0,zo=!0)}if(z.isSkinnedMesh){$t.setOptional(L,z,"bindMatrix"),$t.setOptional(L,z,"bindMatrixInverse");const On=z.skeleton;On&&(On.boneTexture===null&&On.computeBoneTexture(),$t.setValue(L,"boneTexture",On.boneTexture,ge))}z.isBatchedMesh&&($t.setOptional(L,z,"batchingTexture"),$t.setValue(L,"batchingTexture",z._matricesTexture,ge),$t.setOptional(L,z,"batchingIdTexture"),$t.setValue(L,"batchingIdTexture",z._indirectTexture,ge),$t.setOptional(L,z,"batchingColorTexture"),z._colorsTexture!==null&&$t.setValue(L,"batchingColorTexture",z._colorsTexture,ge));const _i=K.morphAttributes;if((_i.position!==void 0||_i.normal!==void 0||_i.color!==void 0)&&de.update(z,K,ri),(oi||Ke.receiveShadow!==z.receiveShadow)&&(Ke.receiveShadow=z.receiveShadow,$t.setValue(L,"receiveShadow",z.receiveShadow)),q.isMeshGouraudMaterial&&q.envMap!==null&&(mi.envMap.value=Oe,mi.flipEnvMap.value=Oe.isCubeTexture&&Oe.isRenderTargetTexture===!1?-1:1),q.isMeshStandardMaterial&&q.envMap===null&&B.environment!==null&&(mi.envMapIntensity.value=B.environmentIntensity),oi&&($t.setValue(L,"toneMappingExposure",b.toneMappingExposure),Ke.needsLights&&I1(mi,zo),fe&&q.fog===!0&&le.refreshFogUniforms(mi,fe),le.refreshMaterialUniforms(mi,q,H,W,m.state.transmissionRenderTarget[P.id]),qu.upload(L,hy(Ke),mi,ge)),q.isShaderMaterial&&q.uniformsNeedUpdate===!0&&(qu.upload(L,hy(Ke),mi,ge),q.uniformsNeedUpdate=!1),q.isSpriteMaterial&&$t.setValue(L,"center",z.center),$t.setValue(L,"modelViewMatrix",z.modelViewMatrix),$t.setValue(L,"normalMatrix",z.normalMatrix),$t.setValue(L,"modelMatrix",z.matrixWorld),q.isShaderMaterial||q.isRawShaderMaterial){const On=q.uniformsGroups;for(let $n=0,yf=On.length;$n0&&ge.useMultisampledRTT(P)===!1?z=ce.get(P).__webglMultisampledFramebuffer:Array.isArray(et)?z=et[K]:z=et,R.copy(P.viewport),k.copy(P.scissor),O=P.scissorTest}else R.copy(pe).multiplyScalar(H).floor(),k.copy(Ie).multiplyScalar(H).floor(),O=ke;if(K!==0&&(z=k1),Q.bindFramebuffer(L.FRAMEBUFFER,z)&&q&&Q.drawBuffers(P,z),Q.viewport(R),Q.scissor(k),Q.setScissorTest(O),fe){const Oe=ce.get(P.texture);L.framebufferTexture2D(L.FRAMEBUFFER,L.COLOR_ATTACHMENT0,L.TEXTURE_CUBE_MAP_POSITIVE_X+B,Oe.__webglTexture,K)}else if(Re){const Oe=B;for(let je=0;je=0&&B<=P.width-q&&K>=0&&K<=P.height-z&&(P.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+Ne),L.readPixels(B,K,q,z,Ve.convert(et),Ve.convert(We),fe))}finally{const je=C!==null?ce.get(C).__webglFramebuffer:null;Q.bindFramebuffer(L.FRAMEBUFFER,je)}}},this.readRenderTargetPixelsAsync=async function(P,B,K,q,z,fe,Re,Ne=0){if(!(P&&P.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Oe=ce.get(P).__webglFramebuffer;if(P.isWebGLCubeRenderTarget&&Re!==void 0&&(Oe=Oe[Re]),Oe)if(B>=0&&B<=P.width-q&&K>=0&&K<=P.height-z){Q.bindFramebuffer(L.FRAMEBUFFER,Oe);const je=P.textures[Ne],et=je.format,We=je.type;if(!Y.textureFormatReadable(et))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Y.textureTypeReadable(We))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const wt=L.createBuffer();L.bindBuffer(L.PIXEL_PACK_BUFFER,wt),L.bufferData(L.PIXEL_PACK_BUFFER,fe.byteLength,L.STREAM_READ),P.textures.length>1&&L.readBuffer(L.COLOR_ATTACHMENT0+Ne),L.readPixels(B,K,q,z,Ve.convert(et),Ve.convert(We),0);const It=C!==null?ce.get(C).__webglFramebuffer:null;Q.bindFramebuffer(L.FRAMEBUFFER,It);const qt=L.fenceSync(L.SYNC_GPU_COMMANDS_COMPLETE,0);return L.flush(),await QC(L,qt,4),L.bindBuffer(L.PIXEL_PACK_BUFFER,wt),L.getBufferSubData(L.PIXEL_PACK_BUFFER,0,fe),L.deleteBuffer(wt),L.deleteSync(qt),fe}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(P,B=null,K=0){const q=Math.pow(2,-K),z=Math.floor(P.image.width*q),fe=Math.floor(P.image.height*q),Re=B!==null?B.x:0,Ne=B!==null?B.y:0;ge.setTexture2D(P,0),L.copyTexSubImage2D(L.TEXTURE_2D,K,0,0,Re,Ne,z,fe),Q.unbindTexture()};const D1=L.createFramebuffer(),O1=L.createFramebuffer();this.copyTextureToTexture=function(P,B,K=null,q=null,z=0,fe=null){fe===null&&(z!==0?(Xl("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),fe=z,z=0):fe=0);let Re,Ne,Oe,je,et,We,wt,It,qt;const Ft=P.isCompressedTexture?P.mipmaps[fe]:P.image;if(K!==null)Re=K.max.x-K.min.x,Ne=K.max.y-K.min.y,Oe=K.isBox3?K.max.z-K.min.z:1,je=K.min.x,et=K.min.y,We=K.isBox3?K.min.z:0;else{const _i=Math.pow(2,-z);Re=Math.floor(Ft.width*_i),Ne=Math.floor(Ft.height*_i),P.isDataArrayTexture?Oe=Ft.depth:P.isData3DTexture?Oe=Math.floor(Ft.depth*_i):Oe=1,je=0,et=0,We=0}q!==null?(wt=q.x,It=q.y,qt=q.z):(wt=0,It=0,qt=0);const kt=Ve.convert(B.format),Ke=Ve.convert(B.type);let Gt;B.isData3DTexture?(ge.setTexture3D(B,0),Gt=L.TEXTURE_3D):B.isDataArrayTexture||B.isCompressedArrayTexture?(ge.setTexture2DArray(B,0),Gt=L.TEXTURE_2D_ARRAY):(ge.setTexture2D(B,0),Gt=L.TEXTURE_2D),L.pixelStorei(L.UNPACK_FLIP_Y_WEBGL,B.flipY),L.pixelStorei(L.UNPACK_PREMULTIPLY_ALPHA_WEBGL,B.premultiplyAlpha),L.pixelStorei(L.UNPACK_ALIGNMENT,B.unpackAlignment);const St=L.getParameter(L.UNPACK_ROW_LENGTH),ri=L.getParameter(L.UNPACK_IMAGE_HEIGHT),yr=L.getParameter(L.UNPACK_SKIP_PIXELS),oi=L.getParameter(L.UNPACK_SKIP_ROWS),zo=L.getParameter(L.UNPACK_SKIP_IMAGES);L.pixelStorei(L.UNPACK_ROW_LENGTH,Ft.width),L.pixelStorei(L.UNPACK_IMAGE_HEIGHT,Ft.height),L.pixelStorei(L.UNPACK_SKIP_PIXELS,je),L.pixelStorei(L.UNPACK_SKIP_ROWS,et),L.pixelStorei(L.UNPACK_SKIP_IMAGES,We);const $t=P.isDataArrayTexture||P.isData3DTexture,mi=B.isDataArrayTexture||B.isData3DTexture;if(P.isDepthTexture){const _i=ce.get(P),On=ce.get(B),$n=ce.get(_i.__renderTarget),yf=ce.get(On.__renderTarget);Q.bindFramebuffer(L.READ_FRAMEBUFFER,$n.__webglFramebuffer),Q.bindFramebuffer(L.DRAW_FRAMEBUFFER,yf.__webglFramebuffer);for(let ga=0;gaMath.PI&&(i-=Xn),s<-Math.PI?s+=Xn:s>Math.PI&&(s-=Xn),i<=s?this._spherical.theta=Math.max(i,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+s)/2?Math.max(i,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const r=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),a=r!=this._spherical.radius}if(ln.setFromSpherical(this._spherical),ln.applyQuaternion(this._quatInverse),t.copy(this.target).add(ln),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let r=null;if(this.object.isPerspectiveCamera){const o=ln.length();r=this._clampDistance(o*this._scale);const l=o-r;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),a=!!l}else if(this.object.isOrthographicCamera){const o=new S(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),a=l!==this.object.zoom;const c=new S(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),r=ln.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;r!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(r).add(this.object.position):(hu.origin.copy(this.object.position),hu.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(hu.direction))up||8*(1-this._lastQuaternion.dot(this.object.quaternion))>up||this._lastTargetPosition.distanceToSquared(this.target)>up?(this.dispatchEvent(q0),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?Xn/60*this.autoRotateSpeed*e:Xn/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){ln.setFromMatrixColumn(t,0),ln.multiplyScalar(-e),this._panOffset.add(ln)}_panUp(e,t){this.screenSpacePanning===!0?ln.setFromMatrixColumn(t,1):(ln.setFromMatrixColumn(t,0),ln.crossVectors(this.object.up,ln)),ln.multiplyScalar(e),this._panOffset.add(ln)}_pan(e,t){const i=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;ln.copy(s).sub(this.target);let a=ln.length();a*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*a/i.clientHeight,this.object.matrix),this._panUp(2*t*a/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),s=e-i.left,a=t-i.top,r=i.width,o=i.height;this._mouse.x=s/r*2-1,this._mouse.y=-(a/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(Xn*this._rotateDelta.x/t.clientHeight),this._rotateUp(Xn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-Xn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(i,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(i,s)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyStart.set(0,a)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),s=.5*(e.pageX+i.x),a=.5*(e.pageY+i.y);this._rotateEnd.set(s,a)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(Xn*this._rotateDelta.x/t.clientHeight),this._rotateUp(Xn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(i,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyEnd.set(0,a),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const r=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(r,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t(O=F.indexOf(` +`))&&D=C.byteLength||!(U=d(C)))&&r(1,"no header found"),(F=U.match(w))||r(3,"bad initial token"),D.valid|=1,D.programtype=F[1],D.string+=U+` +`;U=d(C),U!==!1;){if(D.string+=U+` +`,U.charAt(0)==="#"){D.comments+=U+` +`;continue}if((F=U.match(E))&&(D.gamma=parseFloat(F[1])),(F=U.match(R))&&(D.exposure=parseFloat(F[1])),(F=U.match(k))&&(D.valid|=2,D.format=F[1]),(F=U.match(O))&&(D.valid|=4,D.height=parseInt(F[1],10),D.width=parseInt(F[2],10)),D.valid&2&&D.valid&4)break}return D.valid&2||r(3,"missing format specifier"),D.valid&4||r(3,"missing image size specifier"),D},f=function(C,w,E){const R=w;if(R<8||R>32767||C[0]!==2||C[1]!==2||C[2]&128)return new Uint8Array(C);R!==(C[2]<<8|C[3])&&r(3,"wrong scanline width");const k=new Uint8Array(4*w*E);k.length||r(4,"unable to allocate buffer space");let O=0,D=0;const U=4*R,F=new Uint8Array(4),W=new Uint8Array(U);let H=E;for(;H>0&&DC.byteLength&&r(1),F[0]=C[D++],F[1]=C[D++],F[2]=C[D++],F[3]=C[D++],(F[0]!=2||F[1]!=2||(F[2]<<8|F[3])!=R)&&r(3,"bad rgbe scanline format");let ne=0,oe;for(;ne128;if(Ie&&(oe-=128),(oe===0||ne+oe>U)&&r(3,"bad scanline data"),Ie){const ke=C[D++];for(let Xe=0;Xe{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(const t of e)t.dispose()}}function zr(n){return new ef({color:0,emissive:16777215,emissiveIntensity:n})}let gT=null;function MD(){return typeof document<"u"&&document.baseURI?document.baseURI:typeof window<"u"&&window.location?.href?window.location.href:import.meta.url}function ED(){return"./"}function CD(n){return/^[a-z][a-z\d+\-.]*:/i.test(n)||n.startsWith("//")}function AD(n=gT){const e=n==null||n===""?ED():String(n);return new URL(e,MD()).href}function Si(n,e=gT){const t=String(n);return CD(t)?t:new URL(t.replace(/^\/+/,""),AD(e)).href}class RD{constructor(e,t={}){if(this.container=typeof e=="string"?document.getElementById(e):e,this.assetBase=t.assetBase,!this.container){console.error("Invalid container passed to SceneManager");return}this.scene=new cc,this.scene.background=new ue(8900331);const i=this.container.clientWidth,s=this.container.clientHeight;this.camera=new Jt(75,i/s,10,5e4),this.camera.position.set(0,2e3,5e3),this.renderer=new kg({antialias:!0,preserveDrawingBuffer:t.preserveDrawingBuffer===!0}),this.renderer.setSize(i,s),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=W_,this.renderer.toneMapping=K_,this.renderer.toneMappingExposure=1,this.renderer.outputColorSpace=gt,this.container.appendChild(this.renderer.domElement),window.addEventListener("resize",()=>this.onWindowResize())}initDefaultEnvironment(){if(!this._neutralEnvTexture){const e=new sh(this.renderer);this._neutralEnvTexture=e.fromScene(new TD,.04).texture,e.dispose()}if(this.scene.environment=this._neutralEnvTexture,!this._defaultLightsAdded){const e=new Fo(16777215,1.5);e.position.set(3e3,8e3,4e3),this.scene.add(e);const t=new mc(16777215,.4);this.scene.add(t),this._defaultLightsAdded=!0}}applyEnvironment(e){return new Promise(t=>{const i=new SD,s=Si(e.skyboxUrl,this.assetBase);i.load(s,a=>{this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),a.mapping=rr,this.scene.background=a,this.scene.environment=a,this.currentEnvironmentId=e.id;const r=e.rotation??{};this._skyboxBaseRotation={x:vt.degToRad(r.x??0),y:vt.degToRad(r.y??0),z:vt.degToRad(r.z??0)},this._skyboxAnimatedY=0,this._skyboxAnimation=e.animation??null,this._applySkyboxRotation(),typeof e.exposure=="number"&&(this.renderer.toneMappingExposure=e.exposure),console.log(`[SceneManager] environment applied: ${e.id}`),t(!0)},void 0,a=>{console.error(`[SceneManager] Failed to load environment "${e.id}":`,a),t(!1)})})}_applySkyboxRotation(){const e=this._skyboxBaseRotation;if(!e)return;const t=e.y+(this._skyboxAnimatedY??0);this.scene.backgroundRotation&&this.scene.backgroundRotation.set(e.x,t,e.z),this.scene.environmentRotation&&this.scene.environmentRotation.set(e.x,t,e.z)}updateSkyboxAnimation(e){const t=this._skyboxAnimation;!t||!t.enabled||!e||(this._skyboxAnimatedY=(this._skyboxAnimatedY??0)+vt.degToRad(t.speed*e),this._applySkyboxRotation())}setDefaultBackground(){this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),this.scene.background=new ue(1710638),this.initDefaultEnvironment(),this.renderer.toneMappingExposure=1,this._skyboxAnimation=null,this._skyboxBaseRotation=null,this.currentEnvironmentId=null,console.log("[SceneManager] Using neutral default environment (no skybox)")}setExposure(e){this.renderer&&(this.renderer.toneMappingExposure=e)}onWindowResize(){if(!this.container||!this.renderer)return;const e=this.container.clientWidth,t=this.container.clientHeight;this.camera.aspect=e/t,this.camera.updateProjectionMatrix(),this.renderer.setSize(e,t)}render(){this.renderer&&this.renderer.render(this.scene,this.camera)}dispose(){this.renderer&&(this.renderer.dispose(),this.renderer.domElement&&this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement),this.renderer=null)}}function j0(n,e){if(e===rS)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),n;if(e===Qd||e===ng){let t=n.getIndex();if(t===null){const r=[],o=n.getAttribute("position");if(o!==void 0){for(let l=0;l=2.0 are supported."));return}const c=new lO(a,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let u=0;u=0&&o[d]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+d+'".')}}c.setExtensions(r),c.setPlugins(o),c.parse(i,s)}parseAsync(e,t){const i=this;return new Promise(function(s,a){i.parse(e,t,s,a)})}}function PD(){let n={};return{get:function(e){return n[e]},add:function(e,t){n[e]=t},remove:function(e){delete n[e]},removeAll:function(){n={}}}}const xt={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class ID{constructor(e){this.parser=e,this.name=xt.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,a.source,r)}}class WD{constructor(e){this.parser=e,this.name=xt.EXT_TEXTURE_WEBP}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class XD{constructor(e){this.parser=e,this.name=xt.EXT_TEXTURE_AVIF}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class KD{constructor(e){this.name=xt.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const s=i.extensions[this.name],a=this.parser.getDependency("buffer",s.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return a.then(function(o){const l=s.byteOffset||0,c=s.byteLength||0,u=s.count,d=s.byteStride,h=new Uint8Array(o,l,c);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(u,d,h,s.mode,s.filter).then(function(f){return f.buffer}):r.ready.then(function(){const f=new ArrayBuffer(u*d);return r.decodeGltfBuffer(new Uint8Array(f),u,d,h,s.mode,s.filter),f})})}else return null}}class qD{constructor(e){this.name=xt.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;const s=t.meshes[i.mesh];for(const c of s.primitives)if(c.mode!==xi.TRIANGLES&&c.mode!==xi.TRIANGLE_STRIP&&c.mode!==xi.TRIANGLE_FAN&&c.mode!==void 0)return null;const r=i.extensions[this.name].attributes,o=[],l={};for(const c in r)o.push(this.parser.getDependency("accessor",r[c]).then(u=>(l[c]=u,l[c])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(c=>{const u=c.pop(),d=u.isGroup?u.children:[u],h=c[0].count,f=[];for(const p of d){const g=new Me,_=new S,m=new dt,v=new S(1,1,1),y=new zh(p.geometry,p.material,h);for(let b=0;b0||n.search(/^data\:image\/jpeg/)===0?"image/jpeg":n.search(/\.webp($|\?)/i)>0||n.search(/^data\:image\/webp/)===0?"image/webp":n.search(/\.ktx2($|\?)/i)>0||n.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const oO=new Me;class lO{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new PD,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,s=-1,a=!1,r=-1;if(typeof navigator<"u"){const o=navigator.userAgent;i=/^((?!chrome|android).)*safari/i.test(o)===!0;const l=o.match(/Version\/(\d+)/);s=i&&l?parseInt(l[1],10):-1,a=o.indexOf("Firefox")>-1,r=a?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||i&&s<17||a&&r<98?this.textureLoader=new tf(this.options.manager):this.textureLoader=new nT(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Gn(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,s=this.json,a=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(r){return r._markDefs&&r._markDefs()}),Promise.all(this._invokeAll(function(r){return r.beforeRoot&&r.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(r){const o={scene:r[0][s.scene||0],scenes:r[0],animations:r[1],cameras:r[2],asset:s.asset,parser:i,userData:{}};return La(a,o,s),rs(o,s),Promise.all(i._invokeAll(function(l){return l.afterRoot&&l.afterRoot(o)})).then(function(){for(const l of o.scenes)l.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let s=0,a=t.length;s{const l=this.associations.get(r);l!=null&&this.associations.set(o,l);for(const[c,u]of r.children.entries())a(u,o.children[c])};return a(i,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i=2&&_.setY(w,x[M*l+1]),l>=3&&_.setZ(w,x[M*l+2]),l>=4&&_.setW(w,x[M*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}_.normalized=p}return _})}loadTexture(e){const t=this.json,i=this.options,a=t.textures[e].source,r=t.images[a];let o=this.textureLoader;if(r.uri){const l=i.manager.getHandler(r.uri);l!==null&&(o=l)}return this.loadTextureImage(e,a,o)}loadTextureImage(e,t,i){const s=this,a=this.json,r=a.textures[e],o=a.images[t],l=(o.uri||o.bufferView)+":"+r.sampler;if(this.textureCache[l])return this.textureCache[l];const c=this.loadImageSource(t,i).then(function(u){u.flipY=!1,u.name=r.name||o.name||"",u.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(u.name=o.uri);const h=(a.samplers||{})[r.sampler]||{};return u.magFilter=J0[h.magFilter]||Vt,u.minFilter=J0[h.minFilter]||Mi,u.wrapS=Q0[h.wrapS]||ps,u.wrapT=Q0[h.wrapT]||ps,u.generateMipmaps=!u.isCompressedTexture&&u.minFilter!==dn&&u.minFilter!==Vt,s.associations.set(u,{textures:e}),u}).catch(function(){return null});return this.textureCache[l]=c,c}loadImageSource(e,t){const i=this,s=this.json,a=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(d=>d.clone());const r=s.images[e],o=self.URL||self.webkitURL;let l=r.uri||"",c=!1;if(r.bufferView!==void 0)l=i.getDependency("bufferView",r.bufferView).then(function(d){c=!0;const h=new Blob([d],{type:r.mimeType});return l=o.createObjectURL(h),l});else if(r.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const u=Promise.resolve(l).then(function(d){return new Promise(function(h,f){let p=h;t.isImageBitmapLoader===!0&&(p=function(g){const _=new Bt(g);_.needsUpdate=!0,h(_)}),t.load(Us.resolveURL(d,a.path),p,void 0,f)})}).then(function(d){return c===!0&&o.revokeObjectURL(l),rs(d,r),d.userData.mimeType=r.mimeType||rO(r.uri),d}).catch(function(d){throw console.error("THREE.GLTFLoader: Couldn't load texture",l),d});return this.sourceCache[e]=u,u}assignTexture(e,t,i,s){const a=this;return this.getDependency("texture",i.index).then(function(r){if(!r)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(r=r.clone(),r.channel=i.texCoord),a.extensions[xt.KHR_TEXTURE_TRANSFORM]){const o=i.extensions!==void 0?i.extensions[xt.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const l=a.associations.get(r);r=a.extensions[xt.KHR_TEXTURE_TRANSFORM].extendTexture(r,o),a.associations.set(r,l)}}return s!==void 0&&(r.colorSpace=s),e[t]=r,r})}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const s=t.attributes.tangent===void 0,a=t.attributes.color!==void 0,r=t.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new aa,Qt.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,l.sizeAttenuation=!1,this.cache.add(o,l)),i=l}else if(e.isLine){const o="LineBasicMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new Rt,Qt.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,this.cache.add(o,l)),i=l}if(s||a||r){let o="ClonedMaterial:"+i.uuid+":";s&&(o+="derivative-tangents:"),a&&(o+="vertex-colors:"),r&&(o+="flat-shading:");let l=this.cache.get(o);l||(l=i.clone(),a&&(l.vertexColors=!0),r&&(l.flatShading=!0),s&&(l.normalScale&&(l.normalScale.y*=-1),l.clearcoatNormalScale&&(l.clearcoatNormalScale.y*=-1)),this.cache.add(o,l),this.associations.set(l,this.associations.get(i))),i=l}e.material=i}getMaterialType(){return Pn}loadMaterial(e){const t=this,i=this.json,s=this.extensions,a=i.materials[e];let r;const o={},l=a.extensions||{},c=[];if(l[xt.KHR_MATERIALS_UNLIT]){const d=s[xt.KHR_MATERIALS_UNLIT];r=d.getMaterialType(),c.push(d.extendParams(o,a,t))}else{const d=a.pbrMetallicRoughness||{};if(o.color=new ue(1,1,1),o.opacity=1,Array.isArray(d.baseColorFactor)){const h=d.baseColorFactor;o.color.setRGB(h[0],h[1],h[2],xn),o.opacity=h[3]}d.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",d.baseColorTexture,gt)),o.metalness=d.metallicFactor!==void 0?d.metallicFactor:1,o.roughness=d.roughnessFactor!==void 0?d.roughnessFactor:1,d.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,"metalnessMap",d.metallicRoughnessTexture)),c.push(t.assignTexture(o,"roughnessMap",d.metallicRoughnessTexture))),r=this._invokeOne(function(h){return h.getMaterialType&&h.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(h){return h.extendMaterialParams&&h.extendMaterialParams(e,o)})))}a.doubleSided===!0&&(o.side=ct);const u=a.alphaMode||hp.OPAQUE;if(u===hp.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,u===hp.MASK&&(o.alphaTest=a.alphaCutoff!==void 0?a.alphaCutoff:.5)),a.normalTexture!==void 0&&r!==Ye&&(c.push(t.assignTexture(o,"normalMap",a.normalTexture)),o.normalScale=new te(1,1),a.normalTexture.scale!==void 0)){const d=a.normalTexture.scale;o.normalScale.set(d,d)}if(a.occlusionTexture!==void 0&&r!==Ye&&(c.push(t.assignTexture(o,"aoMap",a.occlusionTexture)),a.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=a.occlusionTexture.strength)),a.emissiveFactor!==void 0&&r!==Ye){const d=a.emissiveFactor;o.emissive=new ue().setRGB(d[0],d[1],d[2],xn)}return a.emissiveTexture!==void 0&&r!==Ye&&c.push(t.assignTexture(o,"emissiveMap",a.emissiveTexture,gt)),Promise.all(c).then(function(){const d=new r(o);return a.name&&(d.name=a.name),rs(d,a),t.associations.set(d,{materials:e}),a.extensions&&La(s,d,a),d})}createUniqueName(e){const t=yt.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,s=this.primitiveCache;function a(o){return i[xt.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return ev(l,o,t)})}const r=[];for(let o=0,l=e.length;o0&&sO(m,a),m.name=t.createUniqueName(a.name||"mesh_"+e),rs(m,a),_.extensions&&La(s,m,_),t.assignFinalMaterial(m),d.push(m)}for(let f=0,p=d.length;f1?u=new Mt:c.length===1?u=c[0]:u=new Qe,u!==c[0])for(let d=0,h=c.length;d1){const d=s.associations.get(u);s.associations.set(u,{...d})}return s.associations.get(u).nodes=e,u}),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],s=this,a=new Mt;i.name&&(a.name=s.createUniqueName(i.name)),rs(a,i),i.extensions&&La(t,a,i);const r=i.nodes||[],o=[];for(let l=0,c=r.length;l{const d=new Map;for(const[h,f]of s.associations)(h instanceof Qt||h instanceof Bt)&&d.set(h,f);return u.traverse(h=>{const f=s.associations.get(h);f!=null&&d.set(h,f)}),d};return s.associations=c(a),a})}_createAnimationTracks(e,t,i,s,a){const r=[],o=e.name?e.name:e.uuid,l=[];Ys[a.path]===Ys.weights?e.traverse(function(h){h.morphTargetInfluences&&l.push(h.name?h.name:h.uuid)}):l.push(o);let c;switch(Ys[a.path]){case Ys.weights:c=ua;break;case Ys.rotation:c=_s;break;case Ys.translation:case Ys.scale:c=Hs;break;default:i.itemSize===1?c=ua:c=Hs;break}const u=s.interpolation!==void 0?tO[s.interpolation]:or,d=this._getArrayFromAccessor(i);for(let h=0,f=l.length;h{this.parse(r,t,s)},i,s)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,gt,i).catch(i)}decodeDracoFile(e,t,i,s,a=xn,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:a};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(pp.has(e)){const l=pp.get(e);if(l.key===i)return l.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let s;const a=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(a,r).then(l=>(s=l,new Promise((c,u)=>{s._callbacks[a]={resolve:c,reject:u},s.postMessage({type:"decode",id:a,taskConfig:t,buffer:e},[e])}))).then(l=>this._createGeometry(l.geometry));return o.catch(()=>!0).then(()=>{s&&a&&this._releaseTask(s,a)}),pp.set(e,{key:i,promise:o}),o}_createGeometry(e){const t=new Ge;e.index&&t.setIndex(new ot(e.index.array,1));for(let i=0;i{i.load(e,s,void 0,a)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(i=>{const s=i[0];e||(this.decoderConfig.wasmBinary=i[1]);const a=uO.toString(),r=["/* draco decoder */",s,"","/* worker */",a.substring(a.indexOf("{")+1,a.lastIndexOf("}"))].join(` +`);this.workerSourceURL=URL.createObjectURL(new Blob([r]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtha._taskLoad?-1:1});const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{const d=u.draco,h=new d.Decoder;try{const f=t(d,h,new Int8Array(l),c),p=f.attributes.map(g=>g.array.buffer);f.index&&p.push(f.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:f},p)}catch(f){console.error(f),self.postMessage({type:"error",id:o.id,error:f.message})}finally{d.destroy(h)}});break}};function t(r,o,l,c){const u=c.attributeIDs,d=c.attributeTypes;let h,f;const p=o.GetEncodedGeometryType(l);if(p===r.TRIANGULAR_MESH)h=new r.Mesh,f=o.DecodeArrayToMesh(l,l.byteLength,h);else if(p===r.POINT_CLOUD)h=new r.PointCloud,f=o.DecodeArrayToPointCloud(l,l.byteLength,h);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!f.ok()||h.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+f.error_msg());const g={index:null,attributes:[]};for(const _ in u){const m=self[d[_]];let v,y;if(c.useUniqueIDs)y=u[_],v=o.GetAttributeByUniqueId(h,y);else{if(y=o.GetAttributeId(h,r[u[_]]),y===-1)continue;v=o.GetAttribute(h,y)}const b=s(r,o,h,_,m,v);_==="color"&&(b.vertexColorSpace=c.vertexColorSpace),g.attributes.push(b)}return p===r.TRIANGULAR_MESH&&(g.index=i(r,o,h)),r.destroy(h),g}function i(r,o,l){const u=l.num_faces()*3,d=u*4,h=r._malloc(d);o.GetTrianglesUInt32Array(l,d,h);const f=new Uint32Array(r.HEAPF32.buffer,h,u).slice();return r._free(h),{array:f,itemSize:1}}function s(r,o,l,c,u,d){const h=d.num_components(),p=l.num_points()*h,g=p*u.BYTES_PER_ELEMENT,_=a(r,u),m=r._malloc(g);o.GetAttributeDataArrayForAllPoints(l,d,_,g,m);const v=new u(r.HEAPF32.buffer,m,p).slice();return r._free(m),{name:c,array:v,itemSize:h}}function a(r,o){switch(o){case Float32Array:return r.DT_FLOAT32;case Int8Array:return r.DT_INT8;case Int16Array:return r.DT_INT16;case Int32Array:return r.DT_INT32;case Uint8Array:return r.DT_UINT8;case Uint16Array:return r.DT_UINT16;case Uint32Array:return r.DT_UINT32}}}const dO=/^[og]\s*(.+)?/,hO=/^mtllib /,fO=/^usemtl /,pO=/^usemap /,tv=/\s+/,nv=new S,mp=new S,iv=new S,sv=new S,yi=new S,fu=new ue;function mO(){const n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(s,a){const r=this._finalize(!1);r&&(r.inherited||r.groupCount<=0)&&this.materials.splice(r.index,1);const o={index:this.materials.length,name:s||"",mtllib:Array.isArray(a)&&a.length>0?a[a.length-1]:"",smooth:r!==void 0?r.smooth:this.smooth,groupStart:r!==void 0?r.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(l){const c={index:typeof l=="number"?l:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(o),o},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(s){const a=this.currentMaterial();if(a&&a.groupEnd===-1&&(a.groupEnd=this.geometry.vertices.length/3,a.groupCount=a.groupEnd-a.groupStart,a.inherited=!1),s&&this.materials.length>1)for(let r=this.materials.length-1;r>=0;r--)this.materials[r].groupCount<=0&&this.materials.splice(r,1);return s&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),a}},i&&i.name&&typeof i.clone=="function"){const s=i.clone(0);s.inherited=!0,this.object.materials.push(s)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){const s=this.vertices,a=this.object.geometry.vertices;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){const s=this.normals,a=this.object.geometry.normals;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addFaceNormal:function(e,t,i){const s=this.vertices,a=this.object.geometry.normals;nv.fromArray(s,e),mp.fromArray(s,t),iv.fromArray(s,i),yi.subVectors(iv,mp),sv.subVectors(nv,mp),yi.cross(sv),yi.normalize(),a.push(yi.x,yi.y,yi.z),a.push(yi.x,yi.y,yi.z),a.push(yi.x,yi.y,yi.z)},addColor:function(e,t,i){const s=this.colors,a=this.object.geometry.colors;s[e]!==void 0&&a.push(s[e+0],s[e+1],s[e+2]),s[t]!==void 0&&a.push(s[t+0],s[t+1],s[t+2]),s[i]!==void 0&&a.push(s[i+0],s[i+1],s[i+2])},addUV:function(e,t,i){const s=this.uvs,a=this.object.geometry.uvs;a.push(s[e+0],s[e+1]),a.push(s[t+0],s[t+1]),a.push(s[i+0],s[i+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,s,a,r,o,l,c){const u=this.vertices.length;let d=this.parseVertexIndex(e,u),h=this.parseVertexIndex(t,u),f=this.parseVertexIndex(i,u);if(this.addVertex(d,h,f),this.addColor(d,h,f),o!==void 0&&o!==""){const p=this.normals.length;d=this.parseNormalIndex(o,p),h=this.parseNormalIndex(l,p),f=this.parseNormalIndex(c,p),this.addNormal(d,h,f)}else this.addFaceNormal(d,h,f);if(s!==void 0&&s!==""){const p=this.uvs.length;d=this.parseUVIndex(s,p),h=this.parseUVIndex(a,p),f=this.parseUVIndex(r,p),this.addUV(d,h,f),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let i=0,s=e.length;i=7?(cu.setRGB(parseFloat(d[4]),parseFloat(d[5]),parseFloat(d[6]),gt),t.colors.push(cu.r,cu.g,cu.b)):t.colors.push(void 0,void 0,void 0);break;case"vn":t.normals.push(parseFloat(d[1]),parseFloat(d[2]),parseFloat(d[3]));break;case"vt":t.uvs.push(parseFloat(d[1]),parseFloat(d[2]));break}}else if(u==="f"){const h=c.slice(1).trim().split(q0),f=[];for(let g=0,_=h.length;g<_;g++){const m=h[g];if(m.length>0){const v=m.split("/");f.push(v)}}const p=f[0];for(let g=1,_=f.length-1;g<_;g++){const m=f[g],v=f[g+1];t.addFace(p[0],m[0],v[0],p[1],m[1],v[1],p[2],m[2],v[2])}}else if(u==="l"){const d=c.substring(1).trim().split(" ");let h=[];const f=[];if(c.indexOf("/")===-1)h=d;else for(let p=0,g=d.length;p1){const h=s[1].trim().toLowerCase();t.object.smooth=h!=="0"&&h!=="off"}else t.object.smooth=!0;const d=t.object.currentMaterial();d&&(d.smooth=t.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}t.finalize();const a=new Mt;if(a.materialLibraries=[].concat(t.materialLibraries),!(t.objects.length===1&&t.objects[0].geometry.vertices.length===0)===!0)for(let o=0,l=t.objects.length;o0&&g.setAttribute("normal",new Ee(u.normals,3)),u.colors.length>0&&(p=!0,g.setAttribute("color",new Ee(u.colors,3))),u.hasUVIndices===!0&&g.setAttribute("uv",new Ee(u.uvs,2));const _=[];for(let v=0,y=d.length;v1){for(let v=0,y=d.length;v0){const o=new sa({size:1,sizeAttenuation:!1}),l=new Ge;l.setAttribute("position",new Ee(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new Ee(t.colors,3)),o.vertexColors=!0);const c=new ir(l,o);a.add(c)}return a}}const up=new Map;async function rO(n,e){const t=wi("models/stadium/stadium.glb",e);let i=up.get(t);return i||(i=n.loadAsync(t).then(s=>{const a=s.scene;return oO(a),a}).catch(s=>{throw up.delete(t),s}),up.set(t,i)),i}function oO(n){const e=["Sol_Trait_T0","Sol_Trait_T1","Milieu_Forme","Milieu_Forme.001","cage_T0","cage_T1","Couleur_Hexagone_T0","Couleur_Hexagone_T1","wall_gradient_color_2","wall_gradient_color_2.001","Fond_BackBoard_Transparent","dégradé_transparent_T0","dégradé_transparent_T1","grid_transperant","Detail_Milieu","Detail_Milieu.001"],t=["Glow","Glass"],i=["Plafond_Hexagone_T0","Plafond_Hexagone_T1","Plafond_Transparent"];n.traverse(s=>{if(!s.isMesh)return;s.receiveShadow=!0,s.castShadow=!i.includes(s.name),t.some(r=>s.name.includes(r))&&(console.log(`[ArenaManager] Disabling frustum culling for: ${s.name}`),s.frustumCulled=!1),s.material&&/^Hexagone_T[01]$/.test(s.material.name??"")&&(s.material=s.material.clone(),s.material.transparent=!0,s.material.opacity=.18,s.material.depthWrite=!1,s.renderOrder=1),s.material&&s.material.name==="bannière_pub"&&(s.visible=!1),s.material&&s.material.name==="Sol_Hexagone"&&(s.material=s.material.clone(),s.material.color.setScalar(.35),s.material.metalness=0,s.material.roughness=1),s.material&&s.material.name&&e.includes(s.material.name)&&(console.log(`[ArenaManager] Fixing visibility for: ${s.name} (material: ${s.material.name})`),s.material=s.material.clone(),s.material.side=ct,s.material.depthWrite=!1,s.renderOrder=1,s.frustumCulled=!1)})}class lO{constructor(e,t={}){this.scene=e,this.assetBase=t.assetBase,this.arenaMeshes=[],this.drawingCollider=null,this.drawingColliderMeshes=[],this.arenaDecorMesh=null,this.showArenaDecor=!0,this.dracoLoader=new hT,this.dracoLoader.setDecoderPath(wi("draco/",this.assetBase)),this.gltfLoader=new Ag,this.gltfLoader.setDRACOLoader(this.dracoLoader)}async loadArenaMeshes(){try{console.log("Loading arena mesh...");const t=(await rO(this.gltfLoader,this.assetBase)).clone(!0);t.traverse(i=>{i.isMesh&&this.arenaMeshes.push(i)}),console.log(`[ArenaManager] Collected ${this.arenaMeshes.length} meshes for raycasting`),this.scene.add(t),console.log("Arena mesh loaded successfully with correct orientation")}catch(e){console.error("Error loading arena mesh:",e);const t=new Dn(10240,8192),i=new Pn({color:3355443,side:ct}),s=new we(t,i);s.rotation.x=-Math.PI/2,s.receiveShadow=!0,this.scene.add(s),this.arenaMeshes.push(s)}}getArenaMeshes(){return this.arenaMeshes}getDrawingColliderMeshes(){return this.drawingColliderMeshes}async loadDrawingCollider(e=!1){try{console.log("[ArenaManager] Loading drawing collider...");const i=await new aO().loadAsync(wi("models/stadium/DrawingArena.obj",this.assetBase));i.rotation.x=Math.PI/2,i.rotation.y=Math.PI,i.scale.setScalar(.99),i.position.y=20,i.traverse(s=>{s.isMesh&&(this.drawingColliderMeshes.push(s),s.castShadow=!1,s.receiveShadow=!1,e?s.material=new Ye({color:65280,transparent:!0,opacity:.7,side:ct}):s.material=new Ye({visible:!1}))}),this.drawingCollider=i,this.scene.add(i),console.log(`[ArenaManager] Drawing collider loaded with ${this.drawingColliderMeshes.length} meshes`)}catch(t){console.error("[ArenaManager] Failed to load drawing collider:",t)}}setDrawingColliderVisible(e){for(const t of this.drawingColliderMeshes)e?t.material=new Ye({color:65280,wireframe:!0,transparent:!0,opacity:.5}):t.material=new Ye({visible:!1})}async loadArenaDecor(e=!0){try{console.log("[ArenaManager] Loading arena decoration mesh...");const t=await this.gltfLoader.loadAsync(wi("models/stadium/arene.glb",this.assetBase));this.arenaDecorMesh=t.scene,this.showArenaDecor=e,this.arenaDecorMesh.traverse(i=>{i.isMesh&&(i.receiveShadow=!0,i.castShadow=!0)}),this.arenaDecorMesh.visible=e,this.scene.add(this.arenaDecorMesh),console.log(`[ArenaManager] Arena decoration loaded, visible: ${e}`)}catch(t){console.error("[ArenaManager] Failed to load arena decoration:",t)}}setArenaDecorVisible(e){this.showArenaDecor=e,this.arenaDecorMesh&&(this.arenaDecorMesh.visible=e,console.log(`[ArenaManager] Arena decoration visibility set to: ${e}`))}isArenaDecorVisible(){return this.showArenaDecor}}var Si=Uint8Array,Zr=Uint16Array,cO=Int32Array,fT=new Si([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),pT=new Si([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),uO=new Si([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),mT=function(n,e){for(var t=new Zr(31),i=0;i<31;++i)t[i]=e+=1<>1|(Nt&21845)<<1;js=(js&52428)>>2|(js&13107)<<2,js=(js&61680)>>4|(js&3855)<<4,Dm[Nt]=((js&65280)>>8|(js&255)<<8)>>1}var Il=(function(n,e,t){for(var i=n.length,s=0,a=new Zr(e);s>l]=c}else for(o=new Zr(i),s=0;s>15-n[s]);return o}),hc=new Si(288);for(var Nt=0;Nt<144;++Nt)hc[Nt]=8;for(var Nt=144;Nt<256;++Nt)hc[Nt]=9;for(var Nt=256;Nt<280;++Nt)hc[Nt]=7;for(var Nt=280;Nt<288;++Nt)hc[Nt]=8;var yT=new Si(32);for(var Nt=0;Nt<32;++Nt)yT[Nt]=5;var pO=Il(hc,9,1),mO=Il(yT,5,1),dp=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},ki=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},hp=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},_O=function(n){return(n+7)/8|0},gO=function(n,e,t){return(t==null||t>n.length)&&(t=n.length),new Si(n.subarray(e,t))},yO=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Hi=function(n,e,t){var i=new Error(e||yO[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,Hi),!t)throw i;return i},vO=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new Si(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new Si(s*3));var c=function(xe){var Ae=t.length;if(xe>Ae){var L=new Si(Math.max(Ae*2,xe));L.set(t),t=L}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=ki(n,d,1);var v=ki(n,d+1,3);if(d+=3,v)if(v==1)f=pO,p=mO,g=9,_=5;else if(v==2){var x=ki(n,d,31)+257,M=ki(n,d+10,15)+4,C=x+ki(n,d+5,31)+1;d+=14;for(var w=new Si(C),E=new Si(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+ki(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+ki(n,d,7),d+=3):y==18&&(W=11+ki(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ne=w.subarray(x);g=dp(H),_=dp(ne),f=Il(H,g,1),p=Il(ne,_,1)}else Hi(1);else{var y=_O(d)+4,b=n[y-4]|n[y-3]<<8,T=y+b;if(T>s){l&&Hi(0);break}o&&c(h+b),t.set(n.subarray(y,T),h),e.b=h+=b,e.p=d=T*8,e.f=u;continue}if(d>m){l&&Hi(0);break}}o&&c(h+131072);for(var oe=(1<>4;if(d+=F&15,d>m){l&&Hi(0);break}if(F||Hi(2),De<256)t[h++]=De;else if(De==256){Ie=d,f=null;break}else{var Xe=De-254;if(De>264){var R=De-257,ke=fT[R];Xe=ki(n,d,(1<>4;Z||Hi(3),d+=Z&15;var ne=fO[se];if(se>3){var ke=pT[se];ne+=hp(n,d)&(1<m){l&&Hi(0);break}o&&c(h+131072);var Se=h+Xe;if(h>4>7||(n[0]<<8|n[1])%31)&&Hi(6,"invalid zlib data"),(n[1]>>5&1)==1&&Hi(6,"invalid zlib data: "+(n[1]&32?"need":"unexpected")+" dictionary"),(n[1]>>3&4)+2};function wO(n,e){return vO(n.subarray(xO(n),-4),{i:2},e,e)}var SO=typeof TextDecoder<"u"&&new TextDecoder,TO=0;try{SO.decode(bO,{stream:!0}),TO=1}catch{}function vT(n,e,t){const i=t.length-n-1;if(e>=t[i])return i-1;if(e<=t[n])return n;let s=n,a=i,r=Math.floor((s+a)/2);for(;e=t[r+1];)e=g&&(p[f][0]=p[h][0]/o[v+1][m],_=p[f][0]*o[m][v]);const y=m>=-1?1:-m,b=d-1<=v?g-1:t-d;for(let x=y;x<=b;++x)p[f][x]=(p[h][x]-p[h][x-1])/o[v+1][m+x],_+=p[f][x]*o[m+x][v];d<=v&&(p[f][g]=-p[h][g-1]/o[v+1][d],_+=p[f][g]*o[d][v]),r[g][d]=_;const T=h;h=f,f=T}}let u=t;for(let d=1;d<=i;++d){for(let h=0;h<=t;++h)r[d][h]*=u;u*=t-d}return r}function AO(n,e,t,i,s){const a=st.toArray()),e.startKnot=this.startKnot,e.endKnot=this.endKnot,e}fromJSON(e){return super.fromJSON(e),this.degree=e.degree,this.knots=[...e.knots],this.controlPoints=e.controlPoints.map(t=>new qe(t[0],t[1],t[2],t[3])),this.startKnot=e.startKnot,this.endKnot=e.endKnot,this}}let _t,Zt,Un;class DO extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=a.path===""?Us.extractUrlBase(e):a.path,o=new Gn(this.manager);o.setPath(a.path),o.setResponseType("arraybuffer"),o.setRequestHeader(a.requestHeader),o.setWithCredentials(a.withCredentials),o.load(e,function(l){try{t(a.parse(l,r))}catch(c){s?s(c):console.error(c),a.manager.itemError(e)}},i,s)}parse(e,t){if(BO(e))_t=new UO().parse(e);else{const s=wT(e);if(!zO(s))throw new Error("THREE.FBXLoader: Unknown format.");if(Q0(s)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+Q0(s));_t=new NO().parse(s)}const i=new Yh(this.manager).setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);return new kO(i,this.manager).parse(_t)}}class kO{constructor(e,t){this.textureLoader=e,this.manager=t}parse(){Zt=this.parseConnections();const e=this.parseImages(),t=this.parseTextures(e),i=this.parseMaterials(t),s=this.parseDeformers(),a=new OO().parse(s);return this.parseScene(s,a,i),Un}parseConnections(){const e=new Map;return"Connections"in _t&&_t.Connections.connections.forEach(function(i){const s=i[0],a=i[1],r=i[2];e.has(s)||e.set(s,{parents:[],children:[]});const o={ID:a,relationship:r};e.get(s).parents.push(o),e.has(a)||e.set(a,{parents:[],children:[]});const l={ID:s,relationship:r};e.get(a).children.push(l)}),e}parseImages(){const e={},t={};if("Video"in _t.Objects){const i=_t.Objects.Video;for(const s in i){const a=i[s],r=parseInt(s);if(e[r]=a.RelativeFilename||a.Filename,"Content"in a){const o=a.Content instanceof ArrayBuffer&&a.Content.byteLength>0,l=typeof a.Content=="string"&&a.Content!=="";if(o||l){const c=this.parseImage(i[s]);t[a.RelativeFilename||a.Filename]=c}}}}for(const i in e){const s=e[i];t[s]!==void 0?e[i]=t[s]:e[i]=e[i].split("\\").pop()}return e}parseImage(e){const t=e.Content,i=e.RelativeFilename||e.Filename,s=i.slice(i.lastIndexOf(".")+1).toLowerCase();let a;switch(s){case"bmp":a="image/bmp";break;case"jpg":case"jpeg":a="image/jpeg";break;case"png":a="image/png";break;case"tif":a="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",i),a="image/tga";break;case"webp":a="image/webp";break;default:console.warn('FBXLoader: Image type "'+s+'" is not supported.');return}if(typeof t=="string")return"data:"+a+";base64,"+t;{const r=new Uint8Array(t);return window.URL.createObjectURL(new Blob([r],{type:a}))}}parseTextures(e){const t=new Map;if("Texture"in _t.Objects){const i=_t.Objects.Texture;for(const s in i){const a=this.parseTexture(i[s],e);t.set(parseInt(s),a)}}return t}parseTexture(e,t){const i=this.loadTexture(e,t);i.ID=e.id,i.name=e.attrName;const s=e.WrapModeU,a=e.WrapModeV,r=s!==void 0?s.value:0,o=a!==void 0?a.value:0;if(i.wrapS=r===0?ps:Hn,i.wrapT=o===0?ps:Hn,"Scaling"in e){const l=e.Scaling.value;i.repeat.x=l[0],i.repeat.y=l[1]}if("Translation"in e){const l=e.Translation.value;i.offset.x=l[0],i.offset.y=l[1]}return i}loadTexture(e,t){const i=e.FileName.split(".").pop().toLowerCase();let s=this.manager.getHandler(`.${i}`);s===null&&(s=this.textureLoader);const a=s.path;a||s.setPath(this.textureLoader.path);const r=Zt.get(e.id).children;let o;if(r!==void 0&&r.length>0&&t[r[0].ID]!==void 0&&(o=t[r[0].ID],(o.indexOf("blob:")===0||o.indexOf("data:")===0)&&s.setPath(void 0)),o===void 0)return console.warn("FBXLoader: Undefined filename, creating placeholder texture."),new Bt;const l=s.load(o);return s.setPath(a),l}parseMaterials(e){const t=new Map;if("Material"in _t.Objects){const i=_t.Objects.Material;for(const s in i){const a=this.parseMaterial(i[s],e);a!==null&&t.set(parseInt(s),a)}}return t}parseMaterial(e,t){const i=e.id,s=e.attrName;let a=e.ShadingModel;if(typeof a=="object"&&(a=a.value),!Zt.has(i))return null;const r=this.parseParameters(e,t,i);let o;switch(a.toLowerCase()){case"phong":o=new Ya;break;case"lambert":o=new qh;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',a),o=new Ya;break}return o.setValues(r),o.name=s,o}parseParameters(e,t,i){const s={};e.BumpFactor&&(s.bumpScale=e.BumpFactor.value),e.Diffuse?s.color=at.colorSpaceToWorking(new ue().fromArray(e.Diffuse.value),gt):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(s.color=at.colorSpaceToWorking(new ue().fromArray(e.DiffuseColor.value),gt)),e.DisplacementFactor&&(s.displacementScale=e.DisplacementFactor.value),e.Emissive?s.emissive=at.colorSpaceToWorking(new ue().fromArray(e.Emissive.value),gt):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(s.emissive=at.colorSpaceToWorking(new ue().fromArray(e.EmissiveColor.value),gt)),e.EmissiveFactor&&(s.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),s.opacity=1-(e.TransparencyFactor?parseFloat(e.TransparencyFactor.value):0),(s.opacity===1||s.opacity===0)&&(s.opacity=e.Opacity?parseFloat(e.Opacity.value):null,s.opacity===null&&(s.opacity=1-(e.TransparentColor?parseFloat(e.TransparentColor.value[0]):0))),s.opacity<1&&(s.transparent=!0),e.ReflectionFactor&&(s.reflectivity=e.ReflectionFactor.value),e.Shininess&&(s.shininess=e.Shininess.value),e.Specular?s.specular=at.colorSpaceToWorking(new ue().fromArray(e.Specular.value),gt):e.SpecularColor&&e.SpecularColor.type==="Color"&&(s.specular=at.colorSpaceToWorking(new ue().fromArray(e.SpecularColor.value),gt));const a=this;return Zt.get(i).children.forEach(function(r){const o=r.relationship;switch(o){case"Bump":s.bumpMap=a.getTexture(t,r.ID);break;case"Maya|TEX_ao_map":s.aoMap=a.getTexture(t,r.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":s.map=a.getTexture(t,r.ID),s.map!==void 0&&(s.map.colorSpace=gt);break;case"DisplacementColor":s.displacementMap=a.getTexture(t,r.ID);break;case"EmissiveColor":s.emissiveMap=a.getTexture(t,r.ID),s.emissiveMap!==void 0&&(s.emissiveMap.colorSpace=gt);break;case"NormalMap":case"Maya|TEX_normal_map":s.normalMap=a.getTexture(t,r.ID);break;case"ReflectionColor":s.envMap=a.getTexture(t,r.ID),s.envMap!==void 0&&(s.envMap.mapping=ar,s.envMap.colorSpace=gt);break;case"SpecularColor":s.specularMap=a.getTexture(t,r.ID),s.specularMap!==void 0&&(s.specularMap.colorSpace=gt);break;case"TransparentColor":case"TransparencyFactor":s.alphaMap=a.getTexture(t,r.ID),s.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",o);break}}),s}getTexture(e,t){return"LayeredTexture"in _t.Objects&&t in _t.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),t=Zt.get(t).children[0].ID),e.get(t)}parseDeformers(){const e={},t={};if("Deformer"in _t.Objects){const i=_t.Objects.Deformer;for(const s in i){const a=i[s],r=Zt.get(parseInt(s));if(a.attrType==="Skin"){const o=this.parseSkeleton(r,i);o.ID=s,r.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),o.geometryID=r.parents[0].ID,e[s]=o}else if(a.attrType==="BlendShape"){const o={id:s};o.rawTargets=this.parseMorphTargets(r,i),o.id=s,r.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),t[s]=o}}}return{skeletons:e,morphTargets:t}}parseSkeleton(e,t){const i=[];return e.children.forEach(function(s){const a=t[s.ID];if(a.attrType!=="Cluster")return;const r={ID:s.ID,indices:[],weights:[],transformLink:new Me().fromArray(a.TransformLink.a)};"Indexes"in a&&(r.indices=a.Indexes.a,r.weights=a.Weights.a),i.push(r)}),{rawBones:i,bones:[]}}parseMorphTargets(e,t){const i=[];for(let s=0;s1?r=o:o.length>0?r=o[0]:(r=new Ya({name:on.DEFAULT_MATERIAL_NAME,color:13421772}),o.push(r)),"color"in a.attributes&&o.forEach(function(l){l.vertexColors=!0}),a.groups.length>0){let l=!1;for(let c=0,u=a.groups.length;c=o.length)&&(d.materialIndex=o.length,l=!0)}if(l){const c=new Ya;o.push(c)}}return a.FBX_Deformer?(s=new Dh(a,r),s.normalizeSkinWeights()):s=new we(a,r),s}createCurve(e,t){const i=e.children.reduce(function(a,r){return t.has(r.ID)&&(a=t.get(r.ID)),a},null),s=new Rt({name:on.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new In(i,s)}getTransformData(e,t){const i={};"InheritType"in t&&(i.inheritType=parseInt(t.InheritType.value)),"RotationOrder"in t?i.eulerOrder=Kl(t.RotationOrder.value):i.eulerOrder=Kl(0),"Lcl_Translation"in t&&(i.translation=t.Lcl_Translation.value),"PreRotation"in t&&(i.preRotation=t.PreRotation.value),"Lcl_Rotation"in t&&(i.rotation=t.Lcl_Rotation.value),"PostRotation"in t&&(i.postRotation=t.PostRotation.value),"Lcl_Scaling"in t&&(i.scale=t.Lcl_Scaling.value),"ScalingOffset"in t&&(i.scalingOffset=t.ScalingOffset.value),"ScalingPivot"in t&&(i.scalingPivot=t.ScalingPivot.value),"RotationOffset"in t&&(i.rotationOffset=t.RotationOffset.value),"RotationPivot"in t&&(i.rotationPivot=t.RotationPivot.value),e.userData.transformData=i}setLookAtProperties(e,t){"LookAtProperty"in t&&Zt.get(e.ID).children.forEach(function(s){if(s.relationship==="LookAtProperty"){const a=_t.Objects.Model[s.ID];if("Lcl_Translation"in a){const r=a.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(r),Un.add(e.target)):e.lookAt(new S().fromArray(r))}}})}bindSkeleton(e,t,i){const s=this.parsePoseNodes();for(const a in e){const r=e[a];Zt.get(parseInt(r.ID)).parents.forEach(function(l){if(t.has(l.ID)){const c=l.ID;Zt.get(c).parents.forEach(function(d){i.has(d.ID)&&i.get(d.ID).bind(new Ro(r.bones),s[d.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in _t.Objects){const t=_t.Objects.Pose;for(const i in t)if(t[i].attrType==="BindPose"&&t[i].NbPoseNodes>0){const s=t[i].PoseNode;Array.isArray(s)?s.forEach(function(a){e[a.Node]=new Me().fromArray(a.Matrix.a)}):e[s.Node]=new Me().fromArray(s.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in _t){if("AmbientColor"in _t.GlobalSettings){const e=_t.GlobalSettings.AmbientColor.value,t=e[0],i=e[1],s=e[2];if(t!==0||i!==0||s!==0){const a=new ue().setRGB(t,i,s,gt);Un.add(new dc(a,1))}}"UnitScaleFactor"in _t.GlobalSettings&&(Un.userData.unitScaleFactor=_t.GlobalSettings.UnitScaleFactor.value)}}}class OO{constructor(){this.negativeMaterialIndices=!1}parse(e){const t=new Map;if("Geometry"in _t.Objects){const i=_t.Objects.Geometry;for(const s in i){const a=Zt.get(parseInt(s)),r=this.parseGeometry(a,i[s],e);t.set(parseInt(s),r)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),t}parseGeometry(e,t,i){switch(t.attrType){case"Mesh":return this.parseMeshGeometry(e,t,i);case"NurbsCurve":return this.parseNurbsGeometry(t)}}parseMeshGeometry(e,t,i){const s=i.skeletons,a=[],r=e.parents.map(function(d){return _t.Objects.Model[d.ID]});if(r.length===0)return;const o=e.children.reduce(function(d,h){return s[h.ID]!==void 0&&(d=s[h.ID]),d},null);e.children.forEach(function(d){i.morphTargets[d.ID]!==void 0&&a.push(i.morphTargets[d.ID])});const l=r[0],c={};"RotationOrder"in l&&(c.eulerOrder=Kl(l.RotationOrder.value)),"InheritType"in l&&(c.inheritType=parseInt(l.InheritType.value)),"GeometricTranslation"in l&&(c.translation=l.GeometricTranslation.value),"GeometricRotation"in l&&(c.rotation=l.GeometricRotation.value),"GeometricScaling"in l&&(c.scale=l.GeometricScaling.value);const u=xT(c);return this.genGeometry(t,o,a,u)}genGeometry(e,t,i,s){const a=new Ge;e.attrName&&(a.name=e.attrName);const r=this.parseGeoNode(e,t),o=this.genBuffers(r),l=new Ee(o.vertex,3);if(l.applyMatrix4(s),a.setAttribute("position",l),o.colors.length>0&&a.setAttribute("color",new Ee(o.colors,3)),t&&(a.setAttribute("skinIndex",new Ch(o.weightsIndices,4)),a.setAttribute("skinWeight",new Ee(o.vertexWeights,4)),a.FBX_Deformer=t),o.normal.length>0){const c=new st().getNormalMatrix(s),u=new Ee(o.normal,3);u.applyNormalMatrix(c),a.setAttribute("normal",u)}if(o.uvs.forEach(function(c,u){const d=u===0?"uv":`uv${u}`;a.setAttribute(d,new Ee(o.uvs[u],2))}),r.material&&r.material.mappingType!=="AllSame"){let c=o.materialIndex[0],u=0;if(o.materialIndex.forEach(function(d,h){d!==c&&(a.addGroup(u,h-u,c),c=d,u=h)}),a.groups.length>0){const d=a.groups[a.groups.length-1],h=d.start+d.count;h!==o.materialIndex.length&&a.addGroup(h,o.materialIndex.length-h,c)}a.groups.length===0&&a.addGroup(0,o.materialIndex.length,o.materialIndex[0])}return this.addMorphTargets(a,e,i,s),a}parseGeoNode(e,t){const i={};if(i.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],i.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&e.LayerElementColor[0].Colors&&(i.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(i.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(i.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){i.uv=[];let s=0;for(;e.LayerElementUV[s];)e.LayerElementUV[s].UV&&i.uv.push(this.parseUVs(e.LayerElementUV[s])),s++}return i.weightTable={},t!==null&&(i.skeleton=t,t.rawBones.forEach(function(s,a){s.indices.forEach(function(r,o){i.weightTable[r]===void 0&&(i.weightTable[r]=[]),i.weightTable[r].push({id:a,weight:s.weights[o]})})})),i}genBuffers(e){const t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let i=0,s=0,a=!1,r=[],o=[],l=[],c=[],u=[],d=[];const h=this;return e.vertexIndices.forEach(function(f,p){let g,_=!1;f<0&&(f=f^-1,_=!0);let m=[],v=[];if(r.push(f*3,f*3+1,f*3+2),e.color){const y=uu(p,i,f,e.color);l.push(y[0],y[1],y[2])}if(e.skeleton){if(e.weightTable[f]!==void 0&&e.weightTable[f].forEach(function(y){v.push(y.weight),m.push(y.id)}),v.length>4){a||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),a=!0);const y=[0,0,0,0],b=[0,0,0,0];v.forEach(function(T,x){let M=T,C=m[x];b.forEach(function(w,E,R){if(M>w){R[E]=M,M=w;const D=y[E];y[E]=C,C=D}})}),m=y,v=b}for(;v.length<4;)v.push(0),m.push(0);for(let y=0;y<4;++y)u.push(v[y]),d.push(m[y])}if(e.normal){const y=uu(p,i,f,e.normal);o.push(y[0],y[1],y[2])}e.material&&e.material.mappingType!=="AllSame"&&(g=uu(p,i,f,e.material)[0],g<0&&(h.negativeMaterialIndices=!0,g=0)),e.uv&&e.uv.forEach(function(y,b){const T=uu(p,i,f,y);c[b]===void 0&&(c[b]=[]),c[b].push(T[0]),c[b].push(T[1])}),s++,_&&(h.genFace(t,e,r,g,o,l,c,u,d,s),i++,s=0,r=[],o=[],l=[],c=[],u=[],d=[])}),t}getNormalNewell(e){const t=new S(0,0,0);for(let i=0;i.5?new S(0,1,0):new S(0,0,1)).cross(t).normalize(),a=t.clone().cross(s).normalize();return{normal:t,tangent:s,bitangent:a}}flattenVertex(e,t,i){return new te(e.dot(t),e.dot(i))}genFace(e,t,i,s,a,r,o,l,c,u){let d;if(u>3){const h=[],f=t.baseVertexPositions||t.vertexPositions;for(let m=0;m1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const r=e.get(a[0].ID);i[s]={name:t[s].attrName,layer:r}}return i}addClip(e){let t=[];const i=this;return e.layer.forEach(function(s){t=t.concat(i.generateTracks(s))}),new ua(e.name,-1,t)}generateTracks(e){const t=[];let i=new S,s=new S;if(e.transform&&e.transform.decompose(i,new dt,s),i=i.toArray(),s=s.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.T.curves,i,"position");a!==void 0&&t.push(a)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const a=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);a!==void 0&&t.push(a)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.S.curves,s,"scale");a!==void 0&&t.push(a)}if(e.DeformPercent!==void 0){const a=this.generateMorphTrack(e);a!==void 0&&t.push(a)}return t}generateVectorTrack(e,t,i,s){const a=this.getTimesForAllAxes(t),r=this.getKeyframeTrackValues(a,t,i);return new Hs(e+"."+s,a,r)}generateRotationTrack(e,t,i,s,a){let r,o;if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){const h=this.interpolateRotations(t.x,t.y,t.z,a);r=h[0],o=h[1]}const l=Kl(0);i!==void 0&&(i=i.map(vt.degToRad),i.push(l),i=new an().fromArray(i),i=new dt().setFromEuler(i)),s!==void 0&&(s=s.map(vt.degToRad),s.push(l),s=new an().fromArray(s),s=new dt().setFromEuler(s).invert());const c=new dt,u=new an,d=[];if(!o||!r)return new _s(e+".quaternion",[0],[0]);for(let h=0;h2&&new dt().fromArray(d,(h-3)/3*4).dot(c)<0&&c.set(-c.x,-c.y,-c.z,-c.w),c.toArray(d,h/3*4);return new _s(e+".quaternion",r,d)}generateMorphTrack(e){const t=e.DeformPercent.curves.morph,i=t.values.map(function(a){return a/100}),s=Un.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new ca(e.modelName+".morphTargetInfluences["+s+"]",t.times,i)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(i,s){return i-s}),t.length>1){let i=1,s=t[0];for(let a=1;a=180||f[1]>=180||f[2]>=180){const g=Math.max(...f)/180,_=new an(...c,s),m=new an(...d,s),v=new dt().setFromEuler(_),y=new dt().setFromEuler(m);v.dot(y)&&y.set(-y.x,-y.y,-y.z,-y.w);const b=e.times[o-1],T=e.times[o]-b,x=new dt,M=new an;for(let C=0;C<1;C+=1/g)x.copy(v.clone().slerp(y.clone(),C)),a.push(b+C*T),M.setFromQuaternion(x,s),r.push(M.x),r.push(M.y),r.push(M.z)}else a.push(e.times[o]),r.push(vt.degToRad(e.values[o])),r.push(vt.degToRad(t.values[o])),r.push(vt.degToRad(i.values[o]))}return[a,r]}}class NO{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new bT,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const t=this,i=e.split(/[\r\n]+/);return i.forEach(function(s,a){const r=s.match(/^[\s\t]*;/),o=s.match(/^[\s\t]*$/);if(r||o)return;const l=s.match("^\\t{"+t.currentIndent+"}(\\w+):(.*){",""),c=s.match("^\\t{"+t.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),u=s.match("^\\t{"+(t.currentIndent-1)+"}}");l?t.parseNodeBegin(s,l):c?t.parseNodeProperty(s,c,i[++a]):u?t.popStack():s.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(s)}),this.allNodes}parseNodeBegin(e,t){const i=t[1].trim().replace(/^"/,"").replace(/"$/,""),s=t[2].split(",").map(function(l){return l.trim().replace(/^"/,"").replace(/"$/,"")}),a={name:i},r=this.parseNodeAttr(s),o=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(i,a):i in o?(i==="PoseNode"?o.PoseNode.push(a):o[i].id!==void 0&&(o[i]={},o[i][o[i].id]=o[i]),r.id!==""&&(o[i][r.id]=a)):typeof r.id=="number"?(o[i]={},o[i][r.id]=a):i!=="Properties70"&&(i==="PoseNode"?o[i]=[a]:o[i]=a),typeof r.id=="number"&&(a.id=r.id),r.name!==""&&(a.attrName=r.name),r.type!==""&&(a.attrType=r.type),this.pushStack(a)}parseNodeAttr(e){let t=e[0];e[0]!==""&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let i="",s="";return e.length>1&&(i=e[1].replace(/^(\w+)::/,""),s=e[2]),{id:t,name:i,type:s}}parseNodeProperty(e,t,i){let s=t[1].replace(/^"/,"").replace(/"$/,"").trim(),a=t[2].replace(/^"/,"").replace(/"$/,"").trim();s==="Content"&&a===","&&(a=i.replace(/"/g,"").replace(/,$/,"").trim());const r=this.getCurrentNode();if(r.name==="Properties70"){this.parseNodeSpecialProperty(e,s,a);return}if(s==="C"){const l=a.split(",").slice(1),c=parseInt(l[0]),u=parseInt(l[1]);let d=a.split(",").slice(3);d=d.map(function(h){return h.trim().replace(/^"/,"")}),s="connections",a=[c,u],GO(a,d),r[s]===void 0&&(r[s]=[])}s==="Node"&&(r.id=a),s in r&&Array.isArray(r[s])?r[s].push(a):s!=="a"?r[s]=a:r.a=a,this.setCurrentProp(r,s),s==="a"&&a.slice(-1)!==","&&(r.a=pp(a))}parseNodePropertyContinued(e){const t=this.getCurrentNode();t.a+=e,e.slice(-1)!==","&&(t.a=pp(t.a))}parseNodeSpecialProperty(e,t,i){const s=i.split('",').map(function(u){return u.trim().replace(/^\"/,"").replace(/\s/,"_")}),a=s[0],r=s[1],o=s[2],l=s[3];let c=s[4];switch(r){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":c=parseFloat(c);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":c=pp(c);break}this.getPrevNode()[a]={type:r,type2:o,flag:l,value:c},this.setCurrentProp(this.getPrevNode(),a)}}class UO{parse(e){const t=new J0(e);t.skip(23);const i=t.getUint32();if(i<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+i);const s=new bT;for(;!this.endOfContent(t);){const a=this.parseNode(t,i);a!==null&&s.add(a.name,a)}return s}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){const i={},s=t>=7500?e.getUint64():e.getUint32(),a=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();const r=e.getUint8(),o=e.getString(r);if(s===0)return null;const l=[];for(let h=0;h0?l[0]:"",u=l.length>1?l[1]:"",d=l.length>2?l[2]:"";for(i.singleProperty=a===1&&e.getOffset()===s;s>e.getOffset();){const h=this.parseNode(e,t);h!==null&&this.parseSubNode(o,i,h)}return i.propertyList=l,typeof c=="number"&&(i.id=c),u!==""&&(i.attrName=u),d!==""&&(i.attrType=d),o!==""&&(i.name=o),i}parseSubNode(e,t,i){if(i.singleProperty===!0){const s=i.propertyList[0];Array.isArray(s)?(t[i.name]=i,i.a=s):t[i.name]=s}else if(e==="Connections"&&i.name==="C"){const s=[];i.propertyList.forEach(function(a,r){r!==0&&s.push(a)}),t.connections===void 0&&(t.connections=[]),t.connections.push(s)}else if(i.name==="Properties70")Object.keys(i).forEach(function(a){t[a]=i[a]});else if(e==="Properties70"&&i.name==="P"){let s=i.propertyList[0],a=i.propertyList[1];const r=i.propertyList[2],o=i.propertyList[3];let l;s.indexOf("Lcl ")===0&&(s=s.replace("Lcl ","Lcl_")),a.indexOf("Lcl ")===0&&(a=a.replace("Lcl ","Lcl_")),a==="Color"||a==="ColorRGB"||a==="Vector"||a==="Vector3D"||a.indexOf("Lcl_")===0?l=[i.propertyList[4],i.propertyList[5],i.propertyList[6]]:l=i.propertyList[4],t[s]={type:a,type2:r,flag:o,value:l}}else t[i.name]===void 0?typeof i.id=="number"?(t[i.name]={},t[i.name][i.id]=i):t[i.name]=i:i.name==="PoseNode"?(Array.isArray(t[i.name])||(t[i.name]=[t[i.name]]),t[i.name].push(i)):t[i.name][i.id]===void 0&&(t[i.name][i.id]=i)}parseProperty(e){const t=e.getString(1);let i;switch(t){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return i=e.getUint32(),e.getArrayBuffer(i);case"S":return i=e.getUint32(),e.getString(i);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const s=e.getUint32(),a=e.getUint32(),r=e.getUint32();if(a===0)switch(t){case"b":case"c":return e.getBooleanArray(s);case"d":return e.getFloat64Array(s);case"f":return e.getFloat32Array(s);case"i":return e.getInt32Array(s);case"l":return e.getInt64Array(s)}const o=wO(new Uint8Array(e.getArrayBuffer(r))),l=new J0(o.buffer);switch(t){case"b":case"c":return l.getBooleanArray(s);case"d":return l.getFloat64Array(s);case"f":return l.getFloat32Array(s);case"i":return l.getInt32Array(s);case"l":return l.getInt64Array(s)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+t)}}}class J0{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t!==void 0?t:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const t=[];for(let i=0;i=0&&(i=new Uint8Array(this.dv.buffer,t,s)),this._textDecoder.decode(i)}}class bT{add(e,t){this[e]=t}}function BO(n){const e="Kaydara FBX Binary \0";return n.byteLength>=e.length&&e===wT(n,0,e.length)}function zO(n){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let t=0;function i(s){const a=n[s-1];return n=n.slice(t+s),t++,a}for(let s=0;s(console.warn(`⚠️ Could not load texture ${u}:`,d.message),null))])}this._processModelMaterials(s,a,e,i.format);const o=this._calculateModelScale(s,e,i.scale);if(s.userData.scaleInfo=o,s.userData.format=i.format,i.wheelSockets){s.userData.wheelSockets=!0,s.userData.wheelModelName=i.wheelModel;const l=this._findWheelSockets(s);s.userData.wheelSocketObjects=l,console.log(`🔌 Found ${Object.keys(l).length} wheel sockets`)}return{model:s,chassisTexture:a,wheelModel:r}}_findWheelSockets(e){const t={},i=["Wheel_BL","Wheel_BR","Wheel_FL","Wheel_FR"];console.log("🔍 Searching for wheel sockets..."),e.traverse(s=>{const a=s.name,r=a.toLowerCase();for(const o of i)(a===o||r===o.toLowerCase())&&(t[o]=s,console.log(` Found socket: "${a}" at position (${s.position.x.toFixed(2)}, ${s.position.y.toFixed(2)}, ${s.position.z.toFixed(2)})`))});for(const s of i)t[s]||console.warn(` ⚠️ Missing wheel socket: ${s}`);return Object.keys(t).length===0&&(console.warn("⚠️ No wheel sockets found! Listing all objects:"),e.traverse(s=>{console.log(` - "${s.name}" (${s.type})`)})),t}_calculateModelScale(e,t,i=null){const s=new vn().setFromObject(e),a=new S;s.getSize(a),console.log(`📐 ${t.toUpperCase()} model dimensions (raw):`),console.log(` Size: X=${a.x.toFixed(2)}, Y=${a.y.toFixed(2)}, Z=${a.z.toFixed(2)}`),console.log(` Min Y: ${s.min.y.toFixed(2)}, Max Y: ${s.max.y.toFixed(2)}`);const r=this.HITBOX_DIMENSIONS[t]||this.HITBOX_DIMENSIONS.octane;let o;if(i!==null)o=i,console.log(` Using override scale: ${o}`);else{const l=a.z,u=r.length*1/l;o=u*.55,console.log(` Target RL: ${r.length} x ${r.width} x ${r.height} uu`),console.log(` Scale to RL: ${u.toFixed(4)}, Final scale: ${o.toFixed(6)}`)}return{scale:o}}_loadFBX(e){return new Promise((t,i)=>{this.fbxLoader.load(e,s=>t(s),void 0,s=>i(new Error(`Failed to load FBX: ${e} - ${s.message}`)))})}_loadGLB(e){return new Promise((t,i)=>{this.gltfLoader.load(e,s=>{t(s.scene)},void 0,s=>i(new Error(`Failed to load GLB: ${e} - ${s.message}`)))})}async loadWheelModel(e){const t=wi(`models/wheels/${e}`,this.assetBase);if(this.wheelModelCache.has(t))return this.wheelModelCache.get(t);if(this.wheelLoadingPromises.has(t))return this.wheelLoadingPromises.get(t);const i=this._loadGLB(t);this.wheelLoadingPromises.set(t,i);try{const s=await i;return console.log(`✓ Loaded wheel model: ${e}`),s.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.wheelModelCache.set(t,s),s}catch(s){throw console.error(`Failed to load wheel model ${e}:`,s),s}finally{this.wheelLoadingPromises.delete(t)}}_loadTexture(e){return new Promise((t,i)=>{this.textureLoader.load(e,s=>{s.flipY=!1,s.colorSpace=gt,t(s)},void 0,s=>i(new Error(`Failed to load texture: ${e}`)))})}_processModelMaterials(e,t,i,s="fbx"){console.log(`📦 Processing materials for ${i} (${s}):`);const a=["body","paint"],r=[];e.traverse(o=>{o.isLight&&(r.push(o),console.log(` 🔦 Removing imported light: "${o.name||o.type}"`))}),r.forEach(o=>{o.parent&&o.parent.remove(o)}),e.traverse(o=>{o.isMesh&&(console.log(` Mesh: "${o.name}"`),(Array.isArray(o.material)?o.material:[o.material]).forEach((c,u)=>{console.log(` [${u}] Material: "${c.name}" - Color: #${c.color?.getHexString()||"none"}`);const d=(c.name||"").toLowerCase(),h=(o.name||"").toLowerCase(),f=a.some(p=>d.includes(p)||h.includes(p));if(s==="glb")(c.isMeshStandardMaterial||c.isMeshPhysicalMaterial)&&(console.log(` → GLB material (keeping as-is): metalness=${c.metalness?.toFixed(2)}, roughness=${c.roughness?.toFixed(2)}`),c.userData.originalColor=c.color?.clone(),c.userData.isBodyMaterial=f);else if(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial){let p;f?(p=new Pn({color:c.color,map:c.map,metalness:.8,roughness:.15}),console.log(" → Body material: shiny metallic")):(p=new Pn({color:c.color,map:c.map,metalness:.1,roughness:.6}),console.log(" → Non-body material: matte")),p.name=c.name,Array.isArray(o.material)?o.material[u]=p:o.material=p}}))}),t?console.log(` ✓ Chassis texture loaded for ${i}`):s==="fbx"&&console.log(` ⚠️ No chassis texture for ${i}`)}getModelTypeForCar(e,t){return e&&this.carNameToModel[e]?this.carNameToModel[e]:this.hitboxToModel[t]||"octane"}getModelTypeForHitbox(e){return this.hitboxToModel[e]||"octane"}async createCarMesh(e,t=0){const i=this.getModelTypeForHitbox(e);try{const s=await this.loadModel(i);if(!s||!s.model)return console.warn(`No cached model for ${i}`),null;const a=s.model.userData.format||"fbx";let r;a==="glb"?(r=mp(s.model),r.traverse(c=>{c.isMesh&&(Array.isArray(c.material)?c.material=c.material.map(u=>u.clone()):c.material&&(c.material=c.material.clone()))})):r=s.model.clone(),this.applyTeamColor(r,t);const o=new Mt,l=s.model.userData.scaleInfo;return l&&r.scale.setScalar(l.scale),o.add(r),r.traverse(c=>{c.isMesh&&(c.castShadow=!0)}),o.userData.modelType=i,o.userData.hitboxType=e,o.userData.team=t,o.userData.isFBXModel=a==="fbx",o.userData.isGLBModel=a==="glb",o}catch(s){return console.error(`Failed to create car mesh for ${e}:`,s),null}}applyTeamColor(e,t){const i=t===0?this.TEAM_COLORS.blue:this.TEAM_COLORS.orange,s=["body","paint"];let a=!1;console.log("🔍 Analyzing car meshes for team coloring:"),e.traverse(r=>{if(r.isMesh){const o=Array.isArray(r.material)?r.material:[r.material];console.log(` Mesh: "${r.name}" with ${o.length} material(s)`),o.forEach((l,c)=>{console.log(` [${c}] Material: "${l.name}", isBodyMaterial: ${l.userData?.isBodyMaterial}`)})}}),e.traverse(r=>{r.isMesh&&(Array.isArray(r.material)?r.material:[r.material]).forEach((l,c)=>{const u=(l.name||"").toLowerCase(),d=(r.name||"").toLowerCase(),h=l.userData?.isBodyMaterial||s.some(f=>u.includes(f)||d.includes(f));if(console.log(` Checking "${l.name}" on "${r.name}": isBody=${h}`),h){a=!0;const f=l.clone();f.color=i.clone(),f.metalness=.39,f.roughness=.47,f.userData={...l.userData},Array.isArray(r.material)?r.material[c]=f:r.material=f,console.log(`🎨 Applied team color to: "${l.name}" on mesh "${r.name}" (index ${c})`)}})}),a||console.warn("⚠️ No body material found for team coloring! Check material names.")}updateTeamColor(e,t){this.applyTeamColor(e,t)}isModelReady(e,t){const i=this.getModelTypeForCar(e,t);return this.modelCache.has(this.modelCacheKey(i))}getCarMeshSync(e,t,i=0){const s=this.getModelTypeForCar(e,t),a=this.modelCache.get(this.modelCacheKey(s));if(!a||!a.model)return null;const r=a.model.userData.format||"fbx",o=a.model.userData.wheelSockets;let l;r==="glb"?(l=mp(a.model),l.traverse(d=>{d.isMesh&&(Array.isArray(d.material)?d.material=d.material.map(h=>h.clone()):d.material&&(d.material=d.material.clone()))})):l=a.model.clone(),this.applyTeamColor(l,i);const c=new Mt,u=a.model.userData.scaleInfo;return u&&l.scale.setScalar(u.scale),c.add(l),l.traverse(d=>{d.isMesh&&(d.castShadow=!0)}),c.userData.modelType=s,c.userData.carName=e,c.userData.hitboxType=t,c.userData.team=i,c.userData.isFBXModel=r==="fbx",c.userData.isGLBModel=r==="glb",c.userData.hasWheelSockets=o,o?c.userData.wheels=this._attachWheelsToSockets(l,a.wheelModel):c.userData.wheels=this._findWheelMeshes(l),c}_attachWheelsToSockets(e,t){const i=[],s={Wheel_FL:{side:"left",position:"front"},Wheel_FR:{side:"right",position:"front"},Wheel_BL:{side:"left",position:"rear"},Wheel_BR:{side:"right",position:"rear"}};if(!t)return console.warn("⚠️ No wheel model template available for socket attachment"),i;console.log("🔧 Attaching wheels to sockets...");const a={};e.traverse(r=>{const o=r.name;s[o]&&(a[o]=r)});for(const[r,o]of Object.entries(s)){const l=a[r];if(!l){console.warn(` ⚠️ Socket not found: ${r}`);continue}const c=mp(t);c.traverse(u=>{u.isMesh&&(Array.isArray(u.material)?u.material=u.material.map(d=>d.clone()):u.material&&(u.material=u.material.clone()),u.castShadow=!0)}),c.position.set(0,0,0),c.rotation.set(0,0,0),l.add(c),console.log(` ✓ Attached wheel to ${r} (${o.position} ${o.side})`),i.push({mesh:c,steeringPivot:o.position==="front"?l:null,side:o.side,position:o.position,socket:l})}return console.log(`✓ Attached ${i.length} wheels to sockets`),i}_findWheelMeshes(e){const t=[],i={fl:{side:"left",position:"front"},fr:{side:"right",position:"front"},rl:{side:"left",position:"rear"},rr:{side:"right",position:"rear"}};console.log("🔍 Searching for wheels in model...");const s={};e.traverse(a=>{const o=a.name.toLowerCase().match(/^wheel_(fl|fr|rl|rr)_(y|z)$/);if(o){const l=o[1],c=o[2];s[l]||(s[l]={}),s[l][c]=a,console.log(` Found: "${a.name}" (${c==="y"?"wheel mesh":"steering pivot"})`)}});for(const[a,r]of Object.entries(s)){const o=i[a];if(!o)continue;const l=r.y,c=r.z;l&&(a==="fr"&&(l.rotation.z+=Math.PI,console.log(" Fixed FR wheel orientation (rotation.z += PI)")),t.push({mesh:l,steeringPivot:o.position==="front"?c:null,side:o.side,position:o.position}),console.log(`🛞 Wheel ${a.toUpperCase()}: mesh="${l.name}"${c&&o.position==="front"?`, steering="${c.name}"`:""}`))}return t.length===0?(console.warn("⚠️ No wheel meshes found. Expected: Wheel_FL_Y, Wheel_FR_Y, etc."),console.warn(" Listing all objects in model:"),e.traverse(a=>{console.log(` - "${a.name}" (${a.type})`)})):console.log(`✓ Found ${t.length} wheels`),t}dispose(){}}const jO=2,_p=new Map;function ZO(n){const e=wi("models/ball/scene.gltf",n);let t=_p.get(e);if(!t){const i=new Ag;t=new Promise(s=>{i.load(e,a=>{console.log("✓ Ball model loaded"),s(a.scene)},void 0,a=>{console.error("Failed to load ball model:",a),_p.delete(e),s(null)})}),_p.set(e,t)}return t}class JO{constructor(e,t,i={}){this.scene=e,this.effectsManager=t,this.assetBase=i.assetBase,this.actors={},this.ballActorId=null,this.ballIndicator=null,this.ballVerticalLine=null,this.playerNames=new Set,this.actorToPlayer={},this.actorLinks={},this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.carModelLoader=new YO({assetBase:this.assetBase}),this.pendingCarReplacements=new Map,this._lastGoalScanTime=null,this._firedGoalTimes=new Set,this._p0=new S,this._p1=new S,this._v0=new S,this._v1=new S,this._nextRot=new dt,this._q0=new dt,this._q1=new dt,this._qResult=new dt,this.onPlayerFound=null,this.lastBallTouchTeam=0,this.BALL_TOUCH_DISTANCE=200,this.ballTimeline=[],this.playerTimelineMap={},this.timelineIndices={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer=null,this.animationActions={},this.animationClock=new vg(!1),this.replayDuration=0,this.useAnimationSystem=!1,this.SMOOTHING_WINDOW=5,this.positionBuffers={},this.rotationBuffers={},this.interpolationEnabled=!0,this.interpolationMethod="lerp",this.smoothingWindowSize=12,this.lastFrameInfo=null,this._lowPassState=new Map,this._lowPassAlpha=.3,this._predictState=new Map,this._predictCorrectionTime=.1,this._smoothingBuffers=new Map,this._adaptiveState=new Map,this.ballModel=null,this._ballModelReplaced=!1,this.ballModelReady=ZO(this.assetBase).then(s=>(this.ballModel=s,s!==null))}async waitForBallModel(){const e=await this.ballModelReady;return e&&!this._ballModelReplaced&&this.ballActorId&&this.actors[this.ballActorId]&&(this.replaceBallWithModel(this.ballActorId),this._ballModelReplaced=!0),e}replaceBallWithModel(e){const t=this.actors[e];if(!t||!this.ballModel)return;const i=this.ballModel.clone();i.userData=t.userData,i.position.copy(t.position),i.quaternion.copy(t.quaternion),i.scale.copy(t.scale);const s=92.75;i.scale.set(s,s,s),i.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.scene.remove(t),this.scene.add(i),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),this.actors[e]=i,console.log("✓ Ball replaced with GLTF model")}reset(){Object.values(this.actors).forEach(e=>{this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.actors={},this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null),this.actorToPlayer={},this.actorLinks={},this.playerNames.clear(),this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.pendingCarReplacements.clear(),this._lastGoalScanTime=null,this._firedGoalTimes.clear(),this.ballTimeline=[],this.playerTimelineMap={},this.ballTimelineCorrected=[],this.playerTimelineMapCorrected={},this.ballTimelineFiltered=[],this.playerTimelineMapFiltered={},this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer?.stopAllAction?.(),this.animationMixer=null,this.animationActions={},this.replayDuration=0,this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear(),this._predictState.clear(),this._smoothingBuffers.clear(),this._adaptiveState.clear(),this._ballModelReplaced=!1}resetGoalExplosionPlaybackState(){this._lastGoalScanTime=null,this._firedGoalTimes.clear()}setPlayerTeams(e){this.playerTeams=e}initFromFramework(e){console.log("[ActorManager] Initializing actors from framework..."),this._createBallMesh();const t=e.playerList;t.forEach((i,s)=>{this._createCarMesh(i.name,i.team,s,i.carName,i.hitboxType);const a=this.playerNameToCarActorId[i.name];this.actors[a]}),console.log(`[ActorManager] Created ${t.length} car meshes + 1 ball`)}initInterpolants(e){console.log("[ActorManager] Initializing interpolation system..."),this.ballTimeline=e.ballTimeline||[],this.playerTimelineMap=e.playerTimelines||{},this.ballTimelineCorrected=this._correctTimeShiftedPositions(this.ballTimeline),this.playerTimelineMapCorrected={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapCorrected[s]=this._correctTimeShiftedPositions(a)}),this.ballTimelineFiltered=this._filterBadFrames(this.ballTimeline),this.playerTimelineMapFiltered={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapFiltered[s]=this._filterBadFrames(a)}),this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},Object.keys(this.playerTimelineMap).forEach(s=>{this.timelineIndices.players[s]=0,this.timelineIndicesFiltered.players[s]=0,this.timelineIndicesCorrected.players[s]=0}),this.ballTimeline.length>0&&(this.replayDuration=this.ballTimeline[this.ballTimeline.length-1].time),this.useAnimationSystem&&this._initAnimationSystem(),this.interpolantsInitialized=!0;const t=this.ballTimeline.length-this.ballTimelineFiltered.length,i=this.ballTimelineCorrected._correctedCount||0;console.log(` Ball: ${this.ballTimeline.length} keyframes (${i} corrected, ${t} filtered)`),Object.entries(this.playerTimelineMap).forEach(([s,a])=>{const r=this.playerTimelineMapCorrected[s]?._correctedCount||0;console.log(` ${s}: ${a.length} keyframes (${r} corrected)`)}),console.log(` Replay duration: ${this.replayDuration.toFixed(2)}s`),console.log("[ActorManager] Animation system ready")}_initAnimationSystem(){console.log("[ActorManager] Building Three.js animation clips..."),this.animationMixer=new QS(this.scene);const e=this.actors[this.ballActorId];if(e&&this.ballTimeline.length>0){const t=this._createAnimationClip("ball",this.ballTimeline,e);if(t){const i=this.animationMixer.clipAction(t,e);i.setLoop(Xd),i.clampWhenFinished=!0,this.animationActions.ball=i,console.log(` ✓ Ball animation: ${t.duration.toFixed(2)}s`)}}Object.entries(this.playerTimelineMap).forEach(([t,i])=>{const s=this.playerNameToCarActorId[t],a=this.actors[s];if(a&&i.length>0){const r=this._createAnimationClip(t,i,a);if(r){const o=this.animationMixer.clipAction(r,a);o.setLoop(Xd),o.clampWhenFinished=!0,this.animationActions[t]=o,console.log(` ✓ ${t} animation: ${r.duration.toFixed(2)}s`)}}}),console.log("[ActorManager] Animation clips ready")}_createAnimationClip(e,t,i){if(!t||t.length<2)return null;const s=[],a=[],r=[],o=t[0];o.time>0&&(s.push(0),o.position?a.push(o.position.x,o.position.y,o.position.z):a.push(0,0,0),o.rotation?r.push(o.rotation.x,o.rotation.y,o.rotation.z,o.rotation.w):r.push(0,0,0,1));for(const h of t){if(s.push(h.time),h.position)a.push(h.position.x,h.position.y,h.position.z);else{const f=a.length-3;f>=0?a.push(a[f],a[f+1],a[f+2]):a.push(0,0,0)}if(h.rotation)r.push(h.rotation.x,h.rotation.y,h.rotation.z,h.rotation.w);else{const f=r.length-4;f>=0?r.push(r[f],r[f+1],r[f+2],r[f+3]):r.push(0,0,0,1)}}const l=new Hs(".position",s,a,rr),c=new _s(".quaternion",s,r),u=s[s.length-1]-s[0];return new ua(e,u,[l,c])}startAnimations(){this.animationMixer&&(Object.values(this.animationActions).forEach(e=>{e.reset(),e.play()}),this.animationClock.start(),console.log("[ActorManager] Animations started"))}pauseAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!0})}resumeAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!1})}seekAnimations(e){this.animationMixer&&(Object.values(this.animationActions).forEach(t=>{t.time=e}),this.animationMixer.setTime(e))}updateAnimations(e){!this.animationMixer||!this.useAnimationSystem||this.animationMixer.update(e)}_subsampleTimeline(e){return!e||e.length<4?e:e.filter((t,i)=>i%2===0)}_getOrCreateSmoothingBuffer(e){return this.positionBuffers[e]||(this.positionBuffers[e]=[],this.rotationBuffers[e]=[]),{positions:this.positionBuffers[e],rotations:this.rotationBuffers[e]}}_smoothPosition(e,t){const i=this._getOrCreateSmoothingBuffer(e).positions;for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_smoothRotation(e,t){const i=this._getOrCreateSmoothingBuffer(e).rotations;for(i.push({x:t.x,y:t.y,z:t.z,w:t.w});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length<3)return t;const s=Math.floor(i.length/2);return i[s]}resetSmoothingBuffers(){this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear()}_findKeyframeIndex(e,t,i=0){if(!e||e.length===0)return-1;if(t<=e[0].time)return 0;if(t>=e[e.length-1].time)return e.length-2;let s=Math.max(0,Math.min(i,e.length-2));if(e[s].time<=t&&e[s+1].time>t)return s;if(s+2t)return s+1;let a=0,r=e.length-2;for(;a<=r;){const o=Math.floor((a+r)/2);if(e[o].time<=t&&e[o+1].time>t)return o;e[o].time>t?r=o-1:a=o+1}return Math.max(0,Math.min(a,e.length-2))}_applySmoothing(e,t){this._smoothingBuffers.has(e)||this._smoothingBuffers.set(e,[]);const i=this._smoothingBuffers.get(e);for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.smoothingWindowSize;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_applyEmaSmoothing(e,t){const i=`ema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{x:t.x,y:t.y,z:t.z}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.05,Math.min(.5,1/this.smoothingWindowSize)),r={x:a*t.x+(1-a)*s.x,y:a*t.y+(1-a)*s.y,z:a*t.z+(1-a)*s.z};return this._smoothingBuffers.set(i,r),r}_applyDoubleEmaSmoothing(e,t){const i=`dema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{level:{x:t.x,y:t.y,z:t.z},trend:{x:0,y:0,z:0}}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.1,Math.min(.6,2/this.smoothingWindowSize)),r=a*.5,o={x:a*t.x+(1-a)*(s.level.x+s.trend.x),y:a*t.y+(1-a)*(s.level.y+s.trend.y),z:a*t.z+(1-a)*(s.level.z+s.trend.z)},l={x:r*(o.x-s.level.x)+(1-r)*s.trend.x,y:r*(o.y-s.level.y)+(1-r)*s.trend.y,z:r*(o.z-s.level.z)+(1-r)*s.trend.z};return s.level=o,s.trend=l,{x:o.x+l.x,y:o.y+l.y,z:o.z+l.z}}_applyWeightedSmoothing(e,t){const i=`wma-${e}`;this._smoothingBuffers.has(i)||this._smoothingBuffers.set(i,[]);const s=this._smoothingBuffers.get(i);for(s.push({x:t.x,y:t.y,z:t.z});s.length>this.smoothingWindowSize;)s.shift();if(s.length===1)return t;let a=0,r=0,o=0,l=0;for(let c=0;cthis.smoothingWindowSize;)s.shift();if(s.length===1)return t;const a=s.length/3;let r=0,o=0,l=0,c=0;for(let u=0;u.001&&(s.derivedVel={x:(t.x-s.lastPos.x)/a,y:(t.y-s.lastPos.y)/a,z:(t.z-s.lastPos.z)/a});const r=Math.sqrt(s.derivedVel.x**2+s.derivedVel.y**2+s.derivedVel.z**2),o=2,l=this.smoothingWindowSize,c=300,u=1500;let d;if(ru)d=o;else{const _=(r-c)/(u-c);d=Math.round(l-_*(l-o))}if(s.buffer.length>=2){const _=s.buffer[s.buffer.length-1],m=s.buffer[s.buffer.length-2],v={x:_.x-m.x,y:_.y-m.y,z:_.z-m.z},y={x:t.x-_.x,y:t.y-_.y,z:t.z-_.z},b=Math.sqrt(v.x**2+v.y**2+v.z**2),T=Math.sqrt(y.x**2+y.y**2+y.z**2);if(b>.1&&T>.1&&(v.x*y.x+v.y*y.y+v.z*y.z)/(b*T)<.5)for(;s.buffer.length>Math.max(2,d/2);)s.buffer.shift()}for(s.buffer.push({x:t.x,y:t.y,z:t.z});s.buffer.length>d;)s.buffer.shift();if(s.lastPos={x:t.x,y:t.y,z:t.z},s.lastTime=i,s.buffer.length===1)return t;let h=0,f=0,p=0,g=0;for(let _=0;_u+10&&(h.z=t.position.z+t.velocity.z*r-.5*c*r*r,h.zu+10&&(p.z=t.position.z+t.velocity.z*o-.5*c*o*o,p.z0&&o>0){const b=d*o;m>b*2&&(v=b*2/m)}const y=_*v+(1-v)*l;return{x:h.x+g.x*y,y:h.y+g.y*y,z:h.z+g.z*y}}_physicsTickInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=a/s;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=(e.velocity.x+t.velocity.x)/2,l=(e.velocity.y+t.velocity.y)/2,c=(e.velocity.z+t.velocity.z)/2,u=e.position.x+o*a,d=e.position.y+l*a,h=e.position.z+c*a,f=e.position.x+o*s,p=e.position.y+l*s,g=e.position.z+c*s,_=t.position.x-f,m=t.position.y-p,v=t.position.z-g;return{x:u+_*r,y:d+m*r,z:h+v*r}}_velocityOnlyInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=s/a;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=e.velocity.x+(t.velocity.x-e.velocity.x)*r/2,l=e.velocity.y+(t.velocity.y-e.velocity.y)*r/2,c=e.velocity.z+(t.velocity.z-e.velocity.z)*r/2;return{x:e.position.x+o*s,y:e.position.y+l*s,z:e.position.z+c*s}}_smartHybridInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=Math.sqrt(e.velocity.x**2+e.velocity.y**2+e.velocity.z**2),l=Math.sqrt(t.velocity.x**2+t.velocity.y**2+t.velocity.z**2);let c=1;o>10&&l>10&&(c=(e.velocity.x*t.velocity.x+e.velocity.y*t.velocity.y+e.velocity.z*t.velocity.z)/(o*l));const u=o>10?Math.abs(l-o)/o:0;if(c<.95||u>.1){const h=r*r*(3-2*r);return{x:e.position.x+(t.position.x-e.position.x)*h,y:e.position.y+(t.position.y-e.position.y)*h,z:e.position.z+(t.position.z-e.position.z)*h}}else{const h=(e.velocity.x+t.velocity.x)/2,f=(e.velocity.y+t.velocity.y)/2,p=(e.velocity.z+t.velocity.z)/2,g=e.position.x+h*s,_=e.position.y+f*s,m=e.position.z+p*s,v=e.position.x+h*a,y=e.position.y+f*a,b=e.position.z+p*a,T=t.position.x-v,x=t.position.y-y,M=t.position.z-b;return{x:g+T*r,y:_+x*r,z:m+M*r}}}_isBadFrame(e,t){if(!e.velocity||!t.velocity||!e.position||!t.position)return!1;const i=t.time-e.time;if(i<.001)return!1;const s=(e.velocity.x+t.velocity.x)/2,a=(e.velocity.y+t.velocity.y)/2,r=(e.velocity.z+t.velocity.z)/2,o=Math.sqrt(s**2+a**2+r**2);if(o<200)return!1;const l=t.position.x-e.position.x,c=t.position.y-e.position.y,u=t.position.z-e.position.z,d=Math.sqrt(l*l+c*c+u*u),h=o*i,f=d/h;return f<.6||f>1.4}_filterBadFrames(e){if(!e||e.length<2)return e;const t=[e[0]];for(let i=1;i0&&a.position&&a.velocity){const o=e[s-1];if(o.position&&o.velocity){const l=a.time-o.time;if(l>.001){const c=(o.velocity.x+a.velocity.x)/2,u=(o.velocity.y+a.velocity.y)/2,d=(o.velocity.z+a.velocity.z)/2,h=Math.sqrt(c**2+u**2+d**2);if(h>100){const f=a.position.x-o.position.x,p=a.position.y-o.position.y,g=a.position.z-o.position.z,_=Math.sqrt(f*f+p*p+g*g),m=h*l,v=_/m;let y=0;v>.15&&v<.35?y=l*.75:v>.4&&v<.6?y=l*.5:v>.65&&v<.85&&(y=l*.25),y>0&&(r.position.x+=a.velocity.x*y,r.position.y+=a.velocity.y*y,r.position.z+=a.velocity.z*y,i++)}}}}t.push(r)}return t._correctedCount=i,t}_timeShiftedInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r}}_velocityAnchoredInterpolate(e,t,i,s,a,r){if(!t.velocity||!i.velocity){const m=(s-t.time)/(i.time-t.time);return{x:t.position.x+(i.position.x-t.position.x)*m,y:t.position.y+(i.position.y-t.position.y)*m,z:t.position.z+(i.position.z-t.position.z)*m}}this._velocityAnchorState||(this._velocityAnchorState=new Map);let o=this._velocityAnchorState.get(e);(!o||Math.abs(s-o.lastTime)>.5||r%10===0)&&(o={anchorPos:{...t.position},anchorTime:t.time,anchorIdx:r,lastTime:s},this._velocityAnchorState.set(e,o)),s-o.anchorTime;let u=o.anchorPos.x,d=o.anchorPos.y,h=o.anchorPos.z;const f=(t.velocity.x+i.velocity.x)/2,p=(t.velocity.y+i.velocity.y)/2,g=(t.velocity.z+i.velocity.z)/2,_=s-t.time;return o.anchorIdx===r?(u=o.anchorPos.x+f*_,d=o.anchorPos.y+p*_,h=o.anchorPos.z+g*_):(u=t.position.x+f*_,d=t.position.y+p*_,h=t.position.z+g*_),o.lastTime=s,{x:u,y:d,z:h}}_hermiteInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=Math.max(0,Math.min(1,a/s)),o={x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};if(!e.velocity||!t.velocity)return o;const l=r*r,c=l*r,u=2*c-3*l+1,d=c-2*l+r,h=-2*c+3*l,f=c-l,p={x:e.velocity.x*s,y:e.velocity.y*s,z:e.velocity.z*s},g={x:t.velocity.x*s,y:t.velocity.y*s,z:t.velocity.z*s},_={x:u*e.position.x+d*p.x+h*t.position.x+f*g.x,y:u*e.position.y+d*p.y+h*t.position.y+f*g.y,z:u*e.position.z+d*p.z+h*t.position.z+f*g.z},m=_.x-o.x,v=_.y-o.y,y=_.z-o.z,b=t.position.x-e.position.x,T=t.position.y-e.position.y,x=t.position.z-e.position.z;return m*m+v*v+y*y>b*b+T*T+x*x?o:_}_physicsSimInterpolate(e,t,i,s=!1){const a=t.time-e.time,r=i-e.time,o=Math.max(0,Math.min(1,r/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*o,y:e.position.y+(t.position.y-e.position.y)*o,z:e.position.z+(t.position.z-e.position.z)*o};const l=-650,c=o*o,u=c*o,d=2*u-3*c+1,h=u-2*c+o,f=-2*u+3*c,p=u-c;let g=e.velocity.y*a,_=t.velocity.y*a;if(s){const m=.5*l*a*a;g+=m*.5,_+=m*.5}return{x:d*e.position.x+h*(e.velocity.x*a)+f*t.position.x+p*(t.velocity.x*a),y:d*e.position.y+h*g+f*t.position.y+p*_,z:d*e.position.z+h*(e.velocity.z*a)+f*t.position.z+p*(t.velocity.z*a)}}getBallPositionAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return s.sleeping?null:{...s.position};if(s.sleeping)return{...s.position};const d=(e-s.time)/r;let h;switch(this.interpolationMethod){case"catmull-rom":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"lerp-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applySmoothing("ball",h);break}case"lerp-ema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyEmaSmoothing("ball",h);break}case"lerp-dema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyDoubleEmaSmoothing("ball",h);break}case"lerp-wma":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyWeightedSmoothing("ball",h);break}case"lerp-gauss":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyGaussianSmoothing("ball",h);break}case"one-euro":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyOneEuroFilter("ball",h);break}case"predict-correct":{h=this._predictCorrectInterpolate("ball",s,a,e);break}case"velocity-smooth":{h=this._velocitySmoothInterpolate("ball",s,a,e,!0);break}case"physics-tick":{h=this._physicsTickInterpolate(s,a,e);break}case"hermite":{h=this._hermiteInterpolate(s,a,e);break}case"physics-sim":{const f=this.ballTimelineCorrected;if(f&&f.length>=2){const p=this._findKeyframeIndex(f,e,this.timelineIndicesCorrected.ball);this.timelineIndicesCorrected.ball=p;const g=f[p],_=f[p+1];if(g?.position&&_?.position){h=this._physicsSimInterpolate(g,_,e,!0);break}}h=this._physicsSimInterpolate(s,a,e,!0);break}case"velocity-only":{h=this._velocityOnlyInterpolate(s,a,e);break}case"smart-hybrid":{h=this._smartHybridInterpolate(s,a,e);break}case"time-shifted":{const f=this.ballTimelineFiltered;if(!f||f.length<2){h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}const p=this._findKeyframeIndex(f,e,this.timelineIndicesFiltered.ball);this.timelineIndicesFiltered.ball=p;const g=f[p],_=f[p+1];if(!g?.position||!_?.position){h=g?.position?{...g.position}:{...s.position};break}const m=_.time-g.time,v=m>0?Math.max(0,Math.min(1,(e-g.time)/m)):0;h={x:g.position.x+(_.position.x-g.position.x)*v,y:g.position.y+(_.position.y-g.position.y)*v,z:g.position.z+(_.position.z-g.position.z)*v};break}case"position-lerp":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-catmull":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyLowPassFilter("ball",h);break}case"adaptive-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyAdaptiveSmoothing("ball",h,e);break}default:{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}}return h}getBallRotationAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return{...s.rotation}}if(s.sleeping)return{...s.rotation};const o=(e-s.time)/r;return this._q0.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w),this._q1.set(a.rotation.x,a.rotation.y,a.rotation.z,a.rotation.w),this._qResult.slerpQuaternions(this._q0,this._q1,o),{x:this._qResult.x,y:this._qResult.y,z:this._qResult.z,w:this._qResult.w}}getPlayerPositionAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const h=this._findKeyframeIndex(d,t,this.timelineIndicesCorrected.players[e]||0);this.timelineIndicesCorrected.players[e]=h;const f=d[h],p=d[h+1];if(f?.position&&p?.position){u=this._physicsSimInterpolate(f,p,t,!1);break}}u=this._physicsSimInterpolate(r,o,t,!1);break}case"velocity-only":{u=this._velocityOnlyInterpolate(r,o,t);break}case"smart-hybrid":{u=this._smartHybridInterpolate(r,o,t);break}case"time-shifted":{const d=this.playerTimelineMapFiltered[e];if(!d||d.length<2){u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}const h=this._findKeyframeIndex(d,t,this.timelineIndicesFiltered.players[e]||0);this.timelineIndicesFiltered.players[e]=h;const f=d[h],p=d[h+1];if(!f?.position||!p?.position){u=f?.position?{...f.position}:{...r.position};break}const g=p.time-f.time,_=g>0?Math.max(0,Math.min(1,(t-f.time)/g)):0;u={x:f.position.x+(p.position.x-f.position.x)*_,y:f.position.y+(p.position.y-f.position.y)*_,z:f.position.z+(p.position.z-f.position.z)*_};break}case"position-lerp":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-catmull":{const d=i[Math.max(0,a-1)],h=i[Math.min(i.length-1,a+2)];d?.position&&h?.position?u=this._catmullRomInterpolate(d.position,r.position,o.position,h.position,c):u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyLowPassFilter(`player-${e}`,u);break}case"adaptive-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyAdaptiveSmoothing(`player-${e}`,u,t);break}default:{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}}return u}getPlayerRotationAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const r=this.getBallPositionAt(t),o=this.getBallRotationAt(t);r?i.position.set(r.x,r.y,r.z):a=!1,o&&i.quaternion.set(o.x,o.y,o.z,o.w)}else i.position.set(s.position.x,s.position.y,s.position.z),i.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);if(i.userData.location.copy(i.position),i.userData.rotation.copy(i.quaternion),i.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),s.angularVelocity&&i.userData.angularVelocity.set(s.angularVelocity.x,s.angularVelocity.y,s.angularVelocity.z),i.userData.sleeping=s.sleeping,i.visible=a&&s.visible!==!1&&!i.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(i.position.x,2,i.position.z),this.ballIndicator.visible=i.visible),this.ballVerticalLine){const o=new Float32Array([i.position.x,2,i.position.z,i.position.x,i.position.y,i.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new rt(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=i.visible}if(i.userData.velocity&&i.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=i.position.distanceTo(c.position);u{const a=this.playerNameToCarActorId[s.name];if(!a)return;const r=this.actors[a];if(!r)return;const o=s.name;if(!this.useAnimationSystem||!this.animationMixer)if(this.interpolantsInitialized&&this.playerTimelineMap[o]){const c=this.getPlayerPositionAt(o,t),u=this.getPlayerRotationAt(o,t);c&&r.position.set(c.x,c.y,c.z),u&&r.quaternion.set(u.x,u.y,u.z,u.w)}else r.position.set(s.position.x,s.position.y,s.position.z),r.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);r.userData.location.copy(r.position),r.userData.rotation.copy(r.quaternion),r.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),r.userData.sleeping=s.sleeping,r.userData.steer=s.steer||0;const l=r.position.length()>.1;r.visible=s.isVisible&&l&&!r.userData.sleeping}),this._updateGoalExplosions(t)}_updateGoalExplosions(e){const t=this.effectsManager,i=t&&t.explosions?t.explosions.goalEvents:null;if(!(i instanceof Map)||i.size===0)return;const s=this._lastGoalScanTime;s!==null&&e=c&&e<=c+jO&&(r=!0,o=!0),s!==null&&s=c&&!this._firedGoalTimes.has(c)){this._firedGoalTimes.add(c);const d=this.getBallPositionAt(c)||a&&a.position||null;d&&this.effectsManager.triggerGoalExplosion(d,l.team)}}a&&(a.userData.isHiddenByGoal=r,r&&(a.visible=!1)),o||this.effectsManager.clearGoalExplosions?.(),this._lastGoalScanTime=e}processFrame(e,t,i,s){if(e){if(e.new_actors&&e.new_actors.forEach(a=>{if(!this.actors[a.actor_id]){const r=t(a.object_id),o=r&&r.includes("Ball"),l=r&&r.includes("Car");if(o||l){let c;o?c=new yn(92.75,16,16):c=new Ei(118,36,84);const u=new Pn({color:o?16777215:Math.random()*16777215}),d=new we(c,u);if(d.userData={location:new S,rotation:new dt,isCar:l,isBall:o,playerId:null,lastUpdateTime:e.time,bodyId:null,hasReceivedUpdate:!1},this.scene.add(d),this.actors[a.actor_id]=d,o){this.ballActorId=a.actor_id,this.ballModel&&this.replaceBallWithModel(a.actor_id);const h=92.75,f=new ni(h*.95,h,32),p=new Ye({color:16777215,side:ct});this.ballIndicator=new we(f,p),this.ballIndicator.rotation.x=-Math.PI/2,this.ballIndicator.visible=!1,this.scene.add(this.ballIndicator);const g=new Ge().setFromPoints([new S(0,0,0),new S(0,1,0)]),_=new Rt({color:16777215,opacity:.5,transparent:!0});this.ballVerticalLine=new In(g,_),this.ballVerticalLine.frustumCulled=!1,this.ballVerticalLine.visible=!1,this.scene.add(this.ballVerticalLine)}else l&&this.effectsManager.createBoostTrail(d,a.actor_id)}}}),e.deleted_actors&&e.deleted_actors.forEach(a=>{if(this.actors[a]){const r=this.actors[a];r.userData.isCar&&this.effectsManager.removeBoostTrail(a),this.scene.remove(r),r.geometry&&r.geometry.dispose(),r.material&&r.material.dispose(),delete this.actors[a],this.ballActorId===a&&(this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null))}}),e.updated_actors&&e.updated_actors.forEach(a=>{const r=this.actors[a.actor_id];a.attribute.TeamLoadout&&(this.actorLoadouts[a.actor_id]=a.attribute.TeamLoadout,r&&r.userData.isCar&&(r.userData.teamLoadout=a.attribute.TeamLoadout,this.resolveBodyId(r,a.actor_id)));const o=t(a.object_id),l=o&&(o.includes("PRI_TA")||o.includes("PlayerReplicationInfo"));if(a.attribute.String&&this.playerNames.has(a.attribute.String)){const c=a.attribute.String;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.Reservation&&this.playerNames.has(a.attribute.Reservation.name)){const c=a.attribute.Reservation.name;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.ActiveActor){const c=a.attribute.ActiveActor.actor;this.actorLinks[a.actor_id]||(this.actorLinks[a.actor_id]=new Set),this.actorLinks[a.actor_id].add(c),r&&r.userData.isCar&&this.checkCarPlayerLink(c,a.actor_id)}if(r&&a.attribute&&a.attribute.RigidBody){const c=a.attribute.RigidBody;if(c.location&&(r.userData.location.set(c.location.x,c.location.z,c.location.y),r.userData.lastUpdateTime=e.time,r.userData.hasReceivedUpdate=!0),c.linear_velocity&&(r.userData.velocity||(r.userData.velocity=new S),r.userData.velocity.set(c.linear_velocity.x,c.linear_velocity.z,c.linear_velocity.y)),c.rotation&&r.userData.rotation.set(c.rotation.x,c.rotation.z,c.rotation.y,-c.rotation.w),c.angular_velocity&&(r.userData.angularVelocity||(r.userData.angularVelocity=new S),r.userData.angularVelocity.set(c.angular_velocity.x,c.angular_velocity.z,c.angular_velocity.y)),c.sleeping!==void 0&&(r.userData.sleeping=c.sleeping,c.sleeping&&(r.userData.velocity&&r.userData.velocity.set(0,0,0),r.userData.angularVelocity&&r.userData.angularVelocity.set(0,0,0))),r.userData.isBall&&r.userData.isHiddenByGoal&&c.location){const u=c.location.x,d=c.location.y,h=c.location.z;Math.sqrt(u*u+d*d+h*h)<500&&(r.userData.isHiddenByGoal=!1)}}}),this.effectsManager.explosions.goalEvents.has(i)){const a=this.effectsManager.explosions.goalEvents.get(i),r=this.actors[this.ballActorId];r&&(s||(this.effectsManager.triggerGoalExplosion(r.position,a.team),console.log(`🎯 GOAL! Explosion at frame ${i} for team ${a.team} by ${a.playerName}`)),r.userData.isHiddenByGoal=!0)}if(this.effectsManager.explosions.demoEvents.has(i)){const a=this.effectsManager.explosions.demoEvents.get(i),r=this.actors[a.victimActorId];if(r){if(!s){const o=r.userData.playerId,l=o&&this.playerTeams&&this.playerTeams[o]||0;this.effectsManager.triggerDemoExplosion(r.position,l),console.log(`💥 DEMO! Explosion at frame ${i} for actor ${a.victimActorId}`)}r.userData.sleeping=!0}}}}resolveBodyId(e,t){if(!e||!e.userData.isCar||!e.userData.teamLoadout)return;let i=0;e.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,e.userData.playerId)&&(i=this.playerTeams[e.userData.playerId]);const s=e.userData.teamLoadout,a=i===1?s.orange?.body:s.blue?.body;a&&e.userData.bodyId!==a&&(e.userData.bodyId=a,this.updateCarHitbox(e,a,t))}updateCarHitbox(e,t,i){const s=bw(t),a=s?.name||"Octane",r=s?.hitboxType||"Octane";this.replaceCarWithModel(i,e,a,r)}async replaceCarWithModel(e,t,i,s){if(this.carModelLoader.isModelReady(i,s))this._doCarReplacement(e,t,i,s);else{this.pendingCarReplacements.set(e,{oldMesh:t,carName:i,hitboxType:s});try{const a=this.carModelLoader.getModelTypeForCar(i,s);await this.carModelLoader.loadModel(a);const r=this.pendingCarReplacements.get(e);r&&this.actors[e]===r.oldMesh&&this._doCarReplacement(e,r.oldMesh,r.carName,r.hitboxType),this.pendingCarReplacements.delete(e)}catch(a){console.warn(`Failed to load model for ${i} (${s}):`,a),this.pendingCarReplacements.delete(e),t&&(t.visible=!0)}}}_doCarReplacement(e,t,i,s){let a=0;t.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,t.userData.playerId)?a=this.playerTeams[t.userData.playerId]:t.userData.team!==void 0&&(a=t.userData.team);const r=this.carModelLoader.getCarMeshSync(i,s,a);if(!r){console.warn(`Could not get car mesh for ${i} (${s})`);return}const o=r.userData.wheels;r.userData={...t.userData},r.userData.isFBXModel=!0,r.userData.carName=i,r.userData.hitboxType=s,r.userData.wheels=o,r.position.copy(t.position),r.quaternion.copy(t.quaternion),this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material.forEach(c=>c.dispose()):t.material.dispose()),this.scene.add(r),this.actors[e]=r,this.effectsManager.removeBoostTrail(e),this.effectsManager.createBoostTrail(r,e);const l=this.carModelLoader.getModelTypeForCar(i,s);console.log(`🚗 Replaced car ${e} with ${l.toUpperCase()} model (${i}, ${s} hitbox, team ${a===0?"blue":"orange"})`)}checkCarPlayerLink(e,t){const i=this.actorToPlayer[e],s=this.actorLoadouts[e];if(!(!i&&!s))if(t){const a=this.actors[t];a&&a.userData.isCar&&(this.onPlayerFound&&this.onPlayerFound(i),a.userData.playerId=i,this.playerNameToCarActorId[i]=t,s&&(a.userData.teamLoadout=s),this.resolveBodyId(a,t))}else this.actorLinks[e]&&this.actorLinks[e].forEach(a=>{this.checkCarPlayerLink(e,a)})}updateInterpolation(e,t,i){const s=t[i];if(s&&Object.keys(this.actors).forEach(a=>{const r=this.actors[a],o=r.userData.location,l=r.userData.rotation;if(!o||!l||!r.userData.hasReceivedUpdate)return;let c=null,u=0;for(let d=i+1;dp.actor_id==a&&p.attribute&&p.attribute.RigidBody);if(f){c=f,u=h.time;break}}}if(c){const d=r.userData.lastUpdateTime||s.time,h=u;if(h>d){const f=(e-d)/(h-d),p=Math.max(0,Math.min(1,f)),g=h-d||.033,_=c.attribute.RigidBody;if(_.location)if(this._p0.copy(o),this._p1.set(_.location.x,_.location.z,_.location.y),r.userData.sleeping)r.position.copy(o);else{const m=c.attribute.RigidBody;if(r.userData.velocity&&m.linear_velocity){const v=p,y=v*v,b=y*v;if(g>.5)r.position.lerpVectors(o,this._p1,p);else{this._v0.copy(r.userData.velocity).multiplyScalar(g),this._v1.set(m.linear_velocity.x,m.linear_velocity.z,m.linear_velocity.y).multiplyScalar(g);const T=2*b-3*y+1,x=b-2*y+v,M=-2*b+3*y,C=b-y;r.position.set(T*this._p0.x+x*this._v0.x+M*this._p1.x+C*this._v1.x,T*this._p0.y+x*this._v0.y+M*this._p1.y+C*this._v1.y,T*this._p0.z+x*this._v0.z+M*this._p1.z+C*this._v1.z)}}else r.position.lerpVectors(o,this._p1,p)}else r.position.copy(o);_.rotation?(this._nextRot.set(_.rotation.x,_.rotation.z,_.rotation.y,-_.rotation.w),r.quaternion.slerpQuaternions(l,this._nextRot,p)):r.quaternion.copy(l);return}}r.position.copy(o),r.quaternion.copy(l)}),Object.keys(this.actors).forEach(a=>{const r=this.actors[a];if(r&&r.userData.isCar){const l=r.position.length()>.1,c=r.userData.sleeping===!0;r.visible=l&&!c}}),this.ballActorId&&this.actors[this.ballActorId]){const a=this.actors[this.ballActorId];if(a.visible=!a.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(a.position.x,2,a.position.z),this.ballIndicator.visible=a.visible),this.ballVerticalLine){const o=new Float32Array([a.position.x,2,a.position.z,a.position.x,a.position.y,a.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new rt(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=a.visible}if(a.userData.velocity&&a.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=a.position.distanceTo(c.position);if(u{const s=this.actors[i];if(!s||!s.userData.isCar||!s.userData.isFBXModel&&!s.userData.hasWheelSockets||!s.userData.wheels||s.userData.wheels.length===0)return;const a=s.position;let r=this._previousCarPositions.get(i);r||(r=a.clone(),this._previousCarPositions.set(i,r));const l=new S().subVectors(a,r).length();if(this._previousCarPositions.set(i,a.clone()),l<.01)return;const d=Math.min(l/e,.5)*1;let h=0;s.userData.steer!==void 0&&(h=-s.userData.steer*t),s.userData.wheels.forEach(f=>{if(f.socket){const p=f.side==="left"?1:-1;if(f.mesh.rotateZ(p*d),f.position==="front"&&f.steeringPivot){const g=f.side==="left"?-1:1;f.steeringPivot.rotation.y=g*h}}else{const p=f.side==="left"?-1:1;f.mesh.rotateY(p*d),f.position==="front"&&f.steeringPivot&&(f.steeringPivot.rotation.z=h)}})})}resetWheelTracking(){this._previousCarPositions&&this._previousCarPositions.clear()}updateSupersonicState(e,t,i){const s=this.playerNameToCarActorId[e];if(!s)return;const a=this.actors[s];if(!a||!a.userData.isCar)return;const r=a.userData.velocity||new S(0,0,0);this.effectsManager.updateSupersonicTrail(s,t,a.position,a.quaternion,r,i)}setInterpolationEnabled(e){this.interpolationEnabled=e,console.log(`[ActorManager] Interpolation ${e?"enabled":"disabled"}`)}setInterpolationMethod(e){if(!["lerp","hermite","catmull-rom","predict-correct","velocity-smooth","physics-tick","velocity-only","smart-hybrid","time-shifted","lerp-smooth","lerp-ema","lerp-dema","lerp-wma","lerp-gauss","one-euro","position-lerp","position-catmull","position-smooth","adaptive-smooth"].includes(e)){console.warn(`[ActorManager] Invalid interpolation method: ${e}`);return}this.interpolationMethod=e,this._smoothingBuffers.clear(),this._lowPassState.clear(),this._adaptiveState.clear(),this.resetSmoothingBuffers(),console.log(`[ActorManager] Interpolation method set to: ${e}`)}setSmoothingWindowSize(e){this.smoothingWindowSize=Math.max(1,Math.min(20,e)),this._smoothingBuffers.clear(),console.log(`[ActorManager] Smoothing window size set to: ${this.smoothingWindowSize}`)}getInterpolationSettings(){return{enabled:this.interpolationEnabled,method:this.interpolationMethod,smoothingWindowSize:this.smoothingWindowSize}}clearSmoothingBuffers(){this._smoothingBuffers.clear()}getFrameInfo(){return this.lastFrameInfo}createBallMeshForLive(){const e=new yn(92.75,16,16),t=new Pn({color:16777215}),i=new we(e,t);if(i.castShadow=!0,i.receiveShadow=!0,i.userData={location:new S,rotation:new dt,velocity:new S,angularVelocity:new S,isCar:!1,isBall:!0,playerId:null,sleeping:!1,isHiddenByGoal:!1},this.scene.add(i),this.ballModel){const s=this.ballModel.clone();s.position.copy(i.position),s.quaternion.copy(i.quaternion),s.userData={...i.userData};const a=92.75;return s.scale.set(a,a,a),s.traverse(r=>{r.isMesh&&(r.castShadow=!0,r.receiveShadow=!0)}),this.scene.remove(i),this.scene.add(s),i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose(),console.log("✓ Live ball created with GLTF model"),s}return i}createCarMeshForLive(e,t,i,s=null){const a=`live_car_${t}`,r=new Ei(118,36,84),o=e===0?3381759:16737792,l=new Pn({color:o}),c=new we(r,l);return c.castShadow=!0,c.receiveShadow=!0,c.visible=!1,c.userData={location:new S,rotation:new dt,velocity:new S,angularVelocity:new S,isCar:!0,isBall:!1,playerId:i,team:e,sleeping:!1,steer:0,bodyId:s,liveActorId:a},this.scene.add(c),this.actors[a]=c,this.playerNameToCarActorId[i]=a,this.effectsManager.createBoostTrail(c,a),s&&s>0?this.updateCarHitbox(c,s,a):this.replaceCarWithModel(a,c,"Octane","Octane"),console.log(`[ActorManager] Created live car for ${i} (team ${e===0?"blue":"orange"}, bodyId: ${s})`),c}updateBoostParticlesLive(e,t,i,s){const a=t&&i>0,r=s.userData.velocity||new S(0,0,0);this.effectsManager.updateBoostTrail(e,a,s.position,s.quaternion,r)}updateSupersonicTrailLive(e,t,i,s){const a=s.userData.velocity||new S(0,0,0);this.effectsManager.updateSupersonicTrail(e,t,s.position,s.quaternion,a,i)}removeLiveCar(e){const t=this.actors[e];t&&(this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),delete this.actors[e],this.effectsManager.removeBoostTrail(e))}removeLiveBall(e){e&&(this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose())}}function Ms(n,e,t){t===-1?(n.clearUpdateRanges?.(),n.addUpdateRange?.(0,n.count*n.itemSize)):n.addUpdateRange?(n.clearUpdateRanges(),n.addUpdateRange(e,t)):(n.updateRange.offset=e,n.updateRange.count=t)}class pt extends Qe{constructor(e,t){super(),this.active=!1,this.orientToMovement=!1,t&&(this.orientToMovement=!0),this.scene=e,this.geometry=null,this.mesh=null,this.nodeCenters=null,this.lastNodeCenter=null,this.currentNodeCenter=null,this.lastOrientationDir=null,this.nodeIDs=null,this.currentLength=0,this.currentEnd=0,this.currentNodeID=0,this.advanceFrequency=60,this.advancePeriod=1/this.advanceFrequency,this.lastAdvanceTime=0,this.paused=!1,this.pauseAdvanceUpdateTimeDiff=0,this._internalTime=0,this._useInternalTime=!1}setAdvanceFrequency(e){this.advanceFrequency=e,this.advancePeriod=1/this.advanceFrequency}initialize(e,t,i,s,a,r){this.deactivate(),this.destroyMesh(),this.length=t>0?t+1:0,this.dragTexture=i?1:0,this.targetObject=r,this.initializeLocalHeadGeometry(s,a),this.nodeIDs=[],this.nodeCenters=[];for(let o=0;o=this.length?0:this.currentEnd+1;if(i?this.updateNodePositionsFromTransformMatrix(s,i):this.updateNodePositionsFromOrientationTangent(s,t.position,t.tangent),this.currentLength>=1&&(this.connectNodes(this.currentEnd,s),this.currentLength>=this.length)){const a=this.currentEnd+1>=this.length?0:this.currentEnd+1;this.disconnectNodes(a)}this.currentLength=this.length&&(this.currentEnd=0),this.currentLength>=1&&(this.currentLengththis.advancePeriod?(this.advance(),this.lastAdvanceTime=t):this.updateHead()}}updateHead=(function(){const e=new Me;return function(){this.currentEnd<0||(this.targetObject.updateMatrixWorld(),e.copy(this.targetObject.matrixWorld),this.updateNodePositionsFromTransformMatrix(this.currentEnd,e))}})();updateNodeID(e,t){this.nodeIDs[e]=t;const i=this.geometry.getAttribute("nodeID"),s=this.geometry.getAttribute("nodeVertexID");for(let a=0;a1e-4)){this.lastOrientationDir||(this.lastOrientationDir=new S),t.setFromUnitVectors(a,r),s.copy(this.currentNodeCenter);for(let f=0;f=7?(fu.setRGB(parseFloat(d[4]),parseFloat(d[5]),parseFloat(d[6]),gt),t.colors.push(fu.r,fu.g,fu.b)):t.colors.push(void 0,void 0,void 0);break;case"vn":t.normals.push(parseFloat(d[1]),parseFloat(d[2]),parseFloat(d[3]));break;case"vt":t.uvs.push(parseFloat(d[1]),parseFloat(d[2]));break}}else if(u==="f"){const h=c.slice(1).trim().split(tv),f=[];for(let g=0,_=h.length;g<_;g++){const m=h[g];if(m.length>0){const v=m.split("/");f.push(v)}}const p=f[0];for(let g=1,_=f.length-1;g<_;g++){const m=f[g],v=f[g+1];t.addFace(p[0],m[0],v[0],p[1],m[1],v[1],p[2],m[2],v[2])}}else if(u==="l"){const d=c.substring(1).trim().split(" ");let h=[];const f=[];if(c.indexOf("/")===-1)h=d;else for(let p=0,g=d.length;p1){const h=s[1].trim().toLowerCase();t.object.smooth=h!=="0"&&h!=="off"}else t.object.smooth=!0;const d=t.object.currentMaterial();d&&(d.smooth=t.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}t.finalize();const a=new Mt;if(a.materialLibraries=[].concat(t.materialLibraries),!(t.objects.length===1&&t.objects[0].geometry.vertices.length===0)===!0)for(let o=0,l=t.objects.length;o0&&g.setAttribute("normal",new Ee(u.normals,3)),u.colors.length>0&&(p=!0,g.setAttribute("color",new Ee(u.colors,3))),u.hasUVIndices===!0&&g.setAttribute("uv",new Ee(u.uvs,2));const _=[];for(let v=0,y=d.length;v1){for(let v=0,y=d.length;v0){const o=new aa({size:1,sizeAttenuation:!1}),l=new Ge;l.setAttribute("position",new Ee(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new Ee(t.colors,3)),o.vertexColors=!0);const c=new sr(l,o);a.add(c)}return a}}const _p=new Map;async function gO(n,e){const t=Si("models/stadium/stadium.glb",e);let i=_p.get(t);return i||(i=n.loadAsync(t).then(s=>{const a=s.scene;return yO(a),a}).catch(s=>{throw _p.delete(t),s}),_p.set(t,i)),i}function yO(n){const e=["Sol_Trait_T0","Sol_Trait_T1","Milieu_Forme","Milieu_Forme.001","cage_T0","cage_T1","Couleur_Hexagone_T0","Couleur_Hexagone_T1","wall_gradient_color_2","wall_gradient_color_2.001","Fond_BackBoard_Transparent","dégradé_transparent_T0","dégradé_transparent_T1","grid_transperant","Detail_Milieu","Detail_Milieu.001"],t=["Glow","Glass"],i=["Plafond_Hexagone_T0","Plafond_Hexagone_T1","Plafond_Transparent"];n.traverse(s=>{if(!s.isMesh)return;s.receiveShadow=!0,s.castShadow=!i.includes(s.name),t.some(r=>s.name.includes(r))&&(console.log(`[ArenaManager] Disabling frustum culling for: ${s.name}`),s.frustumCulled=!1),s.material&&/^Hexagone_T[01]$/.test(s.material.name??"")&&(s.material=s.material.clone(),s.material.transparent=!0,s.material.opacity=.18,s.material.depthWrite=!1,s.renderOrder=1),s.material&&s.material.name==="bannière_pub"&&(s.visible=!1),s.material&&s.material.name==="Sol_Hexagone"&&(s.material=s.material.clone(),s.material.color.setScalar(.35),s.material.metalness=0,s.material.roughness=1),s.material&&s.material.name&&e.includes(s.material.name)&&(console.log(`[ArenaManager] Fixing visibility for: ${s.name} (material: ${s.material.name})`),s.material=s.material.clone(),s.material.side=ct,s.material.depthWrite=!1,s.renderOrder=1,s.frustumCulled=!1)})}class vO{constructor(e,t={}){this.scene=e,this.assetBase=t.assetBase,this.arenaMeshes=[],this.drawingCollider=null,this.drawingColliderMeshes=[],this.arenaDecorMesh=null,this.showArenaDecor=!0,this.dracoLoader=new bT,this.dracoLoader.setDecoderPath(Si("draco/",this.assetBase)),this.gltfLoader=new Og,this.gltfLoader.setDRACOLoader(this.dracoLoader)}async loadArenaMeshes(){try{console.log("Loading arena mesh...");const t=(await gO(this.gltfLoader,this.assetBase)).clone(!0);t.traverse(i=>{i.isMesh&&this.arenaMeshes.push(i)}),console.log(`[ArenaManager] Collected ${this.arenaMeshes.length} meshes for raycasting`),this.scene.add(t),console.log("Arena mesh loaded successfully with correct orientation")}catch(e){console.error("Error loading arena mesh:",e);const t=new kn(10240,8192),i=new Pn({color:3355443,side:ct}),s=new we(t,i);s.rotation.x=-Math.PI/2,s.receiveShadow=!0,this.scene.add(s),this.arenaMeshes.push(s)}}getArenaMeshes(){return this.arenaMeshes}getDrawingColliderMeshes(){return this.drawingColliderMeshes}async loadDrawingCollider(e=!1){try{console.log("[ArenaManager] Loading drawing collider...");const i=await new _O().loadAsync(Si("models/stadium/DrawingArena.obj",this.assetBase));i.rotation.x=Math.PI/2,i.rotation.y=Math.PI,i.scale.setScalar(.99),i.position.y=20,i.traverse(s=>{s.isMesh&&(this.drawingColliderMeshes.push(s),s.castShadow=!1,s.receiveShadow=!1,e?s.material=new Ye({color:65280,transparent:!0,opacity:.7,side:ct}):s.material=new Ye({visible:!1}))}),this.drawingCollider=i,this.scene.add(i),console.log(`[ArenaManager] Drawing collider loaded with ${this.drawingColliderMeshes.length} meshes`)}catch(t){console.error("[ArenaManager] Failed to load drawing collider:",t)}}setDrawingColliderVisible(e){for(const t of this.drawingColliderMeshes)e?t.material=new Ye({color:65280,wireframe:!0,transparent:!0,opacity:.5}):t.material=new Ye({visible:!1})}async loadArenaDecor(e=!0){try{console.log("[ArenaManager] Loading arena decoration mesh...");const t=await this.gltfLoader.loadAsync(Si("models/stadium/arene.glb",this.assetBase));this.arenaDecorMesh=t.scene,this.showArenaDecor=e,this.arenaDecorMesh.traverse(i=>{i.isMesh&&(i.receiveShadow=!0,i.castShadow=!0)}),this.arenaDecorMesh.visible=e,this.scene.add(this.arenaDecorMesh),console.log(`[ArenaManager] Arena decoration loaded, visible: ${e}`)}catch(t){console.error("[ArenaManager] Failed to load arena decoration:",t)}}setArenaDecorVisible(e){this.showArenaDecor=e,this.arenaDecorMesh&&(this.arenaDecorMesh.visible=e,console.log(`[ArenaManager] Arena decoration visibility set to: ${e}`))}isArenaDecorVisible(){return this.showArenaDecor}}var Ti=Uint8Array,Qr=Uint16Array,bO=Int32Array,xT=new Ti([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),wT=new Ti([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),xO=new Ti([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ST=function(n,e){for(var t=new Qr(31),i=0;i<31;++i)t[i]=e+=1<>1|(Nt&21845)<<1;js=(js&52428)>>2|(js&13107)<<2,js=(js&61680)>>4|(js&3855)<<4,zm[Nt]=((js&65280)>>8|(js&255)<<8)>>1}var Dl=(function(n,e,t){for(var i=n.length,s=0,a=new Qr(e);s>l]=c}else for(o=new Qr(i),s=0;s>15-n[s]);return o}),_c=new Ti(288);for(var Nt=0;Nt<144;++Nt)_c[Nt]=8;for(var Nt=144;Nt<256;++Nt)_c[Nt]=9;for(var Nt=256;Nt<280;++Nt)_c[Nt]=7;for(var Nt=280;Nt<288;++Nt)_c[Nt]=8;var ET=new Ti(32);for(var Nt=0;Nt<32;++Nt)ET[Nt]=5;var MO=Dl(_c,9,1),EO=Dl(ET,5,1),gp=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Oi=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},yp=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},CO=function(n){return(n+7)/8|0},AO=function(n,e,t){return(t==null||t>n.length)&&(t=n.length),new Ti(n.subarray(e,t))},RO=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Vi=function(n,e,t){var i=new Error(e||RO[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,Vi),!t)throw i;return i},PO=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new Ti(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new Ti(s*3));var c=function(xe){var Ae=t.length;if(xe>Ae){var L=new Ti(Math.max(Ae*2,xe));L.set(t),t=L}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Oi(n,d,1);var v=Oi(n,d+1,3);if(d+=3,v)if(v==1)f=MO,p=EO,g=9,_=5;else if(v==2){var x=Oi(n,d,31)+257,M=Oi(n,d+10,15)+4,C=x+Oi(n,d+5,31)+1;d+=14;for(var w=new Ti(C),E=new Ti(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Oi(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Oi(n,d,7),d+=3):y==18&&(W=11+Oi(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ne=w.subarray(x);g=gp(H),_=gp(ne),f=Dl(H,g,1),p=Dl(ne,_,1)}else Vi(1);else{var y=CO(d)+4,b=n[y-4]|n[y-3]<<8,T=y+b;if(T>s){l&&Vi(0);break}o&&c(h+b),t.set(n.subarray(y,T),h),e.b=h+=b,e.p=d=T*8,e.f=u;continue}if(d>m){l&&Vi(0);break}}o&&c(h+131072);for(var oe=(1<>4;if(d+=F&15,d>m){l&&Vi(0);break}if(F||Vi(2),ke<256)t[h++]=ke;else if(ke==256){Ie=d,f=null;break}else{var Xe=ke-254;if(ke>264){var R=ke-257,De=xT[R];Xe=Oi(n,d,(1<>4;Z||Vi(3),d+=Z&15;var ne=TO[ae];if(ae>3){var De=wT[ae];ne+=yp(n,d)&(1<m){l&&Vi(0);break}o&&c(h+131072);var Se=h+Xe;if(h>4>7||(n[0]<<8|n[1])%31)&&Vi(6,"invalid zlib data"),(n[1]>>5&1)==1&&Vi(6,"invalid zlib data: "+(n[1]&32?"need":"unexpected")+" dictionary"),(n[1]>>3&4)+2};function kO(n,e){return PO(n.subarray(LO(n),-4),{i:2},e,e)}var DO=typeof TextDecoder<"u"&&new TextDecoder,OO=0;try{DO.decode(IO,{stream:!0}),OO=1}catch{}function CT(n,e,t){const i=t.length-n-1;if(e>=t[i])return i-1;if(e<=t[n])return n;let s=n,a=i,r=Math.floor((s+a)/2);for(;e=t[r+1];)e=g&&(p[f][0]=p[h][0]/o[v+1][m],_=p[f][0]*o[m][v]);const y=m>=-1?1:-m,b=d-1<=v?g-1:t-d;for(let x=y;x<=b;++x)p[f][x]=(p[h][x]-p[h][x-1])/o[v+1][m+x],_+=p[f][x]*o[m+x][v];d<=v&&(p[f][g]=-p[h][g-1]/o[v+1][d],_+=p[f][g]*o[d][v]),r[g][d]=_;const T=h;h=f,f=T}}let u=t;for(let d=1;d<=i;++d){for(let h=0;h<=t;++h)r[d][h]*=u;u*=t-d}return r}function BO(n,e,t,i,s){const a=st.toArray()),e.startKnot=this.startKnot,e.endKnot=this.endKnot,e}fromJSON(e){return super.fromJSON(e),this.degree=e.degree,this.knots=[...e.knots],this.controlPoints=e.controlPoints.map(t=>new qe(t[0],t[1],t[2],t[3])),this.startKnot=e.startKnot,this.endKnot=e.endKnot,this}}let _t,Zt,Un;class $O extends on{constructor(e){super(e)}load(e,t,i,s){const a=this,r=a.path===""?Us.extractUrlBase(e):a.path,o=new Gn(this.manager);o.setPath(a.path),o.setResponseType("arraybuffer"),o.setRequestHeader(a.requestHeader),o.setWithCredentials(a.withCredentials),o.load(e,function(l){try{t(a.parse(l,r))}catch(c){s?s(c):console.error(c),a.manager.itemError(e)}},i,s)}parse(e,t){if(jO(e))_t=new YO().parse(e);else{const s=PT(e);if(!ZO(s))throw new Error("THREE.FBXLoader: Unknown format.");if(rv(s)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+rv(s));_t=new qO().parse(s)}const i=new tf(this.manager).setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);return new WO(i,this.manager).parse(_t)}}class WO{constructor(e,t){this.textureLoader=e,this.manager=t}parse(){Zt=this.parseConnections();const e=this.parseImages(),t=this.parseTextures(e),i=this.parseMaterials(t),s=this.parseDeformers(),a=new XO().parse(s);return this.parseScene(s,a,i),Un}parseConnections(){const e=new Map;return"Connections"in _t&&_t.Connections.connections.forEach(function(i){const s=i[0],a=i[1],r=i[2];e.has(s)||e.set(s,{parents:[],children:[]});const o={ID:a,relationship:r};e.get(s).parents.push(o),e.has(a)||e.set(a,{parents:[],children:[]});const l={ID:s,relationship:r};e.get(a).children.push(l)}),e}parseImages(){const e={},t={};if("Video"in _t.Objects){const i=_t.Objects.Video;for(const s in i){const a=i[s],r=parseInt(s);if(e[r]=a.RelativeFilename||a.Filename,"Content"in a){const o=a.Content instanceof ArrayBuffer&&a.Content.byteLength>0,l=typeof a.Content=="string"&&a.Content!=="";if(o||l){const c=this.parseImage(i[s]);t[a.RelativeFilename||a.Filename]=c}}}}for(const i in e){const s=e[i];t[s]!==void 0?e[i]=t[s]:e[i]=e[i].split("\\").pop()}return e}parseImage(e){const t=e.Content,i=e.RelativeFilename||e.Filename,s=i.slice(i.lastIndexOf(".")+1).toLowerCase();let a;switch(s){case"bmp":a="image/bmp";break;case"jpg":case"jpeg":a="image/jpeg";break;case"png":a="image/png";break;case"tif":a="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",i),a="image/tga";break;case"webp":a="image/webp";break;default:console.warn('FBXLoader: Image type "'+s+'" is not supported.');return}if(typeof t=="string")return"data:"+a+";base64,"+t;{const r=new Uint8Array(t);return window.URL.createObjectURL(new Blob([r],{type:a}))}}parseTextures(e){const t=new Map;if("Texture"in _t.Objects){const i=_t.Objects.Texture;for(const s in i){const a=this.parseTexture(i[s],e);t.set(parseInt(s),a)}}return t}parseTexture(e,t){const i=this.loadTexture(e,t);i.ID=e.id,i.name=e.attrName;const s=e.WrapModeU,a=e.WrapModeV,r=s!==void 0?s.value:0,o=a!==void 0?a.value:0;if(i.wrapS=r===0?ps:Hn,i.wrapT=o===0?ps:Hn,"Scaling"in e){const l=e.Scaling.value;i.repeat.x=l[0],i.repeat.y=l[1]}if("Translation"in e){const l=e.Translation.value;i.offset.x=l[0],i.offset.y=l[1]}return i}loadTexture(e,t){const i=e.FileName.split(".").pop().toLowerCase();let s=this.manager.getHandler(`.${i}`);s===null&&(s=this.textureLoader);const a=s.path;a||s.setPath(this.textureLoader.path);const r=Zt.get(e.id).children;let o;if(r!==void 0&&r.length>0&&t[r[0].ID]!==void 0&&(o=t[r[0].ID],(o.indexOf("blob:")===0||o.indexOf("data:")===0)&&s.setPath(void 0)),o===void 0)return console.warn("FBXLoader: Undefined filename, creating placeholder texture."),new Bt;const l=s.load(o);return s.setPath(a),l}parseMaterials(e){const t=new Map;if("Material"in _t.Objects){const i=_t.Objects.Material;for(const s in i){const a=this.parseMaterial(i[s],e);a!==null&&t.set(parseInt(s),a)}}return t}parseMaterial(e,t){const i=e.id,s=e.attrName;let a=e.ShadingModel;if(typeof a=="object"&&(a=a.value),!Zt.has(i))return null;const r=this.parseParameters(e,t,i);let o;switch(a.toLowerCase()){case"phong":o=new ja;break;case"lambert":o=new ef;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',a),o=new ja;break}return o.setValues(r),o.name=s,o}parseParameters(e,t,i){const s={};e.BumpFactor&&(s.bumpScale=e.BumpFactor.value),e.Diffuse?s.color=rt.colorSpaceToWorking(new ue().fromArray(e.Diffuse.value),gt):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(s.color=rt.colorSpaceToWorking(new ue().fromArray(e.DiffuseColor.value),gt)),e.DisplacementFactor&&(s.displacementScale=e.DisplacementFactor.value),e.Emissive?s.emissive=rt.colorSpaceToWorking(new ue().fromArray(e.Emissive.value),gt):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(s.emissive=rt.colorSpaceToWorking(new ue().fromArray(e.EmissiveColor.value),gt)),e.EmissiveFactor&&(s.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),s.opacity=1-(e.TransparencyFactor?parseFloat(e.TransparencyFactor.value):0),(s.opacity===1||s.opacity===0)&&(s.opacity=e.Opacity?parseFloat(e.Opacity.value):null,s.opacity===null&&(s.opacity=1-(e.TransparentColor?parseFloat(e.TransparentColor.value[0]):0))),s.opacity<1&&(s.transparent=!0),e.ReflectionFactor&&(s.reflectivity=e.ReflectionFactor.value),e.Shininess&&(s.shininess=e.Shininess.value),e.Specular?s.specular=rt.colorSpaceToWorking(new ue().fromArray(e.Specular.value),gt):e.SpecularColor&&e.SpecularColor.type==="Color"&&(s.specular=rt.colorSpaceToWorking(new ue().fromArray(e.SpecularColor.value),gt));const a=this;return Zt.get(i).children.forEach(function(r){const o=r.relationship;switch(o){case"Bump":s.bumpMap=a.getTexture(t,r.ID);break;case"Maya|TEX_ao_map":s.aoMap=a.getTexture(t,r.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":s.map=a.getTexture(t,r.ID),s.map!==void 0&&(s.map.colorSpace=gt);break;case"DisplacementColor":s.displacementMap=a.getTexture(t,r.ID);break;case"EmissiveColor":s.emissiveMap=a.getTexture(t,r.ID),s.emissiveMap!==void 0&&(s.emissiveMap.colorSpace=gt);break;case"NormalMap":case"Maya|TEX_normal_map":s.normalMap=a.getTexture(t,r.ID);break;case"ReflectionColor":s.envMap=a.getTexture(t,r.ID),s.envMap!==void 0&&(s.envMap.mapping=rr,s.envMap.colorSpace=gt);break;case"SpecularColor":s.specularMap=a.getTexture(t,r.ID),s.specularMap!==void 0&&(s.specularMap.colorSpace=gt);break;case"TransparentColor":case"TransparencyFactor":s.alphaMap=a.getTexture(t,r.ID),s.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",o);break}}),s}getTexture(e,t){return"LayeredTexture"in _t.Objects&&t in _t.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),t=Zt.get(t).children[0].ID),e.get(t)}parseDeformers(){const e={},t={};if("Deformer"in _t.Objects){const i=_t.Objects.Deformer;for(const s in i){const a=i[s],r=Zt.get(parseInt(s));if(a.attrType==="Skin"){const o=this.parseSkeleton(r,i);o.ID=s,r.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),o.geometryID=r.parents[0].ID,e[s]=o}else if(a.attrType==="BlendShape"){const o={id:s};o.rawTargets=this.parseMorphTargets(r,i),o.id=s,r.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),t[s]=o}}}return{skeletons:e,morphTargets:t}}parseSkeleton(e,t){const i=[];return e.children.forEach(function(s){const a=t[s.ID];if(a.attrType!=="Cluster")return;const r={ID:s.ID,indices:[],weights:[],transformLink:new Me().fromArray(a.TransformLink.a)};"Indexes"in a&&(r.indices=a.Indexes.a,r.weights=a.Weights.a),i.push(r)}),{rawBones:i,bones:[]}}parseMorphTargets(e,t){const i=[];for(let s=0;s1?r=o:o.length>0?r=o[0]:(r=new ja({name:on.DEFAULT_MATERIAL_NAME,color:13421772}),o.push(r)),"color"in a.attributes&&o.forEach(function(l){l.vertexColors=!0}),a.groups.length>0){let l=!1;for(let c=0,u=a.groups.length;c=o.length)&&(d.materialIndex=o.length,l=!0)}if(l){const c=new ja;o.push(c)}}return a.FBX_Deformer?(s=new Bh(a,r),s.normalizeSkinWeights()):s=new we(a,r),s}createCurve(e,t){const i=e.children.reduce(function(a,r){return t.has(r.ID)&&(a=t.get(r.ID)),a},null),s=new Rt({name:on.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new In(i,s)}getTransformData(e,t){const i={};"InheritType"in t&&(i.inheritType=parseInt(t.InheritType.value)),"RotationOrder"in t?i.eulerOrder=Zl(t.RotationOrder.value):i.eulerOrder=Zl(0),"Lcl_Translation"in t&&(i.translation=t.Lcl_Translation.value),"PreRotation"in t&&(i.preRotation=t.PreRotation.value),"Lcl_Rotation"in t&&(i.rotation=t.Lcl_Rotation.value),"PostRotation"in t&&(i.postRotation=t.PostRotation.value),"Lcl_Scaling"in t&&(i.scale=t.Lcl_Scaling.value),"ScalingOffset"in t&&(i.scalingOffset=t.ScalingOffset.value),"ScalingPivot"in t&&(i.scalingPivot=t.ScalingPivot.value),"RotationOffset"in t&&(i.rotationOffset=t.RotationOffset.value),"RotationPivot"in t&&(i.rotationPivot=t.RotationPivot.value),e.userData.transformData=i}setLookAtProperties(e,t){"LookAtProperty"in t&&Zt.get(e.ID).children.forEach(function(s){if(s.relationship==="LookAtProperty"){const a=_t.Objects.Model[s.ID];if("Lcl_Translation"in a){const r=a.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(r),Un.add(e.target)):e.lookAt(new S().fromArray(r))}}})}bindSkeleton(e,t,i){const s=this.parsePoseNodes();for(const a in e){const r=e[a];Zt.get(parseInt(r.ID)).parents.forEach(function(l){if(t.has(l.ID)){const c=l.ID;Zt.get(c).parents.forEach(function(d){i.has(d.ID)&&i.get(d.ID).bind(new Lo(r.bones),s[d.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in _t.Objects){const t=_t.Objects.Pose;for(const i in t)if(t[i].attrType==="BindPose"&&t[i].NbPoseNodes>0){const s=t[i].PoseNode;Array.isArray(s)?s.forEach(function(a){e[a.Node]=new Me().fromArray(a.Matrix.a)}):e[s.Node]=new Me().fromArray(s.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in _t){if("AmbientColor"in _t.GlobalSettings){const e=_t.GlobalSettings.AmbientColor.value,t=e[0],i=e[1],s=e[2];if(t!==0||i!==0||s!==0){const a=new ue().setRGB(t,i,s,gt);Un.add(new mc(a,1))}}"UnitScaleFactor"in _t.GlobalSettings&&(Un.userData.unitScaleFactor=_t.GlobalSettings.UnitScaleFactor.value)}}}class XO{constructor(){this.negativeMaterialIndices=!1}parse(e){const t=new Map;if("Geometry"in _t.Objects){const i=_t.Objects.Geometry;for(const s in i){const a=Zt.get(parseInt(s)),r=this.parseGeometry(a,i[s],e);t.set(parseInt(s),r)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),t}parseGeometry(e,t,i){switch(t.attrType){case"Mesh":return this.parseMeshGeometry(e,t,i);case"NurbsCurve":return this.parseNurbsGeometry(t)}}parseMeshGeometry(e,t,i){const s=i.skeletons,a=[],r=e.parents.map(function(d){return _t.Objects.Model[d.ID]});if(r.length===0)return;const o=e.children.reduce(function(d,h){return s[h.ID]!==void 0&&(d=s[h.ID]),d},null);e.children.forEach(function(d){i.morphTargets[d.ID]!==void 0&&a.push(i.morphTargets[d.ID])});const l=r[0],c={};"RotationOrder"in l&&(c.eulerOrder=Zl(l.RotationOrder.value)),"InheritType"in l&&(c.inheritType=parseInt(l.InheritType.value)),"GeometricTranslation"in l&&(c.translation=l.GeometricTranslation.value),"GeometricRotation"in l&&(c.rotation=l.GeometricRotation.value),"GeometricScaling"in l&&(c.scale=l.GeometricScaling.value);const u=RT(c);return this.genGeometry(t,o,a,u)}genGeometry(e,t,i,s){const a=new Ge;e.attrName&&(a.name=e.attrName);const r=this.parseGeoNode(e,t),o=this.genBuffers(r),l=new Ee(o.vertex,3);if(l.applyMatrix4(s),a.setAttribute("position",l),o.colors.length>0&&a.setAttribute("color",new Ee(o.colors,3)),t&&(a.setAttribute("skinIndex",new kh(o.weightsIndices,4)),a.setAttribute("skinWeight",new Ee(o.vertexWeights,4)),a.FBX_Deformer=t),o.normal.length>0){const c=new at().getNormalMatrix(s),u=new Ee(o.normal,3);u.applyNormalMatrix(c),a.setAttribute("normal",u)}if(o.uvs.forEach(function(c,u){const d=u===0?"uv":`uv${u}`;a.setAttribute(d,new Ee(o.uvs[u],2))}),r.material&&r.material.mappingType!=="AllSame"){let c=o.materialIndex[0],u=0;if(o.materialIndex.forEach(function(d,h){d!==c&&(a.addGroup(u,h-u,c),c=d,u=h)}),a.groups.length>0){const d=a.groups[a.groups.length-1],h=d.start+d.count;h!==o.materialIndex.length&&a.addGroup(h,o.materialIndex.length-h,c)}a.groups.length===0&&a.addGroup(0,o.materialIndex.length,o.materialIndex[0])}return this.addMorphTargets(a,e,i,s),a}parseGeoNode(e,t){const i={};if(i.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],i.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&e.LayerElementColor[0].Colors&&(i.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(i.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(i.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){i.uv=[];let s=0;for(;e.LayerElementUV[s];)e.LayerElementUV[s].UV&&i.uv.push(this.parseUVs(e.LayerElementUV[s])),s++}return i.weightTable={},t!==null&&(i.skeleton=t,t.rawBones.forEach(function(s,a){s.indices.forEach(function(r,o){i.weightTable[r]===void 0&&(i.weightTable[r]=[]),i.weightTable[r].push({id:a,weight:s.weights[o]})})})),i}genBuffers(e){const t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let i=0,s=0,a=!1,r=[],o=[],l=[],c=[],u=[],d=[];const h=this;return e.vertexIndices.forEach(function(f,p){let g,_=!1;f<0&&(f=f^-1,_=!0);let m=[],v=[];if(r.push(f*3,f*3+1,f*3+2),e.color){const y=pu(p,i,f,e.color);l.push(y[0],y[1],y[2])}if(e.skeleton){if(e.weightTable[f]!==void 0&&e.weightTable[f].forEach(function(y){v.push(y.weight),m.push(y.id)}),v.length>4){a||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),a=!0);const y=[0,0,0,0],b=[0,0,0,0];v.forEach(function(T,x){let M=T,C=m[x];b.forEach(function(w,E,R){if(M>w){R[E]=M,M=w;const k=y[E];y[E]=C,C=k}})}),m=y,v=b}for(;v.length<4;)v.push(0),m.push(0);for(let y=0;y<4;++y)u.push(v[y]),d.push(m[y])}if(e.normal){const y=pu(p,i,f,e.normal);o.push(y[0],y[1],y[2])}e.material&&e.material.mappingType!=="AllSame"&&(g=pu(p,i,f,e.material)[0],g<0&&(h.negativeMaterialIndices=!0,g=0)),e.uv&&e.uv.forEach(function(y,b){const T=pu(p,i,f,y);c[b]===void 0&&(c[b]=[]),c[b].push(T[0]),c[b].push(T[1])}),s++,_&&(h.genFace(t,e,r,g,o,l,c,u,d,s),i++,s=0,r=[],o=[],l=[],c=[],u=[],d=[])}),t}getNormalNewell(e){const t=new S(0,0,0);for(let i=0;i.5?new S(0,1,0):new S(0,0,1)).cross(t).normalize(),a=t.clone().cross(s).normalize();return{normal:t,tangent:s,bitangent:a}}flattenVertex(e,t,i){return new te(e.dot(t),e.dot(i))}genFace(e,t,i,s,a,r,o,l,c,u){let d;if(u>3){const h=[],f=t.baseVertexPositions||t.vertexPositions;for(let m=0;m1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const r=e.get(a[0].ID);i[s]={name:t[s].attrName,layer:r}}return i}addClip(e){let t=[];const i=this;return e.layer.forEach(function(s){t=t.concat(i.generateTracks(s))}),new da(e.name,-1,t)}generateTracks(e){const t=[];let i=new S,s=new S;if(e.transform&&e.transform.decompose(i,new dt,s),i=i.toArray(),s=s.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.T.curves,i,"position");a!==void 0&&t.push(a)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const a=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);a!==void 0&&t.push(a)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.S.curves,s,"scale");a!==void 0&&t.push(a)}if(e.DeformPercent!==void 0){const a=this.generateMorphTrack(e);a!==void 0&&t.push(a)}return t}generateVectorTrack(e,t,i,s){const a=this.getTimesForAllAxes(t),r=this.getKeyframeTrackValues(a,t,i);return new Hs(e+"."+s,a,r)}generateRotationTrack(e,t,i,s,a){let r,o;if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){const h=this.interpolateRotations(t.x,t.y,t.z,a);r=h[0],o=h[1]}const l=Zl(0);i!==void 0&&(i=i.map(vt.degToRad),i.push(l),i=new an().fromArray(i),i=new dt().setFromEuler(i)),s!==void 0&&(s=s.map(vt.degToRad),s.push(l),s=new an().fromArray(s),s=new dt().setFromEuler(s).invert());const c=new dt,u=new an,d=[];if(!o||!r)return new _s(e+".quaternion",[0],[0]);for(let h=0;h2&&new dt().fromArray(d,(h-3)/3*4).dot(c)<0&&c.set(-c.x,-c.y,-c.z,-c.w),c.toArray(d,h/3*4);return new _s(e+".quaternion",r,d)}generateMorphTrack(e){const t=e.DeformPercent.curves.morph,i=t.values.map(function(a){return a/100}),s=Un.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new ua(e.modelName+".morphTargetInfluences["+s+"]",t.times,i)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(i,s){return i-s}),t.length>1){let i=1,s=t[0];for(let a=1;a=180||f[1]>=180||f[2]>=180){const g=Math.max(...f)/180,_=new an(...c,s),m=new an(...d,s),v=new dt().setFromEuler(_),y=new dt().setFromEuler(m);v.dot(y)&&y.set(-y.x,-y.y,-y.z,-y.w);const b=e.times[o-1],T=e.times[o]-b,x=new dt,M=new an;for(let C=0;C<1;C+=1/g)x.copy(v.clone().slerp(y.clone(),C)),a.push(b+C*T),M.setFromQuaternion(x,s),r.push(M.x),r.push(M.y),r.push(M.z)}else a.push(e.times[o]),r.push(vt.degToRad(e.values[o])),r.push(vt.degToRad(t.values[o])),r.push(vt.degToRad(i.values[o]))}return[a,r]}}class qO{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new AT,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const t=this,i=e.split(/[\r\n]+/);return i.forEach(function(s,a){const r=s.match(/^[\s\t]*;/),o=s.match(/^[\s\t]*$/);if(r||o)return;const l=s.match("^\\t{"+t.currentIndent+"}(\\w+):(.*){",""),c=s.match("^\\t{"+t.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),u=s.match("^\\t{"+(t.currentIndent-1)+"}}");l?t.parseNodeBegin(s,l):c?t.parseNodeProperty(s,c,i[++a]):u?t.popStack():s.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(s)}),this.allNodes}parseNodeBegin(e,t){const i=t[1].trim().replace(/^"/,"").replace(/"$/,""),s=t[2].split(",").map(function(l){return l.trim().replace(/^"/,"").replace(/"$/,"")}),a={name:i},r=this.parseNodeAttr(s),o=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(i,a):i in o?(i==="PoseNode"?o.PoseNode.push(a):o[i].id!==void 0&&(o[i]={},o[i][o[i].id]=o[i]),r.id!==""&&(o[i][r.id]=a)):typeof r.id=="number"?(o[i]={},o[i][r.id]=a):i!=="Properties70"&&(i==="PoseNode"?o[i]=[a]:o[i]=a),typeof r.id=="number"&&(a.id=r.id),r.name!==""&&(a.attrName=r.name),r.type!==""&&(a.attrType=r.type),this.pushStack(a)}parseNodeAttr(e){let t=e[0];e[0]!==""&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let i="",s="";return e.length>1&&(i=e[1].replace(/^(\w+)::/,""),s=e[2]),{id:t,name:i,type:s}}parseNodeProperty(e,t,i){let s=t[1].replace(/^"/,"").replace(/"$/,"").trim(),a=t[2].replace(/^"/,"").replace(/"$/,"").trim();s==="Content"&&a===","&&(a=i.replace(/"/g,"").replace(/,$/,"").trim());const r=this.getCurrentNode();if(r.name==="Properties70"){this.parseNodeSpecialProperty(e,s,a);return}if(s==="C"){const l=a.split(",").slice(1),c=parseInt(l[0]),u=parseInt(l[1]);let d=a.split(",").slice(3);d=d.map(function(h){return h.trim().replace(/^"/,"")}),s="connections",a=[c,u],eF(a,d),r[s]===void 0&&(r[s]=[])}s==="Node"&&(r.id=a),s in r&&Array.isArray(r[s])?r[s].push(a):s!=="a"?r[s]=a:r.a=a,this.setCurrentProp(r,s),s==="a"&&a.slice(-1)!==","&&(r.a=bp(a))}parseNodePropertyContinued(e){const t=this.getCurrentNode();t.a+=e,e.slice(-1)!==","&&(t.a=bp(t.a))}parseNodeSpecialProperty(e,t,i){const s=i.split('",').map(function(u){return u.trim().replace(/^\"/,"").replace(/\s/,"_")}),a=s[0],r=s[1],o=s[2],l=s[3];let c=s[4];switch(r){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":c=parseFloat(c);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":c=bp(c);break}this.getPrevNode()[a]={type:r,type2:o,flag:l,value:c},this.setCurrentProp(this.getPrevNode(),a)}}class YO{parse(e){const t=new av(e);t.skip(23);const i=t.getUint32();if(i<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+i);const s=new AT;for(;!this.endOfContent(t);){const a=this.parseNode(t,i);a!==null&&s.add(a.name,a)}return s}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){const i={},s=t>=7500?e.getUint64():e.getUint32(),a=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();const r=e.getUint8(),o=e.getString(r);if(s===0)return null;const l=[];for(let h=0;h0?l[0]:"",u=l.length>1?l[1]:"",d=l.length>2?l[2]:"";for(i.singleProperty=a===1&&e.getOffset()===s;s>e.getOffset();){const h=this.parseNode(e,t);h!==null&&this.parseSubNode(o,i,h)}return i.propertyList=l,typeof c=="number"&&(i.id=c),u!==""&&(i.attrName=u),d!==""&&(i.attrType=d),o!==""&&(i.name=o),i}parseSubNode(e,t,i){if(i.singleProperty===!0){const s=i.propertyList[0];Array.isArray(s)?(t[i.name]=i,i.a=s):t[i.name]=s}else if(e==="Connections"&&i.name==="C"){const s=[];i.propertyList.forEach(function(a,r){r!==0&&s.push(a)}),t.connections===void 0&&(t.connections=[]),t.connections.push(s)}else if(i.name==="Properties70")Object.keys(i).forEach(function(a){t[a]=i[a]});else if(e==="Properties70"&&i.name==="P"){let s=i.propertyList[0],a=i.propertyList[1];const r=i.propertyList[2],o=i.propertyList[3];let l;s.indexOf("Lcl ")===0&&(s=s.replace("Lcl ","Lcl_")),a.indexOf("Lcl ")===0&&(a=a.replace("Lcl ","Lcl_")),a==="Color"||a==="ColorRGB"||a==="Vector"||a==="Vector3D"||a.indexOf("Lcl_")===0?l=[i.propertyList[4],i.propertyList[5],i.propertyList[6]]:l=i.propertyList[4],t[s]={type:a,type2:r,flag:o,value:l}}else t[i.name]===void 0?typeof i.id=="number"?(t[i.name]={},t[i.name][i.id]=i):t[i.name]=i:i.name==="PoseNode"?(Array.isArray(t[i.name])||(t[i.name]=[t[i.name]]),t[i.name].push(i)):t[i.name][i.id]===void 0&&(t[i.name][i.id]=i)}parseProperty(e){const t=e.getString(1);let i;switch(t){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return i=e.getUint32(),e.getArrayBuffer(i);case"S":return i=e.getUint32(),e.getString(i);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const s=e.getUint32(),a=e.getUint32(),r=e.getUint32();if(a===0)switch(t){case"b":case"c":return e.getBooleanArray(s);case"d":return e.getFloat64Array(s);case"f":return e.getFloat32Array(s);case"i":return e.getInt32Array(s);case"l":return e.getInt64Array(s)}const o=kO(new Uint8Array(e.getArrayBuffer(r))),l=new av(o.buffer);switch(t){case"b":case"c":return l.getBooleanArray(s);case"d":return l.getFloat64Array(s);case"f":return l.getFloat32Array(s);case"i":return l.getInt32Array(s);case"l":return l.getInt64Array(s)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+t)}}}class av{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t!==void 0?t:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const t=[];for(let i=0;i=0&&(i=new Uint8Array(this.dv.buffer,t,s)),this._textDecoder.decode(i)}}class AT{add(e,t){this[e]=t}}function jO(n){const e="Kaydara FBX Binary \0";return n.byteLength>=e.length&&e===PT(n,0,e.length)}function ZO(n){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let t=0;function i(s){const a=n[s-1];return n=n.slice(t+s),t++,a}for(let s=0;s(console.warn(`⚠️ Could not load texture ${u}:`,d.message),null))])}this._processModelMaterials(s,a,e,i.format);const o=this._calculateModelScale(s,e,i.scale);if(s.userData.scaleInfo=o,s.userData.format=i.format,i.wheelSockets){s.userData.wheelSockets=!0,s.userData.wheelModelName=i.wheelModel;const l=this._findWheelSockets(s);s.userData.wheelSocketObjects=l,console.log(`🔌 Found ${Object.keys(l).length} wheel sockets`)}return{model:s,chassisTexture:a,wheelModel:r}}_findWheelSockets(e){const t={},i=["Wheel_BL","Wheel_BR","Wheel_FL","Wheel_FR"];console.log("🔍 Searching for wheel sockets..."),e.traverse(s=>{const a=s.name,r=a.toLowerCase();for(const o of i)(a===o||r===o.toLowerCase())&&(t[o]=s,console.log(` Found socket: "${a}" at position (${s.position.x.toFixed(2)}, ${s.position.y.toFixed(2)}, ${s.position.z.toFixed(2)})`))});for(const s of i)t[s]||console.warn(` ⚠️ Missing wheel socket: ${s}`);return Object.keys(t).length===0&&(console.warn("⚠️ No wheel sockets found! Listing all objects:"),e.traverse(s=>{console.log(` - "${s.name}" (${s.type})`)})),t}_calculateModelScale(e,t,i=null){const s=new vn().setFromObject(e),a=new S;s.getSize(a),console.log(`📐 ${t.toUpperCase()} model dimensions (raw):`),console.log(` Size: X=${a.x.toFixed(2)}, Y=${a.y.toFixed(2)}, Z=${a.z.toFixed(2)}`),console.log(` Min Y: ${s.min.y.toFixed(2)}, Max Y: ${s.max.y.toFixed(2)}`);const r=this.HITBOX_DIMENSIONS[t]||this.HITBOX_DIMENSIONS.octane;let o;if(i!==null)o=i,console.log(` Using override scale: ${o}`);else{const l=a.z,u=r.length*1/l;o=u*.55,console.log(` Target RL: ${r.length} x ${r.width} x ${r.height} uu`),console.log(` Scale to RL: ${u.toFixed(4)}, Final scale: ${o.toFixed(6)}`)}return{scale:o}}_loadFBX(e){return new Promise((t,i)=>{this.fbxLoader.load(e,s=>t(s),void 0,s=>i(new Error(`Failed to load FBX: ${e} - ${s.message}`)))})}_loadGLB(e){return new Promise((t,i)=>{this.gltfLoader.load(e,s=>{t(s.scene)},void 0,s=>i(new Error(`Failed to load GLB: ${e} - ${s.message}`)))})}async loadWheelModel(e){const t=Si(`models/wheels/${e}`,this.assetBase);if(this.wheelModelCache.has(t))return this.wheelModelCache.get(t);if(this.wheelLoadingPromises.has(t))return this.wheelLoadingPromises.get(t);const i=this._loadGLB(t);this.wheelLoadingPromises.set(t,i);try{const s=await i;return console.log(`✓ Loaded wheel model: ${e}`),s.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.wheelModelCache.set(t,s),s}catch(s){throw console.error(`Failed to load wheel model ${e}:`,s),s}finally{this.wheelLoadingPromises.delete(t)}}_loadTexture(e){return new Promise((t,i)=>{this.textureLoader.load(e,s=>{s.flipY=!1,s.colorSpace=gt,t(s)},void 0,s=>i(new Error(`Failed to load texture: ${e}`)))})}_processModelMaterials(e,t,i,s="fbx"){console.log(`📦 Processing materials for ${i} (${s}):`);const a=["body","paint"],r=[];e.traverse(o=>{o.isLight&&(r.push(o),console.log(` 🔦 Removing imported light: "${o.name||o.type}"`))}),r.forEach(o=>{o.parent&&o.parent.remove(o)}),e.traverse(o=>{o.isMesh&&(console.log(` Mesh: "${o.name}"`),(Array.isArray(o.material)?o.material:[o.material]).forEach((c,u)=>{console.log(` [${u}] Material: "${c.name}" - Color: #${c.color?.getHexString()||"none"}`);const d=(c.name||"").toLowerCase(),h=(o.name||"").toLowerCase(),f=a.some(p=>d.includes(p)||h.includes(p));if(s==="glb")(c.isMeshStandardMaterial||c.isMeshPhysicalMaterial)&&(console.log(` → GLB material (keeping as-is): metalness=${c.metalness?.toFixed(2)}, roughness=${c.roughness?.toFixed(2)}`),c.userData.originalColor=c.color?.clone(),c.userData.isBodyMaterial=f);else if(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial){let p;f?(p=new Pn({color:c.color,map:c.map,metalness:.8,roughness:.15}),console.log(" → Body material: shiny metallic")):(p=new Pn({color:c.color,map:c.map,metalness:.1,roughness:.6}),console.log(" → Non-body material: matte")),p.name=c.name,Array.isArray(o.material)?o.material[u]=p:o.material=p}}))}),t?console.log(` ✓ Chassis texture loaded for ${i}`):s==="fbx"&&console.log(` ⚠️ No chassis texture for ${i}`)}getModelTypeForCar(e,t){return e&&this.carNameToModel[e]?this.carNameToModel[e]:this.hitboxToModel[t]||"octane"}getModelTypeForHitbox(e){return this.hitboxToModel[e]||"octane"}async createCarMesh(e,t=0){const i=this.getModelTypeForHitbox(e);try{const s=await this.loadModel(i);if(!s||!s.model)return console.warn(`No cached model for ${i}`),null;const a=s.model.userData.format||"fbx";let r;a==="glb"?(r=xp(s.model),r.traverse(c=>{c.isMesh&&(Array.isArray(c.material)?c.material=c.material.map(u=>u.clone()):c.material&&(c.material=c.material.clone()))})):r=s.model.clone(),this.applyTeamColor(r,t);const o=new Mt,l=s.model.userData.scaleInfo;return l&&r.scale.setScalar(l.scale),o.add(r),r.traverse(c=>{c.isMesh&&(c.castShadow=!0)}),o.userData.modelType=i,o.userData.hitboxType=e,o.userData.team=t,o.userData.isFBXModel=a==="fbx",o.userData.isGLBModel=a==="glb",o}catch(s){return console.error(`Failed to create car mesh for ${e}:`,s),null}}applyTeamColor(e,t){const i=t===0?this.TEAM_COLORS.blue:this.TEAM_COLORS.orange,s=["body","paint"];let a=!1;console.log("🔍 Analyzing car meshes for team coloring:"),e.traverse(r=>{if(r.isMesh){const o=Array.isArray(r.material)?r.material:[r.material];console.log(` Mesh: "${r.name}" with ${o.length} material(s)`),o.forEach((l,c)=>{console.log(` [${c}] Material: "${l.name}", isBodyMaterial: ${l.userData?.isBodyMaterial}`)})}}),e.traverse(r=>{r.isMesh&&(Array.isArray(r.material)?r.material:[r.material]).forEach((l,c)=>{const u=(l.name||"").toLowerCase(),d=(r.name||"").toLowerCase(),h=l.userData?.isBodyMaterial||s.some(f=>u.includes(f)||d.includes(f));if(console.log(` Checking "${l.name}" on "${r.name}": isBody=${h}`),h){a=!0;const f=l.clone();f.color=i.clone(),f.metalness=.39,f.roughness=.47,f.userData={...l.userData},Array.isArray(r.material)?r.material[c]=f:r.material=f,console.log(`🎨 Applied team color to: "${l.name}" on mesh "${r.name}" (index ${c})`)}})}),a||console.warn("⚠️ No body material found for team coloring! Check material names.")}updateTeamColor(e,t){this.applyTeamColor(e,t)}isModelReady(e,t){const i=this.getModelTypeForCar(e,t);return this.modelCache.has(this.modelCacheKey(i))}getCarMeshSync(e,t,i=0){const s=this.getModelTypeForCar(e,t),a=this.modelCache.get(this.modelCacheKey(s));if(!a||!a.model)return null;const r=a.model.userData.format||"fbx",o=a.model.userData.wheelSockets;let l;r==="glb"?(l=xp(a.model),l.traverse(d=>{d.isMesh&&(Array.isArray(d.material)?d.material=d.material.map(h=>h.clone()):d.material&&(d.material=d.material.clone()))})):l=a.model.clone(),this.applyTeamColor(l,i);const c=new Mt,u=a.model.userData.scaleInfo;return u&&l.scale.setScalar(u.scale),c.add(l),l.traverse(d=>{d.isMesh&&(d.castShadow=!0)}),c.userData.modelType=s,c.userData.carName=e,c.userData.hitboxType=t,c.userData.team=i,c.userData.isFBXModel=r==="fbx",c.userData.isGLBModel=r==="glb",c.userData.hasWheelSockets=o,o?c.userData.wheels=this._attachWheelsToSockets(l,a.wheelModel):c.userData.wheels=this._findWheelMeshes(l),c}_attachWheelsToSockets(e,t){const i=[],s={Wheel_FL:{side:"left",position:"front"},Wheel_FR:{side:"right",position:"front"},Wheel_BL:{side:"left",position:"rear"},Wheel_BR:{side:"right",position:"rear"}};if(!t)return console.warn("⚠️ No wheel model template available for socket attachment"),i;console.log("🔧 Attaching wheels to sockets...");const a={};e.traverse(r=>{const o=r.name;s[o]&&(a[o]=r)});for(const[r,o]of Object.entries(s)){const l=a[r];if(!l){console.warn(` ⚠️ Socket not found: ${r}`);continue}const c=xp(t);c.traverse(u=>{u.isMesh&&(Array.isArray(u.material)?u.material=u.material.map(d=>d.clone()):u.material&&(u.material=u.material.clone()),u.castShadow=!0)}),c.position.set(0,0,0),c.rotation.set(0,0,0),l.add(c),console.log(` ✓ Attached wheel to ${r} (${o.position} ${o.side})`),i.push({mesh:c,steeringPivot:o.position==="front"?l:null,side:o.side,position:o.position,socket:l})}return console.log(`✓ Attached ${i.length} wheels to sockets`),i}_findWheelMeshes(e){const t=[],i={fl:{side:"left",position:"front"},fr:{side:"right",position:"front"},rl:{side:"left",position:"rear"},rr:{side:"right",position:"rear"}};console.log("🔍 Searching for wheels in model...");const s={};e.traverse(a=>{const o=a.name.toLowerCase().match(/^wheel_(fl|fr|rl|rr)_(y|z)$/);if(o){const l=o[1],c=o[2];s[l]||(s[l]={}),s[l][c]=a,console.log(` Found: "${a.name}" (${c==="y"?"wheel mesh":"steering pivot"})`)}});for(const[a,r]of Object.entries(s)){const o=i[a];if(!o)continue;const l=r.y,c=r.z;l&&(a==="fr"&&(l.rotation.z+=Math.PI,console.log(" Fixed FR wheel orientation (rotation.z += PI)")),t.push({mesh:l,steeringPivot:o.position==="front"?c:null,side:o.side,position:o.position}),console.log(`🛞 Wheel ${a.toUpperCase()}: mesh="${l.name}"${c&&o.position==="front"?`, steering="${c.name}"`:""}`))}return t.length===0?(console.warn("⚠️ No wheel meshes found. Expected: Wheel_FL_Y, Wheel_FR_Y, etc."),console.warn(" Listing all objects in model:"),e.traverse(a=>{console.log(` - "${a.name}" (${a.type})`)})):console.log(`✓ Found ${t.length} wheels`),t}dispose(){}}const oF=2,wp=new Map;function lF(n){const e=Si("models/ball/scene.gltf",n);let t=wp.get(e);if(!t){const i=new Og;t=new Promise(s=>{i.load(e,a=>{console.log("✓ Ball model loaded"),s(a.scene)},void 0,a=>{console.error("Failed to load ball model:",a),wp.delete(e),s(null)})}),wp.set(e,t)}return t}class cF{constructor(e,t,i={}){this.scene=e,this.effectsManager=t,this.assetBase=i.assetBase,this.actors={},this.ballActorId=null,this.ballIndicator=null,this.ballVerticalLine=null,this.playerNames=new Set,this.actorToPlayer={},this.actorLinks={},this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.carModelLoader=new rF({assetBase:this.assetBase}),this.pendingCarReplacements=new Map,this._lastGoalScanTime=null,this._firedGoalTimes=new Set,this._p0=new S,this._p1=new S,this._v0=new S,this._v1=new S,this._nextRot=new dt,this._q0=new dt,this._q1=new dt,this._qResult=new dt,this.onPlayerFound=null,this.lastBallTouchTeam=0,this.BALL_TOUCH_DISTANCE=200,this.ballTimeline=[],this.playerTimelineMap={},this.timelineIndices={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer=null,this.animationActions={},this.animationClock=new Eg(!1),this.replayDuration=0,this.useAnimationSystem=!1,this.SMOOTHING_WINDOW=5,this.positionBuffers={},this.rotationBuffers={},this.interpolationEnabled=!0,this.interpolationMethod="lerp",this.smoothingWindowSize=12,this.lastFrameInfo=null,this._lowPassState=new Map,this._lowPassAlpha=.3,this._predictState=new Map,this._predictCorrectionTime=.1,this._smoothingBuffers=new Map,this._adaptiveState=new Map,this.ballModel=null,this._ballModelReplaced=!1,this.ballModelReady=lF(this.assetBase).then(s=>(this.ballModel=s,s!==null))}async waitForBallModel(){const e=await this.ballModelReady;return e&&!this._ballModelReplaced&&this.ballActorId&&this.actors[this.ballActorId]&&(this.replaceBallWithModel(this.ballActorId),this._ballModelReplaced=!0),e}replaceBallWithModel(e){const t=this.actors[e];if(!t||!this.ballModel)return;const i=this.ballModel.clone();i.userData=t.userData,i.position.copy(t.position),i.quaternion.copy(t.quaternion),i.scale.copy(t.scale);const s=92.75;i.scale.set(s,s,s),i.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.scene.remove(t),this.scene.add(i),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),this.actors[e]=i,console.log("✓ Ball replaced with GLTF model")}reset(){Object.values(this.actors).forEach(e=>{this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.actors={},this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null),this.actorToPlayer={},this.actorLinks={},this.playerNames.clear(),this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.pendingCarReplacements.clear(),this._lastGoalScanTime=null,this._firedGoalTimes.clear(),this.ballTimeline=[],this.playerTimelineMap={},this.ballTimelineCorrected=[],this.playerTimelineMapCorrected={},this.ballTimelineFiltered=[],this.playerTimelineMapFiltered={},this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer?.stopAllAction?.(),this.animationMixer=null,this.animationActions={},this.replayDuration=0,this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear(),this._predictState.clear(),this._smoothingBuffers.clear(),this._adaptiveState.clear(),this._ballModelReplaced=!1}resetGoalExplosionPlaybackState(){this._lastGoalScanTime=null,this._firedGoalTimes.clear()}setPlayerTeams(e){this.playerTeams=e}initFromFramework(e){console.log("[ActorManager] Initializing actors from framework..."),this._createBallMesh();const t=e.playerList;t.forEach((i,s)=>{this._createCarMesh(i.name,i.team,s,i.carName,i.hitboxType);const a=this.playerNameToCarActorId[i.name];this.actors[a]}),console.log(`[ActorManager] Created ${t.length} car meshes + 1 ball`)}initInterpolants(e){console.log("[ActorManager] Initializing interpolation system..."),this.ballTimeline=e.ballTimeline||[],this.playerTimelineMap=e.playerTimelines||{},this.ballTimelineCorrected=this._correctTimeShiftedPositions(this.ballTimeline),this.playerTimelineMapCorrected={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapCorrected[s]=this._correctTimeShiftedPositions(a)}),this.ballTimelineFiltered=this._filterBadFrames(this.ballTimeline),this.playerTimelineMapFiltered={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapFiltered[s]=this._filterBadFrames(a)}),this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},Object.keys(this.playerTimelineMap).forEach(s=>{this.timelineIndices.players[s]=0,this.timelineIndicesFiltered.players[s]=0,this.timelineIndicesCorrected.players[s]=0}),this.ballTimeline.length>0&&(this.replayDuration=this.ballTimeline[this.ballTimeline.length-1].time),this.useAnimationSystem&&this._initAnimationSystem(),this.interpolantsInitialized=!0;const t=this.ballTimeline.length-this.ballTimelineFiltered.length,i=this.ballTimelineCorrected._correctedCount||0;console.log(` Ball: ${this.ballTimeline.length} keyframes (${i} corrected, ${t} filtered)`),Object.entries(this.playerTimelineMap).forEach(([s,a])=>{const r=this.playerTimelineMapCorrected[s]?._correctedCount||0;console.log(` ${s}: ${a.length} keyframes (${r} corrected)`)}),console.log(` Replay duration: ${this.replayDuration.toFixed(2)}s`),console.log("[ActorManager] Animation system ready")}_initAnimationSystem(){console.log("[ActorManager] Building Three.js animation clips..."),this.animationMixer=new oT(this.scene);const e=this.actors[this.ballActorId];if(e&&this.ballTimeline.length>0){const t=this._createAnimationClip("ball",this.ballTimeline,e);if(t){const i=this.animationMixer.clipAction(t,e);i.setLoop(Jd),i.clampWhenFinished=!0,this.animationActions.ball=i,console.log(` ✓ Ball animation: ${t.duration.toFixed(2)}s`)}}Object.entries(this.playerTimelineMap).forEach(([t,i])=>{const s=this.playerNameToCarActorId[t],a=this.actors[s];if(a&&i.length>0){const r=this._createAnimationClip(t,i,a);if(r){const o=this.animationMixer.clipAction(r,a);o.setLoop(Jd),o.clampWhenFinished=!0,this.animationActions[t]=o,console.log(` ✓ ${t} animation: ${r.duration.toFixed(2)}s`)}}}),console.log("[ActorManager] Animation clips ready")}_createAnimationClip(e,t,i){if(!t||t.length<2)return null;const s=[],a=[],r=[],o=t[0];o.time>0&&(s.push(0),o.position?a.push(o.position.x,o.position.y,o.position.z):a.push(0,0,0),o.rotation?r.push(o.rotation.x,o.rotation.y,o.rotation.z,o.rotation.w):r.push(0,0,0,1));for(const h of t){if(s.push(h.time),h.position)a.push(h.position.x,h.position.y,h.position.z);else{const f=a.length-3;f>=0?a.push(a[f],a[f+1],a[f+2]):a.push(0,0,0)}if(h.rotation)r.push(h.rotation.x,h.rotation.y,h.rotation.z,h.rotation.w);else{const f=r.length-4;f>=0?r.push(r[f],r[f+1],r[f+2],r[f+3]):r.push(0,0,0,1)}}const l=new Hs(".position",s,a,or),c=new _s(".quaternion",s,r),u=s[s.length-1]-s[0];return new da(e,u,[l,c])}startAnimations(){this.animationMixer&&(Object.values(this.animationActions).forEach(e=>{e.reset(),e.play()}),this.animationClock.start(),console.log("[ActorManager] Animations started"))}pauseAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!0})}resumeAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!1})}seekAnimations(e){this.animationMixer&&(Object.values(this.animationActions).forEach(t=>{t.time=e}),this.animationMixer.setTime(e))}updateAnimations(e){!this.animationMixer||!this.useAnimationSystem||this.animationMixer.update(e)}_subsampleTimeline(e){return!e||e.length<4?e:e.filter((t,i)=>i%2===0)}_getOrCreateSmoothingBuffer(e){return this.positionBuffers[e]||(this.positionBuffers[e]=[],this.rotationBuffers[e]=[]),{positions:this.positionBuffers[e],rotations:this.rotationBuffers[e]}}_smoothPosition(e,t){const i=this._getOrCreateSmoothingBuffer(e).positions;for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_smoothRotation(e,t){const i=this._getOrCreateSmoothingBuffer(e).rotations;for(i.push({x:t.x,y:t.y,z:t.z,w:t.w});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length<3)return t;const s=Math.floor(i.length/2);return i[s]}resetSmoothingBuffers(){this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear()}_findKeyframeIndex(e,t,i=0){if(!e||e.length===0)return-1;if(t<=e[0].time)return 0;if(t>=e[e.length-1].time)return e.length-2;let s=Math.max(0,Math.min(i,e.length-2));if(e[s].time<=t&&e[s+1].time>t)return s;if(s+2t)return s+1;let a=0,r=e.length-2;for(;a<=r;){const o=Math.floor((a+r)/2);if(e[o].time<=t&&e[o+1].time>t)return o;e[o].time>t?r=o-1:a=o+1}return Math.max(0,Math.min(a,e.length-2))}_applySmoothing(e,t){this._smoothingBuffers.has(e)||this._smoothingBuffers.set(e,[]);const i=this._smoothingBuffers.get(e);for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.smoothingWindowSize;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_applyEmaSmoothing(e,t){const i=`ema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{x:t.x,y:t.y,z:t.z}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.05,Math.min(.5,1/this.smoothingWindowSize)),r={x:a*t.x+(1-a)*s.x,y:a*t.y+(1-a)*s.y,z:a*t.z+(1-a)*s.z};return this._smoothingBuffers.set(i,r),r}_applyDoubleEmaSmoothing(e,t){const i=`dema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{level:{x:t.x,y:t.y,z:t.z},trend:{x:0,y:0,z:0}}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.1,Math.min(.6,2/this.smoothingWindowSize)),r=a*.5,o={x:a*t.x+(1-a)*(s.level.x+s.trend.x),y:a*t.y+(1-a)*(s.level.y+s.trend.y),z:a*t.z+(1-a)*(s.level.z+s.trend.z)},l={x:r*(o.x-s.level.x)+(1-r)*s.trend.x,y:r*(o.y-s.level.y)+(1-r)*s.trend.y,z:r*(o.z-s.level.z)+(1-r)*s.trend.z};return s.level=o,s.trend=l,{x:o.x+l.x,y:o.y+l.y,z:o.z+l.z}}_applyWeightedSmoothing(e,t){const i=`wma-${e}`;this._smoothingBuffers.has(i)||this._smoothingBuffers.set(i,[]);const s=this._smoothingBuffers.get(i);for(s.push({x:t.x,y:t.y,z:t.z});s.length>this.smoothingWindowSize;)s.shift();if(s.length===1)return t;let a=0,r=0,o=0,l=0;for(let c=0;cthis.smoothingWindowSize;)s.shift();if(s.length===1)return t;const a=s.length/3;let r=0,o=0,l=0,c=0;for(let u=0;u.001&&(s.derivedVel={x:(t.x-s.lastPos.x)/a,y:(t.y-s.lastPos.y)/a,z:(t.z-s.lastPos.z)/a});const r=Math.sqrt(s.derivedVel.x**2+s.derivedVel.y**2+s.derivedVel.z**2),o=2,l=this.smoothingWindowSize,c=300,u=1500;let d;if(ru)d=o;else{const _=(r-c)/(u-c);d=Math.round(l-_*(l-o))}if(s.buffer.length>=2){const _=s.buffer[s.buffer.length-1],m=s.buffer[s.buffer.length-2],v={x:_.x-m.x,y:_.y-m.y,z:_.z-m.z},y={x:t.x-_.x,y:t.y-_.y,z:t.z-_.z},b=Math.sqrt(v.x**2+v.y**2+v.z**2),T=Math.sqrt(y.x**2+y.y**2+y.z**2);if(b>.1&&T>.1&&(v.x*y.x+v.y*y.y+v.z*y.z)/(b*T)<.5)for(;s.buffer.length>Math.max(2,d/2);)s.buffer.shift()}for(s.buffer.push({x:t.x,y:t.y,z:t.z});s.buffer.length>d;)s.buffer.shift();if(s.lastPos={x:t.x,y:t.y,z:t.z},s.lastTime=i,s.buffer.length===1)return t;let h=0,f=0,p=0,g=0;for(let _=0;_u+10&&(h.z=t.position.z+t.velocity.z*r-.5*c*r*r,h.zu+10&&(p.z=t.position.z+t.velocity.z*o-.5*c*o*o,p.z0&&o>0){const b=d*o;m>b*2&&(v=b*2/m)}const y=_*v+(1-v)*l;return{x:h.x+g.x*y,y:h.y+g.y*y,z:h.z+g.z*y}}_physicsTickInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=a/s;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=(e.velocity.x+t.velocity.x)/2,l=(e.velocity.y+t.velocity.y)/2,c=(e.velocity.z+t.velocity.z)/2,u=e.position.x+o*a,d=e.position.y+l*a,h=e.position.z+c*a,f=e.position.x+o*s,p=e.position.y+l*s,g=e.position.z+c*s,_=t.position.x-f,m=t.position.y-p,v=t.position.z-g;return{x:u+_*r,y:d+m*r,z:h+v*r}}_velocityOnlyInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=s/a;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=e.velocity.x+(t.velocity.x-e.velocity.x)*r/2,l=e.velocity.y+(t.velocity.y-e.velocity.y)*r/2,c=e.velocity.z+(t.velocity.z-e.velocity.z)*r/2;return{x:e.position.x+o*s,y:e.position.y+l*s,z:e.position.z+c*s}}_smartHybridInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=Math.sqrt(e.velocity.x**2+e.velocity.y**2+e.velocity.z**2),l=Math.sqrt(t.velocity.x**2+t.velocity.y**2+t.velocity.z**2);let c=1;o>10&&l>10&&(c=(e.velocity.x*t.velocity.x+e.velocity.y*t.velocity.y+e.velocity.z*t.velocity.z)/(o*l));const u=o>10?Math.abs(l-o)/o:0;if(c<.95||u>.1){const h=r*r*(3-2*r);return{x:e.position.x+(t.position.x-e.position.x)*h,y:e.position.y+(t.position.y-e.position.y)*h,z:e.position.z+(t.position.z-e.position.z)*h}}else{const h=(e.velocity.x+t.velocity.x)/2,f=(e.velocity.y+t.velocity.y)/2,p=(e.velocity.z+t.velocity.z)/2,g=e.position.x+h*s,_=e.position.y+f*s,m=e.position.z+p*s,v=e.position.x+h*a,y=e.position.y+f*a,b=e.position.z+p*a,T=t.position.x-v,x=t.position.y-y,M=t.position.z-b;return{x:g+T*r,y:_+x*r,z:m+M*r}}}_isBadFrame(e,t){if(!e.velocity||!t.velocity||!e.position||!t.position)return!1;const i=t.time-e.time;if(i<.001)return!1;const s=(e.velocity.x+t.velocity.x)/2,a=(e.velocity.y+t.velocity.y)/2,r=(e.velocity.z+t.velocity.z)/2,o=Math.sqrt(s**2+a**2+r**2);if(o<200)return!1;const l=t.position.x-e.position.x,c=t.position.y-e.position.y,u=t.position.z-e.position.z,d=Math.sqrt(l*l+c*c+u*u),h=o*i,f=d/h;return f<.6||f>1.4}_filterBadFrames(e){if(!e||e.length<2)return e;const t=[e[0]];for(let i=1;i0&&a.position&&a.velocity){const o=e[s-1];if(o.position&&o.velocity){const l=a.time-o.time;if(l>.001){const c=(o.velocity.x+a.velocity.x)/2,u=(o.velocity.y+a.velocity.y)/2,d=(o.velocity.z+a.velocity.z)/2,h=Math.sqrt(c**2+u**2+d**2);if(h>100){const f=a.position.x-o.position.x,p=a.position.y-o.position.y,g=a.position.z-o.position.z,_=Math.sqrt(f*f+p*p+g*g),m=h*l,v=_/m;let y=0;v>.15&&v<.35?y=l*.75:v>.4&&v<.6?y=l*.5:v>.65&&v<.85&&(y=l*.25),y>0&&(r.position.x+=a.velocity.x*y,r.position.y+=a.velocity.y*y,r.position.z+=a.velocity.z*y,i++)}}}}t.push(r)}return t._correctedCount=i,t}_timeShiftedInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r}}_velocityAnchoredInterpolate(e,t,i,s,a,r){if(!t.velocity||!i.velocity){const m=(s-t.time)/(i.time-t.time);return{x:t.position.x+(i.position.x-t.position.x)*m,y:t.position.y+(i.position.y-t.position.y)*m,z:t.position.z+(i.position.z-t.position.z)*m}}this._velocityAnchorState||(this._velocityAnchorState=new Map);let o=this._velocityAnchorState.get(e);(!o||Math.abs(s-o.lastTime)>.5||r%10===0)&&(o={anchorPos:{...t.position},anchorTime:t.time,anchorIdx:r,lastTime:s},this._velocityAnchorState.set(e,o)),s-o.anchorTime;let u=o.anchorPos.x,d=o.anchorPos.y,h=o.anchorPos.z;const f=(t.velocity.x+i.velocity.x)/2,p=(t.velocity.y+i.velocity.y)/2,g=(t.velocity.z+i.velocity.z)/2,_=s-t.time;return o.anchorIdx===r?(u=o.anchorPos.x+f*_,d=o.anchorPos.y+p*_,h=o.anchorPos.z+g*_):(u=t.position.x+f*_,d=t.position.y+p*_,h=t.position.z+g*_),o.lastTime=s,{x:u,y:d,z:h}}_hermiteInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=Math.max(0,Math.min(1,a/s)),o={x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};if(!e.velocity||!t.velocity)return o;const l=r*r,c=l*r,u=2*c-3*l+1,d=c-2*l+r,h=-2*c+3*l,f=c-l,p={x:e.velocity.x*s,y:e.velocity.y*s,z:e.velocity.z*s},g={x:t.velocity.x*s,y:t.velocity.y*s,z:t.velocity.z*s},_={x:u*e.position.x+d*p.x+h*t.position.x+f*g.x,y:u*e.position.y+d*p.y+h*t.position.y+f*g.y,z:u*e.position.z+d*p.z+h*t.position.z+f*g.z},m=_.x-o.x,v=_.y-o.y,y=_.z-o.z,b=t.position.x-e.position.x,T=t.position.y-e.position.y,x=t.position.z-e.position.z;return m*m+v*v+y*y>b*b+T*T+x*x?o:_}_physicsSimInterpolate(e,t,i,s=!1){const a=t.time-e.time,r=i-e.time,o=Math.max(0,Math.min(1,r/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*o,y:e.position.y+(t.position.y-e.position.y)*o,z:e.position.z+(t.position.z-e.position.z)*o};const l=-650,c=o*o,u=c*o,d=2*u-3*c+1,h=u-2*c+o,f=-2*u+3*c,p=u-c;let g=e.velocity.y*a,_=t.velocity.y*a;if(s){const m=.5*l*a*a;g+=m*.5,_+=m*.5}return{x:d*e.position.x+h*(e.velocity.x*a)+f*t.position.x+p*(t.velocity.x*a),y:d*e.position.y+h*g+f*t.position.y+p*_,z:d*e.position.z+h*(e.velocity.z*a)+f*t.position.z+p*(t.velocity.z*a)}}getBallPositionAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return s.sleeping?null:{...s.position};if(s.sleeping)return{...s.position};const d=(e-s.time)/r;let h;switch(this.interpolationMethod){case"catmull-rom":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"lerp-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applySmoothing("ball",h);break}case"lerp-ema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyEmaSmoothing("ball",h);break}case"lerp-dema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyDoubleEmaSmoothing("ball",h);break}case"lerp-wma":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyWeightedSmoothing("ball",h);break}case"lerp-gauss":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyGaussianSmoothing("ball",h);break}case"one-euro":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyOneEuroFilter("ball",h);break}case"predict-correct":{h=this._predictCorrectInterpolate("ball",s,a,e);break}case"velocity-smooth":{h=this._velocitySmoothInterpolate("ball",s,a,e,!0);break}case"physics-tick":{h=this._physicsTickInterpolate(s,a,e);break}case"hermite":{h=this._hermiteInterpolate(s,a,e);break}case"physics-sim":{const f=this.ballTimelineCorrected;if(f&&f.length>=2){const p=this._findKeyframeIndex(f,e,this.timelineIndicesCorrected.ball);this.timelineIndicesCorrected.ball=p;const g=f[p],_=f[p+1];if(g?.position&&_?.position){h=this._physicsSimInterpolate(g,_,e,!0);break}}h=this._physicsSimInterpolate(s,a,e,!0);break}case"velocity-only":{h=this._velocityOnlyInterpolate(s,a,e);break}case"smart-hybrid":{h=this._smartHybridInterpolate(s,a,e);break}case"time-shifted":{const f=this.ballTimelineFiltered;if(!f||f.length<2){h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}const p=this._findKeyframeIndex(f,e,this.timelineIndicesFiltered.ball);this.timelineIndicesFiltered.ball=p;const g=f[p],_=f[p+1];if(!g?.position||!_?.position){h=g?.position?{...g.position}:{...s.position};break}const m=_.time-g.time,v=m>0?Math.max(0,Math.min(1,(e-g.time)/m)):0;h={x:g.position.x+(_.position.x-g.position.x)*v,y:g.position.y+(_.position.y-g.position.y)*v,z:g.position.z+(_.position.z-g.position.z)*v};break}case"position-lerp":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-catmull":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyLowPassFilter("ball",h);break}case"adaptive-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyAdaptiveSmoothing("ball",h,e);break}default:{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}}return h}getBallRotationAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return{...s.rotation}}if(s.sleeping)return{...s.rotation};const o=(e-s.time)/r;return this._q0.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w),this._q1.set(a.rotation.x,a.rotation.y,a.rotation.z,a.rotation.w),this._qResult.slerpQuaternions(this._q0,this._q1,o),{x:this._qResult.x,y:this._qResult.y,z:this._qResult.z,w:this._qResult.w}}getPlayerPositionAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const h=this._findKeyframeIndex(d,t,this.timelineIndicesCorrected.players[e]||0);this.timelineIndicesCorrected.players[e]=h;const f=d[h],p=d[h+1];if(f?.position&&p?.position){u=this._physicsSimInterpolate(f,p,t,!1);break}}u=this._physicsSimInterpolate(r,o,t,!1);break}case"velocity-only":{u=this._velocityOnlyInterpolate(r,o,t);break}case"smart-hybrid":{u=this._smartHybridInterpolate(r,o,t);break}case"time-shifted":{const d=this.playerTimelineMapFiltered[e];if(!d||d.length<2){u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}const h=this._findKeyframeIndex(d,t,this.timelineIndicesFiltered.players[e]||0);this.timelineIndicesFiltered.players[e]=h;const f=d[h],p=d[h+1];if(!f?.position||!p?.position){u=f?.position?{...f.position}:{...r.position};break}const g=p.time-f.time,_=g>0?Math.max(0,Math.min(1,(t-f.time)/g)):0;u={x:f.position.x+(p.position.x-f.position.x)*_,y:f.position.y+(p.position.y-f.position.y)*_,z:f.position.z+(p.position.z-f.position.z)*_};break}case"position-lerp":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-catmull":{const d=i[Math.max(0,a-1)],h=i[Math.min(i.length-1,a+2)];d?.position&&h?.position?u=this._catmullRomInterpolate(d.position,r.position,o.position,h.position,c):u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyLowPassFilter(`player-${e}`,u);break}case"adaptive-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyAdaptiveSmoothing(`player-${e}`,u,t);break}default:{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}}return u}getPlayerRotationAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const r=this.getBallPositionAt(t),o=this.getBallRotationAt(t);r?i.position.set(r.x,r.y,r.z):a=!1,o&&i.quaternion.set(o.x,o.y,o.z,o.w)}else i.position.set(s.position.x,s.position.y,s.position.z),i.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);if(i.userData.location.copy(i.position),i.userData.rotation.copy(i.quaternion),i.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),s.angularVelocity&&i.userData.angularVelocity.set(s.angularVelocity.x,s.angularVelocity.y,s.angularVelocity.z),i.userData.sleeping=s.sleeping,i.visible=a&&s.visible!==!1&&!i.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(i.position.x,2,i.position.z),this.ballIndicator.visible=i.visible),this.ballVerticalLine){const o=new Float32Array([i.position.x,2,i.position.z,i.position.x,i.position.y,i.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new ot(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=i.visible}if(i.userData.velocity&&i.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=i.position.distanceTo(c.position);u{const a=this.playerNameToCarActorId[s.name];if(!a)return;const r=this.actors[a];if(!r)return;const o=s.name;if(!this.useAnimationSystem||!this.animationMixer)if(this.interpolantsInitialized&&this.playerTimelineMap[o]){const c=this.getPlayerPositionAt(o,t),u=this.getPlayerRotationAt(o,t);c&&r.position.set(c.x,c.y,c.z),u&&r.quaternion.set(u.x,u.y,u.z,u.w)}else r.position.set(s.position.x,s.position.y,s.position.z),r.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);r.userData.location.copy(r.position),r.userData.rotation.copy(r.quaternion),r.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),r.userData.sleeping=s.sleeping,r.userData.steer=s.steer||0;const l=r.position.length()>.1;r.visible=s.isVisible&&l&&!r.userData.sleeping}),this._updateGoalExplosions(t)}_updateGoalExplosions(e){const t=this.effectsManager,i=t&&t.explosions?t.explosions.goalEvents:null;if(!(i instanceof Map)||i.size===0)return;const s=this._lastGoalScanTime;s!==null&&e=c&&e<=c+oF&&(r=!0,o=!0),s!==null&&s=c&&!this._firedGoalTimes.has(c)){this._firedGoalTimes.add(c);const d=this.getBallPositionAt(c)||a&&a.position||null;d&&this.effectsManager.triggerGoalExplosion(d,l.team)}}a&&(a.userData.isHiddenByGoal=r,r&&(a.visible=!1)),o||this.effectsManager.clearGoalExplosions?.(),this._lastGoalScanTime=e}processFrame(e,t,i,s){if(e){if(e.new_actors&&e.new_actors.forEach(a=>{if(!this.actors[a.actor_id]){const r=t(a.object_id),o=r&&r.includes("Ball"),l=r&&r.includes("Car");if(o||l){let c;o?c=new yn(92.75,16,16):c=new Ci(118,36,84);const u=new Pn({color:o?16777215:Math.random()*16777215}),d=new we(c,u);if(d.userData={location:new S,rotation:new dt,isCar:l,isBall:o,playerId:null,lastUpdateTime:e.time,bodyId:null,hasReceivedUpdate:!1},this.scene.add(d),this.actors[a.actor_id]=d,o){this.ballActorId=a.actor_id,this.ballModel&&this.replaceBallWithModel(a.actor_id);const h=92.75,f=new ni(h*.95,h,32),p=new Ye({color:16777215,side:ct});this.ballIndicator=new we(f,p),this.ballIndicator.rotation.x=-Math.PI/2,this.ballIndicator.visible=!1,this.scene.add(this.ballIndicator);const g=new Ge().setFromPoints([new S(0,0,0),new S(0,1,0)]),_=new Rt({color:16777215,opacity:.5,transparent:!0});this.ballVerticalLine=new In(g,_),this.ballVerticalLine.frustumCulled=!1,this.ballVerticalLine.visible=!1,this.scene.add(this.ballVerticalLine)}else l&&this.effectsManager.createBoostTrail(d,a.actor_id)}}}),e.deleted_actors&&e.deleted_actors.forEach(a=>{if(this.actors[a]){const r=this.actors[a];r.userData.isCar&&this.effectsManager.removeBoostTrail(a),this.scene.remove(r),r.geometry&&r.geometry.dispose(),r.material&&r.material.dispose(),delete this.actors[a],this.ballActorId===a&&(this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null))}}),e.updated_actors&&e.updated_actors.forEach(a=>{const r=this.actors[a.actor_id];a.attribute.TeamLoadout&&(this.actorLoadouts[a.actor_id]=a.attribute.TeamLoadout,r&&r.userData.isCar&&(r.userData.teamLoadout=a.attribute.TeamLoadout,this.resolveBodyId(r,a.actor_id)));const o=t(a.object_id),l=o&&(o.includes("PRI_TA")||o.includes("PlayerReplicationInfo"));if(a.attribute.String&&this.playerNames.has(a.attribute.String)){const c=a.attribute.String;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.Reservation&&this.playerNames.has(a.attribute.Reservation.name)){const c=a.attribute.Reservation.name;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.ActiveActor){const c=a.attribute.ActiveActor.actor;this.actorLinks[a.actor_id]||(this.actorLinks[a.actor_id]=new Set),this.actorLinks[a.actor_id].add(c),r&&r.userData.isCar&&this.checkCarPlayerLink(c,a.actor_id)}if(r&&a.attribute&&a.attribute.RigidBody){const c=a.attribute.RigidBody;if(c.location&&(r.userData.location.set(c.location.x,c.location.z,c.location.y),r.userData.lastUpdateTime=e.time,r.userData.hasReceivedUpdate=!0),c.linear_velocity&&(r.userData.velocity||(r.userData.velocity=new S),r.userData.velocity.set(c.linear_velocity.x,c.linear_velocity.z,c.linear_velocity.y)),c.rotation&&r.userData.rotation.set(c.rotation.x,c.rotation.z,c.rotation.y,-c.rotation.w),c.angular_velocity&&(r.userData.angularVelocity||(r.userData.angularVelocity=new S),r.userData.angularVelocity.set(c.angular_velocity.x,c.angular_velocity.z,c.angular_velocity.y)),c.sleeping!==void 0&&(r.userData.sleeping=c.sleeping,c.sleeping&&(r.userData.velocity&&r.userData.velocity.set(0,0,0),r.userData.angularVelocity&&r.userData.angularVelocity.set(0,0,0))),r.userData.isBall&&r.userData.isHiddenByGoal&&c.location){const u=c.location.x,d=c.location.y,h=c.location.z;Math.sqrt(u*u+d*d+h*h)<500&&(r.userData.isHiddenByGoal=!1)}}}),this.effectsManager.explosions.goalEvents.has(i)){const a=this.effectsManager.explosions.goalEvents.get(i),r=this.actors[this.ballActorId];r&&(s||(this.effectsManager.triggerGoalExplosion(r.position,a.team),console.log(`🎯 GOAL! Explosion at frame ${i} for team ${a.team} by ${a.playerName}`)),r.userData.isHiddenByGoal=!0)}if(this.effectsManager.explosions.demoEvents.has(i)){const a=this.effectsManager.explosions.demoEvents.get(i),r=this.actors[a.victimActorId];if(r){if(!s){const o=r.userData.playerId,l=o&&this.playerTeams&&this.playerTeams[o]||0;this.effectsManager.triggerDemoExplosion(r.position,l),console.log(`💥 DEMO! Explosion at frame ${i} for actor ${a.victimActorId}`)}r.userData.sleeping=!0}}}}resolveBodyId(e,t){if(!e||!e.userData.isCar||!e.userData.teamLoadout)return;let i=0;e.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,e.userData.playerId)&&(i=this.playerTeams[e.userData.playerId]);const s=e.userData.teamLoadout,a=i===1?s.orange?.body:s.blue?.body;a&&e.userData.bodyId!==a&&(e.userData.bodyId=a,this.updateCarHitbox(e,a,t))}updateCarHitbox(e,t,i){const s=Aw(t),a=s?.name||"Octane",r=s?.hitboxType||"Octane";this.replaceCarWithModel(i,e,a,r)}async replaceCarWithModel(e,t,i,s){if(this.carModelLoader.isModelReady(i,s))this._doCarReplacement(e,t,i,s);else{this.pendingCarReplacements.set(e,{oldMesh:t,carName:i,hitboxType:s});try{const a=this.carModelLoader.getModelTypeForCar(i,s);await this.carModelLoader.loadModel(a);const r=this.pendingCarReplacements.get(e);r&&this.actors[e]===r.oldMesh&&this._doCarReplacement(e,r.oldMesh,r.carName,r.hitboxType),this.pendingCarReplacements.delete(e)}catch(a){console.warn(`Failed to load model for ${i} (${s}):`,a),this.pendingCarReplacements.delete(e),t&&(t.visible=!0)}}}_doCarReplacement(e,t,i,s){let a=0;t.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,t.userData.playerId)?a=this.playerTeams[t.userData.playerId]:t.userData.team!==void 0&&(a=t.userData.team);const r=this.carModelLoader.getCarMeshSync(i,s,a);if(!r){console.warn(`Could not get car mesh for ${i} (${s})`);return}const o=r.userData.wheels;r.userData={...t.userData},r.userData.isFBXModel=!0,r.userData.carName=i,r.userData.hitboxType=s,r.userData.wheels=o,r.position.copy(t.position),r.quaternion.copy(t.quaternion),this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material.forEach(c=>c.dispose()):t.material.dispose()),this.scene.add(r),this.actors[e]=r,this.effectsManager.removeBoostTrail(e),this.effectsManager.createBoostTrail(r,e);const l=this.carModelLoader.getModelTypeForCar(i,s);console.log(`🚗 Replaced car ${e} with ${l.toUpperCase()} model (${i}, ${s} hitbox, team ${a===0?"blue":"orange"})`)}checkCarPlayerLink(e,t){const i=this.actorToPlayer[e],s=this.actorLoadouts[e];if(!(!i&&!s))if(t){const a=this.actors[t];a&&a.userData.isCar&&(this.onPlayerFound&&this.onPlayerFound(i),a.userData.playerId=i,this.playerNameToCarActorId[i]=t,s&&(a.userData.teamLoadout=s),this.resolveBodyId(a,t))}else this.actorLinks[e]&&this.actorLinks[e].forEach(a=>{this.checkCarPlayerLink(e,a)})}updateInterpolation(e,t,i){const s=t[i];if(s&&Object.keys(this.actors).forEach(a=>{const r=this.actors[a],o=r.userData.location,l=r.userData.rotation;if(!o||!l||!r.userData.hasReceivedUpdate)return;let c=null,u=0;for(let d=i+1;dp.actor_id==a&&p.attribute&&p.attribute.RigidBody);if(f){c=f,u=h.time;break}}}if(c){const d=r.userData.lastUpdateTime||s.time,h=u;if(h>d){const f=(e-d)/(h-d),p=Math.max(0,Math.min(1,f)),g=h-d||.033,_=c.attribute.RigidBody;if(_.location)if(this._p0.copy(o),this._p1.set(_.location.x,_.location.z,_.location.y),r.userData.sleeping)r.position.copy(o);else{const m=c.attribute.RigidBody;if(r.userData.velocity&&m.linear_velocity){const v=p,y=v*v,b=y*v;if(g>.5)r.position.lerpVectors(o,this._p1,p);else{this._v0.copy(r.userData.velocity).multiplyScalar(g),this._v1.set(m.linear_velocity.x,m.linear_velocity.z,m.linear_velocity.y).multiplyScalar(g);const T=2*b-3*y+1,x=b-2*y+v,M=-2*b+3*y,C=b-y;r.position.set(T*this._p0.x+x*this._v0.x+M*this._p1.x+C*this._v1.x,T*this._p0.y+x*this._v0.y+M*this._p1.y+C*this._v1.y,T*this._p0.z+x*this._v0.z+M*this._p1.z+C*this._v1.z)}}else r.position.lerpVectors(o,this._p1,p)}else r.position.copy(o);_.rotation?(this._nextRot.set(_.rotation.x,_.rotation.z,_.rotation.y,-_.rotation.w),r.quaternion.slerpQuaternions(l,this._nextRot,p)):r.quaternion.copy(l);return}}r.position.copy(o),r.quaternion.copy(l)}),Object.keys(this.actors).forEach(a=>{const r=this.actors[a];if(r&&r.userData.isCar){const l=r.position.length()>.1,c=r.userData.sleeping===!0;r.visible=l&&!c}}),this.ballActorId&&this.actors[this.ballActorId]){const a=this.actors[this.ballActorId];if(a.visible=!a.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(a.position.x,2,a.position.z),this.ballIndicator.visible=a.visible),this.ballVerticalLine){const o=new Float32Array([a.position.x,2,a.position.z,a.position.x,a.position.y,a.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new ot(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=a.visible}if(a.userData.velocity&&a.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=a.position.distanceTo(c.position);if(u{const s=this.actors[i];if(!s||!s.userData.isCar||!s.userData.isFBXModel&&!s.userData.hasWheelSockets||!s.userData.wheels||s.userData.wheels.length===0)return;const a=s.position;let r=this._previousCarPositions.get(i);r||(r=a.clone(),this._previousCarPositions.set(i,r));const l=new S().subVectors(a,r).length();if(this._previousCarPositions.set(i,a.clone()),l<.01)return;const d=Math.min(l/e,.5)*1;let h=0;s.userData.steer!==void 0&&(h=-s.userData.steer*t),s.userData.wheels.forEach(f=>{if(f.socket){const p=f.side==="left"?1:-1;if(f.mesh.rotateZ(p*d),f.position==="front"&&f.steeringPivot){const g=f.side==="left"?-1:1;f.steeringPivot.rotation.y=g*h}}else{const p=f.side==="left"?-1:1;f.mesh.rotateY(p*d),f.position==="front"&&f.steeringPivot&&(f.steeringPivot.rotation.z=h)}})})}resetWheelTracking(){this._previousCarPositions&&this._previousCarPositions.clear()}updateSupersonicState(e,t,i){const s=this.playerNameToCarActorId[e];if(!s)return;const a=this.actors[s];if(!a||!a.userData.isCar)return;const r=a.userData.velocity||new S(0,0,0);this.effectsManager.updateSupersonicTrail(s,t,a.position,a.quaternion,r,i)}setInterpolationEnabled(e){this.interpolationEnabled=e,console.log(`[ActorManager] Interpolation ${e?"enabled":"disabled"}`)}setInterpolationMethod(e){if(!["lerp","hermite","catmull-rom","predict-correct","velocity-smooth","physics-tick","velocity-only","smart-hybrid","time-shifted","lerp-smooth","lerp-ema","lerp-dema","lerp-wma","lerp-gauss","one-euro","position-lerp","position-catmull","position-smooth","adaptive-smooth"].includes(e)){console.warn(`[ActorManager] Invalid interpolation method: ${e}`);return}this.interpolationMethod=e,this._smoothingBuffers.clear(),this._lowPassState.clear(),this._adaptiveState.clear(),this.resetSmoothingBuffers(),console.log(`[ActorManager] Interpolation method set to: ${e}`)}setSmoothingWindowSize(e){this.smoothingWindowSize=Math.max(1,Math.min(20,e)),this._smoothingBuffers.clear(),console.log(`[ActorManager] Smoothing window size set to: ${this.smoothingWindowSize}`)}getInterpolationSettings(){return{enabled:this.interpolationEnabled,method:this.interpolationMethod,smoothingWindowSize:this.smoothingWindowSize}}clearSmoothingBuffers(){this._smoothingBuffers.clear()}getFrameInfo(){return this.lastFrameInfo}createBallMeshForLive(){const e=new yn(92.75,16,16),t=new Pn({color:16777215}),i=new we(e,t);if(i.castShadow=!0,i.receiveShadow=!0,i.userData={location:new S,rotation:new dt,velocity:new S,angularVelocity:new S,isCar:!1,isBall:!0,playerId:null,sleeping:!1,isHiddenByGoal:!1},this.scene.add(i),this.ballModel){const s=this.ballModel.clone();s.position.copy(i.position),s.quaternion.copy(i.quaternion),s.userData={...i.userData};const a=92.75;return s.scale.set(a,a,a),s.traverse(r=>{r.isMesh&&(r.castShadow=!0,r.receiveShadow=!0)}),this.scene.remove(i),this.scene.add(s),i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose(),console.log("✓ Live ball created with GLTF model"),s}return i}createCarMeshForLive(e,t,i,s=null){const a=`live_car_${t}`,r=new Ci(118,36,84),o=e===0?3381759:16737792,l=new Pn({color:o}),c=new we(r,l);return c.castShadow=!0,c.receiveShadow=!0,c.visible=!1,c.userData={location:new S,rotation:new dt,velocity:new S,angularVelocity:new S,isCar:!0,isBall:!1,playerId:i,team:e,sleeping:!1,steer:0,bodyId:s,liveActorId:a},this.scene.add(c),this.actors[a]=c,this.playerNameToCarActorId[i]=a,this.effectsManager.createBoostTrail(c,a),s&&s>0?this.updateCarHitbox(c,s,a):this.replaceCarWithModel(a,c,"Octane","Octane"),console.log(`[ActorManager] Created live car for ${i} (team ${e===0?"blue":"orange"}, bodyId: ${s})`),c}updateBoostParticlesLive(e,t,i,s){const a=t&&i>0,r=s.userData.velocity||new S(0,0,0);this.effectsManager.updateBoostTrail(e,a,s.position,s.quaternion,r)}updateSupersonicTrailLive(e,t,i,s){const a=s.userData.velocity||new S(0,0,0);this.effectsManager.updateSupersonicTrail(e,t,s.position,s.quaternion,a,i)}removeLiveCar(e){const t=this.actors[e];t&&(this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),delete this.actors[e],this.effectsManager.removeBoostTrail(e))}removeLiveBall(e){e&&(this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose())}}function Ms(n,e,t){t===-1?(n.clearUpdateRanges?.(),n.addUpdateRange?.(0,n.count*n.itemSize)):n.addUpdateRange?(n.clearUpdateRanges(),n.addUpdateRange(e,t)):(n.updateRange.offset=e,n.updateRange.count=t)}class pt extends Qe{constructor(e,t){super(),this.active=!1,this.orientToMovement=!1,t&&(this.orientToMovement=!0),this.scene=e,this.geometry=null,this.mesh=null,this.nodeCenters=null,this.lastNodeCenter=null,this.currentNodeCenter=null,this.lastOrientationDir=null,this.nodeIDs=null,this.currentLength=0,this.currentEnd=0,this.currentNodeID=0,this.advanceFrequency=60,this.advancePeriod=1/this.advanceFrequency,this.lastAdvanceTime=0,this.paused=!1,this.pauseAdvanceUpdateTimeDiff=0,this._internalTime=0,this._useInternalTime=!1}setAdvanceFrequency(e){this.advanceFrequency=e,this.advancePeriod=1/this.advanceFrequency}initialize(e,t,i,s,a,r){this.deactivate(),this.destroyMesh(),this.length=t>0?t+1:0,this.dragTexture=i?1:0,this.targetObject=r,this.initializeLocalHeadGeometry(s,a),this.nodeIDs=[],this.nodeCenters=[];for(let o=0;o=this.length?0:this.currentEnd+1;if(i?this.updateNodePositionsFromTransformMatrix(s,i):this.updateNodePositionsFromOrientationTangent(s,t.position,t.tangent),this.currentLength>=1&&(this.connectNodes(this.currentEnd,s),this.currentLength>=this.length)){const a=this.currentEnd+1>=this.length?0:this.currentEnd+1;this.disconnectNodes(a)}this.currentLength=this.length&&(this.currentEnd=0),this.currentLength>=1&&(this.currentLengththis.advancePeriod?(this.advance(),this.lastAdvanceTime=t):this.updateHead()}}updateHead=(function(){const e=new Me;return function(){this.currentEnd<0||(this.targetObject.updateMatrixWorld(),e.copy(this.targetObject.matrixWorld),this.updateNodePositionsFromTransformMatrix(this.currentEnd,e))}})();updateNodeID(e,t){this.nodeIDs[e]=t;const i=this.geometry.getAttribute("nodeID"),s=this.geometry.getAttribute("nodeVertexID");for(let a=0;a1e-4)){this.lastOrientationDir||(this.lastOrientationDir=new S),t.setFromUnitVectors(a,r),s.copy(this.currentNodeCenter);for(let f=0;fe.add(a)),this.mainTrail=this._createMainTrail(),this.secondaryTrails=this._createSecondaryTrails(),this._updateColors(),this._updateIntensity(),this.mainTrail.activate(),this.secondaryTrails.forEach(a=>a.activate())}_createMainTrail(){const e=new pt(this.scene,!1),t=tv(),i=this.config.mainTrailWidth,s=[new S(0,-i,0),new S(0,i,0),new S(-i,0,0),new S(i,0,0),new S(0,0,-i),new S(0,0,i)];return e.initialize(t,this.config.trailLength,!1,0,s,this.mainTarget),e.setAdvanceFrequency(60),e.mesh&&(e.mesh.frustumCulled=!1,e.mesh.renderOrder=100),e}_createSecondaryTrails(){const e=[];for(let t=0;t<4;t++){const i=new pt(this.scene,!1),s=tv(),a=this.config.secondaryTrailWidth,r=[new S(0,-a,0),new S(0,a,0),new S(-a,0,0),new S(a,0,0),new S(0,0,-a),new S(0,0,a)];i.initialize(s,this.config.trailLength,!1,0,r,this.secondaryTargets[t]),i.setAdvanceFrequency(60),i.mesh&&(i.mesh.frustumCulled=!1,i.mesh.renderOrder=100),e.push(i)}return e}_updateColors(){const e=this.teamColors[this.team]||this.teamColors[0];this.mainTrail?.material&&(this.mainTrail.material.uniforms.headColor.value.copy(e.head),this.mainTrail.material.uniforms.tailColor.value.copy(e.tail));const t=e.head.clone();t.w=e.head.w*.85;const i=e.tail.clone();this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.headColor.value.copy(t),s.material.uniforms.tailColor.value.copy(i))})}_updateIntensity(){this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=this.intensity),this.secondaryTrails.forEach(e=>{e?.material&&(e.material.uniforms.intensityMultiplier.value=this.intensity)})}setTeam(e){this.team!==e&&(this.team=e,this._updateColors())}setIntensity(e){this.intensity=e,this.dying||this._updateIntensity()}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.mainTrail.pause(),this.secondaryTrails.forEach(e=>e.pause()))}updatePosition(e,t,i){if(this.dying)return;const s=t.clone().normalize();this.mainTarget.position.copy(e),this.mainTarget.updateMatrixWorld();for(let a=0;a<4;a++){const o=a/4*Math.PI*2+i,l=new S(Math.cos(o)*this.config.secondaryTrailOffset,Math.sin(o)*this.config.secondaryTrailOffset,0);if(s.lengthSq()>.001){const c=new S(0,0,1),u=new dt;u.setFromUnitVectors(c,s),l.applyQuaternion(u)}this.secondaryTargets[a].position.copy(e).add(l),this.secondaryTargets[a].updateMatrixWorld()}}update(e){if(this.dying){this.deathTime+=e;const t=Math.min(1,this.deathTime/this.maxDeathTime),i=this.intensity*(1-t);this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=i),this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.intensityMultiplier.value=i)}),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.mainTrail.isActive&&this.mainTrail.update(e),this.secondaryTrails.forEach(t=>{t.isActive&&t.update(e)})}dispose(){this.mainTrail.deactivate(),this.secondaryTrails.forEach(e=>e.deactivate()),this.mainTrail.geometry&&this.mainTrail.geometry.dispose(),this.mainTrail.material&&this.mainTrail.material.dispose(),this.secondaryTrails.forEach(e=>{e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.scene.remove(this.mainTarget),this.secondaryTargets.forEach(e=>this.scene.remove(e))}}class eF{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.ballRadius=92.75,this.config={trailLength:60,mainTrailWidth:15,secondaryTrailWidth:1.5,secondaryTrailOffset:this.ballRadius*.7},this.rotationSpeed=Math.PI/3,this.currentRotation=0,this.minVelocity=1500,this.maxVelocity=6e3,this.minIntensity=.3,this.maxIntensity=1,this.wasEmitting=!1,this.segments=[],this.currentSegment=null,this.currentIntensity=1}_calculateIntensity(e){if(e<=this.minVelocity)return this.minIntensity;if(e>=this.maxVelocity)return this.maxIntensity;const t=(e-this.minVelocity)/(this.maxVelocity-this.minVelocity);return this.minIntensity+t*(this.maxIntensity-this.minIntensity)}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null))}activate(){this.active||(this.active=!0,this.currentSegment=null,this.wasEmitting=!1)}deactivate(){this.active&&(this.active=!1,this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null))}emit(e,t,i){const s=t.length();if(!(s>=this.minVelocity)){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasEmitting=!1;return}this.currentIntensity=this._calculateIntensity(s),this.active||this.activate(),!this.wasEmitting||!this.currentSegment?(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new QO(this.scene,this.team,this.config,this.currentIntensity),this.segments.push(this.currentSegment)):this.currentSegment.setIntensity(this.currentIntensity),this.wasEmitting=!0,this.currentRotation+=this.rotationSpeed*i,this.currentRotation>Math.PI*2&&(this.currentRotation-=Math.PI*2),this.currentSegment.updatePosition(e,t,this.currentRotation)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}reset(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null,this.currentRotation=0,this.wasEmitting=!1}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}let du=null,hu=null,fu=null,nv=!1;function tF(){nv||(aF(),rF(),oF(),nv=!0)}let di=null;class nF{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.sphereGeo=new yn(1,16,12),this.coreGeo=new yn(1,12,8),this.ringGeo=new ni(.5,1,32),this.particleGeo=new Dn(1,1),this.coreMaterial=new Ye({color:16777130,transparent:!0,opacity:.9,blending:Ht,side:ct,depthWrite:!1}),this.sphereMaterial=new Ye({color:16737792,transparent:!0,opacity:.5,blending:Ht,side:ct,depthWrite:!1}),this.ringMaterial=new Ye({color:16746496,transparent:!0,opacity:.7,blending:Ht,side:ct,depthWrite:!1}),this.particleMaterial=new Ye({color:16763904,transparent:!0,opacity:.8,blending:Ht,side:ct,depthWrite:!1});for(let e=0;e!i.active);t||(t=this.explosions[0],this.resetExplosion(t)),t.active=!0,t.elapsed=0,t.position.copy(e),t.container.position.copy(e),t.container.visible=!0,t.core.scale.set(.1,.1,.1),t.coreMat.opacity=1,t.sphere.scale.set(.1,.1,.1),t.sphere.material.opacity=.6,t.ring.scale.set(.1,.1,.1),t.ring.material.opacity=.8,t.particleMat.opacity=.9,t.particles.forEach((i,s)=>{i.mesh.position.set(0,0,0);const a=s/12*Math.PI*2,r=(Math.random()-.3)*Math.PI,o=350+Math.random()*250;i.velocity.set(Math.cos(a)*Math.cos(r)*o,Math.sin(r)*o+100,Math.sin(a)*Math.cos(r)*o)})}resetExplosion(e){e.active=!1,e.container.visible=!1}update(e){for(const t of this.explosions){if(!t.active)continue;t.elapsed+=e;const i=t.elapsed/t.duration;if(i>=1){this.resetExplosion(t);continue}const s=30+i*80;t.core.scale.set(s,s,s),t.coreMat.opacity=1*Math.pow(1-i,2);const a=50+i*200;t.sphere.scale.set(a,a,a),t.sphere.material.opacity=.6*(1-i);const r=80+i*350;t.ring.scale.set(r,r,r),t.ring.material.opacity=.8*(1-i*i),t.particleMat.opacity=.9*(1-i);for(const o of t.particles)o.mesh.position.add(o.velocity.clone().multiplyScalar(e)),o.velocity.y-=300*e,this.camera&&o.mesh.lookAt(this.camera.position)}}dispose(){for(const e of this.explosions)this.scene.remove(e.container),e.coreMat.dispose(),e.sphere.material.dispose(),e.ring.material.dispose(),e.particleMat.dispose();this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.coreMaterial.dispose(),this.sphereMaterial.dispose(),this.ringMaterial.dispose(),this.particleMaterial.dispose()}}function TT(n,e=null,t=null){return di&&di.scene!==n&&(di.dispose?.(),di=null),di||(di=new nF(n,e,t)),e&&t&&!di.warmedUp&&(di.renderer=e,di.camera=t,di.warmup()),di}function iF(n,e,t){TT(n,e,t),MT(n,e,t)}let Bn=null;const iv={0:{core:6737151,sphere:35071,ring:43775,particles:8969727},1:{core:16768358,sphere:16737792,ring:16746496,particles:16755268}};class sF{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.coreGeo=new yn(1,16,12),this.sphereGeo=new yn(1,20,14),this.ringGeo=new ni(.3,1,48),this.particleGeo=new Dn(1,1),this.rayGeo=new Dn(1,1);for(let e=0;e!l.active);i||(i=this.explosions[0],this.resetExplosion(i));const s=i.materials[t]||i.materials[0];i.core.material=s.core,i.core2.material=s.core.clone(),i.core3.material=s.sphere.clone(),i.sphere.material=s.sphere;for(const l of i.rings)l.mesh.material=s.ring.clone();for(const l of i.rays)l.mesh.material=s.rays.clone();for(const l of i.particles)l.mesh.material=s.particles.clone();i.active=!0,i.elapsed=0,i.currentTeam=t,i.position.copy(e),i.container.position.copy(e),i.container.visible=!0,i.rotationOffset=0,i.core.scale.set(.1,.1,.1),i.core.material.opacity=1,i.core2.scale.set(.1,.1,.1),i.core2.material.opacity=.8,i.core3.scale.set(.1,.1,.1),i.core3.material.opacity=.5,i.sphere.scale.set(.1,.1,.1),i.sphere.material.opacity=.4;for(const l of i.rings)l.mesh.scale.set(.1,.1,.1),l.mesh.material.opacity=.9;for(let l=0;l=i.particles.length);d++){const h=i.particles[o];h.mesh.position.set(0,0,0),h.mesh.material.opacity=1;const f=h.initialScale;h.mesh.scale.set(f,f,f);const p=c+(Math.random()-.5)*.3,g=u+(Math.random()-.5)*.2,v=1800*(1-d/r*.5)+Math.random()*300;h.velocity.set(Math.cos(p)*Math.cos(g)*v,Math.sin(g)*v+300,Math.sin(p)*Math.cos(g)*v),h.delay=d*.02,o++}}for(;o=1){this.resetExplosion(t);continue}t.rotationOffset+=e*2;const s=this.easeOutElastic(Math.min(i*2,1)),a=this.easeOutExpo(i),r=this.easeOutBack(Math.min(i*1.5,1)),o=1+Math.sin(t.elapsed*15)*.15*(1-i),l=(150+s*300)*o;t.core.scale.set(l,l,l),t.core.material.opacity=1*Math.pow(1-i,1.2);const c=1+Math.sin(t.elapsed*12+1)*.12*(1-i),u=(200+r*400)*c;t.core2.scale.set(u,u,u),t.core2.material.opacity=.7*Math.pow(1-i,1.5);const d=300+a*600;t.core3.scale.set(d,d,d),t.core3.material.opacity=.4*Math.pow(1-i,2);const h=400+a*1200;t.sphere.scale.set(h,h,h),t.sphere.material.opacity=.3*(1-i*i);for(let g=0;g0){g.mesh.position.add(g.velocity.clone().multiplyScalar(e)),g.velocity.y-=600*e,g.velocity.multiplyScalar(.995);const m=Math.max(.3,1-i*.7),v=g.initialScale*m;g.mesh.scale.set(v,v,v)}g.mesh.material.opacity=1*Math.pow(1-i,1.2),this.camera&&g.mesh.lookAt(this.camera.position)}}}dispose(){for(const e of this.explosions){this.scene.remove(e.container);for(const t of Object.values(e.materials))t.core.dispose(),t.sphere.dispose(),t.ring.dispose(),t.particles.dispose(),t.rays.dispose()}this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.rayGeo.dispose()}}function MT(n,e=null,t=null){return Bn&&Bn.scene!==n&&(Bn.dispose?.(),Bn=null),Bn||(Bn=new sF(n,e,t)),e&&t&&!Bn.warmedUp&&(Bn.renderer=e,Bn.camera=t,Bn.warmup()),Bn}function aF(){if(du)return du;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createRadialGradient(32,32,0,32,32,32);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.2,"rgba(255,255,255,0.8)"),t.addColorStop(.5,"rgba(255,255,255,0.3)"),t.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=t,e.fillRect(0,0,64,64),du=new oc(n),du}function rF(){if(hu)return hu;const n=document.createElement("canvas");n.width=128,n.height=128;const e=n.getContext("2d"),t=e.createRadialGradient(64,64,0,64,64,64);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.1,"rgba(255,200,100,0.9)"),t.addColorStop(.4,"rgba(255,100,50,0.4)"),t.addColorStop(.7,"rgba(255,50,0,0.1)"),t.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=t,e.fillRect(0,0,128,128),hu=new oc(n),hu}function oF(){if(fu)return fu;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createImageData(64,64);for(let i=0;ie.add(a)),this.mainTrail=this._createMainTrail(),this.secondaryTrails=this._createSecondaryTrails(),this._updateColors(),this._updateIntensity(),this.mainTrail.activate(),this.secondaryTrails.forEach(a=>a.activate())}_createMainTrail(){const e=new pt(this.scene,!1),t=lv(),i=this.config.mainTrailWidth,s=[new S(0,-i,0),new S(0,i,0),new S(-i,0,0),new S(i,0,0),new S(0,0,-i),new S(0,0,i)];return e.initialize(t,this.config.trailLength,!1,0,s,this.mainTarget),e.setAdvanceFrequency(60),e.mesh&&(e.mesh.frustumCulled=!1,e.mesh.renderOrder=100),e}_createSecondaryTrails(){const e=[];for(let t=0;t<4;t++){const i=new pt(this.scene,!1),s=lv(),a=this.config.secondaryTrailWidth,r=[new S(0,-a,0),new S(0,a,0),new S(-a,0,0),new S(a,0,0),new S(0,0,-a),new S(0,0,a)];i.initialize(s,this.config.trailLength,!1,0,r,this.secondaryTargets[t]),i.setAdvanceFrequency(60),i.mesh&&(i.mesh.frustumCulled=!1,i.mesh.renderOrder=100),e.push(i)}return e}_updateColors(){const e=this.teamColors[this.team]||this.teamColors[0];this.mainTrail?.material&&(this.mainTrail.material.uniforms.headColor.value.copy(e.head),this.mainTrail.material.uniforms.tailColor.value.copy(e.tail));const t=e.head.clone();t.w=e.head.w*.85;const i=e.tail.clone();this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.headColor.value.copy(t),s.material.uniforms.tailColor.value.copy(i))})}_updateIntensity(){this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=this.intensity),this.secondaryTrails.forEach(e=>{e?.material&&(e.material.uniforms.intensityMultiplier.value=this.intensity)})}setTeam(e){this.team!==e&&(this.team=e,this._updateColors())}setIntensity(e){this.intensity=e,this.dying||this._updateIntensity()}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.mainTrail.pause(),this.secondaryTrails.forEach(e=>e.pause()))}updatePosition(e,t,i){if(this.dying)return;const s=t.clone().normalize();this.mainTarget.position.copy(e),this.mainTarget.updateMatrixWorld();for(let a=0;a<4;a++){const o=a/4*Math.PI*2+i,l=new S(Math.cos(o)*this.config.secondaryTrailOffset,Math.sin(o)*this.config.secondaryTrailOffset,0);if(s.lengthSq()>.001){const c=new S(0,0,1),u=new dt;u.setFromUnitVectors(c,s),l.applyQuaternion(u)}this.secondaryTargets[a].position.copy(e).add(l),this.secondaryTargets[a].updateMatrixWorld()}}update(e){if(this.dying){this.deathTime+=e;const t=Math.min(1,this.deathTime/this.maxDeathTime),i=this.intensity*(1-t);this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=i),this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.intensityMultiplier.value=i)}),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.mainTrail.isActive&&this.mainTrail.update(e),this.secondaryTrails.forEach(t=>{t.isActive&&t.update(e)})}dispose(){this.mainTrail.deactivate(),this.secondaryTrails.forEach(e=>e.deactivate()),this.mainTrail.geometry&&this.mainTrail.geometry.dispose(),this.mainTrail.material&&this.mainTrail.material.dispose(),this.secondaryTrails.forEach(e=>{e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.scene.remove(this.mainTarget),this.secondaryTargets.forEach(e=>this.scene.remove(e))}}class dF{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.ballRadius=92.75,this.config={trailLength:60,mainTrailWidth:15,secondaryTrailWidth:1.5,secondaryTrailOffset:this.ballRadius*.7},this.rotationSpeed=Math.PI/3,this.currentRotation=0,this.minVelocity=1500,this.maxVelocity=6e3,this.minIntensity=.3,this.maxIntensity=1,this.wasEmitting=!1,this.segments=[],this.currentSegment=null,this.currentIntensity=1}_calculateIntensity(e){if(e<=this.minVelocity)return this.minIntensity;if(e>=this.maxVelocity)return this.maxIntensity;const t=(e-this.minVelocity)/(this.maxVelocity-this.minVelocity);return this.minIntensity+t*(this.maxIntensity-this.minIntensity)}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null))}activate(){this.active||(this.active=!0,this.currentSegment=null,this.wasEmitting=!1)}deactivate(){this.active&&(this.active=!1,this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null))}emit(e,t,i){const s=t.length();if(!(s>=this.minVelocity)){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasEmitting=!1;return}this.currentIntensity=this._calculateIntensity(s),this.active||this.activate(),!this.wasEmitting||!this.currentSegment?(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new uF(this.scene,this.team,this.config,this.currentIntensity),this.segments.push(this.currentSegment)):this.currentSegment.setIntensity(this.currentIntensity),this.wasEmitting=!0,this.currentRotation+=this.rotationSpeed*i,this.currentRotation>Math.PI*2&&(this.currentRotation-=Math.PI*2),this.currentSegment.updatePosition(e,t,this.currentRotation)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}reset(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null,this.currentRotation=0,this.wasEmitting=!1}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}let mu=null,_u=null,gu=null,cv=!1;function hF(){cv||(_F(),gF(),yF(),cv=!0)}let di=null;class fF{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.sphereGeo=new yn(1,16,12),this.coreGeo=new yn(1,12,8),this.ringGeo=new ni(.5,1,32),this.particleGeo=new kn(1,1),this.coreMaterial=new Ye({color:16777130,transparent:!0,opacity:.9,blending:Ht,side:ct,depthWrite:!1}),this.sphereMaterial=new Ye({color:16737792,transparent:!0,opacity:.5,blending:Ht,side:ct,depthWrite:!1}),this.ringMaterial=new Ye({color:16746496,transparent:!0,opacity:.7,blending:Ht,side:ct,depthWrite:!1}),this.particleMaterial=new Ye({color:16763904,transparent:!0,opacity:.8,blending:Ht,side:ct,depthWrite:!1});for(let e=0;e!i.active);t||(t=this.explosions[0],this.resetExplosion(t)),t.active=!0,t.elapsed=0,t.position.copy(e),t.container.position.copy(e),t.container.visible=!0,t.core.scale.set(.1,.1,.1),t.coreMat.opacity=1,t.sphere.scale.set(.1,.1,.1),t.sphere.material.opacity=.6,t.ring.scale.set(.1,.1,.1),t.ring.material.opacity=.8,t.particleMat.opacity=.9,t.particles.forEach((i,s)=>{i.mesh.position.set(0,0,0);const a=s/12*Math.PI*2,r=(Math.random()-.3)*Math.PI,o=350+Math.random()*250;i.velocity.set(Math.cos(a)*Math.cos(r)*o,Math.sin(r)*o+100,Math.sin(a)*Math.cos(r)*o)})}resetExplosion(e){e.active=!1,e.container.visible=!1}update(e){for(const t of this.explosions){if(!t.active)continue;t.elapsed+=e;const i=t.elapsed/t.duration;if(i>=1){this.resetExplosion(t);continue}const s=30+i*80;t.core.scale.set(s,s,s),t.coreMat.opacity=1*Math.pow(1-i,2);const a=50+i*200;t.sphere.scale.set(a,a,a),t.sphere.material.opacity=.6*(1-i);const r=80+i*350;t.ring.scale.set(r,r,r),t.ring.material.opacity=.8*(1-i*i),t.particleMat.opacity=.9*(1-i);for(const o of t.particles)o.mesh.position.add(o.velocity.clone().multiplyScalar(e)),o.velocity.y-=300*e,this.camera&&o.mesh.lookAt(this.camera.position)}}dispose(){for(const e of this.explosions)this.scene.remove(e.container),e.coreMat.dispose(),e.sphere.material.dispose(),e.ring.material.dispose(),e.particleMat.dispose();this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.coreMaterial.dispose(),this.sphereMaterial.dispose(),this.ringMaterial.dispose(),this.particleMaterial.dispose()}}function LT(n,e=null,t=null){return di&&di.scene!==n&&(di.dispose?.(),di=null),di||(di=new fF(n,e,t)),e&&t&&!di.warmedUp&&(di.renderer=e,di.camera=t,di.warmup()),di}function pF(n,e,t){LT(n,e,t),kT(n,e,t)}let Bn=null;const uv={0:{core:6737151,sphere:35071,ring:43775,particles:8969727},1:{core:16768358,sphere:16737792,ring:16746496,particles:16755268}};class mF{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.coreGeo=new yn(1,16,12),this.sphereGeo=new yn(1,20,14),this.ringGeo=new ni(.3,1,48),this.particleGeo=new kn(1,1),this.rayGeo=new kn(1,1);for(let e=0;e!l.active);i||(i=this.explosions[0],this.resetExplosion(i));const s=i.materials[t]||i.materials[0];i.core.material=s.core,i.core2.material=s.core.clone(),i.core3.material=s.sphere.clone(),i.sphere.material=s.sphere;for(const l of i.rings)l.mesh.material=s.ring.clone();for(const l of i.rays)l.mesh.material=s.rays.clone();for(const l of i.particles)l.mesh.material=s.particles.clone();i.active=!0,i.elapsed=0,i.currentTeam=t,i.position.copy(e),i.container.position.copy(e),i.container.visible=!0,i.rotationOffset=0,i.core.scale.set(.1,.1,.1),i.core.material.opacity=1,i.core2.scale.set(.1,.1,.1),i.core2.material.opacity=.8,i.core3.scale.set(.1,.1,.1),i.core3.material.opacity=.5,i.sphere.scale.set(.1,.1,.1),i.sphere.material.opacity=.4;for(const l of i.rings)l.mesh.scale.set(.1,.1,.1),l.mesh.material.opacity=.9;for(let l=0;l=i.particles.length);d++){const h=i.particles[o];h.mesh.position.set(0,0,0),h.mesh.material.opacity=1;const f=h.initialScale;h.mesh.scale.set(f,f,f);const p=c+(Math.random()-.5)*.3,g=u+(Math.random()-.5)*.2,v=1800*(1-d/r*.5)+Math.random()*300;h.velocity.set(Math.cos(p)*Math.cos(g)*v,Math.sin(g)*v+300,Math.sin(p)*Math.cos(g)*v),h.delay=d*.02,o++}}for(;o=1){this.resetExplosion(t);continue}t.rotationOffset+=e*2;const s=this.easeOutElastic(Math.min(i*2,1)),a=this.easeOutExpo(i),r=this.easeOutBack(Math.min(i*1.5,1)),o=1+Math.sin(t.elapsed*15)*.15*(1-i),l=(150+s*300)*o;t.core.scale.set(l,l,l),t.core.material.opacity=1*Math.pow(1-i,1.2);const c=1+Math.sin(t.elapsed*12+1)*.12*(1-i),u=(200+r*400)*c;t.core2.scale.set(u,u,u),t.core2.material.opacity=.7*Math.pow(1-i,1.5);const d=300+a*600;t.core3.scale.set(d,d,d),t.core3.material.opacity=.4*Math.pow(1-i,2);const h=400+a*1200;t.sphere.scale.set(h,h,h),t.sphere.material.opacity=.3*(1-i*i);for(let g=0;g0){g.mesh.position.add(g.velocity.clone().multiplyScalar(e)),g.velocity.y-=600*e,g.velocity.multiplyScalar(.995);const m=Math.max(.3,1-i*.7),v=g.initialScale*m;g.mesh.scale.set(v,v,v)}g.mesh.material.opacity=1*Math.pow(1-i,1.2),this.camera&&g.mesh.lookAt(this.camera.position)}}}dispose(){for(const e of this.explosions){this.scene.remove(e.container);for(const t of Object.values(e.materials))t.core.dispose(),t.sphere.dispose(),t.ring.dispose(),t.particles.dispose(),t.rays.dispose()}this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.rayGeo.dispose()}}function kT(n,e=null,t=null){return Bn&&Bn.scene!==n&&(Bn.dispose?.(),Bn=null),Bn||(Bn=new mF(n,e,t)),e&&t&&!Bn.warmedUp&&(Bn.renderer=e,Bn.camera=t,Bn.warmup()),Bn}function _F(){if(mu)return mu;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createRadialGradient(32,32,0,32,32,32);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.2,"rgba(255,255,255,0.8)"),t.addColorStop(.5,"rgba(255,255,255,0.3)"),t.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=t,e.fillRect(0,0,64,64),mu=new dc(n),mu}function gF(){if(_u)return _u;const n=document.createElement("canvas");n.width=128,n.height=128;const e=n.getContext("2d"),t=e.createRadialGradient(64,64,0,64,64,64);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.1,"rgba(255,200,100,0.9)"),t.addColorStop(.4,"rgba(255,100,50,0.4)"),t.addColorStop(.7,"rgba(255,50,0,0.1)"),t.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=t,e.fillRect(0,0,128,128),_u=new dc(n),_u}function yF(){if(gu)return gu;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createImageData(64,64);for(let i=0;i=o.maxLife){o.active=!1,i[r]=0,s[r]=0;continue}t[r*3]+=o.velocity.x*e,t[r*3+1]+=o.velocity.y*e,t[r*3+2]+=o.velocity.z*e;const l=o.life/o.maxLife;i[r]=Math.pow(1-l,.5);const c=o.initialSize||3;s[r]=c*(1-l*.7),a[r*3]=1,a[r*3+1]=Math.max(.2,.9-l*.7),a[r*3+2]=Math.max(0,.4-l*.4),o.velocity.y+=20*e}this.geometry.attributes.position.needsUpdate=!0,this.geometry.attributes.alpha.needsUpdate=!0,this.geometry.attributes.size.needsUpdate=!0,this.geometry.attributes.color.needsUpdate=!0}addToScene(e){e.add(this.points)}removeFromScene(e){e.remove(this.points)}dispose(){this.geometry.dispose(),this.points.material.dispose()}}class cF{constructor(e,t,i,s){this.scene=e,this.team=t,this.trailWidth=i,this.trailLength=s,this.active=!0,this.dying=!1,this.deathTime=0,this.maxDeathTime=1.5,this.teamColors={0:new qe(.3,.6,1,.9),1:new qe(1,.5,.15,.9)},this.leftTarget=new Qe,this.rightTarget=new Qe,e.add(this.leftTarget),e.add(this.rightTarget),this.leftTrail=this.createTrail(this.leftTarget),this.rightTrail=this.createTrail(this.rightTarget),this.updateColors(),this.leftTrail.activate(),this.rightTrail.activate()}createTrail(e){const t=new pt(this.scene,!1),i=pt.createBaseMaterial();i.blending=Ht,i.depthWrite=!1,i.side=ct;const s=this.trailWidth,a=[new S(0,0,0),new S(0,s,0),new S(-s/2,s/2,0),new S(s/2,s/2,0)];return t.initialize(i,this.trailLength,!1,0,a,e),t.setAdvanceFrequency(60),t.mesh&&(t.mesh.frustumCulled=!1),t}updateColors(){const e=this.teamColors[this.team]||this.teamColors[0],t=new qe(e.x*.3,e.y*.3,e.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(e),this.leftTrail.material.uniforms.tailColor.value.copy(t)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(e),this.rightTrail.material.uniforms.tailColor.value.copy(t))}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.leftTrail.pause(),this.rightTrail.pause())}updatePosition(e,t,i){this.dying||(this.leftTarget.position.copy(e),this.rightTarget.position.copy(t),this.leftTarget.quaternion.copy(i),this.rightTarget.quaternion.copy(i),this.leftTarget.updateMatrixWorld(),this.rightTarget.updateMatrixWorld())}update(e){if(this.dying){this.deathTime+=e;const i=1-Math.min(1,this.deathTime/this.maxDeathTime),s=this.teamColors[this.team]||this.teamColors[0],a=new qe(s.x,s.y,s.z,s.w*i),r=new qe(s.x*.3,s.y*.3,s.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(a),this.leftTrail.material.uniforms.tailColor.value.copy(r)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(a),this.rightTrail.material.uniforms.tailColor.value.copy(r)),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.leftTrail.isActive&&this.leftTrail.update(e),this.rightTrail.isActive&&this.rightTrail.update(e)}dispose(){this.leftTrail.deactivate(),this.rightTrail.deactivate(),this.leftTrail.geometry&&this.leftTrail.geometry.dispose(),this.rightTrail.geometry&&this.rightTrail.geometry.dispose(),this.leftTrail.material&&this.leftTrail.material.dispose(),this.rightTrail.material&&this.rightTrail.material.dispose(),this.scene.remove(this.leftTarget),this.scene.remove(this.rightTarget)}}class uF{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.trailLength=80,this.trailWidth=15,this.arenaBounds={floor:0,ceiling:2044,wallX:4096,wallZ:5120},this.groundedThreshold=50,this.segments=[],this.currentSegment=null,this.wasGrounded=!0}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.team=e,this.currentSegment.updateColors()))}setActive(e){e&&!this.active?(this.currentSegment=null,this.wasGrounded=!0):!e&&this.active&&this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null),this.active=e}isGrounded(e){const t=this.groundedThreshold,i=this.arenaBounds;if(e.yi.ceiling-t)return{grounded:!0,surface:"ceiling",normal:new S(0,-1,0)};if(Math.abs(e.x)>i.wallX-t){const s=e.x>0?-1:1;return{grounded:!0,surface:"wall",normal:new S(s,0,0)}}if(Math.abs(e.z)>i.wallZ-t){const s=e.z>0?-1:1;return{grounded:!0,surface:"wall",normal:new S(0,0,s)}}return{grounded:!1,surface:null,normal:null}}emit(e,t,i){if(!this.active)return;const s=this.isGrounded(e);if(!s.grounded){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasGrounded=!1;return}(!this.wasGrounded||!this.currentSegment)&&(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new cF(this.scene,this.team,this.trailWidth,this.trailLength),this.segments.push(this.currentSegment)),this.wasGrounded=!0;const r=new S(-30,5,40),o=new S(-30,5,-40);r.applyQuaternion(t),o.applyQuaternion(t);const l=e.clone().add(r),c=e.clone().add(o),u=2;if(s.surface==="floor")l.y=u,c.y=u;else if(s.surface==="ceiling")l.y=this.arenaBounds.ceiling-u,c.y=this.arenaBounds.ceiling-u;else if(s.surface==="wall"){if(s.normal.x!==0){const d=s.normal.x>0?-this.arenaBounds.wallX+u:this.arenaBounds.wallX-u;l.x=d,c.x=d}else if(s.normal.z!==0){const d=s.normal.z>0?-this.arenaBounds.wallZ+u:this.arenaBounds.wallZ-u;l.z=d,c.z=d}}this.currentSegment.updatePosition(l,c,t)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}class dF{constructor(e){this.scene=e,this.renderer=null,this.camera=null,this.explosions={active:[],goalEvents:new Map,demoEvents:new Map},this.boostTrails=new Map,this.supersonicTrails=new Map,this.ballTrail=null,tF()}setRenderContext(e,t){this.renderer=e,this.camera=t,iF(this.scene,e,t)}reset(){this.explosions.active.forEach(e=>e.removeFromScene(this.scene)),this.explosions.active=[],this.clearGoalExplosions(),this.boostTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.boostTrails.clear(),this.supersonicTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.supersonicTrails.clear(),this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose(),this.ballTrail=null)}clearEvents(){this.explosions.goalEvents.clear(),this.explosions.demoEvents.clear()}setGoalEvents(e){this.explosions.goalEvents.clear();for(const t of e??[])Number.isFinite(t.frame)&&this.explosions.goalEvents.set(t.frame,{time:t.time,team:t.team??0,playerName:t.playerName??""})}resetBallTrail(){this.ballTrail&&this.ballTrail.reset()}clearGoalExplosions(){Bn&&Bn.clearActive();for(const e of this.explosions.active)e.removeFromScene(this.scene);this.explosions.active=[]}createBoostTrail(e,t){if(this.boostTrails.has(t)){const s=this.boostTrails.get(t);s.removeFromScene(this.scene),s.dispose()}const i=new lF(e);return i.addToScene(this.scene),this.boostTrails.set(t,i),i}removeBoostTrail(e){const t=this.boostTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.boostTrails.delete(e))}updateBoostTrail(e,t,i,s,a){const r=this.boostTrails.get(e);r&&(r.setActive(t),t&&r.emit(i,s,a,this._playbackSpeed||1))}createSupersonicTrail(e,t){if(this.supersonicTrails.has(e)){const s=this.supersonicTrails.get(e);s.removeFromScene(this.scene),s.dispose()}const i=new uF(this.scene,t);return i.addToScene(this.scene),this.supersonicTrails.set(e,i),i}removeSupersonicTrail(e){const t=this.supersonicTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.supersonicTrails.delete(e))}updateSupersonicTrail(e,t,i,s,a,r){let o=this.supersonicTrails.get(e);!o&&t&&(o=this.createSupersonicTrail(e,r)),o&&(r!==void 0&&o.team!==r&&o.setTeam(r),o.setActive(t),t&&o.emit(i,s,a))}createBallTrail(){return this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose()),this.ballTrail=new eF(this.scene,0),this.ballTrail.addToScene(this.scene),console.log("✓ Spiral ball trail created and added to scene"),this.ballTrail}updateBallTrail(e,t,i){this.ballTrail||this.createBallTrail(),i!==void 0&&this.ballTrail.team!==i&&this.ballTrail.setTeam(i);const s=1/60*(this._playbackSpeed||1);this.ballTrail.emit(e,t,s)}triggerGoalExplosion(e,t){const i=MT(this.scene,this.renderer,this.camera);i&&(this.camera&&(i.camera=this.camera),i.trigger(e,t))}triggerDemoExplosion(e,t,i){const s=TT(this.scene);s&&s.trigger(e)}update(e,t=!0,i=1){this._playbackSpeed=i;const s=e*i;di&&di.update(s),Bn&&Bn.update(s);for(let a=this.explosions.active.length-1;a>=0;a--){const r=this.explosions.active[a];r.update(s)&&(r.removeFromScene(this.scene),this.explosions.active.splice(a,1))}t&&(this.boostTrails.forEach(a=>{a.update(s)}),this.supersonicTrails.forEach(a=>{a.update(s)}),this.ballTrail&&this.ballTrail.update(s))}}const sv={Octane:65535,Dominus:16746496,Plank:8978176,Breakout:16711816,Hybrid:8913151,Merc:16776960},hF={0:5744895,1:16751680};function fF(n,e){return e===0||e===1?hF[e]:sv[n]||sv.Octane}class pF{constructor(e){this.scene=e,this.hitboxes=new Map,this.enabled=!1}setEnabled(e){this.enabled=e,this.hitboxes.forEach(({mesh:t})=>{t.visible=e})}createHitboxWireframe(e,t){const i=oy[e]||oy.Octane,s=fF(e,t),a=i.length,r=i.width,o=i.height,l=i.offsetX,c=i.offsetZ;console.log(`[HitboxManager] Creating hitbox for ${e}:`,{dims:i,length:a,width:r,height:o,offsetX:l,offsetY:c});const u=new Mt,d=new Ei(a,o,r),h=new Ye({color:s,transparent:!0,opacity:.35,depthTest:!1,depthWrite:!1,side:ct}),f=new we(d,h);f.frustumCulled=!1,f.renderOrder=1,f.position.set(l,c,0),u.add(f);const p=new Bh(d),g=new Rt({color:s,linewidth:2,transparent:!0,opacity:.9,depthTest:!1}),_=new Ln(p,g);_.frustumCulled=!1,_.renderOrder=2,_.position.set(l,c,0),u.add(_);const m=3.33,v=new yn(m,8,6),y=new ug(v),b=new Rt({color:16777215,linewidth:1,transparent:!0,opacity:.9,depthTest:!1}),T=new Ln(y,b);return T.frustumCulled=!1,u.add(T),u.userData.hitboxType=e,u.userData.team=t??null,u.frustumCulled=!1,u}addHitbox(e,t,i){const s=i===0||i===1?i:null;if(this.hitboxes.has(e)){const r=this.hitboxes.get(e);if(r.hitboxType===t&&r.team===s)return;this.scene.remove(r.mesh),r.mesh.traverse(o=>{o.geometry&&o.geometry.dispose(),o.material&&o.material.dispose()})}const a=this.createHitboxWireframe(t,s);a.visible=this.enabled,this.scene.add(a),this.hitboxes.set(e,{mesh:a,hitboxType:t,team:s})}removeHitbox(e){if(this.hitboxes.has(e)){const{mesh:t}=this.hitboxes.get(e);this.scene.remove(t),t.traverse(i=>{i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose()}),this.hitboxes.delete(e)}}updateHitboxes(e,t,i,s){if(!this.enabled)return;for(const[r,o]of Object.entries(t)){const l=e[o];if(!l||!l.userData.isCar)continue;const c=i?i(r):"Octane",u=s?s(r):null;this.addHitbox(o,c,u);const{mesh:d}=this.hitboxes.get(o);d.position.copy(l.position),d.quaternion.copy(l.quaternion),d.visible=this.enabled&&l.visible}const a=new Set(Object.values(t));for(const r of this.hitboxes.keys())a.has(r)||this.removeHitbox(r)}reset(){this.hitboxes.forEach(({mesh:e})=>{this.scene.remove(e),e.traverse(t=>{t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose()})}),this.hitboxes.clear()}dispose(){this.reset()}}const ET=["baseGroup","glowMesh","innerGlowMesh","lensColumnMesh","lensRimMesh","topGlowMesh","coreGlowMesh","highlightMesh"];function gp(n,e,t,i){const s=new we(new Io(n,32),new Ye({color:e,transparent:!0,opacity:t,blending:Ht,side:ct,depthWrite:!1}));return s.rotation.x=-Math.PI/2,s.renderOrder=i,s}function av(n,e){n&&n.traverse(t=>{const i=t;if(!i.isMesh||!(i.material instanceof Ye))return;const s=i.userData.baseOpacity;i.material.opacity=(s??i.material.opacity)*e})}function pu(n,e,t){n.rotation.x=-Math.PI/2,n.renderOrder=t,n.frustumCulled=!1,n.userData.baseOpacity=e,n.material.transparent=!0,n.material.opacity=e,n.material.side=ct,n.material.depthWrite=!1}function mF(n){const e=new Mt;e.renderOrder=98,e.frustumCulled=!1;const t=new Ye({color:1118477}),i=new Ye({color:16752640,blending:Ht}),s=new we(new Io(n*.55,48),t.clone());pu(s,.86,98),e.add(s);const a=new we(new ni(n*.45,n*.62,48),new Ye({color:16765242,blending:Ht}));pu(a,.78,100),a.position.y=1.4,e.add(a);function r(o,l,c){const u=new Ns;return[[o*Math.cos(-c*.72),o*Math.sin(-c*.72)],[l*Math.cos(-c),l*Math.sin(-c)],[l*Math.cos(c),l*Math.sin(c)],[o*Math.cos(c*.72),o*Math.sin(c*.72)]].forEach(([h,f],p)=>{p===0?u.moveTo(h,f):u.lineTo(h,f)}),u.closePath(),u}for(let o=0;o<3;o+=1){const l=o*(Math.PI*2)/3+Math.PI/2,c=new we(new ur(r(n*.52,n*1.42,.33)),t.clone());pu(c,.86,98),c.rotation.z=l,e.add(c);const u=new we(new ur(r(n*.66,n*1.2,.21)),i.clone());pu(u,.86,99),u.position.y=1.1,u.rotation.z=l,e.add(u)}return e}function rv(n,e){for(const t of ET){const i=n.userData[t];i&&(i.visible=e)}}function _F(){let n=new Map;function e(i){const s=i.player.adapter.boostPads;!s||s.size===0||(console.log(`[boost-pads] Creating ${s.size} boost pads...`),n=new Map,s.forEach((a,r)=>{const o=a.isBig;let l,c,u;if(o){l=new yn(37,24,18),c=new ii({color:16757274,emissive:16747008,emissiveIntensity:.42,metalness:.04,roughness:.08,clearcoat:1,clearcoatRoughness:.025,transmission:.18,thickness:30,ior:1.42,envMapIntensity:1.9,blending:Ht,transparent:!0,opacity:.68,depthWrite:!1}),u=new we(l,c),u.renderOrder=100;const p=mF(37*2.05);p.position.y=-140,u.add(p),u.userData.baseGroup=p;const g=new we(new lr(37*.12,37*.18,112,24,1,!0),new Ye({color:16761664,transparent:!0,opacity:.28,blending:Ht,side:ct,depthWrite:!1}));g.position.y=-62,g.renderOrder=99,u.add(g),u.userData.lensColumnMesh=g;const _=new we(new yn(37*1.03,24,14),new Ye({color:16768890,transparent:!0,opacity:.32,blending:Ht,side:un,depthWrite:!1}));_.renderOrder=101,u.add(_),u.userData.lensRimMesh=_;const m=new yn(37*1.3,20,14),v=new Ye({color:16758315,transparent:!0,opacity:.16,blending:Ht,side:un,depthWrite:!1}),y=new we(m,v);y.renderOrder=99,u.add(y),u.userData.glowMesh=y;const b=new yn(37*1.12,20,14),T=new Ye({color:16761130,transparent:!0,opacity:.22,blending:Ht,side:un,depthWrite:!1}),x=new we(b,T);x.renderOrder=99,u.add(x),u.userData.innerGlowMesh=x,u.userData.needsLight=!0}else{l=new lr(45,45*.92,8,32),c=new ii({color:16761370,emissive:16750336,emissiveIntensity:.72,metalness:.88,roughness:.14,clearcoat:1,clearcoatRoughness:.05,envMapIntensity:2,transparent:!0,opacity:1,depthWrite:!1}),u=new we(l,c),u.renderOrder=100;const g=gp(45*1.42,16756736,.34,101);g.position.y=8/2+.15,u.add(g),u.userData.topGlowMesh=g;const _=gp(45*.74,16777114,.42,102);_.position.y=8/2+.35,u.add(_),u.userData.coreGlowMesh=_;const m=gp(45*.42,16775376,.46,103);m.position.set(-45*.18,8/2+.55,-45*.12),m.scale.y=.34,u.add(m),u.userData.highlightMesh=m}const h=o?130:10;if(u.position.set(a.position.x,h,a.position.y),u.userData.padId=r,u.userData.isBig=o,u.userData.isAvailable=!0,i.scene.add(u),n.set(r,u),u.userData.needsLight){const f=new dr(16751872,.7,480);f.decay=0,f.position.set(a.position.x,h-50,a.position.y),i.scene.add(f),u.userData.light=f}}),console.log(`[boost-pads] ✓ Created ${n.size} boost pad meshes`))}function t(i){i.player.adapter.boostPads.forEach((a,r)=>{const o=n.get(r);if(!o)return;const l=a.isAvailable;o.userData.isAvailable!==l&&(o.userData.isAvailable=l,l?(o.material.color.setHex(a.isBig?16757274:16761370),o.material.emissive.setHex(a.isBig?16747008:16750336),o.material.emissiveIntensity=a.isBig?.42:.72,o.material.opacity=a.isBig?.68:1,o.visible=!0,rv(o,!0),av(o.userData.baseGroup,1),o.userData.light&&(o.userData.light.intensity=.85),o.userData.glowMesh&&(o.userData.glowMesh.visible=!0),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!0)):(o.material.color.setHex(a.isBig?9063424:9065472),o.material.emissive.setHex(0),o.material.emissiveIntensity=0,o.material.opacity=.2,o.visible=!0,rv(o,!1),o.userData.baseGroup&&(o.userData.baseGroup.visible=!0,av(o.userData.baseGroup,.26)),o.userData.light&&(o.userData.light.intensity=0),o.userData.glowMesh&&(o.userData.glowMesh.visible=!1),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!1)))})}return{id:"boost-pads",setup(i){e(i)},beforeRender(i){t(i)},teardown(i){n.forEach(s=>{i.scene.remove(s),s.geometry.dispose(),s.material.dispose();for(const r of ET){const o=s.userData[r];o&&o.traverse(l=>{const c=l;c.isMesh&&(c.geometry.dispose(),c.material.dispose())})}const a=s.userData.light;a&&(i.scene.remove(a),a.dispose())}),n.clear()}}}const gF=2;function yF(n){if(n.frames.length===0)return null;const e=new Map;for(const s of n.frames)e.set(s.gameState,(e.get(s.gameState)??0)+1);let t=null,i=-1;for(const[s,a]of e.entries())a<=i||(t=s,i=a);return t}function vF(n,e){if(e===null)return null;for(const t of n.frames){if(t.gameState===e)break;return t.gameState}return null}function CT(n,e){return e===null?n.kickoffCountdown<=0:n.gameState===e}function Rg(n,e){return n.kickoffCountdown>0?!0:e!==null&&n.gameState===e}function bF(n,e){return n.ballFrames[e]?.position?!0:n.players.some(t=>t.frames[e]?.position)}function xF(n,e,t,i){return Rg(e,i)&&bF(n,t)}function wF(n,e){return n.timelineEvents.some(t=>t.kind==="goal"&&e.time>=t.time&&e.timec){const h=a.at(-1);h&&h.endTime>=c?h.endTime=Math.max(h.endTime,d):a.push({startTime:c,endTime:d})}o=u}return a}function TF(n,e,t){const i=vt.clamp(t,0,n);for(const s of e){if(i0&&(n.frames[s-1]?.kickoffCountdown??0)>0;)s-=1;let a=e+1;for(;a0;)a+=1;let r=0;for(let c=s;cl>s&&CT(o,t));return!r||r.time===e?null:r.time}function IF(n,e,t,i){const s=fh(n,e),a=n.frames[s];if(!a||!Wu(n,a,s,t,i))return null;const r=n.frames.find((c,u)=>u>s&&!Wu(n,c,u,t,i));if(r)return r.time===e?null:r.time;let o=s;for(;o>0&&Wu(n,n.frames[o-1],o-1,t,i);)o-=1;const l=n.frames[o]?.time;return l===void 0||l===e?null:l}function LF(n){return!!n?.position&&n?.isPresent!==!1}function DF(n,e,t){for(let i=n.length-1;i>=0;i-=1){const s=n[i],a=t-s.time;if(!(a<0)){if(a>RF)break;if(s.kind==="demo"&&s.secondaryPlayerId===e)return s}}return null}const kF="space",OF={space:{id:"space",skyboxUrl:"/skyboxes/PlanetaryEarth4k.hdr",exposure:1.45,rotation:{x:8,y:0,z:28},animation:{enabled:!0,speed:2}}};function FF(n){if(n===!1)return null;if(typeof n=="string"){const e=OF[n];return e||(console.warn(`[player] unknown environment "${n}"; using neutral default`),null)}return n}const NF=new Proxy({},{get:()=>()=>{}});function lv(n){if(!n)return null;const e={};for(const t of Object.keys(n)){const i=n[t];typeof i=="number"&&Number.isFinite(i)&&(e[t]=i)}return e}const cv=48,mu=.14,UF=16,BF=16,zF=.003,HF=.05,VF=1.08,uv=4120,dv=5140,GF=0,$F=2200,WF=new S(0,700,0),XF=new S(-1,0,0),KF=new S(0,-1,0),qF=new S(0,900,0),YF=new S(0,1,0),jF=new S(9600,-5500,12600).normalize();function ZF(n,e){const t=Number.isFinite(e)&&e>0?e:1.7777777777777777,i=n==="overhead"?WF.clone():qF.clone(),s=n==="overhead"?XF.clone():YF.clone(),a=n==="overhead"?KF.clone():jF.clone(),r=JF({aspect:t,fov:cv,forward:a,margin:VF,target:i,up:s});return{position:i.clone().addScaledVector(a,-r),target:i,up:s,fov:cv}}function JF(n){const{aspect:e,fov:t,forward:i,margin:s,target:a,up:r}=n,o=i.clone().normalize(),l=new S().crossVectors(o,r).normalize(),c=new S().crossVectors(l,o).normalize(),u=Math.tan(vt.degToRad(t)/2),d=u*e;let h=1;for(const f of[-uv,uv])for(const p of[GF,$F])for(const g of[-dv,dv]){const _=new S(f,p,g).sub(a),m=Math.abs(_.dot(l)),v=Math.abs(_.dot(c)),y=_.dot(o);h=Math.max(h,m/d-y,v/u-y)}return Math.max(1,h*s)}function QF(n){const e=new Mt;return e.name="replayRoot",e.matrixAutoUpdate=!1,e.matrix.set(1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1),n.add(e),e}class eN extends EventTarget{container;adapter;replay;options;sceneManager;arenaManager;actorManager;effectsManager;hitboxManager;controls;replayRoot;sceneState;effectsEnabled;ready;plugins=[];beforeRenderCallbacks=[];resizeObserver=null;animationFrameId=null;disposed=!1;playing=!1;readyResolved=!1;speed;loop;currentTime=0;lastTickAt=null;freeCameraTransition=null;cameraDistanceScaleValue;customCameraSettingsValue;cameraViewModeValue;attachedPlayerIdValue;ballCamEnabledValue;boostMeterEnabledValue;boostPickupAnimationEnabledValue;hitboxWireframesEnabledValue;hitboxOnlyModeEnabledValue;hitboxTypeByName=null;hitboxTeamByName=null;hitboxesActive=!1;skipPostGoalTransitionsEnabledValue;skipKickoffsEnabledValue;attachmentTouched=!1;liveGameState=null;kickoffGameState=null;timelineSegmentsCacheKey=null;timelineSegmentsCache=[];constructor(e,t,i={},s=null){super(),this.container=e,this.adapter=t,this.replay=s,this.options=i,this.updateReplayGameStates(),this.speed=Math.max(.1,i.initialPlaybackRate??i.speed??1),this.loop=i.loop??!1,this.cameraDistanceScaleValue=Math.max(.25,i.initialCameraDistanceScale??1),this.customCameraSettingsValue=lv(i.initialCustomCameraSettings),this.attachedPlayerIdValue=i.initialAttachedPlayerId??null,this.cameraViewModeValue=i.initialCameraViewMode??(this.attachedPlayerIdValue?"follow":"free"),this.ballCamEnabledValue=i.initialBallCamEnabled??null,this.boostMeterEnabledValue=i.initialBoostMeterEnabled??!1,this.boostPickupAnimationEnabledValue=i.initialBoostPickupAnimationEnabled??!0,this.hitboxWireframesEnabledValue=i.initialHitboxWireframesEnabled??!1,this.hitboxOnlyModeEnabledValue=i.initialHitboxOnlyModeEnabled??!1,this.skipPostGoalTransitionsEnabledValue=i.initialSkipPostGoalTransitionsEnabled??!0,this.skipKickoffsEnabledValue=i.initialSkipKickoffsEnabled??!1,this.sceneManager=new yk(e,{assetBase:i.assetBase,preserveDrawingBuffer:i.preserveDrawingBuffer}),this.sceneManager.initDefaultEnvironment(),this.applyEnvironmentSpec(i.environment??kF),this.arenaManager=new lO(this.scene,{assetBase:i.assetBase}),this.effectsEnabled=i.effects??!0,this.effectsManager=this.effectsEnabled?new dF(this.scene):NF,this.actorManager=new JO(this.scene,this.effectsManager,{assetBase:i.assetBase}),i.motionInterpolation&&this.setMotionInterpolation(i.motionInterpolation),this.actorManager.initFromFramework(t),this.actorManager.initInterpolants(t.getTimelines()),this.hitboxManager=new pF(this.scene),this.syncGoalEvents(),this.controls=new QD(this.camera,this.renderer.domElement),this.controls.zoomSpeed=2.5,this.camera.position.set(0,4e3,6e3),this.controls.target.set(0,200,0),this.controls.update(),this.replayRoot=QF(this.scene),this.sceneState=this.createSceneState(),this.ready=Promise.all([this.arenaManager.loadArenaMeshes().catch(a=>{console.warn("[player] arena load failed",a)}),this.prepareReplayAssets()]).then(()=>{this.markReady()}),this.installResizeHandling();for(const a of i.plugins??[])this.installPlugin(a,!1);this.plugins.some(a=>a.plugin.id==="boost-pads")||this.installPlugin(_F(),!1),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),this.scheduleAnimationFrame(),this.emitChange(),i.autoplay&&this.play()}get scene(){return this.sceneManager.scene}get camera(){return this.sceneManager.camera}get renderer(){return this.sceneManager.renderer}get duration(){return this.adapter.duration}async replaceReplay(e,t,i={}){if(this.disposed)throw new Error("Cannot replace replay on a disposed ReplayPlayer");const s=i.preservePlayback??this.playing;this.playing&&this.setPlayingInternal(!1),this.teardownPlugins(),this.effectsManager.reset(),this.effectsManager.clearEvents?.(),this.hitboxManager.reset(),this.actorManager.reset(),this.adapter=e,this.replay=t,this.updateReplayGameStates(),this.timelineSegmentsCacheKey=null,this.timelineSegmentsCache=[],this.hitboxTypeByName=null,this.hitboxTeamByName=null,this.hitboxesActive=!1,this.freeCameraTransition=null,this.actorManager.initFromFramework(e),this.actorManager.initInterpolants(e.getTimelines()),this.syncGoalEvents();const a=this.attachedPlayerIdValue&&this.adapter.playerList.some(r=>r.id===this.attachedPlayerIdValue)?this.attachedPlayerIdValue:null;a!==this.attachedPlayerIdValue&&(this.attachedPlayerIdValue=a,this.cameraViewModeValue==="follow"&&(this.cameraViewModeValue="free")),this.seekInternal(i.currentTime??0),this.readyResolved=!1,this.ready=this.prepareReplayAssets().then(()=>{this.markReady()}),await this.ready,this.setupPlugins(),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),s&&this.setPlayingInternal(!0),this.render(),this.emitChange()}setEnvironment(e){this.applyEnvironmentSpec(e)}applyEnvironmentSpec(e){const t=FF(e);if(!t){this.sceneManager.setDefaultBackground();return}this.sceneManager.applyEnvironment(t).catch(i=>{console.warn(`[player] environment "${t.id}" failed to load`,i)})}play(){this.playing||(this.setPlayingInternal(!0),this.emitChange())}pause(){this.playing&&(this.setPlayingInternal(!1),this.emitChange())}togglePlayback(){this.playing?this.pause():this.play()}seek(e){this.seekInternal(e),this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setPlaybackRate(e){this.speed=Math.max(.1,e),this.emitChange()}setLoop(e){this.loop=e}setMotionInterpolation(e){this.actorManager.interpolationMethod=e==="linear"?"lerp":"hermite"}setFrameIndex(e){const t=this.adapter.frameTimes;if(t.length===0||!Number.isFinite(e))return;const i=Math.min(Math.max(Math.trunc(e),0),t.length-1);this.playing&&this.setPlayingInternal(!1),this.seekInternal(t[i]),this.emitChange()}stepFrames(e){Number.isFinite(e)&&this.setFrameIndex(this.adapter.frameIndexAt(this.currentTime)+Math.trunc(e))}stepForwardFrame(){this.stepFrames(1)}stepBackwardFrame(){this.stepFrames(-1)}setCameraDistanceScale(e){this.cameraDistanceScaleValue=Math.max(.25,e),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue),this.emitChange()}setCustomCameraSettings(e){this.applyCustomCameraSettings(e),this.emitChange()}setAttachedPlayer(e){this.attachedPlayerIdValue=e,this.cameraViewModeValue=e?"follow":"free",this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setCameraViewMode(e){this.cameraViewModeValue=e,this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setFreeCameraPreset(e,t={}){this.cameraViewModeValue="free",this.attachmentTouched=!0,this.syncCameraAttachment();const i=ZF(e,this.camera.aspect);t.instant?(this.camera.position.copy(i.position),this.controls.target.copy(i.target),this.camera.up.copy(i.up).normalize(),this.camera.fov=i.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(i.target),this.controls.enabled=!0,this.freeCameraTransition=null):this.freeCameraTransition=i,this.emitChange()}setBallCamEnabled(e){this.ballCamEnabledValue=e,this.getCameraPlugin()?.setBallCam(e),this.emitChange()}setBoostMeterEnabled(e){this.boostMeterEnabledValue=e,this.emitChange()}setBoostPickupAnimationEnabled(e){this.boostPickupAnimationEnabledValue=e,this.emitChange()}setHitboxWireframesEnabled(e){this.hitboxWireframesEnabledValue=e,this.emitChange()}setHitboxOnlyModeEnabled(e){this.hitboxOnlyModeEnabledValue=e,this.emitChange()}setSkipPostGoalTransitionsEnabled(e){this.skipPostGoalTransitionsEnabledValue=e,e&&this.playing&&this.skipPostGoalTransitionIfNeeded(),this.emitChange()}setSkipKickoffsEnabled(e){this.skipKickoffsEnabledValue=e,e&&this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setState(e){e.speed!==void 0&&(this.speed=Math.max(.1,e.speed)),e.cameraDistanceScale!==void 0&&(this.cameraDistanceScaleValue=Math.max(.25,e.cameraDistanceScale),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue)),e.customCameraSettings!==void 0&&this.applyCustomCameraSettings(e.customCameraSettings),e.cameraViewMode!==void 0&&(this.cameraViewModeValue=e.cameraViewMode,this.attachmentTouched=!0),e.attachedPlayerId!==void 0&&(this.attachedPlayerIdValue=e.attachedPlayerId,this.attachmentTouched=!0,e.cameraViewMode===void 0&&(this.cameraViewModeValue=e.attachedPlayerId?"follow":"free")),(e.cameraViewMode!==void 0||e.attachedPlayerId!==void 0)&&(this.freeCameraTransition=null,this.syncCameraAttachment()),e.useReplayBallCam===!0?(this.ballCamEnabledValue=null,this.getCameraPlugin()?.setBallCam(null)):e.ballCamEnabled!==void 0&&(this.ballCamEnabledValue=e.ballCamEnabled,this.getCameraPlugin()?.setBallCam(e.ballCamEnabled)),e.boostMeterEnabled!==void 0&&(this.boostMeterEnabledValue=e.boostMeterEnabled),e.boostPickupAnimationEnabled!==void 0&&(this.boostPickupAnimationEnabledValue=e.boostPickupAnimationEnabled),e.hitboxWireframesEnabled!==void 0&&(this.hitboxWireframesEnabledValue=e.hitboxWireframesEnabled),e.hitboxOnlyModeEnabled!==void 0&&(this.hitboxOnlyModeEnabledValue=e.hitboxOnlyModeEnabled),e.skipPostGoalTransitionsEnabled!==void 0&&(this.skipPostGoalTransitionsEnabledValue=e.skipPostGoalTransitionsEnabled),e.skipKickoffsEnabled!==void 0&&(this.skipKickoffsEnabledValue=e.skipKickoffsEnabled),e.currentTime!==void 0&&this.seekInternal(e.currentTime),e.playing!==void 0&&e.playing!==this.playing&&this.setPlayingInternal(e.playing),this.playing&&(e.currentTime!==void 0||e.playing!==void 0)&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}getState(){const e=this.adapter.frameIndexAt(this.currentTime),t=this.getCameraPlugin();let i=this.cameraViewModeValue,s=this.attachedPlayerIdValue;if(t)if(t.getMode()==="follow"){i="follow";const a=t.getTarget();s=(a?this.adapter.playerList.find(o=>o.name===a):void 0)?.id??s}else i="free",s=null;return{currentTime:this.currentTime,duration:this.duration,frameIndex:e,activeMetadata:this.replay?CF(this.replay,e,this.currentTime):null,playing:this.playing,speed:this.speed,cameraDistanceScale:this.cameraDistanceScaleValue,customCameraSettings:this.customCameraSettingsValue,cameraViewMode:i,attachedPlayerId:s,ballCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,useReplayBallCam:this.ballCamEnabledValue===null,effectiveBallCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,boostMeterEnabled:this.boostMeterEnabledValue,boostPickupAnimationEnabled:this.boostPickupAnimationEnabledValue,hitboxWireframesEnabled:this.hitboxWireframesEnabledValue,hitboxOnlyModeEnabled:this.hitboxOnlyModeEnabledValue,skipPostGoalTransitionsEnabled:this.skipPostGoalTransitionsEnabledValue,skipKickoffsEnabled:this.skipKickoffsEnabledValue}}getSnapshot(){return this.getState()}getTimelineDuration(){return this.replay?.duration??this.duration}getTimelineCurrentTime(){return this.projectReplayTimeToTimeline(this.currentTime).timelineTime}getTimelineSegments(){if(!this.replay)return[];const e=`${this.skipPostGoalTransitionsEnabledValue}:${this.skipKickoffsEnabledValue}`;return this.timelineSegmentsCacheKey===e?this.timelineSegmentsCache:(this.timelineSegmentsCacheKey=e,this.timelineSegmentsCache=SF(this.replay,this.skipPostGoalTransitionsEnabledValue,this.skipKickoffsEnabledValue,this.liveGameState,this.kickoffGameState),this.timelineSegmentsCache)}projectReplayTimeToTimeline(e){return TF(this.replay?.duration??this.duration,this.getTimelineSegments(),e)}projectTimelineTimeToReplay(e){return MF(this.replay?.duration??this.duration,this.getTimelineDuration(),this.getTimelineSegments(),e)}subscribe(e){const t=i=>{e(i.detail)};return this.addEventListener("change",t),e(this.getState()),()=>{this.removeEventListener("change",t)}}onBeforeRender(e){return this.beforeRenderCallbacks.push(e),()=>{const t=this.beforeRenderCallbacks.indexOf(e);t>=0&&this.beforeRenderCallbacks.splice(t,1)}}addPlugin(e){return this.installPlugin(e,!0)}removePlugin(e){const t=this.plugins.findIndex(s=>s.plugin.id===e);if(t<0)return!1;const[i]=this.plugins.splice(t,1);return i.plugin.teardown?.(this.createPluginContext()),!0}getPlugins(){return this.plugins.map(e=>e.plugin)}destroy(){if(!this.disposed){for(this.disposed=!0,this.playing=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.beforeRenderCallbacks.length=0;this.plugins.length>0;)this.plugins.pop()?.plugin.teardown?.(this.createPluginContext());this.controls.dispose(),this.effectsEnabled&&this.effectsManager.reset(),this.hitboxManager.dispose(),this.actorManager.reset(),this.sceneManager.dispose()}}dispose(){this.destroy()}setPlayingInternal(e){this.playing=e,this.lastTickAt=null,e?this.actorManager.resumeAnimations():this.actorManager.pauseAnimations()}prepareReplayAssets(){return this.actorManager.waitForBallModel().catch(()=>!1).then(()=>{if(this.effectsEnabled)try{this.effectsManager.setRenderContext(this.renderer,this.camera)}catch(e){console.warn("[player] explosion warmup failed",e)}})}markReady(){this.readyResolved=!0,this.lastTickAt=null}updateReplayGameStates(){if(!this.replay){this.liveGameState=null,this.kickoffGameState=null;return}this.liveGameState=yF(this.replay),this.kickoffGameState=vF(this.replay,this.liveGameState)}syncGoalEvents(){this.effectsEnabled&&(this.effectsManager.clearEvents?.(),this.replay&&this.effectsManager.setGoalEvents(this.replay.timelineEvents.filter(e=>e.kind==="goal").map(e=>({frame:e.frame,time:e.time,team:e.isTeamZero?0:1,playerName:e.playerName??""}))))}teardownPlugins(){const e=this.createPluginContext();for(const t of this.plugins)t.plugin.teardown?.(e)}setupPlugins(){for(const e of this.plugins)e.plugin.setup?.(this.createPluginContext()),e.plugin.id==="camera"&&this.pushCameraParityState(),e.plugin.onStateChange?.(this.createPluginStateContext(this.getState()))}seekInternal(e){this.currentTime=vt.clamp(e,0,this.duration),this.actorManager.seekAnimations(this.currentTime),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()}getPlaybackEndTime(){return this.replay?EF(this.replay.duration,this.getTimelineSegments()):this.duration}skipPastKickoffIfNeeded(){if(!this.replay||!this.skipKickoffsEnabledValue)return!1;const e=PF(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}skipPostGoalTransitionIfNeeded(){if(!this.replay||!this.skipPostGoalTransitionsEnabledValue)return!1;const e=IF(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}getCameraPlugin(){const e=this.plugins.find(t=>t.plugin.id==="camera")?.plugin;return e&&typeof e.follow=="function"?e:null}playerNameForId(e){return this.adapter.playerList.find(t=>t.id===e)?.name??null}applyReplayBallCam(){if(this.ballCamEnabledValue!==null||this.cameraViewModeValue!=="follow"||!this.attachedPlayerIdValue)return;const e=this.playerNameForId(this.attachedPlayerIdValue);if(!e)return;const t=this.adapter.getAllPlayers().find(i=>i.name===e);t&&this.getCameraPlugin()?.setBallCam(t.isBallCam)}syncCameraAttachment(){const e=this.getCameraPlugin();if(e){if(this.cameraViewModeValue==="follow"&&this.attachedPlayerIdValue){const t=this.playerNameForId(this.attachedPlayerIdValue);if(!t){console.warn(`[player] no player with id ${JSON.stringify(this.attachedPlayerIdValue)}`);return}this.camera.up.set(0,1,0),e.follow(t);return}e.getMode()==="follow"&&e.release()}}applyCustomCameraSettings(e){this.customCameraSettingsValue=lv(e);const t=this.getCameraPlugin();t&&(t.setCameraSettings(null),this.customCameraSettingsValue&&t.setCameraSettings(this.customCameraSettingsValue))}pushCameraParityState(){const e=this.getCameraPlugin();e&&(this.cameraDistanceScaleValue!==1&&e.setDistanceScale(this.cameraDistanceScaleValue),this.customCameraSettingsValue&&e.setCameraSettings(this.customCameraSettingsValue),this.ballCamEnabledValue!==null&&e.setBallCam(this.ballCamEnabledValue),this.attachmentTouched&&this.syncCameraAttachment())}applyInitialCameraOptions(){const e=this.options;(e.initialAttachedPlayerId!==void 0||e.initialCameraViewMode!==void 0)&&(this.attachmentTouched=!0),this.pushCameraParityState()}computeFrameRenderInfo(){const e=this.adapter.frameTimes,t=this.adapter.frameIndexAt(this.currentTime),i=Math.min(t+1,Math.max(e.length-1,0)),s=e[t]??0,a=e[i]??s,r=a>s?vt.clamp((this.currentTime-s)/(a-s),0,1):0;return{frameIndex:t,nextFrameIndex:i,alpha:r,currentTime:this.currentTime}}installResizeHandling(){typeof ResizeObserver>"u"||(this.resizeObserver=new ResizeObserver(()=>this.sceneManager.onWindowResize()),this.resizeObserver.observe(this.container))}scheduleAnimationFrame(){this.animationFrameId!==null||this.disposed||(this.animationFrameId=requestAnimationFrame(this.tick))}tick=e=>{if(this.animationFrameId=null,this.disposed)return;let t=!1,i=0;if(this.playing&&this.readyResolved){i=this.lastTickAt===null?0:Math.min(.1,(e-this.lastTickAt)/1e3),this.lastTickAt=e;let s=this.currentTime+i*this.speed;const a=this.getPlaybackEndTime();s>=a&&(this.loop?(s=0,this.actorManager.seekAnimations(0),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()):(s=a,this.playing=!1)),t=s!==this.currentTime||!this.playing,this.currentTime=s,this.playing&&(t=this.skipPostGoalTransitionIfNeeded()||t,t=this.skipPastKickoffIfNeeded()||t)}else this.playing&&(this.lastTickAt=null);this.render(i),t&&this.emitChange(),this.scheduleAnimationFrame()};renderFrame(e=0){if(this.adapter.seek(this.currentTime),this.playing&&this.actorManager.updateAnimations(e*this.speed),this.actorManager.updateFromFramework(this.adapter,this.currentTime),this.updatePlayerStates(),this.applyReplayBallCam(),this.updateHitboxVisualization(),this.effectsManager.update(e,this.playing,this.speed),this.playing&&this.actorManager.updateWheelRotations(),this.sceneManager.updateSkyboxAnimation(this.playing?e*this.speed:0),this.controls.update(),this.beforeRenderCallbacks.length>0){const t=this.computeFrameRenderInfo();for(const i of[...this.beforeRenderCallbacks])i(t)}if(this.plugins.length>0){const t=this.createRenderContext();for(const i of this.plugins)i.plugin.beforeRender?.(t)}this.updateFreeCameraTransition(),this.renderer.render(this.scene,this.camera)}render(e=0){this.renderFrame(e)}updateFreeCameraTransition(){const e=this.freeCameraTransition;if(!e)return;this.controls.enabled=!1,this.camera.position.lerp(e.position,mu),this.controls.target.lerp(e.target,mu),this.camera.up.lerp(e.up,mu).normalize(),this.camera.fov=vt.lerp(this.camera.fov,e.fov,mu),this.camera.updateProjectionMatrix(),this.camera.lookAt(this.controls.target);const t=this.camera.position.distanceToSquared(e.position)<=UF,i=this.controls.target.distanceToSquared(e.target)<=BF,s=this.camera.up.angleTo(e.up)<=zF,a=Math.abs(this.camera.fov-e.fov)<=HF;!t||!i||!s||!a||(this.camera.position.copy(e.position),this.controls.target.copy(e.target),this.camera.up.copy(e.up).normalize(),this.camera.fov=e.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(e.target),this.controls.enabled=!0,this.freeCameraTransition=null)}updatePlayerStates(){if(!this.playing)return;const e=this.hitboxOnlyModeEnabledValue;for(const t of this.adapter.getAllPlayers())this.actorManager.updateBoostState(t.name,t.isBoosting&&!e,t.isKickoffReset),this.actorManager.updateSupersonicState(t.name,t.isSupersonic&&!e,t.team)}updateHitboxVisualization(){const e=this.hitboxWireframesEnabledValue||this.hitboxOnlyModeEnabledValue;if(!e&&!this.hitboxesActive||(this.hitboxesActive=e,this.hitboxManager.setEnabled(e),!e))return;const t=this.actorManager;if(this.hitboxTypeByName||(this.hitboxTypeByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.hitboxType]))),this.hitboxTeamByName||(this.hitboxTeamByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.team]))),this.hitboxManager.updateHitboxes(t.actors,t.playerNameToCarActorId,i=>this.hitboxTypeByName?.get(i)??"Octane",i=>this.hitboxTeamByName?.get(i)??null),this.hitboxOnlyModeEnabledValue)for(const i of Object.values(t.playerNameToCarActorId)){const s=i===void 0?void 0:t.actors[i];s&&(s.visible=!1)}}installPlugin(e,t){const i=typeof e=="function"?e():e;if(this.plugins.some(a=>a.plugin.id===i.id))throw new Error(`Player plugin "${i.id}" is already installed`);const s={definition:e,plugin:i};return this.plugins.push(s),i.setup?.(this.createPluginContext()),i.id==="camera"&&this.pushCameraParityState(),i.onStateChange?.(this.createPluginStateContext(this.getState())),t&&this.render(),()=>{const a=this.plugins.indexOf(s);a<0||(this.plugins.splice(a,1),i.teardown?.(this.createPluginContext()))}}createSceneState(){const e=this.actorManager,t=this,i=new we;return{get scene(){return t.scene},replayRoot:this.replayRoot,get camera(){return t.camera},get renderer(){return t.renderer},controls:this.controls,resize:()=>this.sceneManager.onWindowResize(),dispose:()=>this.destroy(),get ballMesh(){return(e.ballActorId!=null?e.actors[e.ballActorId]:null)??i},get playerMeshes(){const s=new Map;for(const a of t.adapter.playerList){const r=e.playerNameToCarActorId[a.name],o=r!=null?e.actors[r]:void 0;o&&s.set(a.id,o)}return s},playerBodyMeshes:new Map,playerHitboxes:new Map,playerBoostTrails:new Map,playerBoostMeters:new Map,playerDemoIndicators:new Map,updateWallVisibility:()=>{}}}createPluginContext(){return{player:this,replay:this.replay,options:this.options,scene:this.scene,camera:this.camera,renderer:this.renderer,container:this.container}}createPluginStateContext(e){return{...this.createPluginContext(),state:e}}createRenderContext(){const e=this.actorManager,t=this.adapter.ball,i={position:t.position,rotation:t.rotation,velocity:t.velocity,visible:t.visible,object3d:e.ballActorId!=null?e.actors[e.ballActorId]??null:null},s=this.adapter.getAllPlayers().map(a=>{const r=e.playerNameToCarActorId[a.name];return{id:a.id,name:a.name,team:a.team,carName:a.carName,hitboxType:a.hitboxType,position:a.position,rotation:a.rotation,velocity:a.velocity,boost:a.boost,isBoosting:a.isBoosting,visible:a.isVisible,object3d:r!=null?e.actors[r]??null:null}});return{...this.createPluginContext(),...this.computeFrameRenderInfo(),state:this.getState(),time:this.currentTime,ball:i,cars:s}}emitChange(){const e=this.getState(),t=this.createPluginStateContext(e);for(const i of this.plugins)i.plugin.onStateChange?.(t);this.dispatchEvent(new CustomEvent("change",{detail:e}))}}const Wt={LEFT:1,RIGHT:2,MIDDLE:4},$=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Hr={NONE:0,IN:1,OUT:-1};function La(n){return n.isPerspectiveCamera}function Js(n){return n.isOrthographicCamera}const Vr=Math.PI*2,hv=Math.PI/2,RT=1e-5,Qo=Math.PI/180;function Ni(n,e,t){return Math.max(e,Math.min(t,n))}function Ot(n,e=RT){return Math.abs(n)0==f>u&&(f=u,t.value=(f-u)/a),f}function pv(n,e,t,i,s=1/0,a,r){i=Math.max(1e-4,i);const o=2/i,l=o*a,c=1/(1+l+.48*l*l+.235*l*l*l);let u=e.x,d=e.y,h=e.z,f=n.x-u,p=n.y-d,g=n.z-h;const _=u,m=d,v=h,y=s*i,b=y*y,T=f*f+p*p+g*g;if(T>b){const U=Math.sqrt(T);f=f/U*y,p=p/U*y,g=g/U*y}u=n.x-f,d=n.y-p,h=n.z-g;const x=(t.x+o*f)*a,M=(t.y+o*p)*a,C=(t.z+o*g)*a;t.x=(t.x-o*x)*c,t.y=(t.y-o*M)*c,t.z=(t.z-o*C)*c,r.x=u+(f+x)*c,r.y=d+(p+M)*c,r.z=h+(g+C)*c;const w=_-n.x,E=m-n.y,R=v-n.z,D=r.x-_,O=r.y-m,k=r.z-v;return w*D+E*O+R*k>0&&(r.x=_,r.y=m,r.z=v,t.x=(r.x-_)/a,t.y=(r.y-m)/a,t.z=(r.z-v)/a),r}function yp(n,e){e.set(0,0),n.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=n.length,e.y/=n.length}function vp(n,e){return Js(n)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class tN{constructor(){this._listeners={}}addEventListener(e,t){const i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){const i=this._listeners;return i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){const s=this._listeners[e];if(s!==void 0){const a=s.indexOf(t);a!==-1&&s.splice(a,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const i=this._listeners[e.type];if(i!==void 0){e.target=this;const s=i.slice(0);for(let a=0,r=s.length;a{},this._enabled=!0,this._state=$.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Hr.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new tt.Vector3,this._focalOffsetVelocity=new tt.Vector3,this._zoomVelocity={value:0},this._truckInternal=(m,v,y,b)=>{let T,x;if(La(this._camera)){const M=ft.copy(this._camera.position).sub(this._target),C=this._camera.getEffectiveFOV()*Qo,w=M.length()*Math.tan(C*.5);T=this.truckSpeed*m*w/this._elementRect.height,x=this.truckSpeed*v*w/this._elementRect.height}else if(Js(this._camera)){const M=this._camera;T=this.truckSpeed*m*(M.right-M.left)/M.zoom/this._elementRect.width,x=this.truckSpeed*v*(M.top-M.bottom)/M.zoom/this._elementRect.height}else return;b?(y?this.setFocalOffset(this._focalOffsetEnd.x+T,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(T,0,!0),this.forward(-x,!0)):y?this.setFocalOffset(this._focalOffsetEnd.x+T,this._focalOffsetEnd.y+x,this._focalOffsetEnd.z,!0):this.truck(T,x,!0)},this._rotateInternal=(m,v)=>{const y=Vr*this.azimuthRotateSpeed*m/this._elementRect.height,b=Vr*this.polarRotateSpeed*v/this._elementRect.height;this.rotate(y,b,!0)},this._dollyInternal=(m,v,y)=>{const b=Math.pow(.95,-m*this.dollySpeed),T=this._sphericalEnd.radius,x=this._sphericalEnd.radius*b,M=Ni(x,this.minDistance,this.maxDistance),C=M-x;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(x,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(C,!0),this._dollyToNoClamp(M,!0)):this._dollyToNoClamp(M,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?x:M)-T,this._dollyControlCoord.set(v,y)),this._lastDollyDirection=Math.sign(-m)},this._zoomInternal=(m,v,y)=>{const b=Math.pow(.95,m*this.dollySpeed),T=this._zoom,x=this._zoom*b;this.zoomTo(x,!0),this.dollyToCursor&&(this._changedZoom+=x-T,this._dollyControlCoord.set(v,y))},typeof tt>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new tt.Quaternion().setFromUnitVectors(this._camera.up,yu),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=$.NONE,this._target=new tt.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new tt.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new tt.Spherical().setFromVector3(ft.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new tt.Vector3,new tt.Vector3,new tt.Vector3,new tt.Vector3],this._updateNearPlaneCorners(),this._boundary=new tt.Box3(new tt.Vector3(-1/0,-1/0,-1/0),new tt.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new tt.Vector2,this.mouseButtons={left:$.ROTATE,middle:$.DOLLY,right:$.TRUCK,wheel:La(this._camera)?$.DOLLY:Js(this._camera)?$.ZOOM:$.NONE},this.touches={one:$.TOUCH_ROTATE,two:La(this._camera)?$.TOUCH_DOLLY_TRUCK:Js(this._camera)?$.TOUCH_ZOOM_TRUCK:$.NONE,three:$.TOUCH_TRUCK};const i=new tt.Vector2,s=new tt.Vector2,a=new tt.Vector2,r=m=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const b=this._domElement.getBoundingClientRect(),T=m.clientX/b.width,x=m.clientY/b.height;if(Tthis._interactiveArea.right||xthis._interactiveArea.bottom)return}const v=m.pointerType!=="mouse"?null:(m.buttons&Wt.LEFT)===Wt.LEFT?Wt.LEFT:(m.buttons&Wt.MIDDLE)===Wt.MIDDLE?Wt.MIDDLE:(m.buttons&Wt.RIGHT)===Wt.RIGHT?Wt.RIGHT:null;if(v!==null){const b=this._findPointerByMouseButton(v);b&&this._disposePointer(b)}if((m.buttons&Wt.LEFT)===Wt.LEFT&&this._lockedPointer)return;const y={pointerId:m.pointerId,clientX:m.clientX,clientY:m.clientY,deltaX:0,deltaY:0,mouseButton:v};this._activePointers.push(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,h(m)},o=m=>{m.cancelable&&m.preventDefault();const v=m.pointerId,y=this._lockedPointer||this._findPointerById(v);if(y){if(y.clientX=m.clientX,y.clientY=m.clientY,y.deltaX=m.movementX,y.deltaY=m.movementY,this._state=0,m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(m.buttons&Wt.LEFT)===Wt.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(m.buttons&Wt.MIDDLE)===Wt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(m.buttons&Wt.RIGHT)===Wt.RIGHT&&(this._state=this._state|this.mouseButtons.right);f()}},l=m=>{const v=this._findPointerById(m.pointerId);if(!(v&&v===this._lockedPointer)){if(v&&this._disposePointer(v),m.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=$.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=$.NONE;p()}};let c=-1;const u=m=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===$.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const x=this._domElement.getBoundingClientRect(),M=m.clientX/x.width,C=m.clientY/x.height;if(Mthis._interactiveArea.right||Cthis._interactiveArea.bottom)return}if(m.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===$.ROTATE||this.mouseButtons.wheel===$.TRUCK){const x=performance.now();c-x<1e3&&this._getClientRect(this._elementRect),c=x}const v=iN?-1:-3,y=m.deltaMode===1||m.ctrlKey?m.deltaY/v:m.deltaY/(v*10),b=this.dollyToCursor?(m.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,T=this.dollyToCursor?(m.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case $.ROTATE:{this._rotateInternal(m.deltaX,m.deltaY),this._isUserControllingRotate=!0;break}case $.TRUCK:{this._truckInternal(m.deltaX,m.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case $.SCREEN_PAN:{this._truckInternal(m.deltaX,m.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case $.OFFSET:{this._truckInternal(m.deltaX,m.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case $.DOLLY:{this._dollyInternal(-y,b,T),this._isUserControllingDolly=!0;break}case $.ZOOM:{this._zoomInternal(-y,b,T),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},d=m=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===km.ACTION.NONE){const v=m instanceof PointerEvent?m.pointerId:0,y=this._findPointerById(v);y&&this._disposePointer(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}m.preventDefault()}},h=m=>{if(!this._enabled)return;if(yp(this._activePointers,Kn),this._getClientRect(this._elementRect),i.copy(Kn),s.copy(Kn),this._activePointers.length>=2){const y=Kn.x-this._activePointers[1].clientX,b=Kn.y-this._activePointers[1].clientY,T=Math.sqrt(y*y+b*b);a.set(0,T);const x=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,M=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;s.set(x,M)}if(this._state=0,!m)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in m&&m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(m.buttons&Wt.LEFT)===Wt.LEFT&&(this._state=this._state|this.mouseButtons.left),(m.buttons&Wt.MIDDLE)===Wt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(m.buttons&Wt.RIGHT)===Wt.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&$.TRUCK)===$.TRUCK||(this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&$.DOLLY)===$.DOLLY||(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&$.ZOOM)===$.ZOOM||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},f=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,yp(this._activePointers,Kn);const v=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,y=v?-v.deltaX:s.x-Kn.x,b=v?-v.deltaY:s.y-Kn.y;if(s.copy(Kn),((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(y,b),this._isUserControllingRotate=!0),(this._state&$.DOLLY)===$.DOLLY||(this._state&$.ZOOM)===$.ZOOM){const T=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0,M=this.dollyDragInverted?-1:1;(this._state&$.DOLLY)===$.DOLLY?(this._dollyInternal(M*b*gu,T,x),this._isUserControllingDolly=!0):(this._zoomInternal(M*b*gu,T,x),this._isUserControllingZoom=!0)}if((this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE){const T=Kn.x-this._activePointers[1].clientX,x=Kn.y-this._activePointers[1].clientY,M=Math.sqrt(T*T+x*x),C=a.y-M;a.set(0,M);const w=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,E=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET?(this._dollyInternal(C*gu,w,E),this._isUserControllingDolly=!0):(this._zoomInternal(C*gu,w,E),this._isUserControllingZoom=!0)}((this._state&$.TRUCK)===$.TRUCK||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(y,b,!1,!1),this._isUserControllingTruck=!0),((this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(y,b,!1,!0),this._isUserControllingTruck=!0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(y,b,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},p=()=>{yp(this._activePointers,Kn),s.copy(Kn),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",g),this._domElement.ownerDocument.addEventListener("pointerlockerror",_),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),h())},this.unlockPointer=()=>{var m,v,y;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(m=this._domElement)===null||m===void 0||m.ownerDocument.exitPointerLock(),(v=this._domElement)===null||v===void 0||v.ownerDocument.removeEventListener("pointerlockchange",g),(y=this._domElement)===null||y===void 0||y.ownerDocument.removeEventListener("pointerlockerror",_),this.cancel()};const g=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},_=()=>{this.unlockPointer()};this._addAllEventListeners=m=>{this._domElement=m,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",d)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",d),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",g),this._domElement.ownerDocument.removeEventListener("pointerlockerror",_))},this.cancel=()=>{this._state!==$.NONE&&(this._state=$.NONE,this._activePointers.length=0,p())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=Ni(e.width,0,1),this._interactiveArea.height=Ni(e.height,0,1),this._interactiveArea.x=Ni(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=Ni(e.y,0,1-this._interactiveArea.height)}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}rotate(e,t,i=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+t,i)}rotateAzimuthTo(e,t=!1){return this.rotateTo(e,this._sphericalEnd.phi,t)}rotatePolarTo(e,t=!1){return this.rotateTo(this._sphericalEnd.theta,e,t)}rotateTo(e,t,i=!1){this._isUserControllingRotate=!1;const s=Ni(e,this.minAzimuthAngle,this.maxAzimuthAngle),a=Ni(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=s,this._sphericalEnd.phi=a,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,i||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!i||Ct(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Ct(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Hr.NONE,this._changedDolly=0,this._dollyToNoClamp(Ni(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const i=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),o=Ct(r,this._spherical.radius);if(!(i>e)&&o)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,r)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const a=!t||Ct(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(a)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(nl).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const i=!t||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(i)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=Ni(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const i=!t||Ct(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(i)}pan(e,t,i=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,t,i)}truck(e,t,i=!1){this._camera.updateMatrix(),es.setFromMatrixColumn(this._camera.matrix,0),ts.setFromMatrixColumn(this._camera.matrix,1),es.multiplyScalar(e),ts.multiplyScalar(-t);const s=ft.copy(es).add(ts),a=Tt.copy(this._targetEnd).add(s);return this.moveTo(a.x,a.y,a.z,i)}forward(e,t=!1){ft.setFromMatrixColumn(this._camera.matrix,0),ft.crossVectors(this._camera.up,ft),ft.multiplyScalar(e);const i=Tt.copy(this._targetEnd).add(ft);return this.moveTo(i.x,i.y,i.z,t)}elevate(e,t=!1){return ft.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+ft.x,this._targetEnd.y+ft.y,this._targetEnd.z+ft.z,t)}moveTo(e,t,i,s=!1){this._isUserControllingTruck=!1;const a=ft.set(e,t,i).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,a,this.boundaryFriction),this._needsUpdate=!0,s||this._target.copy(this._targetEnd);const r=!s||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(e,t,i,s=!1){const o=ft.set(e,t,i).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(o.x,o.y,o.z,s)}fitToBox(e,t,{cover:i=!1,paddingLeft:s=0,paddingRight:a=0,paddingBottom:r=0,paddingTop:o=0}={}){const l=[],c=e.isBox3?$r.copy(e):$r.setFromObject(e);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=fv(this._sphericalEnd.theta,hv),d=fv(this._sphericalEnd.phi,hv);l.push(this.rotateTo(u,d,t));const h=ft.setFromSpherical(this._sphericalEnd).normalize(),f=vv.setFromUnitVectors(h,xp),p=Ct(Math.abs(h.y),1);p&&f.multiply(Sp.setFromAxisAngle(yu,u)),f.multiply(this._yAxisUpSpaceInverse);const g=yv.makeEmpty();Tt.copy(c.min).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.min).setX(c.max.x).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.min).setY(c.max.y).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).setZ(c.min.z).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.min).setZ(c.max.z).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).setY(c.min.y).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).setX(c.min.x).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).applyQuaternion(f),g.expandByPoint(Tt),g.min.x-=s,g.min.y-=r,g.max.x+=a,g.max.y+=o,f.setFromUnitVectors(xp,h),p&&f.premultiply(Sp.invert()),f.premultiply(this._yAxisUpSpace);const _=g.getSize(ft),m=g.getCenter(Tt).applyQuaternion(f);if(La(this._camera)){const v=this.getDistanceToFitBox(_.x,_.y,_.z,i);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.dollyTo(v,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(Js(this._camera)){const v=this._camera,y=v.right-v.left,b=v.top-v.bottom,T=i?Math.max(y/_.x,b/_.y):Math.min(y/_.x,b/_.y);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.zoomTo(T,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const i=[],a="isObject3D"in e?km.createBoundingSphere(e,wp):wp.copy(e);if(i.push(this.moveTo(a.center.x,a.center.y,a.center.z,t)),La(this._camera)){const r=this.getDistanceToFitSphere(a.radius);i.push(this.dollyTo(r,t))}else if(Js(this._camera)){const r=this._camera.right-this._camera.left,o=this._camera.top-this._camera.bottom,l=2*a.radius,c=Math.min(r/l,o/l);i.push(this.zoomTo(c,t))}return i.push(this.setFocalOffset(0,0,0,t)),Promise.all(i)}setLookAt(e,t,i,s,a,r,o=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Hr.NONE,this._changedDolly=0;const l=Tt.set(s,a,r),c=ft.set(e,t,i);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(c.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,o||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!o||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold)&&Ct(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Ct(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Ct(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(e,t,i,s,a,r,o,l,c,u,d,h,f,p=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Hr.NONE,this._changedDolly=0;const g=ft.set(s,a,r),_=Tt.set(e,t,i);vi.setFromVector3(_.sub(g).applyQuaternion(this._yAxisUpSpace));const m=Gr.set(u,d,h),v=Tt.set(o,l,c);il.setFromVector3(v.sub(m).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(g.lerp(m,f));const y=il.theta-vi.theta,b=il.phi-vi.phi,T=il.radius-vi.radius;this._sphericalEnd.set(vi.radius+T*f,vi.phi+b*f,vi.theta+y*f),this.normalizeRotations(),this._needsUpdate=!0,p||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const x=!p||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold)&&Ct(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Ct(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Ct(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(x)}setPosition(e,t,i,s=!1){return this.setLookAt(e,t,i,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,s)}setTarget(e,t,i,s=!1){const a=this.getPosition(ft),r=this.setLookAt(a.x,a.y,a.z,e,t,i,s);return this._sphericalEnd.phi=Ni(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(e,t,i,s=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,t,i),this._needsUpdate=!0,s||this._focalOffset.copy(this._focalOffsetEnd);const a=!s||Ct(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&Ct(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&Ct(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(a)}setOrbitPoint(e,t,i){this._camera.updateMatrixWorld(),es.setFromMatrixColumn(this._camera.matrixWorldInverse,0),ts.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Da.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const s=ft.set(e,t,i),a=s.distanceTo(this._camera.position),r=s.sub(this._camera.position);es.multiplyScalar(r.x),ts.multiplyScalar(r.y),Da.multiplyScalar(r.z),ft.copy(es).add(ts).add(Da),ft.z=ft.z+a,this.dollyTo(a,!1),this.setFocalOffset(-ft.x,ft.y,-ft.z,!1),this.moveTo(e,t,i,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,t,i,s){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new tt.Vector4,typeof e=="number"?this._viewport.set(e,t,i,s):this._viewport.copy(e)}getDistanceToFitBox(e,t,i,s=!1){if(vp(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const a=e/t,r=this._camera.getEffectiveFOV()*Qo,o=this._camera.aspect;return((s?a>o:at.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(t=>t.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,t,i){const s=t.lengthSq();if(s===0)return e;const a=Tt.copy(t).add(e),o=this._boundary.clampPoint(a,Gr).sub(a),l=o.lengthSq();if(l===0)return e.add(t);if(l===s)return e;if(i===0)return e.add(t).add(o);{const c=1+i*l/t.dot(o);return e.add(Tt.copy(t).multiplyScalar(c)).add(o.multiplyScalar(1-i))}}_updateNearPlaneCorners(){if(La(this._camera)){const e=this._camera,t=e.near,i=e.getEffectiveFOV()*Qo,s=Math.tan(i*.5)*t,a=s*e.aspect;this._nearPlaneCorners[0].set(-a,-s,0),this._nearPlaneCorners[1].set(a,-s,0),this._nearPlaneCorners[2].set(a,s,0),this._nearPlaneCorners[3].set(-a,s,0)}else if(Js(this._camera)){const e=this._camera,t=1/e.zoom,i=e.left*t,s=e.right*t,a=e.top*t,r=e.bottom*t;this._nearPlaneCorners[0].set(i,a,0),this._nearPlaneCorners[1].set(s,a,0),this._nearPlaneCorners[2].set(s,r,0),this._nearPlaneCorners[3].set(i,r,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||vp(this._camera,"_collisionTest"))return e;const i=this._getTargetDirection(nl);Tp.lookAt(mv,i,this._camera.up);for(let s=0;s<4;s++){const a=Tt.copy(this._nearPlaneCorners[s]);a.applyMatrix4(Tp);const r=Gr.addVectors(this._target,a);vu.set(r,i),vu.far=this._spherical.radius+1;const o=vu.intersectObjects(this.colliderMeshes);o.length!==0&&o[0].distance{const i=()=>{this.removeEventListener("rest",i),t()};this.addEventListener("rest",i)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new tt.Sphere){const i=t,s=i.center;$r.makeEmpty(),e.traverseVisible(r=>{r.isMesh&&$r.expandByObject(r)}),$r.getCenter(s);let a=0;return e.traverseVisible(r=>{if(!r.isMesh)return;const o=r;if(!o.geometry)return;const l=o.geometry.clone();l.applyMatrix4(o.matrixWorld);const u=l.attributes.position;for(let d=0,h=u.count;di.preventDefault()),this.isFollowingViewer=!1,this.followTargetPosition=new S,this.followTargetQuaternion=new dt,this.followPositionLerpFactor=.12,this.followRotationSlerpFactor=.1,this.hasFollowTarget=!1,this.isRightMouseDown=!1,this.lastMouseX=null,this.lastMouseY=null,this.savedCameraState=null,this.isInReplayMode=!1}setMode(e){if(this.mode=e,e==="ballOrbit"){if(this.controls.enabled=!0,this.lastBallOrbitPos=null,this.ballOrbitScrollHandler||(this.ballOrbitScrollHandler=t=>{if(this.mode==="ballOrbit"&&!this.isFollowingViewer){t.preventDefault();const i=Math.max(this.controls.distance*.2,100);t.deltaY>0?this.controls.dolly(-i,!0):this.controls.dolly(i,!0)}},this.domElement.addEventListener("wheel",this.ballOrbitScrollHandler,{passive:!1})),this.targetBall){const t=this.targetBall.position;this.camera.position.distanceTo(t),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}return}if(e==="free"){if(this.controls.enabled=!1,!this.freeCamKeys){this.freeCamKeys={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},this.freeCamSpeed=2e3,this.freeCamRotation={yaw:0,pitch:0};const t=new S;this.camera.getWorldDirection(t),this.freeCamRotation.yaw=Math.atan2(t.x,t.z),this.freeCamRotation.pitch=Math.asin(-t.y),this.onKeyDown=i=>this.handleFreeCamKeyDown(i),this.onKeyUp=i=>this.handleFreeCamKeyUp(i),this.onMouseMove=i=>this.handleFreeCamMouseMove(i),this.onMouseDown=i=>{i.button===2&&this.mode==="free"&&!this.isFollowingViewer&&(this.isRightMouseDown=!0,this.domElement.requestPointerLock?.())},this.onMouseUp=i=>{i.button===2&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.())},this.onPointerLockChange=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onMouseLeave=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onWindowBlur=()=>{this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1)},this.onVisibilityChange=()=>{document.hidden&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1))},document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.onKeyUp),document.addEventListener("mousemove",this.onMouseMove),this.domElement.addEventListener("mousedown",this.onMouseDown),document.addEventListener("mouseup",this.onMouseUp),document.addEventListener("pointerlockchange",this.onPointerLockChange),this.domElement.addEventListener("mouseleave",this.onMouseLeave),window.addEventListener("blur",this.onWindowBlur),document.addEventListener("visibilitychange",this.onVisibilityChange)}this.isRightMouseDown=!1}else this.controls.enabled=!1,this.lastIsBallCam=null,this.currentBlend=0,this.targetBlend=0}setTargetCar(e){if(this.targetCar!==e&&(this.currentBallCamAngle=null,this.targetCar&&e)){this.targetHandoff={elapsed:0,duration:sN,startPosition:this.camera.position.clone(),startQuaternion:this.camera.quaternion.clone()};const t=new S().subVectors(this.camera.position,e.position);t.y=0,t.length()>.01&&(t.normalize(),this.smoothedCarYaw=Math.atan2(-t.x,-t.z)),this.lastCarPos&&this.lastCarPos.copy(e.position)}this.targetCar=e}setTargetBall(e){this.targetBall=e}handleFreeCamKeyDown(e){if(this.mode!=="free"||this.isFollowingViewer)return;const t=e.target;if(!(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable))switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!0;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!0;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!0;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!0;break;case"Space":this.freeCamKeys.up=!0;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!0;break}}handleFreeCamKeyUp(e){switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!1;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!1;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!1;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!1;break;case"Space":this.freeCamKeys.up=!1;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!1;break}}handleFreeCamMouseMove(e){if(this.mode!=="free"||!this.isRightMouseDown||this.isFollowingViewer)return;const t=e.movementX||0,i=e.movementY||0,s=.003;this.freeCamRotation.yaw-=t*s,this.freeCamRotation.pitch+=i*s,this.freeCamRotation.pitch=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,this.freeCamRotation.pitch))}updateFreeCam(e){if(!this.freeCamKeys)return;const t=new S(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));t.normalize();const i=new S(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));i.normalize();const s=new S(Math.sin(this.freeCamRotation.yaw-Math.PI/2),0,Math.cos(this.freeCamRotation.yaw-Math.PI/2)),a=new S(0,1,0),r=new S,o=this.freeCamSpeed*e;this.freeCamKeys.forward&&r.add(i.clone().multiplyScalar(o)),this.freeCamKeys.backward&&r.add(i.clone().multiplyScalar(-o)),this.freeCamKeys.right&&r.add(s.clone().multiplyScalar(o)),this.freeCamKeys.left&&r.add(s.clone().multiplyScalar(-o)),this.freeCamKeys.up&&r.add(a.clone().multiplyScalar(o)),this.freeCamKeys.down&&r.add(a.clone().multiplyScalar(-o)),r.length()>0&&r.normalize().multiplyScalar(o),this.camera.position.add(r);const l=this.camera.position.clone().add(t);this.camera.lookAt(l),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,l.x,l.y,l.z,!1)}update(e,t=!0){if(this.isFollowingViewer){this.updateFollowInterpolation(e);return}if(this.mode==="free"){this.updateFreeCam(e),this.controls.update(e);return}if(this.mode==="ballOrbit"){if(this.targetBall){const p=this.targetBall.position;this.lastBallOrbitPos||(this.lastBallOrbitPos=p.clone());const g=new S().subVectors(p,this.lastBallOrbitPos);if(this.controls.setTarget(p.x,p.y,p.z,!1),g.lengthSq()>.01){const _=new S;this.controls.getPosition(_);const m=_.x+g.x,v=_.y+g.y,y=_.z+g.z;this.controls.setPosition(m,v,y,!1),this.lastBallOrbitPos.copy(p)}}this.controls.update(e);return}if(!this.targetCar){this.controls.update(e);return}const i=this.targetCar.position.clone(),s=this.targetCar.quaternion;if(this.lastIsBallCam!==null&&this.lastIsBallCam!==t&&!t){const p=new S().subVectors(this.camera.position,i);p.y=0,p.length()>.01&&(p.normalize(),this.smoothedCarYaw=Math.atan2(-p.x,-p.z))}this.lastIsBallCam=t;const a=this.calculateCarCamPosition(i,s,e),r=this.calculateBallCamPosition(i,s,e);this.targetBlend=t?1:0;const o=Math.max(.15,Math.min(.6,this.baseDuration/this.transitionSpeed)),l=e/o;this.currentBlendthis.targetBlend&&(this.currentBlend=Math.max(this.currentBlend-l,this.targetBlend));const c=this.currentBlend,u=c*c*(3-2*c),d=new S().lerpVectors(a.cameraPos,r.cameraPos,u);this._tempMatrix.lookAt(a.cameraPos,a.lookTarget,new S(0,1,0)),this._tempQuatCarCam.setFromRotationMatrix(this._tempMatrix),this._tempMatrix.lookAt(r.cameraPos,r.lookTarget,new S(0,1,0)),this._tempQuatBallCam.setFromRotationMatrix(this._tempMatrix),this._tempQuatCarCam.dot(this._tempQuatBallCam)<0&&this._tempQuatBallCam.set(-this._tempQuatBallCam.x,-this._tempQuatBallCam.y,-this._tempQuatBallCam.z,-this._tempQuatBallCam.w);const h=new dt().slerpQuaternions(this._tempQuatCarCam,this._tempQuatBallCam,u);if(this.targetHandoff){this.targetHandoff.elapsed+=e;const p=Math.min(1,this.targetHandoff.elapsed/this.targetHandoff.duration),g=p*p*(3-2*p),_=d.clone(),m=h.clone();d.lerpVectors(this.targetHandoff.startPosition,_,g),h.slerpQuaternions(this.targetHandoff.startQuaternion,m,g),p>=1&&(this.targetHandoff=null)}if(this.camera.position.copy(d),this.camera.quaternion.copy(h),this.followAngle!==0){const p=this.followAngle*Math.PI/180;this.camera.rotateX(-p)}this.currentCamPos||(this.currentCamPos=new S),this.currentLookTarget||(this.currentLookTarget=new S),this.currentCamPos.copy(d);const f=new S(0,0,-1).applyQuaternion(this.camera.quaternion);this.currentLookTarget.copy(d).add(f.multiplyScalar(100)),this.enforceMinHeight()}calculateBallCamPosition(e,t,i=1/60){if(!this.targetBall)return this.calculateCarCamPosition(e,t,i);const s=this.targetBall.position.clone(),a=new S().subVectors(e,s);a.y=0,a.normalize();const r=e.clone().add(a.multiplyScalar(this.followDistance)),o=s.y-e.y,c=Math.min(1,Math.max(0,o/800));r.y=e.y+this.followHeight-c*100,r.y.01)s.normalize(),u=Math.atan2(s.x,s.z);else if(a>.05){s.normalize();let y=Math.atan2(s.x,s.z)-o;for(;y>Math.PI;)y-=Math.PI*2;for(;y<-Math.PI;)y+=Math.PI*2;Math.abs(y)>Math.PI/2?u=o+Math.PI:u=o}else u=o;this.lastCarPos.copy(e),this.smoothedCarYaw===void 0&&(this.smoothedCarYaw=u);let d=u-this.smoothedCarYaw;for(;d>Math.PI;)d-=Math.PI*2;for(;d<-Math.PI;)d+=Math.PI*2;const h=c?this.swivelSpeed*.4:this.swivelSpeed;this.smoothedCarYaw+=d*Math.min(1,h*(1/60));const f=-Math.sin(this.smoothedCarYaw),p=-Math.cos(this.smoothedCarYaw),g=new S(e.x+f*this.followDistance,e.y+this.followHeight,e.z+p*this.followDistance);g.yMath.PI;)s-=Math.PI*2;for(;s<-Math.PI;)s+=Math.PI*2;this.followCurrentOrbitParams.azimuth+=s*.15,this.followCurrentOrbitParams.polar+=(this.followTargetOrbitParams.polar-this.followCurrentOrbitParams.polar)*.15,this.controls.setTarget(t.x,t.y,t.z,!1),this.controls.dollyTo(this.followCurrentOrbitParams.distance,!1),this.controls.rotateTo(this.followCurrentOrbitParams.azimuth,this.followCurrentOrbitParams.polar,!1),this.controls.update(e)}}else{if(this.camera.position.lerp(this.followTargetPosition,this.followPositionLerpFactor),this.camera.quaternion.slerp(this.followTargetQuaternion,this.followRotationSlerpFactor),this.freeCamRotation){const i=new S;this.camera.getWorldDirection(i),this.freeCamRotation.yaw=Math.atan2(i.x,i.z),this.freeCamRotation.pitch=Math.asin(-i.y)}const t=new S;this.camera.getWorldDirection(t),t.multiplyScalar(100).add(this.camera.position),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}}setDefaultFreecamPosition(){if(this.camera.position.copy(this.defaultFreecamPosition),this.camera.lookAt(this.defaultFreecamLookAt),this.freeCamRotation){const e=new S;this.camera.getWorldDirection(e),this.freeCamRotation.yaw=Math.atan2(e.x,e.z),this.freeCamRotation.pitch=Math.asin(-e.y)}this.controls.setLookAt(this.defaultFreecamPosition.x,this.defaultFreecamPosition.y,this.defaultFreecamPosition.z,this.defaultFreecamLookAt.x,this.defaultFreecamLookAt.y,this.defaultFreecamLookAt.z,!1)}getIsPointerLocked(){return this.isPointerLocked||!1}setPointerLockCallback(e){this.onPointerLockStateChange=e}dispose(){this.controls.dispose(),this.ballOrbitScrollHandler&&this.domElement.removeEventListener("wheel",this.ballOrbitScrollHandler),this.onKeyDown&&document.removeEventListener("keydown",this.onKeyDown),this.onKeyUp&&document.removeEventListener("keyup",this.onKeyUp),this.onMouseMove&&document.removeEventListener("mousemove",this.onMouseMove),this.onMouseDown&&this.domElement.removeEventListener("mousedown",this.onMouseDown),this.onMouseUp&&document.removeEventListener("mouseup",this.onMouseUp),this.onPointerLockChange&&document.removeEventListener("pointerlockchange",this.onPointerLockChange),this.onMouseLeave&&this.domElement.removeEventListener("mouseleave",this.onMouseLeave),this.onWindowBlur&&window.removeEventListener("blur",this.onWindowBlur),this.onVisibilityChange&&document.removeEventListener("visibilitychange",this.onVisibilityChange)}}function xv(n){if(n.pitch===void 0||n.angle!==void 0)return n;const{pitch:e,...t}=n;return{...t,angle:e}}const rN={distance:260,height:90,angle:-4,stiffness:.45,swivelSpeed:4.3,transitionSpeed:1.3,fov:110};function oN(n={}){let e=null,t=null,i=n.mode??(n.follow?"follow":"orbit"),s=n.follow??null,a=n.ballCam??null,r=a??!0,o=xv({...n.settings}),l=1;const c=n.useRecordedSettings!==!1;let u=null;const d=new S;let h=!1;function f(){if(!(!t||!e)){if(t.player.controls.enabled=i==="orbit",i==="free")e.setMode("free");else if(i==="ballOrbit"){const y=_();y&&e.setTargetBall(y),e.setMode("ballOrbit")}else e.setMode("car");u=null}}function p(){return!c||!t||!s?null:t.player.adapter.getPlayer(s)?.cameraSettings??null}function g(){const y={...rN,...p(),...o};return l!==1&&y.distance!==void 0&&(y.distance*=l),y}function _(){if(!t)return null;const y=t.player.actorManager;return y.ballActorId!=null?y.actors[y.ballActorId]??null:null}function m(y){const b=g().fov;if(!b)return;const T=b*Math.PI/180,x=16/9,M=2*Math.atan(Math.tan(T/2)/x),C=2*Math.atan(Math.tan(T/2)/y.aspect),w=Math.max(M,C)*180/Math.PI;Math.abs(y.fov-w)>.1&&(y.fov=w,y.updateProjectionMatrix())}function v(y,b){if(!e)return;if(i==="free"){o.freeCamSpeed&&(e.freeCamSpeed=o.freeCamSpeed),e.update(b);return}if(i==="ballOrbit"){y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.update(b);return}const x=(s?y.cars.find(C=>C.name===s):void 0)?.object3d??null;if(!x){e.update(b);return}e.setTargetCar(x),y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.setFollowSettings(g());const M=s?y.player.adapter.getPlayer(s):void 0;r=a??M?.isBallCam??!0,d.copy(x.position),h=!0,e.update(b,r)}return{id:"camera",setup(y){t=y,e=new aN(y.camera,y.renderer.domElement),f()},beforeRender(y){if(!e||(m(y.camera),i==="orbit"))return;const b=performance.now(),T=u===null?1/60:Math.min(.1,(b-u)/1e3);u=b,v(y,T)},teardown(){i="orbit",t&&(t.player.controls.enabled=!0),e?.dispose(),e=null,t=null},setMode(y){y!==i&&(i=y,f())},getMode(){return i},follow(y){s=y,i="follow",f()},release(){i="orbit",t&&h&&t.player.controls.target.copy(d),f()},getTarget(){return s},setBallCam(y){a=y,y!==null&&(r=y)},getBallCam(){return r},setCameraSettings(y){o=y===null?{}:{...o,...xv(y)}},setDistanceScale(y){l=Math.max(.25,y)},getDistanceScale(){return l},getCameraSettings(){return g()},getRecordedSettings(){const y=p();return y?{...y}:null}}}const lN={"top-left":"top: 8px; left: 8px;","top-right":"top: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;"};function cN(n={}){const e=n.corner??"top-right",t=n.updateIntervalMs??500,i=()=>typeof n.mount=="function"?n.mount():n.mount??null;let s=null,a=null,r=null,o=0,l=performance.now(),c=0,u=0;const d=typeof n.onSample=="function";return{id:"fps-overlay",setup(h){if(l=performance.now(),o=0,u=h.player.getState().frameIndex,c=u,d)return;const f=i(),p=f!=null;s=document.createElement("div"),s.className="player-fps-overlay",s.style.cssText=p?` + `,transparent:!0,depthWrite:!1,blending:Ht});this.points=new sr(t,o),this.points.frustumCulled=!1,this.nextParticleIndex=0}setActive(e){this.active=e}emit(e,t,i,s=1){if(!this.active)return;const a=Math.floor(Math.random()*3)+3,r=Math.max(1,Math.round(a*s));for(let o=0;o=o.maxLife){o.active=!1,i[r]=0,s[r]=0;continue}t[r*3]+=o.velocity.x*e,t[r*3+1]+=o.velocity.y*e,t[r*3+2]+=o.velocity.z*e;const l=o.life/o.maxLife;i[r]=Math.pow(1-l,.5);const c=o.initialSize||3;s[r]=c*(1-l*.7),a[r*3]=1,a[r*3+1]=Math.max(.2,.9-l*.7),a[r*3+2]=Math.max(0,.4-l*.4),o.velocity.y+=20*e}this.geometry.attributes.position.needsUpdate=!0,this.geometry.attributes.alpha.needsUpdate=!0,this.geometry.attributes.size.needsUpdate=!0,this.geometry.attributes.color.needsUpdate=!0}addToScene(e){e.add(this.points)}removeFromScene(e){e.remove(this.points)}dispose(){this.geometry.dispose(),this.points.material.dispose()}}class bF{constructor(e,t,i,s){this.scene=e,this.team=t,this.trailWidth=i,this.trailLength=s,this.active=!0,this.dying=!1,this.deathTime=0,this.maxDeathTime=1.5,this.teamColors={0:new qe(.3,.6,1,.9),1:new qe(1,.5,.15,.9)},this.leftTarget=new Qe,this.rightTarget=new Qe,e.add(this.leftTarget),e.add(this.rightTarget),this.leftTrail=this.createTrail(this.leftTarget),this.rightTrail=this.createTrail(this.rightTarget),this.updateColors(),this.leftTrail.activate(),this.rightTrail.activate()}createTrail(e){const t=new pt(this.scene,!1),i=pt.createBaseMaterial();i.blending=Ht,i.depthWrite=!1,i.side=ct;const s=this.trailWidth,a=[new S(0,0,0),new S(0,s,0),new S(-s/2,s/2,0),new S(s/2,s/2,0)];return t.initialize(i,this.trailLength,!1,0,a,e),t.setAdvanceFrequency(60),t.mesh&&(t.mesh.frustumCulled=!1),t}updateColors(){const e=this.teamColors[this.team]||this.teamColors[0],t=new qe(e.x*.3,e.y*.3,e.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(e),this.leftTrail.material.uniforms.tailColor.value.copy(t)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(e),this.rightTrail.material.uniforms.tailColor.value.copy(t))}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.leftTrail.pause(),this.rightTrail.pause())}updatePosition(e,t,i){this.dying||(this.leftTarget.position.copy(e),this.rightTarget.position.copy(t),this.leftTarget.quaternion.copy(i),this.rightTarget.quaternion.copy(i),this.leftTarget.updateMatrixWorld(),this.rightTarget.updateMatrixWorld())}update(e){if(this.dying){this.deathTime+=e;const i=1-Math.min(1,this.deathTime/this.maxDeathTime),s=this.teamColors[this.team]||this.teamColors[0],a=new qe(s.x,s.y,s.z,s.w*i),r=new qe(s.x*.3,s.y*.3,s.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(a),this.leftTrail.material.uniforms.tailColor.value.copy(r)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(a),this.rightTrail.material.uniforms.tailColor.value.copy(r)),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.leftTrail.isActive&&this.leftTrail.update(e),this.rightTrail.isActive&&this.rightTrail.update(e)}dispose(){this.leftTrail.deactivate(),this.rightTrail.deactivate(),this.leftTrail.geometry&&this.leftTrail.geometry.dispose(),this.rightTrail.geometry&&this.rightTrail.geometry.dispose(),this.leftTrail.material&&this.leftTrail.material.dispose(),this.rightTrail.material&&this.rightTrail.material.dispose(),this.scene.remove(this.leftTarget),this.scene.remove(this.rightTarget)}}class xF{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.trailLength=80,this.trailWidth=15,this.arenaBounds={floor:0,ceiling:2044,wallX:4096,wallZ:5120},this.groundedThreshold=50,this.segments=[],this.currentSegment=null,this.wasGrounded=!0}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.team=e,this.currentSegment.updateColors()))}setActive(e){e&&!this.active?(this.currentSegment=null,this.wasGrounded=!0):!e&&this.active&&this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null),this.active=e}isGrounded(e){const t=this.groundedThreshold,i=this.arenaBounds;if(e.yi.ceiling-t)return{grounded:!0,surface:"ceiling",normal:new S(0,-1,0)};if(Math.abs(e.x)>i.wallX-t){const s=e.x>0?-1:1;return{grounded:!0,surface:"wall",normal:new S(s,0,0)}}if(Math.abs(e.z)>i.wallZ-t){const s=e.z>0?-1:1;return{grounded:!0,surface:"wall",normal:new S(0,0,s)}}return{grounded:!1,surface:null,normal:null}}emit(e,t,i){if(!this.active)return;const s=this.isGrounded(e);if(!s.grounded){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasGrounded=!1;return}(!this.wasGrounded||!this.currentSegment)&&(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new bF(this.scene,this.team,this.trailWidth,this.trailLength),this.segments.push(this.currentSegment)),this.wasGrounded=!0;const r=new S(-30,5,40),o=new S(-30,5,-40);r.applyQuaternion(t),o.applyQuaternion(t);const l=e.clone().add(r),c=e.clone().add(o),u=2;if(s.surface==="floor")l.y=u,c.y=u;else if(s.surface==="ceiling")l.y=this.arenaBounds.ceiling-u,c.y=this.arenaBounds.ceiling-u;else if(s.surface==="wall"){if(s.normal.x!==0){const d=s.normal.x>0?-this.arenaBounds.wallX+u:this.arenaBounds.wallX-u;l.x=d,c.x=d}else if(s.normal.z!==0){const d=s.normal.z>0?-this.arenaBounds.wallZ+u:this.arenaBounds.wallZ-u;l.z=d,c.z=d}}this.currentSegment.updatePosition(l,c,t)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}class wF{constructor(e){this.scene=e,this.renderer=null,this.camera=null,this.explosions={active:[],goalEvents:new Map,demoEvents:new Map},this.boostTrails=new Map,this.supersonicTrails=new Map,this.ballTrail=null,hF()}setRenderContext(e,t){this.renderer=e,this.camera=t,pF(this.scene,e,t)}reset(){this.explosions.active.forEach(e=>e.removeFromScene(this.scene)),this.explosions.active=[],this.clearGoalExplosions(),this.boostTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.boostTrails.clear(),this.supersonicTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.supersonicTrails.clear(),this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose(),this.ballTrail=null)}clearEvents(){this.explosions.goalEvents.clear(),this.explosions.demoEvents.clear()}setGoalEvents(e){this.explosions.goalEvents.clear();for(const t of e??[])Number.isFinite(t.frame)&&this.explosions.goalEvents.set(t.frame,{time:t.time,team:t.team??0,playerName:t.playerName??""})}resetBallTrail(){this.ballTrail&&this.ballTrail.reset()}clearGoalExplosions(){Bn&&Bn.clearActive();for(const e of this.explosions.active)e.removeFromScene(this.scene);this.explosions.active=[]}createBoostTrail(e,t){if(this.boostTrails.has(t)){const s=this.boostTrails.get(t);s.removeFromScene(this.scene),s.dispose()}const i=new vF(e);return i.addToScene(this.scene),this.boostTrails.set(t,i),i}removeBoostTrail(e){const t=this.boostTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.boostTrails.delete(e))}updateBoostTrail(e,t,i,s,a){const r=this.boostTrails.get(e);r&&(r.setActive(t),t&&r.emit(i,s,a,this._playbackSpeed||1))}createSupersonicTrail(e,t){if(this.supersonicTrails.has(e)){const s=this.supersonicTrails.get(e);s.removeFromScene(this.scene),s.dispose()}const i=new xF(this.scene,t);return i.addToScene(this.scene),this.supersonicTrails.set(e,i),i}removeSupersonicTrail(e){const t=this.supersonicTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.supersonicTrails.delete(e))}updateSupersonicTrail(e,t,i,s,a,r){let o=this.supersonicTrails.get(e);!o&&t&&(o=this.createSupersonicTrail(e,r)),o&&(r!==void 0&&o.team!==r&&o.setTeam(r),o.setActive(t),t&&o.emit(i,s,a))}createBallTrail(){return this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose()),this.ballTrail=new dF(this.scene,0),this.ballTrail.addToScene(this.scene),console.log("✓ Spiral ball trail created and added to scene"),this.ballTrail}updateBallTrail(e,t,i){this.ballTrail||this.createBallTrail(),i!==void 0&&this.ballTrail.team!==i&&this.ballTrail.setTeam(i);const s=1/60*(this._playbackSpeed||1);this.ballTrail.emit(e,t,s)}triggerGoalExplosion(e,t){const i=kT(this.scene,this.renderer,this.camera);i&&(this.camera&&(i.camera=this.camera),i.trigger(e,t))}triggerDemoExplosion(e,t,i){const s=LT(this.scene);s&&s.trigger(e)}update(e,t=!0,i=1){this._playbackSpeed=i;const s=e*i;di&&di.update(s),Bn&&Bn.update(s);for(let a=this.explosions.active.length-1;a>=0;a--){const r=this.explosions.active[a];r.update(s)&&(r.removeFromScene(this.scene),this.explosions.active.splice(a,1))}t&&(this.boostTrails.forEach(a=>{a.update(s)}),this.supersonicTrails.forEach(a=>{a.update(s)}),this.ballTrail&&this.ballTrail.update(s))}}const dv={Octane:65535,Dominus:16746496,Plank:8978176,Breakout:16711816,Hybrid:8913151,Merc:16776960},SF={0:5744895,1:16751680};function TF(n,e){return e===0||e===1?SF[e]:dv[n]||dv.Octane}class MF{constructor(e){this.scene=e,this.hitboxes=new Map,this.enabled=!1}setEnabled(e){this.enabled=e,this.hitboxes.forEach(({mesh:t})=>{t.visible=e})}createHitboxWireframe(e,t){const i=py[e]||py.Octane,s=TF(e,t),a=i.length,r=i.width,o=i.height,l=i.offsetX,c=i.offsetZ;console.log(`[HitboxManager] Creating hitbox for ${e}:`,{dims:i,length:a,width:r,height:o,offsetX:l,offsetY:c});const u=new Mt,d=new Ci(a,o,r),h=new Ye({color:s,transparent:!0,opacity:.35,depthTest:!1,depthWrite:!1,side:ct}),f=new we(d,h);f.frustumCulled=!1,f.renderOrder=1,f.position.set(l,c,0),u.add(f);const p=new Wh(d),g=new Rt({color:s,linewidth:2,transparent:!0,opacity:.9,depthTest:!1}),_=new Ln(p,g);_.frustumCulled=!1,_.renderOrder=2,_.position.set(l,c,0),u.add(_);const m=3.33,v=new yn(m,8,6),y=new gg(v),b=new Rt({color:16777215,linewidth:1,transparent:!0,opacity:.9,depthTest:!1}),T=new Ln(y,b);return T.frustumCulled=!1,u.add(T),u.userData.hitboxType=e,u.userData.team=t??null,u.frustumCulled=!1,u}addHitbox(e,t,i){const s=i===0||i===1?i:null;if(this.hitboxes.has(e)){const r=this.hitboxes.get(e);if(r.hitboxType===t&&r.team===s)return;this.scene.remove(r.mesh),r.mesh.traverse(o=>{o.geometry&&o.geometry.dispose(),o.material&&o.material.dispose()})}const a=this.createHitboxWireframe(t,s);a.visible=this.enabled,this.scene.add(a),this.hitboxes.set(e,{mesh:a,hitboxType:t,team:s})}removeHitbox(e){if(this.hitboxes.has(e)){const{mesh:t}=this.hitboxes.get(e);this.scene.remove(t),t.traverse(i=>{i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose()}),this.hitboxes.delete(e)}}updateHitboxes(e,t,i,s){if(!this.enabled)return;for(const[r,o]of Object.entries(t)){const l=e[o];if(!l||!l.userData.isCar)continue;const c=i?i(r):"Octane",u=s?s(r):null;this.addHitbox(o,c,u);const{mesh:d}=this.hitboxes.get(o);d.position.copy(l.position),d.quaternion.copy(l.quaternion),d.visible=this.enabled&&l.visible}const a=new Set(Object.values(t));for(const r of this.hitboxes.keys())a.has(r)||this.removeHitbox(r)}reset(){this.hitboxes.forEach(({mesh:e})=>{this.scene.remove(e),e.traverse(t=>{t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose()})}),this.hitboxes.clear()}dispose(){this.reset()}}const DT=["baseGroup","glowMesh","innerGlowMesh","lensColumnMesh","lensRimMesh","topGlowMesh","coreGlowMesh","highlightMesh"];function Sp(n,e,t,i){const s=new we(new Do(n,32),new Ye({color:e,transparent:!0,opacity:t,blending:Ht,side:ct,depthWrite:!1}));return s.rotation.x=-Math.PI/2,s.renderOrder=i,s}function hv(n,e){n&&n.traverse(t=>{const i=t;if(!i.isMesh||!(i.material instanceof Ye))return;const s=i.userData.baseOpacity;i.material.opacity=(s??i.material.opacity)*e})}function yu(n,e,t){n.rotation.x=-Math.PI/2,n.renderOrder=t,n.frustumCulled=!1,n.userData.baseOpacity=e,n.material.transparent=!0,n.material.opacity=e,n.material.side=ct,n.material.depthWrite=!1}function EF(n){const e=new Mt;e.renderOrder=98,e.frustumCulled=!1;const t=new Ye({color:1118477}),i=new Ye({color:16752640,blending:Ht}),s=new we(new Do(n*.55,48),t.clone());yu(s,.86,98),e.add(s);const a=new we(new ni(n*.45,n*.62,48),new Ye({color:16765242,blending:Ht}));yu(a,.78,100),a.position.y=1.4,e.add(a);function r(o,l,c){const u=new Ns;return[[o*Math.cos(-c*.72),o*Math.sin(-c*.72)],[l*Math.cos(-c),l*Math.sin(-c)],[l*Math.cos(c),l*Math.sin(c)],[o*Math.cos(c*.72),o*Math.sin(c*.72)]].forEach(([h,f],p)=>{p===0?u.moveTo(h,f):u.lineTo(h,f)}),u.closePath(),u}for(let o=0;o<3;o+=1){const l=o*(Math.PI*2)/3+Math.PI/2,c=new we(new dr(r(n*.52,n*1.42,.33)),t.clone());yu(c,.86,98),c.rotation.z=l,e.add(c);const u=new we(new dr(r(n*.66,n*1.2,.21)),i.clone());yu(u,.86,99),u.position.y=1.1,u.rotation.z=l,e.add(u)}return e}function fv(n,e){for(const t of DT){const i=n.userData[t];i&&(i.visible=e)}}function CF(){let n=new Map;function e(i){const s=i.player.adapter.boostPads;!s||s.size===0||(console.log(`[boost-pads] Creating ${s.size} boost pads...`),n=new Map,s.forEach((a,r)=>{const o=a.isBig;let l,c,u;if(o){l=new yn(37,24,18),c=new ii({color:16757274,emissive:16747008,emissiveIntensity:.42,metalness:.04,roughness:.08,clearcoat:1,clearcoatRoughness:.025,transmission:.18,thickness:30,ior:1.42,envMapIntensity:1.9,blending:Ht,transparent:!0,opacity:.68,depthWrite:!1}),u=new we(l,c),u.renderOrder=100;const p=EF(37*2.05);p.position.y=-140,u.add(p),u.userData.baseGroup=p;const g=new we(new cr(37*.12,37*.18,112,24,1,!0),new Ye({color:16761664,transparent:!0,opacity:.28,blending:Ht,side:ct,depthWrite:!1}));g.position.y=-62,g.renderOrder=99,u.add(g),u.userData.lensColumnMesh=g;const _=new we(new yn(37*1.03,24,14),new Ye({color:16768890,transparent:!0,opacity:.32,blending:Ht,side:un,depthWrite:!1}));_.renderOrder=101,u.add(_),u.userData.lensRimMesh=_;const m=new yn(37*1.3,20,14),v=new Ye({color:16758315,transparent:!0,opacity:.16,blending:Ht,side:un,depthWrite:!1}),y=new we(m,v);y.renderOrder=99,u.add(y),u.userData.glowMesh=y;const b=new yn(37*1.12,20,14),T=new Ye({color:16761130,transparent:!0,opacity:.22,blending:Ht,side:un,depthWrite:!1}),x=new we(b,T);x.renderOrder=99,u.add(x),u.userData.innerGlowMesh=x,u.userData.needsLight=!0}else{l=new cr(45,45*.92,8,32),c=new ii({color:16761370,emissive:16750336,emissiveIntensity:.72,metalness:.88,roughness:.14,clearcoat:1,clearcoatRoughness:.05,envMapIntensity:2,transparent:!0,opacity:1,depthWrite:!1}),u=new we(l,c),u.renderOrder=100;const g=Sp(45*1.42,16756736,.34,101);g.position.y=8/2+.15,u.add(g),u.userData.topGlowMesh=g;const _=Sp(45*.74,16777114,.42,102);_.position.y=8/2+.35,u.add(_),u.userData.coreGlowMesh=_;const m=Sp(45*.42,16775376,.46,103);m.position.set(-45*.18,8/2+.55,-45*.12),m.scale.y=.34,u.add(m),u.userData.highlightMesh=m}const h=o?130:10;if(u.position.set(a.position.x,h,a.position.y),u.userData.padId=r,u.userData.isBig=o,u.userData.isAvailable=!0,i.scene.add(u),n.set(r,u),u.userData.needsLight){const f=new hr(16751872,.7,480);f.decay=0,f.position.set(a.position.x,h-50,a.position.y),i.scene.add(f),u.userData.light=f}}),console.log(`[boost-pads] ✓ Created ${n.size} boost pad meshes`))}function t(i){i.player.adapter.boostPads.forEach((a,r)=>{const o=n.get(r);if(!o)return;const l=a.isAvailable;o.userData.isAvailable!==l&&(o.userData.isAvailable=l,l?(o.material.color.setHex(a.isBig?16757274:16761370),o.material.emissive.setHex(a.isBig?16747008:16750336),o.material.emissiveIntensity=a.isBig?.42:.72,o.material.opacity=a.isBig?.68:1,o.visible=!0,fv(o,!0),hv(o.userData.baseGroup,1),o.userData.light&&(o.userData.light.intensity=.85),o.userData.glowMesh&&(o.userData.glowMesh.visible=!0),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!0)):(o.material.color.setHex(a.isBig?9063424:9065472),o.material.emissive.setHex(0),o.material.emissiveIntensity=0,o.material.opacity=.2,o.visible=!0,fv(o,!1),o.userData.baseGroup&&(o.userData.baseGroup.visible=!0,hv(o.userData.baseGroup,.26)),o.userData.light&&(o.userData.light.intensity=0),o.userData.glowMesh&&(o.userData.glowMesh.visible=!1),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!1)))})}return{id:"boost-pads",setup(i){e(i)},beforeRender(i){t(i)},teardown(i){n.forEach(s=>{i.scene.remove(s),s.geometry.dispose(),s.material.dispose();for(const r of DT){const o=s.userData[r];o&&o.traverse(l=>{const c=l;c.isMesh&&(c.geometry.dispose(),c.material.dispose())})}const a=s.userData.light;a&&(i.scene.remove(a),a.dispose())}),n.clear()}}}const AF=2;function RF(n){if(n.frames.length===0)return null;const e=new Map;for(const s of n.frames)e.set(s.gameState,(e.get(s.gameState)??0)+1);let t=null,i=-1;for(const[s,a]of e.entries())a<=i||(t=s,i=a);return t}function PF(n,e){if(e===null)return null;for(const t of n.frames){if(t.gameState===e)break;return t.gameState}return null}function OT(n,e){return e===null?n.kickoffCountdown<=0:n.gameState===e}function Fg(n,e){return n.kickoffCountdown>0?!0:e!==null&&n.gameState===e}function IF(n,e){return n.ballFrames[e]?.position?!0:n.players.some(t=>t.frames[e]?.position)}function LF(n,e,t,i){return Fg(e,i)&&IF(n,t)}function kF(n,e){return n.timelineEvents.some(t=>t.kind==="goal"&&e.time>=t.time&&e.timec){const h=a.at(-1);h&&h.endTime>=c?h.endTime=Math.max(h.endTime,d):a.push({startTime:c,endTime:d})}o=u}return a}function OF(n,e,t){const i=vt.clamp(t,0,n);for(const s of e){if(i0&&(n.frames[s-1]?.kickoffCountdown??0)>0;)s-=1;let a=e+1;for(;a0;)a+=1;let r=0;for(let c=s;cl>s&&OT(o,t));return!r||r.time===e?null:r.time}function VF(n,e,t,i){const s=vh(n,e),a=n.frames[s];if(!a||!Yu(n,a,s,t,i))return null;const r=n.frames.find((c,u)=>u>s&&!Yu(n,c,u,t,i));if(r)return r.time===e?null:r.time;let o=s;for(;o>0&&Yu(n,n.frames[o-1],o-1,t,i);)o-=1;const l=n.frames[o]?.time;return l===void 0||l===e?null:l}function GF(n){return!!n?.position&&n?.isPresent!==!1}function $F(n,e,t){for(let i=n.length-1;i>=0;i-=1){const s=n[i],a=t-s.time;if(!(a<0)){if(a>zF)break;if(s.kind==="demo"&&s.secondaryPlayerId===e)return s}}return null}const WF="space",XF={space:{id:"space",skyboxUrl:"/skyboxes/PlanetaryEarth4k.hdr",exposure:1.45,rotation:{x:8,y:0,z:28},animation:{enabled:!0,speed:2}}};function KF(n){if(n===!1)return null;if(typeof n=="string"){const e=XF[n];return e||(console.warn(`[player] unknown environment "${n}"; using neutral default`),null)}return n}const qF=new Proxy({},{get:()=>()=>{}});function mv(n){if(!n)return null;const e={};for(const t of Object.keys(n)){const i=n[t];typeof i=="number"&&Number.isFinite(i)&&(e[t]=i)}return e}const _v=48,vu=.14,YF=16,jF=16,ZF=.003,JF=.05,QF=1.08,gv=4120,yv=5140,eN=0,tN=2200,nN=new S(0,700,0),iN=new S(-1,0,0),sN=new S(0,-1,0),aN=new S(0,900,0),rN=new S(0,1,0),oN=new S(9600,-5500,12600).normalize();function lN(n,e){const t=Number.isFinite(e)&&e>0?e:1.7777777777777777,i=n==="overhead"?nN.clone():aN.clone(),s=n==="overhead"?iN.clone():rN.clone(),a=n==="overhead"?sN.clone():oN.clone(),r=cN({aspect:t,fov:_v,forward:a,margin:QF,target:i,up:s});return{position:i.clone().addScaledVector(a,-r),target:i,up:s,fov:_v}}function cN(n){const{aspect:e,fov:t,forward:i,margin:s,target:a,up:r}=n,o=i.clone().normalize(),l=new S().crossVectors(o,r).normalize(),c=new S().crossVectors(l,o).normalize(),u=Math.tan(vt.degToRad(t)/2),d=u*e;let h=1;for(const f of[-gv,gv])for(const p of[eN,tN])for(const g of[-yv,yv]){const _=new S(f,p,g).sub(a),m=Math.abs(_.dot(l)),v=Math.abs(_.dot(c)),y=_.dot(o);h=Math.max(h,m/d-y,v/u-y)}return Math.max(1,h*s)}function uN(n){const e=new Mt;return e.name="replayRoot",e.matrixAutoUpdate=!1,e.matrix.set(1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1),n.add(e),e}class dN extends EventTarget{container;adapter;replay;options;sceneManager;arenaManager;actorManager;effectsManager;hitboxManager;controls;replayRoot;sceneState;effectsEnabled;ready;plugins=[];beforeRenderCallbacks=[];resizeObserver=null;animationFrameId=null;disposed=!1;playing=!1;readyResolved=!1;speed;loop;currentTime=0;lastTickAt=null;freeCameraTransition=null;cameraDistanceScaleValue;customCameraSettingsValue;cameraViewModeValue;attachedPlayerIdValue;ballCamEnabledValue;boostMeterEnabledValue;boostPickupAnimationEnabledValue;hitboxWireframesEnabledValue;hitboxOnlyModeEnabledValue;hitboxTypeByName=null;hitboxTeamByName=null;hitboxesActive=!1;skipPostGoalTransitionsEnabledValue;skipKickoffsEnabledValue;attachmentTouched=!1;liveGameState=null;kickoffGameState=null;timelineSegmentsCacheKey=null;timelineSegmentsCache=[];constructor(e,t,i={},s=null){super(),this.container=e,this.adapter=t,this.replay=s,this.options=i,this.updateReplayGameStates(),this.speed=Math.max(.1,i.initialPlaybackRate??i.speed??1),this.loop=i.loop??!1,this.cameraDistanceScaleValue=Math.max(.25,i.initialCameraDistanceScale??1),this.customCameraSettingsValue=mv(i.initialCustomCameraSettings),this.attachedPlayerIdValue=i.initialAttachedPlayerId??null,this.cameraViewModeValue=i.initialCameraViewMode??(this.attachedPlayerIdValue?"follow":"free"),this.ballCamEnabledValue=i.initialBallCamEnabled??null,this.boostMeterEnabledValue=i.initialBoostMeterEnabled??!1,this.boostPickupAnimationEnabledValue=i.initialBoostPickupAnimationEnabled??!0,this.hitboxWireframesEnabledValue=i.initialHitboxWireframesEnabled??!1,this.hitboxOnlyModeEnabledValue=i.initialHitboxOnlyModeEnabled??!1,this.skipPostGoalTransitionsEnabledValue=i.initialSkipPostGoalTransitionsEnabled??!0,this.skipKickoffsEnabledValue=i.initialSkipKickoffsEnabled??!1,this.sceneManager=new RD(e,{assetBase:i.assetBase,preserveDrawingBuffer:i.preserveDrawingBuffer}),this.sceneManager.initDefaultEnvironment(),this.applyEnvironmentSpec(i.environment??WF),this.arenaManager=new vO(this.scene,{assetBase:i.assetBase}),this.effectsEnabled=i.effects??!0,this.effectsManager=this.effectsEnabled?new wF(this.scene):qF,this.actorManager=new cF(this.scene,this.effectsManager,{assetBase:i.assetBase}),i.motionInterpolation&&this.setMotionInterpolation(i.motionInterpolation),this.actorManager.initFromFramework(t),this.actorManager.initInterpolants(t.getTimelines()),this.hitboxManager=new MF(this.scene),this.syncGoalEvents(),this.controls=new uD(this.camera,this.renderer.domElement),this.controls.zoomSpeed=2.5,this.camera.position.set(0,4e3,6e3),this.controls.target.set(0,200,0),this.controls.update(),this.replayRoot=uN(this.scene),this.sceneState=this.createSceneState(),this.ready=Promise.all([this.arenaManager.loadArenaMeshes().catch(a=>{console.warn("[player] arena load failed",a)}),this.prepareReplayAssets()]).then(()=>{this.markReady()}),this.installResizeHandling();for(const a of i.plugins??[])this.installPlugin(a,!1);this.plugins.some(a=>a.plugin.id==="boost-pads")||this.installPlugin(CF(),!1),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),this.scheduleAnimationFrame(),this.emitChange(),i.autoplay&&this.play()}get scene(){return this.sceneManager.scene}get camera(){return this.sceneManager.camera}get renderer(){return this.sceneManager.renderer}get duration(){return this.adapter.duration}async replaceReplay(e,t,i={}){if(this.disposed)throw new Error("Cannot replace replay on a disposed ReplayPlayer");const s=i.preservePlayback??this.playing;this.playing&&this.setPlayingInternal(!1),this.teardownPlugins(),this.effectsManager.reset(),this.effectsManager.clearEvents?.(),this.hitboxManager.reset(),this.actorManager.reset(),this.adapter=e,this.replay=t,this.updateReplayGameStates(),this.timelineSegmentsCacheKey=null,this.timelineSegmentsCache=[],this.hitboxTypeByName=null,this.hitboxTeamByName=null,this.hitboxesActive=!1,this.freeCameraTransition=null,this.actorManager.initFromFramework(e),this.actorManager.initInterpolants(e.getTimelines()),this.syncGoalEvents();const a=this.attachedPlayerIdValue&&this.adapter.playerList.some(r=>r.id===this.attachedPlayerIdValue)?this.attachedPlayerIdValue:null;a!==this.attachedPlayerIdValue&&(this.attachedPlayerIdValue=a,this.cameraViewModeValue==="follow"&&(this.cameraViewModeValue="free")),this.seekInternal(i.currentTime??0),this.readyResolved=!1,this.ready=this.prepareReplayAssets().then(()=>{this.markReady()}),await this.ready,this.setupPlugins(),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),s&&this.setPlayingInternal(!0),this.render(),this.emitChange()}setEnvironment(e){this.applyEnvironmentSpec(e)}applyEnvironmentSpec(e){const t=KF(e);if(!t){this.sceneManager.setDefaultBackground();return}this.sceneManager.applyEnvironment(t).catch(i=>{console.warn(`[player] environment "${t.id}" failed to load`,i)})}play(){this.playing||(this.setPlayingInternal(!0),this.emitChange())}pause(){this.playing&&(this.setPlayingInternal(!1),this.emitChange())}togglePlayback(){this.playing?this.pause():this.play()}seek(e){this.seekInternal(e),this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setPlaybackRate(e){this.speed=Math.max(.1,e),this.emitChange()}setLoop(e){this.loop=e}setMotionInterpolation(e){this.actorManager.interpolationMethod=e==="linear"?"lerp":"hermite"}setFrameIndex(e){const t=this.adapter.frameTimes;if(t.length===0||!Number.isFinite(e))return;const i=Math.min(Math.max(Math.trunc(e),0),t.length-1);this.playing&&this.setPlayingInternal(!1),this.seekInternal(t[i]),this.emitChange()}stepFrames(e){Number.isFinite(e)&&this.setFrameIndex(this.adapter.frameIndexAt(this.currentTime)+Math.trunc(e))}stepForwardFrame(){this.stepFrames(1)}stepBackwardFrame(){this.stepFrames(-1)}setCameraDistanceScale(e){this.cameraDistanceScaleValue=Math.max(.25,e),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue),this.emitChange()}setCustomCameraSettings(e){this.applyCustomCameraSettings(e),this.emitChange()}setAttachedPlayer(e){this.attachedPlayerIdValue=e,this.cameraViewModeValue=e?"follow":"free",this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setCameraViewMode(e){this.cameraViewModeValue=e,this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setFreeCameraPreset(e,t={}){this.cameraViewModeValue="free",this.attachmentTouched=!0,this.syncCameraAttachment();const i=lN(e,this.camera.aspect);t.instant?(this.camera.position.copy(i.position),this.controls.target.copy(i.target),this.camera.up.copy(i.up).normalize(),this.camera.fov=i.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(i.target),this.controls.enabled=!0,this.freeCameraTransition=null):this.freeCameraTransition=i,this.emitChange()}setBallCamEnabled(e){this.ballCamEnabledValue=e,this.getCameraPlugin()?.setBallCam(e),this.emitChange()}setBoostMeterEnabled(e){this.boostMeterEnabledValue=e,this.emitChange()}setBoostPickupAnimationEnabled(e){this.boostPickupAnimationEnabledValue=e,this.emitChange()}setHitboxWireframesEnabled(e){this.hitboxWireframesEnabledValue=e,this.emitChange()}setHitboxOnlyModeEnabled(e){this.hitboxOnlyModeEnabledValue=e,this.emitChange()}setSkipPostGoalTransitionsEnabled(e){this.skipPostGoalTransitionsEnabledValue=e,e&&this.playing&&this.skipPostGoalTransitionIfNeeded(),this.emitChange()}setSkipKickoffsEnabled(e){this.skipKickoffsEnabledValue=e,e&&this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setState(e){e.speed!==void 0&&(this.speed=Math.max(.1,e.speed)),e.cameraDistanceScale!==void 0&&(this.cameraDistanceScaleValue=Math.max(.25,e.cameraDistanceScale),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue)),e.customCameraSettings!==void 0&&this.applyCustomCameraSettings(e.customCameraSettings),e.cameraViewMode!==void 0&&(this.cameraViewModeValue=e.cameraViewMode,this.attachmentTouched=!0),e.attachedPlayerId!==void 0&&(this.attachedPlayerIdValue=e.attachedPlayerId,this.attachmentTouched=!0,e.cameraViewMode===void 0&&(this.cameraViewModeValue=e.attachedPlayerId?"follow":"free")),(e.cameraViewMode!==void 0||e.attachedPlayerId!==void 0)&&(this.freeCameraTransition=null,this.syncCameraAttachment()),e.useReplayBallCam===!0?(this.ballCamEnabledValue=null,this.getCameraPlugin()?.setBallCam(null)):e.ballCamEnabled!==void 0&&(this.ballCamEnabledValue=e.ballCamEnabled,this.getCameraPlugin()?.setBallCam(e.ballCamEnabled)),e.boostMeterEnabled!==void 0&&(this.boostMeterEnabledValue=e.boostMeterEnabled),e.boostPickupAnimationEnabled!==void 0&&(this.boostPickupAnimationEnabledValue=e.boostPickupAnimationEnabled),e.hitboxWireframesEnabled!==void 0&&(this.hitboxWireframesEnabledValue=e.hitboxWireframesEnabled),e.hitboxOnlyModeEnabled!==void 0&&(this.hitboxOnlyModeEnabledValue=e.hitboxOnlyModeEnabled),e.skipPostGoalTransitionsEnabled!==void 0&&(this.skipPostGoalTransitionsEnabledValue=e.skipPostGoalTransitionsEnabled),e.skipKickoffsEnabled!==void 0&&(this.skipKickoffsEnabledValue=e.skipKickoffsEnabled),e.currentTime!==void 0&&this.seekInternal(e.currentTime),e.playing!==void 0&&e.playing!==this.playing&&this.setPlayingInternal(e.playing),this.playing&&(e.currentTime!==void 0||e.playing!==void 0)&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}getState(){const e=this.adapter.frameIndexAt(this.currentTime),t=this.getCameraPlugin();let i=this.cameraViewModeValue,s=this.attachedPlayerIdValue;if(t)if(t.getMode()==="follow"){i="follow";const a=t.getTarget();s=(a?this.adapter.playerList.find(o=>o.name===a):void 0)?.id??s}else i="free",s=null;return{currentTime:this.currentTime,duration:this.duration,frameIndex:e,activeMetadata:this.replay?UF(this.replay,e,this.currentTime):null,playing:this.playing,speed:this.speed,cameraDistanceScale:this.cameraDistanceScaleValue,customCameraSettings:this.customCameraSettingsValue,cameraViewMode:i,attachedPlayerId:s,ballCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,useReplayBallCam:this.ballCamEnabledValue===null,effectiveBallCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,boostMeterEnabled:this.boostMeterEnabledValue,boostPickupAnimationEnabled:this.boostPickupAnimationEnabledValue,hitboxWireframesEnabled:this.hitboxWireframesEnabledValue,hitboxOnlyModeEnabled:this.hitboxOnlyModeEnabledValue,skipPostGoalTransitionsEnabled:this.skipPostGoalTransitionsEnabledValue,skipKickoffsEnabled:this.skipKickoffsEnabledValue}}getSnapshot(){return this.getState()}getTimelineDuration(){return this.replay?.duration??this.duration}getTimelineCurrentTime(){return this.projectReplayTimeToTimeline(this.currentTime).timelineTime}getTimelineSegments(){if(!this.replay)return[];const e=`${this.skipPostGoalTransitionsEnabledValue}:${this.skipKickoffsEnabledValue}`;return this.timelineSegmentsCacheKey===e?this.timelineSegmentsCache:(this.timelineSegmentsCacheKey=e,this.timelineSegmentsCache=DF(this.replay,this.skipPostGoalTransitionsEnabledValue,this.skipKickoffsEnabledValue,this.liveGameState,this.kickoffGameState),this.timelineSegmentsCache)}projectReplayTimeToTimeline(e){return OF(this.replay?.duration??this.duration,this.getTimelineSegments(),e)}projectTimelineTimeToReplay(e){return FF(this.replay?.duration??this.duration,this.getTimelineDuration(),this.getTimelineSegments(),e)}subscribe(e){const t=i=>{e(i.detail)};return this.addEventListener("change",t),e(this.getState()),()=>{this.removeEventListener("change",t)}}onBeforeRender(e){return this.beforeRenderCallbacks.push(e),()=>{const t=this.beforeRenderCallbacks.indexOf(e);t>=0&&this.beforeRenderCallbacks.splice(t,1)}}addPlugin(e){return this.installPlugin(e,!0)}removePlugin(e){const t=this.plugins.findIndex(s=>s.plugin.id===e);if(t<0)return!1;const[i]=this.plugins.splice(t,1);return i.plugin.teardown?.(this.createPluginContext()),!0}getPlugins(){return this.plugins.map(e=>e.plugin)}destroy(){if(!this.disposed){for(this.disposed=!0,this.playing=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.beforeRenderCallbacks.length=0;this.plugins.length>0;)this.plugins.pop()?.plugin.teardown?.(this.createPluginContext());this.controls.dispose(),this.effectsEnabled&&this.effectsManager.reset(),this.hitboxManager.dispose(),this.actorManager.reset(),this.sceneManager.dispose()}}dispose(){this.destroy()}setPlayingInternal(e){this.playing=e,this.lastTickAt=null,e?this.actorManager.resumeAnimations():this.actorManager.pauseAnimations()}prepareReplayAssets(){return this.actorManager.waitForBallModel().catch(()=>!1).then(()=>{if(this.effectsEnabled)try{this.effectsManager.setRenderContext(this.renderer,this.camera)}catch(e){console.warn("[player] explosion warmup failed",e)}})}markReady(){this.readyResolved=!0,this.lastTickAt=null}updateReplayGameStates(){if(!this.replay){this.liveGameState=null,this.kickoffGameState=null;return}this.liveGameState=RF(this.replay),this.kickoffGameState=PF(this.replay,this.liveGameState)}syncGoalEvents(){this.effectsEnabled&&(this.effectsManager.clearEvents?.(),this.replay&&this.effectsManager.setGoalEvents(this.replay.timelineEvents.filter(e=>e.kind==="goal").map(e=>({frame:e.frame,time:e.time,team:e.isTeamZero?0:1,playerName:e.playerName??""}))))}teardownPlugins(){const e=this.createPluginContext();for(const t of this.plugins)t.plugin.teardown?.(e)}setupPlugins(){for(const e of this.plugins)e.plugin.setup?.(this.createPluginContext()),e.plugin.id==="camera"&&this.pushCameraParityState(),e.plugin.onStateChange?.(this.createPluginStateContext(this.getState()))}seekInternal(e){this.currentTime=vt.clamp(e,0,this.duration),this.actorManager.seekAnimations(this.currentTime),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()}getPlaybackEndTime(){return this.replay?NF(this.replay.duration,this.getTimelineSegments()):this.duration}skipPastKickoffIfNeeded(){if(!this.replay||!this.skipKickoffsEnabledValue)return!1;const e=HF(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}skipPostGoalTransitionIfNeeded(){if(!this.replay||!this.skipPostGoalTransitionsEnabledValue)return!1;const e=VF(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}getCameraPlugin(){const e=this.plugins.find(t=>t.plugin.id==="camera")?.plugin;return e&&typeof e.follow=="function"?e:null}playerNameForId(e){return this.adapter.playerList.find(t=>t.id===e)?.name??null}applyReplayBallCam(){if(this.ballCamEnabledValue!==null||this.cameraViewModeValue!=="follow"||!this.attachedPlayerIdValue)return;const e=this.playerNameForId(this.attachedPlayerIdValue);if(!e)return;const t=this.adapter.getAllPlayers().find(i=>i.name===e);t&&this.getCameraPlugin()?.setBallCam(t.isBallCam)}syncCameraAttachment(){const e=this.getCameraPlugin();if(e){if(this.cameraViewModeValue==="follow"&&this.attachedPlayerIdValue){const t=this.playerNameForId(this.attachedPlayerIdValue);if(!t){console.warn(`[player] no player with id ${JSON.stringify(this.attachedPlayerIdValue)}`);return}this.camera.up.set(0,1,0),e.follow(t);return}e.getMode()==="follow"&&e.release()}}applyCustomCameraSettings(e){this.customCameraSettingsValue=mv(e);const t=this.getCameraPlugin();t&&(t.setCameraSettings(null),this.customCameraSettingsValue&&t.setCameraSettings(this.customCameraSettingsValue))}pushCameraParityState(){const e=this.getCameraPlugin();e&&(this.cameraDistanceScaleValue!==1&&e.setDistanceScale(this.cameraDistanceScaleValue),this.customCameraSettingsValue&&e.setCameraSettings(this.customCameraSettingsValue),this.ballCamEnabledValue!==null&&e.setBallCam(this.ballCamEnabledValue),this.attachmentTouched&&this.syncCameraAttachment())}applyInitialCameraOptions(){const e=this.options;(e.initialAttachedPlayerId!==void 0||e.initialCameraViewMode!==void 0)&&(this.attachmentTouched=!0),this.pushCameraParityState()}computeFrameRenderInfo(){const e=this.adapter.frameTimes,t=this.adapter.frameIndexAt(this.currentTime),i=Math.min(t+1,Math.max(e.length-1,0)),s=e[t]??0,a=e[i]??s,r=a>s?vt.clamp((this.currentTime-s)/(a-s),0,1):0;return{frameIndex:t,nextFrameIndex:i,alpha:r,currentTime:this.currentTime}}installResizeHandling(){typeof ResizeObserver>"u"||(this.resizeObserver=new ResizeObserver(()=>this.sceneManager.onWindowResize()),this.resizeObserver.observe(this.container))}scheduleAnimationFrame(){this.animationFrameId!==null||this.disposed||(this.animationFrameId=requestAnimationFrame(this.tick))}tick=e=>{if(this.animationFrameId=null,this.disposed)return;let t=!1,i=0;if(this.playing&&this.readyResolved){i=this.lastTickAt===null?0:Math.min(.1,(e-this.lastTickAt)/1e3),this.lastTickAt=e;let s=this.currentTime+i*this.speed;const a=this.getPlaybackEndTime();s>=a&&(this.loop?(s=0,this.actorManager.seekAnimations(0),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()):(s=a,this.playing=!1)),t=s!==this.currentTime||!this.playing,this.currentTime=s,this.playing&&(t=this.skipPostGoalTransitionIfNeeded()||t,t=this.skipPastKickoffIfNeeded()||t)}else this.playing&&(this.lastTickAt=null);this.render(i),t&&this.emitChange(),this.scheduleAnimationFrame()};renderFrame(e=0){if(this.adapter.seek(this.currentTime),this.playing&&this.actorManager.updateAnimations(e*this.speed),this.actorManager.updateFromFramework(this.adapter,this.currentTime),this.updatePlayerStates(),this.applyReplayBallCam(),this.updateHitboxVisualization(),this.effectsManager.update(e,this.playing,this.speed),this.playing&&this.actorManager.updateWheelRotations(),this.sceneManager.updateSkyboxAnimation(this.playing?e*this.speed:0),this.controls.update(),this.beforeRenderCallbacks.length>0){const t=this.computeFrameRenderInfo();for(const i of[...this.beforeRenderCallbacks])i(t)}if(this.plugins.length>0){const t=this.createRenderContext();for(const i of this.plugins)i.plugin.beforeRender?.(t)}this.updateFreeCameraTransition(),this.renderer.render(this.scene,this.camera)}render(e=0){this.renderFrame(e)}updateFreeCameraTransition(){const e=this.freeCameraTransition;if(!e)return;this.controls.enabled=!1,this.camera.position.lerp(e.position,vu),this.controls.target.lerp(e.target,vu),this.camera.up.lerp(e.up,vu).normalize(),this.camera.fov=vt.lerp(this.camera.fov,e.fov,vu),this.camera.updateProjectionMatrix(),this.camera.lookAt(this.controls.target);const t=this.camera.position.distanceToSquared(e.position)<=YF,i=this.controls.target.distanceToSquared(e.target)<=jF,s=this.camera.up.angleTo(e.up)<=ZF,a=Math.abs(this.camera.fov-e.fov)<=JF;!t||!i||!s||!a||(this.camera.position.copy(e.position),this.controls.target.copy(e.target),this.camera.up.copy(e.up).normalize(),this.camera.fov=e.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(e.target),this.controls.enabled=!0,this.freeCameraTransition=null)}updatePlayerStates(){if(!this.playing)return;const e=this.hitboxOnlyModeEnabledValue;for(const t of this.adapter.getAllPlayers())this.actorManager.updateBoostState(t.name,t.isBoosting&&!e,t.isKickoffReset),this.actorManager.updateSupersonicState(t.name,t.isSupersonic&&!e,t.team)}updateHitboxVisualization(){const e=this.hitboxWireframesEnabledValue||this.hitboxOnlyModeEnabledValue;if(!e&&!this.hitboxesActive||(this.hitboxesActive=e,this.hitboxManager.setEnabled(e),!e))return;const t=this.actorManager;if(this.hitboxTypeByName||(this.hitboxTypeByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.hitboxType]))),this.hitboxTeamByName||(this.hitboxTeamByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.team]))),this.hitboxManager.updateHitboxes(t.actors,t.playerNameToCarActorId,i=>this.hitboxTypeByName?.get(i)??"Octane",i=>this.hitboxTeamByName?.get(i)??null),this.hitboxOnlyModeEnabledValue)for(const i of Object.values(t.playerNameToCarActorId)){const s=i===void 0?void 0:t.actors[i];s&&(s.visible=!1)}}installPlugin(e,t){const i=typeof e=="function"?e():e;if(this.plugins.some(a=>a.plugin.id===i.id))throw new Error(`Player plugin "${i.id}" is already installed`);const s={definition:e,plugin:i};return this.plugins.push(s),i.setup?.(this.createPluginContext()),i.id==="camera"&&this.pushCameraParityState(),i.onStateChange?.(this.createPluginStateContext(this.getState())),t&&this.render(),()=>{const a=this.plugins.indexOf(s);a<0||(this.plugins.splice(a,1),i.teardown?.(this.createPluginContext()))}}createSceneState(){const e=this.actorManager,t=this,i=new we;return{get scene(){return t.scene},replayRoot:this.replayRoot,get camera(){return t.camera},get renderer(){return t.renderer},controls:this.controls,resize:()=>this.sceneManager.onWindowResize(),dispose:()=>this.destroy(),get ballMesh(){return(e.ballActorId!=null?e.actors[e.ballActorId]:null)??i},get playerMeshes(){const s=new Map;for(const a of t.adapter.playerList){const r=e.playerNameToCarActorId[a.name],o=r!=null?e.actors[r]:void 0;o&&s.set(a.id,o)}return s},playerBodyMeshes:new Map,playerHitboxes:new Map,playerBoostTrails:new Map,playerBoostMeters:new Map,playerDemoIndicators:new Map,updateWallVisibility:()=>{}}}createPluginContext(){return{player:this,replay:this.replay,options:this.options,scene:this.scene,camera:this.camera,renderer:this.renderer,container:this.container}}createPluginStateContext(e){return{...this.createPluginContext(),state:e}}createRenderContext(){const e=this.actorManager,t=this.adapter.ball,i={position:t.position,rotation:t.rotation,velocity:t.velocity,visible:t.visible,object3d:e.ballActorId!=null?e.actors[e.ballActorId]??null:null},s=this.adapter.getAllPlayers().map(a=>{const r=e.playerNameToCarActorId[a.name];return{id:a.id,name:a.name,team:a.team,carName:a.carName,hitboxType:a.hitboxType,position:a.position,rotation:a.rotation,velocity:a.velocity,boost:a.boost,isBoosting:a.isBoosting,visible:a.isVisible,object3d:r!=null?e.actors[r]??null:null}});return{...this.createPluginContext(),...this.computeFrameRenderInfo(),state:this.getState(),time:this.currentTime,ball:i,cars:s}}emitChange(){const e=this.getState(),t=this.createPluginStateContext(e);for(const i of this.plugins)i.plugin.onStateChange?.(t);this.dispatchEvent(new CustomEvent("change",{detail:e}))}}const Wt={LEFT:1,RIGHT:2,MIDDLE:4},$=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Vr={NONE:0,IN:1,OUT:-1};function ka(n){return n.isPerspectiveCamera}function Js(n){return n.isOrthographicCamera}const Gr=Math.PI*2,vv=Math.PI/2,NT=1e-5,nl=Math.PI/180;function Ui(n,e,t){return Math.max(e,Math.min(t,n))}function Ot(n,e=NT){return Math.abs(n)0==f>u&&(f=u,t.value=(f-u)/a),f}function xv(n,e,t,i,s=1/0,a,r){i=Math.max(1e-4,i);const o=2/i,l=o*a,c=1/(1+l+.48*l*l+.235*l*l*l);let u=e.x,d=e.y,h=e.z,f=n.x-u,p=n.y-d,g=n.z-h;const _=u,m=d,v=h,y=s*i,b=y*y,T=f*f+p*p+g*g;if(T>b){const U=Math.sqrt(T);f=f/U*y,p=p/U*y,g=g/U*y}u=n.x-f,d=n.y-p,h=n.z-g;const x=(t.x+o*f)*a,M=(t.y+o*p)*a,C=(t.z+o*g)*a;t.x=(t.x-o*x)*c,t.y=(t.y-o*M)*c,t.z=(t.z-o*C)*c,r.x=u+(f+x)*c,r.y=d+(p+M)*c,r.z=h+(g+C)*c;const w=_-n.x,E=m-n.y,R=v-n.z,k=r.x-_,O=r.y-m,D=r.z-v;return w*k+E*O+R*D>0&&(r.x=_,r.y=m,r.z=v,t.x=(r.x-_)/a,t.y=(r.y-m)/a,t.z=(r.z-v)/a),r}function Tp(n,e){e.set(0,0),n.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=n.length,e.y/=n.length}function Mp(n,e){return Js(n)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class hN{constructor(){this._listeners={}}addEventListener(e,t){const i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){const i=this._listeners;return i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){const s=this._listeners[e];if(s!==void 0){const a=s.indexOf(t);a!==-1&&s.splice(a,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const i=this._listeners[e.type];if(i!==void 0){e.target=this;const s=i.slice(0);for(let a=0,r=s.length;a{},this._enabled=!0,this._state=$.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Vr.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new tt.Vector3,this._focalOffsetVelocity=new tt.Vector3,this._zoomVelocity={value:0},this._truckInternal=(m,v,y,b)=>{let T,x;if(ka(this._camera)){const M=ft.copy(this._camera.position).sub(this._target),C=this._camera.getEffectiveFOV()*nl,w=M.length()*Math.tan(C*.5);T=this.truckSpeed*m*w/this._elementRect.height,x=this.truckSpeed*v*w/this._elementRect.height}else if(Js(this._camera)){const M=this._camera;T=this.truckSpeed*m*(M.right-M.left)/M.zoom/this._elementRect.width,x=this.truckSpeed*v*(M.top-M.bottom)/M.zoom/this._elementRect.height}else return;b?(y?this.setFocalOffset(this._focalOffsetEnd.x+T,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(T,0,!0),this.forward(-x,!0)):y?this.setFocalOffset(this._focalOffsetEnd.x+T,this._focalOffsetEnd.y+x,this._focalOffsetEnd.z,!0):this.truck(T,x,!0)},this._rotateInternal=(m,v)=>{const y=Gr*this.azimuthRotateSpeed*m/this._elementRect.height,b=Gr*this.polarRotateSpeed*v/this._elementRect.height;this.rotate(y,b,!0)},this._dollyInternal=(m,v,y)=>{const b=Math.pow(.95,-m*this.dollySpeed),T=this._sphericalEnd.radius,x=this._sphericalEnd.radius*b,M=Ui(x,this.minDistance,this.maxDistance),C=M-x;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(x,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(C,!0),this._dollyToNoClamp(M,!0)):this._dollyToNoClamp(M,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?x:M)-T,this._dollyControlCoord.set(v,y)),this._lastDollyDirection=Math.sign(-m)},this._zoomInternal=(m,v,y)=>{const b=Math.pow(.95,m*this.dollySpeed),T=this._zoom,x=this._zoom*b;this.zoomTo(x,!0),this.dollyToCursor&&(this._changedZoom+=x-T,this._dollyControlCoord.set(v,y))},typeof tt>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new tt.Quaternion().setFromUnitVectors(this._camera.up,wu),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=$.NONE,this._target=new tt.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new tt.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new tt.Spherical().setFromVector3(ft.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new tt.Vector3,new tt.Vector3,new tt.Vector3,new tt.Vector3],this._updateNearPlaneCorners(),this._boundary=new tt.Box3(new tt.Vector3(-1/0,-1/0,-1/0),new tt.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new tt.Vector2,this.mouseButtons={left:$.ROTATE,middle:$.DOLLY,right:$.TRUCK,wheel:ka(this._camera)?$.DOLLY:Js(this._camera)?$.ZOOM:$.NONE},this.touches={one:$.TOUCH_ROTATE,two:ka(this._camera)?$.TOUCH_DOLLY_TRUCK:Js(this._camera)?$.TOUCH_ZOOM_TRUCK:$.NONE,three:$.TOUCH_TRUCK};const i=new tt.Vector2,s=new tt.Vector2,a=new tt.Vector2,r=m=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const b=this._domElement.getBoundingClientRect(),T=m.clientX/b.width,x=m.clientY/b.height;if(Tthis._interactiveArea.right||xthis._interactiveArea.bottom)return}const v=m.pointerType!=="mouse"?null:(m.buttons&Wt.LEFT)===Wt.LEFT?Wt.LEFT:(m.buttons&Wt.MIDDLE)===Wt.MIDDLE?Wt.MIDDLE:(m.buttons&Wt.RIGHT)===Wt.RIGHT?Wt.RIGHT:null;if(v!==null){const b=this._findPointerByMouseButton(v);b&&this._disposePointer(b)}if((m.buttons&Wt.LEFT)===Wt.LEFT&&this._lockedPointer)return;const y={pointerId:m.pointerId,clientX:m.clientX,clientY:m.clientY,deltaX:0,deltaY:0,mouseButton:v};this._activePointers.push(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,h(m)},o=m=>{m.cancelable&&m.preventDefault();const v=m.pointerId,y=this._lockedPointer||this._findPointerById(v);if(y){if(y.clientX=m.clientX,y.clientY=m.clientY,y.deltaX=m.movementX,y.deltaY=m.movementY,this._state=0,m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(m.buttons&Wt.LEFT)===Wt.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(m.buttons&Wt.MIDDLE)===Wt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(m.buttons&Wt.RIGHT)===Wt.RIGHT&&(this._state=this._state|this.mouseButtons.right);f()}},l=m=>{const v=this._findPointerById(m.pointerId);if(!(v&&v===this._lockedPointer)){if(v&&this._disposePointer(v),m.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=$.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=$.NONE;p()}};let c=-1;const u=m=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===$.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const x=this._domElement.getBoundingClientRect(),M=m.clientX/x.width,C=m.clientY/x.height;if(Mthis._interactiveArea.right||Cthis._interactiveArea.bottom)return}if(m.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===$.ROTATE||this.mouseButtons.wheel===$.TRUCK){const x=performance.now();c-x<1e3&&this._getClientRect(this._elementRect),c=x}const v=pN?-1:-3,y=m.deltaMode===1||m.ctrlKey?m.deltaY/v:m.deltaY/(v*10),b=this.dollyToCursor?(m.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,T=this.dollyToCursor?(m.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case $.ROTATE:{this._rotateInternal(m.deltaX,m.deltaY),this._isUserControllingRotate=!0;break}case $.TRUCK:{this._truckInternal(m.deltaX,m.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case $.SCREEN_PAN:{this._truckInternal(m.deltaX,m.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case $.OFFSET:{this._truckInternal(m.deltaX,m.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case $.DOLLY:{this._dollyInternal(-y,b,T),this._isUserControllingDolly=!0;break}case $.ZOOM:{this._zoomInternal(-y,b,T),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},d=m=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===Hm.ACTION.NONE){const v=m instanceof PointerEvent?m.pointerId:0,y=this._findPointerById(v);y&&this._disposePointer(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}m.preventDefault()}},h=m=>{if(!this._enabled)return;if(Tp(this._activePointers,Kn),this._getClientRect(this._elementRect),i.copy(Kn),s.copy(Kn),this._activePointers.length>=2){const y=Kn.x-this._activePointers[1].clientX,b=Kn.y-this._activePointers[1].clientY,T=Math.sqrt(y*y+b*b);a.set(0,T);const x=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,M=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;s.set(x,M)}if(this._state=0,!m)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in m&&m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(m.buttons&Wt.LEFT)===Wt.LEFT&&(this._state=this._state|this.mouseButtons.left),(m.buttons&Wt.MIDDLE)===Wt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(m.buttons&Wt.RIGHT)===Wt.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&$.TRUCK)===$.TRUCK||(this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&$.DOLLY)===$.DOLLY||(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&$.ZOOM)===$.ZOOM||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},f=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,Tp(this._activePointers,Kn);const v=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,y=v?-v.deltaX:s.x-Kn.x,b=v?-v.deltaY:s.y-Kn.y;if(s.copy(Kn),((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(y,b),this._isUserControllingRotate=!0),(this._state&$.DOLLY)===$.DOLLY||(this._state&$.ZOOM)===$.ZOOM){const T=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0,M=this.dollyDragInverted?-1:1;(this._state&$.DOLLY)===$.DOLLY?(this._dollyInternal(M*b*xu,T,x),this._isUserControllingDolly=!0):(this._zoomInternal(M*b*xu,T,x),this._isUserControllingZoom=!0)}if((this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE){const T=Kn.x-this._activePointers[1].clientX,x=Kn.y-this._activePointers[1].clientY,M=Math.sqrt(T*T+x*x),C=a.y-M;a.set(0,M);const w=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,E=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET?(this._dollyInternal(C*xu,w,E),this._isUserControllingDolly=!0):(this._zoomInternal(C*xu,w,E),this._isUserControllingZoom=!0)}((this._state&$.TRUCK)===$.TRUCK||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(y,b,!1,!1),this._isUserControllingTruck=!0),((this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(y,b,!1,!0),this._isUserControllingTruck=!0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(y,b,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},p=()=>{Tp(this._activePointers,Kn),s.copy(Kn),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",g),this._domElement.ownerDocument.addEventListener("pointerlockerror",_),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),h())},this.unlockPointer=()=>{var m,v,y;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(m=this._domElement)===null||m===void 0||m.ownerDocument.exitPointerLock(),(v=this._domElement)===null||v===void 0||v.ownerDocument.removeEventListener("pointerlockchange",g),(y=this._domElement)===null||y===void 0||y.ownerDocument.removeEventListener("pointerlockerror",_),this.cancel()};const g=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},_=()=>{this.unlockPointer()};this._addAllEventListeners=m=>{this._domElement=m,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",d)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",d),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",g),this._domElement.ownerDocument.removeEventListener("pointerlockerror",_))},this.cancel=()=>{this._state!==$.NONE&&(this._state=$.NONE,this._activePointers.length=0,p())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=Ui(e.width,0,1),this._interactiveArea.height=Ui(e.height,0,1),this._interactiveArea.x=Ui(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=Ui(e.y,0,1-this._interactiveArea.height)}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}rotate(e,t,i=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+t,i)}rotateAzimuthTo(e,t=!1){return this.rotateTo(e,this._sphericalEnd.phi,t)}rotatePolarTo(e,t=!1){return this.rotateTo(this._sphericalEnd.theta,e,t)}rotateTo(e,t,i=!1){this._isUserControllingRotate=!1;const s=Ui(e,this.minAzimuthAngle,this.maxAzimuthAngle),a=Ui(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=s,this._sphericalEnd.phi=a,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,i||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!i||Ct(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Ct(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Vr.NONE,this._changedDolly=0,this._dollyToNoClamp(Ui(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const i=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),o=Ct(r,this._spherical.radius);if(!(i>e)&&o)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,r)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const a=!t||Ct(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(a)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(al).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const i=!t||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(i)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=Ui(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const i=!t||Ct(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(i)}pan(e,t,i=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,t,i)}truck(e,t,i=!1){this._camera.updateMatrix(),ts.setFromMatrixColumn(this._camera.matrix,0),ns.setFromMatrixColumn(this._camera.matrix,1),ts.multiplyScalar(e),ns.multiplyScalar(-t);const s=ft.copy(ts).add(ns),a=Tt.copy(this._targetEnd).add(s);return this.moveTo(a.x,a.y,a.z,i)}forward(e,t=!1){ft.setFromMatrixColumn(this._camera.matrix,0),ft.crossVectors(this._camera.up,ft),ft.multiplyScalar(e);const i=Tt.copy(this._targetEnd).add(ft);return this.moveTo(i.x,i.y,i.z,t)}elevate(e,t=!1){return ft.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+ft.x,this._targetEnd.y+ft.y,this._targetEnd.z+ft.z,t)}moveTo(e,t,i,s=!1){this._isUserControllingTruck=!1;const a=ft.set(e,t,i).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,a,this.boundaryFriction),this._needsUpdate=!0,s||this._target.copy(this._targetEnd);const r=!s||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(e,t,i,s=!1){const o=ft.set(e,t,i).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(o.x,o.y,o.z,s)}fitToBox(e,t,{cover:i=!1,paddingLeft:s=0,paddingRight:a=0,paddingBottom:r=0,paddingTop:o=0}={}){const l=[],c=e.isBox3?Wr.copy(e):Wr.setFromObject(e);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=bv(this._sphericalEnd.theta,vv),d=bv(this._sphericalEnd.phi,vv);l.push(this.rotateTo(u,d,t));const h=ft.setFromSpherical(this._sphericalEnd).normalize(),f=Ev.setFromUnitVectors(h,Cp),p=Ct(Math.abs(h.y),1);p&&f.multiply(Rp.setFromAxisAngle(wu,u)),f.multiply(this._yAxisUpSpaceInverse);const g=Mv.makeEmpty();Tt.copy(c.min).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.min).setX(c.max.x).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.min).setY(c.max.y).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).setZ(c.min.z).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.min).setZ(c.max.z).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).setY(c.min.y).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).setX(c.min.x).applyQuaternion(f),g.expandByPoint(Tt),Tt.copy(c.max).applyQuaternion(f),g.expandByPoint(Tt),g.min.x-=s,g.min.y-=r,g.max.x+=a,g.max.y+=o,f.setFromUnitVectors(Cp,h),p&&f.premultiply(Rp.invert()),f.premultiply(this._yAxisUpSpace);const _=g.getSize(ft),m=g.getCenter(Tt).applyQuaternion(f);if(ka(this._camera)){const v=this.getDistanceToFitBox(_.x,_.y,_.z,i);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.dollyTo(v,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(Js(this._camera)){const v=this._camera,y=v.right-v.left,b=v.top-v.bottom,T=i?Math.max(y/_.x,b/_.y):Math.min(y/_.x,b/_.y);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.zoomTo(T,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const i=[],a="isObject3D"in e?Hm.createBoundingSphere(e,Ap):Ap.copy(e);if(i.push(this.moveTo(a.center.x,a.center.y,a.center.z,t)),ka(this._camera)){const r=this.getDistanceToFitSphere(a.radius);i.push(this.dollyTo(r,t))}else if(Js(this._camera)){const r=this._camera.right-this._camera.left,o=this._camera.top-this._camera.bottom,l=2*a.radius,c=Math.min(r/l,o/l);i.push(this.zoomTo(c,t))}return i.push(this.setFocalOffset(0,0,0,t)),Promise.all(i)}setLookAt(e,t,i,s,a,r,o=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Vr.NONE,this._changedDolly=0;const l=Tt.set(s,a,r),c=ft.set(e,t,i);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(c.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,o||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!o||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold)&&Ct(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Ct(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Ct(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(e,t,i,s,a,r,o,l,c,u,d,h,f,p=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Vr.NONE,this._changedDolly=0;const g=ft.set(s,a,r),_=Tt.set(e,t,i);vi.setFromVector3(_.sub(g).applyQuaternion(this._yAxisUpSpace));const m=$r.set(u,d,h),v=Tt.set(o,l,c);rl.setFromVector3(v.sub(m).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(g.lerp(m,f));const y=rl.theta-vi.theta,b=rl.phi-vi.phi,T=rl.radius-vi.radius;this._sphericalEnd.set(vi.radius+T*f,vi.phi+b*f,vi.theta+y*f),this.normalizeRotations(),this._needsUpdate=!0,p||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const x=!p||Ct(this._target.x,this._targetEnd.x,this.restThreshold)&&Ct(this._target.y,this._targetEnd.y,this.restThreshold)&&Ct(this._target.z,this._targetEnd.z,this.restThreshold)&&Ct(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Ct(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Ct(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(x)}setPosition(e,t,i,s=!1){return this.setLookAt(e,t,i,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,s)}setTarget(e,t,i,s=!1){const a=this.getPosition(ft),r=this.setLookAt(a.x,a.y,a.z,e,t,i,s);return this._sphericalEnd.phi=Ui(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(e,t,i,s=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,t,i),this._needsUpdate=!0,s||this._focalOffset.copy(this._focalOffsetEnd);const a=!s||Ct(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&Ct(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&Ct(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(a)}setOrbitPoint(e,t,i){this._camera.updateMatrixWorld(),ts.setFromMatrixColumn(this._camera.matrixWorldInverse,0),ns.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Da.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const s=ft.set(e,t,i),a=s.distanceTo(this._camera.position),r=s.sub(this._camera.position);ts.multiplyScalar(r.x),ns.multiplyScalar(r.y),Da.multiplyScalar(r.z),ft.copy(ts).add(ns).add(Da),ft.z=ft.z+a,this.dollyTo(a,!1),this.setFocalOffset(-ft.x,ft.y,-ft.z,!1),this.moveTo(e,t,i,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,t,i,s){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new tt.Vector4,typeof e=="number"?this._viewport.set(e,t,i,s):this._viewport.copy(e)}getDistanceToFitBox(e,t,i,s=!1){if(Mp(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const a=e/t,r=this._camera.getEffectiveFOV()*nl,o=this._camera.aspect;return((s?a>o:at.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(t=>t.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,t,i){const s=t.lengthSq();if(s===0)return e;const a=Tt.copy(t).add(e),o=this._boundary.clampPoint(a,$r).sub(a),l=o.lengthSq();if(l===0)return e.add(t);if(l===s)return e;if(i===0)return e.add(t).add(o);{const c=1+i*l/t.dot(o);return e.add(Tt.copy(t).multiplyScalar(c)).add(o.multiplyScalar(1-i))}}_updateNearPlaneCorners(){if(ka(this._camera)){const e=this._camera,t=e.near,i=e.getEffectiveFOV()*nl,s=Math.tan(i*.5)*t,a=s*e.aspect;this._nearPlaneCorners[0].set(-a,-s,0),this._nearPlaneCorners[1].set(a,-s,0),this._nearPlaneCorners[2].set(a,s,0),this._nearPlaneCorners[3].set(-a,s,0)}else if(Js(this._camera)){const e=this._camera,t=1/e.zoom,i=e.left*t,s=e.right*t,a=e.top*t,r=e.bottom*t;this._nearPlaneCorners[0].set(i,a,0),this._nearPlaneCorners[1].set(s,a,0),this._nearPlaneCorners[2].set(s,r,0),this._nearPlaneCorners[3].set(i,r,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||Mp(this._camera,"_collisionTest"))return e;const i=this._getTargetDirection(al);Pp.lookAt(wv,i,this._camera.up);for(let s=0;s<4;s++){const a=Tt.copy(this._nearPlaneCorners[s]);a.applyMatrix4(Pp);const r=$r.addVectors(this._target,a);Su.set(r,i),Su.far=this._spherical.radius+1;const o=Su.intersectObjects(this.colliderMeshes);o.length!==0&&o[0].distance{const i=()=>{this.removeEventListener("rest",i),t()};this.addEventListener("rest",i)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new tt.Sphere){const i=t,s=i.center;Wr.makeEmpty(),e.traverseVisible(r=>{r.isMesh&&Wr.expandByObject(r)}),Wr.getCenter(s);let a=0;return e.traverseVisible(r=>{if(!r.isMesh)return;const o=r;if(!o.geometry)return;const l=o.geometry.clone();l.applyMatrix4(o.matrixWorld);const u=l.attributes.position;for(let d=0,h=u.count;di.preventDefault()),this.isFollowingViewer=!1,this.followTargetPosition=new S,this.followTargetQuaternion=new dt,this.followPositionLerpFactor=.12,this.followRotationSlerpFactor=.1,this.hasFollowTarget=!1,this.isRightMouseDown=!1,this.lastMouseX=null,this.lastMouseY=null,this.savedCameraState=null,this.isInReplayMode=!1}setMode(e){if(this.mode=e,e==="ballOrbit"){if(this.controls.enabled=!0,this.lastBallOrbitPos=null,this.ballOrbitScrollHandler||(this.ballOrbitScrollHandler=t=>{if(this.mode==="ballOrbit"&&!this.isFollowingViewer){t.preventDefault();const i=Math.max(this.controls.distance*.2,100);t.deltaY>0?this.controls.dolly(-i,!0):this.controls.dolly(i,!0)}},this.domElement.addEventListener("wheel",this.ballOrbitScrollHandler,{passive:!1})),this.targetBall){const t=this.targetBall.position;this.camera.position.distanceTo(t),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}return}if(e==="free"){if(this.controls.enabled=!1,!this.freeCamKeys){this.freeCamKeys={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},this.freeCamSpeed=2e3,this.freeCamRotation={yaw:0,pitch:0};const t=new S;this.camera.getWorldDirection(t),this.freeCamRotation.yaw=Math.atan2(t.x,t.z),this.freeCamRotation.pitch=Math.asin(-t.y),this.onKeyDown=i=>this.handleFreeCamKeyDown(i),this.onKeyUp=i=>this.handleFreeCamKeyUp(i),this.onMouseMove=i=>this.handleFreeCamMouseMove(i),this.onMouseDown=i=>{i.button===2&&this.mode==="free"&&!this.isFollowingViewer&&(this.isRightMouseDown=!0,this.domElement.requestPointerLock?.())},this.onMouseUp=i=>{i.button===2&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.())},this.onPointerLockChange=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onMouseLeave=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onWindowBlur=()=>{this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1)},this.onVisibilityChange=()=>{document.hidden&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1))},document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.onKeyUp),document.addEventListener("mousemove",this.onMouseMove),this.domElement.addEventListener("mousedown",this.onMouseDown),document.addEventListener("mouseup",this.onMouseUp),document.addEventListener("pointerlockchange",this.onPointerLockChange),this.domElement.addEventListener("mouseleave",this.onMouseLeave),window.addEventListener("blur",this.onWindowBlur),document.addEventListener("visibilitychange",this.onVisibilityChange)}this.isRightMouseDown=!1}else this.controls.enabled=!1,this.lastIsBallCam=null,this.currentBlend=0,this.targetBlend=0}setTargetCar(e){if(this.targetCar!==e&&(this.currentBallCamAngle=null,this.targetCar&&e)){this.targetHandoff={elapsed:0,duration:mN,startPosition:this.camera.position.clone(),startQuaternion:this.camera.quaternion.clone()};const t=new S().subVectors(this.camera.position,e.position);t.y=0,t.length()>.01&&(t.normalize(),this.smoothedCarYaw=Math.atan2(-t.x,-t.z)),this.lastCarPos&&this.lastCarPos.copy(e.position)}this.targetCar=e}setTargetBall(e){this.targetBall=e}handleFreeCamKeyDown(e){if(this.mode!=="free"||this.isFollowingViewer)return;const t=e.target;if(!(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable))switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!0;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!0;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!0;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!0;break;case"Space":this.freeCamKeys.up=!0;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!0;break}}handleFreeCamKeyUp(e){switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!1;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!1;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!1;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!1;break;case"Space":this.freeCamKeys.up=!1;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!1;break}}handleFreeCamMouseMove(e){if(this.mode!=="free"||!this.isRightMouseDown||this.isFollowingViewer)return;const t=e.movementX||0,i=e.movementY||0,s=.003;this.freeCamRotation.yaw-=t*s,this.freeCamRotation.pitch+=i*s,this.freeCamRotation.pitch=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,this.freeCamRotation.pitch))}updateFreeCam(e){if(!this.freeCamKeys)return;const t=new S(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));t.normalize();const i=new S(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));i.normalize();const s=new S(Math.sin(this.freeCamRotation.yaw-Math.PI/2),0,Math.cos(this.freeCamRotation.yaw-Math.PI/2)),a=new S(0,1,0),r=new S,o=this.freeCamSpeed*e;this.freeCamKeys.forward&&r.add(i.clone().multiplyScalar(o)),this.freeCamKeys.backward&&r.add(i.clone().multiplyScalar(-o)),this.freeCamKeys.right&&r.add(s.clone().multiplyScalar(o)),this.freeCamKeys.left&&r.add(s.clone().multiplyScalar(-o)),this.freeCamKeys.up&&r.add(a.clone().multiplyScalar(o)),this.freeCamKeys.down&&r.add(a.clone().multiplyScalar(-o)),r.length()>0&&r.normalize().multiplyScalar(o),this.camera.position.add(r);const l=this.camera.position.clone().add(t);this.camera.lookAt(l),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,l.x,l.y,l.z,!1)}update(e,t=!0){if(this.isFollowingViewer){this.updateFollowInterpolation(e);return}if(this.mode==="free"){this.updateFreeCam(e),this.controls.update(e);return}if(this.mode==="ballOrbit"){if(this.targetBall){const p=this.targetBall.position;this.lastBallOrbitPos||(this.lastBallOrbitPos=p.clone());const g=new S().subVectors(p,this.lastBallOrbitPos);if(this.controls.setTarget(p.x,p.y,p.z,!1),g.lengthSq()>.01){const _=new S;this.controls.getPosition(_);const m=_.x+g.x,v=_.y+g.y,y=_.z+g.z;this.controls.setPosition(m,v,y,!1),this.lastBallOrbitPos.copy(p)}}this.controls.update(e);return}if(!this.targetCar){this.controls.update(e);return}const i=this.targetCar.position.clone(),s=this.targetCar.quaternion;if(this.lastIsBallCam!==null&&this.lastIsBallCam!==t&&!t){const p=new S().subVectors(this.camera.position,i);p.y=0,p.length()>.01&&(p.normalize(),this.smoothedCarYaw=Math.atan2(-p.x,-p.z))}this.lastIsBallCam=t;const a=this.calculateCarCamPosition(i,s,e),r=this.calculateBallCamPosition(i,s,e);this.targetBlend=t?1:0;const o=Math.max(.15,Math.min(.6,this.baseDuration/this.transitionSpeed)),l=e/o;this.currentBlendthis.targetBlend&&(this.currentBlend=Math.max(this.currentBlend-l,this.targetBlend));const c=this.currentBlend,u=c*c*(3-2*c),d=new S().lerpVectors(a.cameraPos,r.cameraPos,u);this._tempMatrix.lookAt(a.cameraPos,a.lookTarget,new S(0,1,0)),this._tempQuatCarCam.setFromRotationMatrix(this._tempMatrix),this._tempMatrix.lookAt(r.cameraPos,r.lookTarget,new S(0,1,0)),this._tempQuatBallCam.setFromRotationMatrix(this._tempMatrix),this._tempQuatCarCam.dot(this._tempQuatBallCam)<0&&this._tempQuatBallCam.set(-this._tempQuatBallCam.x,-this._tempQuatBallCam.y,-this._tempQuatBallCam.z,-this._tempQuatBallCam.w);const h=new dt().slerpQuaternions(this._tempQuatCarCam,this._tempQuatBallCam,u);if(this.targetHandoff){this.targetHandoff.elapsed+=e;const p=Math.min(1,this.targetHandoff.elapsed/this.targetHandoff.duration),g=p*p*(3-2*p),_=d.clone(),m=h.clone();d.lerpVectors(this.targetHandoff.startPosition,_,g),h.slerpQuaternions(this.targetHandoff.startQuaternion,m,g),p>=1&&(this.targetHandoff=null)}if(this.camera.position.copy(d),this.camera.quaternion.copy(h),this.followAngle!==0){const p=this.followAngle*Math.PI/180;this.camera.rotateX(-p)}this.currentCamPos||(this.currentCamPos=new S),this.currentLookTarget||(this.currentLookTarget=new S),this.currentCamPos.copy(d);const f=new S(0,0,-1).applyQuaternion(this.camera.quaternion);this.currentLookTarget.copy(d).add(f.multiplyScalar(100)),this.enforceMinHeight()}calculateBallCamPosition(e,t,i=1/60){if(!this.targetBall)return this.calculateCarCamPosition(e,t,i);const s=this.targetBall.position.clone(),a=new S().subVectors(e,s);a.y=0,a.normalize();const r=e.clone().add(a.multiplyScalar(this.followDistance)),o=s.y-e.y,c=Math.min(1,Math.max(0,o/800));r.y=e.y+this.followHeight-c*100,r.y.01)s.normalize(),u=Math.atan2(s.x,s.z);else if(a>.05){s.normalize();let y=Math.atan2(s.x,s.z)-o;for(;y>Math.PI;)y-=Math.PI*2;for(;y<-Math.PI;)y+=Math.PI*2;Math.abs(y)>Math.PI/2?u=o+Math.PI:u=o}else u=o;this.lastCarPos.copy(e),this.smoothedCarYaw===void 0&&(this.smoothedCarYaw=u);let d=u-this.smoothedCarYaw;for(;d>Math.PI;)d-=Math.PI*2;for(;d<-Math.PI;)d+=Math.PI*2;const h=c?this.swivelSpeed*.4:this.swivelSpeed;this.smoothedCarYaw+=d*Math.min(1,h*(1/60));const f=-Math.sin(this.smoothedCarYaw),p=-Math.cos(this.smoothedCarYaw),g=new S(e.x+f*this.followDistance,e.y+this.followHeight,e.z+p*this.followDistance);g.yMath.PI;)s-=Math.PI*2;for(;s<-Math.PI;)s+=Math.PI*2;this.followCurrentOrbitParams.azimuth+=s*.15,this.followCurrentOrbitParams.polar+=(this.followTargetOrbitParams.polar-this.followCurrentOrbitParams.polar)*.15,this.controls.setTarget(t.x,t.y,t.z,!1),this.controls.dollyTo(this.followCurrentOrbitParams.distance,!1),this.controls.rotateTo(this.followCurrentOrbitParams.azimuth,this.followCurrentOrbitParams.polar,!1),this.controls.update(e)}}else{if(this.camera.position.lerp(this.followTargetPosition,this.followPositionLerpFactor),this.camera.quaternion.slerp(this.followTargetQuaternion,this.followRotationSlerpFactor),this.freeCamRotation){const i=new S;this.camera.getWorldDirection(i),this.freeCamRotation.yaw=Math.atan2(i.x,i.z),this.freeCamRotation.pitch=Math.asin(-i.y)}const t=new S;this.camera.getWorldDirection(t),t.multiplyScalar(100).add(this.camera.position),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}}setDefaultFreecamPosition(){if(this.camera.position.copy(this.defaultFreecamPosition),this.camera.lookAt(this.defaultFreecamLookAt),this.freeCamRotation){const e=new S;this.camera.getWorldDirection(e),this.freeCamRotation.yaw=Math.atan2(e.x,e.z),this.freeCamRotation.pitch=Math.asin(-e.y)}this.controls.setLookAt(this.defaultFreecamPosition.x,this.defaultFreecamPosition.y,this.defaultFreecamPosition.z,this.defaultFreecamLookAt.x,this.defaultFreecamLookAt.y,this.defaultFreecamLookAt.z,!1)}getIsPointerLocked(){return this.isPointerLocked||!1}setPointerLockCallback(e){this.onPointerLockStateChange=e}dispose(){this.controls.dispose(),this.ballOrbitScrollHandler&&this.domElement.removeEventListener("wheel",this.ballOrbitScrollHandler),this.onKeyDown&&document.removeEventListener("keydown",this.onKeyDown),this.onKeyUp&&document.removeEventListener("keyup",this.onKeyUp),this.onMouseMove&&document.removeEventListener("mousemove",this.onMouseMove),this.onMouseDown&&this.domElement.removeEventListener("mousedown",this.onMouseDown),this.onMouseUp&&document.removeEventListener("mouseup",this.onMouseUp),this.onPointerLockChange&&document.removeEventListener("pointerlockchange",this.onPointerLockChange),this.onMouseLeave&&this.domElement.removeEventListener("mouseleave",this.onMouseLeave),this.onWindowBlur&&window.removeEventListener("blur",this.onWindowBlur),this.onVisibilityChange&&document.removeEventListener("visibilitychange",this.onVisibilityChange)}}function Av(n){if(n.pitch===void 0||n.angle!==void 0)return n;const{pitch:e,...t}=n;return{...t,angle:e}}const gN={distance:260,height:90,angle:-4,stiffness:.45,swivelSpeed:4.3,transitionSpeed:1.3,fov:110};function yN(n={}){let e=null,t=null,i=n.mode??(n.follow?"follow":"orbit"),s=n.follow??null,a=n.ballCam??null,r=a??!0,o=Av({...n.settings}),l=1;const c=n.useRecordedSettings!==!1;let u=null;const d=new S;let h=!1;function f(){if(!(!t||!e)){if(t.player.controls.enabled=i==="orbit",i==="free")e.setMode("free");else if(i==="ballOrbit"){const y=_();y&&e.setTargetBall(y),e.setMode("ballOrbit")}else e.setMode("car");u=null}}function p(){return!c||!t||!s?null:t.player.adapter.getPlayer(s)?.cameraSettings??null}function g(){const y={...gN,...p(),...o};return l!==1&&y.distance!==void 0&&(y.distance*=l),y}function _(){if(!t)return null;const y=t.player.actorManager;return y.ballActorId!=null?y.actors[y.ballActorId]??null:null}function m(y){const b=g().fov;if(!b)return;const T=b*Math.PI/180,x=16/9,M=2*Math.atan(Math.tan(T/2)/x),C=2*Math.atan(Math.tan(T/2)/y.aspect),w=Math.max(M,C)*180/Math.PI;Math.abs(y.fov-w)>.1&&(y.fov=w,y.updateProjectionMatrix())}function v(y,b){if(!e)return;if(i==="free"){o.freeCamSpeed&&(e.freeCamSpeed=o.freeCamSpeed),e.update(b);return}if(i==="ballOrbit"){y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.update(b);return}const x=(s?y.cars.find(C=>C.name===s):void 0)?.object3d??null;if(!x){e.update(b);return}e.setTargetCar(x),y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.setFollowSettings(g());const M=s?y.player.adapter.getPlayer(s):void 0;r=a??M?.isBallCam??!0,d.copy(x.position),h=!0,e.update(b,r)}return{id:"camera",setup(y){t=y,e=new _N(y.camera,y.renderer.domElement),f()},beforeRender(y){if(!e||(m(y.camera),i==="orbit"))return;const b=performance.now(),T=u===null?1/60:Math.min(.1,(b-u)/1e3);u=b,v(y,T)},teardown(){i="orbit",t&&(t.player.controls.enabled=!0),e?.dispose(),e=null,t=null},setMode(y){y!==i&&(i=y,f())},getMode(){return i},follow(y){s=y,i="follow",f()},release(){i="orbit",t&&h&&t.player.controls.target.copy(d),f()},getTarget(){return s},setBallCam(y){a=y,y!==null&&(r=y)},getBallCam(){return r},setCameraSettings(y){o=y===null?{}:{...o,...Av(y)}},setDistanceScale(y){l=Math.max(.25,y)},getDistanceScale(){return l},getCameraSettings(){return g()},getRecordedSettings(){const y=p();return y?{...y}:null}}}const vN={"top-left":"top: 8px; left: 8px;","top-right":"top: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;"};function bN(n={}){const e=n.corner??"top-right",t=n.updateIntervalMs??500,i=()=>typeof n.mount=="function"?n.mount():n.mount??null;let s=null,a=null,r=null,o=0,l=performance.now(),c=0,u=0;const d=typeof n.onSample=="function";return{id:"fps-overlay",setup(h){if(l=performance.now(),o=0,u=h.player.getState().frameIndex,c=u,d)return;const f=i(),p=f!=null;s=document.createElement("div"),s.className="player-fps-overlay",s.style.cssText=p?` display: inline-flex; gap: 10px; align-items: center; font: 600 11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; color: #c8d4e6; letter-spacing: 0.02em; white-space: nowrap; `:` - position: absolute; ${lN[e]} + position: absolute; ${vN[e]} z-index: 30; pointer-events: none; user-select: none; display: flex; gap: 10px; font: 600 11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; @@ -3938,7 +3938,7 @@ void main() { border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; padding: 4px 8px; letter-spacing: 0.02em; white-space: nowrap; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - `;const g=document.createElement("span");g.append("Render "),a=document.createElement("span"),a.style.color="#7fd4ff",a.textContent="– fps",g.append(a);const _=document.createElement("span");_.append("Replay "),r=document.createElement("span"),r.style.color="#9affc0",r.textContent="– fps",_.append(r),s.append(g,_),f?f.appendChild(s):(getComputedStyle(h.container).position==="static"&&(h.container.style.position="relative"),h.container.appendChild(s))},beforeRender(h){o+=1,u=h.frameIndex;const f=performance.now(),p=f-l;if(puN(u,i,s,a,n.currentTime))}}function bu(n){return{...n,setup:n.setup?e=>{n.setup?.(Om(e,n.id))}:void 0,onStateChange:n.onStateChange?e=>{n.onStateChange?.(IT(e,n.id))}:void 0,beforeRender:n.beforeRender?e=>{n.beforeRender?.(dN(e,n.id))}:void 0,teardown:n.teardown?e=>{n.teardown?.(Om(e,n.id))}:void 0}}const hN=255;function Qh(n){return n==null?null:n*100/hN}const fN=1.35,pN="#57a8ff",mN="#ff9c40",_N=256,gN=160,yN=360,vN=225,bN=260,xN=430,LT=18,wv=120;function wN(n){return n?pN:mN}function SN(n){return n.events.filter(e=>!e.available&&e.playerId)}function DT(n,e){const t=document.createElement("canvas");t.width=_N,t.height=gN;const i=t.getContext("2d");if(!i)throw new Error("Unable to create boost pickup count canvas");i.clearRect(0,0,t.width,t.height),i.textAlign="center",i.textBaseline="middle",i.lineJoin="round",i.font="800 124px sans-serif",i.lineWidth=18,i.strokeStyle="rgba(4, 10, 18, 0.88)",i.strokeText(`${n}`,t.width/2,t.height/2),i.fillStyle=e,i.fillText(`${n}`,t.width/2,t.height/2);const s=new oc(t);return s.colorSpace=gt,s.needsUpdate=!0,s}function TN(n){n?.dispose()}function MN(n){const e=new Mt;e.visible=!1,e.renderOrder=60,e.frustumCulled=!1;const t=DT(1,n),i=new Ih({map:t,transparent:!0,depthTest:!1,depthWrite:!1}),s=new Lh(i);s.scale.set(yN,vN,1),s.renderOrder=62,s.frustumCulled=!1,e.add(s);const a=new Ye({color:n,transparent:!0,opacity:0,side:ct,depthTest:!1,depthWrite:!1,blending:Ht}),r=new we(new ni(wv*.72,wv,36),a);return r.position.z=LT,r.renderOrder=61,r.frustumCulled=!1,e.add(r),{group:e,textMaterial:i,ringMaterial:a}}function EN(n,e){n.currentCount!==e&&(TN(n.textMaterial.map),n.textMaterial.map=DT(e,n.color),n.textMaterial.needsUpdate=!0,n.currentCount=e)}function CN(n){const e=new Map;for(const s of n.replay.players)e.set(s.id,s);const t=[];for(const s of n.replay.boostPads)for(const a of SN(s))t.push({pad:s,event:a});t.sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:s.event.frame!==a.event.frame?s.event.frame-a.event.frame:s.pad.index-a.pad.index);const i=[];for(const{pad:s,event:a}of t){if(!a.playerId)continue;const r=e.get(a.playerId);if(!r)continue;const o=wN(r.isTeamZero),{group:l,textMaterial:c,ringMaterial:u}=MN(o);l.position.copy(s.position),n.scene.replayRoot.add(l),i.push({time:a.time,pad:s,event:a,player:r,color:o,currentCount:1,position:new S(s.position.x,s.position.y,s.position.z),size:s.size,group:l,textMaterial:c,ringMaterial:u})}return i}function AN(n,e,t){const i=vt.clamp(e/t,0,1),s=1-Math.pow(1-i,3),a=i*i,r=n.size==="big"?xN:bN,o=n.size==="big"?360:280,l=1+Math.sin(i*Math.PI)*.22;n.group.visible=!0,n.group.position.set(n.position.x,n.position.y,n.position.z+r+s*o),n.group.scale.setScalar(l),n.textMaterial.opacity=Math.max(0,1-a),n.ringMaterial.opacity=Math.max(0,.48*(1-i));const c=n.group.children[1];if(c){const u=.75+s*(n.size==="big"?2.8:1.85);c.scale.setScalar(u),c.position.z=LT-r-s*o}}function RN(n={}){const e=Math.max(.1,n.durationSeconds??fN);let t=[];function i(a){return n.includePickup?.({pad:a.pad,event:a.event,player:a.player})??!0}function s(){for(const a of t)a.group.visible=!1}return{id:"boost-pickup-animation",setup(a){t=CN(a)},beforeRender(a){if(!a.state.boostPickupAnimationEnabled){s();return}const r=a.currentTime-e,o=new Map;for(const l of t){if(l.time>a.currentTime){l.group.visible=!1;continue}if(!i(l)){l.group.visible=!1;continue}const c=(o.get(l.player.id)??0)+1;if(o.set(l.player.id,c),l.time{(r instanceof we||r instanceof Lh)&&r.geometry?.dispose()}),a.textMaterial.map?.dispose(),a.textMaterial.dispose(),a.ringMaterial.dispose();t=[]}}}const PN=60,IN=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function LN(n){if(n&&MediaRecorder.isTypeSupported(n))return n;for(const e of IN)if(MediaRecorder.isTypeSupported(e))return e;return""}function DN(n){return n instanceof Error?n.message:String(n)}function kN(n={}){let e=null,t=null,i=[],s=null,a=0,r=0,o="",l=0,c=null,u=null,d=null,h=null,f=!1,p=null;const g=new Set;function _(){return{state:t?t.state==="recording"?"recording":"stopping":c?"error":s?"ready":"idle",elapsedSeconds:r,mimeType:o,sizeBytes:l,error:c}}function m(){const x=_();n.onStatusChange?.(x);for(const M of g)M(x)}function v(){if(!e)throw new Error("Canvas recorder plugin is not installed");return e}function y(x){t=null,h=null,f=!1,s=x,l=x?.size??0,p&&e&&e.player.setState({currentTime:p.currentTime,speed:p.speed,playing:p.playing}),p=null,x&&n.onComplete?.(x),m(),d?.(x),d=null,u=null}function b(x){c=DN(x),t=null,h=null,f=!1,p=null,m(),d?.(null),d=null,u=null}const T={id:"canvas-recorder",setup(x){e=x},beforeRender(x){t?.state==="recording"&&(r=(performance.now()-a)/1e3,m()),t?.state==="recording"&&h!==null&&x.currentTime>=h&&T.stop()},onStateChange(x){f&&t?.state==="recording"&&!x.state.playing&&r>0&&T.stop()},teardown(){t?.state==="recording"&&t.stop(),e=null,t=null,h=null,f=!1,p=null,d?.(null),d=null,u=null,g.clear()},start(x={}){const M=v();if(t?.state==="recording")throw new Error("Canvas recording is already in progress");if(typeof MediaRecorder>"u")throw new Error("MediaRecorder is not available in this browser");const C=M.scene.renderer.domElement;if(!C.captureStream)throw new Error("Canvas captureStream is not available in this browser");c=null,s=null,i=[],l=0,r=0,a=performance.now(),o=LN(x.mimeType??n.mimeType);const w=Math.max(1,x.fps??n.fps??PN),E=C.captureStream(w);t=new MediaRecorder(E,{mimeType:o,videoBitsPerSecond:x.videoBitsPerSecond??n.videoBitsPerSecond}),u=new Promise(R=>{d=R}),t.addEventListener("dataavailable",R=>{R.data.size>0&&(i.push(R.data),l+=R.data.size,m())}),t.addEventListener("stop",()=>{E.getTracks().forEach(R=>R.stop()),y(new Blob(i,{type:o||"video/webm"}))},{once:!0}),t.addEventListener("error",R=>{E.getTracks().forEach(D=>D.stop()),b(R.error??R)},{once:!0}),t.start(1e3),m()},stop(){if(!t)return Promise.resolve(s);if(t.state==="inactive")return u??Promise.resolve(s);const x=u??new Promise(M=>{d=M});return t.stop(),m(),x},clear(){if(t?.state==="recording")throw new Error("Cannot clear a recording while recording is in progress");s=null,i=[],l=0,r=0,c=null,m()},getRecording(){return s},getStatus(){return _()},subscribe(x){return g.add(x),x(_()),()=>{g.delete(x)}},recordRange(x={}){const M=v(),C=M.player.getState();(x.restorePlaybackState??!0)&&(p=C);const w=x.playbackRate??C.speed,E=x.startTime??C.currentTime;h=x.endTime??C.duration,f=!0,M.player.setState({currentTime:E,speed:w,playing:!1}),T.start(x);const R=u;return M.player.play(),(R??Promise.resolve(null)).then(D=>{if(!D)throw new Error("Recording stopped without producing a video");return D})},recordFullReplay(x={}){return T.recordRange({...x,startTime:x.startTime??0,endTime:x.endTime??v().replay.duration})}};return T}const Sv="subtr-actor-timeline-overlay-styles";function ON(){if(document.getElementById(Sv))return;const n=document.createElement("style");n.id=Sv,n.textContent=` + `;const g=document.createElement("span");g.append("Render "),a=document.createElement("span"),a.style.color="#7fd4ff",a.textContent="– fps",g.append(a);const _=document.createElement("span");_.append("Replay "),r=document.createElement("span"),r.style.color="#9affc0",r.textContent="– fps",_.append(r),s.append(g,_),f?f.appendChild(s):(getComputedStyle(h.container).position==="static"&&(h.container.style.position="relative"),h.container.appendChild(s))},beforeRender(h){o+=1,u=h.frameIndex;const f=performance.now(),p=f-l;if(pxN(u,i,s,a,n.currentTime))}}function Tu(n){return{...n,setup:n.setup?e=>{n.setup?.(Vm(e,n.id))}:void 0,onStateChange:n.onStateChange?e=>{n.onStateChange?.(BT(e,n.id))}:void 0,beforeRender:n.beforeRender?e=>{n.beforeRender?.(wN(e,n.id))}:void 0,teardown:n.teardown?e=>{n.teardown?.(Vm(e,n.id))}:void 0}}const SN=255;function rf(n){return n==null?null:n*100/SN}const TN=1.35,MN="#57a8ff",EN="#ff9c40",CN=256,AN=160,RN=360,PN=225,IN=260,LN=430,zT=18,Rv=120;function kN(n){return n?MN:EN}function DN(n){return n.events.filter(e=>!e.available&&e.playerId)}function HT(n,e){const t=document.createElement("canvas");t.width=CN,t.height=AN;const i=t.getContext("2d");if(!i)throw new Error("Unable to create boost pickup count canvas");i.clearRect(0,0,t.width,t.height),i.textAlign="center",i.textBaseline="middle",i.lineJoin="round",i.font="800 124px sans-serif",i.lineWidth=18,i.strokeStyle="rgba(4, 10, 18, 0.88)",i.strokeText(`${n}`,t.width/2,t.height/2),i.fillStyle=e,i.fillText(`${n}`,t.width/2,t.height/2);const s=new dc(t);return s.colorSpace=gt,s.needsUpdate=!0,s}function ON(n){n?.dispose()}function FN(n){const e=new Mt;e.visible=!1,e.renderOrder=60,e.frustumCulled=!1;const t=HT(1,n),i=new Nh({map:t,transparent:!0,depthTest:!1,depthWrite:!1}),s=new Uh(i);s.scale.set(RN,PN,1),s.renderOrder=62,s.frustumCulled=!1,e.add(s);const a=new Ye({color:n,transparent:!0,opacity:0,side:ct,depthTest:!1,depthWrite:!1,blending:Ht}),r=new we(new ni(Rv*.72,Rv,36),a);return r.position.z=zT,r.renderOrder=61,r.frustumCulled=!1,e.add(r),{group:e,textMaterial:i,ringMaterial:a}}function NN(n,e){n.currentCount!==e&&(ON(n.textMaterial.map),n.textMaterial.map=HT(e,n.color),n.textMaterial.needsUpdate=!0,n.currentCount=e)}function UN(n){const e=new Map;for(const s of n.replay.players)e.set(s.id,s);const t=[];for(const s of n.replay.boostPads)for(const a of DN(s))t.push({pad:s,event:a});t.sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:s.event.frame!==a.event.frame?s.event.frame-a.event.frame:s.pad.index-a.pad.index);const i=[];for(const{pad:s,event:a}of t){if(!a.playerId)continue;const r=e.get(a.playerId);if(!r)continue;const o=kN(r.isTeamZero),{group:l,textMaterial:c,ringMaterial:u}=FN(o);l.position.copy(s.position),n.scene.replayRoot.add(l),i.push({time:a.time,pad:s,event:a,player:r,color:o,currentCount:1,position:new S(s.position.x,s.position.y,s.position.z),size:s.size,group:l,textMaterial:c,ringMaterial:u})}return i}function BN(n,e,t){const i=vt.clamp(e/t,0,1),s=1-Math.pow(1-i,3),a=i*i,r=n.size==="big"?LN:IN,o=n.size==="big"?360:280,l=1+Math.sin(i*Math.PI)*.22;n.group.visible=!0,n.group.position.set(n.position.x,n.position.y,n.position.z+r+s*o),n.group.scale.setScalar(l),n.textMaterial.opacity=Math.max(0,1-a),n.ringMaterial.opacity=Math.max(0,.48*(1-i));const c=n.group.children[1];if(c){const u=.75+s*(n.size==="big"?2.8:1.85);c.scale.setScalar(u),c.position.z=zT-r-s*o}}function zN(n={}){const e=Math.max(.1,n.durationSeconds??TN);let t=[];function i(a){return n.includePickup?.({pad:a.pad,event:a.event,player:a.player})??!0}function s(){for(const a of t)a.group.visible=!1}return{id:"boost-pickup-animation",setup(a){t=UN(a)},beforeRender(a){if(!a.state.boostPickupAnimationEnabled){s();return}const r=a.currentTime-e,o=new Map;for(const l of t){if(l.time>a.currentTime){l.group.visible=!1;continue}if(!i(l)){l.group.visible=!1;continue}const c=(o.get(l.player.id)??0)+1;if(o.set(l.player.id,c),l.time{(r instanceof we||r instanceof Uh)&&r.geometry?.dispose()}),a.textMaterial.map?.dispose(),a.textMaterial.dispose(),a.ringMaterial.dispose();t=[]}}}const HN=60,VN=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function GN(n){if(n&&MediaRecorder.isTypeSupported(n))return n;for(const e of VN)if(MediaRecorder.isTypeSupported(e))return e;return""}function $N(n){return n instanceof Error?n.message:String(n)}function WN(n={}){let e=null,t=null,i=[],s=null,a=0,r=0,o="",l=0,c=null,u=null,d=null,h=null,f=!1,p=null;const g=new Set;function _(){return{state:t?t.state==="recording"?"recording":"stopping":c?"error":s?"ready":"idle",elapsedSeconds:r,mimeType:o,sizeBytes:l,error:c}}function m(){const x=_();n.onStatusChange?.(x);for(const M of g)M(x)}function v(){if(!e)throw new Error("Canvas recorder plugin is not installed");return e}function y(x){t=null,h=null,f=!1,s=x,l=x?.size??0,p&&e&&e.player.setState({currentTime:p.currentTime,speed:p.speed,playing:p.playing}),p=null,x&&n.onComplete?.(x),m(),d?.(x),d=null,u=null}function b(x){c=$N(x),t=null,h=null,f=!1,p=null,m(),d?.(null),d=null,u=null}const T={id:"canvas-recorder",setup(x){e=x},beforeRender(x){t?.state==="recording"&&(r=(performance.now()-a)/1e3,m()),t?.state==="recording"&&h!==null&&x.currentTime>=h&&T.stop()},onStateChange(x){f&&t?.state==="recording"&&!x.state.playing&&r>0&&T.stop()},teardown(){t?.state==="recording"&&t.stop(),e=null,t=null,h=null,f=!1,p=null,d?.(null),d=null,u=null,g.clear()},start(x={}){const M=v();if(t?.state==="recording")throw new Error("Canvas recording is already in progress");if(typeof MediaRecorder>"u")throw new Error("MediaRecorder is not available in this browser");const C=M.scene.renderer.domElement;if(!C.captureStream)throw new Error("Canvas captureStream is not available in this browser");c=null,s=null,i=[],l=0,r=0,a=performance.now(),o=GN(x.mimeType??n.mimeType);const w=Math.max(1,x.fps??n.fps??HN),E=C.captureStream(w);t=new MediaRecorder(E,{mimeType:o,videoBitsPerSecond:x.videoBitsPerSecond??n.videoBitsPerSecond}),u=new Promise(R=>{d=R}),t.addEventListener("dataavailable",R=>{R.data.size>0&&(i.push(R.data),l+=R.data.size,m())}),t.addEventListener("stop",()=>{E.getTracks().forEach(R=>R.stop()),y(new Blob(i,{type:o||"video/webm"}))},{once:!0}),t.addEventListener("error",R=>{E.getTracks().forEach(k=>k.stop()),b(R.error??R)},{once:!0}),t.start(1e3),m()},stop(){if(!t)return Promise.resolve(s);if(t.state==="inactive")return u??Promise.resolve(s);const x=u??new Promise(M=>{d=M});return t.stop(),m(),x},clear(){if(t?.state==="recording")throw new Error("Cannot clear a recording while recording is in progress");s=null,i=[],l=0,r=0,c=null,m()},getRecording(){return s},getStatus(){return _()},subscribe(x){return g.add(x),x(_()),()=>{g.delete(x)}},recordRange(x={}){const M=v(),C=M.player.getState();(x.restorePlaybackState??!0)&&(p=C);const w=x.playbackRate??C.speed,E=x.startTime??C.currentTime;h=x.endTime??C.duration,f=!0,M.player.setState({currentTime:E,speed:w,playing:!1}),T.start(x);const R=u;return M.player.play(),(R??Promise.resolve(null)).then(k=>{if(!k)throw new Error("Recording stopped without producing a video");return k})},recordFullReplay(x={}){return T.recordRange({...x,startTime:x.startTime??0,endTime:x.endTime??v().replay.duration})}};return T}const Pv="subtr-actor-timeline-overlay-styles";function XN(){if(document.getElementById(Pv))return;const n=document.createElement("style");n.id=Pv,n.textContent=` .sap-tl-root { position: absolute; inset: 0; @@ -4411,8 +4411,8 @@ void main() { font-size: 0.72rem; } } - `,document.head.append(n)}const FN=new Set(["goal","save","bookmark"]),NN=.2,Mp=60,UN=2,BN=4,zN=.01,Tv=.01;function Fm(n){if(!Number.isFinite(n))return"--:--.--";const e=Math.max(0,n),t=Math.floor(e/60),i=Math.floor(e%60),s=Math.floor((e-Math.floor(e))*100);return`${t}:${String(i).padStart(2,"0")}.${String(s).padStart(2,"0")}`}function Mv(n){switch(n.kind){case"goal":return 5;case"demo":return 4;case"save":return 3;case"assist":return 2;case"shot":case"bookmark":return 1;default:return 0}}function HN(n){switch(n.kind){case"goal":case"goal-context":case"goal-tag":return BN;default:return UN}}function Pg(n){return n.seekTime!==void 0&&Number.isFinite(n.seekTime)?Math.max(0,n.seekTime):Number.isFinite(n.time)?Math.max(0,n.time-HN(n)):0}function VN(n){if(n.color)return n.color;if(n.isTeamZero===!0)return"#3b82f6";if(n.isTeamZero===!1)return"#f59e0b";switch(n.kind){case"goal":return"#f5f7fa";case"demo":return"#ef4444";case"save":return"#34d399";case"assist":return"#c084fc";case"shot":return"#60a5fa";case"bookmark":return"#facc15";default:return"#d1d9e0"}}function GN(n){if(n.events.length>1)return`${n.events.length}`;const e=n.events[0];return e?e.shortLabel&&e.shortLabel.trim()!==""?e.shortLabel.slice(0,3).toUpperCase():e.kind.slice(0,1).toUpperCase():""}function Nm(n){return[...n].sort((e,t)=>{const i=Mv(t)-Mv(e);return i!==0?i:e.time-t.time})}function $N(n){return n.events.map(e=>`${Fm(e.time)} ${e.label??e.kind}`).join(` -`)}function kT(n){const e=new Map;for(const t of n){const i=t.frame!==void 0?`frame:${t.frame}`:`time:${t.time.toFixed(2)}`,s=e.get(i);if(s){s.events.push(t);continue}e.set(i,{key:i,time:t.time,events:[t]})}return[...e.values()].map(t=>({...t,events:Nm(t.events)})).sort((t,i)=>t.time-i.time)}function Ev(n){if(n.length<=Mp)return n;const e=n[0]?.time??0,i=(n[n.length-1]?.time??e)-e;if(i<=0)return[{key:"compact:0",time:e,events:Nm(n.flatMap(r=>r.events))}];const s=i/Mp,a=new Map;for(const r of n){const o=Math.min(Mp-1,Math.max(0,Math.floor((r.time-e)/s))),l=a.get(o);if(l){l.events.push(...r.events);continue}a.set(o,{key:`compact:${o}`,time:r.time,events:[...r.events]})}return[...a.values()].map(r=>({...r,events:Nm(r.events)})).sort((r,o)=>r.time-o.time)}function OT(n,e){return n?typeof n=="function"?n(e):n:[]}function WN(n,e){const t=[];for(const i of n){const s=OT(i.source,e);s.length!==0&&t.push({key:i.key,label:i.label,buckets:kT(s)})}return t}function XN(n,e){return n?typeof n=="function"?n(e):n:[]}function KN(n,e){const t=new Set,i=[];for(const s of n)for(const a of XN(s,e)){const r=a.id;if(r!==void 0){if(t.has(r))continue;t.add(r)}i.push(a)}return i}function qN(n){const e=new Map;for(const t of n){const i=t.lane??"default",s=t.laneLabel??t.lane??"",a=e.get(i);if(a){a.ranges.push(t);continue}e.set(i,{key:i,label:s,ranges:[t]})}return[...e.values()].map(t=>({...t,ranges:[...t.ranges].sort((i,s)=>i.startTime-s.startTime)}))}function YN(n){return n.color?n.color:n.isTeamZero===!0?"#3b82f6":n.isTeamZero===!1?"#f59e0b":"#d1d9e0"}function jN(n,e){if(n.replayEvents)return OT(n.replayEvents,e);if(n.includeReplayEvents===!1)return[];const t=new Set(n.replayEventKinds??FN);return e.replay.timelineEvents.filter(i=>t.has(i.kind))}function ZN(n,e){const t=e.player.projectReplayTimeToTimeline(Pg(n));if(!t.hiddenBySkip)return t.seekTime;const i=Math.min(e.player.getTimelineDuration(),t.timelineTime+zN);return e.player.projectTimelineTimeToReplay(i)}function xu(n,e){return`${n/Math.max(e,1e-4)*100}%`}function JN(n,e,t){let i=n.timelineTime,s=e.timelineTime;return s<=i&&(n.hiddenBySkip||e.hiddenBySkip)&&(i>=t?(i=Math.max(0,t-Tv),s=t):s=Math.min(t,i+Tv)),{startTimelineTime:i,endTimelineTime:s}}function QN(n={}){const e=n.pauseWhileScrubbing??!0;let t=0;const i=n.events?[{key:"events:initial",label:n.eventsLabel??"Events",source:n.events}]:[],s=n.ranges?[n.ranges]:[];let a=null,r=null,o=null,l=null,c=null,u=null,d=null,h=null,f=null,p=null,g=null,_=null,m=!1,v="",y=!1,b=!1,T=null,x=[],M=[],C=null;const w=new Map,E=[],R=[],D=[],O=[];let k=0,U=new Set;function F(){T&&(ke(T),H({...T,state:T.player.getState()}))}function W(){T&&(Z(T),H({...T,state:T.player.getState()}))}function H(X){if(!l||!c||!u||!d||!h||!f||!r)return;const ie=X.player.getTimelineCurrentTime(),xe=X.player.getTimelineDuration(),Ae=[xe.toFixed(4),X.state.skipKickoffsEnabled?"1":"0",X.state.skipPostGoalTransitionsEnabled?"1":"0"].join(":");C!==Ae&&(ke(X),Z(X),C=Ae),l.min="0",l.max=`${xe}`,l.step="0.01",l.value=`${Math.min(ie,xe)}`,c.dataset.playing=X.state.playing?"true":"false",c.setAttribute("aria-label",X.state.playing?"Pause replay":"Play replay"),c.title=X.state.playing?"Pause replay":"Play replay",u.textContent=X.state.playing?"||":">",d.textContent=X.state.playing?"Pause":"Play",h.textContent=Fm(ie),f.textContent=`-${Fm(xe-ie)}`,r.dataset.scrubbing=y?"true":"false",De(ie);for(const G of R){const j=Math.max(0,G.startTimelineTime),Y=Math.min(xe,G.endTimelineTime);if(Math.max(0,Y-j)<=1e-4){G.element.hidden=!0;continue}G.element.hidden=!1,G.element.dataset.active=ie>=j&&ie<=Y?"true":"false"}const L=xu(Math.min(ie,xe),xe);for(const G of O)G.element.style.left=L;for(const G of D)G.element.style.left=L}function ne(X){let ie=0,xe=E.length;for(;iek)for(let G=k;G{ie.player.seek(ZN(Ae,ie))}),G.dataset.active="false",G.dataset.passed="false";const j={element:G,timelineTime:L.timelineTime,active:!1,passed:!1};return w.set(X.key,j),E.push(j),G}function ke(X){if(!g||!p)return;g.replaceChildren(),p.replaceChildren(),w.clear(),E.splice(0,E.length),k=0,U=new Set,O.splice(0,O.length);const ie=jN(n,X);x=[],ie.length>0&&x.push({key:"replay",label:n.replayEventsLabel??"Replay",buckets:kT(ie)}),x.push(...WN(i,X));const xe=Math.max(X.player.getTimelineDuration(),1e-4),Ae=x[0];if(Ae?.key==="replay")for(const G of Ev(Ae.buckets)){const j=Xe({...G,key:`${Ae.key}:${G.key}`},X,xe);j&&g.append(j)}const L=x.filter(G=>G.key!=="replay");p.hidden=L.length===0;for(const G of L){const j=document.createElement("div");j.className="sap-tl-event-lane",j.dataset.label=G.label;const Y=document.createElement("span");Y.className="sap-tl-event-lane-label",Y.textContent=G.label,Y.setAttribute("aria-label",G.label),j.append(Y);const Q=document.createElement("div");Q.className="sap-tl-event-lane-track";const _e=document.createElement("div");_e.className="sap-tl-markers";for(const ge of Ev(G.buckets)){const $e=Xe({...ge,key:`${G.key}:${ge.key}`},X,xe);$e&&_e.append($e)}const ce=document.createElement("div");ce.className="sap-tl-event-playhead",Q.append(_e,ce),O.push({element:ce}),j.append(Q),p.append(j)}E.sort((G,j)=>G.timelineTime-j.timelineTime)}function Z(X){if(!o)return;o.replaceChildren(),R.splice(0,R.length),D.splice(0,D.length);const ie=KN(s,X).filter(Ae=>Number.isFinite(Ae.startTime)&&Number.isFinite(Ae.endTime)&&Ae.endTime>Ae.startTime);M=qN(ie);const xe=Math.max(X.player.getTimelineDuration(),1e-4);if(M.length===0){o.hidden=!0;return}o.hidden=!1;for(const Ae of M){const L=document.createElement("div");L.className="sap-tl-range-lane";const G=document.createElement("div");if(G.className="sap-tl-range-lane-track",Ae.label){L.dataset.label=Ae.label;const Y=document.createElement("span");Y.className="sap-tl-range-lane-label",Y.textContent=Ae.label,Y.setAttribute("aria-label",Ae.label),L.append(Y)}for(const Y of Ae.ranges){const Q=X.player.projectReplayTimeToTimeline(Y.startTime),_e=X.player.projectReplayTimeToTimeline(Y.endTime),{startTimelineTime:ce,endTimelineTime:ge}=JN(Q,_e,xe),$e=document.createElement("div");$e.className="sap-tl-range-segment",Y.className&&$e.classList.add(Y.className),$e.style.background=YN(Y),$e.title=Y.label??Ae.label,$e.dataset.active="false",$e.style.left=xu(ce,xe),$e.style.width=xu(Math.max(0,ge-ce),xe),G.append($e),R.push({range:Y,element:$e,startTimelineTime:ce,endTimelineTime:ge})}const j=document.createElement("div");j.className="sap-tl-range-playhead",G.append(j),D.push({element:j}),L.append(G),o.append(L)}}function se(){y&&(y=!1,r?.setAttribute("data-scrubbing","false"),b&&T?.player.play(),b=!1)}function Se(){if(y||(y=!0,r?.setAttribute("data-scrubbing","true"),!e))return;const X=T?.player;X&&(b=X.getState().playing,b&&X.pause())}return{id:"timeline-overlay",addEventSource(X,ie={}){return i.push({key:ie.id??`events:${t++}`,label:ie.label??"Events",source:X}),F(),()=>{this.removeEventSource(X)}},removeEventSource(X){const ie=i.findIndex(xe=>xe.source===X);return ie<0?!1:(i.splice(ie,1),F(),!0)},refreshEvents(){F()},addRangeSource(X){return s.push(X),W(),()=>{this.removeRangeSource(X)}},removeRangeSource(X){const ie=s.indexOf(X);return ie<0?!1:(s.splice(ie,1),W(),!0)},refreshRanges(){W()},setup(X){T=X,ON(),getComputedStyle(X.container).position==="static"&&(m=!0,v=X.container.style.position,X.container.style.position="relative"),a=document.createElement("div"),a.className="sap-tl-root",r=document.createElement("div"),r.className="sap-tl-shell",r.dataset.scrubbing="false";const ie=document.createElement("div");ie.className="sap-tl-topline";const xe=document.createElement("div");xe.className="sap-tl-primary",c=document.createElement("button"),c.type="button",c.className="sap-tl-toggle sap-tl-track-toggle",u=document.createElement("span"),u.className="sap-tl-toggle-icon",u.setAttribute("aria-hidden","true"),u.textContent=">",d=document.createElement("span"),d.className="sap-tl-toggle-label",d.textContent="Play",c.append(u,d),c.addEventListener("click",()=>{X.player.togglePlayback()}),h=document.createElement("span"),h.className="sap-tl-current",h.textContent="0:00.00",f=document.createElement("span"),f.className="sap-tl-remaining",f.textContent="-0:00.00",xe.append(h),ie.append(xe,f);const Ae=document.createElement("div");Ae.className="sap-tl-track-wrap",o=document.createElement("div"),o.className="sap-tl-ranges",o.hidden=!0,p=document.createElement("div"),p.className="sap-tl-event-lanes",p.hidden=!0;const L=document.createElement("div");L.className="sap-tl-track-rail";const G=document.createElement("div");G.className="sap-tl-main-rail",g=document.createElement("div"),g.className="sap-tl-markers",l=document.createElement("input"),l.className="sap-tl-range",l.type="range",l.min="0",l.max=`${X.replay.duration}`,l.step="0.01",l.value="0";const j=()=>{Se()},Y=()=>{l&&X.player.seek(X.player.projectTimelineTimeToReplay(Number(l.value)))},Q=()=>{se()};l.addEventListener("pointerdown",j),l.addEventListener("input",Y),l.addEventListener("change",Q),window.addEventListener("pointerup",Q),window.addEventListener("pointercancel",Q),_=()=>{l?.removeEventListener("pointerdown",j),l?.removeEventListener("input",Y),l?.removeEventListener("change",Q),window.removeEventListener("pointerup",Q),window.removeEventListener("pointercancel",Q)},L.append(G,g,l),Ae.append(o,p,c,L),r.append(ie,Ae),a.append(r),X.container.append(a),ke(X),Z(X),H({...X,state:X.player.getState()})},onStateChange(X){T=X,H(X)},teardown(X){_?.(),_=null,se(),a?.remove(),a=null,r=null,o=null,p=null,l=null,c=null,u=null,d=null,h=null,f=null,g=null,T=null,x=[],M=[],C=null,w.clear(),E.splice(0,E.length),R.splice(0,R.length),D.splice(0,D.length),O.splice(0,O.length),k=0,U=new Set,m&&(X.container.style.position=v,m=!1)}}}function e3(n,e,t={}){const i=new xw(e.raw,{motionSmoothing:t.motionSmoothing,smoothingBlendFactor:t.smoothingBlendFactor,smoothingAnchorInterval:t.smoothingAnchorInterval,timelineCompaction:t.timelineCompaction,disableFrameFiltering:t.disableFrameFiltering}),s=new eN(n,i,t,e.replay);return s.getPlugins().some(a=>a.id==="camera")||s.addPlugin(oN()),s}const t3="https://ballchasing.com",n3=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function i3(n,e){const i=(e instanceof URL?e.href:e).replace(/\/+$/,"");return new URL(`${i}/${n.replace(/^\/+/,"")}`)}function Cv(n){return n3.test(n.trim())}function Ig(n){const e=n.trim();if(Cv(e))return e.toLowerCase();let t;try{t=new URL(e)}catch{throw new Error(`Invalid Ballchasing replay id: ${n}`)}if(!/(^|\.)ballchasing\.com$/i.test(t.hostname))throw new Error(`Invalid Ballchasing replay URL: ${n}`);const i=t.pathname.split("/").filter(Boolean),s=i.findIndex(o=>o==="replay"),a=i.findIndex(o=>o==="replays"),r=s>=0?i[s+1]:a>=0?i[a+1]:void 0;if(!r||!Cv(r))throw new Error(`Invalid Ballchasing replay URL: ${n}`);return r.toLowerCase()}function s3(n){return`ballchasing-${Ig(n)}.replay`}function a3(n,e=t3){const t=Ig(n);return i3(`dl/replay/${encodeURIComponent(t)}`,e)}const Um=250,Av="subtr-actor-ballchasing-overlay-styles",Ep="#3b82f6",Rv="#f59e0b";function r3(){if(document.getElementById(Av))return;const n=document.createElement("style");n.id=Av,n.textContent=` + `,document.head.append(n)}const KN=new Set(["goal","save","bookmark"]),qN=.2,Ip=60,YN=2,jN=4,ZN=.01,Iv=.01;function Gm(n){if(!Number.isFinite(n))return"--:--.--";const e=Math.max(0,n),t=Math.floor(e/60),i=Math.floor(e%60),s=Math.floor((e-Math.floor(e))*100);return`${t}:${String(i).padStart(2,"0")}.${String(s).padStart(2,"0")}`}function Lv(n){switch(n.kind){case"goal":return 5;case"demo":return 4;case"save":return 3;case"assist":return 2;case"shot":case"bookmark":return 1;default:return 0}}function JN(n){switch(n.kind){case"goal":case"goal-context":case"goal-tag":return jN;default:return YN}}function Ng(n){return n.seekTime!==void 0&&Number.isFinite(n.seekTime)?Math.max(0,n.seekTime):Number.isFinite(n.time)?Math.max(0,n.time-JN(n)):0}function QN(n){if(n.color)return n.color;if(n.isTeamZero===!0)return"#3b82f6";if(n.isTeamZero===!1)return"#f59e0b";switch(n.kind){case"goal":return"#f5f7fa";case"demo":return"#ef4444";case"save":return"#34d399";case"assist":return"#c084fc";case"shot":return"#60a5fa";case"bookmark":return"#facc15";default:return"#d1d9e0"}}function e3(n){if(n.events.length>1)return`${n.events.length}`;const e=n.events[0];return e?e.shortLabel&&e.shortLabel.trim()!==""?e.shortLabel.slice(0,3).toUpperCase():e.kind.slice(0,1).toUpperCase():""}function $m(n){return[...n].sort((e,t)=>{const i=Lv(t)-Lv(e);return i!==0?i:e.time-t.time})}function t3(n){return n.events.map(e=>`${Gm(e.time)} ${e.label??e.kind}`).join(` +`)}function VT(n){const e=new Map;for(const t of n){const i=t.frame!==void 0?`frame:${t.frame}`:`time:${t.time.toFixed(2)}`,s=e.get(i);if(s){s.events.push(t);continue}e.set(i,{key:i,time:t.time,events:[t]})}return[...e.values()].map(t=>({...t,events:$m(t.events)})).sort((t,i)=>t.time-i.time)}function kv(n){if(n.length<=Ip)return n;const e=n[0]?.time??0,i=(n[n.length-1]?.time??e)-e;if(i<=0)return[{key:"compact:0",time:e,events:$m(n.flatMap(r=>r.events))}];const s=i/Ip,a=new Map;for(const r of n){const o=Math.min(Ip-1,Math.max(0,Math.floor((r.time-e)/s))),l=a.get(o);if(l){l.events.push(...r.events);continue}a.set(o,{key:`compact:${o}`,time:r.time,events:[...r.events]})}return[...a.values()].map(r=>({...r,events:$m(r.events)})).sort((r,o)=>r.time-o.time)}function GT(n,e){return n?typeof n=="function"?n(e):n:[]}function n3(n,e){const t=[];for(const i of n){const s=GT(i.source,e);s.length!==0&&t.push({key:i.key,label:i.label,buckets:VT(s)})}return t}function i3(n,e){return n?typeof n=="function"?n(e):n:[]}function s3(n,e){const t=new Set,i=[];for(const s of n)for(const a of i3(s,e)){const r=a.id;if(r!==void 0){if(t.has(r))continue;t.add(r)}i.push(a)}return i}function a3(n){const e=new Map;for(const t of n){const i=t.lane??"default",s=t.laneLabel??t.lane??"",a=e.get(i);if(a){a.ranges.push(t);continue}e.set(i,{key:i,label:s,ranges:[t]})}return[...e.values()].map(t=>({...t,ranges:[...t.ranges].sort((i,s)=>i.startTime-s.startTime)}))}function r3(n){return n.color?n.color:n.isTeamZero===!0?"#3b82f6":n.isTeamZero===!1?"#f59e0b":"#d1d9e0"}function o3(n,e){if(n.replayEvents)return GT(n.replayEvents,e);if(n.includeReplayEvents===!1)return[];const t=new Set(n.replayEventKinds??KN);return e.replay.timelineEvents.filter(i=>t.has(i.kind))}function l3(n,e){const t=e.player.projectReplayTimeToTimeline(Ng(n));if(!t.hiddenBySkip)return t.seekTime;const i=Math.min(e.player.getTimelineDuration(),t.timelineTime+ZN);return e.player.projectTimelineTimeToReplay(i)}function Mu(n,e){return`${n/Math.max(e,1e-4)*100}%`}function c3(n,e,t){let i=n.timelineTime,s=e.timelineTime;return s<=i&&(n.hiddenBySkip||e.hiddenBySkip)&&(i>=t?(i=Math.max(0,t-Iv),s=t):s=Math.min(t,i+Iv)),{startTimelineTime:i,endTimelineTime:s}}function u3(n={}){const e=n.pauseWhileScrubbing??!0;let t=0;const i=n.events?[{key:"events:initial",label:n.eventsLabel??"Events",source:n.events}]:[],s=n.ranges?[n.ranges]:[];let a=null,r=null,o=null,l=null,c=null,u=null,d=null,h=null,f=null,p=null,g=null,_=null,m=!1,v="",y=!1,b=!1,T=null,x=[],M=[],C=null;const w=new Map,E=[],R=[],k=[],O=[];let D=0,U=new Set;function F(){T&&(De(T),H({...T,state:T.player.getState()}))}function W(){T&&(Z(T),H({...T,state:T.player.getState()}))}function H(X){if(!l||!c||!u||!d||!h||!f||!r)return;const ie=X.player.getTimelineCurrentTime(),xe=X.player.getTimelineDuration(),Ae=[xe.toFixed(4),X.state.skipKickoffsEnabled?"1":"0",X.state.skipPostGoalTransitionsEnabled?"1":"0"].join(":");C!==Ae&&(De(X),Z(X),C=Ae),l.min="0",l.max=`${xe}`,l.step="0.01",l.value=`${Math.min(ie,xe)}`,c.dataset.playing=X.state.playing?"true":"false",c.setAttribute("aria-label",X.state.playing?"Pause replay":"Play replay"),c.title=X.state.playing?"Pause replay":"Play replay",u.textContent=X.state.playing?"||":">",d.textContent=X.state.playing?"Pause":"Play",h.textContent=Gm(ie),f.textContent=`-${Gm(xe-ie)}`,r.dataset.scrubbing=y?"true":"false",ke(ie);for(const G of R){const j=Math.max(0,G.startTimelineTime),Y=Math.min(xe,G.endTimelineTime);if(Math.max(0,Y-j)<=1e-4){G.element.hidden=!0;continue}G.element.hidden=!1,G.element.dataset.active=ie>=j&&ie<=Y?"true":"false"}const L=Mu(Math.min(ie,xe),xe);for(const G of O)G.element.style.left=L;for(const G of k)G.element.style.left=L}function ne(X){let ie=0,xe=E.length;for(;ieD)for(let G=D;G{ie.player.seek(l3(Ae,ie))}),G.dataset.active="false",G.dataset.passed="false";const j={element:G,timelineTime:L.timelineTime,active:!1,passed:!1};return w.set(X.key,j),E.push(j),G}function De(X){if(!g||!p)return;g.replaceChildren(),p.replaceChildren(),w.clear(),E.splice(0,E.length),D=0,U=new Set,O.splice(0,O.length);const ie=o3(n,X);x=[],ie.length>0&&x.push({key:"replay",label:n.replayEventsLabel??"Replay",buckets:VT(ie)}),x.push(...n3(i,X));const xe=Math.max(X.player.getTimelineDuration(),1e-4),Ae=x[0];if(Ae?.key==="replay")for(const G of kv(Ae.buckets)){const j=Xe({...G,key:`${Ae.key}:${G.key}`},X,xe);j&&g.append(j)}const L=x.filter(G=>G.key!=="replay");p.hidden=L.length===0;for(const G of L){const j=document.createElement("div");j.className="sap-tl-event-lane",j.dataset.label=G.label;const Y=document.createElement("span");Y.className="sap-tl-event-lane-label",Y.textContent=G.label,Y.setAttribute("aria-label",G.label),j.append(Y);const Q=document.createElement("div");Q.className="sap-tl-event-lane-track";const _e=document.createElement("div");_e.className="sap-tl-markers";for(const ge of kv(G.buckets)){const $e=Xe({...ge,key:`${G.key}:${ge.key}`},X,xe);$e&&_e.append($e)}const ce=document.createElement("div");ce.className="sap-tl-event-playhead",Q.append(_e,ce),O.push({element:ce}),j.append(Q),p.append(j)}E.sort((G,j)=>G.timelineTime-j.timelineTime)}function Z(X){if(!o)return;o.replaceChildren(),R.splice(0,R.length),k.splice(0,k.length);const ie=s3(s,X).filter(Ae=>Number.isFinite(Ae.startTime)&&Number.isFinite(Ae.endTime)&&Ae.endTime>Ae.startTime);M=a3(ie);const xe=Math.max(X.player.getTimelineDuration(),1e-4);if(M.length===0){o.hidden=!0;return}o.hidden=!1;for(const Ae of M){const L=document.createElement("div");L.className="sap-tl-range-lane";const G=document.createElement("div");if(G.className="sap-tl-range-lane-track",Ae.label){L.dataset.label=Ae.label;const Y=document.createElement("span");Y.className="sap-tl-range-lane-label",Y.textContent=Ae.label,Y.setAttribute("aria-label",Ae.label),L.append(Y)}for(const Y of Ae.ranges){const Q=X.player.projectReplayTimeToTimeline(Y.startTime),_e=X.player.projectReplayTimeToTimeline(Y.endTime),{startTimelineTime:ce,endTimelineTime:ge}=c3(Q,_e,xe),$e=document.createElement("div");$e.className="sap-tl-range-segment",Y.className&&$e.classList.add(Y.className),$e.style.background=r3(Y),$e.title=Y.label??Ae.label,$e.dataset.active="false",$e.style.left=Mu(ce,xe),$e.style.width=Mu(Math.max(0,ge-ce),xe),G.append($e),R.push({range:Y,element:$e,startTimelineTime:ce,endTimelineTime:ge})}const j=document.createElement("div");j.className="sap-tl-range-playhead",G.append(j),k.push({element:j}),L.append(G),o.append(L)}}function ae(){y&&(y=!1,r?.setAttribute("data-scrubbing","false"),b&&T?.player.play(),b=!1)}function Se(){if(y||(y=!0,r?.setAttribute("data-scrubbing","true"),!e))return;const X=T?.player;X&&(b=X.getState().playing,b&&X.pause())}return{id:"timeline-overlay",addEventSource(X,ie={}){return i.push({key:ie.id??`events:${t++}`,label:ie.label??"Events",source:X}),F(),()=>{this.removeEventSource(X)}},removeEventSource(X){const ie=i.findIndex(xe=>xe.source===X);return ie<0?!1:(i.splice(ie,1),F(),!0)},refreshEvents(){F()},addRangeSource(X){return s.push(X),W(),()=>{this.removeRangeSource(X)}},removeRangeSource(X){const ie=s.indexOf(X);return ie<0?!1:(s.splice(ie,1),W(),!0)},refreshRanges(){W()},setup(X){T=X,XN(),getComputedStyle(X.container).position==="static"&&(m=!0,v=X.container.style.position,X.container.style.position="relative"),a=document.createElement("div"),a.className="sap-tl-root",r=document.createElement("div"),r.className="sap-tl-shell",r.dataset.scrubbing="false";const ie=document.createElement("div");ie.className="sap-tl-topline";const xe=document.createElement("div");xe.className="sap-tl-primary",c=document.createElement("button"),c.type="button",c.className="sap-tl-toggle sap-tl-track-toggle",u=document.createElement("span"),u.className="sap-tl-toggle-icon",u.setAttribute("aria-hidden","true"),u.textContent=">",d=document.createElement("span"),d.className="sap-tl-toggle-label",d.textContent="Play",c.append(u,d),c.addEventListener("click",()=>{X.player.togglePlayback()}),h=document.createElement("span"),h.className="sap-tl-current",h.textContent="0:00.00",f=document.createElement("span"),f.className="sap-tl-remaining",f.textContent="-0:00.00",xe.append(h),ie.append(xe,f);const Ae=document.createElement("div");Ae.className="sap-tl-track-wrap",o=document.createElement("div"),o.className="sap-tl-ranges",o.hidden=!0,p=document.createElement("div"),p.className="sap-tl-event-lanes",p.hidden=!0;const L=document.createElement("div");L.className="sap-tl-track-rail";const G=document.createElement("div");G.className="sap-tl-main-rail",g=document.createElement("div"),g.className="sap-tl-markers",l=document.createElement("input"),l.className="sap-tl-range",l.type="range",l.min="0",l.max=`${X.replay.duration}`,l.step="0.01",l.value="0";const j=()=>{Se()},Y=()=>{l&&X.player.seek(X.player.projectTimelineTimeToReplay(Number(l.value)))},Q=()=>{ae()};l.addEventListener("pointerdown",j),l.addEventListener("input",Y),l.addEventListener("change",Q),window.addEventListener("pointerup",Q),window.addEventListener("pointercancel",Q),_=()=>{l?.removeEventListener("pointerdown",j),l?.removeEventListener("input",Y),l?.removeEventListener("change",Q),window.removeEventListener("pointerup",Q),window.removeEventListener("pointercancel",Q)},L.append(G,g,l),Ae.append(o,p,c,L),r.append(ie,Ae),a.append(r),X.container.append(a),De(X),Z(X),H({...X,state:X.player.getState()})},onStateChange(X){T=X,H(X)},teardown(X){_?.(),_=null,ae(),a?.remove(),a=null,r=null,o=null,p=null,l=null,c=null,u=null,d=null,h=null,f=null,g=null,T=null,x=[],M=[],C=null,w.clear(),E.splice(0,E.length),R.splice(0,R.length),k.splice(0,k.length),O.splice(0,O.length),D=0,U=new Set,m&&(X.container.style.position=v,m=!1)}}}function d3(n,e,t={}){const i=new Rw(e.raw,{motionSmoothing:t.motionSmoothing,smoothingBlendFactor:t.smoothingBlendFactor,smoothingAnchorInterval:t.smoothingAnchorInterval,timelineCompaction:t.timelineCompaction,disableFrameFiltering:t.disableFrameFiltering}),s=new dN(n,i,t,e.replay);return s.getPlugins().some(a=>a.id==="camera")||s.addPlugin(yN()),s}const h3="https://ballchasing.com",f3=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function p3(n,e){const i=(e instanceof URL?e.href:e).replace(/\/+$/,"");return new URL(`${i}/${n.replace(/^\/+/,"")}`)}function Dv(n){return f3.test(n.trim())}function Ug(n){const e=n.trim();if(Dv(e))return e.toLowerCase();let t;try{t=new URL(e)}catch{throw new Error(`Invalid Ballchasing replay id: ${n}`)}if(!/(^|\.)ballchasing\.com$/i.test(t.hostname))throw new Error(`Invalid Ballchasing replay URL: ${n}`);const i=t.pathname.split("/").filter(Boolean),s=i.findIndex(o=>o==="replay"),a=i.findIndex(o=>o==="replays"),r=s>=0?i[s+1]:a>=0?i[a+1]:void 0;if(!r||!Dv(r))throw new Error(`Invalid Ballchasing replay URL: ${n}`);return r.toLowerCase()}function m3(n){return`ballchasing-${Ug(n)}.replay`}function _3(n,e=h3){const t=Ug(n);return p3(`dl/replay/${encodeURIComponent(t)}`,e)}const Wm=250,Ov="subtr-actor-ballchasing-overlay-styles",Lp="#3b82f6",Fv="#f59e0b";function g3(){if(document.getElementById(Ov))return;const n=document.createElement("style");n.id=Ov,n.textContent=` .sap-bc-overlay-root { position: absolute; inset: 0; @@ -4541,14 +4541,14 @@ void main() { right: calc(50% + 2.7rem); flex-direction: row; justify-content: flex-end; - border-bottom: 2px solid ${Ep}; + border-bottom: 2px solid ${Lp}; } .sap-bc-team-hud-orange { left: calc(50% + 2.7rem); flex-direction: row; justify-content: flex-start; - border-bottom: 2px solid ${Rv}; + border-bottom: 2px solid ${Fv}; } .sap-bc-hud-player { @@ -4656,7 +4656,7 @@ void main() { .sap-bc-followed-boost-ring { --sap-bc-followed-boost: 0%; - --sap-bc-followed-color: ${Ep}; + --sap-bc-followed-color: ${Lp}; position: relative; display: grid; place-items: center; @@ -4676,11 +4676,11 @@ void main() { } .sap-bc-followed-hud-blue .sap-bc-followed-boost-ring { - --sap-bc-followed-color: ${Ep}; + --sap-bc-followed-color: ${Lp}; } .sap-bc-followed-hud-orange .sap-bc-followed-boost-ring { - --sap-bc-followed-color: ${Rv}; + --sap-bc-followed-color: ${Fv}; } .sap-bc-followed-boost-value { @@ -4795,7 +4795,7 @@ void main() { font-size: 0.68rem; } } - `,document.head.append(n)}function o3(n,e){const t=n.players[e],i=t.frame?.boostAmount??0,s=t.nextFrame?.boostAmount??i;return vt.lerp(i,s,n.alpha)}function l3(n,e){const t=n.replay.players.find(h=>h.id===e);if(!t)return null;const i=fh(n.replay,n.state.currentTime),s=Math.min(i+1,n.replay.frames.length-1),a=n.replay.frames[i],r=n.replay.frames[s]??a,o=a?.time??n.state.currentTime,l=r?.time??o,c=l>o?vt.clamp((n.state.currentTime-o)/(l-o),0,1):0,u=t.frames[i]?.boostAmount??0,d=t.frames[s]?.boostAmount??u;return vt.lerp(u,d,c)}function Pv(n,e,t,i){if(!n||!e)return;const s=Math.max(0,Math.min(100,Math.round(Qh(t))));n.style.width=`${s}%`,e.textContent=`${s} ${i}`}function Iv(n,e,t,i){if(!n)return;const s=Math.max(0,Math.min(100,Math.round(Qh(e))));n.root.hidden=!1,n.root.classList.toggle("sap-bc-followed-hud-blue",i),n.root.classList.toggle("sap-bc-followed-hud-orange",!i),n.root.setAttribute("aria-label",`${t} boost ${s}`),n.ring.style.setProperty("--sap-bc-followed-boost",`${s}%`),n.value.textContent=`${s}`,n.name.textContent=t}function Lv(n,e,t,i){if(!n)return;const s=()=>{e.player.setAttachedPlayer(t)};n.classList.add("sap-bc-player-selectable"),n.tabIndex=0,n.setAttribute("role","button"),n.setAttribute("aria-label",`Follow ${i}`),n.title=`Follow ${i}`,n.addEventListener("click",s),n.addEventListener("keydown",a=>{a.key!=="Enter"&&a.key!==" "||(a.preventDefault(),s())})}function c3(n,e,t,i,s){if(n.getWorldPosition(s),s.add(e),s.project(t),s.z<-1||s.z>1)return!1;const a=i.clientWidth||1,r=i.clientHeight||1;return s.x=(s.x+1)*a/2,s.y=(1-s.y)*r/2,!(s.x<-80||s.x>a+80||s.y<-80||s.y>r+80)}function u3(n={}){const e=n.showFloatingNames??!0,t=n.showFloatingBoostBars??!0,i=n.showTeamBoostHud??!0,s=n.showFollowedPlayerHud??!0;let a=null,r=null,o=null,l=null,c=null,u=!1,d="";const h=new Map,f=n.floatingLiftUu,p=new S,g=new S;function _(){const b=typeof f=="function"?f():f;return typeof b=="number"&&Number.isFinite(b)?b:Um}function m(b){for(const[T,x]of h.entries()){const M=T===b;x.floatingRoot?.classList.toggle("sap-bc-player-following",M),x.teamHudEntry?.classList.toggle("sap-bc-player-following",M),x.floatingRoot?.setAttribute("aria-pressed",M?"true":"false"),x.teamHudEntry?.setAttribute("aria-pressed",M?"true":"false")}}function v(b){if(!c||!b.state.attachedPlayerId){c&&(c.root.hidden=!0);return}const T=b.replay.players.find(M=>M.id===b.state.attachedPlayerId);if(!T){c.root.hidden=!0;return}const x=l3(b,T.id);if(x===null){c.root.hidden=!0;return}Iv(c,x,T.name,T.isTeamZero)}function y(b,T){if(r3(),getComputedStyle(T).position==="static"&&(u=!0,d=T.style.position,T.style.position="relative"),a=document.createElement("div"),a.className="sap-bc-overlay-root",e||t?(r=document.createElement("div"),r.className="sap-bc-floating-layer",a.append(r)):r=null,i?(o=document.createElement("div"),o.className="sap-bc-team-hud sap-bc-team-hud-blue",l=document.createElement("div"),l.className="sap-bc-team-hud sap-bc-team-hud-orange",a.append(o,l)):(o=null,l=null),s){const x=document.createElement("div");x.className="sap-bc-followed-hud",x.hidden=!0;const M=document.createElement("div");M.className="sap-bc-followed-boost-ring";const C=document.createElement("span");C.className="sap-bc-followed-boost-value",M.append(C);const w=document.createElement("div");w.className="sap-bc-followed-meta",w.textContent="Boost";const E=document.createElement("span");E.className="sap-bc-followed-name",w.append(E),x.append(M,w),a.append(x),c={root:x,ring:M,value:C,name:E}}else c=null;for(const x of b.replay.players){let M=null,C=null,w=null,E=null;r&&(M=document.createElement("div"),M.className="sap-bc-floating-track",M.hidden=!0,(e||t)&&(C=document.createElement("div"),C.className=`sap-bc-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,w=document.createElement("div"),w.className=`sap-bc-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,E=document.createElement("span"),E.className="sap-bc-boost-text",C.append(w,E),M.append(C)),Lv(M,b,x.id,x.name),r.append(M));let R=null,D=null,O=null;if(i){R=document.createElement("div"),R.className="sap-bc-hud-player";const k=document.createElement("div");k.className=`sap-bc-hud-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,D=document.createElement("div"),D.className=`sap-bc-hud-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,O=document.createElement("span"),O.className="sap-bc-hud-boost-text",k.append(D,O),R.append(k),Lv(R,b,x.id,x.name),(x.isTeamZero?o:l)?.append(R)}h.set(x.id,{floatingRoot:M,floatingBoostFill:w,floatingBoostText:E,teamHudEntry:R,teamHudFill:D,teamHudText:O})}T.append(a),m(b.player.getState().attachedPlayerId),v({...b,state:b.player.getState()})}return{id:"ballchasing-overlay",setup(b){y(b,b.container)},onStateChange(b){m(b.state.attachedPlayerId),v(b)},teardown(b){a?.remove(),a=null,r=null,o=null,l=null,c=null,h.clear(),u&&(b.container.style.position=d,u=!1)},beforeRender(b){if(!a)return;g.copy(b.scene.camera.up).normalize().multiplyScalar(_()*(b.options.fieldScale??1));let T=!1;for(const[x,M]of b.players.entries()){const C=h.get(M.track.id);if(!C)continue;const w=o3(b,x),E=C.floatingRoot?.classList.contains("sap-bc-player-following")??!1;E&&(Iv(c,w,M.track.name,M.track.isTeamZero),T=!0),Pv(C.floatingBoostFill,C.floatingBoostText,w,M.track.name),Pv(C.teamHudFill,C.teamHudText,w,M.track.name);const R=M.mesh,D=R!==null&&M.interpolatedPosition!==null;if(C.teamHudEntry?.classList.toggle("sap-bc-hud-player-inactive",!D),!!C.floatingRoot){if(E||!D||!c3(R,g,b.scene.camera,b.container,p)){C.floatingRoot.hidden=!0;continue}C.floatingRoot.hidden=!1,C.floatingRoot.style.transform=`translate(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px) translate(-50%, -100%)`}}!T&&c&&(c.root.hidden=!0)}}}function d3(){return` + `,document.head.append(n)}function y3(n,e){const t=n.players[e],i=t.frame?.boostAmount??0,s=t.nextFrame?.boostAmount??i;return vt.lerp(i,s,n.alpha)}function v3(n,e){const t=n.replay.players.find(h=>h.id===e);if(!t)return null;const i=vh(n.replay,n.state.currentTime),s=Math.min(i+1,n.replay.frames.length-1),a=n.replay.frames[i],r=n.replay.frames[s]??a,o=a?.time??n.state.currentTime,l=r?.time??o,c=l>o?vt.clamp((n.state.currentTime-o)/(l-o),0,1):0,u=t.frames[i]?.boostAmount??0,d=t.frames[s]?.boostAmount??u;return vt.lerp(u,d,c)}function Nv(n,e,t,i){if(!n||!e)return;const s=Math.max(0,Math.min(100,Math.round(rf(t))));n.style.width=`${s}%`,e.textContent=`${s} ${i}`}function Uv(n,e,t,i){if(!n)return;const s=Math.max(0,Math.min(100,Math.round(rf(e))));n.root.hidden=!1,n.root.classList.toggle("sap-bc-followed-hud-blue",i),n.root.classList.toggle("sap-bc-followed-hud-orange",!i),n.root.setAttribute("aria-label",`${t} boost ${s}`),n.ring.style.setProperty("--sap-bc-followed-boost",`${s}%`),n.value.textContent=`${s}`,n.name.textContent=t}function Bv(n,e,t,i){if(!n)return;const s=()=>{e.player.setAttachedPlayer(t)};n.classList.add("sap-bc-player-selectable"),n.tabIndex=0,n.setAttribute("role","button"),n.setAttribute("aria-label",`Follow ${i}`),n.title=`Follow ${i}`,n.addEventListener("click",s),n.addEventListener("keydown",a=>{a.key!=="Enter"&&a.key!==" "||(a.preventDefault(),s())})}function b3(n,e,t,i,s){if(n.getWorldPosition(s),s.add(e),s.project(t),s.z<-1||s.z>1)return!1;const a=i.clientWidth||1,r=i.clientHeight||1;return s.x=(s.x+1)*a/2,s.y=(1-s.y)*r/2,!(s.x<-80||s.x>a+80||s.y<-80||s.y>r+80)}function x3(n={}){const e=n.showFloatingNames??!0,t=n.showFloatingBoostBars??!0,i=n.showTeamBoostHud??!0,s=n.showFollowedPlayerHud??!0;let a=null,r=null,o=null,l=null,c=null,u=!1,d="";const h=new Map,f=n.floatingLiftUu,p=new S,g=new S;function _(){const b=typeof f=="function"?f():f;return typeof b=="number"&&Number.isFinite(b)?b:Wm}function m(b){for(const[T,x]of h.entries()){const M=T===b;x.floatingRoot?.classList.toggle("sap-bc-player-following",M),x.teamHudEntry?.classList.toggle("sap-bc-player-following",M),x.floatingRoot?.setAttribute("aria-pressed",M?"true":"false"),x.teamHudEntry?.setAttribute("aria-pressed",M?"true":"false")}}function v(b){if(!c||!b.state.attachedPlayerId){c&&(c.root.hidden=!0);return}const T=b.replay.players.find(M=>M.id===b.state.attachedPlayerId);if(!T){c.root.hidden=!0;return}const x=v3(b,T.id);if(x===null){c.root.hidden=!0;return}Uv(c,x,T.name,T.isTeamZero)}function y(b,T){if(g3(),getComputedStyle(T).position==="static"&&(u=!0,d=T.style.position,T.style.position="relative"),a=document.createElement("div"),a.className="sap-bc-overlay-root",e||t?(r=document.createElement("div"),r.className="sap-bc-floating-layer",a.append(r)):r=null,i?(o=document.createElement("div"),o.className="sap-bc-team-hud sap-bc-team-hud-blue",l=document.createElement("div"),l.className="sap-bc-team-hud sap-bc-team-hud-orange",a.append(o,l)):(o=null,l=null),s){const x=document.createElement("div");x.className="sap-bc-followed-hud",x.hidden=!0;const M=document.createElement("div");M.className="sap-bc-followed-boost-ring";const C=document.createElement("span");C.className="sap-bc-followed-boost-value",M.append(C);const w=document.createElement("div");w.className="sap-bc-followed-meta",w.textContent="Boost";const E=document.createElement("span");E.className="sap-bc-followed-name",w.append(E),x.append(M,w),a.append(x),c={root:x,ring:M,value:C,name:E}}else c=null;for(const x of b.replay.players){let M=null,C=null,w=null,E=null;r&&(M=document.createElement("div"),M.className="sap-bc-floating-track",M.hidden=!0,(e||t)&&(C=document.createElement("div"),C.className=`sap-bc-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,w=document.createElement("div"),w.className=`sap-bc-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,E=document.createElement("span"),E.className="sap-bc-boost-text",C.append(w,E),M.append(C)),Bv(M,b,x.id,x.name),r.append(M));let R=null,k=null,O=null;if(i){R=document.createElement("div"),R.className="sap-bc-hud-player";const D=document.createElement("div");D.className=`sap-bc-hud-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,k=document.createElement("div"),k.className=`sap-bc-hud-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,O=document.createElement("span"),O.className="sap-bc-hud-boost-text",D.append(k,O),R.append(D),Bv(R,b,x.id,x.name),(x.isTeamZero?o:l)?.append(R)}h.set(x.id,{floatingRoot:M,floatingBoostFill:w,floatingBoostText:E,teamHudEntry:R,teamHudFill:k,teamHudText:O})}T.append(a),m(b.player.getState().attachedPlayerId),v({...b,state:b.player.getState()})}return{id:"ballchasing-overlay",setup(b){y(b,b.container)},onStateChange(b){m(b.state.attachedPlayerId),v(b)},teardown(b){a?.remove(),a=null,r=null,o=null,l=null,c=null,h.clear(),u&&(b.container.style.position=d,u=!1)},beforeRender(b){if(!a)return;g.copy(b.scene.camera.up).normalize().multiplyScalar(_()*(b.options.fieldScale??1));let T=!1;for(const[x,M]of b.players.entries()){const C=h.get(M.track.id);if(!C)continue;const w=y3(b,x),E=C.floatingRoot?.classList.contains("sap-bc-player-following")??!1;E&&(Uv(c,w,M.track.name,M.track.isTeamZero),T=!0),Nv(C.floatingBoostFill,C.floatingBoostText,w,M.track.name),Nv(C.teamHudFill,C.teamHudText,w,M.track.name);const R=M.mesh,k=R!==null&&M.interpolatedPosition!==null;if(C.teamHudEntry?.classList.toggle("sap-bc-hud-player-inactive",!k),!!C.floatingRoot){if(E||!k||!b3(R,g,b.scene.camera,b.container,p)){C.floatingRoot.hidden=!0;continue}C.floatingRoot.hidden=!1,C.floatingRoot.style.transform=`translate(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px) translate(-50%, -100%)`}}!T&&c&&(c.root.hidden=!0)}}}function w3(){return{guid:{a:0,b:0,c:0,d:0},code:null,name:null,training_type:"Training_None",difficulty:"D_Easy",creator_name:null,description:null,tags:[],map_name:null,created_at:0n,updated_at:0n,creator_player_id:{uid:0n,epic_account_id:null,platform:null,splitscreen_id:0},rounds:[],player_team_number:0,unowned:!1,perfect_completed:!1,shots_completed:0}}let kp=null;async function S3(){return kp||(kp=(async()=>{const n=await F1(()=>import("./rl_replay_subtr_actor-Cnltgw4Z.js"),[],import.meta.url),e=n.default;return typeof e=="function"&&await e(),n})()),kp}async function zv(n){return n?.bindings??S3()}function T3(n){return n instanceof Uint8Array?n:new Uint8Array(n)}function Xr(n){try{return n()}catch(e){throw e instanceof Error?e:new Error(String(e))}}class ta{constructor(e,t){this.bindings=e,this.lossless=t}lossless;cachedPack=null;static async load(e,t){return ta.fromBytes(e,await zv(t))}static fromBytes(e,t){const i=Xr(()=>t.parse_training_pack_lossless(T3(e)));return new ta(t,i)}static async create(e,t){return ta.createWithBindings(await zv(t),e)}static createWithBindings(e,t){const i={...w3(),...t},s=Xr(()=>e.new_training_pack(i));return new ta(e,s)}static fromLosslessJson(e,t){const i=new ta(t,e);return i.view(),i}view(){return this.cachedPack||(this.cachedPack=Xr(()=>this.bindings.training_pack_from_lossless(this.lossless))),this.cachedPack}apply(e){this.lossless=Xr(e),this.cachedPack=null}get losslessJson(){return this.lossless}get pack(){return structuredClone(this.view())}toJSON(){return this.pack}get name(){return this.view().name}get code(){return this.view().code}get description(){return this.view().description}get creatorName(){return this.view().creator_name}get trainingType(){return this.view().training_type}get difficulty(){return this.view().difficulty}get mapName(){return this.view().map_name}get guid(){return{...this.view().guid}}get tags(){return[...this.view().tags]}get rounds(){return structuredClone(this.view().rounds)}get roundCount(){return this.view().rounds.length}updateMetadata(e){const t={...this.view(),...e};this.apply(()=>this.bindings.update_training_pack_metadata(this.lossless,t))}setName(e){this.updateMetadata({name:e})}setCode(e){this.updateMetadata({code:e})}setDescription(e){this.updateMetadata({description:e})}setCreatorName(e){this.updateMetadata({creator_name:e})}setTrainingType(e){this.updateMetadata({training_type:e})}setDifficulty(e){this.updateMetadata({difficulty:e})}setMapName(e){this.updateMetadata({map_name:e})}setTags(e){this.updateMetadata({tags:e})}setGuid(e){this.updateMetadata({guid:e})}addRound(e){this.apply(()=>this.bindings.training_pack_add_round(this.lossless,e))}insertRound(e,t){this.apply(()=>this.bindings.training_pack_insert_round(this.lossless,e,t))}removeRound(e){const t=this.view().rounds[e];return this.apply(()=>this.bindings.training_pack_remove_round(this.lossless,e)),structuredClone(t)}moveRound(e,t){this.apply(()=>this.bindings.training_pack_move_round(this.lossless,e,t))}duplicateRound(e){this.apply(()=>this.bindings.training_pack_duplicate_round(this.lossless,e))}getRoundArchetypes(e){return Xr(()=>this.bindings.training_pack_round_archetypes(this.lossless,e))}setRoundArchetype(e,t,i){this.apply(()=>this.bindings.training_pack_set_round_archetype(this.lossless,e,t,i))}addRoundArchetype(e,t){this.apply(()=>this.bindings.training_pack_add_round_archetype(this.lossless,e,t))}removeRoundArchetype(e,t){const i=this.getRoundArchetypes(e)[t];return this.apply(()=>this.bindings.training_pack_remove_round_archetype(this.lossless,e,t)),i}setRoundBall(e,t){this.apply(()=>this.bindings.training_pack_set_round_ball(this.lossless,e,t))}addRoundCar(e,t){this.addRoundArchetype(e,{kind:"CarSpawnPoint",...t})}setRoundTimeLimit(e,t){this.apply(()=>this.bindings.training_pack_set_round_time_limit(this.lossless,e,t))}appendRoundsFrom(e){const t=e.view().rounds.length;return this.apply(()=>this.bindings.training_pack_append_rounds(this.lossless,e.lossless)),t}toBytes(){return Xr(()=>this.bindings.serialize_training_pack(this.lossless))}}const $T=8,M3=17,E3=32768/Math.PI;function Ol(n){return Math.round(n*E3)}function ju(n,e){const{x:t,y:i,z:s,w:a}=e,r=2*(i*n.z-s*n.y),o=2*(s*n.x-t*n.z),l=2*(t*n.y-i*n.x);return{x:n.x+a*r+(i*l-s*o),y:n.y+a*o+(s*r-t*l),z:n.z+a*l+(t*o-i*r)}}function C3(n){const e=n?.x??0,t=n?.y??0,i=n?.z??0,s=Math.hypot(e,t),a=Math.hypot(s,i);return a===0?{rotator:{pitch:0,yaw:0,roll:0},speed:0}:{rotator:{pitch:Ol(Math.atan2(i,s)),yaw:Ol(Math.atan2(t,e)),roll:0},speed:a}}function A3(n){const e=ju({x:1,y:0,z:0},n),t=ju({x:0,y:1,z:0},n),i=ju({x:0,y:0,z:1},n);return{pitch:Ol(Math.atan2(e.z,Math.hypot(e.x,e.y))),yaw:Ol(Math.atan2(e.y,e.x)),roll:Ol(Math.atan2(t.z,i.z))}}const R3=1,P3=300,I3=400,L3=20;function k3(n,e){const t=P3,i=I3,s=L3,a=n.linearVelocity,r=a?.x??0,o=a?.y??0,l=a?.z??0,c=Math.hypot(r,o,l);if(c<=t)return null;const u=n.rotation?ju({x:1,y:0,z:0},n.rotation):{x:1,y:0,z:0},d=r*u.x+o*u.y+l*u.z,h=d(e>>>0).toString(16).padStart(8,"0").toUpperCase()).join("")}function z3(n){return`${B3(n)}.Tem`}function H3(n=Math.floor(Date.now()/1e3)){const e=BigInt(n);return{guid:U3(),name:"Captured Training Pack",training_type:"Training_Striker",difficulty:"D_Medium",map_name:"Park_P",created_at:e,updated_at:e}}function V3(){return`
@@ -4822,6 +4822,7 @@ void main() { + @@ -5219,6 +5220,70 @@ void main() {
+ +
--
--
-`}const en="#3b82f6",tn="#f59e0b",h3=new Set(["wavedash"]),f3=new Set(["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"]);function Ci(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function Dv(n){return f3.has(n)&&!h3.has(n)}function ef(n){return n===!0?en:n===!1?tn:null}const FT=["timeline","core_player","player_possession","possession","loose_possession","ball_half","ball_third","territorial_pressure","movement","player_activity","field_third","field_half","ball_depth","depth_role","ball_proximity","shadow_defense","rotation_role","first_man_change","goal_context","backboard","ceiling_shot","wall_aerial","wall_aerial_shot","center","flick","flip_reset","dodge_reset","double_tap","fifty_fifty","kickoff","one_timer","pass","ball_carry","controlled_play","rush","dodge","speed_flip","half_flip","half_volley","wavedash","whiff","powerslide","touch","boost_pickups","boost_respawn","bump","demolition"],NT=["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"],Lg=[...new Set([...FT,...NT])],p3=new Set(NT);function io(){return Object.fromEntries(Lg.map(n=>[n,0]))}function Cp(n){return{...n??io()}}function wu(n,e){n[e]+=1}function m3(n){return Lg.includes(n)}function UT(n){if(n==null)return null;if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function Bm(n){return UT(n.meta.primary_player)}function _3(n){return n.meta.team_is_team_0??null}function g3(n){const e=n.meta.stream;return!p3.has(e)||!m3(e)?null:e}function zm(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_frame:n.meta.timing.frame;return typeof e=="number"&&Number.isFinite(e)?e:null}function Hm(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_time:n.meta.timing.time;return typeof e=="number"&&Number.isFinite(e)?e:null}function y3(n,e){const t=zm(n);if(t!==null)return t<=e.frame_number;const i=Hm(n);return i!==null&&i<=e.time}function v3(n){return[...n].sort((e,t)=>{const i=zm(e),s=zm(t);if(i!==s)return(i??Number.POSITIVE_INFINITY)-(s??Number.POSITIVE_INFINITY);const a=Hm(e),r=Hm(t);return a!==r?(a??Number.POSITIVE_INFINITY)-(r??Number.POSITIVE_INFINITY):(Bm(e)??"").localeCompare(Bm(t)??"")})}function BT(n){const e=zT(n);for(const t of n.frames)e.applyFrame(t);return n}function zT(n){const e=Lg.map(s=>({eventType:s,events:v3(jl(n).filter(a=>a.meta.stream===s)),index:0})),t=new Map,i={teamZero:io(),teamOne:io()};return{applyFrame(s){for(const a of e)for(;a.index({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function x3(n,e,t,i){n.is_last_backboard=i,n.time_since_last_backboard=n.last_backboard_time==null?null:Math.max(0,t-n.last_backboard_time),n.frames_since_last_backboard=n.last_backboard_frame==null?null:Math.max(0,e-n.last_backboard_frame)}function w3(n,e,t,i){n.count+=1,n.last_backboard_time=e.time,n.last_backboard_frame=e.frame,n.time_since_last_backboard=Math.max(0,i-e.time),n.frames_since_last_backboard=Math.max(0,t-e.frame)}function S3(n,e){Object.assign(n,e??HT())}function Ov(n,e){n.count=e}function T3(n){const e=VT(n);for(const t of n.frames)e.applyFrame(t);return n}function VT(n){const e=b3(ve(n,"backboard"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)x3(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Vm(n){return`${n.key}\0${n.value}`}function Su(n){return n.map(Vm).join("")}function GT(n,e){e.sort((s,a)=>Vm(s).localeCompare(Vm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Su(s.labels)===Su(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Su(s.labels).localeCompare(Su(a.labels))))}function Nv(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="origin"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function $T(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function WT(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Uv(n,e){GT(n,[{key:"kind",value:"carry"}]),n.carry_count=$T(n),n.total_carry_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_carry_time=Math.max(n.longest_carry_time,e.duration),n.furthest_carry_distance=Math.max(n.furthest_carry_distance,e.straight_line_distance),n.fastest_carry_speed=Math.max(n.fastest_carry_speed,e.average_speed),n.carry_speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap}function Bv(n,e){e.air_dribble_origin!=null&>(n,[{key:"origin",value:e.air_dribble_origin}]),n.count=$T(n),n.ground_to_air_count=Nv(n,"ground_to_air"),n.wall_to_air_count=Nv(n,"wall_to_air"),n.total_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_time=Math.max(n.longest_time,e.duration),n.furthest_distance=Math.max(n.furthest_distance,e.straight_line_distance),n.fastest_speed=Math.max(n.fastest_speed,e.average_speed),n.speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap,n.total_touch_count+=e.touch_count,n.max_touch_count=Math.max(n.max_touch_count,e.touch_count)}function Ap(n,e){Object.assign(n,e??Xu()),e?.labeled_event_counts?n.labeled_event_counts=WT(e.labeled_event_counts):delete n.labeled_event_counts}function Rp(n,e){Object.assign(n,e??Ku()),e?.labeled_event_counts?n.labeled_event_counts=WT(e.labeled_event_counts):delete n.labeled_event_counts}function E3(n){const e=XT(n);for(const t of n.frames)e.applyFrame(t);return n}function XT(n){const e=M3(ve(n,"ball_carry"));let t=0;const i=new Map,s=new Map,a=Xu(),r=Xu(),o=Ku(),l=Ku();return{applyFrame(c){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function A3(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1),n.last_bump_time=e.time,n.last_bump_frame=e.frame,n.last_bump_strength=e.strength,n.max_bump_strength=Math.max(n.max_bump_strength,e.strength),n.cumulative_bump_strength+=e.strength}function R3(n,e){n.bumps_taken+=1,e.is_team_bump&&(n.team_bumps_taken+=1)}function P3(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1)}function I3(n,e){Object.assign(n,e??Gm())}function Hv(n,e){Object.assign(n,e)}function L3(n){const e=KT(n);for(const t of n.frames)e.applyFrame(t);return n}function KT(n){const e=C3(ve(n,"bump"));let t=0;const i=new Map,s=zv(),a=zv();return{applyFrame(r){for(;t=t&&n0&&(s.overfill_total=sn(s.overfill_total,i),e.field_half==="opponent"&&(s.overfill_from_stolen=sn(s.overfill_from_stolen,i)))}function $v(n,e){e.boost_granted!=null&&(n.stats.amount_respawned=sn(n.stats.amount_respawned,rn(e.boost_granted)))}class U3{constructor(e){this.points=e}index=0;sample(e){for(;this.index+1e?0:rn(t.value)}}function Km(n,e){return`${n}:${e}`}function B3(n){const e=new Map,t=n.accumulation_tracks;for(const i of t??[]){const s=pl(i.player_id);e.set(Km(s,i.quantity),new U3(i.points))}return e}function z3(n){return[...ve(n,"boost_pickup")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function H3(n){return[...ve(n,"respawn")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function Lp(n,e){for(const t of qT)n[t]=e[t]}function YT(n){const e=z3(n),t=H3(n),i=B3(n);let s=0,a=0;const r=new Map,o=Ip(),l=Ip(),c=(d,h)=>{const f=pl(d);let p=r.get(f);return p||(p=Ip(),r.set(f,p)),p.isTeamZero=h,p},u=(d,h,f)=>{const p=g=>i.get(Km(h,g))?.sample(f)??0;d.amount_used=p("boost_used"),d.amount_used_while_grounded=p("boost_used_grounded"),d.amount_used_while_airborne=p("boost_used_airborne"),d.amount_used_while_supersonic=p("boost_used_supersonic")};return{applyFrame(d,h){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function qm(n){return`${n.key}\0${n.value}`}function Mu(n){return n.map(qm).join("")}function K3(n,e){e.sort((s,a)=>qm(s).localeCompare(qm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Mu(s.labels)===Mu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Mu(s.labels).localeCompare(Mu(a.labels))))}function q3(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function Y3(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function j3(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Z3(n,e,t,i){n.is_last_ceiling_shot=i,n.time_since_last_ceiling_shot=n.last_ceiling_shot_time==null?null:Math.max(0,jT(t,n.last_ceiling_shot_time)),n.frames_since_last_ceiling_shot=n.last_ceiling_shot_frame==null?null:Math.max(0,e-n.last_ceiling_shot_frame)}function J3(n,e,t,i){K3(n,[{key:"confidence_band",value:e.confidence>=$3?"high":"standard"}]),n.count=Y3(n),n.high_confidence_count=q3(n,"high"),n.is_last_ceiling_shot=!0,n.last_ceiling_shot_time=e.time,n.last_ceiling_shot_frame=e.frame,n.time_since_last_ceiling_shot=Math.max(0,jT(i,e.time)),n.frames_since_last_ceiling_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=W3(n.cumulative_confidence,e.confidence)}function Q3(n,e){Object.assign(n,e??ZT()),e?.labeled_event_counts?n.labeled_event_counts=j3(e.labeled_event_counts):delete n.labeled_event_counts}function eU(n){const e=JT(n);for(const t of n.frames)e.applyFrame(t);return n}function JT(n){const e=X3(ve(n,"ceiling_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)Z3(o,a.frame_number,a.time,i===r);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function sU(n,e){Object.assign(n,e??Dg())}function Kv(n,e){Object.assign(n,e)}function qv(n,e){n.score+=e.score_delta,n.goals+=e.goals_delta,n.assists+=e.assists_delta,n.saves+=e.saves_delta,n.shots+=e.shots_delta}function QT(n,e){if(e.time_after_kickoff!=null){const t=Math.max(0,e.time_after_kickoff);t<10?n.kickoff_goal_count+=1:t<20?n.short_goal_count+=1:t<40?n.medium_goal_count+=1:n.long_goal_count+=1}if(e.goal_buildup==="counter_attack"?n.counter_attack_goal_count+=1:e.goal_buildup==="sustained_pressure"?n.sustained_pressure_goal_count+=1:e.goal_buildup!=null&&(n.other_buildup_goal_count+=1),e.ball_air_time_before_goal!=null){const t=Math.max(0,e.ball_air_time_before_goal);n.goal_ball_air_time_sample_count+=1,n.cumulative_goal_ball_air_time=ns(n.cumulative_goal_ball_air_time,t),n.last_goal_ball_air_time=t}}function Dp(n,e){return n!=null&&e!=null&&ql(n)===ql(e)}function Yv(n,e){return n?e.y:-e.y}function aU(n,e){if(n.ball_position==null||e.position==null)return!1;const t=!n.scoring_team_is_team_0,i=Yv(t,n.ball_position);if(i>tU)return!1;const s=Yv(t,e.position);return s=iU}function rU(n,e,t){const i=t.is_team_0===e.scoring_team_is_team_0,s=Dp(t.player,e.defending_team_most_back_player),a=Dp(t.player,e.scoring_team_most_back_player);s&&(n.goals_conceded_while_last_defender+=1),a&&(n.goals_for_while_most_back+=1),s&&(n.goals_against_while_most_back+=1),!i&&aU(e,t)&&(n.caught_ahead_of_play_on_conceded_goals+=1),!i&&t.boost_amount!=null&&(n.goal_against_boost_sample_count+=1,n.cumulative_boost_on_goals_against=ns(n.cumulative_boost_on_goals_against,t.boost_amount),n.last_boost_on_goal_against=t.boost_amount),!i&&t.average_boost_in_leadup!=null&&t.min_boost_in_leadup!=null&&(n.goal_against_boost_leadup_sample_count+=1,n.cumulative_average_boost_in_goal_against_leadup=ns(n.cumulative_average_boost_in_goal_against_leadup,t.average_boost_in_leadup),n.cumulative_min_boost_in_goal_against_leadup=ns(n.cumulative_min_boost_in_goal_against_leadup,t.min_boost_in_leadup),n.last_average_boost_in_goal_against_leadup=t.average_boost_in_leadup,n.last_min_boost_in_goal_against_leadup=t.min_boost_in_leadup),!i&&t.position!=null&&(n.goal_against_position_sample_count+=1,n.cumulative_goal_against_position_x=ns(n.cumulative_goal_against_position_x,t.position.x),n.cumulative_goal_against_position_y=ns(n.cumulative_goal_against_position_y,t.position.y),n.cumulative_goal_against_position_z=ns(n.cumulative_goal_against_position_z,t.position.z),n.last_goal_against_position={...t.position});const r=Dp(t.player,e.scorer),o=r?e.scorer_last_touch?.ball_position:null;o!=null&&(n.scoring_goal_last_touch_position_sample_count+=1,n.cumulative_scoring_goal_last_touch_position_x=ns(n.cumulative_scoring_goal_last_touch_position_x,o.x),n.cumulative_scoring_goal_last_touch_position_y=ns(n.cumulative_scoring_goal_last_touch_position_y,o.y),n.cumulative_scoring_goal_last_touch_position_z=ns(n.cumulative_scoring_goal_last_touch_position_z,o.z),n.last_scoring_goal_last_touch_position={...o}),r&&QT(n,e)}function oU(n,e,t,i){QT(i.scoring_team_is_team_0?e:t,i);for(const s of i.players){const a=ql(s.player),r=n.get(a)??Dg();n.set(a,r),rU(r,i,s)}}function lU(n){const e=eM(n);for(const t of n.frames)e.applyFrame(t);return n}function eM(n){const e=Xv(ve(n,"core_player")),t=Xv(ve(n,"goal_context"));let i=0,s=0;const a=new Map,r=Ym(),o=Ym();return{applyFrame(l){for(;i({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Jv(n,e){n.count+=1,n.total_time=jv(n.total_time,e.duration),n.longest_time=Math.max(n.longest_time,e.duration),n.touch_count+=e.touch_count,n.total_advance_distance=jv(n.total_advance_distance,e.total_advance_distance)}function Op(n,e){Object.assign(n,e??qu())}function uU(n){const e=tM(n);for(const t of n.frames)e.applyFrame(t);return n}function tM(n){const e=cU(ve(n,"controlled_play"));let t=0;const i=new Map,s=qu(),a=qu();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function hU(n,e){n.count+=1,e.on_ball&&(n.on_ball_count+=1)}function fU(n,e){Object.assign(n,e??nM())}function pU(n){const e=iM(n);for(const t of n.frames)e.applyFrame(t);return n}function iM(n){const e=dU(ve(n,"dodge_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function _U(n,e,t,i){n.is_last_double_tap=i,n.time_since_last_double_tap=n.last_double_tap_time==null?null:Math.max(0,t-n.last_double_tap_time),n.frames_since_last_double_tap=n.last_double_tap_frame==null?null:Math.max(0,e-n.last_double_tap_frame)}function gU(n,e,t,i){n.count+=1,n.last_double_tap_time=e.time,n.last_double_tap_frame=e.frame,n.time_since_last_double_tap=Math.max(0,i-e.time),n.frames_since_last_double_tap=Math.max(0,t-e.frame)}function yU(n,e){Object.assign(n,e??sM())}function tb(n,e){n.count=e}function vU(n){const e=aM(n);for(const t of n.frames)e.applyFrame(t);return n}function aM(n){const e=mU(ve(n,"double_tap"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)_U(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function xU(n,e){Object.assign(n,e??rM())}function sb(n,e){Object.assign(n,e)}function wU(n){const e=oM(n);for(const t of n.frames)e.applyFrame(t);return n}function oM(n){const e=bU(ve(n,"demolition"));let t=0;const i=new Map,s=ib(),a=ib();function r(o){const l=nb(o),c=i.get(l)??rM();return i.set(l,c),c}return{applyFrame(o){for(;t({event:e,index:t})).sort((e,t)=>e.event.resolve_frame!==t.event.resolve_frame?e.event.resolve_frame-t.event.resolve_frame:e.event.resolve_time!==t.event.resolve_time?e.event.resolve_time-t.event.resolve_time:e.index-t.index).map(({event:e})=>e)}function TU(n){return{key:"phase",value:n?"kickoff":"open_play"}}function MU(n,e){return e==null?{key:"outcome",value:"neutral"}:{key:"outcome",value:e===n?"win":"loss"}}function EU(n,e){return e==null?{key:"possession_after",value:"neutral"}:{key:"possession_after",value:e===n?"self":"opponent"}}function CU(n,e){return{key:"dodge_state",value:(n?e.team_zero_dodge_contact:e.team_one_dodge_contact)?"dodge":"no_dodge"}}function Zm(n){return`${n.key}\0${n.value}`}function Eu(n){return n.map(Zm).join("")}function AU(n,e){e.sort((s,a)=>Zm(s).localeCompare(Zm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Eu(s.labels)===Eu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Eu(s.labels).localeCompare(Eu(a.labels))))}function RU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function rb(n,e,t){n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0==null?n.neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.possession_after_count+=1:n.opponent_possession_after_count+=1,t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0==null?n.kickoff_neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.kickoff_possession_after_count+=1:n.kickoff_opponent_possession_after_count+=1)}function ob(n,e,t){AU(n,[TU(t.is_kickoff),MU(e,t.winning_team_is_team_0),EU(e,t.possession_team_is_team_0),CU(e,t)]),n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0===e&&(n.possession_after_count+=1),t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0===e&&(n.kickoff_possession_after_count+=1))}function PU(n,e){Object.assign(n,e??jm()),e?.labeled_event_counts?n.labeled_event_counts=RU(e.labeled_event_counts):delete n.labeled_event_counts}function lb(n,e){Object.assign(n,e)}function IU(n){const e=lM(n);for(const t of n.frames)e.applyFrame(t);return n}function lM(n){const e=SU(ve(n,"fifty_fifty"));let t=0;const i=ab(),s=ab(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Jm(n){return`${n.key}\0${n.value}`}function Cu(n){return n.map(Jm).join("")}function dM(n,e){e.sort((s,a)=>Jm(s).localeCompare(Jm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Cu(s.labels)===Cu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Cu(s.labels).localeCompare(Cu(a.labels))))}function DU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function kU(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"taker_outcome",value:n.outcome},{key:"kickoff_approach",value:n.approach},{key:"approach_flip_direction",value:n.approach_flip_direction}]}function OU(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"support_behavior",value:n.support_behavior}]}function ub(n,e,t){n.count+=1,t.outcome==="neutral"?n.neutral_outcomes+=1:t.outcome===(e?"team_zero_win":"team_one_win")?n.wins+=1:t.outcome===(e?"team_one_win":"team_zero_win")&&(n.losses+=1),t.kickoff_possession_outcome==="contested"?n.contested_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_possession":"team_one_possession")?n.kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_one_possession":"team_zero_possession")?n.opponent_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_advantage":"team_one_advantage")?n.kickoff_possession_advantages+=1:n.opponent_kickoff_possession_advantages+=1,t.kickoff_goal&&(n.kickoff_goal_count+=1,t.scoring_team_is_team_0===e?n.kickoff_goals_for+=1:t.scoring_team_is_team_0!=null&&(n.kickoff_goals_against+=1)),t.win_strength!=null&&(n.win_strength_sample_count+=1,n.cumulative_win_strength+=t.win_strength)}function db(n,e,t){t&&(t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after,e.boost_after_sample_count+=1,e.cumulative_boost_after+=t.boost_after),t.outcome==="fake"?(n.fake_count+=1,e.fake_count+=1):t.outcome==="missed"&&(n.missed_count+=1,e.missed_count+=1))}function FU(n,e,t){n.count+=1,dM(n,kU(t)),t.outcome==="touched"?n.touches+=1:t.outcome==="fake"?n.fakes+=1:t.outcome==="missed"&&(n.misses+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function NU(n,e,t){n.count+=1,dM(n,OU(t)),t.first_touch_time!=null&&(n.touches+=1),t.support_behavior==="go_for_boost"?n.support_go_for_boosts+=1:t.support_behavior==="cheat"?n.support_cheats+=1:t.support_behavior==="other"&&(n.support_other+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function Au(n,e,t){const i=cM(t.player),s=n.get(i)??uM();n.set(i,s),"outcome"in t?FU(s,e,t):NU(s,e,t)}function hb(n,e){Object.assign(n,e)}function UU(n,e){Object.assign(n,e??uM()),e?.labeled_event_counts?n.labeled_event_counts=DU(e.labeled_event_counts):delete n.labeled_event_counts}function BU(n){const e=hM(n);for(const t of n.frames)e.applyFrame(t);return n}function hM(n){const e=LU(ve(n,"kickoff"));let t=0;const i=cb(),s=cb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function Qm(n){return`${n.key}\0${n.value}`}function Ru(n){return n.map(Qm).join("")}function VU(n,e){e.sort((s,a)=>Qm(s).localeCompare(Qm(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Ru(s.labels)===Ru(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Ru(s.labels).localeCompare(Ru(a.labels))))}function GU(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function $U(n){return n==="forward"||n==="reverse"||n==="side"?n:"other"}function WU(n){return n==="left"||n==="right"?n:"center"}function XU(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function KU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function qU(n,e,t,i){n.is_last_flick=i,n.time_since_last_flick=n.last_flick_time==null?null:Math.max(0,fM(t,n.last_flick_time)),n.frames_since_last_flick=n.last_flick_frame==null?null:Math.max(0,e-n.last_flick_frame)}function YU(n,e,t,i){VU(n,[{key:"confidence_band",value:e.confidence>=zU?"high":"standard"},{key:"kind",value:$U(e.kind)},{key:"direction",value:WU(e.direction)}]),n.count=XU(n),n.high_confidence_count=GU(n,"high"),n.is_last_flick=!0,n.last_flick_time=e.time,n.last_flick_frame=e.frame,n.time_since_last_flick=Math.max(0,fM(i,e.time)),n.frames_since_last_flick=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Np(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=Np(n.cumulative_setup_duration,e.setup_duration),n.cumulative_ball_speed_change=Np(n.cumulative_ball_speed_change,e.ball_speed_change)}function jU(n,e){Object.assign(n,e??pM()),e?.labeled_event_counts?n.labeled_event_counts=KU(e.labeled_event_counts):delete n.labeled_event_counts}function ZU(n){const e=mM(n);for(const t of n.frames)e.applyFrame(t);return n}function mM(n){const e=HU(ve(n,"flick"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)qU(o,a.frame_number,a.time,r===i);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function QU(n,e){n.count+=1,n.total_time_to_use+=e.time_since_reset,n.min_time_to_use=n.min_time_to_use===null?e.time_since_reset:Math.min(n.min_time_to_use,e.time_since_reset)}function eB(n,e){Object.assign(n,e??_M())}function tB(n){const e=gM(n);for(const t of n.frames)e.applyFrame(t);return n}function gM(n){const e=JU(ve(n,"flip_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function iB(n,e,t,i){n.is_last_half_volley=i,n.time_since_last_half_volley=n.last_half_volley_time==null?null:Math.max(0,vM(t,n.last_half_volley_time)),n.frames_since_last_half_volley=n.last_half_volley_frame==null?null:Math.max(0,e-n.last_half_volley_frame)}function sB(n,e,t,i){n.count+=1,n.total_ball_speed=yM(n.total_ball_speed,e.ball_speed),n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.last_half_volley_time=e.time,n.last_half_volley_frame=e.frame,n.time_since_last_half_volley=Math.max(0,vM(i,e.time)),n.frames_since_last_half_volley=Math.max(0,t-e.frame)}function aB(n,e){Object.assign(n,e??bM())}function _b(n,e){Object.assign(n,e)}function rB(n){const e=xM(n);for(const t of n.frames)e.applyFrame(t);return n}function xM(n){const e=nB(ve(n,"half_volley"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)iB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;te.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:Gi(e.player).localeCompare(Gi(t.player)))}function uB(n){return[...n].sort((e,t)=>e.resolved_frame!==t.resolved_frame?e.resolved_frame-t.resolved_frame:e.resolved_time!==t.resolved_time?e.resolved_time-t.resolved_time:e.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:Gi(e.player).localeCompare(Gi(t.player)))}function Up(){return{count:0,highConfidenceCount:0,lastTime:null,lastFrame:null,lastResolvedTime:null,lastResolvedFrame:null,lastQuality:null,bestQuality:0,cumulativeQuality:0,labeledCounts:{entries:[]}}}function oo(n){return Math.fround(n)}function dB(n,e){return oo(oo(n)+oo(e))}function hB(n,e){return{key:"confidence_band",value:n>=e?"high":"standard"}}function fB(n,e){const t=e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key)),i=n.entries.find(s=>s.labels.length===t.length&&s.labels.every((a,r)=>a.key===t[r]?.key&&a.value===t[r]?.value));if(i){i.count+=1;return}n.entries.push({labels:t,count:1}),n.entries.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels)))}function Oo(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Bp(n,e,t,i,s){n.count+=1,e.confidence>=s&&(n.highConfidenceCount+=1),fB(n.labeledCounts,[hB(e.confidence,s)]),n.lastTime=e.time,n.lastFrame=e.frame,n.lastResolvedTime=i,n.lastResolvedFrame=t,n.lastQuality=e.confidence,n.bestQuality=Math.max(n.bestQuality,e.confidence),n.cumulativeQuality=dB(n.cumulativeQuality,e.confidence)}function kg(n,e){return n?.lastTime==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,oo(oo(e.time)-oo(n.lastTime)))}function Og(n,e){return n?.lastFrame==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,e.frame_number-n.lastFrame)}function wM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_speed_flip=i,n.last_speed_flip_time=e?.lastTime??null,n.last_speed_flip_frame=e?.lastFrame??null,n.time_since_last_speed_flip=kg(e,t),n.frames_since_last_speed_flip=Og(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Oo(e.labeledCounts):delete n.labeled_event_counts}function SM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_half_flip=i,n.last_half_flip_time=e?.lastTime??null,n.last_half_flip_frame=e?.lastFrame??null,n.time_since_last_half_flip=kg(e,t),n.frames_since_last_half_flip=Og(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Oo(e.labeledCounts):delete n.labeled_event_counts}function TM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_wavedash=i,n.last_wavedash_time=e?.lastTime??null,n.last_wavedash_frame=e?.lastFrame??null,n.time_since_last_wavedash=kg(e,t),n.frames_since_last_wavedash=Og(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Oo(e.labeledCounts):delete n.labeled_event_counts}function pB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Oo(n.labeled_event_counts):delete e.labeled_event_counts,e}function mB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Oo(n.labeled_event_counts):delete e.labeled_event_counts,e}function _B(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Oo(n.labeled_event_counts):delete e.labeled_event_counts,e}function gB(n,e){if(e){Object.assign(n,e);return}wM(n,void 0,{frame_number:0,time:0},!1)}function yB(n,e){if(e){Object.assign(n,e);return}SM(n,void 0,{frame_number:0,time:0},!1)}function vB(n,e){if(e){Object.assign(n,e);return}TM(n,void 0,{frame_number:0,time:0},!1)}function bB(n){return n.is_live_play||n.ball_has_been_hit===!1}function xB(n){const e=MM(n);for(const t of n.frames)e.applyFrame(t);return n}function MM(n){const e=uB(ve(n,"speed_flip")),t=gb(ve(n,"half_flip")),i=gb(ve(n,"wavedash"));let s=0,a=0,r=0,o=null,l=null,c=null;const u=new Map,d=new Map,h=new Map,f=new Map,p=new Map,g=new Map;return{applyFrame(_){if(bB(_)){for(;swB.map(e=>({labels:[{key:"height_band",value:n},{key:"speed_band",value:e}],value:0}))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function Yu(n=!1){return{tracked_time:0,total_distance:0,speed_integral:0,time_slow_speed:0,time_boost_speed:0,time_supersonic_speed:0,time_on_ground:0,time_low_air:0,time_high_air:0,labeled_tracked_time:n?MB():{entries:[]}}}function EB(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function CB(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function AB(n,e,t){const i=CB(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=is(s.value,t):(n.entries.push({labels:i,value:ra(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function RB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),value:e.value}))}}function vb(n,e){const t=ra(e.dt);n.tracked_time=is(n.tracked_time,t),n.total_distance=is(n.total_distance,e.distance),n.speed_integral=is(n.speed_integral,TB(e.speed,t)),e.speed_band==="slow"?n.time_slow_speed=is(n.time_slow_speed,t):e.speed_band==="boost"?n.time_boost_speed=is(n.time_boost_speed,t):e.speed_band==="supersonic"&&(n.time_supersonic_speed=is(n.time_supersonic_speed,t)),e.height_band==="ground"?n.time_on_ground=is(n.time_on_ground,t):e.height_band==="low_air"?n.time_low_air=is(n.time_low_air,t):e.height_band==="high_air"&&(n.time_high_air=is(n.time_high_air,t));const i=n.labeled_tracked_time??{entries:[]};n.labeled_tracked_time=i,AB(i,[{key:"speed_band",value:e.speed_band},{key:"height_band",value:e.height_band}],t)}function zp(n,e){const t=e??Yu(!0),i=t.labeled_tracked_time;Object.assign(n,t,{labeled_tracked_time:i?RB(i):void 0}),i?.entries.length||delete n.labeled_tracked_time}function PB(n){const e=EM(n);for(const t of n.frames)e.applyFrame(t);return n}function EM(n){const e=EB(ve(n,"movement"));let t=0;const i=new Map,s=Yu(),a=Yu();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function LB(n,e,t,i){n.is_last_one_timer=i,n.time_since_last_one_timer=n.last_one_timer_time==null?null:Math.max(0,t-n.last_one_timer_time),n.frames_since_last_one_timer=n.last_one_timer_frame==null?null:Math.max(0,e-n.last_one_timer_frame)}function DB(n,e,t,i){n.count+=1,n.total_ball_speed+=e.ball_speed,n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.total_pass_distance+=e.pass_travel_distance,n.last_one_timer_time=e.time,n.last_one_timer_frame=e.frame,n.time_since_last_one_timer=Math.max(0,i-e.time),n.frames_since_last_one_timer=Math.max(0,t-e.frame)}function kB(n,e){Object.assign(n,e??CM())}function xb(n,e){Object.assign(n,e)}function OB(n){const e=AM(n);for(const t of n.frames)e.applyFrame(t);return n}function AM(n){const e=IB(ve(n,"one_timer"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)LB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.index-t.index}).map(({event:e})=>e)}function NB(n,e,t,i){n.is_last_completed_pass=i,n.time_since_last_completed_pass=n.last_completed_pass_time==null?null:Math.max(0,t-n.last_completed_pass_time),n.frames_since_last_completed_pass=n.last_completed_pass_frame==null?null:Math.max(0,e-n.last_completed_pass_frame)}function UB(n,e,t,i){n.completed_pass_count+=1,n.total_pass_distance+=e.ball_travel_distance,n.total_pass_advance+=e.ball_advance_distance,n.longest_pass_distance=Math.max(n.longest_pass_distance,e.ball_travel_distance),n.last_completed_pass_time=e.time,n.last_completed_pass_frame=e.frame,n.time_since_last_completed_pass=Math.max(0,i-e.time),n.frames_since_last_completed_pass=Math.max(0,t-e.frame)}function BB(n,e){Object.assign(n,e??e_())}function wb(n,e){Object.assign(n,e)}function zB(n){const e=RM(n);for(const t of n.frames)e.applyFrame(t);return n}function RM(n){const e=FB(ve(n,"pass"));let t=0,i=null;const s=new Map,a={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0},r={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0};return{applyFrame(o){for(const[l,c]of s)NB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function GB(n){return t_(n)}function $B(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function PM(n,e,t){const i=$B(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=ml(s.value,t):(n.entries.push({labels:i,value:Ll(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function WB(n,e){return n.key==="possession_state"&&n.value==="team_zero"?{key:"possession_state",value:e?"own":"opponent"}:n.key==="possession_state"&&n.value==="team_one"?{key:"possession_state",value:e?"opponent":"own"}:n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Sb(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)PM(t,i.labels.map(s=>WB(s,e)),i.value);return{tracked_time:n.tracked_time,possession_time:e?n.team_zero_time:n.team_one_time,opponent_possession_time:e?n.team_one_time:n.team_zero_time,neutral_time:n.neutral_time,labeled_time:t}}function XB(n,e){n.active=e.active,n.possessionState=e.possession_state}function KB(n,e,t){if(!e.active)return;const i=Ll(t.dt);n.tracked_time=ml(n.tracked_time,i),e.possessionState==="team_zero"?n.team_zero_time=ml(n.team_zero_time,i):e.possessionState==="team_one"?n.team_one_time=ml(n.team_one_time,i):n.neutral_time=ml(n.neutral_time,i);const s=[{key:"possession_state",value:e.possessionState}];e.fieldThird!=null&&s.push({key:"field_third",value:e.fieldThird}),e.fieldHalf!=null&&s.push({key:"field_half",value:e.fieldHalf}),PM(n.labeled_time,s,i)}function Tb(n,e){Object.assign(n,e??VB())}function qB(n){const e=IM(n);for(const t of n.frames)e.applyFrame(t);return n}function IM(n){const e=GB(ve(n,"possession")),t=t_(ve(n,"ball_third")),i=t_(ve(n,"ball_half"));let s=0,a=0,r=0;const o=HB(),l={active:!1,possessionState:"neutral",fieldThird:null,fieldHalf:null};return{applyFrame(c){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function ka(n,e){const t=eh(e.player),i=n.get(t)??LM();return n.set(t,i),i}function jB(n,e){switch(n.active_game_time=Xt(n.active_game_time,e.duration),e.state){case"tracked":n.tracked_time=Xt(n.tracked_time,e.duration);break;case"demolished":n.time_demolished=Xt(n.time_demolished,e.duration);break}}function ZB(n,e){switch(e.state){case"defensive":n.time_defensive_third=Xt(n.time_defensive_third,e.duration);break;case"neutral":n.time_neutral_third=Xt(n.time_neutral_third,e.duration);break;case"offensive":n.time_offensive_third=Xt(n.time_offensive_third,e.duration);break}}function JB(n,e){switch(e.state){case"defensive":n.time_defensive_half=Xt(n.time_defensive_half,e.duration);break;case"offensive":n.time_offensive_half=Xt(n.time_offensive_half,e.duration);break}}function QB(n,e){switch(e.state){case"behind_ball":n.time_behind_ball=Xt(n.time_behind_ball,e.duration);break;case"level_with_ball":n.time_level_with_ball=Xt(n.time_level_with_ball,e.duration);break;case"ahead_of_ball":n.time_in_front_of_ball=Xt(n.time_in_front_of_ball,e.duration);break}}function ez(n,e){switch(e.state){case"no_teammates":n.time_no_teammates=Xt(n.time_no_teammates,e.duration);break;case"most_back":n.time_most_back=Xt(n.time_most_back,e.duration);break;case"most_forward":n.time_most_forward=Xt(n.time_most_forward,e.duration);break;case"mid":n.time_mid_role=Xt(n.time_mid_role,e.duration);break;case"other":n.time_other_role=Xt(n.time_other_role,e.duration);break}}function tz(n,e,t){t.state.closest_to_ball_team&&(e.tracked_time=Xt(e.tracked_time,t.duration),e.time_closest_to_ball_team=Xt(e.time_closest_to_ball_team,t.duration),n.time_closest_to_ball_team=Xt(n.time_closest_to_ball_team,t.duration)),t.state.closest_to_ball_absolute&&(e.time_closest_to_ball_absolute=Xt(e.time_closest_to_ball_absolute,t.duration),n.time_closest_to_ball_absolute=Xt(n.time_closest_to_ball_absolute,t.duration)),t.state.farthest_from_ball&&(n.time_farthest_from_ball=Xt(n.time_farthest_from_ball,t.duration))}function nz(n,e){e.state==="shadowing"&&(n.time_shadow_defense=Xt(n.time_shadow_defense,e.duration))}function iz(n,e){Object.assign(n,e??LM())}function Mb(n,e){Object.assign(n,e??n_())}function Oa(n,e){const t=YB(n),i=new Array(t.length).fill(0);return{applyThroughFrame(s){for(let a=0;as.frame_number)break;const o=sz(r,s),l=o-i[a];l>0&&(i[a]=o,e({...r,duration:l}))}}}}function sz(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function az(n){const e=DM(n);for(const t of n.frames)e.applyFrame(t);return n}function DM(n){const e=new Map,t=n_(),i=n_(),s=[Oa(ve(n,"player_activity"),a=>jB(ka(e,a),a)),Oa(ve(n,"field_third"),a=>ZB(ka(e,a),a)),Oa(ve(n,"field_half"),a=>JB(ka(e,a),a)),Oa(ve(n,"ball_depth"),a=>QB(ka(e,a),a)),Oa(ve(n,"depth_role"),a=>ez(ka(e,a),a)),Oa(ve(n,"ball_proximity"),a=>tz(ka(e,a),a.is_team_0?t:i,a)),Oa(ve(n,"shadow_defense"),a=>nz(ka(e,a),a))];return{applyFrame(a){for(const r of s)r.applyThroughFrame(a);Mb(a.team_zero.positioning,t),Mb(a.team_one.positioning,i);for(const r of a.players)iz(r.positioning,e.get(eh(r.player_id))),rz(r.positioning,n,r.player_id)}}}function rz(n,e,t){const i=e.positioning_summary;if(!Array.isArray(i))return;const s=eh(t),a=i.find(r=>!r||typeof r!="object"?!1:eh(r.player_id)===s);a?.distance&&Object.assign(n,a.distance)}function Vp(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function _l(){return{total_duration:0,press_count:0}}function oz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function lz(n){return n.gameplay_phase==="active_play"||n.gameplay_phase==="kickoff_waiting_for_touch"}function Gp(n,e){Object.assign(n,e??_l())}function cz(n){const e=kM(n);for(const t of n.frames)e.applyFrame(t);return n}function kM(n){const e=oz(ve(n,"powerslide"));let t=0;const i=new Map,s=new Map,a=_l(),r=_l();return{applyFrame(o){const l=lz(o);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function fz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function OM(n,e,t){const i=fz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=gl(s.value,t):(n.entries.push({labels:i,value:Dl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function pz(n,e){return n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Eb(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)OM(t,i.labels.map(s=>pz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_half_time:e?n.team_zero_side_time:n.team_one_side_time,offensive_half_time:e?n.team_one_side_time:n.team_zero_side_time,neutral_time:n.neutral_time,labeled_time:t}}function mz(n,e){n.active=e.active,n.fieldHalf=e.field_half}function _z(n,e,t){if(!e.active)return;const i=Dl(t.dt);n.tracked_time=gl(n.tracked_time,i),e.fieldHalf==="team_zero_side"?n.team_zero_side_time=gl(n.team_zero_side_time,i):e.fieldHalf==="team_one_side"?n.team_one_side_time=gl(n.team_one_side_time,i):n.neutral_time=gl(n.neutral_time,i),OM(n.labeled_time,[{key:"field_half",value:e.fieldHalf}],i)}function Cb(n,e){Object.assign(n,e??dz())}function gz(n){const e=FM(n);for(const t of n.frames)e.applyFrame(t);return n}function FM(n){const e=hz(ve(n,"ball_half"));let t=0;const i=uz(),s={active:!1,fieldHalf:"neutral"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function xz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function NM(n,e,t){const i=xz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=yl(s.value,t):(n.entries.push({labels:i,value:kl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function wz(n,e){return n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:{...n}}function Ab(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)NM(t,i.labels.map(s=>wz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_third_time:e?n.team_zero_third_time:n.team_one_third_time,neutral_third_time:n.neutral_third_time,offensive_third_time:e?n.team_one_third_time:n.team_zero_third_time,labeled_time:t}}function Sz(n,e){n.active=e.active,n.fieldThird=e.field_third}function Tz(n,e,t){if(!e.active)return;const i=kl(t.dt);n.tracked_time=yl(n.tracked_time,i),e.fieldThird==="team_zero_third"?n.team_zero_third_time=yl(n.team_zero_third_time,i):e.fieldThird==="team_one_third"?n.team_one_third_time=yl(n.team_one_third_time,i):n.neutral_third_time=yl(n.neutral_third_time,i),NM(n.labeled_time,[{key:"field_third",value:e.fieldThird}],i)}function Rb(n,e){Object.assign(n,e??vz())}function Mz(n){const e=UM(n);for(const t of n.frames)e.applyFrame(t);return n}function UM(n){const e=bz(ve(n,"ball_third"));let t=0;const i=yz(),s={active:!1,fieldThird:"neutral_third"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Cz(n,e,t){n.session_count+=1,n.session_time=Pu(n.session_time,t.duration),n.offensive_half_time=Pu(n.offensive_half_time,t.offensive_half_time),n.offensive_third_time=Pu(n.offensive_third_time,t.offensive_third_time),n.longest_session_time=Math.max(n.longest_session_time,t.duration),n.average_session_time=n.session_count===0?0:ju(n.session_time/n.session_count),e.opponent_session_count+=1,e.opponent_session_time=Pu(e.opponent_session_time,t.duration),e.opponent_longest_session_time=Math.max(e.opponent_longest_session_time,t.duration)}function Ib(n,e){Object.assign(n,e)}function Az(n){const e=BM(n);for(const t of n.frames)e.applyFrame(t);return n}function BM(n){const e=Ez(ve(n,"territorial_pressure"));let t=0;const i=Pb(),s=Pb();return{applyFrame(a){for(;t=e[t].end_frame;){const r=e[t];Cz(r.team_is_team_0?i:s,r.team_is_team_0?s:i,r),t+=1}Ib(a.team_zero.territorial_pressure,i),Ib(a.team_one.territorial_pressure,s)}}}function Kr(n,e){return Math.fround(Math.fround(n)+Math.fround(e))}function zM(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function HM(){return{active_game_time:0,time_first_man:0,time_second_man:0,time_third_man:0,time_ambiguous_role:0,longest_first_man_stint_time:0,first_man_stint_count:0,became_first_man_count:0,lost_first_man_count:0,current_role_state:"unknown"}}function Lb(){return{first_man_changes_for_team:0,rotation_count:0}}function Db(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Rz(n,e,t,i,s){const a=n.stats;switch(a.active_game_time=Kr(a.active_game_time,t),a.current_role_state=e.state,e.state){case"first_man":{n.lastFirstManEndTime!==null&&e.time-n.lastFirstManEndTime<=s?n.currentFirstManStintTime=Kr(n.currentFirstManStintTime,t):(n.currentFirstManStintTime=t,a.first_man_stint_count+=1),n.lastFirstManEndTime=i,a.longest_first_man_stint_time=Math.max(a.longest_first_man_stint_time,n.currentFirstManStintTime),a.time_first_man=Kr(a.time_first_man,t);break}case"second_man":a.time_second_man=Kr(a.time_second_man,t);break;case"third_man":a.time_third_man=Kr(a.time_third_man,t);break;case"ambiguous":a.time_ambiguous_role=Kr(a.time_ambiguous_role,t);break}}function Pz(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function i_(n,e){const t=zM(e),i=n.get(t)??{currentFirstManStintTime:0,lastFirstManEndTime:null,stats:HM()};return n.set(t,i),i}function Iz(n,e,t){n.first_man_changes_for_team+=1,n.rotation_count+=1,i_(e,t.previous_first_man).stats.lost_first_man_count+=1,i_(e,t.next_first_man).stats.became_first_man_count+=1}function Lz(n,e){Object.assign(n,e??HM())}function kb(n,e){Object.assign(n,e)}function Dz(n){const e=VM(n);for(const t of n.frames)e.applyFrame(t);return n}function VM(n){const e=Db(ve(n,"rotation_role")),t=Db(ve(n,"first_man_change")),i=n.config.rotation_first_man_stint_end_grace_seconds,s=new Array(e.length).fill(0);let a=0;const r=new Map,o=Lb(),l=Lb();return{applyFrame(c){for(let u=0;uc.frame_number)break;const h=Pz(d,c),f=h-s[u];if(f>0){s[u]=h;const p=c.frame_number>=d.end_frame?d.end_time:Math.min(c.time,d.end_time);Rz(i_(r,d.player),d,f,p,i)}}for(;a({event:e,index:t})).sort((e,t)=>e.event.start_frame!==t.event.start_frame?e.event.start_frame-t.event.start_frame:e.event.start_time!==t.event.start_time?e.event.start_time-t.event.start_time:e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.index-t.index).map(({event:e})=>e)}function Oz(n,e){n.count+=1,e.attackers===2&&e.defenders===1?n.two_v_one_count+=1:e.attackers===2&&e.defenders===2?n.two_v_two_count+=1:e.attackers===2&&e.defenders===3?n.two_v_three_count+=1:e.attackers===3&&e.defenders===1?n.three_v_one_count+=1:e.attackers===3&&e.defenders===2?n.three_v_two_count+=1:e.attackers===3&&e.defenders===3&&(n.three_v_three_count+=1)}function Fb(n,e){Object.assign(n,e)}function Fz(n){const e=GM(n);for(const t of n.frames)e.applyFrame(t);return n}function GM(n){const e=kz(ve(n,"rush"));let t=0;const i=Ob(),s=Ob(),a=n.config.rush_min_possession_retained_seconds;return{applyFrame(r){for(;t=e[t].start_frame&&r.time-e[t].start_time>=a;){const o=e[t];Oz(o.is_team_0?i:s,o),t+=1}Fb(r.team_zero.rush,i),Fb(r.team_one.rush,s)}}}const Nz=["control","hard_hit","medium_hit"],Uz=["ground","high_air","low_air"],Bz=["air","ground","wall"],zz=["dodge","no_dodge"];function lo(n){return Math.fround(n)}function Zu(n,e){return lo(lo(n)+lo(e))}function $M(n,e){return lo(lo(n)-lo(e))}function $p(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function Hz(){return{entries:zz.flatMap(n=>Uz.flatMap(e=>Nz.flatMap(t=>Bz.map(i=>({labels:[{key:"dodge_state",value:n},{key:"height_band",value:e},{key:"kind",value:t},{key:"surface",value:i}],count:0}))))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function WM(){return{touch_count:0,control_touch_count:0,medium_hit_count:0,hard_hit_count:0,aerial_touch_count:0,high_aerial_touch_count:0,wall_touch_count:0,first_touch_count:0,is_last_touch:!1,last_touch_time:null,last_touch_frame:null,time_since_last_touch:null,frames_since_last_touch:null,last_ball_speed_change:null,max_ball_speed_change:0,cumulative_ball_speed_change:0,total_ball_travel_distance:0,total_ball_advance_distance:0,total_ball_retreat_distance:0,labeled_touch_counts:Hz()}}const Vz=WM();function Nb(){return{stats:WM(),labeledCountsVersion:0,labeledCountsSnapshot:void 0,labeledCountsSnapshotVersion:-1}}function Gz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function $z(n,e){e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key));const t=n.labeled_touch_counts?.entries??[];n.labeled_touch_counts={entries:t};const i=t.find(s=>s.labels.length===e.length&&s.labels.every((a,r)=>a.key===e[r]?.key&&a.value===e[r]?.value));i?i.count+=1:(t.push({labels:e,count:1}),t.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels))))}function Wz(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Iu(n,e){return n.tags?.find(t=>t.group===e)?.value??null}function Xz(n,e,t){const i=Iu(e,"kind")??"control",s=Iu(e,"height_band")??"ground",a=Iu(e,"surface")??"ground",r=Iu(e,"dodge_state")??"no_dodge",o=n.stats;o.touch_count+=1,i==="control"?o.control_touch_count+=1:i==="medium_hit"?o.medium_hit_count+=1:i==="hard_hit"&&(o.hard_hit_count+=1),s==="low_air"?o.aerial_touch_count+=1:s==="high_air"&&(o.aerial_touch_count+=1,o.high_aerial_touch_count+=1),a==="wall"&&(o.wall_touch_count+=1),$z(o,[{key:"kind",value:i},{key:"height_band",value:s},{key:"surface",value:a},{key:"dodge_state",value:r}]),n.labeledCountsVersion+=1,o.last_touch_time=e.time,o.last_touch_frame=e.frame,o.time_since_last_touch=Math.max(0,$M(t.time,e.time)),o.frames_since_last_touch=Math.max(0,t.frame_number-e.frame),o.last_ball_speed_change=e.ball_speed_change,o.max_ball_speed_change=Math.max(o.max_ball_speed_change,e.ball_speed_change),o.cumulative_ball_speed_change=Zu(o.cumulative_ball_speed_change,e.ball_speed_change)}function Kz(n){return n.labeledCountsSnapshotVersion!==n.labeledCountsVersion&&(n.labeledCountsSnapshot=n.stats.labeled_touch_counts?Wz(n.stats.labeled_touch_counts):void 0,n.labeledCountsSnapshotVersion=n.labeledCountsVersion),n.labeledCountsSnapshot}function qz(n,e){if(!e){Object.assign(n,Vz);return}Object.assign(n,e.stats,{labeled_touch_counts:Kz(e)})}function Yz(n){const e=XM(n);for(const t of n.frames)e.applyFrame(t);return n}function XM(n){const e=Gz(ve(n,"touch")),t=e.flatMap(o=>o.ball_movement?[{player:o.player,movement:o.ball_movement}]:[]).sort((o,l)=>o.movement.end_frame!==l.movement.end_frame?o.movement.end_frame-l.movement.end_frame:o.movement.end_time-l.movement.end_time);let i=0,s=0,a=null;const r=new Map;return{applyFrame(o){if(!o.is_live_play)a=null;else{for(const l of r.values()){const c=l.stats;c.is_last_touch=!1,c.last_touch_time!=null&&(c.time_since_last_touch=Math.max(0,$M(o.time,c.last_touch_time))),c.last_touch_frame!=null&&(c.frames_since_last_touch=Math.max(0,o.frame_number-c.last_touch_frame))}for(;i({event:e,index:t})).sort((e,t)=>e.event.resolved_frame!==t.event.resolved_frame?e.event.resolved_frame-t.event.resolved_frame:e.event.resolved_time!==t.event.resolved_time?e.event.resolved_time-t.event.resolved_time:e.index-t.index).map(({event:e})=>e)}function Jz(n,e,t){n.is_last_whiff=!1,n.time_since_last_whiff=n.last_whiff_time==null?null:Math.max(0,t-n.last_whiff_time),n.frames_since_last_whiff=n.last_whiff_frame==null?null:Math.max(0,e-n.last_whiff_frame)}function Qz(n,e,t,i){if((e.kind??"whiff")==="beaten_to_ball"){n.beaten_to_ball_count+=1;return}n.whiff_count+=1,e.aerial?n.aerial_whiff_count+=1:n.grounded_whiff_count+=1,e.dodge_active&&(n.dodge_whiff_count+=1),n.is_last_whiff=!0,n.last_whiff_time=e.time,n.last_whiff_frame=e.frame,n.time_since_last_whiff=Math.max(0,i-e.time),n.frames_since_last_whiff=Math.max(0,t-e.frame),n.last_closest_approach_distance=e.closest_approach_distance,n.best_closest_approach_distance=n.best_closest_approach_distance==null?e.closest_approach_distance:Math.min(n.best_closest_approach_distance,e.closest_approach_distance),n.cumulative_closest_approach_distance+=e.closest_approach_distance}function Ub(n,e){Object.assign(n,e??s_())}function eH(n){const e=KM(n);for(const t of n.frames)e.applyFrame(t);return n}function KM(n){const e=Zz(ve(n,"whiff"));let t=0,i=null;const s=new Map,a=new Map;return{applyFrame(r){if(r.is_live_play){for(const o of s.values())Jz(o,r.frame_number,r.time);for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function iH(n,e,t,i){n.is_last_wall_aerial=i,n.time_since_last_wall_aerial=n.last_wall_aerial_time==null?null:Math.max(0,qM(t,n.last_wall_aerial_time)),n.frames_since_last_wall_aerial=n.last_wall_aerial_frame==null?null:Math.max(0,e-n.last_wall_aerial_frame)}function sH(n,e,t,i){n.count+=1,e.confidence>=tH&&(n.high_confidence_count+=1),n.is_last_wall_aerial=!0,n.last_wall_aerial_time=e.time,n.last_wall_aerial_frame=e.frame,n.time_since_last_wall_aerial=Math.max(0,qM(i,e.time)),n.frames_since_last_wall_aerial=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Lu(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=Lu(n.cumulative_setup_duration,e.setup_duration),n.cumulative_takeoff_to_touch_time=Lu(n.cumulative_takeoff_to_touch_time,e.time_since_takeoff),n.cumulative_touch_height=Lu(n.cumulative_touch_height,e.player_position[2]??0)}function aH(n,e){Object.assign(n,e??YM())}function rH(n){const e=jM(n);for(const t of n.frames)e.applyFrame(t);return n}function jM(n){const e=nH(ve(n,"wall_aerial"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)iH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function cH(n,e,t,i){n.is_last_wall_aerial_shot=i,n.time_since_last_wall_aerial_shot=n.last_wall_aerial_shot_time==null?null:Math.max(0,ZM(t,n.last_wall_aerial_shot_time)),n.frames_since_last_wall_aerial_shot=n.last_wall_aerial_shot_frame==null?null:Math.max(0,e-n.last_wall_aerial_shot_frame)}function uH(n,e,t,i){n.count+=1,e.confidence>=oH&&(n.high_confidence_count+=1),n.is_last_wall_aerial_shot=!0,n.last_wall_aerial_shot_time=e.time,n.last_wall_aerial_shot_frame=e.frame,n.time_since_last_wall_aerial_shot=Math.max(0,ZM(i,e.time)),n.frames_since_last_wall_aerial_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Xp(n.cumulative_confidence,e.confidence),n.cumulative_takeoff_to_shot_time=Xp(n.cumulative_takeoff_to_shot_time,e.time_since_takeoff),n.cumulative_shot_height=Xp(n.cumulative_shot_height,e.player_position[2]??0)}function dH(n,e){Object.assign(n,e??JM())}function hH(n){const e=QM(n);for(const t of n.frames)e.applyFrame(t);return n}function QM(n){const e=lH(ve(n,"wall_aerial_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)cH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{let r=!1;for(;t[f.frame_number,p])),a=new Map,r={...n,frames:[]},o=_H.flatMap(f=>f.createFrameAccumulator?[f.createFrameAccumulator(r)]:[]),l=Math.max(1,t.materializationChunkSize??fH),c=Math.max(l,t.maxMaterializationChunkSize??pH);let u=-1,d=l;const h=f=>{if(f<=u)return;const p=Math.min(i.length-1,Math.max(f,u+d));for(let g=u+1;g<=p;g+=1){const _=i[g],m=_?bH(vH(_)):void 0;if(m){for(const v of o)v.applyFrame(m);a.set(m.frame_number,m)}}u=p,d=Math.min(c,i.length,d*mH)};return{get(f){const p=s.get(f);if(p!==void 0)return h(p),a.get(f)}}}function yH(n){return!n||typeof n!="object"?n:{...n}}function vH(n){return{...n,team_zero:{...n.team_zero},team_one:{...n.team_one},players:n.players.map(e=>({...e,player_id:yH(e.player_id)}))}}function bH(n){return{...n,team_zero:Yl(n.team_zero??{}),team_one:Yl(n.team_one??{}),players:n.players.map(t=>eE(t))}}function jl(n){return n.events?.events??[]}function ve(n,e){return jl(n).filter(t=>t.payload.kind===e).map(t=>t.payload.payload)}const xH=new Set(["is_team_0","name","player_id"]);function Hb(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0}function wH(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.keys(n).every(e=>xH.has(e))}function SH(n){return Hb(n.team_zero)&&Hb(n.team_one)&&n.players.every(e=>wH(e))}function TH(n){return new Map(BT(n).frames.map(e=>[e.frame_number,e]))}function MH(n,e,t){const i=n.frames.filter(s=>SH(s)).length;if(i===n.frames.length)return gH(n,e,t);if(i>0)throw new Error("stats timeline frames must be either all compact scaffolds or all materialized snapshots");return TH(n)}function zt(n,e){return n.get(e)??null}const Ng=[{stage:"validating",index:1,total:9,label:"Parse replay",start:0,end:.08},{stage:"processing",index:2,total:9,label:"Process replay frames",start:.08,end:.62},{stage:"building-stats",index:3,total:9,label:"Build stats events",start:.62,end:.7},{stage:"serializing-replay",index:4,total:9,label:"Serialize replay data",start:.7,end:.76},{stage:"serializing-stats",index:5,total:9,label:"Serialize stats timeline",start:.76,end:.86},{stage:"normalizing",index:6,total:9,label:"Normalize replay model",start:.86,end:.91},{stage:"decoding-replay",index:7,total:9,label:"Decode replay data",start:.91,end:.94},{stage:"decoding-stats",index:8,total:9,label:"Decode stats chunks",start:.94,end:.96},{stage:"deriving-stats",index:9,total:9,label:"Derive stats snapshots",start:.96,end:1}];function tE(n){return Math.max(0,Math.min(1,n))}function Kp(n,e,t){if(n!==void 0)return tE((n-e)/(t-e))}function Ug(n){if(n.stage!=="stats-timeline")return n;const e=n.progress;return e===void 0?{...n,stage:"building-stats"}:e<.35?{...n,stage:"building-stats",progress:Kp(e,0,.35)}:e<.55?{...n,stage:"serializing-replay",progress:Kp(e,.35,.55)}:{...n,stage:"serializing-stats",progress:Kp(e,.55,.92)}}function nE(n){const e=Ug(n);return Ng.find(t=>t.stage===e.stage)}function EH(){return Ng.map(({stage:n,index:e,total:t,label:i})=>({stage:n,index:e,total:t,label:i}))}function CH(n){const e=nE(n);return{stage:e.stage,index:e.index,total:e.total,label:e.label}}function AH(n){const e=Ug(n),t=nE(e);return Ng.map(({stage:i,index:s,total:a,label:r})=>{if(st.index)return{stage:i,index:s,total:a,label:r,state:"pending",completion:0,indeterminate:!1};const o=e.progress!==void 0;return{stage:i,index:s,total:a,label:r,state:"active",completion:o?tE(e.progress??0):1,indeterminate:!o}})}function tf(n){const e=Ug(n),t=e.progress===void 0?null:Math.round(e.progress*100);switch(e.stage){case"validating":return"Parsing replay...";case"processing":return t!==null&&e.totalFrames!==void 0?`Processing replay frames... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:"Processing replay frames...";case"building-stats":return t!==null?e.totalFrames!==void 0?`Building stats events... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:`Building stats events... ${t}%`:"Building stats events...";case"serializing-replay":return t!==null?`Serializing replay data... ${t}%`:"Serializing replay data...";case"serializing-stats":return t!==null?`Serializing stats timeline... ${t}%`:"Serializing stats timeline...";case"decoding-replay":return t!==null?`Decoding replay data... ${t}%`:"Decoding replay data...";case"decoding-stats":return t!==null?e.totalChunks!==void 0?`Decoding stats chunks... ${t}% (${e.processedChunks??0}/${e.totalChunks})`:`Decoding stats chunks... ${t}%`:"Decoding stats chunks...";case"deriving-stats":return t!==null?`Deriving stats snapshots... ${t}%`:"Deriving stats snapshots...";case"normalizing":return t!==null?`Normalizing replay model... ${t}%`:"Normalizing replay model...";default:return"Loading replay..."}}function RH(n){return n instanceof Error?n:new Error(String(n))}function Rs(n,e){return JSON.parse(n.decode(new Uint8Array(e)))}async function PH(n,e,t){t?.({stage:"decoding-stats",progress:0});const i=Rs(n,e.configBuffer);t?.({stage:"decoding-stats",progress:.05}),await Za();const s=Rs(n,e.replayMetaBuffer);t?.({stage:"decoding-stats",progress:.1}),await Za();const a=Rs(n,e.eventsBuffer),r=Rs(n,e.activitySummaryBuffer),o=Rs(n,e.positioningSummaryBuffer),l=Rs(n,e.accumulationTracksBuffer);t?.({stage:"decoding-stats",progress:.15}),await Za();const c=[],u=e.frameChunkBuffers.length;for(let d=0;d{let t=!1,i=null;const s=()=>{t||(t=!0,i!==null&&clearTimeout(i),e())};i=setTimeout(s,n),requestAnimationFrame(()=>s())})}async function iE(n,e={}){if(typeof Worker>"u")throw new Error("Replay loading worker is not available in this environment");const t=new Worker(new URL(""+new URL("replayLoader.worker-D3pjMe81.js",import.meta.url).href,import.meta.url),{type:"module"}),i=n.slice(),s=e.reportEveryNFrames??100;return new Promise((a,r)=>{const o=()=>{t.terminate()};t.onmessage=async c=>{const u=c.data;if(u.type==="progress"){e.onProgress?.(u.progress);return}if(u.type==="error"){o(),r(new Error(u.error));return}o();try{const d=new TextDecoder;e.onProgress?.({stage:"decoding-replay",progress:0}),await Za();const h=Rs(d,u.replayBuffer);e.onProgress?.({stage:"decoding-replay",progress:.5}),await Za();const f=Rs(d,u.rawReplayBuffer);e.onProgress?.({stage:"decoding-replay",progress:1}),await Za();const p=await PH(d,u.statsTimelineParts,e.onProgress),g=MH(p);a({replay:h,raw:f,statsTimeline:p,statsFrameLookup:g})}catch(d){r(RH(d))}},t.onerror=c=>{o(),r(new Error(c.message||"Replay loading worker failed"))};const l={type:"load-replay",bytes:i.buffer,reportEveryNFrames:s};t.postMessage(l,[i.buffer])})}function IH(n){const e=document.createElement("div");e.className="replay-load-modal",e.hidden=!0;const t=document.createElement("div");t.className="replay-load-modal__dialog",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","replay-load-modal-title");const i=document.createElement("p");i.className="replay-load-modal__eyebrow",i.textContent="Replay loading";const s=document.createElement("h2");s.id="replay-load-modal-title",s.className="replay-load-modal__title",s.textContent="Preparing replay pipeline";const a=document.createElement("p");a.className="replay-load-modal__status",a.textContent="Preparing replay...";const r=document.createElement("div");r.className="replay-load-modal__phase-list";const o=new Map;for(const f of EH()){const p=document.createElement("div");p.className="replay-load-modal__phase-row",p.dataset.state="pending";const g=document.createElement("p");g.className="replay-load-modal__phase-label",g.textContent=`${f.index}. ${f.label}`;const _=document.createElement("div");_.className="replay-load-modal__phase-bar";const m=document.createElement("div");m.className="replay-load-modal__phase-fill",m.dataset.indeterminate="false",_.append(m),p.append(g,_),r.append(p),o.set(f.stage,{row:p,fill:m})}const l=document.createElement("p");l.className="replay-load-modal__meta",t.append(i,s,a,r,l),e.append(t),n.append(e);let c="";const u=()=>{for(const{row:f,fill:p}of o.values())f.dataset.state="pending",p.style.width="0%",p.dataset.indeterminate="false"},d=f=>{for(const p of AH(f)){const g=o.get(p.stage);g&&(g.row.dataset.state=p.state,g.fill.dataset.indeterminate=p.indeterminate?"true":"false",g.fill.style.width=`${Math.round(p.completion*100)}%`)}},h=f=>{e.hidden=!f};return{show(f,p="Preparing replay..."){c=f,h(!0),u(),s.textContent="Preparing replay pipeline",a.textContent=p,l.textContent=`Loading ${f}`},update(f){h(!0);const p=CH(f);if(d(f),s.textContent=`Phase ${p.index} of ${p.total}: ${p.label}`,a.textContent=tf(f),f.stage==="processing"&&f.totalFrames!==void 0){l.textContent=`${f.processedFrames??0}/${f.totalFrames} frames`;return}if(f.stage==="decoding-stats"&&f.totalChunks!==void 0){l.textContent=`${f.processedChunks??0}/${f.totalChunks} chunks`;return}l.textContent=c?`Loading ${c}`:""},hide(){h(!1)},destroy(){e.remove()}}}const LH=["free","follow"];function sE(n){return n.useReplayBallCam??!1?"player":n.ballCamEnabled?"on":"off"}function Vb(n){return n.useReplayBallCam?"player":n.ballCam===!0?"on":n.ballCam===!1?"off":"player"}const aE={fov:110,height:100,pitch:-4,distance:270,stiffness:0,swivelSpeed:1,transitionSpeed:1};class Bg{constructor(e){this.options=e}lastFreeCameraPreset=null;get freeCameraPreset(){return this.lastFreeCameraPreset}set freeCameraPreset(e){this.lastFreeCameraPreset=e}ballCamModeValue="player";get ballCamMode(){return this.ballCamModeValue}autoPossessionEnabledValue=!1;get autoPossessionEnabled(){return this.autoPossessionEnabledValue}static ballCamEnabledForMode(e){return e==="player"?null:e==="on"}followPlayerWithReplayCamera(e,t={}){const i=this.options.getReplayPlayer();i&&(t.preserveAutoPossession||this.setAutoPossessionEnabled(!1,{requestConfigSync:!1}),i.setAttachedPlayer(e),i.setCameraViewMode("follow"),t.usePlayerCameraSettings!==!1&&i.setCustomCameraSettings(null),this.setBallCamMode(t.ballCam??"player"),this.lastFreeCameraPreset=null,t.requestConfigSync!==!1&&this.options.requestConfigSync())}setAutoPossessionEnabled(e,t={}){if(this.autoPossessionEnabledValue===e){this.renderAutoPossessionButton();return}this.autoPossessionEnabledValue=e,this.renderAutoPossessionButton(),t.notify!==!1&&this.options.onAutoPossessionChange?.(e),t.requestConfigSync!==!1&&this.options.requestConfigSync()}renderBallCamButtons(){const{ballCamOffButton:e,ballCamOnButton:t,ballCamPlayerButton:i}=this.options.elements,s=[["off",e],["on",t],["player",i]];for(const[a,r]of s){const o=a===this.ballCamModeValue;r.dataset.active=o?"true":"false",r.setAttribute("aria-pressed",o?"true":"false")}}renderAutoPossessionButton(){this.options.elements.cameraViewAutoPossession.checked=this.autoPossessionEnabledValue}disableAutoPossessionForManualCameraControl(){this.setAutoPossessionEnabled(!1,{requestConfigSync:!1})}setBallCamMode(e){this.ballCamModeValue=e,this.options.getReplayPlayer()?.setBallCamEnabled(Bg.ballCamEnabledForMode(e)),this.renderBallCamButtons()}get nameplateLiftUu(){const e=Number(this.options.elements.nameplateLift.value);return Number.isFinite(e)?e:Um}applyNameplateLiftUu(e){const{nameplateLift:t,nameplateLiftReadout:i}=this.options.elements,s=e??Um;t.value=`${s}`,i.textContent=qn(s,"",0)}installEventListeners(e){const{elements:t}=this.options;t.usePlayerCameraSettings.addEventListener("change",()=>{const s=t.usePlayerCameraSettings.checked;t.cameraSettingsControls.hidden=s,this.options.getReplayPlayer()?.setCustomCameraSettings(s?null:this.readCustomCameraSettings()),this.options.requestConfigSync()},{signal:e});for(const s of[t.customCameraFov,t.customCameraHeight,t.customCameraPitch,t.customCameraDistance,t.customCameraStiffness,t.customCameraSwivelSpeed,t.customCameraTransitionSpeed])s.addEventListener("input",()=>{const a=this.readCustomCameraSettings();this.syncCustomCameraSettingControls(a),this.options.getReplayPlayer()?.setCustomCameraSettings(a),this.options.requestConfigSync()},{signal:e});t.attachedPlayer.addEventListener("change",()=>{const s=this.options.getReplayPlayer(),a=t.attachedPlayer.value||null;this.disableAutoPossessionForManualCameraControl(),s?.setAttachedPlayer(a),a&&(s?.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFreeButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setCameraViewMode("free"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFollowButton.addEventListener("click",()=>{const s=this.options.getReplayPlayer();this.disableAutoPossessionForManualCameraControl(),s?.setCameraViewMode("follow"),s?.getState().attachedPlayerId&&(s.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewOverheadButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("overhead"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="overhead",this.options.requestConfigSync()},{signal:e}),t.cameraViewSideButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("side"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="side",this.options.requestConfigSync()},{signal:e});const i=[["off",t.ballCamOffButton],["on",t.ballCamOnButton],["player",t.ballCamPlayerButton]];for(const[s,a]of i)a.addEventListener("click",()=>{this.setBallCamMode(s),this.options.requestConfigSync()},{signal:e});t.cameraViewAutoPossession.addEventListener("change",()=>{this.setAutoPossessionEnabled(t.cameraViewAutoPossession.checked)},{signal:e}),t.nameplateLift.addEventListener("input",()=>{t.nameplateLiftReadout.textContent=qn(this.nameplateLiftUu,"",0),this.options.requestConfigSync()},{signal:e})}setTransportEnabled(e,t){this.options.elements.attachedPlayer.disabled=!e,this.syncModeButtons(e?t:void 0)}syncState(e){const{elements:t}=this.options;t.usePlayerCameraSettings.checked=e.customCameraSettings===null,t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,this.syncCustomCameraSettingControls(e.customCameraSettings??this.getFallbackCameraSettings()),this.ballCamModeValue=sE(e),this.renderBallCamButtons(),t.attachedPlayer.value=e.attachedPlayerId??"",this.syncAvailability(e),this.renderProfile(e)}syncAvailability(e){this.syncModeButtons(e);const i=this.options.getReplayPlayer()!==null&&e?.cameraViewMode==="follow"&&(e.attachedPlayerId??null)!==null;this.options.elements.usePlayerCameraSettings.disabled=!i,this.setCameraSettingControlsEnabled(i&&e?.customCameraSettings!==null),this.options.elements.ballCamOffButton.disabled=!i,this.options.elements.ballCamOnButton.disabled=!i,this.options.elements.ballCamPlayerButton.disabled=!i,this.renderBallCamButtons()}syncModeButtons(e){const t=e?.cameraViewMode??"free",i=this.options.getReplayPlayer()!==null&&e!==void 0,s=(e?.attachedPlayerId??null)!==null;for(const l of LH){const c=this.getCameraViewButton(l);c.disabled=!i||l==="follow"&&!s;const u=l===t;c.dataset.active=u?"true":"false",c.setAttribute("aria-pressed",u?"true":"false")}const{cameraViewOverheadButton:a,cameraViewSideButton:r}=this.options.elements,{cameraViewAutoPossession:o}=this.options.elements;a.disabled=!i,r.disabled=!i,o.disabled=!i,a.dataset.active="false",r.dataset.active="false",this.renderAutoPossessionButton(),a.setAttribute("aria-pressed","false"),r.setAttribute("aria-pressed","false")}populateAttachedPlayerOptions(e){const{attachedPlayer:t}=this.options.elements;t.replaceChildren(),t.append(new Option("Free camera",""));for(const i of e)t.append(new Option(`${i.name} (${i.isTeamZero?"Blue":"Orange"})`,i.id))}renderProfile(e){const t=this.options.elements,i=this.options.getReplayPlayer(),s=e?.attachedPlayerId??null;if(!i||e?.cameraViewMode!=="follow"||s===null){this.renderEmptyProfile("Free camera");return}const a=i.replay.players.find(o=>o.id===s);if(!a){this.renderEmptyProfile("Unknown");return}const r=this.getEffectiveCameraSettings(e);t.cameraProfileReadout.textContent=e.customCameraSettings===null?a.name:`${a.name} custom`,t.cameraFovReadout.textContent=qn(r.fov,"",0),t.cameraHeightReadout.textContent=qn(r.height,"",0),t.cameraPitchReadout.textContent=qn(r.pitch,"",0),t.cameraBaseDistanceReadout.textContent=qn(r.distance,"",0),t.cameraStiffnessReadout.textContent=qn(r.stiffness,"",2)}getFallbackCameraSettings(){return aE}getAttachedPlayerCameraSettings(e){const t=this.options.getReplayPlayer();return!t||e===null?null:t.replay.players.find(i=>i.id===e)?.cameraSettings??null}getEffectiveCameraSettings(e){return{...this.getFallbackCameraSettings(),...this.getAttachedPlayerCameraSettings(e.attachedPlayerId)??{},...e.customCameraSettings??{}}}readCustomCameraSettings(){const e=this.options.elements;return{fov:Number(e.customCameraFov.value),height:Number(e.customCameraHeight.value),pitch:Number(e.customCameraPitch.value),distance:Number(e.customCameraDistance.value),stiffness:Number(e.customCameraStiffness.value),swivelSpeed:Number(e.customCameraSwivelSpeed.value),transitionSpeed:Number(e.customCameraTransitionSpeed.value)}}setCameraSettingControlsEnabled(e){const t=this.options.elements;t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,t.customCameraFov.disabled=!e,t.customCameraHeight.disabled=!e,t.customCameraPitch.disabled=!e,t.customCameraDistance.disabled=!e,t.customCameraStiffness.disabled=!e,t.customCameraSwivelSpeed.disabled=!e,t.customCameraTransitionSpeed.disabled=!e}syncCustomCameraSettingControls(e){const t=this.options.elements,i=this.getFallbackCameraSettings(),s=e.fov??i.fov,a=e.height??i.height,r=e.pitch??i.pitch,o=e.distance??i.distance,l=e.stiffness??i.stiffness,c=e.swivelSpeed??i.swivelSpeed,u=e.transitionSpeed??i.transitionSpeed;t.customCameraFov.value=`${s}`,t.customCameraHeight.value=`${a}`,t.customCameraPitch.value=`${r}`,t.customCameraDistance.value=`${o}`,t.customCameraStiffness.value=`${l}`,t.customCameraSwivelSpeed.value=`${c}`,t.customCameraTransitionSpeed.value=`${u}`,t.customCameraFovReadout.textContent=qn(s,"",0),t.customCameraHeightReadout.textContent=qn(a,"",0),t.customCameraPitchReadout.textContent=qn(r,"",0),t.customCameraDistanceReadout.textContent=qn(o,"",0),t.customCameraStiffnessReadout.textContent=qn(l,"",2),t.customCameraSwivelSpeedReadout.textContent=qn(c,"",1),t.customCameraTransitionSpeedReadout.textContent=qn(u,"",2)}getCameraViewButton(e){switch(e){case"free":return this.options.elements.cameraViewFreeButton;case"follow":return this.options.elements.cameraViewFollowButton}}renderEmptyProfile(e){const t=this.options.elements;t.cameraProfileReadout.textContent=e,t.cameraFovReadout.textContent="--",t.cameraHeightReadout.textContent="--",t.cameraPitchReadout.textContent="--",t.cameraBaseDistanceReadout.textContent="--",t.cameraStiffnessReadout.textContent="--"}}function qn(n,e="",t=0){return n===void 0||Number.isNaN(n)?"--":`${n.toFixed(t)}${e}`}function DH(n){return new Bg(n)}const Gb="subtr-actor-touch-overlay-styles",zg=5882879,Hg=16761180,$b=120,Wb=4,kH=196,qp=24,Xb=210,Kb=5,OH=.1,FH=48,NH=["team","intention","kind","height_band","surface","dodge_state","flag"],UH=[{label:"Blue team",color:zg},{label:"Orange team",color:Hg}],rE=[{label:"Shot",color:16711880},{label:"Save",color:58998},{label:"Clear",color:16764928},{label:"Boom",color:16020150},{label:"Pass",color:47103},{label:"Control",color:0},{label:"Advance",color:16486972}],Ju=[{label:"Control",color:0},{label:"Medium hit",color:16436245},{label:"Hard hit",color:16735596}],Qu=[{label:"Ground",color:10741301},{label:"Low air",color:3718648},{label:"High air",color:8490232}],oE=[{label:"Ground",color:8702998},{label:"Air",color:6333946},{label:"Wall",color:16347926}],a_=[{label:"No dodge",color:9741240},{label:"Dodge",color:15235577}],r_=[{label:"First touch",color:16777215},{label:"Contested",color:15680580}],BH=[{title:"Team",entries:UH},{title:"Intention",entries:rE},{title:"Hit strength",entries:Ju},{title:"Height",entries:Qu},{title:"Surface",entries:oE},{title:"Dodge",entries:a_},{title:"Flags",entries:r_}];function fc(n){return Object.fromEntries(n.map(e=>[e.label.toLowerCase().replaceAll(" ","_"),e.color]))}const lE=fc(rE),cE={...fc(Ju),medium_hit:Ju[1].color,hard_hit:Ju[2].color},uE={...fc(Qu),low_air:Qu[1].color,high_air:Qu[2].color},dE=fc(oE),hE={...fc(a_),no_dodge:a_[0].color},o_={first_touch:r_[0].color,contested:r_[1].color},Vi=10134961;function jn(n,e){const t=n.tags;if(!Array.isArray(t))return null;const i=t.find(s=>s.group===e);return i?i.value:null}function fE(n){return jn(n,"possession")??jn(n,"action")}function At(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function Yp(n,e){return Math.max(0,n-e)}function ed(n){return n==="team"||n==="intention"||n==="kind"||n==="height_band"||n==="surface"||n==="dodge_state"||n==="flag"}function ho(n){const e=Array.isArray(n)?n:n?[n]:["team"],t=new Set,i=[];for(const s of e)ed(s)&&!t.has(s)&&(t.add(s),i.push(s));return i.length>0?i:["team"]}function pE(n){return n[n.length-1]??"team"}function zH(n,e,t){const i=HH(n,pE(t)),s=i?` · ${i.replaceAll("_"," ")}`:"";if(e==="markers")return`${n.playerName}${s}`;const a=Math.round(n.totalBallAdvanceDistance),r=Math.round(n.totalBallRetreatDistance);return a>0&&r>0?`${n.playerName} +${a} / -${r} uu${s}`:r>0?`${n.playerName} -${r} uu${s}`:`${n.playerName} +${a} uu${s}`}function HH(n,e){return e==="intention"?n.intention:e==="kind"?n.kind:e==="height_band"?n.heightBand:e==="surface"?n.surface:e==="dodge_state"?n.dodgeState:e==="flag"?n.contested?"contested":n.firstTouch?"first_touch":null:null}function VH(n){return n.split("_").filter(Boolean).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function sl(n,e,t){return typeof e!="string"||e.length===0?null:{key:n,value:e,label:VH(e),color:t[e]??Vi}}function qb(n,e,t){return e!==!0?null:{key:n,value:"true",label:t,color:o_[n]??Vi}}function GH(n){const e=jn(n,"reception")==="first_touch",t=jn(n,"contested")!=null;return[sl("intention",fE(n),lE),sl("kind",jn(n,"kind"),cE),sl("height_band",jn(n,"height_band"),uE),sl("surface",jn(n,"surface"),dE),sl("dodge_state",jn(n,"dodge_state"),hE),qb("first_touch",e,"First touch"),qb("contested",t,"Contested")].filter(i=>i!=null)}function mE(n,e){return e==="intention"?lE[n.intention??""]??Vi:e==="kind"?cE[n.kind??""]??Vi:e==="height_band"?uE[n.heightBand??""]??Vi:e==="surface"?dE[n.surface??""]??Vi:e==="dodge_state"?hE[n.dodgeState??""]??Vi:e==="flag"?n.contested?o_.contested??Vi:n.firstTouch?o_.first_touch??Vi:Vi:n.isTeamZero?zg:Hg}function $H(n,e){return(e.length>0?e:["team"]).map(i=>mE(n,i))}function _E(n,e){const t=[],i=[...ve(n,"touch")].sort((s,a)=>s.frame!==a.frame?s.frame-a.frame:s.time!==a.time?s.time-a.time:0);for(const s of i){const a=At(s.player),r=e.ballFrames[s.frame]?.position;if(!r)continue;const o=s.ball_movement,c=(o?e.ballFrames[o.end_frame]?.position:null)??r,u=t.length,d=GH(s);t.push({id:`touch-stat:${s.frame}:${a}:${u+1}`,time:e.frames[s.frame]?.time??s.time,frame:s.frame,isTeamZero:s.is_team_0,playerId:a,playerName:e.players.find(h=>h.id===a)?.name??a,kind:jn(s,"kind"),intention:fE(s),heightBand:jn(s,"height_band"),surface:jn(s,"surface"),dodgeState:jn(s,"dodge_state"),firstTouch:jn(s,"reception")==="first_touch",contested:jn(s,"contested")!=null,classifications:d,position:{x:r.x,y:r.y,z:r.z},endPosition:{x:c.x,y:c.y,z:c.z},totalBallTravelDistance:o?Yp(o.travel_distance,0):0,totalBallAdvanceDistance:o?Yp(o.advance_distance,0):0,totalBallRetreatDistance:o?Yp(o.retreat_distance,0):0})}return t}function WH(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function XH(){if(document.getElementById(Gb))return;const n=document.createElement("style");n.id=Gb,n.textContent=` +`}const en="#3b82f6",tn="#f59e0b",G3=new Set(["wavedash"]),$3=new Set(["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"]);function Ai(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function Hv(n){return $3.has(n)&&!G3.has(n)}function of(n){return n===!0?en:n===!1?tn:null}const XT=["timeline","core_player","player_possession","possession","loose_possession","ball_half","ball_third","territorial_pressure","movement","player_activity","field_third","field_half","ball_depth","depth_role","ball_proximity","shadow_defense","rotation_role","first_man_change","goal_context","backboard","ceiling_shot","wall_aerial","wall_aerial_shot","center","flick","flip_reset","dodge_reset","double_tap","fifty_fifty","kickoff","one_timer","pass","ball_carry","controlled_play","rush","dodge","speed_flip","half_flip","half_volley","wavedash","whiff","powerslide","touch","boost_pickups","boost_respawn","bump","demolition"],KT=["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"],Bg=[...new Set([...XT,...KT])],W3=new Set(KT);function ao(){return Object.fromEntries(Bg.map(n=>[n,0]))}function Dp(n){return{...n??ao()}}function Eu(n,e){n[e]+=1}function X3(n){return Bg.includes(n)}function qT(n){if(n==null)return null;if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function Xm(n){return qT(n.meta.primary_player)}function K3(n){return n.meta.team_is_team_0??null}function q3(n){const e=n.meta.stream;return!W3.has(e)||!X3(e)?null:e}function Km(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_frame:n.meta.timing.frame;return typeof e=="number"&&Number.isFinite(e)?e:null}function qm(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_time:n.meta.timing.time;return typeof e=="number"&&Number.isFinite(e)?e:null}function Y3(n,e){const t=Km(n);if(t!==null)return t<=e.frame_number;const i=qm(n);return i!==null&&i<=e.time}function j3(n){return[...n].sort((e,t)=>{const i=Km(e),s=Km(t);if(i!==s)return(i??Number.POSITIVE_INFINITY)-(s??Number.POSITIVE_INFINITY);const a=qm(e),r=qm(t);return a!==r?(a??Number.POSITIVE_INFINITY)-(r??Number.POSITIVE_INFINITY):(Xm(e)??"").localeCompare(Xm(t)??"")})}function YT(n){const e=jT(n);for(const t of n.frames)e.applyFrame(t);return n}function jT(n){const e=Bg.map(s=>({eventType:s,events:j3(ec(n).filter(a=>a.meta.stream===s)),index:0})),t=new Map,i={teamZero:ao(),teamOne:ao()};return{applyFrame(s){for(const a of e)for(;a.index({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function J3(n,e,t,i){n.is_last_backboard=i,n.time_since_last_backboard=n.last_backboard_time==null?null:Math.max(0,t-n.last_backboard_time),n.frames_since_last_backboard=n.last_backboard_frame==null?null:Math.max(0,e-n.last_backboard_frame)}function Q3(n,e,t,i){n.count+=1,n.last_backboard_time=e.time,n.last_backboard_frame=e.frame,n.time_since_last_backboard=Math.max(0,i-e.time),n.frames_since_last_backboard=Math.max(0,t-e.frame)}function eU(n,e){Object.assign(n,e??ZT())}function Gv(n,e){n.count=e}function tU(n){const e=JT(n);for(const t of n.frames)e.applyFrame(t);return n}function JT(n){const e=Z3(ve(n,"backboard"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)J3(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Ym(n){return`${n.key}\0${n.value}`}function Cu(n){return n.map(Ym).join("")}function QT(n,e){e.sort((s,a)=>Ym(s).localeCompare(Ym(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Cu(s.labels)===Cu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Cu(s.labels).localeCompare(Cu(a.labels))))}function Wv(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="origin"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function eM(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function tM(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Xv(n,e){QT(n,[{key:"kind",value:"carry"}]),n.carry_count=eM(n),n.total_carry_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_carry_time=Math.max(n.longest_carry_time,e.duration),n.furthest_carry_distance=Math.max(n.furthest_carry_distance,e.straight_line_distance),n.fastest_carry_speed=Math.max(n.fastest_carry_speed,e.average_speed),n.carry_speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap}function Kv(n,e){e.air_dribble_origin!=null&&QT(n,[{key:"origin",value:e.air_dribble_origin}]),n.count=eM(n),n.ground_to_air_count=Wv(n,"ground_to_air"),n.wall_to_air_count=Wv(n,"wall_to_air"),n.total_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_time=Math.max(n.longest_time,e.duration),n.furthest_distance=Math.max(n.furthest_distance,e.straight_line_distance),n.fastest_speed=Math.max(n.fastest_speed,e.average_speed),n.speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap,n.total_touch_count+=e.touch_count,n.max_touch_count=Math.max(n.max_touch_count,e.touch_count)}function Op(n,e){Object.assign(n,e??Zu()),e?.labeled_event_counts?n.labeled_event_counts=tM(e.labeled_event_counts):delete n.labeled_event_counts}function Fp(n,e){Object.assign(n,e??Ju()),e?.labeled_event_counts?n.labeled_event_counts=tM(e.labeled_event_counts):delete n.labeled_event_counts}function iU(n){const e=nM(n);for(const t of n.frames)e.applyFrame(t);return n}function nM(n){const e=nU(ve(n,"ball_carry"));let t=0;const i=new Map,s=new Map,a=Zu(),r=Zu(),o=Ju(),l=Ju();return{applyFrame(c){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function aU(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1),n.last_bump_time=e.time,n.last_bump_frame=e.frame,n.last_bump_strength=e.strength,n.max_bump_strength=Math.max(n.max_bump_strength,e.strength),n.cumulative_bump_strength+=e.strength}function rU(n,e){n.bumps_taken+=1,e.is_team_bump&&(n.team_bumps_taken+=1)}function oU(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1)}function lU(n,e){Object.assign(n,e??jm())}function Yv(n,e){Object.assign(n,e)}function cU(n){const e=iM(n);for(const t of n.frames)e.applyFrame(t);return n}function iM(n){const e=sU(ve(n,"bump"));let t=0;const i=new Map,s=qv(),a=qv();return{applyFrame(r){for(;t=t&&n0&&(s.overfill_total=sn(s.overfill_total,i),e.field_half==="opponent"&&(s.overfill_from_stolen=sn(s.overfill_from_stolen,i)))}function Jv(n,e){e.boost_granted!=null&&(n.stats.amount_respawned=sn(n.stats.amount_respawned,rn(e.boost_granted)))}class mU{constructor(e){this.points=e}index=0;sample(e){for(;this.index+1e?0:rn(t.value)}}function e_(n,e){return`${n}:${e}`}function _U(n){const e=new Map,t=n.accumulation_tracks;for(const i of t??[]){const s=gl(i.player_id);e.set(e_(s,i.quantity),new mU(i.points))}return e}function gU(n){return[...ve(n,"boost_pickup")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function yU(n){return[...ve(n,"respawn")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function Bp(n,e){for(const t of sM)n[t]=e[t]}function aM(n){const e=gU(n),t=yU(n),i=_U(n);let s=0,a=0;const r=new Map,o=Up(),l=Up(),c=(d,h)=>{const f=gl(d);let p=r.get(f);return p||(p=Up(),r.set(f,p)),p.isTeamZero=h,p},u=(d,h,f)=>{const p=g=>i.get(e_(h,g))?.sample(f)??0;d.amount_used=p("boost_used"),d.amount_used_while_grounded=p("boost_used_grounded"),d.amount_used_while_airborne=p("boost_used_airborne"),d.amount_used_while_supersonic=p("boost_used_supersonic")};return{applyFrame(d,h){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function t_(n){return`${n.key}\0${n.value}`}function Ru(n){return n.map(t_).join("")}function TU(n,e){e.sort((s,a)=>t_(s).localeCompare(t_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Ru(s.labels)===Ru(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Ru(s.labels).localeCompare(Ru(a.labels))))}function MU(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function EU(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function CU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function AU(n,e,t,i){n.is_last_ceiling_shot=i,n.time_since_last_ceiling_shot=n.last_ceiling_shot_time==null?null:Math.max(0,rM(t,n.last_ceiling_shot_time)),n.frames_since_last_ceiling_shot=n.last_ceiling_shot_frame==null?null:Math.max(0,e-n.last_ceiling_shot_frame)}function RU(n,e,t,i){TU(n,[{key:"confidence_band",value:e.confidence>=xU?"high":"standard"}]),n.count=EU(n),n.high_confidence_count=MU(n,"high"),n.is_last_ceiling_shot=!0,n.last_ceiling_shot_time=e.time,n.last_ceiling_shot_frame=e.frame,n.time_since_last_ceiling_shot=Math.max(0,rM(i,e.time)),n.frames_since_last_ceiling_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=wU(n.cumulative_confidence,e.confidence)}function PU(n,e){Object.assign(n,e??oM()),e?.labeled_event_counts?n.labeled_event_counts=CU(e.labeled_event_counts):delete n.labeled_event_counts}function IU(n){const e=lM(n);for(const t of n.frames)e.applyFrame(t);return n}function lM(n){const e=SU(ve(n,"ceiling_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)AU(o,a.frame_number,a.time,i===r);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function OU(n,e){Object.assign(n,e??zg())}function tb(n,e){Object.assign(n,e)}function nb(n,e){n.score+=e.score_delta,n.goals+=e.goals_delta,n.assists+=e.assists_delta,n.saves+=e.saves_delta,n.shots+=e.shots_delta}function cM(n,e){if(e.time_after_kickoff!=null){const t=Math.max(0,e.time_after_kickoff);t<10?n.kickoff_goal_count+=1:t<20?n.short_goal_count+=1:t<40?n.medium_goal_count+=1:n.long_goal_count+=1}if(e.goal_buildup==="counter_attack"?n.counter_attack_goal_count+=1:e.goal_buildup==="sustained_pressure"?n.sustained_pressure_goal_count+=1:e.goal_buildup!=null&&(n.other_buildup_goal_count+=1),e.ball_air_time_before_goal!=null){const t=Math.max(0,e.ball_air_time_before_goal);n.goal_ball_air_time_sample_count+=1,n.cumulative_goal_ball_air_time=is(n.cumulative_goal_ball_air_time,t),n.last_goal_ball_air_time=t}}function zp(n,e){return n!=null&&e!=null&&Jl(n)===Jl(e)}function ib(n,e){return n?e.y:-e.y}function FU(n,e){if(n.ball_position==null||e.position==null)return!1;const t=!n.scoring_team_is_team_0,i=ib(t,n.ball_position);if(i>LU)return!1;const s=ib(t,e.position);return s=DU}function NU(n,e,t){const i=t.is_team_0===e.scoring_team_is_team_0,s=zp(t.player,e.defending_team_most_back_player),a=zp(t.player,e.scoring_team_most_back_player);s&&(n.goals_conceded_while_last_defender+=1),a&&(n.goals_for_while_most_back+=1),s&&(n.goals_against_while_most_back+=1),!i&&FU(e,t)&&(n.caught_ahead_of_play_on_conceded_goals+=1),!i&&t.boost_amount!=null&&(n.goal_against_boost_sample_count+=1,n.cumulative_boost_on_goals_against=is(n.cumulative_boost_on_goals_against,t.boost_amount),n.last_boost_on_goal_against=t.boost_amount),!i&&t.average_boost_in_leadup!=null&&t.min_boost_in_leadup!=null&&(n.goal_against_boost_leadup_sample_count+=1,n.cumulative_average_boost_in_goal_against_leadup=is(n.cumulative_average_boost_in_goal_against_leadup,t.average_boost_in_leadup),n.cumulative_min_boost_in_goal_against_leadup=is(n.cumulative_min_boost_in_goal_against_leadup,t.min_boost_in_leadup),n.last_average_boost_in_goal_against_leadup=t.average_boost_in_leadup,n.last_min_boost_in_goal_against_leadup=t.min_boost_in_leadup),!i&&t.position!=null&&(n.goal_against_position_sample_count+=1,n.cumulative_goal_against_position_x=is(n.cumulative_goal_against_position_x,t.position.x),n.cumulative_goal_against_position_y=is(n.cumulative_goal_against_position_y,t.position.y),n.cumulative_goal_against_position_z=is(n.cumulative_goal_against_position_z,t.position.z),n.last_goal_against_position={...t.position});const r=zp(t.player,e.scorer),o=r?e.scorer_last_touch?.ball_position:null;o!=null&&(n.scoring_goal_last_touch_position_sample_count+=1,n.cumulative_scoring_goal_last_touch_position_x=is(n.cumulative_scoring_goal_last_touch_position_x,o.x),n.cumulative_scoring_goal_last_touch_position_y=is(n.cumulative_scoring_goal_last_touch_position_y,o.y),n.cumulative_scoring_goal_last_touch_position_z=is(n.cumulative_scoring_goal_last_touch_position_z,o.z),n.last_scoring_goal_last_touch_position={...o}),r&&cM(n,e)}function UU(n,e,t,i){cM(i.scoring_team_is_team_0?e:t,i);for(const s of i.players){const a=Jl(s.player),r=n.get(a)??zg();n.set(a,r),NU(r,i,s)}}function BU(n){const e=uM(n);for(const t of n.frames)e.applyFrame(t);return n}function uM(n){const e=eb(ve(n,"core_player")),t=eb(ve(n,"goal_context"));let i=0,s=0;const a=new Map,r=n_(),o=n_();return{applyFrame(l){for(;i({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function rb(n,e){n.count+=1,n.total_time=sb(n.total_time,e.duration),n.longest_time=Math.max(n.longest_time,e.duration),n.touch_count+=e.touch_count,n.total_advance_distance=sb(n.total_advance_distance,e.total_advance_distance)}function Vp(n,e){Object.assign(n,e??Qu())}function HU(n){const e=dM(n);for(const t of n.frames)e.applyFrame(t);return n}function dM(n){const e=zU(ve(n,"controlled_play"));let t=0;const i=new Map,s=Qu(),a=Qu();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function GU(n,e){n.count+=1,e.on_ball&&(n.on_ball_count+=1)}function $U(n,e){Object.assign(n,e??hM())}function WU(n){const e=fM(n);for(const t of n.frames)e.applyFrame(t);return n}function fM(n){const e=VU(ve(n,"dodge_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function KU(n,e,t,i){n.is_last_double_tap=i,n.time_since_last_double_tap=n.last_double_tap_time==null?null:Math.max(0,t-n.last_double_tap_time),n.frames_since_last_double_tap=n.last_double_tap_frame==null?null:Math.max(0,e-n.last_double_tap_frame)}function qU(n,e,t,i){n.count+=1,n.last_double_tap_time=e.time,n.last_double_tap_frame=e.frame,n.time_since_last_double_tap=Math.max(0,i-e.time),n.frames_since_last_double_tap=Math.max(0,t-e.frame)}function YU(n,e){Object.assign(n,e??pM())}function cb(n,e){n.count=e}function jU(n){const e=mM(n);for(const t of n.frames)e.applyFrame(t);return n}function mM(n){const e=XU(ve(n,"double_tap"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)KU(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function JU(n,e){Object.assign(n,e??_M())}function hb(n,e){Object.assign(n,e)}function QU(n){const e=gM(n);for(const t of n.frames)e.applyFrame(t);return n}function gM(n){const e=ZU(ve(n,"demolition"));let t=0;const i=new Map,s=db(),a=db();function r(o){const l=ub(o),c=i.get(l)??_M();return i.set(l,c),c}return{applyFrame(o){for(;t({event:e,index:t})).sort((e,t)=>e.event.resolve_frame!==t.event.resolve_frame?e.event.resolve_frame-t.event.resolve_frame:e.event.resolve_time!==t.event.resolve_time?e.event.resolve_time-t.event.resolve_time:e.index-t.index).map(({event:e})=>e)}function tB(n){return{key:"phase",value:n?"kickoff":"open_play"}}function nB(n,e){return e==null?{key:"outcome",value:"neutral"}:{key:"outcome",value:e===n?"win":"loss"}}function iB(n,e){return e==null?{key:"possession_after",value:"neutral"}:{key:"possession_after",value:e===n?"self":"opponent"}}function sB(n,e){return{key:"dodge_state",value:(n?e.team_zero_dodge_contact:e.team_one_dodge_contact)?"dodge":"no_dodge"}}function s_(n){return`${n.key}\0${n.value}`}function Pu(n){return n.map(s_).join("")}function aB(n,e){e.sort((s,a)=>s_(s).localeCompare(s_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Pu(s.labels)===Pu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Pu(s.labels).localeCompare(Pu(a.labels))))}function rB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function pb(n,e,t){n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0==null?n.neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.possession_after_count+=1:n.opponent_possession_after_count+=1,t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0==null?n.kickoff_neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.kickoff_possession_after_count+=1:n.kickoff_opponent_possession_after_count+=1)}function mb(n,e,t){aB(n,[tB(t.is_kickoff),nB(e,t.winning_team_is_team_0),iB(e,t.possession_team_is_team_0),sB(e,t)]),n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0===e&&(n.possession_after_count+=1),t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0===e&&(n.kickoff_possession_after_count+=1))}function oB(n,e){Object.assign(n,e??i_()),e?.labeled_event_counts?n.labeled_event_counts=rB(e.labeled_event_counts):delete n.labeled_event_counts}function _b(n,e){Object.assign(n,e)}function lB(n){const e=yM(n);for(const t of n.frames)e.applyFrame(t);return n}function yM(n){const e=eB(ve(n,"fifty_fifty"));let t=0;const i=fb(),s=fb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function a_(n){return`${n.key}\0${n.value}`}function Iu(n){return n.map(a_).join("")}function xM(n,e){e.sort((s,a)=>a_(s).localeCompare(a_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Iu(s.labels)===Iu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Iu(s.labels).localeCompare(Iu(a.labels))))}function uB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function dB(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"taker_outcome",value:n.outcome},{key:"kickoff_approach",value:n.approach},{key:"approach_flip_direction",value:n.approach_flip_direction}]}function hB(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"support_behavior",value:n.support_behavior}]}function yb(n,e,t){n.count+=1,t.outcome==="neutral"?n.neutral_outcomes+=1:t.outcome===(e?"team_zero_win":"team_one_win")?n.wins+=1:t.outcome===(e?"team_one_win":"team_zero_win")&&(n.losses+=1),t.kickoff_possession_outcome==="contested"?n.contested_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_possession":"team_one_possession")?n.kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_one_possession":"team_zero_possession")?n.opponent_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_advantage":"team_one_advantage")?n.kickoff_possession_advantages+=1:n.opponent_kickoff_possession_advantages+=1,t.kickoff_goal&&(n.kickoff_goal_count+=1,t.scoring_team_is_team_0===e?n.kickoff_goals_for+=1:t.scoring_team_is_team_0!=null&&(n.kickoff_goals_against+=1)),t.win_strength!=null&&(n.win_strength_sample_count+=1,n.cumulative_win_strength+=t.win_strength)}function vb(n,e,t){t&&(t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after,e.boost_after_sample_count+=1,e.cumulative_boost_after+=t.boost_after),t.outcome==="fake"?(n.fake_count+=1,e.fake_count+=1):t.outcome==="missed"&&(n.missed_count+=1,e.missed_count+=1))}function fB(n,e,t){n.count+=1,xM(n,dB(t)),t.outcome==="touched"?n.touches+=1:t.outcome==="fake"?n.fakes+=1:t.outcome==="missed"&&(n.misses+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function pB(n,e,t){n.count+=1,xM(n,hB(t)),t.first_touch_time!=null&&(n.touches+=1),t.support_behavior==="go_for_boost"?n.support_go_for_boosts+=1:t.support_behavior==="cheat"?n.support_cheats+=1:t.support_behavior==="other"&&(n.support_other+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function Lu(n,e,t){const i=vM(t.player),s=n.get(i)??bM();n.set(i,s),"outcome"in t?fB(s,e,t):pB(s,e,t)}function bb(n,e){Object.assign(n,e)}function mB(n,e){Object.assign(n,e??bM()),e?.labeled_event_counts?n.labeled_event_counts=uB(e.labeled_event_counts):delete n.labeled_event_counts}function _B(n){const e=wM(n);for(const t of n.frames)e.applyFrame(t);return n}function wM(n){const e=cB(ve(n,"kickoff"));let t=0;const i=gb(),s=gb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function r_(n){return`${n.key}\0${n.value}`}function ku(n){return n.map(r_).join("")}function vB(n,e){e.sort((s,a)=>r_(s).localeCompare(r_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>ku(s.labels)===ku(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>ku(s.labels).localeCompare(ku(a.labels))))}function bB(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function xB(n){return n==="forward"||n==="reverse"||n==="side"?n:"other"}function wB(n){return n==="left"||n==="right"?n:"center"}function SB(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function TB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function MB(n,e,t,i){n.is_last_flick=i,n.time_since_last_flick=n.last_flick_time==null?null:Math.max(0,SM(t,n.last_flick_time)),n.frames_since_last_flick=n.last_flick_frame==null?null:Math.max(0,e-n.last_flick_frame)}function EB(n,e,t,i){vB(n,[{key:"confidence_band",value:e.confidence>=gB?"high":"standard"},{key:"kind",value:xB(e.kind)},{key:"direction",value:wB(e.direction)}]),n.count=SB(n),n.high_confidence_count=bB(n,"high"),n.is_last_flick=!0,n.last_flick_time=e.time,n.last_flick_frame=e.frame,n.time_since_last_flick=Math.max(0,SM(i,e.time)),n.frames_since_last_flick=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=$p(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=$p(n.cumulative_setup_duration,e.setup_duration),n.cumulative_ball_speed_change=$p(n.cumulative_ball_speed_change,e.ball_speed_change)}function CB(n,e){Object.assign(n,e??TM()),e?.labeled_event_counts?n.labeled_event_counts=TB(e.labeled_event_counts):delete n.labeled_event_counts}function AB(n){const e=MM(n);for(const t of n.frames)e.applyFrame(t);return n}function MM(n){const e=yB(ve(n,"flick"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)MB(o,a.frame_number,a.time,r===i);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function PB(n,e){n.count+=1,n.total_time_to_use+=e.time_since_reset,n.min_time_to_use=n.min_time_to_use===null?e.time_since_reset:Math.min(n.min_time_to_use,e.time_since_reset)}function IB(n,e){Object.assign(n,e??EM())}function LB(n){const e=CM(n);for(const t of n.frames)e.applyFrame(t);return n}function CM(n){const e=RB(ve(n,"flip_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function DB(n,e,t,i){n.is_last_half_volley=i,n.time_since_last_half_volley=n.last_half_volley_time==null?null:Math.max(0,RM(t,n.last_half_volley_time)),n.frames_since_last_half_volley=n.last_half_volley_frame==null?null:Math.max(0,e-n.last_half_volley_frame)}function OB(n,e,t,i){n.count+=1,n.total_ball_speed=AM(n.total_ball_speed,e.ball_speed),n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.last_half_volley_time=e.time,n.last_half_volley_frame=e.frame,n.time_since_last_half_volley=Math.max(0,RM(i,e.time)),n.frames_since_last_half_volley=Math.max(0,t-e.frame)}function FB(n,e){Object.assign(n,e??PM())}function Tb(n,e){Object.assign(n,e)}function NB(n){const e=IM(n);for(const t of n.frames)e.applyFrame(t);return n}function IM(n){const e=kB(ve(n,"half_volley"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)DB(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;te.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:$i(e.player).localeCompare($i(t.player)))}function HB(n){return[...n].sort((e,t)=>e.resolved_frame!==t.resolved_frame?e.resolved_frame-t.resolved_frame:e.resolved_time!==t.resolved_time?e.resolved_time-t.resolved_time:e.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:$i(e.player).localeCompare($i(t.player)))}function Wp(){return{count:0,highConfidenceCount:0,lastTime:null,lastFrame:null,lastResolvedTime:null,lastResolvedFrame:null,lastQuality:null,bestQuality:0,cumulativeQuality:0,labeledCounts:{entries:[]}}}function co(n){return Math.fround(n)}function VB(n,e){return co(co(n)+co(e))}function GB(n,e){return{key:"confidence_band",value:n>=e?"high":"standard"}}function $B(n,e){const t=e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key)),i=n.entries.find(s=>s.labels.length===t.length&&s.labels.every((a,r)=>a.key===t[r]?.key&&a.value===t[r]?.value));if(i){i.count+=1;return}n.entries.push({labels:t,count:1}),n.entries.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels)))}function Uo(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Xp(n,e,t,i,s){n.count+=1,e.confidence>=s&&(n.highConfidenceCount+=1),$B(n.labeledCounts,[GB(e.confidence,s)]),n.lastTime=e.time,n.lastFrame=e.frame,n.lastResolvedTime=i,n.lastResolvedFrame=t,n.lastQuality=e.confidence,n.bestQuality=Math.max(n.bestQuality,e.confidence),n.cumulativeQuality=VB(n.cumulativeQuality,e.confidence)}function Hg(n,e){return n?.lastTime==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,co(co(e.time)-co(n.lastTime)))}function Vg(n,e){return n?.lastFrame==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,e.frame_number-n.lastFrame)}function LM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_speed_flip=i,n.last_speed_flip_time=e?.lastTime??null,n.last_speed_flip_frame=e?.lastFrame??null,n.time_since_last_speed_flip=Hg(e,t),n.frames_since_last_speed_flip=Vg(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Uo(e.labeledCounts):delete n.labeled_event_counts}function kM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_half_flip=i,n.last_half_flip_time=e?.lastTime??null,n.last_half_flip_frame=e?.lastFrame??null,n.time_since_last_half_flip=Hg(e,t),n.frames_since_last_half_flip=Vg(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Uo(e.labeledCounts):delete n.labeled_event_counts}function DM(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_wavedash=i,n.last_wavedash_time=e?.lastTime??null,n.last_wavedash_frame=e?.lastFrame??null,n.time_since_last_wavedash=Hg(e,t),n.frames_since_last_wavedash=Vg(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Uo(e.labeledCounts):delete n.labeled_event_counts}function WB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Uo(n.labeled_event_counts):delete e.labeled_event_counts,e}function XB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Uo(n.labeled_event_counts):delete e.labeled_event_counts,e}function KB(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Uo(n.labeled_event_counts):delete e.labeled_event_counts,e}function qB(n,e){if(e){Object.assign(n,e);return}LM(n,void 0,{frame_number:0,time:0},!1)}function YB(n,e){if(e){Object.assign(n,e);return}kM(n,void 0,{frame_number:0,time:0},!1)}function jB(n,e){if(e){Object.assign(n,e);return}DM(n,void 0,{frame_number:0,time:0},!1)}function ZB(n){return n.is_live_play||n.ball_has_been_hit===!1}function JB(n){const e=OM(n);for(const t of n.frames)e.applyFrame(t);return n}function OM(n){const e=HB(ve(n,"speed_flip")),t=Mb(ve(n,"half_flip")),i=Mb(ve(n,"wavedash"));let s=0,a=0,r=0,o=null,l=null,c=null;const u=new Map,d=new Map,h=new Map,f=new Map,p=new Map,g=new Map;return{applyFrame(_){if(ZB(_)){for(;sQB.map(e=>({labels:[{key:"height_band",value:n},{key:"speed_band",value:e}],value:0}))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function ed(n=!1){return{tracked_time:0,total_distance:0,speed_integral:0,time_slow_speed:0,time_boost_speed:0,time_supersonic_speed:0,time_on_ground:0,time_low_air:0,time_high_air:0,labeled_tracked_time:n?nz():{entries:[]}}}function iz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function sz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function az(n,e,t){const i=sz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=ss(s.value,t):(n.entries.push({labels:i,value:oa(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function rz(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),value:e.value}))}}function Cb(n,e){const t=oa(e.dt);n.tracked_time=ss(n.tracked_time,t),n.total_distance=ss(n.total_distance,e.distance),n.speed_integral=ss(n.speed_integral,tz(e.speed,t)),e.speed_band==="slow"?n.time_slow_speed=ss(n.time_slow_speed,t):e.speed_band==="boost"?n.time_boost_speed=ss(n.time_boost_speed,t):e.speed_band==="supersonic"&&(n.time_supersonic_speed=ss(n.time_supersonic_speed,t)),e.height_band==="ground"?n.time_on_ground=ss(n.time_on_ground,t):e.height_band==="low_air"?n.time_low_air=ss(n.time_low_air,t):e.height_band==="high_air"&&(n.time_high_air=ss(n.time_high_air,t));const i=n.labeled_tracked_time??{entries:[]};n.labeled_tracked_time=i,az(i,[{key:"speed_band",value:e.speed_band},{key:"height_band",value:e.height_band}],t)}function Kp(n,e){const t=e??ed(!0),i=t.labeled_tracked_time;Object.assign(n,t,{labeled_tracked_time:i?rz(i):void 0}),i?.entries.length||delete n.labeled_tracked_time}function oz(n){const e=FM(n);for(const t of n.frames)e.applyFrame(t);return n}function FM(n){const e=iz(ve(n,"movement"));let t=0;const i=new Map,s=ed(),a=ed();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function cz(n,e,t,i){n.is_last_one_timer=i,n.time_since_last_one_timer=n.last_one_timer_time==null?null:Math.max(0,t-n.last_one_timer_time),n.frames_since_last_one_timer=n.last_one_timer_frame==null?null:Math.max(0,e-n.last_one_timer_frame)}function uz(n,e,t,i){n.count+=1,n.total_ball_speed+=e.ball_speed,n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.total_pass_distance+=e.pass_travel_distance,n.last_one_timer_time=e.time,n.last_one_timer_frame=e.frame,n.time_since_last_one_timer=Math.max(0,i-e.time),n.frames_since_last_one_timer=Math.max(0,t-e.frame)}function dz(n,e){Object.assign(n,e??NM())}function Rb(n,e){Object.assign(n,e)}function hz(n){const e=UM(n);for(const t of n.frames)e.applyFrame(t);return n}function UM(n){const e=lz(ve(n,"one_timer"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)cz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.index-t.index}).map(({event:e})=>e)}function pz(n,e,t,i){n.is_last_completed_pass=i,n.time_since_last_completed_pass=n.last_completed_pass_time==null?null:Math.max(0,t-n.last_completed_pass_time),n.frames_since_last_completed_pass=n.last_completed_pass_frame==null?null:Math.max(0,e-n.last_completed_pass_frame)}function mz(n,e,t,i){n.completed_pass_count+=1,n.total_pass_distance+=e.ball_travel_distance,n.total_pass_advance+=e.ball_advance_distance,n.longest_pass_distance=Math.max(n.longest_pass_distance,e.ball_travel_distance),n.last_completed_pass_time=e.time,n.last_completed_pass_frame=e.frame,n.time_since_last_completed_pass=Math.max(0,i-e.time),n.frames_since_last_completed_pass=Math.max(0,t-e.frame)}function _z(n,e){Object.assign(n,e??o_())}function Pb(n,e){Object.assign(n,e)}function gz(n){const e=BM(n);for(const t of n.frames)e.applyFrame(t);return n}function BM(n){const e=fz(ve(n,"pass"));let t=0,i=null;const s=new Map,a={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0},r={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0};return{applyFrame(o){for(const[l,c]of s)pz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function bz(n){return l_(n)}function xz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function zM(n,e,t){const i=xz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=yl(s.value,t):(n.entries.push({labels:i,value:Fl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function wz(n,e){return n.key==="possession_state"&&n.value==="team_zero"?{key:"possession_state",value:e?"own":"opponent"}:n.key==="possession_state"&&n.value==="team_one"?{key:"possession_state",value:e?"opponent":"own"}:n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Ib(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)zM(t,i.labels.map(s=>wz(s,e)),i.value);return{tracked_time:n.tracked_time,possession_time:e?n.team_zero_time:n.team_one_time,opponent_possession_time:e?n.team_one_time:n.team_zero_time,neutral_time:n.neutral_time,labeled_time:t}}function Sz(n,e){n.active=e.active,n.possessionState=e.possession_state}function Tz(n,e,t){if(!e.active)return;const i=Fl(t.dt);n.tracked_time=yl(n.tracked_time,i),e.possessionState==="team_zero"?n.team_zero_time=yl(n.team_zero_time,i):e.possessionState==="team_one"?n.team_one_time=yl(n.team_one_time,i):n.neutral_time=yl(n.neutral_time,i);const s=[{key:"possession_state",value:e.possessionState}];e.fieldThird!=null&&s.push({key:"field_third",value:e.fieldThird}),e.fieldHalf!=null&&s.push({key:"field_half",value:e.fieldHalf}),zM(n.labeled_time,s,i)}function Lb(n,e){Object.assign(n,e??vz())}function Mz(n){const e=HM(n);for(const t of n.frames)e.applyFrame(t);return n}function HM(n){const e=bz(ve(n,"possession")),t=l_(ve(n,"ball_third")),i=l_(ve(n,"ball_half"));let s=0,a=0,r=0;const o=yz(),l={active:!1,possessionState:"neutral",fieldThird:null,fieldHalf:null};return{applyFrame(c){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Oa(n,e){const t=rh(e.player),i=n.get(t)??VM();return n.set(t,i),i}function Cz(n,e){switch(n.active_game_time=Xt(n.active_game_time,e.duration),e.state){case"tracked":n.tracked_time=Xt(n.tracked_time,e.duration);break;case"demolished":n.time_demolished=Xt(n.time_demolished,e.duration);break}}function Az(n,e){switch(e.state){case"defensive":n.time_defensive_third=Xt(n.time_defensive_third,e.duration);break;case"neutral":n.time_neutral_third=Xt(n.time_neutral_third,e.duration);break;case"offensive":n.time_offensive_third=Xt(n.time_offensive_third,e.duration);break}}function Rz(n,e){switch(e.state){case"defensive":n.time_defensive_half=Xt(n.time_defensive_half,e.duration);break;case"offensive":n.time_offensive_half=Xt(n.time_offensive_half,e.duration);break}}function Pz(n,e){switch(e.state){case"behind_ball":n.time_behind_ball=Xt(n.time_behind_ball,e.duration);break;case"level_with_ball":n.time_level_with_ball=Xt(n.time_level_with_ball,e.duration);break;case"ahead_of_ball":n.time_in_front_of_ball=Xt(n.time_in_front_of_ball,e.duration);break}}function Iz(n,e){switch(e.state){case"no_teammates":n.time_no_teammates=Xt(n.time_no_teammates,e.duration);break;case"most_back":n.time_most_back=Xt(n.time_most_back,e.duration);break;case"most_forward":n.time_most_forward=Xt(n.time_most_forward,e.duration);break;case"mid":n.time_mid_role=Xt(n.time_mid_role,e.duration);break;case"other":n.time_other_role=Xt(n.time_other_role,e.duration);break}}function Lz(n,e,t){t.state.closest_to_ball_team&&(e.tracked_time=Xt(e.tracked_time,t.duration),e.time_closest_to_ball_team=Xt(e.time_closest_to_ball_team,t.duration),n.time_closest_to_ball_team=Xt(n.time_closest_to_ball_team,t.duration)),t.state.closest_to_ball_absolute&&(e.time_closest_to_ball_absolute=Xt(e.time_closest_to_ball_absolute,t.duration),n.time_closest_to_ball_absolute=Xt(n.time_closest_to_ball_absolute,t.duration)),t.state.farthest_from_ball&&(n.time_farthest_from_ball=Xt(n.time_farthest_from_ball,t.duration))}function kz(n,e){e.state==="shadowing"&&(n.time_shadow_defense=Xt(n.time_shadow_defense,e.duration))}function Dz(n,e){Object.assign(n,e??VM())}function kb(n,e){Object.assign(n,e??c_())}function Fa(n,e){const t=Ez(n),i=new Array(t.length).fill(0);return{applyThroughFrame(s){for(let a=0;as.frame_number)break;const o=Oz(r,s),l=o-i[a];l>0&&(i[a]=o,e({...r,duration:l}))}}}}function Oz(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function Fz(n){const e=GM(n);for(const t of n.frames)e.applyFrame(t);return n}function GM(n){const e=new Map,t=c_(),i=c_(),s=[Fa(ve(n,"player_activity"),a=>Cz(Oa(e,a),a)),Fa(ve(n,"field_third"),a=>Az(Oa(e,a),a)),Fa(ve(n,"field_half"),a=>Rz(Oa(e,a),a)),Fa(ve(n,"ball_depth"),a=>Pz(Oa(e,a),a)),Fa(ve(n,"depth_role"),a=>Iz(Oa(e,a),a)),Fa(ve(n,"ball_proximity"),a=>Lz(Oa(e,a),a.is_team_0?t:i,a)),Fa(ve(n,"shadow_defense"),a=>kz(Oa(e,a),a))];return{applyFrame(a){for(const r of s)r.applyThroughFrame(a);kb(a.team_zero.positioning,t),kb(a.team_one.positioning,i);for(const r of a.players)Dz(r.positioning,e.get(rh(r.player_id))),Nz(r.positioning,n,r.player_id)}}}function Nz(n,e,t){const i=e.positioning_summary;if(!Array.isArray(i))return;const s=rh(t),a=i.find(r=>!r||typeof r!="object"?!1:rh(r.player_id)===s);a?.distance&&Object.assign(n,a.distance)}function Yp(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function vl(){return{total_duration:0,press_count:0}}function Uz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Bz(n){return n.gameplay_phase==="active_play"||n.gameplay_phase==="kickoff_waiting_for_touch"}function jp(n,e){Object.assign(n,e??vl())}function zz(n){const e=$M(n);for(const t of n.frames)e.applyFrame(t);return n}function $M(n){const e=Uz(ve(n,"powerslide"));let t=0;const i=new Map,s=new Map,a=vl(),r=vl();return{applyFrame(o){const l=Bz(o);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function $z(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function WM(n,e,t){const i=$z(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=bl(s.value,t):(n.entries.push({labels:i,value:Nl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function Wz(n,e){return n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Db(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)WM(t,i.labels.map(s=>Wz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_half_time:e?n.team_zero_side_time:n.team_one_side_time,offensive_half_time:e?n.team_one_side_time:n.team_zero_side_time,neutral_time:n.neutral_time,labeled_time:t}}function Xz(n,e){n.active=e.active,n.fieldHalf=e.field_half}function Kz(n,e,t){if(!e.active)return;const i=Nl(t.dt);n.tracked_time=bl(n.tracked_time,i),e.fieldHalf==="team_zero_side"?n.team_zero_side_time=bl(n.team_zero_side_time,i):e.fieldHalf==="team_one_side"?n.team_one_side_time=bl(n.team_one_side_time,i):n.neutral_time=bl(n.neutral_time,i),WM(n.labeled_time,[{key:"field_half",value:e.fieldHalf}],i)}function Ob(n,e){Object.assign(n,e??Vz())}function qz(n){const e=XM(n);for(const t of n.frames)e.applyFrame(t);return n}function XM(n){const e=Gz(ve(n,"ball_half"));let t=0;const i=Hz(),s={active:!1,fieldHalf:"neutral"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Jz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function KM(n,e,t){const i=Jz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=xl(s.value,t):(n.entries.push({labels:i,value:Ul(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function Qz(n,e){return n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:{...n}}function Fb(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)KM(t,i.labels.map(s=>Qz(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_third_time:e?n.team_zero_third_time:n.team_one_third_time,neutral_third_time:n.neutral_third_time,offensive_third_time:e?n.team_one_third_time:n.team_zero_third_time,labeled_time:t}}function eH(n,e){n.active=e.active,n.fieldThird=e.field_third}function tH(n,e,t){if(!e.active)return;const i=Ul(t.dt);n.tracked_time=xl(n.tracked_time,i),e.fieldThird==="team_zero_third"?n.team_zero_third_time=xl(n.team_zero_third_time,i):e.fieldThird==="team_one_third"?n.team_one_third_time=xl(n.team_one_third_time,i):n.neutral_third_time=xl(n.neutral_third_time,i),KM(n.labeled_time,[{key:"field_third",value:e.fieldThird}],i)}function Nb(n,e){Object.assign(n,e??jz())}function nH(n){const e=qM(n);for(const t of n.frames)e.applyFrame(t);return n}function qM(n){const e=Zz(ve(n,"ball_third"));let t=0;const i=Yz(),s={active:!1,fieldThird:"neutral_third"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function sH(n,e,t){n.session_count+=1,n.session_time=Du(n.session_time,t.duration),n.offensive_half_time=Du(n.offensive_half_time,t.offensive_half_time),n.offensive_third_time=Du(n.offensive_third_time,t.offensive_third_time),n.longest_session_time=Math.max(n.longest_session_time,t.duration),n.average_session_time=n.session_count===0?0:td(n.session_time/n.session_count),e.opponent_session_count+=1,e.opponent_session_time=Du(e.opponent_session_time,t.duration),e.opponent_longest_session_time=Math.max(e.opponent_longest_session_time,t.duration)}function Bb(n,e){Object.assign(n,e)}function aH(n){const e=YM(n);for(const t of n.frames)e.applyFrame(t);return n}function YM(n){const e=iH(ve(n,"territorial_pressure"));let t=0;const i=Ub(),s=Ub();return{applyFrame(a){for(;t=e[t].end_frame;){const r=e[t];sH(r.team_is_team_0?i:s,r.team_is_team_0?s:i,r),t+=1}Bb(a.team_zero.territorial_pressure,i),Bb(a.team_one.territorial_pressure,s)}}}function Yr(n,e){return Math.fround(Math.fround(n)+Math.fround(e))}function jM(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function ZM(){return{active_game_time:0,time_first_man:0,time_second_man:0,time_third_man:0,time_ambiguous_role:0,longest_first_man_stint_time:0,first_man_stint_count:0,became_first_man_count:0,lost_first_man_count:0,current_role_state:"unknown"}}function zb(){return{first_man_changes_for_team:0,rotation_count:0}}function Hb(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function rH(n,e,t,i,s){const a=n.stats;switch(a.active_game_time=Yr(a.active_game_time,t),a.current_role_state=e.state,e.state){case"first_man":{n.lastFirstManEndTime!==null&&e.time-n.lastFirstManEndTime<=s?n.currentFirstManStintTime=Yr(n.currentFirstManStintTime,t):(n.currentFirstManStintTime=t,a.first_man_stint_count+=1),n.lastFirstManEndTime=i,a.longest_first_man_stint_time=Math.max(a.longest_first_man_stint_time,n.currentFirstManStintTime),a.time_first_man=Yr(a.time_first_man,t);break}case"second_man":a.time_second_man=Yr(a.time_second_man,t);break;case"third_man":a.time_third_man=Yr(a.time_third_man,t);break;case"ambiguous":a.time_ambiguous_role=Yr(a.time_ambiguous_role,t);break}}function oH(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function u_(n,e){const t=jM(e),i=n.get(t)??{currentFirstManStintTime:0,lastFirstManEndTime:null,stats:ZM()};return n.set(t,i),i}function lH(n,e,t){n.first_man_changes_for_team+=1,n.rotation_count+=1,u_(e,t.previous_first_man).stats.lost_first_man_count+=1,u_(e,t.next_first_man).stats.became_first_man_count+=1}function cH(n,e){Object.assign(n,e??ZM())}function Vb(n,e){Object.assign(n,e)}function uH(n){const e=JM(n);for(const t of n.frames)e.applyFrame(t);return n}function JM(n){const e=Hb(ve(n,"rotation_role")),t=Hb(ve(n,"first_man_change")),i=n.config.rotation_first_man_stint_end_grace_seconds,s=new Array(e.length).fill(0);let a=0;const r=new Map,o=zb(),l=zb();return{applyFrame(c){for(let u=0;uc.frame_number)break;const h=oH(d,c),f=h-s[u];if(f>0){s[u]=h;const p=c.frame_number>=d.end_frame?d.end_time:Math.min(c.time,d.end_time);rH(u_(r,d.player),d,f,p,i)}}for(;a({event:e,index:t})).sort((e,t)=>e.event.start_frame!==t.event.start_frame?e.event.start_frame-t.event.start_frame:e.event.start_time!==t.event.start_time?e.event.start_time-t.event.start_time:e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.index-t.index).map(({event:e})=>e)}function hH(n,e){n.count+=1,e.attackers===2&&e.defenders===1?n.two_v_one_count+=1:e.attackers===2&&e.defenders===2?n.two_v_two_count+=1:e.attackers===2&&e.defenders===3?n.two_v_three_count+=1:e.attackers===3&&e.defenders===1?n.three_v_one_count+=1:e.attackers===3&&e.defenders===2?n.three_v_two_count+=1:e.attackers===3&&e.defenders===3&&(n.three_v_three_count+=1)}function $b(n,e){Object.assign(n,e)}function fH(n){const e=QM(n);for(const t of n.frames)e.applyFrame(t);return n}function QM(n){const e=dH(ve(n,"rush"));let t=0;const i=Gb(),s=Gb(),a=n.config.rush_min_possession_retained_seconds;return{applyFrame(r){for(;t=e[t].start_frame&&r.time-e[t].start_time>=a;){const o=e[t];hH(o.is_team_0?i:s,o),t+=1}$b(r.team_zero.rush,i),$b(r.team_one.rush,s)}}}const pH=["control","hard_hit","medium_hit"],mH=["ground","high_air","low_air"],_H=["air","ground","wall"],gH=["dodge","no_dodge"];function uo(n){return Math.fround(n)}function nd(n,e){return uo(uo(n)+uo(e))}function eE(n,e){return uo(uo(n)-uo(e))}function Zp(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function yH(){return{entries:gH.flatMap(n=>mH.flatMap(e=>pH.flatMap(t=>_H.map(i=>({labels:[{key:"dodge_state",value:n},{key:"height_band",value:e},{key:"kind",value:t},{key:"surface",value:i}],count:0}))))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function tE(){return{touch_count:0,control_touch_count:0,medium_hit_count:0,hard_hit_count:0,aerial_touch_count:0,high_aerial_touch_count:0,wall_touch_count:0,first_touch_count:0,is_last_touch:!1,last_touch_time:null,last_touch_frame:null,time_since_last_touch:null,frames_since_last_touch:null,last_ball_speed_change:null,max_ball_speed_change:0,cumulative_ball_speed_change:0,total_ball_travel_distance:0,total_ball_advance_distance:0,total_ball_retreat_distance:0,labeled_touch_counts:yH()}}const vH=tE();function Wb(){return{stats:tE(),labeledCountsVersion:0,labeledCountsSnapshot:void 0,labeledCountsSnapshotVersion:-1}}function bH(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function xH(n,e){e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key));const t=n.labeled_touch_counts?.entries??[];n.labeled_touch_counts={entries:t};const i=t.find(s=>s.labels.length===e.length&&s.labels.every((a,r)=>a.key===e[r]?.key&&a.value===e[r]?.value));i?i.count+=1:(t.push({labels:e,count:1}),t.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels))))}function wH(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Ou(n,e){return n.tags?.find(t=>t.group===e)?.value??null}function SH(n,e,t){const i=Ou(e,"kind")??"control",s=Ou(e,"height_band")??"ground",a=Ou(e,"surface")??"ground",r=Ou(e,"dodge_state")??"no_dodge",o=n.stats;o.touch_count+=1,i==="control"?o.control_touch_count+=1:i==="medium_hit"?o.medium_hit_count+=1:i==="hard_hit"&&(o.hard_hit_count+=1),s==="low_air"?o.aerial_touch_count+=1:s==="high_air"&&(o.aerial_touch_count+=1,o.high_aerial_touch_count+=1),a==="wall"&&(o.wall_touch_count+=1),xH(o,[{key:"kind",value:i},{key:"height_band",value:s},{key:"surface",value:a},{key:"dodge_state",value:r}]),n.labeledCountsVersion+=1,o.last_touch_time=e.time,o.last_touch_frame=e.frame,o.time_since_last_touch=Math.max(0,eE(t.time,e.time)),o.frames_since_last_touch=Math.max(0,t.frame_number-e.frame),o.last_ball_speed_change=e.ball_speed_change,o.max_ball_speed_change=Math.max(o.max_ball_speed_change,e.ball_speed_change),o.cumulative_ball_speed_change=nd(o.cumulative_ball_speed_change,e.ball_speed_change)}function TH(n){return n.labeledCountsSnapshotVersion!==n.labeledCountsVersion&&(n.labeledCountsSnapshot=n.stats.labeled_touch_counts?wH(n.stats.labeled_touch_counts):void 0,n.labeledCountsSnapshotVersion=n.labeledCountsVersion),n.labeledCountsSnapshot}function MH(n,e){if(!e){Object.assign(n,vH);return}Object.assign(n,e.stats,{labeled_touch_counts:TH(e)})}function EH(n){const e=nE(n);for(const t of n.frames)e.applyFrame(t);return n}function nE(n){const e=bH(ve(n,"touch")),t=e.flatMap(o=>o.ball_movement?[{player:o.player,movement:o.ball_movement}]:[]).sort((o,l)=>o.movement.end_frame!==l.movement.end_frame?o.movement.end_frame-l.movement.end_frame:o.movement.end_time-l.movement.end_time);let i=0,s=0,a=null;const r=new Map;return{applyFrame(o){if(!o.is_live_play)a=null;else{for(const l of r.values()){const c=l.stats;c.is_last_touch=!1,c.last_touch_time!=null&&(c.time_since_last_touch=Math.max(0,eE(o.time,c.last_touch_time))),c.last_touch_frame!=null&&(c.frames_since_last_touch=Math.max(0,o.frame_number-c.last_touch_frame))}for(;i({event:e,index:t})).sort((e,t)=>e.event.resolved_frame!==t.event.resolved_frame?e.event.resolved_frame-t.event.resolved_frame:e.event.resolved_time!==t.event.resolved_time?e.event.resolved_time-t.event.resolved_time:e.index-t.index).map(({event:e})=>e)}function RH(n,e,t){n.is_last_whiff=!1,n.time_since_last_whiff=n.last_whiff_time==null?null:Math.max(0,t-n.last_whiff_time),n.frames_since_last_whiff=n.last_whiff_frame==null?null:Math.max(0,e-n.last_whiff_frame)}function PH(n,e,t,i){if((e.kind??"whiff")==="beaten_to_ball"){n.beaten_to_ball_count+=1;return}n.whiff_count+=1,e.aerial?n.aerial_whiff_count+=1:n.grounded_whiff_count+=1,e.dodge_active&&(n.dodge_whiff_count+=1),n.is_last_whiff=!0,n.last_whiff_time=e.time,n.last_whiff_frame=e.frame,n.time_since_last_whiff=Math.max(0,i-e.time),n.frames_since_last_whiff=Math.max(0,t-e.frame),n.last_closest_approach_distance=e.closest_approach_distance,n.best_closest_approach_distance=n.best_closest_approach_distance==null?e.closest_approach_distance:Math.min(n.best_closest_approach_distance,e.closest_approach_distance),n.cumulative_closest_approach_distance+=e.closest_approach_distance}function Xb(n,e){Object.assign(n,e??d_())}function IH(n){const e=iE(n);for(const t of n.frames)e.applyFrame(t);return n}function iE(n){const e=AH(ve(n,"whiff"));let t=0,i=null;const s=new Map,a=new Map;return{applyFrame(r){if(r.is_live_play){for(const o of s.values())RH(o,r.frame_number,r.time);for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function DH(n,e,t,i){n.is_last_wall_aerial=i,n.time_since_last_wall_aerial=n.last_wall_aerial_time==null?null:Math.max(0,sE(t,n.last_wall_aerial_time)),n.frames_since_last_wall_aerial=n.last_wall_aerial_frame==null?null:Math.max(0,e-n.last_wall_aerial_frame)}function OH(n,e,t,i){n.count+=1,e.confidence>=LH&&(n.high_confidence_count+=1),n.is_last_wall_aerial=!0,n.last_wall_aerial_time=e.time,n.last_wall_aerial_frame=e.frame,n.time_since_last_wall_aerial=Math.max(0,sE(i,e.time)),n.frames_since_last_wall_aerial=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Fu(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=Fu(n.cumulative_setup_duration,e.setup_duration),n.cumulative_takeoff_to_touch_time=Fu(n.cumulative_takeoff_to_touch_time,e.time_since_takeoff),n.cumulative_touch_height=Fu(n.cumulative_touch_height,e.player_position[2]??0)}function FH(n,e){Object.assign(n,e??aE())}function NH(n){const e=rE(n);for(const t of n.frames)e.applyFrame(t);return n}function rE(n){const e=kH(ve(n,"wall_aerial"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)DH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function zH(n,e,t,i){n.is_last_wall_aerial_shot=i,n.time_since_last_wall_aerial_shot=n.last_wall_aerial_shot_time==null?null:Math.max(0,oE(t,n.last_wall_aerial_shot_time)),n.frames_since_last_wall_aerial_shot=n.last_wall_aerial_shot_frame==null?null:Math.max(0,e-n.last_wall_aerial_shot_frame)}function HH(n,e,t,i){n.count+=1,e.confidence>=UH&&(n.high_confidence_count+=1),n.is_last_wall_aerial_shot=!0,n.last_wall_aerial_shot_time=e.time,n.last_wall_aerial_shot_frame=e.frame,n.time_since_last_wall_aerial_shot=Math.max(0,oE(i,e.time)),n.frames_since_last_wall_aerial_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Qp(n.cumulative_confidence,e.confidence),n.cumulative_takeoff_to_shot_time=Qp(n.cumulative_takeoff_to_shot_time,e.time_since_takeoff),n.cumulative_shot_height=Qp(n.cumulative_shot_height,e.player_position[2]??0)}function VH(n,e){Object.assign(n,e??lE())}function GH(n){const e=cE(n);for(const t of n.frames)e.applyFrame(t);return n}function cE(n){const e=BH(ve(n,"wall_aerial_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)zH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{let r=!1;for(;t[f.frame_number,p])),a=new Map,r={...n,frames:[]},o=KH.flatMap(f=>f.createFrameAccumulator?[f.createFrameAccumulator(r)]:[]),l=Math.max(1,t.materializationChunkSize??$H),c=Math.max(l,t.maxMaterializationChunkSize??WH);let u=-1,d=l;const h=f=>{if(f<=u)return;const p=Math.min(i.length-1,Math.max(f,u+d));for(let g=u+1;g<=p;g+=1){const _=i[g],m=_?ZH(jH(_)):void 0;if(m){for(const v of o)v.applyFrame(m);a.set(m.frame_number,m)}}u=p,d=Math.min(c,i.length,d*XH)};return{get(f){const p=s.get(f);if(p!==void 0)return h(p),a.get(f)}}}function YH(n){return!n||typeof n!="object"?n:{...n}}function jH(n){return{...n,team_zero:{...n.team_zero},team_one:{...n.team_one},players:n.players.map(e=>({...e,player_id:YH(e.player_id)}))}}function ZH(n){return{...n,team_zero:Ql(n.team_zero??{}),team_one:Ql(n.team_one??{}),players:n.players.map(t=>uE(t))}}function ec(n){return n.events?.events??[]}function ve(n,e){return ec(n).filter(t=>t.payload.kind===e).map(t=>t.payload.payload)}const JH=new Set(["is_team_0","name","player_id"]);function Yb(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0}function QH(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.keys(n).every(e=>JH.has(e))}function eV(n){return Yb(n.team_zero)&&Yb(n.team_one)&&n.players.every(e=>QH(e))}function tV(n){return new Map(YT(n).frames.map(e=>[e.frame_number,e]))}function nV(n,e,t){const i=n.frames.filter(s=>eV(s)).length;if(i===n.frames.length)return qH(n,e,t);if(i>0)throw new Error("stats timeline frames must be either all compact scaffolds or all materialized snapshots");return tV(n)}function zt(n,e){return n.get(e)??null}const $g=[{stage:"validating",index:1,total:9,label:"Parse replay",start:0,end:.08},{stage:"processing",index:2,total:9,label:"Process replay frames",start:.08,end:.62},{stage:"building-stats",index:3,total:9,label:"Build stats events",start:.62,end:.7},{stage:"serializing-replay",index:4,total:9,label:"Serialize replay data",start:.7,end:.76},{stage:"serializing-stats",index:5,total:9,label:"Serialize stats timeline",start:.76,end:.86},{stage:"normalizing",index:6,total:9,label:"Normalize replay model",start:.86,end:.91},{stage:"decoding-replay",index:7,total:9,label:"Decode replay data",start:.91,end:.94},{stage:"decoding-stats",index:8,total:9,label:"Decode stats chunks",start:.94,end:.96},{stage:"deriving-stats",index:9,total:9,label:"Derive stats snapshots",start:.96,end:1}];function dE(n){return Math.max(0,Math.min(1,n))}function em(n,e,t){if(n!==void 0)return dE((n-e)/(t-e))}function Wg(n){if(n.stage!=="stats-timeline")return n;const e=n.progress;return e===void 0?{...n,stage:"building-stats"}:e<.35?{...n,stage:"building-stats",progress:em(e,0,.35)}:e<.55?{...n,stage:"serializing-replay",progress:em(e,.35,.55)}:{...n,stage:"serializing-stats",progress:em(e,.55,.92)}}function hE(n){const e=Wg(n);return $g.find(t=>t.stage===e.stage)}function iV(){return $g.map(({stage:n,index:e,total:t,label:i})=>({stage:n,index:e,total:t,label:i}))}function sV(n){const e=hE(n);return{stage:e.stage,index:e.index,total:e.total,label:e.label}}function aV(n){const e=Wg(n),t=hE(e);return $g.map(({stage:i,index:s,total:a,label:r})=>{if(st.index)return{stage:i,index:s,total:a,label:r,state:"pending",completion:0,indeterminate:!1};const o=e.progress!==void 0;return{stage:i,index:s,total:a,label:r,state:"active",completion:o?dE(e.progress??0):1,indeterminate:!o}})}function lf(n){const e=Wg(n),t=e.progress===void 0?null:Math.round(e.progress*100);switch(e.stage){case"validating":return"Parsing replay...";case"processing":return t!==null&&e.totalFrames!==void 0?`Processing replay frames... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:"Processing replay frames...";case"building-stats":return t!==null?e.totalFrames!==void 0?`Building stats events... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:`Building stats events... ${t}%`:"Building stats events...";case"serializing-replay":return t!==null?`Serializing replay data... ${t}%`:"Serializing replay data...";case"serializing-stats":return t!==null?`Serializing stats timeline... ${t}%`:"Serializing stats timeline...";case"decoding-replay":return t!==null?`Decoding replay data... ${t}%`:"Decoding replay data...";case"decoding-stats":return t!==null?e.totalChunks!==void 0?`Decoding stats chunks... ${t}% (${e.processedChunks??0}/${e.totalChunks})`:`Decoding stats chunks... ${t}%`:"Decoding stats chunks...";case"deriving-stats":return t!==null?`Deriving stats snapshots... ${t}%`:"Deriving stats snapshots...";case"normalizing":return t!==null?`Normalizing replay model... ${t}%`:"Normalizing replay model...";default:return"Loading replay..."}}function rV(n){return n instanceof Error?n:new Error(String(n))}function Rs(n,e){return JSON.parse(n.decode(new Uint8Array(e)))}async function oV(n,e,t){t?.({stage:"decoding-stats",progress:0});const i=Rs(n,e.configBuffer);t?.({stage:"decoding-stats",progress:.05}),await Ja();const s=Rs(n,e.replayMetaBuffer);t?.({stage:"decoding-stats",progress:.1}),await Ja();const a=Rs(n,e.eventsBuffer),r=Rs(n,e.activitySummaryBuffer),o=Rs(n,e.positioningSummaryBuffer),l=Rs(n,e.accumulationTracksBuffer);t?.({stage:"decoding-stats",progress:.15}),await Ja();const c=[],u=e.frameChunkBuffers.length;for(let d=0;d{let t=!1,i=null;const s=()=>{t||(t=!0,i!==null&&clearTimeout(i),e())};i=setTimeout(s,n),requestAnimationFrame(()=>s())})}async function fE(n,e={}){if(typeof Worker>"u")throw new Error("Replay loading worker is not available in this environment");const t=new Worker(new URL(""+new URL("replayLoader.worker-BOmyAjmY.js",import.meta.url).href,import.meta.url),{type:"module"}),i=n.slice(),s=e.reportEveryNFrames??100;return new Promise((a,r)=>{const o=()=>{t.terminate()};t.onmessage=async c=>{const u=c.data;if(u.type==="progress"){e.onProgress?.(u.progress);return}if(u.type==="error"){o(),r(new Error(u.error));return}o();try{const d=new TextDecoder;e.onProgress?.({stage:"decoding-replay",progress:0}),await Ja();const h=Rs(d,u.replayBuffer);e.onProgress?.({stage:"decoding-replay",progress:.5}),await Ja();const f=Rs(d,u.rawReplayBuffer);e.onProgress?.({stage:"decoding-replay",progress:1}),await Ja();const p=await oV(d,u.statsTimelineParts,e.onProgress),g=nV(p);a({replay:h,raw:f,statsTimeline:p,statsFrameLookup:g})}catch(d){r(rV(d))}},t.onerror=c=>{o(),r(new Error(c.message||"Replay loading worker failed"))};const l={type:"load-replay",bytes:i.buffer,reportEveryNFrames:s};t.postMessage(l,[i.buffer])})}function lV(n){const e=document.createElement("div");e.className="replay-load-modal",e.hidden=!0;const t=document.createElement("div");t.className="replay-load-modal__dialog",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","replay-load-modal-title");const i=document.createElement("p");i.className="replay-load-modal__eyebrow",i.textContent="Replay loading";const s=document.createElement("h2");s.id="replay-load-modal-title",s.className="replay-load-modal__title",s.textContent="Preparing replay pipeline";const a=document.createElement("p");a.className="replay-load-modal__status",a.textContent="Preparing replay...";const r=document.createElement("div");r.className="replay-load-modal__phase-list";const o=new Map;for(const f of iV()){const p=document.createElement("div");p.className="replay-load-modal__phase-row",p.dataset.state="pending";const g=document.createElement("p");g.className="replay-load-modal__phase-label",g.textContent=`${f.index}. ${f.label}`;const _=document.createElement("div");_.className="replay-load-modal__phase-bar";const m=document.createElement("div");m.className="replay-load-modal__phase-fill",m.dataset.indeterminate="false",_.append(m),p.append(g,_),r.append(p),o.set(f.stage,{row:p,fill:m})}const l=document.createElement("p");l.className="replay-load-modal__meta",t.append(i,s,a,r,l),e.append(t),n.append(e);let c="";const u=()=>{for(const{row:f,fill:p}of o.values())f.dataset.state="pending",p.style.width="0%",p.dataset.indeterminate="false"},d=f=>{for(const p of aV(f)){const g=o.get(p.stage);g&&(g.row.dataset.state=p.state,g.fill.dataset.indeterminate=p.indeterminate?"true":"false",g.fill.style.width=`${Math.round(p.completion*100)}%`)}},h=f=>{e.hidden=!f};return{show(f,p="Preparing replay..."){c=f,h(!0),u(),s.textContent="Preparing replay pipeline",a.textContent=p,l.textContent=`Loading ${f}`},update(f){h(!0);const p=sV(f);if(d(f),s.textContent=`Phase ${p.index} of ${p.total}: ${p.label}`,a.textContent=lf(f),f.stage==="processing"&&f.totalFrames!==void 0){l.textContent=`${f.processedFrames??0}/${f.totalFrames} frames`;return}if(f.stage==="decoding-stats"&&f.totalChunks!==void 0){l.textContent=`${f.processedChunks??0}/${f.totalChunks} chunks`;return}l.textContent=c?`Loading ${c}`:""},hide(){h(!1)},destroy(){e.remove()}}}const cV=["free","follow"];function pE(n){return n.useReplayBallCam??!1?"player":n.ballCamEnabled?"on":"off"}function jb(n){return n.useReplayBallCam?"player":n.ballCam===!0?"on":n.ballCam===!1?"off":"player"}const mE={fov:110,height:100,pitch:-4,distance:270,stiffness:0,swivelSpeed:1,transitionSpeed:1};class Xg{constructor(e){this.options=e}lastFreeCameraPreset=null;get freeCameraPreset(){return this.lastFreeCameraPreset}set freeCameraPreset(e){this.lastFreeCameraPreset=e}ballCamModeValue="player";get ballCamMode(){return this.ballCamModeValue}autoPossessionEnabledValue=!1;get autoPossessionEnabled(){return this.autoPossessionEnabledValue}static ballCamEnabledForMode(e){return e==="player"?null:e==="on"}followPlayerWithReplayCamera(e,t={}){const i=this.options.getReplayPlayer();i&&(t.preserveAutoPossession||this.setAutoPossessionEnabled(!1,{requestConfigSync:!1}),i.setAttachedPlayer(e),i.setCameraViewMode("follow"),t.usePlayerCameraSettings!==!1&&i.setCustomCameraSettings(null),this.setBallCamMode(t.ballCam??"player"),this.lastFreeCameraPreset=null,t.requestConfigSync!==!1&&this.options.requestConfigSync())}setAutoPossessionEnabled(e,t={}){if(this.autoPossessionEnabledValue===e){this.renderAutoPossessionButton();return}this.autoPossessionEnabledValue=e,this.renderAutoPossessionButton(),t.notify!==!1&&this.options.onAutoPossessionChange?.(e),t.requestConfigSync!==!1&&this.options.requestConfigSync()}renderBallCamButtons(){const{ballCamOffButton:e,ballCamOnButton:t,ballCamPlayerButton:i}=this.options.elements,s=[["off",e],["on",t],["player",i]];for(const[a,r]of s){const o=a===this.ballCamModeValue;r.dataset.active=o?"true":"false",r.setAttribute("aria-pressed",o?"true":"false")}}renderAutoPossessionButton(){this.options.elements.cameraViewAutoPossession.checked=this.autoPossessionEnabledValue}disableAutoPossessionForManualCameraControl(){this.setAutoPossessionEnabled(!1,{requestConfigSync:!1})}setBallCamMode(e){this.ballCamModeValue=e,this.options.getReplayPlayer()?.setBallCamEnabled(Xg.ballCamEnabledForMode(e)),this.renderBallCamButtons()}get nameplateLiftUu(){const e=Number(this.options.elements.nameplateLift.value);return Number.isFinite(e)?e:Wm}applyNameplateLiftUu(e){const{nameplateLift:t,nameplateLiftReadout:i}=this.options.elements,s=e??Wm;t.value=`${s}`,i.textContent=qn(s,"",0)}installEventListeners(e){const{elements:t}=this.options;t.usePlayerCameraSettings.addEventListener("change",()=>{const s=t.usePlayerCameraSettings.checked;t.cameraSettingsControls.hidden=s,this.options.getReplayPlayer()?.setCustomCameraSettings(s?null:this.readCustomCameraSettings()),this.options.requestConfigSync()},{signal:e});for(const s of[t.customCameraFov,t.customCameraHeight,t.customCameraPitch,t.customCameraDistance,t.customCameraStiffness,t.customCameraSwivelSpeed,t.customCameraTransitionSpeed])s.addEventListener("input",()=>{const a=this.readCustomCameraSettings();this.syncCustomCameraSettingControls(a),this.options.getReplayPlayer()?.setCustomCameraSettings(a),this.options.requestConfigSync()},{signal:e});t.attachedPlayer.addEventListener("change",()=>{const s=this.options.getReplayPlayer(),a=t.attachedPlayer.value||null;this.disableAutoPossessionForManualCameraControl(),s?.setAttachedPlayer(a),a&&(s?.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFreeButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setCameraViewMode("free"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFollowButton.addEventListener("click",()=>{const s=this.options.getReplayPlayer();this.disableAutoPossessionForManualCameraControl(),s?.setCameraViewMode("follow"),s?.getState().attachedPlayerId&&(s.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewOverheadButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("overhead"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="overhead",this.options.requestConfigSync()},{signal:e}),t.cameraViewSideButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("side"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="side",this.options.requestConfigSync()},{signal:e});const i=[["off",t.ballCamOffButton],["on",t.ballCamOnButton],["player",t.ballCamPlayerButton]];for(const[s,a]of i)a.addEventListener("click",()=>{this.setBallCamMode(s),this.options.requestConfigSync()},{signal:e});t.cameraViewAutoPossession.addEventListener("change",()=>{this.setAutoPossessionEnabled(t.cameraViewAutoPossession.checked)},{signal:e}),t.nameplateLift.addEventListener("input",()=>{t.nameplateLiftReadout.textContent=qn(this.nameplateLiftUu,"",0),this.options.requestConfigSync()},{signal:e})}setTransportEnabled(e,t){this.options.elements.attachedPlayer.disabled=!e,this.syncModeButtons(e?t:void 0)}syncState(e){const{elements:t}=this.options;t.usePlayerCameraSettings.checked=e.customCameraSettings===null,t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,this.syncCustomCameraSettingControls(e.customCameraSettings??this.getFallbackCameraSettings()),this.ballCamModeValue=pE(e),this.renderBallCamButtons(),t.attachedPlayer.value=e.attachedPlayerId??"",this.syncAvailability(e),this.renderProfile(e)}syncAvailability(e){this.syncModeButtons(e);const i=this.options.getReplayPlayer()!==null&&e?.cameraViewMode==="follow"&&(e.attachedPlayerId??null)!==null;this.options.elements.usePlayerCameraSettings.disabled=!i,this.setCameraSettingControlsEnabled(i&&e?.customCameraSettings!==null),this.options.elements.ballCamOffButton.disabled=!i,this.options.elements.ballCamOnButton.disabled=!i,this.options.elements.ballCamPlayerButton.disabled=!i,this.renderBallCamButtons()}syncModeButtons(e){const t=e?.cameraViewMode??"free",i=this.options.getReplayPlayer()!==null&&e!==void 0,s=(e?.attachedPlayerId??null)!==null;for(const l of cV){const c=this.getCameraViewButton(l);c.disabled=!i||l==="follow"&&!s;const u=l===t;c.dataset.active=u?"true":"false",c.setAttribute("aria-pressed",u?"true":"false")}const{cameraViewOverheadButton:a,cameraViewSideButton:r}=this.options.elements,{cameraViewAutoPossession:o}=this.options.elements;a.disabled=!i,r.disabled=!i,o.disabled=!i,a.dataset.active="false",r.dataset.active="false",this.renderAutoPossessionButton(),a.setAttribute("aria-pressed","false"),r.setAttribute("aria-pressed","false")}populateAttachedPlayerOptions(e){const{attachedPlayer:t}=this.options.elements;t.replaceChildren(),t.append(new Option("Free camera",""));for(const i of e)t.append(new Option(`${i.name} (${i.isTeamZero?"Blue":"Orange"})`,i.id))}renderProfile(e){const t=this.options.elements,i=this.options.getReplayPlayer(),s=e?.attachedPlayerId??null;if(!i||e?.cameraViewMode!=="follow"||s===null){this.renderEmptyProfile("Free camera");return}const a=i.replay.players.find(o=>o.id===s);if(!a){this.renderEmptyProfile("Unknown");return}const r=this.getEffectiveCameraSettings(e);t.cameraProfileReadout.textContent=e.customCameraSettings===null?a.name:`${a.name} custom`,t.cameraFovReadout.textContent=qn(r.fov,"",0),t.cameraHeightReadout.textContent=qn(r.height,"",0),t.cameraPitchReadout.textContent=qn(r.pitch,"",0),t.cameraBaseDistanceReadout.textContent=qn(r.distance,"",0),t.cameraStiffnessReadout.textContent=qn(r.stiffness,"",2)}getFallbackCameraSettings(){return mE}getAttachedPlayerCameraSettings(e){const t=this.options.getReplayPlayer();return!t||e===null?null:t.replay.players.find(i=>i.id===e)?.cameraSettings??null}getEffectiveCameraSettings(e){return{...this.getFallbackCameraSettings(),...this.getAttachedPlayerCameraSettings(e.attachedPlayerId)??{},...e.customCameraSettings??{}}}readCustomCameraSettings(){const e=this.options.elements;return{fov:Number(e.customCameraFov.value),height:Number(e.customCameraHeight.value),pitch:Number(e.customCameraPitch.value),distance:Number(e.customCameraDistance.value),stiffness:Number(e.customCameraStiffness.value),swivelSpeed:Number(e.customCameraSwivelSpeed.value),transitionSpeed:Number(e.customCameraTransitionSpeed.value)}}setCameraSettingControlsEnabled(e){const t=this.options.elements;t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,t.customCameraFov.disabled=!e,t.customCameraHeight.disabled=!e,t.customCameraPitch.disabled=!e,t.customCameraDistance.disabled=!e,t.customCameraStiffness.disabled=!e,t.customCameraSwivelSpeed.disabled=!e,t.customCameraTransitionSpeed.disabled=!e}syncCustomCameraSettingControls(e){const t=this.options.elements,i=this.getFallbackCameraSettings(),s=e.fov??i.fov,a=e.height??i.height,r=e.pitch??i.pitch,o=e.distance??i.distance,l=e.stiffness??i.stiffness,c=e.swivelSpeed??i.swivelSpeed,u=e.transitionSpeed??i.transitionSpeed;t.customCameraFov.value=`${s}`,t.customCameraHeight.value=`${a}`,t.customCameraPitch.value=`${r}`,t.customCameraDistance.value=`${o}`,t.customCameraStiffness.value=`${l}`,t.customCameraSwivelSpeed.value=`${c}`,t.customCameraTransitionSpeed.value=`${u}`,t.customCameraFovReadout.textContent=qn(s,"",0),t.customCameraHeightReadout.textContent=qn(a,"",0),t.customCameraPitchReadout.textContent=qn(r,"",0),t.customCameraDistanceReadout.textContent=qn(o,"",0),t.customCameraStiffnessReadout.textContent=qn(l,"",2),t.customCameraSwivelSpeedReadout.textContent=qn(c,"",1),t.customCameraTransitionSpeedReadout.textContent=qn(u,"",2)}getCameraViewButton(e){switch(e){case"free":return this.options.elements.cameraViewFreeButton;case"follow":return this.options.elements.cameraViewFollowButton}}renderEmptyProfile(e){const t=this.options.elements;t.cameraProfileReadout.textContent=e,t.cameraFovReadout.textContent="--",t.cameraHeightReadout.textContent="--",t.cameraPitchReadout.textContent="--",t.cameraBaseDistanceReadout.textContent="--",t.cameraStiffnessReadout.textContent="--"}}function qn(n,e="",t=0){return n===void 0||Number.isNaN(n)?"--":`${n.toFixed(t)}${e}`}function uV(n){return new Xg(n)}const Zb="subtr-actor-touch-overlay-styles",Kg=5882879,qg=16761180,Jb=120,Qb=4,dV=196,tm=24,ex=210,tx=5,hV=.1,fV=48,pV=["team","intention","kind","height_band","surface","dodge_state","flag"],mV=[{label:"Blue team",color:Kg},{label:"Orange team",color:qg}],_E=[{label:"Shot",color:16711880},{label:"Save",color:58998},{label:"Clear",color:16764928},{label:"Boom",color:16020150},{label:"Pass",color:47103},{label:"Control",color:0},{label:"Advance",color:16486972}],id=[{label:"Control",color:0},{label:"Medium hit",color:16436245},{label:"Hard hit",color:16735596}],sd=[{label:"Ground",color:10741301},{label:"Low air",color:3718648},{label:"High air",color:8490232}],gE=[{label:"Ground",color:8702998},{label:"Air",color:6333946},{label:"Wall",color:16347926}],h_=[{label:"No dodge",color:9741240},{label:"Dodge",color:15235577}],f_=[{label:"First touch",color:16777215},{label:"Contested",color:15680580}],_V=[{title:"Team",entries:mV},{title:"Intention",entries:_E},{title:"Hit strength",entries:id},{title:"Height",entries:sd},{title:"Surface",entries:gE},{title:"Dodge",entries:h_},{title:"Flags",entries:f_}];function gc(n){return Object.fromEntries(n.map(e=>[e.label.toLowerCase().replaceAll(" ","_"),e.color]))}const yE=gc(_E),vE={...gc(id),medium_hit:id[1].color,hard_hit:id[2].color},bE={...gc(sd),low_air:sd[1].color,high_air:sd[2].color},xE=gc(gE),wE={...gc(h_),no_dodge:h_[0].color},p_={first_touch:f_[0].color,contested:f_[1].color},Gi=10134961;function jn(n,e){const t=n.tags;if(!Array.isArray(t))return null;const i=t.find(s=>s.group===e);return i?i.value:null}function SE(n){return jn(n,"possession")??jn(n,"action")}function At(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function nm(n,e){return Math.max(0,n-e)}function ad(n){return n==="team"||n==="intention"||n==="kind"||n==="height_band"||n==="surface"||n==="dodge_state"||n==="flag"}function po(n){const e=Array.isArray(n)?n:n?[n]:["team"],t=new Set,i=[];for(const s of e)ad(s)&&!t.has(s)&&(t.add(s),i.push(s));return i.length>0?i:["team"]}function TE(n){return n[n.length-1]??"team"}function gV(n,e,t){const i=yV(n,TE(t)),s=i?` · ${i.replaceAll("_"," ")}`:"";if(e==="markers")return`${n.playerName}${s}`;const a=Math.round(n.totalBallAdvanceDistance),r=Math.round(n.totalBallRetreatDistance);return a>0&&r>0?`${n.playerName} +${a} / -${r} uu${s}`:r>0?`${n.playerName} -${r} uu${s}`:`${n.playerName} +${a} uu${s}`}function yV(n,e){return e==="intention"?n.intention:e==="kind"?n.kind:e==="height_band"?n.heightBand:e==="surface"?n.surface:e==="dodge_state"?n.dodgeState:e==="flag"?n.contested?"contested":n.firstTouch?"first_touch":null:null}function vV(n){return n.split("_").filter(Boolean).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function ol(n,e,t){return typeof e!="string"||e.length===0?null:{key:n,value:e,label:vV(e),color:t[e]??Gi}}function nx(n,e,t){return e!==!0?null:{key:n,value:"true",label:t,color:p_[n]??Gi}}function bV(n){const e=jn(n,"reception")==="first_touch",t=jn(n,"contested")!=null;return[ol("intention",SE(n),yE),ol("kind",jn(n,"kind"),vE),ol("height_band",jn(n,"height_band"),bE),ol("surface",jn(n,"surface"),xE),ol("dodge_state",jn(n,"dodge_state"),wE),nx("first_touch",e,"First touch"),nx("contested",t,"Contested")].filter(i=>i!=null)}function ME(n,e){return e==="intention"?yE[n.intention??""]??Gi:e==="kind"?vE[n.kind??""]??Gi:e==="height_band"?bE[n.heightBand??""]??Gi:e==="surface"?xE[n.surface??""]??Gi:e==="dodge_state"?wE[n.dodgeState??""]??Gi:e==="flag"?n.contested?p_.contested??Gi:n.firstTouch?p_.first_touch??Gi:Gi:n.isTeamZero?Kg:qg}function xV(n,e){return(e.length>0?e:["team"]).map(i=>ME(n,i))}function EE(n,e){const t=[],i=[...ve(n,"touch")].sort((s,a)=>s.frame!==a.frame?s.frame-a.frame:s.time!==a.time?s.time-a.time:0);for(const s of i){const a=At(s.player),r=e.ballFrames[s.frame]?.position;if(!r)continue;const o=s.ball_movement,c=(o?e.ballFrames[o.end_frame]?.position:null)??r,u=t.length,d=bV(s);t.push({id:`touch-stat:${s.frame}:${a}:${u+1}`,time:e.frames[s.frame]?.time??s.time,frame:s.frame,isTeamZero:s.is_team_0,playerId:a,playerName:e.players.find(h=>h.id===a)?.name??a,kind:jn(s,"kind"),intention:SE(s),heightBand:jn(s,"height_band"),surface:jn(s,"surface"),dodgeState:jn(s,"dodge_state"),firstTouch:jn(s,"reception")==="first_touch",contested:jn(s,"contested")!=null,classifications:d,position:{x:r.x,y:r.y,z:r.z},endPosition:{x:c.x,y:c.y,z:c.z},totalBallTravelDistance:o?nm(o.travel_distance,0):0,totalBallAdvanceDistance:o?nm(o.advance_distance,0):0,totalBallRetreatDistance:o?nm(o.retreat_distance,0):0})}return t}function wV(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function SV(){if(document.getElementById(Zb))return;const n=document.createElement("style");n.id=Zb,n.textContent=` .sap-touch-overlay-root { position: absolute; inset: 0; @@ -5504,45 +5569,45 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function KH(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}function gE(n){return[n.line.material,n.cone.material].flatMap(e=>Array.isArray(e)?e:[e])}function Yb(n,e){for(const t of gE(n))t.transparent=!0,t.opacity=e,t.depthWrite=!1,t.depthTest=!1}function jb(n){n.removeFromParent(),n.line.geometry.dispose(),n.cone.geometry.dispose();for(const e of gE(n))e.dispose()}function l_(n){for(const e of n.ringSegments){e.removeFromParent(),e.geometry.dispose();const t=Array.isArray(e.material)?e.material:[e.material];for(const i of t)i.dispose()}n.ringSegments=[],n.ringColorsKey=""}function qH(n,e,t){const i=new ni(e,t,48,1),s=new Ye({color:n,transparent:!0,opacity:.7,side:ct,depthWrite:!1,depthTest:!1}),a=new we(i,s);return a.rotation.x=-Math.PI/2,a.renderOrder=40,a}function YH(n,e){const t=e.length>0?e:[Vi],i=t.join("|");if(n.ringColorsKey===i)return;l_(n);const s=t.length,a=Wb*Math.max(0,s-1),r=(kH-$b-a)/s,o=t.map((l,c)=>{const u=$b+c*(r+Wb);return qH(l,u,u+r)});for(const l of o)n.ring.add(l),n.ringSegments.push(l);n.ringColorsKey=i}function jH(n,e){for(const t of n.ringSegments){const i=Array.isArray(t.material)?t.material:[t.material];for(const s of i)s.opacity=e}}class ZH{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;arrowStart=new S;arrowEnd=new S;arrowDirection=new S;labelOffset=new S(0,0,Xb);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=Kb;mode="markers";colorModes=["team"];constructor(e,t,i,s,a){XH(),this.scene=e,this.container=t,this.decaySeconds=Math.max(.1,a?.decaySeconds??Kb),this.mode=a?.mode??"markers",this.colorModes=ho(a?.colorModes??a?.colorMode),this.labelOffset.set(0,0,Xb),this.markers=_E(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="touch-event-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-touch-overlay-root",this.container.append(this.labelRoot)}getDecaySeconds(){return this.decaySeconds}setDecaySeconds(e){this.decaySeconds=Math.max(.1,e)}getMode(){return this.mode}setMode(e){this.mode=e}getColorModes(){return[...this.colorModes]}setColorMode(e){this.setColorModes([e])}setColorModes(e){this.colorModes=ho([...e])}update(e){const t=WH(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),l_(a),jb(a.arrow),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.1+.6*r,c=.95+(1-r)*.28,u=pE(this.colorModes),d=mE(s,u),h=$H(s,this.colorModes);YH(o,h),jH(o,l),o.arrow.setColor(d),o.ring.position.set(s.position.x,s.position.y,s.position.z+qp),o.ring.scale.setScalar(c),o.label.textContent=zH(s,this.mode,this.colorModes),o.label.classList.toggle("sap-touch-overlay-label-advancement",this.mode==="advancement");const f=u==="team";o.label.classList.toggle("sap-touch-overlay-label-blue",f&&s.isTeamZero),o.label.classList.toggle("sap-touch-overlay-label-orange",f&&!s.isTeamZero),o.label.style.borderColor=f?"":`#${d.toString(16).padStart(6,"0")}cc`,o.label.style.background=f?"":`#${d.toString(16).padStart(6,"0")}66`,this.updateArrow(o,s,l),this.worldPosition.set(s.position.x,s.position.y,s.position.z),this.worldPosition.add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),KH(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.22+.78*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),l_(e),jb(e.arrow),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Mt;i.renderOrder=40,this.group.add(i);const s=new Tg(new S(0,1,0),new S,1,e.isTeamZero?zg:Hg,1,1);s.visible=!1,s.renderOrder=45,s.line.renderOrder=45,s.cone.renderOrder=45,Yb(s,.7),this.group.add(s);const a=document.createElement("div");a.className=`sap-touch-overlay-label ${e.isTeamZero?"sap-touch-overlay-label-blue":"sap-touch-overlay-label-orange"}`,a.textContent=e.playerName,a.hidden=!0,this.labelRoot.append(a);const r={marker:e,ring:i,ringSegments:[],ringColorsKey:"",arrow:s,label:a};return this.views.set(e.id,r),r}updateArrow(e,t,i){if(this.mode!=="advancement"||t.totalBallTravelDistance<=OH){e.arrow.visible=!1;return}this.arrowStart.set(t.position.x,t.position.y,t.position.z+qp*2),this.arrowEnd.set(t.endPosition.x,t.endPosition.y,t.endPosition.z+qp*2),this.arrowDirection.copy(this.arrowEnd).sub(this.arrowStart);const s=this.arrowDirection.length();if(s0&&r>0)return a/r}const t=n.frames[0],i=n.frames.at(-1);if(t&&i){const s=i.frame_number-t.frame_number,a=i.time-t.time;if(s>0&&a>0)return s/a}return tV}function iV(n,e={}){if(!n)return[];const t=e.preRollSeconds??JH,i=e.minPossessionSeconds??QH,s=e.samePlayerBridgeSeconds??eV,a=ve(n,"player_possession").map(d=>({playerId:At(d.player_id),startFrame:Math.max(0,Math.trunc(al(d.start_frame))),endFrame:Math.max(0,Math.trunc(al(d.end_frame))),startTime:al(d.start_time),endTime:al(d.end_time),duration:al(d.duration),sustainedControl:d.sustained_control})).filter(d=>d.endFrame>d.startFrame&&(d.sustainedControl||d.duration>=i)).sort((d,h)=>d.startFrame-h.startFrame||d.endFrame-h.endFrame),r=nV(n,a),o=Math.max(0,Math.round(t*r)),l=Math.max(0,Math.round(s*r)),c=[];let u=null;for(const d of a){let h=Math.max(0,d.startFrame-o);u&&u.playerId!==d.playerId&&(h=Math.max(h,u.endFrame));const f=c.at(-1);if(f&&f.playerId===d.playerId&&h<=f.endFrame+l){c[c.length-1]={...f,endFrame:Math.max(f.endFrame,d.endFrame),possessionEndFrame:Math.max(f.possessionEndFrame,d.endFrame)},u=d;continue}c.push({playerId:d.playerId,startFrame:h,endFrame:d.endFrame,possessionStartFrame:d.startFrame,possessionEndFrame:d.endFrame}),u=d}return c.map((d,h)=>({...d,endFrame:c[h+1]?.startFrame??Number.POSITIVE_INFINITY}))}function sV(n,e){const t=Math.max(0,Math.trunc(e));return n.find(s=>t>=s.startFrame&&tthis.update(i))))}reset(){this.unsubscribeBeforeRender?.(),this.unsubscribeBeforeRender=null,this.sourcePlayer=null,this.sourceTimeline=null,this.spans=[]}syncCurrentFrame(){const e=this.options.getReplayPlayer();if(!e)return;const t=e.getState();this.update({frameIndex:t.frameIndex,nextFrameIndex:t.frameIndex,alpha:0,currentTime:t.currentTime})}update(e){const t=this.options.getCameraControlsController(),i=this.options.getReplayPlayer();if(!t?.autoPossessionEnabled||!i)return;const s=sV(this.spans,e.frameIndex);if(!s||!i.replay.players.some(r=>r.id===s))return;const a=i.getState();a.cameraViewMode==="follow"&&a.attachedPlayerId===s||t.followPlayerWithReplayCamera(s,{ballCam:"player",preserveAutoPossession:!0,requestConfigSync:!1,usePlayerCameraSettings:!1})}}function rV(n){return new aV(n)}const oV=236,Zl=4120,lV=2300,cV=16185075,uV=.18,dV=1118481,td=5882879,nd=16761180,hV=.55,jp=.12,Zb=.28,fV=3,pV=4,Jb=5,Qb=2,mV=6,_V=856343,gV=.42,yV=18,vV=.24,bV=10,ex=220,xV=200,yE=140,wV=220,SV=100,TV=120;function MV(n){const e=xV/2;if(n){const s=-Zl+ex,a=-e;return{minX:s,maxX:a,centerX:(s+a)/2,width:a-s}}const t=e,i=Zl-ex;return{minX:t,maxX:i,centerX:(t+i)/2,width:i-t}}function EV(n,e,t){if(n.length<2)return[];const i=Math.min(...n),s=Math.max(...n),a=s-i,r=e?-1:1,o=-r;return a<=t?[{kind:"other",centerY:(i+s)/2,halfDepth:Math.max(t-a/2,t*.35),directions:[r,o]}]:[{kind:"back",centerY:e?i:s,halfDepth:t,directions:[r]},{kind:"forward",centerY:e?s:i,halfDepth:t,directions:[o]}]}function CV(n,e){const t=new Ns;return t.moveTo(0,e/2),t.lineTo(n/2,-e/2),t.lineTo(-n/2,-e/2),t.closePath(),new ur(t)}function tx(n){const e=SV*n,t=new Ye({color:dV,transparent:!0,opacity:.9,side:ct,depthWrite:!1,depthTest:!1}),i=new Mt;i.visible=!1;const s=new Dn(yE*.55*n,1),a=new we(s,t);a.position.z=Jb,a.renderOrder=22,i.add(a);const r=CV(TV*n,e),o=new we(r,t);return o.position.z=Jb,o.renderOrder=23,i.add(o),{group:i,shaftGeom:s,shaftMesh:a,headGeom:r,headMesh:o,material:t,headLength:e}}function Zp(n,e,t,i){const s=Math.max(t-n.headLength,n.headLength*.2);n.group.position.x=e,n.group.rotation.z=i>0?0:Math.PI,n.shaftMesh.scale.y=s,n.shaftMesh.position.y=-n.headLength/2,n.headMesh.position.y=t/2-n.headLength/2,n.group.visible=!0}function th(n){n.group.visible=!1}function qr(n,e){const t=new Mt;t.visible=!1;const i=new Ye({color:cV,transparent:!0,opacity:uV,side:ct,depthWrite:!1,depthTest:!1}),s=new Dn(1,1),a=new we(s,i);a.position.z=fV,a.renderOrder=20,t.add(a);const r=new Ye({color:e,transparent:!0,opacity:hV,side:ct,depthWrite:!1,depthTest:!1}),o=new Dn(1,1),l=new we(o,r);l.position.z=pV,l.renderOrder=21,t.add(l);const c=tx(n),u=tx(n);return t.add(c.group),t.add(u.group),{group:t,floorGeom:s,floorMesh:a,floorMaterial:i,stripeGeom:o,stripeMesh:l,stripeMaterial:r,primaryMarker:c,secondaryMarker:u}}function AV(n){n.group.visible=!1,th(n.primaryMarker),th(n.secondaryMarker)}function RV(n,e,t,i){const s=e.halfDepth*2*i,a=Zl*2*i,r=t.width*i,o=t.centerX*i,l=yE*i,c=Math.max(s-32*i,n.primaryMarker.headLength*1.15),u=Math.min(c,Math.max(wV*i,s*.6));if(n.group.position.y=e.centerY*i,n.floorMesh.position.x=0,n.floorMesh.scale.set(a,s,1),n.stripeMesh.position.x=o,n.stripeMesh.scale.set(l,s,1),th(n.primaryMarker),th(n.secondaryMarker),e.directions.length===1)Zp(n.primaryMarker,o,u,e.directions[0]);else{const d=r*.18;Zp(n.primaryMarker,o-d,u,e.directions[0]),Zp(n.secondaryMarker,o+d,u,e.directions[1])}n.group.visible=!0}function nx(n){n.group.removeFromParent(),n.shaftGeom.dispose(),n.headGeom.dispose(),n.material.dispose()}class PV{replay;blueBack;blueForward;blueOther;orangeBack;orangeForward;orangeOther;constructor(e,t,i){this.replay=t,this.blueBack=qr(i,td),this.blueForward=qr(i,td),this.blueOther=qr(i,td),this.orangeBack=qr(i,nd),this.orangeForward=qr(i,nd),this.orangeOther=qr(i,nd);for(const s of this.getZones())e.add(s.group)}update(e,t){const{frameIndex:i}=e,s=oV;for(const a of[!0,!1]){const r=this.replay.players.filter(d=>d.isTeamZero===a).length,o=[];for(const d of this.replay.players){if(d.isTeamZero!==a)continue;const h=d.frames[i];h?.position&&o.push(h.position.y)}const l=MV(a),c=this.getTeamZones(a);for(const d of c.values())AV(d);if(r<2||o.length!==r)continue;const u=EV(o,a,s);for(const d of u){const h=c.get(d.kind);h&&RV(h,d,l,t)}}}dispose(){for(const e of this.getZones())e.group.removeFromParent(),e.floorGeom.dispose(),e.floorMaterial.dispose(),e.stripeGeom.dispose(),e.stripeMaterial.dispose(),nx(e.primaryMarker),nx(e.secondaryMarker)}getTeamZones(e){return e?new Map([["back",this.blueBack],["forward",this.blueForward],["other",this.blueOther]]):new Map([["back",this.orangeBack],["forward",this.orangeForward],["other",this.orangeOther]])}getZones(){return[this.blueBack,this.blueForward,this.blueOther,this.orangeBack,this.orangeForward,this.orangeOther]}}function IV(n){return n==null||Number.isNaN(n)?null:n<0?"team-zero":"team-one"}class LV{group;teamZeroSide;teamOneSide;constructor(e,t){this.group=new Mt,this.teamZeroSide=this.createHalfFieldSide(td),this.teamOneSide=this.createHalfFieldSide(nd);const i=Zl*t,s=5120*t;this.teamZeroSide.mesh.position.set(0,-s/2,Qb),this.teamZeroSide.mesh.scale.set(i*2,s,1),this.teamOneSide.mesh.position.set(0,s/2,Qb),this.teamOneSide.mesh.scale.set(i*2,s,1),this.group.add(this.teamZeroSide.mesh),this.group.add(this.teamOneSide.mesh),e.add(this.group)}update(e){const t=IV(e);this.teamZeroSide.material.opacity=t==="team-zero"?Zb:jp,this.teamOneSide.material.opacity=t==="team-one"?Zb:jp}dispose(){this.group.removeFromParent(),this.teamZeroSide.mesh.geometry.dispose(),this.teamZeroSide.material.dispose(),this.teamOneSide.mesh.geometry.dispose(),this.teamOneSide.material.dispose()}createHalfFieldSide(e){const t=new Dn(1,1),i=new Ye({color:e,transparent:!0,opacity:jp,side:ct,depthWrite:!1,depthTest:!1}),s=new we(t,i);return s.renderOrder=18,{mesh:s,material:i}}}function DV(n,e){const t=new Mt,i=Zl*2*e,s=(a,r,o)=>{const l=new Dn(i,r*e),c=new Ye({color:_V,transparent:!0,opacity:o,side:ct,depthWrite:!1,depthTest:!1}),u=new we(l,c);return u.position.set(0,a,mV),u.renderOrder=24,u};for(const a of[-1,1]){const r=a*lV*e;t.add(s(r,yV,gV))}return t.add(s(0,bV,vV)),n.add(t),t}function cn(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function c_(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Oi(n,e){return`
${n}${e}
`}function kV(n,e){return` - ${Oi("50s",cn(n?.count))} - ${Oi("Blue wins",`${cn(n?.wins)} (${c_(n?.wins,n?.count)})`)} - ${Oi("Orange wins",`${cn(n?.losses)} (${c_(n?.losses,n?.count)})`)} - ${Oi("Neutral",cn(n?.neutral_outcomes))} - ${Oi("Blue poss after",cn(n?.possession_after_count))} - ${Oi("Orange poss after",cn(n?.opponent_possession_after_count))} - ${Oi("Kickoff 50s",cn(n?.kickoff_count))} - ${Oi("Blue kickoff wins",cn(n?.kickoff_wins))} - ${Oi("Orange kickoff wins",cn(n?.kickoff_losses))} - ${Oi("Blue kickoff poss",cn(n?.kickoff_possession_after_count))} - ${Oi("Orange kickoff poss",cn(n?.kickoff_opponent_possession_after_count))} - `}function ix(n){return` + `,document.head.append(n)}function TV(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}function CE(n){return[n.line.material,n.cone.material].flatMap(e=>Array.isArray(e)?e:[e])}function ix(n,e){for(const t of CE(n))t.transparent=!0,t.opacity=e,t.depthWrite=!1,t.depthTest=!1}function sx(n){n.removeFromParent(),n.line.geometry.dispose(),n.cone.geometry.dispose();for(const e of CE(n))e.dispose()}function m_(n){for(const e of n.ringSegments){e.removeFromParent(),e.geometry.dispose();const t=Array.isArray(e.material)?e.material:[e.material];for(const i of t)i.dispose()}n.ringSegments=[],n.ringColorsKey=""}function MV(n,e,t){const i=new ni(e,t,48,1),s=new Ye({color:n,transparent:!0,opacity:.7,side:ct,depthWrite:!1,depthTest:!1}),a=new we(i,s);return a.rotation.x=-Math.PI/2,a.renderOrder=40,a}function EV(n,e){const t=e.length>0?e:[Gi],i=t.join("|");if(n.ringColorsKey===i)return;m_(n);const s=t.length,a=Qb*Math.max(0,s-1),r=(dV-Jb-a)/s,o=t.map((l,c)=>{const u=Jb+c*(r+Qb);return MV(l,u,u+r)});for(const l of o)n.ring.add(l),n.ringSegments.push(l);n.ringColorsKey=i}function CV(n,e){for(const t of n.ringSegments){const i=Array.isArray(t.material)?t.material:[t.material];for(const s of i)s.opacity=e}}class AV{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;arrowStart=new S;arrowEnd=new S;arrowDirection=new S;labelOffset=new S(0,0,ex);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=tx;mode="markers";colorModes=["team"];constructor(e,t,i,s,a){SV(),this.scene=e,this.container=t,this.decaySeconds=Math.max(.1,a?.decaySeconds??tx),this.mode=a?.mode??"markers",this.colorModes=po(a?.colorModes??a?.colorMode),this.labelOffset.set(0,0,ex),this.markers=EE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="touch-event-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-touch-overlay-root",this.container.append(this.labelRoot)}getDecaySeconds(){return this.decaySeconds}setDecaySeconds(e){this.decaySeconds=Math.max(.1,e)}getMode(){return this.mode}setMode(e){this.mode=e}getColorModes(){return[...this.colorModes]}setColorMode(e){this.setColorModes([e])}setColorModes(e){this.colorModes=po([...e])}update(e){const t=wV(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),m_(a),sx(a.arrow),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.1+.6*r,c=.95+(1-r)*.28,u=TE(this.colorModes),d=ME(s,u),h=xV(s,this.colorModes);EV(o,h),CV(o,l),o.arrow.setColor(d),o.ring.position.set(s.position.x,s.position.y,s.position.z+tm),o.ring.scale.setScalar(c),o.label.textContent=gV(s,this.mode,this.colorModes),o.label.classList.toggle("sap-touch-overlay-label-advancement",this.mode==="advancement");const f=u==="team";o.label.classList.toggle("sap-touch-overlay-label-blue",f&&s.isTeamZero),o.label.classList.toggle("sap-touch-overlay-label-orange",f&&!s.isTeamZero),o.label.style.borderColor=f?"":`#${d.toString(16).padStart(6,"0")}cc`,o.label.style.background=f?"":`#${d.toString(16).padStart(6,"0")}66`,this.updateArrow(o,s,l),this.worldPosition.set(s.position.x,s.position.y,s.position.z),this.worldPosition.add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),TV(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.22+.78*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),m_(e),sx(e.arrow),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Mt;i.renderOrder=40,this.group.add(i);const s=new Ig(new S(0,1,0),new S,1,e.isTeamZero?Kg:qg,1,1);s.visible=!1,s.renderOrder=45,s.line.renderOrder=45,s.cone.renderOrder=45,ix(s,.7),this.group.add(s);const a=document.createElement("div");a.className=`sap-touch-overlay-label ${e.isTeamZero?"sap-touch-overlay-label-blue":"sap-touch-overlay-label-orange"}`,a.textContent=e.playerName,a.hidden=!0,this.labelRoot.append(a);const r={marker:e,ring:i,ringSegments:[],ringColorsKey:"",arrow:s,label:a};return this.views.set(e.id,r),r}updateArrow(e,t,i){if(this.mode!=="advancement"||t.totalBallTravelDistance<=hV){e.arrow.visible=!1;return}this.arrowStart.set(t.position.x,t.position.y,t.position.z+tm*2),this.arrowEnd.set(t.endPosition.x,t.endPosition.y,t.endPosition.z+tm*2),this.arrowDirection.copy(this.arrowEnd).sub(this.arrowStart);const s=this.arrowDirection.length();if(s0&&r>0)return a/r}const t=n.frames[0],i=n.frames.at(-1);if(t&&i){const s=i.frame_number-t.frame_number,a=i.time-t.time;if(s>0&&a>0)return s/a}return LV}function DV(n,e={}){if(!n)return[];const t=e.preRollSeconds??RV,i=e.minPossessionSeconds??PV,s=e.samePlayerBridgeSeconds??IV,a=ve(n,"player_possession").map(d=>({playerId:At(d.player_id),startFrame:Math.max(0,Math.trunc(ll(d.start_frame))),endFrame:Math.max(0,Math.trunc(ll(d.end_frame))),startTime:ll(d.start_time),endTime:ll(d.end_time),duration:ll(d.duration),sustainedControl:d.sustained_control})).filter(d=>d.endFrame>d.startFrame&&(d.sustainedControl||d.duration>=i)).sort((d,h)=>d.startFrame-h.startFrame||d.endFrame-h.endFrame),r=kV(n,a),o=Math.max(0,Math.round(t*r)),l=Math.max(0,Math.round(s*r)),c=[];let u=null;for(const d of a){let h=Math.max(0,d.startFrame-o);u&&u.playerId!==d.playerId&&(h=Math.max(h,u.endFrame));const f=c.at(-1);if(f&&f.playerId===d.playerId&&h<=f.endFrame+l){c[c.length-1]={...f,endFrame:Math.max(f.endFrame,d.endFrame),possessionEndFrame:Math.max(f.possessionEndFrame,d.endFrame)},u=d;continue}c.push({playerId:d.playerId,startFrame:h,endFrame:d.endFrame,possessionStartFrame:d.startFrame,possessionEndFrame:d.endFrame}),u=d}return c.map((d,h)=>({...d,endFrame:c[h+1]?.startFrame??Number.POSITIVE_INFINITY}))}function OV(n,e){const t=Math.max(0,Math.trunc(e));return n.find(s=>t>=s.startFrame&&tthis.update(i))))}reset(){this.unsubscribeBeforeRender?.(),this.unsubscribeBeforeRender=null,this.sourcePlayer=null,this.sourceTimeline=null,this.spans=[]}syncCurrentFrame(){const e=this.options.getReplayPlayer();if(!e)return;const t=e.getState();this.update({frameIndex:t.frameIndex,nextFrameIndex:t.frameIndex,alpha:0,currentTime:t.currentTime})}update(e){const t=this.options.getCameraControlsController(),i=this.options.getReplayPlayer();if(!t?.autoPossessionEnabled||!i)return;const s=OV(this.spans,e.frameIndex);if(!s||!i.replay.players.some(r=>r.id===s))return;const a=i.getState();a.cameraViewMode==="follow"&&a.attachedPlayerId===s||t.followPlayerWithReplayCamera(s,{ballCam:"player",preserveAutoPossession:!0,requestConfigSync:!1,usePlayerCameraSettings:!1})}}function NV(n){return new FV(n)}const UV=236,tc=4120,BV=2300,zV=16185075,HV=.18,VV=1118481,rd=5882879,od=16761180,GV=.55,im=.12,ax=.28,$V=3,WV=4,rx=5,ox=2,XV=6,KV=856343,qV=.42,YV=18,jV=.24,ZV=10,lx=220,JV=200,AE=140,QV=220,e5=100,t5=120;function n5(n){const e=JV/2;if(n){const s=-tc+lx,a=-e;return{minX:s,maxX:a,centerX:(s+a)/2,width:a-s}}const t=e,i=tc-lx;return{minX:t,maxX:i,centerX:(t+i)/2,width:i-t}}function i5(n,e,t){if(n.length<2)return[];const i=Math.min(...n),s=Math.max(...n),a=s-i,r=e?-1:1,o=-r;return a<=t?[{kind:"other",centerY:(i+s)/2,halfDepth:Math.max(t-a/2,t*.35),directions:[r,o]}]:[{kind:"back",centerY:e?i:s,halfDepth:t,directions:[r]},{kind:"forward",centerY:e?s:i,halfDepth:t,directions:[o]}]}function s5(n,e){const t=new Ns;return t.moveTo(0,e/2),t.lineTo(n/2,-e/2),t.lineTo(-n/2,-e/2),t.closePath(),new dr(t)}function cx(n){const e=e5*n,t=new Ye({color:VV,transparent:!0,opacity:.9,side:ct,depthWrite:!1,depthTest:!1}),i=new Mt;i.visible=!1;const s=new kn(AE*.55*n,1),a=new we(s,t);a.position.z=rx,a.renderOrder=22,i.add(a);const r=s5(t5*n,e),o=new we(r,t);return o.position.z=rx,o.renderOrder=23,i.add(o),{group:i,shaftGeom:s,shaftMesh:a,headGeom:r,headMesh:o,material:t,headLength:e}}function sm(n,e,t,i){const s=Math.max(t-n.headLength,n.headLength*.2);n.group.position.x=e,n.group.rotation.z=i>0?0:Math.PI,n.shaftMesh.scale.y=s,n.shaftMesh.position.y=-n.headLength/2,n.headMesh.position.y=t/2-n.headLength/2,n.group.visible=!0}function oh(n){n.group.visible=!1}function jr(n,e){const t=new Mt;t.visible=!1;const i=new Ye({color:zV,transparent:!0,opacity:HV,side:ct,depthWrite:!1,depthTest:!1}),s=new kn(1,1),a=new we(s,i);a.position.z=$V,a.renderOrder=20,t.add(a);const r=new Ye({color:e,transparent:!0,opacity:GV,side:ct,depthWrite:!1,depthTest:!1}),o=new kn(1,1),l=new we(o,r);l.position.z=WV,l.renderOrder=21,t.add(l);const c=cx(n),u=cx(n);return t.add(c.group),t.add(u.group),{group:t,floorGeom:s,floorMesh:a,floorMaterial:i,stripeGeom:o,stripeMesh:l,stripeMaterial:r,primaryMarker:c,secondaryMarker:u}}function a5(n){n.group.visible=!1,oh(n.primaryMarker),oh(n.secondaryMarker)}function r5(n,e,t,i){const s=e.halfDepth*2*i,a=tc*2*i,r=t.width*i,o=t.centerX*i,l=AE*i,c=Math.max(s-32*i,n.primaryMarker.headLength*1.15),u=Math.min(c,Math.max(QV*i,s*.6));if(n.group.position.y=e.centerY*i,n.floorMesh.position.x=0,n.floorMesh.scale.set(a,s,1),n.stripeMesh.position.x=o,n.stripeMesh.scale.set(l,s,1),oh(n.primaryMarker),oh(n.secondaryMarker),e.directions.length===1)sm(n.primaryMarker,o,u,e.directions[0]);else{const d=r*.18;sm(n.primaryMarker,o-d,u,e.directions[0]),sm(n.secondaryMarker,o+d,u,e.directions[1])}n.group.visible=!0}function ux(n){n.group.removeFromParent(),n.shaftGeom.dispose(),n.headGeom.dispose(),n.material.dispose()}class o5{replay;blueBack;blueForward;blueOther;orangeBack;orangeForward;orangeOther;constructor(e,t,i){this.replay=t,this.blueBack=jr(i,rd),this.blueForward=jr(i,rd),this.blueOther=jr(i,rd),this.orangeBack=jr(i,od),this.orangeForward=jr(i,od),this.orangeOther=jr(i,od);for(const s of this.getZones())e.add(s.group)}update(e,t){const{frameIndex:i}=e,s=UV;for(const a of[!0,!1]){const r=this.replay.players.filter(d=>d.isTeamZero===a).length,o=[];for(const d of this.replay.players){if(d.isTeamZero!==a)continue;const h=d.frames[i];h?.position&&o.push(h.position.y)}const l=n5(a),c=this.getTeamZones(a);for(const d of c.values())a5(d);if(r<2||o.length!==r)continue;const u=i5(o,a,s);for(const d of u){const h=c.get(d.kind);h&&r5(h,d,l,t)}}}dispose(){for(const e of this.getZones())e.group.removeFromParent(),e.floorGeom.dispose(),e.floorMaterial.dispose(),e.stripeGeom.dispose(),e.stripeMaterial.dispose(),ux(e.primaryMarker),ux(e.secondaryMarker)}getTeamZones(e){return e?new Map([["back",this.blueBack],["forward",this.blueForward],["other",this.blueOther]]):new Map([["back",this.orangeBack],["forward",this.orangeForward],["other",this.orangeOther]])}getZones(){return[this.blueBack,this.blueForward,this.blueOther,this.orangeBack,this.orangeForward,this.orangeOther]}}function l5(n){return n==null||Number.isNaN(n)?null:n<0?"team-zero":"team-one"}class c5{group;teamZeroSide;teamOneSide;constructor(e,t){this.group=new Mt,this.teamZeroSide=this.createHalfFieldSide(rd),this.teamOneSide=this.createHalfFieldSide(od);const i=tc*t,s=5120*t;this.teamZeroSide.mesh.position.set(0,-s/2,ox),this.teamZeroSide.mesh.scale.set(i*2,s,1),this.teamOneSide.mesh.position.set(0,s/2,ox),this.teamOneSide.mesh.scale.set(i*2,s,1),this.group.add(this.teamZeroSide.mesh),this.group.add(this.teamOneSide.mesh),e.add(this.group)}update(e){const t=l5(e);this.teamZeroSide.material.opacity=t==="team-zero"?ax:im,this.teamOneSide.material.opacity=t==="team-one"?ax:im}dispose(){this.group.removeFromParent(),this.teamZeroSide.mesh.geometry.dispose(),this.teamZeroSide.material.dispose(),this.teamOneSide.mesh.geometry.dispose(),this.teamOneSide.material.dispose()}createHalfFieldSide(e){const t=new kn(1,1),i=new Ye({color:e,transparent:!0,opacity:im,side:ct,depthWrite:!1,depthTest:!1}),s=new we(t,i);return s.renderOrder=18,{mesh:s,material:i}}}function u5(n,e){const t=new Mt,i=tc*2*e,s=(a,r,o)=>{const l=new kn(i,r*e),c=new Ye({color:KV,transparent:!0,opacity:o,side:ct,depthWrite:!1,depthTest:!1}),u=new we(l,c);return u.position.set(0,a,XV),u.renderOrder=24,u};for(const a of[-1,1]){const r=a*BV*e;t.add(s(r,YV,qV))}return t.add(s(0,ZV,jV)),n.add(t),t}function cn(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function __(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Fi(n,e){return`
${n}${e}
`}function d5(n,e){return` + ${Fi("50s",cn(n?.count))} + ${Fi("Blue wins",`${cn(n?.wins)} (${__(n?.wins,n?.count)})`)} + ${Fi("Orange wins",`${cn(n?.losses)} (${__(n?.losses,n?.count)})`)} + ${Fi("Neutral",cn(n?.neutral_outcomes))} + ${Fi("Blue poss after",cn(n?.possession_after_count))} + ${Fi("Orange poss after",cn(n?.opponent_possession_after_count))} + ${Fi("Kickoff 50s",cn(n?.kickoff_count))} + ${Fi("Blue kickoff wins",cn(n?.kickoff_wins))} + ${Fi("Orange kickoff wins",cn(n?.kickoff_losses))} + ${Fi("Blue kickoff poss",cn(n?.kickoff_possession_after_count))} + ${Fi("Orange kickoff poss",cn(n?.kickoff_opponent_possession_after_count))} + `}function dx(n){return`
50s${cn(n?.count)}
-
Wins${cn(n?.wins)} (${c_(n?.wins,n?.count)})
+
Wins${cn(n?.wins)} (${__(n?.wins,n?.count)})
Losses${cn(n?.losses)}
Neutral${cn(n?.neutral_outcomes)}
Poss after${cn(n?.possession_after_count)}
Kickoff 50s${cn(n?.kickoff_count)}
Kickoff wins${cn(n?.kickoff_wins)}
Kickoff poss${cn(n?.kickoff_possession_after_count)}
- `}function OV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function FV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function sx(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=FV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function ax(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function u_(n,e){return`
${ax(n)}${ax(e)}
`}function NV(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function vE(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="own"?"Blue control":"Orange control":n==="own"?"Team control":"Opp control"}function d_(n){return n.kind==="shared"?["own","neutral","opponent"]:["own","neutral","opponent"]}function UV(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function BV(n){return n.kind==="shared"?["defensive_third","neutral_third","offensive_third"]:["defensive_third","neutral_third","offensive_third"]}function zV(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="defensive_half"?"Blue half":"Orange half":n==="defensive_half"?"Own half":"Opp half"}function HV(n){return n.kind==="shared"?["defensive_half","neutral","offensive_half"]:["defensive_half","neutral","offensive_half"]}function VV(n,e,t,i){for(const s of t){const a=s==="possession_state"?d_(i):s==="field_third"?BV(i):HV(i),r=a.indexOf(n[s]),o=a.indexOf(e[s]),l=r===-1?Number.MAX_SAFE_INTEGER:r,c=o===-1?Number.MAX_SAFE_INTEGER:o;if(l!==c)return l-c}return 0}function GV(n,e,t){const i=(s,a)=>s==="possession_state"?vE(a,t):s==="field_third"?UV(a,t):zV(a,t);if(e.length===1){const s=e[0];return i(s,n[s])}return e.map(s=>i(s,n[s])).join(" / ")}function $V(n,e,t,i){if(e.length===0)return"";const s=new Map;if(n?.labeled_time?.entries?.length)for(const a of n.labeled_time.entries){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=s.get(c);u?u.total+=a.value:s.set(c,{values:o,total:a.value})}if(s.size===0&&e.length===1&&e[0]==="possession_state"){const a=new Map;return n&&(a.set("own",n.possession_time),a.set("neutral",n.neutral_time??0),a.set("opponent",n.opponent_possession_time)),d_(i).some(r=>(a.get(r)??0)>0)?d_(i).filter(r=>a.has(r)).map(r=>u_(vE(r,i),sx(a.get(r),t))).join(""):""}return[...s.values()].sort((a,r)=>VV(a.values,r.values,e,i)).map(a=>u_(GV(a.values,e,i),sx(a.total,t))).join("")}function rx(n,e){const t=n?.tracked_time,i=NV(e.breakdownClasses),s=$V(n,i,t,e.labelPerspective);return` - ${u_("Tracked",OV(t,1,"s"))} + `}function h5(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function f5(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function hx(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=f5(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function fx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function g_(n,e){return`
${fx(n)}${fx(e)}
`}function p5(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function RE(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="own"?"Blue control":"Orange control":n==="own"?"Team control":"Opp control"}function y_(n){return n.kind==="shared"?["own","neutral","opponent"]:["own","neutral","opponent"]}function m5(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function _5(n){return n.kind==="shared"?["defensive_third","neutral_third","offensive_third"]:["defensive_third","neutral_third","offensive_third"]}function g5(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="defensive_half"?"Blue half":"Orange half":n==="defensive_half"?"Own half":"Opp half"}function y5(n){return n.kind==="shared"?["defensive_half","neutral","offensive_half"]:["defensive_half","neutral","offensive_half"]}function v5(n,e,t,i){for(const s of t){const a=s==="possession_state"?y_(i):s==="field_third"?_5(i):y5(i),r=a.indexOf(n[s]),o=a.indexOf(e[s]),l=r===-1?Number.MAX_SAFE_INTEGER:r,c=o===-1?Number.MAX_SAFE_INTEGER:o;if(l!==c)return l-c}return 0}function b5(n,e,t){const i=(s,a)=>s==="possession_state"?RE(a,t):s==="field_third"?m5(a,t):g5(a,t);if(e.length===1){const s=e[0];return i(s,n[s])}return e.map(s=>i(s,n[s])).join(" / ")}function x5(n,e,t,i){if(e.length===0)return"";const s=new Map;if(n?.labeled_time?.entries?.length)for(const a of n.labeled_time.entries){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=s.get(c);u?u.total+=a.value:s.set(c,{values:o,total:a.value})}if(s.size===0&&e.length===1&&e[0]==="possession_state"){const a=new Map;return n&&(a.set("own",n.possession_time),a.set("neutral",n.neutral_time??0),a.set("opponent",n.opponent_possession_time)),y_(i).some(r=>(a.get(r)??0)>0)?y_(i).filter(r=>a.has(r)).map(r=>g_(RE(r,i),hx(a.get(r),t))).join(""):""}return[...s.values()].sort((a,r)=>v5(a.values,r.values,e,i)).map(a=>g_(b5(a.values,e,i),hx(a.total,t))).join("")}function px(n,e){const t=n?.tracked_time,i=p5(e.breakdownClasses),s=x5(n,i,t,e.labelPerspective);return` + ${g_("Tracked",h5(t,1,"s"))} ${s} - `}function WV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function XV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function KV(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=XV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function ox(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function bE(n,e){return`
${ox(n)}${ox(e)}
`}function qV(n,e){return n==="neutral"?"Neutral zone":e.kind==="shared"?n==="defensive_half"?"Blue side":"Orange side":n==="defensive_half"?"Own half":"Opp half"}function YV(n,e,t){const i=new Map;if(n&&(i.set("defensive_half",n.defensive_half_time),i.set("neutral",n.neutral_time??0),i.set("offensive_half",n.offensive_half_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_half")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_half","neutral","offensive_half"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>bE(qV(a,t),KV(i.get(a),e))).join(""):""}function lx(n,e){const t=n?.tracked_time,i=YV(n,t,e.labelPerspective);return` - ${i.length===0?bE("Tracked",WV(t,1,"s")):""} + `}function w5(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function S5(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function T5(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=S5(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function mx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function PE(n,e){return`
${mx(n)}${mx(e)}
`}function M5(n,e){return n==="neutral"?"Neutral zone":e.kind==="shared"?n==="defensive_half"?"Blue side":"Orange side":n==="defensive_half"?"Own half":"Opp half"}function E5(n,e,t){const i=new Map;if(n&&(i.set("defensive_half",n.defensive_half_time),i.set("neutral",n.neutral_time??0),i.set("offensive_half",n.offensive_half_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_half")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_half","neutral","offensive_half"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>PE(M5(a,t),T5(i.get(a),e))).join(""):""}function _x(n,e){const t=n?.tracked_time,i=E5(n,t,e.labelPerspective);return` + ${i.length===0?PE("Tracked",w5(t,1,"s")):""} ${i} - `}function jV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function ZV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function JV(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=ZV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function cx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function xE(n,e){return`
${cx(n)}${cx(e)}
`}function QV(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function e5(n,e,t){const i=new Map;if(n&&(i.set("defensive_third",n.defensive_third_time),i.set("neutral_third",n.neutral_third_time??0),i.set("offensive_third",n.offensive_third_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_third")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_third","neutral_third","offensive_third"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>xE(QV(a,t),JV(i.get(a),e))).join(""):""}function ux(n,e){const t=n?.tracked_time,i=e5(n,t,e.labelPerspective);return` - ${i.length===0?xE("Tracked",jV(t,1,"s")):""} + `}function C5(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function A5(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function R5(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=A5(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function gx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function IE(n,e){return`
${gx(n)}${gx(e)}
`}function P5(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function I5(n,e,t){const i=new Map;if(n&&(i.set("defensive_third",n.defensive_third_time),i.set("neutral_third",n.neutral_third_time??0),i.set("offensive_third",n.offensive_third_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_third")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_third","neutral_third","offensive_third"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>IE(P5(a,t),R5(i.get(a),e))).join(""):""}function yx(n,e){const t=n?.tracked_time,i=I5(n,t,e.labelPerspective);return` + ${i.length===0?IE("Tracked",C5(t,1,"s")):""} ${i} - `}function Fa(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Na(n,e){return`
${n}${e}
`}function Jp(n){return` - ${Na("Rushes",Fa(n?.count))} - ${Na("2v1",Fa(n?.two_v_one_count))} - ${Na("2v2",Fa(n?.two_v_two_count))} - ${Na("2v3",Fa(n?.two_v_three_count))} - ${Na("3v1",Fa(n?.three_v_one_count))} - ${Na("3v2",Fa(n?.three_v_two_count))} - ${Na("3v3",Fa(n?.three_v_three_count))} - `}const dx="subtr-actor-fifty-fifty-overlay-styles",t5=5882879,n5=16761180,i5=15988472,s5=180,a5=4;function h_(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function hx(n,e){const t=h_(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function r5(n,e){const t=hx(e,n.team_zero_player),i=hx(e,n.team_one_player),s=n.is_kickoff?"Kickoff 50/50":"50/50",a=n.winning_team_is_team_0===void 0?null:n.winning_team_is_team_0,r=n.possession_team_is_team_0===void 0?null:n.possession_team_is_team_0,o=a===null?"neutral":a?"blue win":"orange win",l=r===null?"neutral poss":r?"blue poss":"orange poss",c=a===null?"sap-fifty-fifty-overlay-label-neutral":a?"sap-fifty-fifty-overlay-label-blue":"sap-fifty-fifty-overlay-label-orange";return{text:`${s}: ${t} vs ${i} | ${o} | ${l}`,className:c,winnerIsTeamZero:a}}function wE(n,e){return ve(n,"fifty_fifty").map(t=>{const i=r5(t,e),s=new S(...t.team_zero_position),a=new S(...t.team_one_position),r=new S(...t.midpoint),o=e.frames[t.start_frame]?.time??t.start_time;return{id:`fifty-fifty:${t.start_frame}:${h_(t.team_zero_player)}:${h_(t.team_one_player)}`,time:o,frame:t.start_frame,label:i.text,labelClassName:i.className,axisStart:s,axisEnd:a,midpoint:r,winnerIsTeamZero:i.winnerIsTeamZero}})}function o5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function l5(){if(document.getElementById(dx))return;const n=document.createElement("style");n.id=dx,n.textContent=` + `}function Na(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Ua(n,e){return`
${n}${e}
`}function am(n){return` + ${Ua("Rushes",Na(n?.count))} + ${Ua("2v1",Na(n?.two_v_one_count))} + ${Ua("2v2",Na(n?.two_v_two_count))} + ${Ua("2v3",Na(n?.two_v_three_count))} + ${Ua("3v1",Na(n?.three_v_one_count))} + ${Ua("3v2",Na(n?.three_v_two_count))} + ${Ua("3v3",Na(n?.three_v_three_count))} + `}const vx="subtr-actor-fifty-fifty-overlay-styles",L5=5882879,k5=16761180,D5=15988472,O5=180,F5=4;function v_(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function bx(n,e){const t=v_(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function N5(n,e){const t=bx(e,n.team_zero_player),i=bx(e,n.team_one_player),s=n.is_kickoff?"Kickoff 50/50":"50/50",a=n.winning_team_is_team_0===void 0?null:n.winning_team_is_team_0,r=n.possession_team_is_team_0===void 0?null:n.possession_team_is_team_0,o=a===null?"neutral":a?"blue win":"orange win",l=r===null?"neutral poss":r?"blue poss":"orange poss",c=a===null?"sap-fifty-fifty-overlay-label-neutral":a?"sap-fifty-fifty-overlay-label-blue":"sap-fifty-fifty-overlay-label-orange";return{text:`${s}: ${t} vs ${i} | ${o} | ${l}`,className:c,winnerIsTeamZero:a}}function LE(n,e){return ve(n,"fifty_fifty").map(t=>{const i=N5(t,e),s=new S(...t.team_zero_position),a=new S(...t.team_one_position),r=new S(...t.midpoint),o=e.frames[t.start_frame]?.time??t.start_time;return{id:`fifty-fifty:${t.start_frame}:${v_(t.team_zero_player)}:${v_(t.team_one_player)}`,time:o,frame:t.start_frame,label:i.text,labelClassName:i.className,axisStart:s,axisEnd:a,midpoint:r,winnerIsTeamZero:i.winnerIsTeamZero}})}function U5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function B5(){if(document.getElementById(vx))return;const n=document.createElement("style");n.id=vx,n.textContent=` .sap-fifty-fifty-overlay-root { position: absolute; inset: 0; @@ -5584,7 +5649,7 @@ void main() { border-color: rgba(243, 246, 248, 0.4); background: rgba(34, 41, 47, 0.86); } - `,document.head.append(n)}function c5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class u5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,s5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=a5;constructor(e,t,i,s){l5(),this.scene=e,this.container=t,this.markers=wE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="fifty-fifty-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-fifty-fifty-overlay-root",this.container.append(this.labelRoot)}update(e){const t=o5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.line.removeFromParent(),a.line.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.12+.78*r;o.material.opacity=l;const c=o.line.geometry.getAttribute("position");c.setXYZ(0,s.axisStart.x,s.axisStart.y,s.axisStart.z+24),c.setXYZ(1,s.axisEnd.x,s.axisEnd.y,s.axisEnd.z+24),c.needsUpdate=!0,this.worldPosition.copy(s.midpoint).add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),c5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.24+.76*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.line.removeFromParent(),e.line.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ge().setFromPoints([e.axisStart,e.axisEnd]),s=new Rt({color:e.winnerIsTeamZero===null?i5:e.winnerIsTeamZero?t5:n5,transparent:!0,opacity:.9}),a=new In(i,s);a.renderOrder=3,this.group.add(a);const r=document.createElement("div");r.className=`sap-fifty-fifty-overlay-label ${e.labelClassName}`,r.textContent=e.label,this.labelRoot.append(r);const o={marker:e,line:a,material:s,label:r};return this.views.set(e.id,o),o}}const fx="subtr-actor-ceiling-shot-overlay-styles",d5=5882879,h5=16761180,f5=16185075,p5=140,m5=215,_5=220,g5=4.5;function SE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function y5(n,e){const t=SE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function TE(n,e){return ve(n,"ceiling_shot").map(t=>{const i=y5(e,t.player),s=SE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`ceiling-shot:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,ceilingContactPosition:{x:t.ceiling_contact_position[0],y:t.ceiling_contact_position[1],z:t.ceiling_contact_position[2]},touchPosition:{x:t.touch_position[0],y:t.touch_position[1],z:t.touch_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function v5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function b5(){if(document.getElementById(fx))return;const n=document.createElement("style");n.id=fx,n.textContent=` + `,document.head.append(n)}function z5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class H5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,O5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=F5;constructor(e,t,i,s){B5(),this.scene=e,this.container=t,this.markers=LE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="fifty-fifty-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-fifty-fifty-overlay-root",this.container.append(this.labelRoot)}update(e){const t=U5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.line.removeFromParent(),a.line.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.12+.78*r;o.material.opacity=l;const c=o.line.geometry.getAttribute("position");c.setXYZ(0,s.axisStart.x,s.axisStart.y,s.axisStart.z+24),c.setXYZ(1,s.axisEnd.x,s.axisEnd.y,s.axisEnd.z+24),c.needsUpdate=!0,this.worldPosition.copy(s.midpoint).add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),z5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.24+.76*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.line.removeFromParent(),e.line.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ge().setFromPoints([e.axisStart,e.axisEnd]),s=new Rt({color:e.winnerIsTeamZero===null?D5:e.winnerIsTeamZero?L5:k5,transparent:!0,opacity:.9}),a=new In(i,s);a.renderOrder=3,this.group.add(a);const r=document.createElement("div");r.className=`sap-fifty-fifty-overlay-label ${e.labelClassName}`,r.textContent=e.label,this.labelRoot.append(r);const o={marker:e,line:a,material:s,label:r};return this.views.set(e.id,o),o}}const xx="subtr-actor-ceiling-shot-overlay-styles",V5=5882879,G5=16761180,$5=16185075,W5=140,X5=215,K5=220,q5=4.5;function kE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function Y5(n,e){const t=kE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function DE(n,e){return ve(n,"ceiling_shot").map(t=>{const i=Y5(e,t.player),s=kE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`ceiling-shot:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,ceilingContactPosition:{x:t.ceiling_contact_position[0],y:t.ceiling_contact_position[1],z:t.ceiling_contact_position[2]},touchPosition:{x:t.touch_position[0],y:t.touch_position[1],z:t.touch_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function j5(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function Z5(){if(document.getElementById(xx))return;const n=document.createElement("style");n.id=xx,n.textContent=` .sap-ceiling-shot-overlay-root { position: absolute; inset: 0; @@ -5621,13 +5686,13 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function x5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class w5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,_5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=g5;constructor(e,t,i,s){b5(),this.scene=e,this.container=t,this.markers=TE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="ceiling-shot-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-ceiling-shot-overlay-root",this.container.append(this.labelRoot)}update(e){const t=v5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.ringMaterial.dispose(),a.beam.removeFromParent(),a.beamGeometry.dispose(),a.beamMaterial.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.14+.6*r,c=.94+(1-r)*.18;o.ringMaterial.opacity=l,o.beamMaterial.opacity=.18+.55*r,o.ring.position.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z+12),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z).add(this.labelOffset);const u=x5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.ringMaterial.dispose(),e.beam.removeFromParent(),e.beamGeometry.dispose(),e.beamMaterial.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.quality>=.8?f5:e.isTeamZero?d5:h5,s=new Ye({color:i,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),a=new ni(p5,m5,48),r=new we(a,s);r.renderOrder=30,this.group.add(r);const o=new Ge().setFromPoints([new S(e.ceilingContactPosition.x,e.ceilingContactPosition.y,e.ceilingContactPosition.z),new S(e.touchPosition.x,e.touchPosition.y,e.touchPosition.z)]),l=new Rt({color:i,transparent:!0,opacity:.7,depthWrite:!1,depthTest:!1}),c=new In(o,l);c.renderOrder=29,this.group.add(c);const u=document.createElement("div");u.className=`sap-ceiling-shot-overlay-label ${e.isTeamZero?"sap-ceiling-shot-overlay-label-blue":"sap-ceiling-shot-overlay-label-orange"}`,u.textContent=`${e.playerName} ceiling shot ${e.qualityLabel}`,this.labelRoot.append(u);const d={marker:e,ring:r,ringMaterial:s,beam:c,beamGeometry:o,beamMaterial:l,label:u};return this.views.set(e.id,d),d}}const S5="#d1d9e0",ME=new Set(["flick_goal","double_tap_goal","one_timer_goal","passing_goal","air_dribble_goal","flip_reset_goal","bump_goal","demo_goal","half_volley_goal"]);function T5(n){return n.metadata.performer==="scorer"||n.metadata.modifiers?.includes("by_scorer")?"scorer":n.metadata.performer==="teammate"?"teammate":ME.has(n.kind)?"unknown":"scorer"}function M5(n){const e=T5(n);return e==="unknown"?"performer unknown":ME.has(n.kind)?`by ${e}`:null}function ji(n,e){return n.players.find(t=>t.id===e)?.name??e}function kn(n,e,t){return n.frames[e??-1]?.time??t}function E5(n){const e=n.kind;return e!=="forward"&&e!=="reverse"&&e!=="side"?"flick":`${n.direction==="left"||n.direction==="right"?`${n.direction} `:""}${e} flick`}function C5(n){const e=new Set(n),t=new Set(["goal"]);return e.has("core")&&(t.add("save"),t.add("shot"),t.add("assist")),e.has("demo")&&t.add("demo"),[...t]}function A5(n,e){const t=new Set(C5(e));return n.timelineEvents.filter(i=>t.has(i.kind))}function R5(n,e){return wE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"fifty-fifty",label:t.label,shortLabel:t.label.startsWith("Kickoff 50/50")?"KO":"50",isTeamZero:t.winnerIsTeamZero,color:t.winnerIsTeamZero===null?S5:t.winnerIsTeamZero?en:tn}))}function P5(n,e){return(ve(n,"flick")??[]).map((t,i)=>{const s=At(t.player),a=ji(e,s),r=E5(t);return{id:`flick:${t.frame}:${s}:${i+1}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"flick",label:`${a} ${r}`,shortLabel:"F",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function I5(n,e){return _E(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"touch",label:`${t.playerName} touch`,shortLabel:"T",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function L5(n,e){return ve(n,"backboard").map((t,i)=>{const s=At(t.player),a=e.players.find(r=>r.id===s)?.name??s;return{id:`backboard:${t.frame}:${s}:${i}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"backboard",label:`${a} backboard`,shortLabel:"BB",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function D5(n,e){return TE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"ceiling-shot",label:`${t.playerName} ceiling shot ${t.qualityLabel}`,shortLabel:"CS",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function k5(n,e){return ve(n,"wall_aerial").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ci(t.wall).toLowerCase();return{id:`wall-aerial:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial",label:`${a} wall-to-air setup ${o}% | ${l} wall`,shortLabel:"W2A",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function O5(n,e){return ve(n,"wall_aerial_shot").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ci(t.wall).toLowerCase();return{id:`wall-aerial-shot:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial-shot",label:`${a} wall shot ${o}% | ${l} wall`,shortLabel:"WS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function F5(n,e){return ve(n,"double_tap").map((t,i)=>{const s=At(t.player),a=ji(e,s);return{id:`double-tap:${t.frame}:${s}:${i}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"double-tap",label:`${a} double tap`,shortLabel:"DT",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function N5(n,e){return ve(n,"center").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.lateral_centering_distance);return{id:`center:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"center",label:`${a} center | ${o}uu lateral`,shortLabel:"C",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function U5(n,e){return ve(n,"one_timer").map((t,i)=>{const s=At(t.player),a=At(t.passer),r=ji(e,s),o=ji(e,a),l=kn(e,t.frame,t.time),c=Math.round(t.ball_speed);return{id:`one-timer:${t.frame}:${a}:${s}:${i}`,time:l,frame:t.frame,kind:"one-timer",label:`${r} one-timer from ${o} | ${c}uu/s`,shortLabel:"OT",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function B5(n){return Ci(n.replace(/_pass$/,""))}function z5(n,e){return ve(n,"pass").map((t,i)=>{const s=At(t.passer),a=At(t.receiver),r=ji(e,s),o=ji(e,a),l=kn(e,t.frame,t.time),c=Math.round(t.ball_travel_distance),u=B5(t.pass_kind);return{id:`pass:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"pass",label:`${r} to ${o} ${u.toLowerCase()} pass | ${c}uu`,shortLabel:"P",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function H5(n,e){return ve(n,"half_volley").map((t,i)=>{const s=At(t.player),a=ji(e,s),r=kn(e,t.frame,t.time),o=Math.round(t.ball_speed);return{id:`half-volley:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-volley",label:`${a} half volley | ${o}uu/s`,shortLabel:"HV",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function V5(n,e){return ve(n,"rush").map((t,i)=>{const s=kn(e,t.end_frame,t.end_time),a=`${t.attackers}v${t.defenders}`,r=t.is_team_0?"Blue":"Orange";return{id:`rush:${t.start_frame}:${t.end_frame}:${i}`,time:s,frame:t.end_frame,kind:"rush",label:`${r} rush ${a}`,shortLabel:"R",playerId:null,playerName:null,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function G5(n,e){return(ve(n,"powerslide")??[]).filter(t=>t.active).map((t,i)=>{const s=At(t.player),a=ji(e,s);return{id:`powerslide:${t.frame}:${s}:${i+1}`,time:kn(e,t.frame,t.time),frame:t.frame,kind:"powerslide",label:`${a} powerslide`,shortLabel:"PS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function $5(n,e){return ve(n,"speed_flip").map(t=>{const i=t.player?At(t.player):null,s=i?e.players.find(o=>o.id===i)?.name??i:"Unknown",a=e.frames[t.frame]?.time??t.time,r=Math.round(t.confidence*100);return{id:`speed-flip:${t.frame}:${i}:${Math.round(t.confidence*1e3)}`,time:a,frame:t.frame,kind:"speed-flip",label:`${s} speed flip ${r}%`,shortLabel:"SF",playerId:i,playerName:s,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function W5(n,e){return(ve(n,"dodge")??[]).map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round((t.dodge_impulse?.confidence??1)*100),l=(t.dodge_impulse?.direction_label??"dodge").replaceAll("_"," ");return{id:`dodge:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"dodge",label:`${a} flip impulse ${l} ${o}%`,shortLabel:"FI",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function X5(n,e){return ve(n,"half_flip").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.end_speed-t.start_speed);return{id:`half-flip:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-flip",label:`${a} half flip ${o}% | +${l}uu/s`,shortLabel:"HF",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function K5(n,e){return ve(n,"wavedash").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.horizontal_speed_gain);return{id:`wavedash:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wavedash",label:`${a} wavedash ${o}% | +${l}uu/s`,shortLabel:"WD",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function q5(n,e){return ve(n,"bump").map((t,i)=>{const s=At(t.initiator),a=At(t.victim),r=e.players.find(u=>u.id===s)?.name??s,o=e.players.find(u=>u.id===a)?.name??a,l=kn(e,t.frame,t.time),c=Math.round(t.confidence*100);return{id:`bump:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"bump",label:`${r} bumped ${o} ${c}%`,shortLabel:"B",playerId:s,playerName:r,isTeamZero:t.initiator_is_team_0,color:t.initiator_is_team_0?en:tn}})}function Y5(n){return n.kind==="beaten_to_ball"?"BT":n.dodge_active?"DW":n.aerial?"AW":"W"}function j5(n){const e=[n.aerial?"aerial":"grounded"];return n.dodge_active&&e.push("dodge"),e.join(" ")}function Z5(n){return n.kind==="beaten_to_ball"?"beaten to ball":"whiff"}function J5(n,e){return ve(n,"whiff").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=kn(e,t.frame,t.time),o=Math.round(t.closest_approach_distance),l=Math.round(t.approach_speed);return{id:`whiff:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"whiff",label:`${a} ${j5(t)} ${Z5(t)} | ${o}uu closest, ${l}uu/s`,shortLabel:Y5(t),playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}const EE={flick:P5,ceiling_shot:D5,wall_aerial:k5,wall_aerial_shot:O5,double_tap:F5,center:N5,one_timer:U5,pass:z5,half_flip:X5,half_volley:H5,speed_flip:$5},CE=Object.keys(EE),AE=.02,ei=1e-4,Q5=200,RE=.08,f_={big:"rgba(245, 158, 11, 0.92)",small:"rgba(52, 211, 153, 0.86)"},px={both:"rgba(52, 211, 153, 0.86)",inferred_only:"rgba(239, 68, 68, 0.9)",reported_only:"rgba(59, 130, 246, 0.9)"};function e4(n){const e=n.config?.ball_half_neutral_zone_half_width_y;return typeof e=="number"&&Number.isFinite(e)?Math.max(0,e):Q5}function nh(n,e,t){return n?.frames?.[e??-1]?.time??t}function t4(n,e,t,i,s,a){const r=e?.ballFrames[n]?.position?.y;return typeof r=="number"&&Number.isFinite(r)&&Math.abs(r)<=t+ei||a>ei?"neutral":i>s+ei?"team_zero_side":s>i+ei?"team_one_side":null}function PE(n,e,t){if(n==="neutral")return{id:`half-control:neutral:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:"Neutral half control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_side";return{id:`half-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:i?"Blue half control":"Orange half control",color:ef(i)??void 0,isTeamZero:i}}function nf(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function n4(n,e){const t=nf(ve(n,"possession")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return n4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.possession?.possession_time??0,u=l.team_one?.possession?.possession_time??0,d=l.team_zero?.possession?.neutral_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;let g=null;const{startTime:_,endTime:m}=_r(o,r,e);h>f+ei&&h>p+ei?g={id:`possession:team_zero:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Blue possession",color:"rgba(59, 130, 246, 0.88)",isTeamZero:!0}:f>h+ei&&f>p+ei&&(g={id:`possession:team_one:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Orange possession",color:"rgba(245, 158, 11, 0.88)",isTeamZero:!1}),Fo(t,g),r=o}return t}function s4(n,e){const t=nf(ve(n,"ball_half")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return s4(n,e);const t=[];let i=0,s=0,a=0;const r=e4(n);let o=null;for(const l of n.frames){if(!Number.isFinite(l.time)||!Number.isFinite(l.dt)||l.dt<=0){o=l;continue}const c=l,u=c.team_zero?.ball_half?.defensive_half_time??0,d=c.team_one?.ball_half?.defensive_half_time??0,h=c.team_zero?.ball_half?.neutral_time??0,f=u-i,p=d-s,g=h-a;i=u,s=d,a=h;const{startTime:_,endTime:m}=_r(l,o,e),v=t4(l.frame_number,e,r,f,p,g),y=v?PE(v,_,m):null;Fo(t,y),o=l}return t}function r4(n,e,t){return t>ei?"neutral_third":n>e+ei?"team_zero_third":e>n+ei?"team_one_third":null}function IE(n,e,t){if(n==="neutral_third")return{id:`third-control:neutral_third:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:"Neutral third control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_third";return{id:`third-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:i?"Blue third control":"Orange third control",color:ef(i)??void 0,isTeamZero:i}}function o4(n,e){const t=nf(ve(n,"ball_third")),i=[];let s=0,a=!1,r="neutral_third",o=null;for(const l of n.frames){for(;s0)return o4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.ball_third?.defensive_third_time??0,u=l.team_one?.ball_third?.defensive_third_time??0,d=l.team_zero?.ball_third?.neutral_third_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;const{startTime:g,endTime:_}=_r(o,r,e),m=r4(h,f,p),v=m?IE(m,g,_):null;Fo(t,v),r=o}return t}function c4(n,e){return ve(n,"fifty_fifty").map((t,i)=>{const s=nh(e,t.start_frame,t.start_time),a=Math.max(s,nh(e,t.resolve_frame,t.resolve_time)),r=t.winning_team_is_team_0==null?"Neutral":t.winning_team_is_team_0?"Blue win":"Orange win",o=t.is_kickoff?"kickoff ":"";return{id:`fifty-fifty:${t.start_frame}:${t.resolve_frame}:${i}`,startTime:s,endTime:a,lane:"fifty-fifty",laneLabel:"50/50",label:`${r} ${o}50/50`,shortLabel:t.is_kickoff?"KO":"50",color:t.winning_team_is_team_0==null?"rgba(209, 217, 224, 0.7)":t.winning_team_is_team_0?"rgba(59, 130, 246, 0.48)":"rgba(245, 158, 11, 0.48)",isTeamZero:t.winning_team_is_team_0}}).sort((t,i)=>t.startTime!==i.startTime?t.startTime-i.startTime:(t.id??"").localeCompare(i.id??""))}function u4(n,e){return ve(n,"rush").map((t,i)=>{const s=e?.frames[t.start_frame]?.time??t.start_time,a=e?.frames[t.end_frame]?.time??t.end_time,r=`${t.attackers}v${t.defenders}`,o=t.is_team_0;return{id:`rush-range:${t.start_frame}:${t.end_frame}:${i}`,startTime:s,endTime:Math.max(s,a),lane:"rush",laneLabel:"Rush",label:`${o?"Blue":"Orange"} rush ${r}`,color:o?"rgba(59, 130, 246, 0.4)":"rgba(245, 158, 11, 0.4)",isTeamZero:o}})}function d4(n,e={}){const t=LE(e),i=new Set(e.detections??["both","inferred_only","reported_only"]),s=new Set(e.activities??["active","inactive","unknown"]),a=new Set(e.fieldHalves??["own","opponent","unknown"]),r=e.playerIds?new Set(e.playerIds):null;if(t.size===0||i.size===0||!s.has("unknown")||!a.has("unknown")||r?.size===0)return[];const o=new Map(n.players.map(c=>[c.id,c.isTeamZero])),l=[];for(const c of n.boostPads)if(t.has(c.size))for(let u=0;uc.startTime!==u.startTime?c.startTime-u.startTime:(c.id??"").localeCompare(u.id??""))}function LE(n){if(n.padTypes)return new Set(n.padTypes);if(n.sizes){const e=new Set(n.sizes),t=new Set;return e.has("big")&&t.add("big"),e.has("small")&&t.add("small"),e.has("big")&&e.has("small")&&t.add("ambiguous"),t}return new Set(["big","small","ambiguous"])}function mx(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function h4(n){return{big:"big",small:"small",ambiguous:"ambiguous"}[n]}function f4(n){return{both:"counted",inferred_only:"inferred",reported_only:"reported"}[n]}function p4(n,e){return n==="inferred_only"?"I":n==="reported_only"?"R":{big:"100",small:"12",ambiguous:"?"}[e]}function m4(n,e,t={}){const i=ve(n,"boost_pickup");if(i.length===0&&e)return d4(e,t);const s=LE(t),a=new Set(t.detections??["both","inferred_only","reported_only"]),r=new Set(t.activities??["active","inactive","unknown"]),o=new Set(t.fieldHalves??["own","opponent","unknown"]),l=t.playerIds?new Set(t.playerIds):null;if(s.size===0||a.size===0||r.size===0||o.size===0||l?.size===0)return[];const c=new Map((e?.players??[]).map(u=>[u.id,u.name]));return i.filter(u=>{const d=mx(u.player_id);return s.has(u.pad_type)&&a.has(u.detection)&&r.has(u.activity)&&o.has(u.field_half)&&(!l||l.has(d))}).map((u,d)=>{const h=mx(u.player_id),f=c.get(h)??h,p=Math.max(0,nh(e,u.frame,u.time)),g=f4(u.detection),_=h4(u.pad_type);return{id:`boost-pickup:${u.detection}:${u.frame}:${h}:${d}`,startTime:p,endTime:Math.max(p+RE,p),lane:"boost-pickups",laneLabel:"Boost Pickups",label:`${f} ${g} ${_} boost pickup`,shortLabel:p4(u.detection,u.pad_type),color:ef(u.is_team_0)??(u.detection==="both"?u.pad_type==="big"?f_.big:u.pad_type==="small"?f_.small:px.both:px[u.detection]),isTeamZero:u.is_team_0}}).sort((u,d)=>u.startTime!==d.startTime?u.startTime-d.startTime:(u.id??"").localeCompare(d.id??""))}const id=[{fieldName:"time_defensive_third",aliases:["time_defensive_zone"],label:"Def third",relativeColor:"own"},{fieldName:"time_neutral_third",aliases:["time_neutral_zone"],label:"Neutral third",relativeColor:"neutral"},{fieldName:"time_offensive_third",aliases:["time_offensive_zone"],label:"Off third",relativeColor:"opp"}];function DE(n,e){return n.relativeColor==="neutral"?"rgba(209, 217, 224, 0.68)":(n.relativeColor==="own"?e:!e)?"rgba(89, 195, 255, 0.74)":"rgba(255, 193, 92, 0.78)"}function Vg(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function _4(n,e){const t=n.positioning;if(!t)return 0;for(const i of[e.fieldName,...e.aliases??[]]){const s=t[i];if(typeof s=="number"&&Number.isFinite(s))return s}return 0}function g4(n){switch(n){case"defensive":return id[0];case"neutral":return id[1];case"offensive":return id[2]}}function y4(n){const e=new Map;for(const t of n.frames)for(const i of t.players){const s=Vg(i.player_id);e.has(s)||e.set(s,i.name)}return e}function v4(n){const e=nf(ve(n,"field_third")),t=[],i=new Map,s=y4(n);for(const a of e){if(!Number.isFinite(a.time)||!Number.isFinite(a.end_time)||a.end_time-a.time<=ei)continue;const r=Vg(a.player),o=g4(a.state);kE(t,i,{id:`time-in-zone:${r}:${o.fieldName}:${a.time.toFixed(3)}`,startTime:a.time,endTime:a.end_time,lane:`time-in-zone:${r}`,laneLabel:s.get(r)??r,label:o.label,color:DE(o,a.is_team_0),isTeamZero:a.is_team_0})}return t}function b4(n,e){if(ve(n,"field_third").length>0)return v4(n);const t=new Map,i=[],s=new Map;let a=null;for(const r of n.frames){if(!Number.isFinite(r.time)||!Number.isFinite(r.dt)||r.dt<=0){a=r;continue}const{startTime:o,endTime:l}=_r(r,a,e);if(l-o<=ei){a=r;continue}for(const c of r.players){const u=Vg(c.player_id),d=t.get(u)??new Map;let h=null,f=0;for(const p of id){const g=_4(c,p),_=g-(d.get(p.fieldName)??0);_>f+ei&&(f=_,h=p),d.set(p.fieldName,g)}t.set(u,d),h&&kE(i,s,{id:`time-in-zone:${u}:${h.fieldName}:${o.toFixed(3)}`,startTime:o,endTime:l,lane:`time-in-zone:${u}`,laneLabel:c.name,label:h.label,color:DE(h,c.is_team_0),isTeamZero:c.is_team_0})}a=r}return i}function _r(n,e,t){const i=t?.frames[n.frame_number]?.time??n.time,s=e?t?.frames[e.frame_number]?.time??e.time:Math.max(0,i-n.dt);return{startTime:Math.max(0,s),endTime:Math.max(s,i)}}function Fo(n,e){if(!e)return;const t=n[n.length-1];if(t&&t.lane===e.lane&&t.label===e.label&&Math.abs(t.endTime-e.startTime)<=AE){t.endTime=e.endTime;return}n.push(e)}function kE(n,e,t){if(!t)return;const i=t.lane??"",s=e.get(i);if(s&&s.label===t.label&&Math.abs(s.endTime-t.startTime)<=AE){s.endTime=t.endTime;return}n.push(t),e.set(i,t)}const Qp=236,OE="relative-positioning",x4={last:"Last",upfield:"Upfield",level:"Level",mid:"Mid"};function ta(n){return n?"team-blue":"team-orange"}function FE(n,e,t){return`
+ `,document.head.append(n)}function J5(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class Q5{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,K5);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=q5;constructor(e,t,i,s){Z5(),this.scene=e,this.container=t,this.markers=DE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="ceiling-shot-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-ceiling-shot-overlay-root",this.container.append(this.labelRoot)}update(e){const t=j5(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.ringMaterial.dispose(),a.beam.removeFromParent(),a.beamGeometry.dispose(),a.beamMaterial.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.14+.6*r,c=.94+(1-r)*.18;o.ringMaterial.opacity=l,o.beamMaterial.opacity=.18+.55*r,o.ring.position.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z+12),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z).add(this.labelOffset);const u=J5(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.ringMaterial.dispose(),e.beam.removeFromParent(),e.beamGeometry.dispose(),e.beamMaterial.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.quality>=.8?$5:e.isTeamZero?V5:G5,s=new Ye({color:i,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),a=new ni(W5,X5,48),r=new we(a,s);r.renderOrder=30,this.group.add(r);const o=new Ge().setFromPoints([new S(e.ceilingContactPosition.x,e.ceilingContactPosition.y,e.ceilingContactPosition.z),new S(e.touchPosition.x,e.touchPosition.y,e.touchPosition.z)]),l=new Rt({color:i,transparent:!0,opacity:.7,depthWrite:!1,depthTest:!1}),c=new In(o,l);c.renderOrder=29,this.group.add(c);const u=document.createElement("div");u.className=`sap-ceiling-shot-overlay-label ${e.isTeamZero?"sap-ceiling-shot-overlay-label-blue":"sap-ceiling-shot-overlay-label-orange"}`,u.textContent=`${e.playerName} ceiling shot ${e.qualityLabel}`,this.labelRoot.append(u);const d={marker:e,ring:r,ringMaterial:s,beam:c,beamGeometry:o,beamMaterial:l,label:u};return this.views.set(e.id,d),d}}const e4="#d1d9e0",OE=new Set(["flick_goal","double_tap_goal","one_timer_goal","passing_goal","air_dribble_goal","flip_reset_goal","bump_goal","demo_goal","half_volley_goal"]);function t4(n){return n.metadata.performer==="scorer"||n.metadata.modifiers?.includes("by_scorer")?"scorer":n.metadata.performer==="teammate"?"teammate":OE.has(n.kind)?"unknown":"scorer"}function n4(n){const e=t4(n);return e==="unknown"?"performer unknown":OE.has(n.kind)?`by ${e}`:null}function Zi(n,e){return n.players.find(t=>t.id===e)?.name??e}function Dn(n,e,t){return n.frames[e??-1]?.time??t}function i4(n){const e=n.kind;return e!=="forward"&&e!=="reverse"&&e!=="side"?"flick":`${n.direction==="left"||n.direction==="right"?`${n.direction} `:""}${e} flick`}function s4(n){const e=new Set(n),t=new Set(["goal"]);return e.has("core")&&(t.add("save"),t.add("shot"),t.add("assist")),e.has("demo")&&t.add("demo"),[...t]}function a4(n,e){const t=new Set(s4(e));return n.timelineEvents.filter(i=>t.has(i.kind))}function r4(n,e){return LE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"fifty-fifty",label:t.label,shortLabel:t.label.startsWith("Kickoff 50/50")?"KO":"50",isTeamZero:t.winnerIsTeamZero,color:t.winnerIsTeamZero===null?e4:t.winnerIsTeamZero?en:tn}))}function o4(n,e){return(ve(n,"flick")??[]).map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=i4(t);return{id:`flick:${t.frame}:${s}:${i+1}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"flick",label:`${a} ${r}`,shortLabel:"F",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function l4(n,e){return EE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"touch",label:`${t.playerName} touch`,shortLabel:"T",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function c4(n,e){return ve(n,"backboard").map((t,i)=>{const s=At(t.player),a=e.players.find(r=>r.id===s)?.name??s;return{id:`backboard:${t.frame}:${s}:${i}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"backboard",label:`${a} backboard`,shortLabel:"BB",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function u4(n,e){return DE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"ceiling-shot",label:`${t.playerName} ceiling shot ${t.qualityLabel}`,shortLabel:"CS",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?en:tn}))}function d4(n,e){return ve(n,"wall_aerial").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ai(t.wall).toLowerCase();return{id:`wall-aerial:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial",label:`${a} wall-to-air setup ${o}% | ${l} wall`,shortLabel:"W2A",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function h4(n,e){return ve(n,"wall_aerial_shot").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Ai(t.wall).toLowerCase();return{id:`wall-aerial-shot:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial-shot",label:`${a} wall shot ${o}% | ${l} wall`,shortLabel:"WS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function f4(n,e){return ve(n,"double_tap").map((t,i)=>{const s=At(t.player),a=Zi(e,s);return{id:`double-tap:${t.frame}:${s}:${i}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"double-tap",label:`${a} double tap`,shortLabel:"DT",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function p4(n,e){return ve(n,"center").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.lateral_centering_distance);return{id:`center:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"center",label:`${a} center | ${o}uu lateral`,shortLabel:"C",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function m4(n,e){return ve(n,"one_timer").map((t,i)=>{const s=At(t.player),a=At(t.passer),r=Zi(e,s),o=Zi(e,a),l=Dn(e,t.frame,t.time),c=Math.round(t.ball_speed);return{id:`one-timer:${t.frame}:${a}:${s}:${i}`,time:l,frame:t.frame,kind:"one-timer",label:`${r} one-timer from ${o} | ${c}uu/s`,shortLabel:"OT",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function _4(n){return Ai(n.replace(/_pass$/,""))}function g4(n,e){return ve(n,"pass").map((t,i)=>{const s=At(t.passer),a=At(t.receiver),r=Zi(e,s),o=Zi(e,a),l=Dn(e,t.frame,t.time),c=Math.round(t.ball_travel_distance),u=_4(t.pass_kind);return{id:`pass:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"pass",label:`${r} to ${o} ${u.toLowerCase()} pass | ${c}uu`,shortLabel:"P",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function y4(n,e){return ve(n,"half_volley").map((t,i)=>{const s=At(t.player),a=Zi(e,s),r=Dn(e,t.frame,t.time),o=Math.round(t.ball_speed);return{id:`half-volley:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-volley",label:`${a} half volley | ${o}uu/s`,shortLabel:"HV",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function v4(n,e){return ve(n,"rush").map((t,i)=>{const s=Dn(e,t.end_frame,t.end_time),a=`${t.attackers}v${t.defenders}`,r=t.is_team_0?"Blue":"Orange";return{id:`rush:${t.start_frame}:${t.end_frame}:${i}`,time:s,frame:t.end_frame,kind:"rush",label:`${r} rush ${a}`,shortLabel:"R",playerId:null,playerName:null,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function b4(n,e){return(ve(n,"powerslide")??[]).filter(t=>t.active).map((t,i)=>{const s=At(t.player),a=Zi(e,s);return{id:`powerslide:${t.frame}:${s}:${i+1}`,time:Dn(e,t.frame,t.time),frame:t.frame,kind:"powerslide",label:`${a} powerslide`,shortLabel:"PS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function x4(n,e){return ve(n,"speed_flip").map(t=>{const i=t.player?At(t.player):null,s=i?e.players.find(o=>o.id===i)?.name??i:"Unknown",a=e.frames[t.frame]?.time??t.time,r=Math.round(t.confidence*100);return{id:`speed-flip:${t.frame}:${i}:${Math.round(t.confidence*1e3)}`,time:a,frame:t.frame,kind:"speed-flip",label:`${s} speed flip ${r}%`,shortLabel:"SF",playerId:i,playerName:s,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function w4(n,e){return(ve(n,"dodge")??[]).map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round((t.dodge_impulse?.confidence??1)*100),l=(t.dodge_impulse?.direction_label??"dodge").replaceAll("_"," ");return{id:`dodge:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"dodge",label:`${a} flip impulse ${l} ${o}%`,shortLabel:"FI",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function S4(n,e){return ve(n,"half_flip").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.end_speed-t.start_speed);return{id:`half-flip:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-flip",label:`${a} half flip ${o}% | +${l}uu/s`,shortLabel:"HF",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function T4(n,e){return ve(n,"wavedash").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.horizontal_speed_gain);return{id:`wavedash:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wavedash",label:`${a} wavedash ${o}% | +${l}uu/s`,shortLabel:"WD",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}function M4(n,e){return ve(n,"bump").map((t,i)=>{const s=At(t.initiator),a=At(t.victim),r=e.players.find(u=>u.id===s)?.name??s,o=e.players.find(u=>u.id===a)?.name??a,l=Dn(e,t.frame,t.time),c=Math.round(t.confidence*100);return{id:`bump:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"bump",label:`${r} bumped ${o} ${c}%`,shortLabel:"B",playerId:s,playerName:r,isTeamZero:t.initiator_is_team_0,color:t.initiator_is_team_0?en:tn}})}function E4(n){return n.kind==="beaten_to_ball"?"BT":n.dodge_active?"DW":n.aerial?"AW":"W"}function C4(n){const e=[n.aerial?"aerial":"grounded"];return n.dodge_active&&e.push("dodge"),e.join(" ")}function A4(n){return n.kind==="beaten_to_ball"?"beaten to ball":"whiff"}function R4(n,e){return ve(n,"whiff").map((t,i)=>{const s=At(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Dn(e,t.frame,t.time),o=Math.round(t.closest_approach_distance),l=Math.round(t.approach_speed);return{id:`whiff:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"whiff",label:`${a} ${C4(t)} ${A4(t)} | ${o}uu closest, ${l}uu/s`,shortLabel:E4(t),playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?en:tn}})}const FE={flick:o4,ceiling_shot:u4,wall_aerial:d4,wall_aerial_shot:h4,double_tap:f4,center:p4,one_timer:m4,pass:g4,half_flip:S4,half_volley:y4,speed_flip:x4},NE=Object.keys(FE),UE=.02,ei=1e-4,P4=200,BE=.08,b_={big:"rgba(245, 158, 11, 0.92)",small:"rgba(52, 211, 153, 0.86)"},wx={both:"rgba(52, 211, 153, 0.86)",inferred_only:"rgba(239, 68, 68, 0.9)",reported_only:"rgba(59, 130, 246, 0.9)"};function I4(n){const e=n.config?.ball_half_neutral_zone_half_width_y;return typeof e=="number"&&Number.isFinite(e)?Math.max(0,e):P4}function lh(n,e,t){return n?.frames?.[e??-1]?.time??t}function L4(n,e,t,i,s,a){const r=e?.ballFrames[n]?.position?.y;return typeof r=="number"&&Number.isFinite(r)&&Math.abs(r)<=t+ei||a>ei?"neutral":i>s+ei?"team_zero_side":s>i+ei?"team_one_side":null}function zE(n,e,t){if(n==="neutral")return{id:`half-control:neutral:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:"Neutral half control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_side";return{id:`half-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:i?"Blue half control":"Orange half control",color:of(i)??void 0,isTeamZero:i}}function cf(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function k4(n,e){const t=cf(ve(n,"possession")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return k4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.possession?.possession_time??0,u=l.team_one?.possession?.possession_time??0,d=l.team_zero?.possession?.neutral_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;let g=null;const{startTime:_,endTime:m}=gr(o,r,e);h>f+ei&&h>p+ei?g={id:`possession:team_zero:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Blue possession",color:"rgba(59, 130, 246, 0.88)",isTeamZero:!0}:f>h+ei&&f>p+ei&&(g={id:`possession:team_one:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Orange possession",color:"rgba(245, 158, 11, 0.88)",isTeamZero:!1}),Bo(t,g),r=o}return t}function O4(n,e){const t=cf(ve(n,"ball_half")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return O4(n,e);const t=[];let i=0,s=0,a=0;const r=I4(n);let o=null;for(const l of n.frames){if(!Number.isFinite(l.time)||!Number.isFinite(l.dt)||l.dt<=0){o=l;continue}const c=l,u=c.team_zero?.ball_half?.defensive_half_time??0,d=c.team_one?.ball_half?.defensive_half_time??0,h=c.team_zero?.ball_half?.neutral_time??0,f=u-i,p=d-s,g=h-a;i=u,s=d,a=h;const{startTime:_,endTime:m}=gr(l,o,e),v=L4(l.frame_number,e,r,f,p,g),y=v?zE(v,_,m):null;Bo(t,y),o=l}return t}function N4(n,e,t){return t>ei?"neutral_third":n>e+ei?"team_zero_third":e>n+ei?"team_one_third":null}function HE(n,e,t){if(n==="neutral_third")return{id:`third-control:neutral_third:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:"Neutral third control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_third";return{id:`third-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:i?"Blue third control":"Orange third control",color:of(i)??void 0,isTeamZero:i}}function U4(n,e){const t=cf(ve(n,"ball_third")),i=[];let s=0,a=!1,r="neutral_third",o=null;for(const l of n.frames){for(;s0)return U4(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.ball_third?.defensive_third_time??0,u=l.team_one?.ball_third?.defensive_third_time??0,d=l.team_zero?.ball_third?.neutral_third_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;const{startTime:g,endTime:_}=gr(o,r,e),m=N4(h,f,p),v=m?HE(m,g,_):null;Bo(t,v),r=o}return t}function z4(n,e){return ve(n,"fifty_fifty").map((t,i)=>{const s=lh(e,t.start_frame,t.start_time),a=Math.max(s,lh(e,t.resolve_frame,t.resolve_time)),r=t.winning_team_is_team_0==null?"Neutral":t.winning_team_is_team_0?"Blue win":"Orange win",o=t.is_kickoff?"kickoff ":"";return{id:`fifty-fifty:${t.start_frame}:${t.resolve_frame}:${i}`,startTime:s,endTime:a,lane:"fifty-fifty",laneLabel:"50/50",label:`${r} ${o}50/50`,shortLabel:t.is_kickoff?"KO":"50",color:t.winning_team_is_team_0==null?"rgba(209, 217, 224, 0.7)":t.winning_team_is_team_0?"rgba(59, 130, 246, 0.48)":"rgba(245, 158, 11, 0.48)",isTeamZero:t.winning_team_is_team_0}}).sort((t,i)=>t.startTime!==i.startTime?t.startTime-i.startTime:(t.id??"").localeCompare(i.id??""))}function H4(n,e){return ve(n,"rush").map((t,i)=>{const s=e?.frames[t.start_frame]?.time??t.start_time,a=e?.frames[t.end_frame]?.time??t.end_time,r=`${t.attackers}v${t.defenders}`,o=t.is_team_0;return{id:`rush-range:${t.start_frame}:${t.end_frame}:${i}`,startTime:s,endTime:Math.max(s,a),lane:"rush",laneLabel:"Rush",label:`${o?"Blue":"Orange"} rush ${r}`,color:o?"rgba(59, 130, 246, 0.4)":"rgba(245, 158, 11, 0.4)",isTeamZero:o}})}function V4(n,e={}){const t=VE(e),i=new Set(e.detections??["both","inferred_only","reported_only"]),s=new Set(e.activities??["active","inactive","unknown"]),a=new Set(e.fieldHalves??["own","opponent","unknown"]),r=e.playerIds?new Set(e.playerIds):null;if(t.size===0||i.size===0||!s.has("unknown")||!a.has("unknown")||r?.size===0)return[];const o=new Map(n.players.map(c=>[c.id,c.isTeamZero])),l=[];for(const c of n.boostPads)if(t.has(c.size))for(let u=0;uc.startTime!==u.startTime?c.startTime-u.startTime:(c.id??"").localeCompare(u.id??""))}function VE(n){if(n.padTypes)return new Set(n.padTypes);if(n.sizes){const e=new Set(n.sizes),t=new Set;return e.has("big")&&t.add("big"),e.has("small")&&t.add("small"),e.has("big")&&e.has("small")&&t.add("ambiguous"),t}return new Set(["big","small","ambiguous"])}function Sx(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function G4(n){return{big:"big",small:"small",ambiguous:"ambiguous"}[n]}function $4(n){return{both:"counted",inferred_only:"inferred",reported_only:"reported"}[n]}function W4(n,e){return n==="inferred_only"?"I":n==="reported_only"?"R":{big:"100",small:"12",ambiguous:"?"}[e]}function X4(n,e,t={}){const i=ve(n,"boost_pickup");if(i.length===0&&e)return V4(e,t);const s=VE(t),a=new Set(t.detections??["both","inferred_only","reported_only"]),r=new Set(t.activities??["active","inactive","unknown"]),o=new Set(t.fieldHalves??["own","opponent","unknown"]),l=t.playerIds?new Set(t.playerIds):null;if(s.size===0||a.size===0||r.size===0||o.size===0||l?.size===0)return[];const c=new Map((e?.players??[]).map(u=>[u.id,u.name]));return i.filter(u=>{const d=Sx(u.player_id);return s.has(u.pad_type)&&a.has(u.detection)&&r.has(u.activity)&&o.has(u.field_half)&&(!l||l.has(d))}).map((u,d)=>{const h=Sx(u.player_id),f=c.get(h)??h,p=Math.max(0,lh(e,u.frame,u.time)),g=$4(u.detection),_=G4(u.pad_type);return{id:`boost-pickup:${u.detection}:${u.frame}:${h}:${d}`,startTime:p,endTime:Math.max(p+BE,p),lane:"boost-pickups",laneLabel:"Boost Pickups",label:`${f} ${g} ${_} boost pickup`,shortLabel:W4(u.detection,u.pad_type),color:of(u.is_team_0)??(u.detection==="both"?u.pad_type==="big"?b_.big:u.pad_type==="small"?b_.small:wx.both:wx[u.detection]),isTeamZero:u.is_team_0}}).sort((u,d)=>u.startTime!==d.startTime?u.startTime-d.startTime:(u.id??"").localeCompare(d.id??""))}const ld=[{fieldName:"time_defensive_third",aliases:["time_defensive_zone"],label:"Def third",relativeColor:"own"},{fieldName:"time_neutral_third",aliases:["time_neutral_zone"],label:"Neutral third",relativeColor:"neutral"},{fieldName:"time_offensive_third",aliases:["time_offensive_zone"],label:"Off third",relativeColor:"opp"}];function GE(n,e){return n.relativeColor==="neutral"?"rgba(209, 217, 224, 0.68)":(n.relativeColor==="own"?e:!e)?"rgba(89, 195, 255, 0.74)":"rgba(255, 193, 92, 0.78)"}function Yg(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function K4(n,e){const t=n.positioning;if(!t)return 0;for(const i of[e.fieldName,...e.aliases??[]]){const s=t[i];if(typeof s=="number"&&Number.isFinite(s))return s}return 0}function q4(n){switch(n){case"defensive":return ld[0];case"neutral":return ld[1];case"offensive":return ld[2]}}function Y4(n){const e=new Map;for(const t of n.frames)for(const i of t.players){const s=Yg(i.player_id);e.has(s)||e.set(s,i.name)}return e}function j4(n){const e=cf(ve(n,"field_third")),t=[],i=new Map,s=Y4(n);for(const a of e){if(!Number.isFinite(a.time)||!Number.isFinite(a.end_time)||a.end_time-a.time<=ei)continue;const r=Yg(a.player),o=q4(a.state);$E(t,i,{id:`time-in-zone:${r}:${o.fieldName}:${a.time.toFixed(3)}`,startTime:a.time,endTime:a.end_time,lane:`time-in-zone:${r}`,laneLabel:s.get(r)??r,label:o.label,color:GE(o,a.is_team_0),isTeamZero:a.is_team_0})}return t}function Z4(n,e){if(ve(n,"field_third").length>0)return j4(n);const t=new Map,i=[],s=new Map;let a=null;for(const r of n.frames){if(!Number.isFinite(r.time)||!Number.isFinite(r.dt)||r.dt<=0){a=r;continue}const{startTime:o,endTime:l}=gr(r,a,e);if(l-o<=ei){a=r;continue}for(const c of r.players){const u=Yg(c.player_id),d=t.get(u)??new Map;let h=null,f=0;for(const p of ld){const g=K4(c,p),_=g-(d.get(p.fieldName)??0);_>f+ei&&(f=_,h=p),d.set(p.fieldName,g)}t.set(u,d),h&&$E(i,s,{id:`time-in-zone:${u}:${h.fieldName}:${o.toFixed(3)}`,startTime:o,endTime:l,lane:`time-in-zone:${u}`,laneLabel:c.name,label:h.label,color:GE(h,c.is_team_0),isTeamZero:c.is_team_0})}a=r}return i}function gr(n,e,t){const i=t?.frames[n.frame_number]?.time??n.time,s=e?t?.frames[e.frame_number]?.time??e.time:Math.max(0,i-n.dt);return{startTime:Math.max(0,s),endTime:Math.max(s,i)}}function Bo(n,e){if(!e)return;const t=n[n.length-1];if(t&&t.lane===e.lane&&t.label===e.label&&Math.abs(t.endTime-e.startTime)<=UE){t.endTime=e.endTime;return}n.push(e)}function $E(n,e,t){if(!t)return;const i=t.lane??"",s=e.get(i);if(s&&s.label===t.label&&Math.abs(s.endTime-t.startTime)<=UE){s.endTime=t.endTime;return}n.push(t),e.set(i,t)}const rm=236,WE="relative-positioning",J4={last:"Last",upfield:"Upfield",level:"Level",mid:"Mid"};function na(n){return n?"team-blue":"team-orange"}function XE(n,e,t){return`
${n} ${t.metaHtml??""}
${e} -
`}function Tn(n,e,t,i=""){return FE(n,t,{metaHtml:i,tone:e?"blue":"orange"})}function si(n,e){return`
${[!0,!1].map(t=>{const i=n.filter(a=>a.is_team_0===t);if(i.length===0)return"";const s=t?"Blue":"Orange";return`
+
`}function Tn(n,e,t,i=""){return XE(n,t,{metaHtml:i,tone:e?"blue":"orange"})}function si(n,e){return`
${[!0,!1].map(t=>{const i=n.filter(a=>a.is_team_0===t);if(i.length===0)return"";const s=t?"Blue":"Orange";return`

${s} team

${i.length} player${i.length===1?"":"s"} @@ -5635,12 +5700,12 @@ void main() {
${i.map(e).join("")}
-
`}).join("")}
`}function sf(n,e,t=""){return FE(n,e,{metaHtml:t,tone:"shared"})}function wn(n,e,t){const i=zt(n.statsFrameLookup,e);return i?i.players.find(s=>At(s.player_id)===t)??null:null}function w4(n,e,t){const i=n.players.find(p=>p.id===e);if(!i||!i.frames[t]?.position)return"mid";const a=i.isTeamZero,r=n.players.filter(p=>p.isTeamZero===a).length,o=[];let l=0;for(const p of n.players){if(p.isTeamZero!==a)continue;const g=p.frames[t];if(!g?.position)continue;const _=a?g.position.y:-g.position.y;o.push(_),p.id===e&&(l=_)}if(r<2||o.length!==r)return"mid";const c=Math.min(...o),u=Math.max(...o);if(u-c<=Qp)return"level";const h=l-c<=Qp,f=u-l<=Qp;return h&&!f?"last":f&&!h?"upfield":"mid"}function S4(n){let e=null,t=null;const i=new Set,s=["possession_state","field_half","field_third"];return{id:"possession",label:"Possession",setup(){a()},teardown(){},onBeforeRender(){},getTimelineRanges(o){return i4(o.statsTimeline,o.replay)},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const u=zt(l.statsFrameLookup,o)?.team_zero?.possession;return u?sf("Control State",rx(u,{labelPerspective:{kind:"shared"},breakdownClasses:r()})):""},renderFocusedPlayerStats(o,l,c){const u=zt(c.statsFrameLookup,l),d=wn(c,l,o),h=d?.is_team_0?u?.team_zero?.possession:u?.team_one?.possession;return!h||!d?"":rx(h,{labelPerspective:{kind:"team"},breakdownClasses:r()})},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Possession breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";const h=document.createElement("label");h.className="toggle";const f=document.createElement("input");f.type="checkbox",f.dataset.breakdownClass="possession_state",f.addEventListener("change",()=>{f.checked?i.add("possession_state"):i.delete("possession_state"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const p=document.createElement("span");p.textContent="Control",h.append(f,p),d.append(h);const g=document.createElement("label");g.className="toggle";const _=document.createElement("input");_.type="checkbox",_.dataset.breakdownClass="field_third",_.addEventListener("change",()=>{_.checked?i.add("field_third"):i.delete("field_third"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const m=document.createElement("span");m.textContent="Thirds",g.append(_,m),d.append(g);const v=document.createElement("label");v.className="toggle";const y=document.createElement("input");y.type="checkbox",y.dataset.breakdownClass="field_half",y.addEventListener("change",()=>{y.checked?i.add("field_half"):i.delete("field_half"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const b=document.createElement("span");b.textContent="Halves",v.append(y,b),d.append(v),e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=s.filter(l=>i.has(l));t.textContent=o.length===0?"Total only":o.map(l=>l==="possession_state"?"Control":l==="field_half"?"Halves":"Thirds").join(" x ")}}}function r(){return s.filter(o=>i.has(o))}}function T4(){let n=null;return{id:"fifty-fifty",label:"50/50",setup(e){n=new u5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return R5(e.statsTimeline,e.replay)},getTimelineRanges(e){return c4(e.statsTimeline,e.replay)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);if(!i)return"";const s=sf("Challenge Summary",kV(i.team_zero?.fifty_fifty)),a=si(i.players,r=>Tn(r.name,r.is_team_0,ix(r.fifty_fifty)));return s+a},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?ix(s.fifty_fifty):""}}}function M4(){let n=null,e=null;return{id:"ball_half",label:"Half Control",setup(t){e=t.replay,n=new LV(t.player.sceneState.replayRoot,t.fieldScale)},teardown(){n?.dispose(),n=null,e=null},onBeforeRender(t){const i=e?.ballFrames[t.frameIndex];n?.update(i?.position?.y??null)},getTimelineRanges(t){return a4(t.statsTimeline,t.replay)},renderStats(t,i){const a=zt(i.statsFrameLookup,t)?.team_zero?.ball_half;return a?sf("Field State",lx(a,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(t,i,s){const a=zt(s.statsFrameLookup,i),r=wn(s,i,t),o=r?.is_team_0?a?.team_zero?.ball_half:a?.team_one?.ball_half;return!o||!r?"":lx(o,{labelPerspective:{kind:"team"}})}}}function E4(){return{id:"ball_third",label:"Third Control",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return l4(n.statsTimeline,n.replay)},renderStats(n,e){const i=zt(e.statsFrameLookup,n)?.team_zero?.ball_third;return i?sf("Field State",ux(i,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.ball_third:i?.team_one?.ball_third;return!a||!s?"":ux(a,{labelPerspective:{kind:"team"}})}}}function C4(){return{id:"rush",label:"Rush",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return u4(n.statsTimeline,n.replay)},getTimelineEvents(n){return V5(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n),i=t?.team_zero?.rush,s=t?.team_one?.rush;return!i||!s?"":[Tn("Blue Team",!0,Jp(i)),Tn("Orange Team",!1,Jp(s))].join("")},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.rush:i?.team_one?.rush;return!a||!s?"":Jp(a)}}}const p_={speed_band:{valueOrder:["slow","boost","supersonic"],formatValue:n=>({slow:"Slow",boost:"Boost",supersonic:"Supersonic"})[n]??n},height_band:{valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n}};function A4(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function em(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function R4(n,e,t=1){return n===void 0||Number.isNaN(n)?"?":e===void 0||Number.isNaN(e)||e<=0?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${(n*100/e).toFixed(t)}%)`}function _x(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function sd(n,e){return`
${_x(n)}${_x(e)}
`}function P4(n,e,t){for(const i of t){const{valueOrder:s}=p_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function I4(n,e){if(e.length===1){const t=e[0];return p_[t].formatValue(n[t])}return e.map(t=>p_[t].formatValue(n[t])).join(" / ")}function L4(n,e,t){if(e.length===0||!n?.labeled_tracked_time?.entries?.length)return"";const i=new Map,s=n?.labeled_tracked_time?.entries??[];for(const a of s){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=i.get(c);u?u.total+=a.value:i.set(c,{values:o,total:a.value})}return[...i.values()].sort((a,r)=>P4(a.values,r.values,e)).map(a=>sd(I4(a.values,e),R4(a.total,t))).join("")}function gx(n,e={}){const t=n?.tracked_time,i=n&&t&&t>0?n.speed_integral/t:t===0?0:void 0,s=A4(e.breakdownClasses),a=L4(n,s,t);return` - ${sd("Tracked",em(t,1,"s"))} - ${sd("Distance",em(n?.total_distance,0," uu"))} - ${sd("Avg speed",em(i,0," uu/s"))} + `}).join("")}
`}function uf(n,e,t=""){return XE(n,e,{metaHtml:t,tone:"shared"})}function wn(n,e,t){const i=zt(n.statsFrameLookup,e);return i?i.players.find(s=>At(s.player_id)===t)??null:null}function Q4(n,e,t){const i=n.players.find(p=>p.id===e);if(!i||!i.frames[t]?.position)return"mid";const a=i.isTeamZero,r=n.players.filter(p=>p.isTeamZero===a).length,o=[];let l=0;for(const p of n.players){if(p.isTeamZero!==a)continue;const g=p.frames[t];if(!g?.position)continue;const _=a?g.position.y:-g.position.y;o.push(_),p.id===e&&(l=_)}if(r<2||o.length!==r)return"mid";const c=Math.min(...o),u=Math.max(...o);if(u-c<=rm)return"level";const h=l-c<=rm,f=u-l<=rm;return h&&!f?"last":f&&!h?"upfield":"mid"}function eG(n){let e=null,t=null;const i=new Set,s=["possession_state","field_half","field_third"];return{id:"possession",label:"Possession",setup(){a()},teardown(){},onBeforeRender(){},getTimelineRanges(o){return D4(o.statsTimeline,o.replay)},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const u=zt(l.statsFrameLookup,o)?.team_zero?.possession;return u?uf("Control State",px(u,{labelPerspective:{kind:"shared"},breakdownClasses:r()})):""},renderFocusedPlayerStats(o,l,c){const u=zt(c.statsFrameLookup,l),d=wn(c,l,o),h=d?.is_team_0?u?.team_zero?.possession:u?.team_one?.possession;return!h||!d?"":px(h,{labelPerspective:{kind:"team"},breakdownClasses:r()})},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Possession breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";const h=document.createElement("label");h.className="toggle";const f=document.createElement("input");f.type="checkbox",f.dataset.breakdownClass="possession_state",f.addEventListener("change",()=>{f.checked?i.add("possession_state"):i.delete("possession_state"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const p=document.createElement("span");p.textContent="Control",h.append(f,p),d.append(h);const g=document.createElement("label");g.className="toggle";const _=document.createElement("input");_.type="checkbox",_.dataset.breakdownClass="field_third",_.addEventListener("change",()=>{_.checked?i.add("field_third"):i.delete("field_third"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const m=document.createElement("span");m.textContent="Thirds",g.append(_,m),d.append(g);const v=document.createElement("label");v.className="toggle";const y=document.createElement("input");y.type="checkbox",y.dataset.breakdownClass="field_half",y.addEventListener("change",()=>{y.checked?i.add("field_half"):i.delete("field_half"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const b=document.createElement("span");b.textContent="Halves",v.append(y,b),d.append(v),e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=s.filter(l=>i.has(l));t.textContent=o.length===0?"Total only":o.map(l=>l==="possession_state"?"Control":l==="field_half"?"Halves":"Thirds").join(" x ")}}}function r(){return s.filter(o=>i.has(o))}}function tG(){let n=null;return{id:"fifty-fifty",label:"50/50",setup(e){n=new H5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return r4(e.statsTimeline,e.replay)},getTimelineRanges(e){return z4(e.statsTimeline,e.replay)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);if(!i)return"";const s=uf("Challenge Summary",d5(i.team_zero?.fifty_fifty)),a=si(i.players,r=>Tn(r.name,r.is_team_0,dx(r.fifty_fifty)));return s+a},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?dx(s.fifty_fifty):""}}}function nG(){let n=null,e=null;return{id:"ball_half",label:"Half Control",setup(t){e=t.replay,n=new c5(t.player.sceneState.replayRoot,t.fieldScale)},teardown(){n?.dispose(),n=null,e=null},onBeforeRender(t){const i=e?.ballFrames[t.frameIndex];n?.update(i?.position?.y??null)},getTimelineRanges(t){return F4(t.statsTimeline,t.replay)},renderStats(t,i){const a=zt(i.statsFrameLookup,t)?.team_zero?.ball_half;return a?uf("Field State",_x(a,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(t,i,s){const a=zt(s.statsFrameLookup,i),r=wn(s,i,t),o=r?.is_team_0?a?.team_zero?.ball_half:a?.team_one?.ball_half;return!o||!r?"":_x(o,{labelPerspective:{kind:"team"}})}}}function iG(){return{id:"ball_third",label:"Third Control",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return B4(n.statsTimeline,n.replay)},renderStats(n,e){const i=zt(e.statsFrameLookup,n)?.team_zero?.ball_third;return i?uf("Field State",yx(i,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.ball_third:i?.team_one?.ball_third;return!a||!s?"":yx(a,{labelPerspective:{kind:"team"}})}}}function sG(){return{id:"rush",label:"Rush",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return H4(n.statsTimeline,n.replay)},getTimelineEvents(n){return v4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n),i=t?.team_zero?.rush,s=t?.team_one?.rush;return!i||!s?"":[Tn("Blue Team",!0,am(i)),Tn("Orange Team",!1,am(s))].join("")},renderFocusedPlayerStats(n,e,t){const i=zt(t.statsFrameLookup,e),s=wn(t,e,n),a=s?.is_team_0?i?.team_zero?.rush:i?.team_one?.rush;return!a||!s?"":am(a)}}}const x_={speed_band:{valueOrder:["slow","boost","supersonic"],formatValue:n=>({slow:"Slow",boost:"Boost",supersonic:"Supersonic"})[n]??n},height_band:{valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n}};function aG(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function om(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function rG(n,e,t=1){return n===void 0||Number.isNaN(n)?"?":e===void 0||Number.isNaN(e)||e<=0?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${(n*100/e).toFixed(t)}%)`}function Tx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function cd(n,e){return`
${Tx(n)}${Tx(e)}
`}function oG(n,e,t){for(const i of t){const{valueOrder:s}=x_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function lG(n,e){if(e.length===1){const t=e[0];return x_[t].formatValue(n[t])}return e.map(t=>x_[t].formatValue(n[t])).join(" / ")}function cG(n,e,t){if(e.length===0||!n?.labeled_tracked_time?.entries?.length)return"";const i=new Map,s=n?.labeled_tracked_time?.entries??[];for(const a of s){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=i.get(c);u?u.total+=a.value:i.set(c,{values:o,total:a.value})}return[...i.values()].sort((a,r)=>oG(a.values,r.values,e)).map(a=>cd(lG(a.values,e),rG(a.total,t))).join("")}function Mx(n,e={}){const t=n?.tracked_time,i=n&&t&&t>0?n.speed_integral/t:t===0?0:void 0,s=aG(e.breakdownClasses),a=cG(n,s,t);return` + ${cd("Tracked",om(t,1,"s"))} + ${cd("Distance",om(n?.total_distance,0," uu"))} + ${cd("Avg speed",om(i,0," uu/s"))} ${a} - `}const yx="subtr-actor-flip-impulse-overlay-styles",D4=5882879,k4=16761180,tm=260,O4=760,F4=260,N4=2.5;function NE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function U4(n,e){const t=NE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function B4(n){return n.split("_").filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function z4(n,e){return ve(n,"dodge").flatMap((t,i)=>{const s=t.dodge_impulse;if(!s)return[];const a=U4(e,t.player),r=NE(t.player),o=e.frames[t.frame]?.time??t.time,l=new S(s.estimated_direction[0],s.estimated_direction[1],s.estimated_direction[2]);return l.lengthSq()<=Number.EPSILON&&l.set(1,0,0),l.normalize(),{id:`dodge-impulse:${t.frame}:${r}:${i}`,time:o,frame:t.frame,isTeamZero:t.is_team_0,playerId:r,playerName:a,position:new S(s.start_position[0],s.start_position[1],s.start_position[2]+44),direction:l,magnitude:s.estimated_impulse_magnitude,confidence:s.confidence,directionLabel:s.direction_label}})}function H4(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function V4(){if(document.getElementById(yx))return;const n=document.createElement("style");n.id=yx,n.textContent=` + `}const Ex="subtr-actor-flip-impulse-overlay-styles",uG=5882879,dG=16761180,lm=260,hG=760,fG=260,pG=2.5;function KE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function mG(n,e){const t=KE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function _G(n){return n.split("_").filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function gG(n,e){return ve(n,"dodge").flatMap((t,i)=>{const s=t.dodge_impulse;if(!s)return[];const a=mG(e,t.player),r=KE(t.player),o=e.frames[t.frame]?.time??t.time,l=new S(s.estimated_direction[0],s.estimated_direction[1],s.estimated_direction[2]);return l.lengthSq()<=Number.EPSILON&&l.set(1,0,0),l.normalize(),{id:`dodge-impulse:${t.frame}:${r}:${i}`,time:o,frame:t.frame,isTeamZero:t.is_team_0,playerId:r,playerName:a,position:new S(s.start_position[0],s.start_position[1],s.start_position[2]+44),direction:l,magnitude:s.estimated_impulse_magnitude,confidence:s.confidence,directionLabel:s.direction_label}})}function yG(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function vG(){if(document.getElementById(Ex))return;const n=document.createElement("style");n.id=Ex,n.textContent=` .sap-flip-impulse-overlay-root { position: absolute; inset: 0; @@ -5676,7 +5741,7 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function G4(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class $4{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,F4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=N4;constructor(e,t,i,s){V4(),this.scene=e,this.container=t,this.markers=z4(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="flip-impulse-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-flip-impulse-overlay-root",this.container.append(this.labelRoot)}update(e){const t=H4(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.arrow.removeFromParent(),a.arrow.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.24+.72*r,c=tm+Math.min(1,s.magnitude/450)*(O4-tm);o.arrow.position.copy(s.position),o.arrow.setDirection(s.direction),o.arrow.setLength(c,70,38),o.arrow.cone.material.opacity=l,o.arrow.line.material.opacity=l,this.worldPosition.copy(s.position).add(this.labelOffset);const u=G4(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.arrow.removeFromParent(),e.arrow.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.isTeamZero?D4:k4,s=new Tg(e.direction,e.position,tm,i);s.renderOrder=35,s.line.material=new Rt({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),s.cone.material=new Ye({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),this.group.add(s);const a=document.createElement("div");a.className=`sap-flip-impulse-overlay-label ${e.isTeamZero?"sap-flip-impulse-overlay-label-blue":"sap-flip-impulse-overlay-label-orange"}`,a.textContent=`${e.playerName} ${B4(e.directionLabel)} ${Math.round(e.confidence*100)}%`,this.labelRoot.append(a);const r={marker:e,arrow:s,label:a};return this.views.set(e.id,r),r}}const vx="subtr-actor-speed-flip-overlay-styles",W4=5882879,X4=16761180,K4=16185075,q4=150,Y4=230,j4=220,Z4=4;function UE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function J4(n,e){const t=UE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function Q4(n,e){return ve(n,"speed_flip").map(t=>{const i=J4(e,t.player),s=UE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`speed-flip:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,position:{x:t.start_position[0],y:t.start_position[1],z:t.start_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function eG(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function tG(){if(document.getElementById(vx))return;const n=document.createElement("style");n.id=vx,n.textContent=` + `,document.head.append(n)}function bG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class xG{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,fG);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=pG;constructor(e,t,i,s){vG(),this.scene=e,this.container=t,this.markers=gG(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="flip-impulse-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-flip-impulse-overlay-root",this.container.append(this.labelRoot)}update(e){const t=yG(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.arrow.removeFromParent(),a.arrow.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.24+.72*r,c=lm+Math.min(1,s.magnitude/450)*(hG-lm);o.arrow.position.copy(s.position),o.arrow.setDirection(s.direction),o.arrow.setLength(c,70,38),o.arrow.cone.material.opacity=l,o.arrow.line.material.opacity=l,this.worldPosition.copy(s.position).add(this.labelOffset);const u=bG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.arrow.removeFromParent(),e.arrow.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.isTeamZero?uG:dG,s=new Ig(e.direction,e.position,lm,i);s.renderOrder=35,s.line.material=new Rt({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),s.cone.material=new Ye({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),this.group.add(s);const a=document.createElement("div");a.className=`sap-flip-impulse-overlay-label ${e.isTeamZero?"sap-flip-impulse-overlay-label-blue":"sap-flip-impulse-overlay-label-orange"}`,a.textContent=`${e.playerName} ${_G(e.directionLabel)} ${Math.round(e.confidence*100)}%`,this.labelRoot.append(a);const r={marker:e,arrow:s,label:a};return this.views.set(e.id,r),r}}const Cx="subtr-actor-speed-flip-overlay-styles",wG=5882879,SG=16761180,TG=16185075,MG=150,EG=230,CG=220,AG=4;function qE(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function RG(n,e){const t=qE(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function PG(n,e){return ve(n,"speed_flip").map(t=>{const i=RG(e,t.player),s=qE(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`speed-flip:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,position:{x:t.start_position[0],y:t.start_position[1],z:t.start_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function IG(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function LG(){if(document.getElementById(Cx))return;const n=document.createElement("style");n.id=Cx,n.textContent=` .sap-speed-flip-overlay-root { position: absolute; inset: 0; @@ -5713,7 +5778,7 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function nG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class iG{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,j4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=Z4;constructor(e,t,i,s){tG(),this.scene=e,this.container=t,this.markers=Q4(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="speed-flip-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-speed-flip-overlay-root",this.container.append(this.labelRoot)}update(e){const t=eG(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.16+.56*r,c=.96+(1-r)*.22;o.material.opacity=l,o.ring.position.set(s.position.x,s.position.y,s.position.z+14),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.position.x,s.position.y,s.position.z).add(this.labelOffset);const u=nG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ye({color:e.quality>=.75?K4:e.isTeamZero?W4:X4,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),s=new ni(q4,Y4,48),a=new we(s,i);a.renderOrder=30,this.group.add(a);const r=document.createElement("div");r.className=`sap-speed-flip-overlay-label ${e.isTeamZero?"sap-speed-flip-overlay-label-blue":"sap-speed-flip-overlay-label-orange"}`,r.textContent=`${e.playerName} speed flip ${e.qualityLabel}`,this.labelRoot.append(r);const o={marker:e,ring:a,material:i,label:r};return this.views.set(e.id,o),o}}const Du=[{value:"big",label:"Big pads"},{value:"small",label:"Small pads"},{value:"ambiguous",label:"Ambiguous pads"}],nm=[{value:"both",label:"Both detectors"},{value:"inferred_only",label:"Inferred only"},{value:"reported_only",label:"Reported only"}],ku=[{value:"active",label:"Active play"},{value:"inactive",label:"Inactive play"},{value:"unknown",label:"Unknown activity"}],Ou=[{value:"own",label:"Own half"},{value:"opponent",label:"Opponent half"},{value:"unknown",label:"Unknown half"}];function sG(n,e){return n===e||n==="ambiguous"}function aG(n,e){const t=e?rG(e,ve(e,"boost_pickup")):[];return t.length===0?null:t.find(i=>At(i.player_id)===n.player.id&&i.detection!=="inferred_only"&&i.frame===n.event.frame&&sG(i.pad_type,n.pad.size))??null}function rG(n,e){if(e.length>0)return e;const t=n.events?.boost_pickups;return Array.isArray(t)?t:e}function BE(n={}){let e=null,t=null,i=null,s=null,a=null,r=null;const o=new Set(Du.map(M=>M.value)),l=new Set(nm.map(M=>M.value)),c=new Set(ku.map(M=>M.value)),u=new Set(Ou.map(M=>M.value));let d=null,h=!1;function f(M,C,w,E){const R=document.createElement("div");R.className="boost-pickup-filter-group";const D=document.createElement("p");D.className="module-settings-group-title",D.textContent=M;const O=document.createElement("div");O.className="boost-pickup-filter-options";for(const k of C){const U=document.createElement("label");U.className="toggle";const F=document.createElement("input");F.type="checkbox",F.dataset.boostPickupFilter=E,F.dataset.boostPickupValue=k.value,F.addEventListener("change",()=>{F.checked?w.add(k.value):w.delete(k.value),_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const W=document.createElement("span");W.textContent=k.label,U.append(F,W),O.append(U)}return R.append(D,O),R}function p(){const M=document.createElement("div");M.className="boost-pickup-filter-group boost-pickup-filter-group-wide",i=M;const C=document.createElement("p");return C.className="module-settings-group-title",C.textContent="Player",s=document.createElement("div"),s.className="boost-pickup-filter-options",M.append(C,s),M}function g(M){if(s&&(s.replaceChildren(),i&&(i.hidden=!M||M.players.length===0),!!M))for(const C of M.players){const w=document.createElement("label");w.className="toggle";const E=document.createElement("input");E.type="checkbox",E.dataset.boostPickupPlayerId=C.id,E.addEventListener("change",()=>{d||(d=new Set(M.players.map(D=>D.id))),E.checked?d.add(C.id):d.delete(C.id),_(M),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const R=document.createElement("span");R.textContent=`${C.name} (${C.isTeamZero?"Blue":"Orange"})`,w.append(E,R),s.append(w)}}function _(M){if(e){for(const C of e.querySelectorAll("input[data-boost-pickup-filter][data-boost-pickup-value]")){const w=C.dataset.boostPickupFilter,E=C.dataset.boostPickupValue;C.checked=m(w,E)}for(const C of e.querySelectorAll("input[data-boost-pickup-player-id]")){const w=C.dataset.boostPickupPlayerId;C.checked=w?d?.has(w)??!0:!1}t&&(t.textContent=v(M))}}function m(M,C){if(!C)return!1;switch(M){case"pad-type":return o.has(C);case"detection":return l.has(C);case"activity":return c.has(C);case"field-half":return u.has(C);default:return!1}}function v(M){const C=M?.players.length??0,w=d?d.size:C;if(o.size===0||l.size===0||c.size===0||u.size===0||d!==null&&d.size===0)return"Hidden";const R=[o.sizeR.value));for(const R of w)typeof R=="string"&&E.has(R)&&M.add(R)}function T(){return{padTypes:[...o],detections:[...l],activities:[...c],fieldHalves:[...u],playerIds:d?[...d]:null}}function x(M){if(!M||typeof M!="object"||Array.isArray(M))return;const C=M;b(o,Du,C.padTypes),b(l,nm,C.detections),b(c,ku,C.activities),b(u,Ou,C.fieldHalves),d=Array.isArray(C.playerIds)?new Set(C.playerIds.filter(w=>typeof w=="string")):null,h=a===null&&d!==null,_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()}return{setup(M){a!==M.replay&&(a=M.replay,h?h=!1:d=null),r=M.statsTimeline,_(M.replay)},teardown(){},getConfig:T,applyConfig:x,getTimelineRangeOptions(){const M={padTypes:o,detections:l,activities:c,fieldHalves:u};return d&&(M.playerIds=d),M},includePickup:y,renderSettings(M,C){if(!e){e=document.createElement("div"),e.className="boost-pickup-filter-panel";const w=document.createElement("div");w.className="boost-pickup-filter-summary",t=document.createElement("strong"),t.className="metric-readout",w.append(t);const E=document.createElement("div");E.className="boost-pickup-filter-grid",E.append(f("Pad type",Du,o,"pad-type"),f("Activity",ku,c,"activity"),f("Field half",Ou,u,"field-half"),p()),(C.showHeader??!1)&&e.append(w),e.append(E)}return g(M?.replay??null),_(M?.replay??null),e}}}function ai(n){return{id:n.id,label:n.label,setup(){},teardown(){},onBeforeRender(){},getTimelineEvents:n.getTimelineEvents,getTimelineRanges:n.getTimelineRanges,renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,n.render(n.select(s),s))):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?n.render(n.select(s),s):""}}}function Ui(n){return n==null?"?":Qh(n).toFixed(0)}function oG(n,e){const t=Ui(n);if(n==null||e==null)return t;const i=Ui(n+e);return`${t} (${i})`}function im(n){n&&typeof n=="object"&&"dispose"in n&&typeof n.dispose=="function"&&n.dispose()}function lG(n){n&&(n.removeFromParent(),n.traverse(e=>{const t="geometry"in e?e.geometry:null;im(t);const i="material"in e?e.material:null;if(Array.isArray(i))for(const s of i)im(s);else im(i)}))}function cG(){let n=0,e=null;return{acquire(t){e||(e=DV(t.player.sceneState.replayRoot,t.fieldScale)),n+=1},release(){n<=0||(n-=1,n===0&&(lG(e),e=null))}}}const bx=cG();function nt(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Le(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function m_(n,e=0){return Le(n,e,"%")}function zE(n,e,t=1,i=0){if(n===void 0||Number.isNaN(n))return m_(e,i);const s=Le(n,t,"s");return e===void 0||Number.isNaN(e)?s:`${s} (${m_(e,i)})`}function za(n,e,t=1,i=0){const s=n!==void 0&&e!==void 0&&!Number.isNaN(n)&&!Number.isNaN(e)&&e>0?n*100/e:void 0;return zE(n,s,t,i)}function bt(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function ds(n){const e=bt(n);return e===void 0?void 0:e*100}function HE(n){return bt(n?.tracked_time)}function uG(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=HE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a*100/s}function An(n,e,t){return zE(bt(n?.[t]),uG(n,e,t))}function xx(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=HE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a/s}function wx(n){return` + `,document.head.append(n)}function kG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class DG{scene;container;group=new Mt;labelRoot;projectedPosition=new S;worldPosition=new S;labelOffset=new S(0,0,CG);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=AG;constructor(e,t,i,s){LG(),this.scene=e,this.container=t,this.markers=PG(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="speed-flip-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-speed-flip-overlay-root",this.container.append(this.labelRoot)}update(e){const t=IG(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.16+.56*r,c=.96+(1-r)*.22;o.material.opacity=l,o.ring.position.set(s.position.x,s.position.y,s.position.z+14),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.position.x,s.position.y,s.position.z).add(this.labelOffset);const u=kG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Ye({color:e.quality>=.75?TG:e.isTeamZero?wG:SG,transparent:!0,opacity:.8,side:ct,depthWrite:!1,depthTest:!1}),s=new ni(MG,EG,48),a=new we(s,i);a.renderOrder=30,this.group.add(a);const r=document.createElement("div");r.className=`sap-speed-flip-overlay-label ${e.isTeamZero?"sap-speed-flip-overlay-label-blue":"sap-speed-flip-overlay-label-orange"}`,r.textContent=`${e.playerName} speed flip ${e.qualityLabel}`,this.labelRoot.append(r);const o={marker:e,ring:a,material:i,label:r};return this.views.set(e.id,o),o}}const Nu=[{value:"big",label:"Big pads"},{value:"small",label:"Small pads"},{value:"ambiguous",label:"Ambiguous pads"}],cm=[{value:"both",label:"Both detectors"},{value:"inferred_only",label:"Inferred only"},{value:"reported_only",label:"Reported only"}],Uu=[{value:"active",label:"Active play"},{value:"inactive",label:"Inactive play"},{value:"unknown",label:"Unknown activity"}],Bu=[{value:"own",label:"Own half"},{value:"opponent",label:"Opponent half"},{value:"unknown",label:"Unknown half"}];function OG(n,e){return n===e||n==="ambiguous"}function FG(n,e){const t=e?NG(e,ve(e,"boost_pickup")):[];return t.length===0?null:t.find(i=>At(i.player_id)===n.player.id&&i.detection!=="inferred_only"&&i.frame===n.event.frame&&OG(i.pad_type,n.pad.size))??null}function NG(n,e){if(e.length>0)return e;const t=n.events?.boost_pickups;return Array.isArray(t)?t:e}function YE(n={}){let e=null,t=null,i=null,s=null,a=null,r=null;const o=new Set(Nu.map(M=>M.value)),l=new Set(cm.map(M=>M.value)),c=new Set(Uu.map(M=>M.value)),u=new Set(Bu.map(M=>M.value));let d=null,h=!1;function f(M,C,w,E){const R=document.createElement("div");R.className="boost-pickup-filter-group";const k=document.createElement("p");k.className="module-settings-group-title",k.textContent=M;const O=document.createElement("div");O.className="boost-pickup-filter-options";for(const D of C){const U=document.createElement("label");U.className="toggle";const F=document.createElement("input");F.type="checkbox",F.dataset.boostPickupFilter=E,F.dataset.boostPickupValue=D.value,F.addEventListener("change",()=>{F.checked?w.add(D.value):w.delete(D.value),_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const W=document.createElement("span");W.textContent=D.label,U.append(F,W),O.append(U)}return R.append(k,O),R}function p(){const M=document.createElement("div");M.className="boost-pickup-filter-group boost-pickup-filter-group-wide",i=M;const C=document.createElement("p");return C.className="module-settings-group-title",C.textContent="Player",s=document.createElement("div"),s.className="boost-pickup-filter-options",M.append(C,s),M}function g(M){if(s&&(s.replaceChildren(),i&&(i.hidden=!M||M.players.length===0),!!M))for(const C of M.players){const w=document.createElement("label");w.className="toggle";const E=document.createElement("input");E.type="checkbox",E.dataset.boostPickupPlayerId=C.id,E.addEventListener("change",()=>{d||(d=new Set(M.players.map(k=>k.id))),E.checked?d.add(C.id):d.delete(C.id),_(M),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const R=document.createElement("span");R.textContent=`${C.name} (${C.isTeamZero?"Blue":"Orange"})`,w.append(E,R),s.append(w)}}function _(M){if(e){for(const C of e.querySelectorAll("input[data-boost-pickup-filter][data-boost-pickup-value]")){const w=C.dataset.boostPickupFilter,E=C.dataset.boostPickupValue;C.checked=m(w,E)}for(const C of e.querySelectorAll("input[data-boost-pickup-player-id]")){const w=C.dataset.boostPickupPlayerId;C.checked=w?d?.has(w)??!0:!1}t&&(t.textContent=v(M))}}function m(M,C){if(!C)return!1;switch(M){case"pad-type":return o.has(C);case"detection":return l.has(C);case"activity":return c.has(C);case"field-half":return u.has(C);default:return!1}}function v(M){const C=M?.players.length??0,w=d?d.size:C;if(o.size===0||l.size===0||c.size===0||u.size===0||d!==null&&d.size===0)return"Hidden";const R=[o.sizeR.value));for(const R of w)typeof R=="string"&&E.has(R)&&M.add(R)}function T(){return{padTypes:[...o],detections:[...l],activities:[...c],fieldHalves:[...u],playerIds:d?[...d]:null}}function x(M){if(!M||typeof M!="object"||Array.isArray(M))return;const C=M;b(o,Nu,C.padTypes),b(l,cm,C.detections),b(c,Uu,C.activities),b(u,Bu,C.fieldHalves),d=Array.isArray(C.playerIds)?new Set(C.playerIds.filter(w=>typeof w=="string")):null,h=a===null&&d!==null,_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()}return{setup(M){a!==M.replay&&(a=M.replay,h?h=!1:d=null),r=M.statsTimeline,_(M.replay)},teardown(){},getConfig:T,applyConfig:x,getTimelineRangeOptions(){const M={padTypes:o,detections:l,activities:c,fieldHalves:u};return d&&(M.playerIds=d),M},includePickup:y,renderSettings(M,C){if(!e){e=document.createElement("div"),e.className="boost-pickup-filter-panel";const w=document.createElement("div");w.className="boost-pickup-filter-summary",t=document.createElement("strong"),t.className="metric-readout",w.append(t);const E=document.createElement("div");E.className="boost-pickup-filter-grid",E.append(f("Pad type",Nu,o,"pad-type"),f("Activity",Uu,c,"activity"),f("Field half",Bu,u,"field-half"),p()),(C.showHeader??!1)&&e.append(w),e.append(E)}return g(M?.replay??null),_(M?.replay??null),e}}}function ai(n){return{id:n.id,label:n.label,setup(){},teardown(){},onBeforeRender(){},getTimelineEvents:n.getTimelineEvents,getTimelineRanges:n.getTimelineRanges,renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,n.render(n.select(s),s))):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?n.render(n.select(s),s):""}}}function Bi(n){return n==null?"?":rf(n).toFixed(0)}function UG(n,e){const t=Bi(n);if(n==null||e==null)return t;const i=Bi(n+e);return`${t} (${i})`}function um(n){n&&typeof n=="object"&&"dispose"in n&&typeof n.dispose=="function"&&n.dispose()}function BG(n){n&&(n.removeFromParent(),n.traverse(e=>{const t="geometry"in e?e.geometry:null;um(t);const i="material"in e?e.material:null;if(Array.isArray(i))for(const s of i)um(s);else um(i)}))}function zG(){let n=0,e=null;return{acquire(t){e||(e=u5(t.player.sceneState.replayRoot,t.fieldScale)),n+=1},release(){n<=0||(n-=1,n===0&&(BG(e),e=null))}}}const Ax=zG();function nt(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Le(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function w_(n,e=0){return Le(n,e,"%")}function jE(n,e,t=1,i=0){if(n===void 0||Number.isNaN(n))return w_(e,i);const s=Le(n,t,"s");return e===void 0||Number.isNaN(e)?s:`${s} (${w_(e,i)})`}function Ha(n,e,t=1,i=0){const s=n!==void 0&&e!==void 0&&!Number.isNaN(n)&&!Number.isNaN(e)&&e>0?n*100/e:void 0;return jE(n,s,t,i)}function bt(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function ds(n){const e=bt(n);return e===void 0?void 0:e*100}function ZE(n){return bt(n?.tracked_time)}function HG(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=ZE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a*100/s}function An(n,e,t){return jE(bt(n?.[t]),HG(n,e,t))}function Rx(n,e,t){const i=bt(n?.[e]);if(i!==void 0)return i;const s=ZE(n),a=bt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a/s}function Px(n){return`
Most back${An(n,"percent_most_back","time_most_back")}
Most forward${An(n,"percent_most_forward","time_most_forward")}
Mid role${An(n,"percent_mid_role","time_mid_role")}
@@ -5725,59 +5790,59 @@ void main() {
Behind ball${An(n,"percent_behind_ball","time_behind_ball")}
Level with ball${An(n,"percent_level_with_ball","time_level_with_ball")}
In front of ball${An(n,"percent_in_front_of_ball","time_in_front_of_ball")}
- `}function Sx(n){return` + `}function Ix(n){return`
Defensive zone${An(n,"percent_defensive_third","time_defensive_third")}
Neutral zone${An(n,"percent_neutral_third","time_neutral_third")}
Offensive zone${An(n,"percent_offensive_third","time_offensive_third")}
Defensive half${An(n,"percent_defensive_half","time_defensive_half")}
Offensive half${An(n,"percent_offensive_half","time_offensive_half")}
-
To teammates${Le(xx(n,"average_distance_to_teammates","sum_distance_to_teammates"),0)}
-
To ball${Le(xx(n,"average_distance_to_ball","sum_distance_to_ball"),0)}
- `}function Fu(n,e){return za(bt(n?.[e]),bt(n?.active_game_time))}function dG(n){return n?n.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"?"}function hG(n){const e=n&&n.first_man_stint_count>0?n.time_first_man/n.first_man_stint_count:void 0;return` -
Current role${dG(n?.current_role_state)}
-
First man${Fu(n,"time_first_man")}
+
To teammates${Le(Rx(n,"average_distance_to_teammates","sum_distance_to_teammates"),0)}
+
To ball${Le(Rx(n,"average_distance_to_ball","sum_distance_to_ball"),0)}
+ `}function zu(n,e){return Ha(bt(n?.[e]),bt(n?.active_game_time))}function VG(n){return n?n.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"?"}function GG(n){const e=n&&n.first_man_stint_count>0?n.time_first_man/n.first_man_stint_count:void 0;return` +
Current role${VG(n?.current_role_state)}
+
First man${zu(n,"time_first_man")}
First stints${nt(n?.first_man_stint_count)}
Avg first stint${Le(e,2,"s")}
Longest first stint${Le(n?.longest_first_man_stint_time,2,"s")}
-
Second man${Fu(n,"time_second_man")}
-
Third man${Fu(n,"time_third_man")}
-
Ambiguous${Fu(n,"time_ambiguous_role")}
+
Second man${zu(n,"time_second_man")}
+
Third man${zu(n,"time_third_man")}
+
Ambiguous${zu(n,"time_ambiguous_role")}
Became first${nt(n?.became_first_man_count)}
Lost first${nt(n?.lost_first_man_count)}
- `}function fG(n){const e=n&&n.shots>0?n.goals*100/n.shots:void 0;return` + `}function $G(n){const e=n&&n.shots>0?n.goals*100/n.shots:void 0;return`
Score${nt(n?.score)}
Goals${nt(n?.goals)}
Assists${nt(n?.assists)}
Saves${nt(n?.saves)}
Shots${nt(n?.shots)}
-
Shooting %${m_(e)}
- `}function pG(n){return` +
Shooting %${w_(e)}
+ `}function WG(n){return`
Hits${nt(n?.count)}
Since last${Le(bt(n?.time_since_last_backboard),2,"s")}
- `}function mG(n){return` + `}function XG(n){return`
Count${nt(n?.count)}
Since last${Le(bt(n?.time_since_last_double_tap),2,"s")}
- `}function _G(n){const e=n&&n.completed_pass_count>0?n.total_pass_distance/n.completed_pass_count:void 0,t=n&&n.completed_pass_count>0?n.total_pass_advance/n.completed_pass_count:void 0;return` + `}function KG(n){const e=n&&n.completed_pass_count>0?n.total_pass_distance/n.completed_pass_count:void 0,t=n&&n.completed_pass_count>0?n.total_pass_advance/n.completed_pass_count:void 0;return`
Completed${nt(n?.completed_pass_count)}
Received${nt(n?.received_pass_count)}
Avg distance${Le(e,0)}
Avg advance${Le(t,0)}
Longest${Le(n?.longest_pass_distance,0)}
Since last${Le(bt(n?.time_since_last_completed_pass),2,"s")}
- `}function gG(n){const e=n&&n.count>0?n.total_ball_speed/n.count:void 0,t=n&&n.count>0?n.total_pass_distance/n.count:void 0;return` + `}function qG(n){const e=n&&n.count>0?n.total_ball_speed/n.count:void 0,t=n&&n.count>0?n.total_pass_distance/n.count:void 0;return`
Attempts${nt(n?.count)}
Avg speed${Le(e,0)}
Fastest${Le(n?.fastest_ball_speed,0)}
Avg pass distance${Le(t,0)}
Since last${Le(bt(n?.time_since_last_one_timer),2,"s")}
- `}function Tx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0;return` + `}function Lx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0;return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(bt(n?.last_confidence),0,"%")}
Avg quality${Le(e,0,"%")}
Best quality${Le(bt(n?.best_confidence),0,"%")}
Since last${Le(bt(n?.time_since_last_ceiling_shot),2,"s")}
- `}function Mx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=ds(e),i=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,s=n&&n.count>0?n.cumulative_takeoff_to_touch_time/n.count:void 0,a=n&&n.count>0?n.cumulative_touch_height/n.count:void 0;return` + `}function kx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=ds(e),i=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,s=n&&n.count>0?n.cumulative_takeoff_to_touch_time/n.count:void 0,a=n&&n.count>0?n.cumulative_touch_height/n.count:void 0;return`
Plays${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(ds(n?.last_confidence),0,"%")}
@@ -5786,7 +5851,7 @@ void main() {
Avg takeoff${Le(s,2,"s")}
Avg height${Le(a,0)}
Since last${Le(bt(n?.time_since_last_wall_aerial),2,"s")}
- `}function Ex(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_takeoff_to_shot_time/n.count:void 0,i=n&&n.count>0?n.cumulative_shot_height/n.count:void 0;return` + `}function Dx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_takeoff_to_shot_time/n.count:void 0,i=n&&n.count>0?n.cumulative_shot_height/n.count:void 0;return`
Shots${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(ds(n?.last_confidence),0,"%")}
@@ -5794,13 +5859,13 @@ void main() {
Avg takeoff${Le(t,2,"s")}
Avg height${Le(i,0)}
Since last${Le(bt(n?.time_since_last_wall_aerial_shot),2,"s")}
- `}function yG(n){const e=n&&n.carry_count>0?n.average_horizontal_gap_sum/n.carry_count:void 0;return` + `}function YG(n){const e=n&&n.carry_count>0?n.average_horizontal_gap_sum/n.carry_count:void 0;return`
Carries${nt(n?.carry_count)}
Total time${Le(n?.total_carry_time,1,"s")}
Longest${Le(n?.longest_carry_time,1,"s")}
Furthest${Le(n?.furthest_carry_distance,0)}
Avg gap${Le(e,0)}
- `}function vG(n){const e=n&&n.count>0?n.average_horizontal_gap_sum/n.count:void 0,t=n&&n.count>0?n.total_touch_count/n.count:void 0;return` + `}function jG(n){const e=n&&n.count>0?n.average_horizontal_gap_sum/n.count:void 0,t=n&&n.count>0?n.total_touch_count/n.count:void 0;return`
Air dribbles${nt(n?.count)}
Ground to air${nt(n?.ground_to_air_count)}
Wall to air${nt(n?.wall_to_air_count)}
@@ -5810,11 +5875,11 @@ void main() {
Longest${Le(n?.longest_time,1,"s")}
Furthest${Le(n?.furthest_distance,0)}
Avg gap${Le(e,0)}
- `}function bG(n){const e=n&&n.press_count>0?n.total_duration/n.press_count:void 0;return` + `}function ZG(n){const e=n&&n.press_count>0?n.total_duration/n.press_count:void 0;return`
Presses${nt(n?.press_count)}
Total time${Le(n?.total_duration,1,"s")}
Avg duration${Le(e,2,"s")}
- `}function xG(n){const e=n&&n.whiff_count>0?n.cumulative_closest_approach_distance/n.whiff_count:void 0;return` + `}function JG(n){const e=n&&n.whiff_count>0?n.cumulative_closest_approach_distance/n.whiff_count:void 0;return`
Whiffs${nt(n?.whiff_count)}
Beaten to ball${nt(n?.beaten_to_ball_count)}
Grounded${nt(n?.grounded_whiff_count)}
@@ -5824,10 +5889,10 @@ void main() {
Best closest${Le(bt(n?.best_closest_approach_distance),0)}
Avg closest${Le(e,0)}
Since last${Le(bt(n?.time_since_last_whiff),2,"s")}
- `}function wG(n){return` + `}function QG(n){return`
Inflicted${nt(n?.demos_inflicted)}
Taken${nt(n?.demos_taken)}
- `}function SG(n){const e=n&&n.bumps_inflicted>0?n.cumulative_bump_strength/n.bumps_inflicted:void 0;return` + `}function e$(n){const e=n&&n.bumps_inflicted>0?n.cumulative_bump_strength/n.bumps_inflicted:void 0;return`
Inflicted${nt(n?.bumps_inflicted)}
Taken${nt(n?.bumps_taken)}
Team inflicted${nt(n?.team_bumps_inflicted)}
@@ -5835,14 +5900,14 @@ void main() {
Last strength${Le(bt(n?.last_bump_strength),0)}
Max strength${Le(bt(n?.max_bump_strength),0)}
Avg strength${Le(e,0)}
- `}function TG(n){return` + `}function t$(n){return`
Refreshes${nt(n?.count)}
On ball${nt(n?.on_ball_count)}
- `}function MG(n){const e=n&&n.count>0?n.total_time_to_use/n.count:void 0;return` + `}function n$(n){const e=n&&n.count>0?n.total_time_to_use/n.count:void 0;return`
Confirmed${nt(n?.count)}
Avg use${Le(e,2,"s")}
Fastest use${Le(bt(n?.min_time_to_use),2,"s")}
- `}function Cx(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,i=n&&n.count>0?n.cumulative_ball_speed_change/n.count:void 0;return` + `}function Ox(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,i=n&&n.count>0?n.cumulative_ball_speed_change/n.count:void 0;return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(bt(n?.last_confidence),0,"%")}
@@ -5850,56 +5915,56 @@ void main() {
Avg setup${Le(t,2,"s")}
Avg impulse${Le(i,0,"uu/s")}
Since last${Le(bt(n?.time_since_last_flick),2,"s")}
- `}function Ax(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0;return` + `}function Fx(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0;return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(bt(n?.last_quality),0,"%")}
Avg quality${Le(e,0,"%")}
Best quality${Le(bt(n?.best_quality),0,"%")}
Since last${Le(bt(n?.time_since_last_speed_flip),2,"s")}
- `}function Rx(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return` + `}function Nx(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(t,0,"%")}
Avg quality${Le(i,0,"%")}
Best quality${Le(s,0,"%")}
Since last${Le(bt(n?.time_since_last_half_flip),2,"s")}
- `}function Px(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return` + `}function Ux(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ds(n?.last_quality),i=ds(e),s=ds(n?.best_quality);return`
Attempts${nt(n?.count)}
High conf${nt(n?.high_confidence_count)}
Last quality${Le(t,0,"%")}
Avg quality${Le(i,0,"%")}
Best quality${Le(s,0,"%")}
Since last${Le(bt(n?.time_since_last_wavedash),2,"s")}
- `}function Ix(n){const e=n&&n.tracked_time>0?Qh(n.boost_integral/n.tracked_time).toFixed(0):"?",t=bt(n?.tracked_time);return` -
Collected${oG(n?.amount_collected,n?.amount_respawned)}
-
Inactive collected${Ui(n?.amount_collected_inactive)}
-
Big pads amt${Ui(n?.amount_collected_big)}
-
Small pads amt${Ui(n?.amount_collected_small)}
-
Respawns${Ui(n?.amount_respawned)}
-
Overfill${Ui(n?.overfill_total)}
-
Used${Ui(n?.amount_used)}
-
Used ground${Ui(n?.amount_used_while_grounded)}
-
Used air${Ui(n?.amount_used_while_airborne)}
+ `}function Bx(n){const e=n&&n.tracked_time>0?rf(n.boost_integral/n.tracked_time).toFixed(0):"?",t=bt(n?.tracked_time);return` +
Collected${UG(n?.amount_collected,n?.amount_respawned)}
+
Inactive collected${Bi(n?.amount_collected_inactive)}
+
Big pads amt${Bi(n?.amount_collected_big)}
+
Small pads amt${Bi(n?.amount_collected_small)}
+
Respawns${Bi(n?.amount_respawned)}
+
Overfill${Bi(n?.overfill_total)}
+
Used${Bi(n?.amount_used)}
+
Used ground${Bi(n?.amount_used_while_grounded)}
+
Used air${Bi(n?.amount_used_while_airborne)}
Big pads${n?.big_pads_collected??"?"}
Small pads${n?.small_pads_collected??"?"}
Inactive big pads${n?.big_pads_collected_inactive??"?"}
Inactive small pads${n?.small_pads_collected_inactive??"?"}
-
Stolen${Ui(n?.amount_stolen)}
+
Stolen${Bi(n?.amount_stolen)}
Avg boost${e}
-
Time @ 0${za(bt(n?.time_zero_boost),t)}
-
Time 0-25${za(bt(n?.time_boost_0_25),t)}
-
Time 25-50${za(bt(n?.time_boost_25_50),t)}
-
Time 50-75${za(bt(n?.time_boost_50_75),t)}
-
Time 75-100${za(bt(n?.time_boost_75_100),t)}
-
Time @ 100${za(bt(n?.time_hundred_boost),t)}
- `}const __={kind:{label:"Kind",valueOrder:["control","medium_hit","hard_hit"],formatValue:n=>({control:"Control",medium_hit:"Medium",hard_hit:"Hard"})[n]??n},height_band:{label:"Height",valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n},surface:{label:"Surface",valueOrder:["ground","air","wall"],formatValue:n=>({ground:"Ground",air:"Air",wall:"Wall"})[n]??n},dodge_state:{label:"Dodge",valueOrder:["no_dodge","dodge"],formatValue:n=>({no_dodge:"No dodge",dodge:"Dodge"})[n]??n}};function EG(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function Qs(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function sm(n,e=0,t=""){return n===void 0||!Number.isFinite(n)?"?":`${n.toFixed(e)}${t}`}function Lx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Xi(n,e){return`
${Lx(n)}${Lx(e)}
`}function CG(n,e,t){for(const i of t){const{valueOrder:s}=__[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function AG(n,e){if(e.length===1){const t=e[0];return __[t].formatValue(n[t])}return e.map(t=>__[t].formatValue(n[t])).join(" / ")}function RG(n){return(n?.labeled_touch_counts?.entries??[]).map(e=>({labels:e.labels,count:e.count}))}function PG(n,e){if(e.length===0||n.length===0)return"";const t=new Map;for(const i of n){const s=new Map(i.labels.map(c=>[c.key,c.value])),a={};let r=!0;for(const c of e){const u=s.get(c);if(u===void 0){r=!1;break}a[c]=u}if(!r)continue;const o=e.map(c=>`${c}:${a[c]}`).join("|"),l=t.get(o);l?l.count+=i.count:t.set(o,{values:a,count:i.count})}return[...t.values()].sort((i,s)=>CG(i.values,s.values,e)).map(i=>Xi(AG(i.values,e),Qs(i.count))).join("")}function IG(n,e){if(!n||e.length!==1)return"";const[t]=e;if(t==="kind")return[Xi("Control",Qs(n.control_touch_count)),Xi("Medium",Qs(n.medium_hit_count)),Xi("Hard",Qs(n.hard_hit_count))].join("");if(t==="height_band"){const i=n.high_aerial_touch_count??0,s=(n.aerial_touch_count??0)-i,a=(n.touch_count??0)-(n.aerial_touch_count??0);return[Xi("Ground",Qs(a)),Xi("Low air",Qs(s)),Xi("High air",Qs(i))].join("")}return""}function Dx(n,e={}){const t=EG(e.breakdownClasses),i=RG(n),s=PG(i,t)||IG(n,t);return` - ${Xi("Touches",Qs(n?.touch_count))} - ${Xi("Ball advanced",sm(n?.total_ball_advance_distance,0," uu"))} - ${Xi("Ball traveled",sm(n?.total_ball_travel_distance,0," uu"))} - ${Xi("Ball retreated",sm(n?.total_ball_retreat_distance,0," uu"))} +
Time @ 0${Ha(bt(n?.time_zero_boost),t)}
+
Time 0-25${Ha(bt(n?.time_boost_0_25),t)}
+
Time 25-50${Ha(bt(n?.time_boost_25_50),t)}
+
Time 50-75${Ha(bt(n?.time_boost_50_75),t)}
+
Time 75-100${Ha(bt(n?.time_boost_75_100),t)}
+
Time @ 100${Ha(bt(n?.time_hundred_boost),t)}
+ `}const S_={kind:{label:"Kind",valueOrder:["control","medium_hit","hard_hit"],formatValue:n=>({control:"Control",medium_hit:"Medium",hard_hit:"Hard"})[n]??n},height_band:{label:"Height",valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n},surface:{label:"Surface",valueOrder:["ground","air","wall"],formatValue:n=>({ground:"Ground",air:"Air",wall:"Wall"})[n]??n},dodge_state:{label:"Dodge",valueOrder:["no_dodge","dodge"],formatValue:n=>({no_dodge:"No dodge",dodge:"Dodge"})[n]??n}};function i$(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function Qs(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function dm(n,e=0,t=""){return n===void 0||!Number.isFinite(n)?"?":`${n.toFixed(e)}${t}`}function zx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Ki(n,e){return`
${zx(n)}${zx(e)}
`}function s$(n,e,t){for(const i of t){const{valueOrder:s}=S_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function a$(n,e){if(e.length===1){const t=e[0];return S_[t].formatValue(n[t])}return e.map(t=>S_[t].formatValue(n[t])).join(" / ")}function r$(n){return(n?.labeled_touch_counts?.entries??[]).map(e=>({labels:e.labels,count:e.count}))}function o$(n,e){if(e.length===0||n.length===0)return"";const t=new Map;for(const i of n){const s=new Map(i.labels.map(c=>[c.key,c.value])),a={};let r=!0;for(const c of e){const u=s.get(c);if(u===void 0){r=!1;break}a[c]=u}if(!r)continue;const o=e.map(c=>`${c}:${a[c]}`).join("|"),l=t.get(o);l?l.count+=i.count:t.set(o,{values:a,count:i.count})}return[...t.values()].sort((i,s)=>s$(i.values,s.values,e)).map(i=>Ki(a$(i.values,e),Qs(i.count))).join("")}function l$(n,e){if(!n||e.length!==1)return"";const[t]=e;if(t==="kind")return[Ki("Control",Qs(n.control_touch_count)),Ki("Medium",Qs(n.medium_hit_count)),Ki("Hard",Qs(n.hard_hit_count))].join("");if(t==="height_band"){const i=n.high_aerial_touch_count??0,s=(n.aerial_touch_count??0)-i,a=(n.touch_count??0)-(n.aerial_touch_count??0);return[Ki("Ground",Qs(a)),Ki("Low air",Qs(s)),Ki("High air",Qs(i))].join("")}return""}function Hx(n,e={}){const t=i$(e.breakdownClasses),i=r$(n),s=o$(i,t)||l$(n,t);return` + ${Ki("Touches",Qs(n?.touch_count))} + ${Ki("Ball advanced",dm(n?.total_ball_advance_distance,0," uu"))} + ${Ki("Ball traveled",dm(n?.total_ball_travel_distance,0," uu"))} + ${Ki("Ball retreated",dm(n?.total_ball_retreat_distance,0," uu"))} ${s} - `}const g_="subtr-actor:touch-color-modes-change",LG=[{title:"Team",mode:"team"},{title:"Intention",mode:"intention"},{title:"Hit strength",mode:"kind"},{title:"Height",mode:"height_band"},{title:"Surface",mode:"surface"},{title:"Dodge",mode:"dodge_state"},{title:"Flags",mode:"flag"}];function DG(n){return LG.find(e=>e.title===n)?.mode??"team"}function kG(n){return`#${n.toString(16).padStart(6,"0")}`}function VE(n,e){n.replaceChildren();const t=ho(e),i=new Set(t),s=document.createElement("div");s.className="touch-color-legend-explainer";const a=document.createElement("span");a.textContent="Toggle sections to add or remove rings";const r=document.createElement("span");r.textContent="The outermost enabled ring sets the label tint",s.append(a,r),n.append(s);for(const o of BH){const l=DG(o.title),c=i.has(l),u=document.createElement("section");u.className="touch-color-legend-group",u.dataset.active=c?"true":"false";const d=document.createElement("button");d.type="button",d.className="touch-color-legend-heading",d.dataset.colorMode=l,d.dataset.active=c?"true":"false",d.textContent=o.title,d.addEventListener("click",()=>{const f=new Set(i);f.has(l)?f.delete(l):f.add(l);const p=NH.filter(g=>f.has(g));n.dispatchEvent(new CustomEvent(g_,{bubbles:!0,detail:{colorModes:p}})),VE(n,p)});const h=document.createElement("div");h.className="touch-color-legend-list";for(const f of o.entries){const p=document.createElement("div");p.className="touch-color-legend-item";const g=document.createElement("span");g.className="touch-color-legend-swatch",g.style.background=kG(f.color);const _=document.createElement("span");_.textContent=f.label,p.append(g,_),h.append(p)}u.append(d,h),n.append(u)}}function OG(n){let e=null,t=5,i="advancement",s=["team"],a=null,r=null,o=null,l=null,c=null;const u=new Set,d=["kind","height_band","surface","dodge_state"];return{id:"touch",label:"Touch",setup(g){e=new ZH(g.player.sceneState,g.player.container,g.replay,g.statsTimeline,{mode:i,colorModes:s}),e.setDecaySeconds(t),c=_=>{if(!(_ instanceof CustomEvent))return;const m=_.detail?.colorModes;Array.isArray(m)&&p(m.filter(ed))},window.addEventListener(g_,c),h()},teardown(){c&&(window.removeEventListener(g_,c),c=null),e?.dispose(),e=null},onBeforeRender(g){e?.update(g.currentTime)},getTimelineEvents(g){return I5(g.statsTimeline,g.replay)},getConfig(){return{decaySeconds:t,overlayMode:i,overlayColorModes:s,breakdownClasses:f()}},applyConfig(g){if(g&&typeof g=="object"&&!Array.isArray(g)){const _=g;if(typeof _.decaySeconds=="number"&&Number.isFinite(_.decaySeconds)&&(t=Math.max(1,Math.min(10,_.decaySeconds)),e?.setDecaySeconds(t)),(_.overlayMode==="markers"||_.overlayMode==="advancement")&&(i=_.overlayMode,e?.setMode(i)),Array.isArray(_.overlayColorModes)?(s=ho(_.overlayColorModes.filter(ed)),e?.setColorModes(s)):ed(_.overlayColorMode)&&(s=ho(_.overlayColorMode),e?.setColorModes(s)),u.clear(),Array.isArray(_.breakdownClasses))for(const m of _.breakdownClasses)d.includes(m)&&u.add(m)}h(),n.rerenderCurrentState()},renderStats(g,_){const m=zt(_.statsFrameLookup,g);return m?si(m.players,v=>Tn(v.name,v.is_team_0,Dx(v.touch,{breakdownClasses:f()}),v.touch?.is_last_touch?'Last Touch':"")):""},renderFocusedPlayerStats(g,_,m){const v=wn(m,_,g);return v?Dx(v.touch,{breakdownClasses:f()}):""},renderSettings(){if(!a){a=document.createElement("div"),a.className="module-settings-card";const g=document.createElement("div");g.className="module-settings-header";const _=document.createElement("div"),m=document.createElement("p");m.className="module-settings-eyebrow",m.textContent="Touch markers";const v=document.createElement("h3");v.textContent="Touch decay",_.append(m,v),r=document.createElement("strong"),r.className="metric-readout",g.append(_,r);const y=document.createElement("label"),b=document.createElement("span");b.className="label",b.textContent="Keep each marker visible after the touch";const T=document.createElement("input");T.type="range",T.min="1",T.max="10",T.step="0.5",T.value=`${t}`,T.addEventListener("input",()=>{const H=Number(T.value);t=Number.isFinite(H)?Math.max(1,Math.min(10,H)):t,e?.setDecaySeconds(t),h(t),n.requestConfigSync?.()}),y.append(b,T);const x=document.createElement("div");x.className="module-settings-subgroup";const M=document.createElement("div");M.className="module-settings-header";const C=document.createElement("div"),w=document.createElement("p");w.className="module-settings-eyebrow",w.textContent="Overlay";const E=document.createElement("h3");E.textContent="Touch mode",C.append(w,E),o=document.createElement("strong"),o.className="metric-readout",M.append(C,o);const R=document.createElement("div");R.className="module-settings-options";for(const H of[{mode:"markers",label:"Markers"},{mode:"advancement",label:"Advancement"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="radio",oe.name="touch-overlay-mode",oe.dataset.overlayMode=H.mode,oe.addEventListener("change",()=>{oe.checked&&(i=H.mode,e?.setMode(i),h(),n.requestConfigSync?.())});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),R.append(ne)}x.append(M,R);const D=document.createElement("div");D.className="module-settings-subgroup";const O=document.createElement("div");O.className="module-settings-header";const k=document.createElement("div"),U=document.createElement("p");U.className="module-settings-eyebrow",U.textContent="Stat display";const F=document.createElement("h3");F.textContent="Touch breakdown",k.append(U,F),l=document.createElement("strong"),l.className="metric-readout",O.append(k,l);const W=document.createElement("div");W.className="module-settings-options";for(const H of[{className:"kind",label:"Kind"},{className:"height_band",label:"Height"},{className:"surface",label:"Surface"},{className:"dodge_state",label:"Dodge"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="checkbox",oe.dataset.breakdownClass=H.className,oe.addEventListener("change",()=>{oe.checked?u.add(H.className):u.delete(H.className),h(),n.rerenderCurrentState(),n.requestConfigSync?.()});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),W.append(ne)}D.append(O,W),a.append(g,y,x,D)}return h(),a}};function h(g){if(!a)return;const _=g??t,m=a.querySelector("input");m instanceof HTMLInputElement&&(m.value=`${_}`),r&&(r.textContent=`${_.toFixed(1)}s`);for(const v of a.querySelectorAll("input[data-overlay-mode]"))v.checked=v.dataset.overlayMode===i;o&&(o.textContent=i==="advancement"?"Advancement":"Markers");for(const v of a.querySelectorAll("input[data-breakdown-class]")){const y=v.dataset.breakdownClass;v.checked=y?u.has(y):!1}if(l){const v=f();l.textContent=v.length>0?v.map(y=>({kind:"Kind",height_band:"Height",surface:"Surface",dodge_state:"Dodge"})[y]).join(" + "):"Total only"}}function f(){return d.filter(g=>u.has(g))}function p(g){s=ho(g),e?.setColorModes(s),h(),n.requestConfigSync?.()}}function FG(n,e=BE({refreshTimelineRanges:n.refreshTimelineRanges,rerenderCurrentState:n.rerenderCurrentState})){return{id:"boost",label:"Boost",setup(t){e.setup(t)},teardown(){e.teardown()},onBeforeRender(){},getTimelineRanges(t){return m4(t.statsTimeline,t.replay,e.getTimelineRangeOptions())},getConfig(){return e.getConfig()},applyConfig(t){e.applyConfig(t)},includeBoostPickupAnimationPickup(t){return e.includePickup(t)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>Tn(a.name,a.is_team_0,Ix(a.boost))):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?Ix(a.boost):""},renderSettings(t){return e.renderSettings(t,{showHeader:!0})}}}function NG(){return ai({id:"core",label:"Core",select:n=>n.core,render:n=>fG(n)})}function UG(){return ai({id:"backboard",label:"Backboard",select:n=>n.backboard,render:n=>pG(n),getTimelineEvents(n){return L5(n.statsTimeline,n.replay)}})}function BG(){let n=null;return{id:"ceiling-shot",label:"Ceiling Shot",setup(e){n=new w5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Tx(s.ceiling_shot),s.ceiling_shot?.is_last_ceiling_shot?'Last Ceiling Shot':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Tx(s.ceiling_shot):""}}}function zG(){return{id:"wall-aerial",label:"Wall-to-Air Setup",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Mx(i.wall_aerial),i.wall_aerial?.is_last_wall_aerial?'Last Wall-to-Air Setup':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Mx(i.wall_aerial):""}}}function HG(){return{id:"wall-aerial-shot",label:"Wall Shot",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ex(i.wall_aerial_shot),i.wall_aerial_shot?.is_last_wall_aerial_shot?'Last Wall Shot':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ex(i.wall_aerial_shot):""}}}function VG(){return ai({id:"ball-carry",label:"Ball Carry",select:n=>n.ball_carry,render:n=>yG(n)})}function GG(){return ai({id:"air-dribble",label:"Air Dribble",select:n=>n.air_dribble,render:n=>vG(n)})}function $G(){return ai({id:"dodge-reset",label:"Dodge Refresh",select:n=>n.dodge_reset,render:n=>TG(n)})}function WG(){return ai({id:"flip-reset",label:"Flip Reset",select:n=>n.flip_reset,render:n=>MG(n)})}function XG(){return ai({id:"double-tap",label:"Double Tap",select:n=>n.double_tap,render:n=>mG(n)})}function KG(){return ai({id:"pass",label:"Pass",select:n=>n.pass,render:n=>_G(n)})}function qG(){return ai({id:"one-timer",label:"One-timer",select:n=>n.one_timer,render:n=>gG(n)})}function YG(){return{id:"flick",label:"Flick",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Cx(i.flick),i.flick?.is_last_flick?'Last Flick':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Cx(i.flick):""}}}function jG(){let n=null;return{id:"speed-flip",label:"Speed Flip",setup(e){n=new iG(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Ax(s.speed_flip),s.speed_flip?.is_last_speed_flip?'Last Speed Flip':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Ax(s.speed_flip):""}}}function ZG(){let n=null;return{id:"dodge",label:"Dodge",setup(e){n=new $4(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return W5(e.statsTimeline,e.replay)},renderStats(e,t){const i=new Map;for(const a of t.replay.players)i.set(a.id,{name:a.name,isTeamZero:a.isTeamZero,count:0});for(const a of ve(t.statsTimeline,"dodge")){const r=At(a.player),o=t.replay.players.find(c=>c.id===r)??null,l=i.get(r)??{name:o?.name??r,isTeamZero:a.is_team_0,count:0};l.count+=1,i.set(r,l)}const s=[...i.values()].filter(a=>a.count>0);return s.length===0?"":`
${[!0,!1].map(a=>{const r=s.filter(l=>l.isTeamZero===a);if(r.length===0)return"";const o=a?"Blue":"Orange";return`
+ `}const T_="subtr-actor:touch-color-modes-change",c$=[{title:"Team",mode:"team"},{title:"Intention",mode:"intention"},{title:"Hit strength",mode:"kind"},{title:"Height",mode:"height_band"},{title:"Surface",mode:"surface"},{title:"Dodge",mode:"dodge_state"},{title:"Flags",mode:"flag"}];function u$(n){return c$.find(e=>e.title===n)?.mode??"team"}function d$(n){return`#${n.toString(16).padStart(6,"0")}`}function JE(n,e){n.replaceChildren();const t=po(e),i=new Set(t),s=document.createElement("div");s.className="touch-color-legend-explainer";const a=document.createElement("span");a.textContent="Toggle sections to add or remove rings";const r=document.createElement("span");r.textContent="The outermost enabled ring sets the label tint",s.append(a,r),n.append(s);for(const o of _V){const l=u$(o.title),c=i.has(l),u=document.createElement("section");u.className="touch-color-legend-group",u.dataset.active=c?"true":"false";const d=document.createElement("button");d.type="button",d.className="touch-color-legend-heading",d.dataset.colorMode=l,d.dataset.active=c?"true":"false",d.textContent=o.title,d.addEventListener("click",()=>{const f=new Set(i);f.has(l)?f.delete(l):f.add(l);const p=pV.filter(g=>f.has(g));n.dispatchEvent(new CustomEvent(T_,{bubbles:!0,detail:{colorModes:p}})),JE(n,p)});const h=document.createElement("div");h.className="touch-color-legend-list";for(const f of o.entries){const p=document.createElement("div");p.className="touch-color-legend-item";const g=document.createElement("span");g.className="touch-color-legend-swatch",g.style.background=d$(f.color);const _=document.createElement("span");_.textContent=f.label,p.append(g,_),h.append(p)}u.append(d,h),n.append(u)}}function h$(n){let e=null,t=5,i="advancement",s=["team"],a=null,r=null,o=null,l=null,c=null;const u=new Set,d=["kind","height_band","surface","dodge_state"];return{id:"touch",label:"Touch",setup(g){e=new AV(g.player.sceneState,g.player.container,g.replay,g.statsTimeline,{mode:i,colorModes:s}),e.setDecaySeconds(t),c=_=>{if(!(_ instanceof CustomEvent))return;const m=_.detail?.colorModes;Array.isArray(m)&&p(m.filter(ad))},window.addEventListener(T_,c),h()},teardown(){c&&(window.removeEventListener(T_,c),c=null),e?.dispose(),e=null},onBeforeRender(g){e?.update(g.currentTime)},getTimelineEvents(g){return l4(g.statsTimeline,g.replay)},getConfig(){return{decaySeconds:t,overlayMode:i,overlayColorModes:s,breakdownClasses:f()}},applyConfig(g){if(g&&typeof g=="object"&&!Array.isArray(g)){const _=g;if(typeof _.decaySeconds=="number"&&Number.isFinite(_.decaySeconds)&&(t=Math.max(1,Math.min(10,_.decaySeconds)),e?.setDecaySeconds(t)),(_.overlayMode==="markers"||_.overlayMode==="advancement")&&(i=_.overlayMode,e?.setMode(i)),Array.isArray(_.overlayColorModes)?(s=po(_.overlayColorModes.filter(ad)),e?.setColorModes(s)):ad(_.overlayColorMode)&&(s=po(_.overlayColorMode),e?.setColorModes(s)),u.clear(),Array.isArray(_.breakdownClasses))for(const m of _.breakdownClasses)d.includes(m)&&u.add(m)}h(),n.rerenderCurrentState()},renderStats(g,_){const m=zt(_.statsFrameLookup,g);return m?si(m.players,v=>Tn(v.name,v.is_team_0,Hx(v.touch,{breakdownClasses:f()}),v.touch?.is_last_touch?'Last Touch':"")):""},renderFocusedPlayerStats(g,_,m){const v=wn(m,_,g);return v?Hx(v.touch,{breakdownClasses:f()}):""},renderSettings(){if(!a){a=document.createElement("div"),a.className="module-settings-card";const g=document.createElement("div");g.className="module-settings-header";const _=document.createElement("div"),m=document.createElement("p");m.className="module-settings-eyebrow",m.textContent="Touch markers";const v=document.createElement("h3");v.textContent="Touch decay",_.append(m,v),r=document.createElement("strong"),r.className="metric-readout",g.append(_,r);const y=document.createElement("label"),b=document.createElement("span");b.className="label",b.textContent="Keep each marker visible after the touch";const T=document.createElement("input");T.type="range",T.min="1",T.max="10",T.step="0.5",T.value=`${t}`,T.addEventListener("input",()=>{const H=Number(T.value);t=Number.isFinite(H)?Math.max(1,Math.min(10,H)):t,e?.setDecaySeconds(t),h(t),n.requestConfigSync?.()}),y.append(b,T);const x=document.createElement("div");x.className="module-settings-subgroup";const M=document.createElement("div");M.className="module-settings-header";const C=document.createElement("div"),w=document.createElement("p");w.className="module-settings-eyebrow",w.textContent="Overlay";const E=document.createElement("h3");E.textContent="Touch mode",C.append(w,E),o=document.createElement("strong"),o.className="metric-readout",M.append(C,o);const R=document.createElement("div");R.className="module-settings-options";for(const H of[{mode:"markers",label:"Markers"},{mode:"advancement",label:"Advancement"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="radio",oe.name="touch-overlay-mode",oe.dataset.overlayMode=H.mode,oe.addEventListener("change",()=>{oe.checked&&(i=H.mode,e?.setMode(i),h(),n.requestConfigSync?.())});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),R.append(ne)}x.append(M,R);const k=document.createElement("div");k.className="module-settings-subgroup";const O=document.createElement("div");O.className="module-settings-header";const D=document.createElement("div"),U=document.createElement("p");U.className="module-settings-eyebrow",U.textContent="Stat display";const F=document.createElement("h3");F.textContent="Touch breakdown",D.append(U,F),l=document.createElement("strong"),l.className="metric-readout",O.append(D,l);const W=document.createElement("div");W.className="module-settings-options";for(const H of[{className:"kind",label:"Kind"},{className:"height_band",label:"Height"},{className:"surface",label:"Surface"},{className:"dodge_state",label:"Dodge"}]){const ne=document.createElement("label");ne.className="toggle";const oe=document.createElement("input");oe.type="checkbox",oe.dataset.breakdownClass=H.className,oe.addEventListener("change",()=>{oe.checked?u.add(H.className):u.delete(H.className),h(),n.rerenderCurrentState(),n.requestConfigSync?.()});const pe=document.createElement("span");pe.textContent=H.label,ne.append(oe,pe),W.append(ne)}k.append(O,W),a.append(g,y,x,k)}return h(),a}};function h(g){if(!a)return;const _=g??t,m=a.querySelector("input");m instanceof HTMLInputElement&&(m.value=`${_}`),r&&(r.textContent=`${_.toFixed(1)}s`);for(const v of a.querySelectorAll("input[data-overlay-mode]"))v.checked=v.dataset.overlayMode===i;o&&(o.textContent=i==="advancement"?"Advancement":"Markers");for(const v of a.querySelectorAll("input[data-breakdown-class]")){const y=v.dataset.breakdownClass;v.checked=y?u.has(y):!1}if(l){const v=f();l.textContent=v.length>0?v.map(y=>({kind:"Kind",height_band:"Height",surface:"Surface",dodge_state:"Dodge"})[y]).join(" + "):"Total only"}}function f(){return d.filter(g=>u.has(g))}function p(g){s=po(g),e?.setColorModes(s),h(),n.requestConfigSync?.()}}function f$(n,e=YE({refreshTimelineRanges:n.refreshTimelineRanges,rerenderCurrentState:n.rerenderCurrentState})){return{id:"boost",label:"Boost",setup(t){e.setup(t)},teardown(){e.teardown()},onBeforeRender(){},getTimelineRanges(t){return X4(t.statsTimeline,t.replay,e.getTimelineRangeOptions())},getConfig(){return e.getConfig()},applyConfig(t){e.applyConfig(t)},includeBoostPickupAnimationPickup(t){return e.includePickup(t)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>Tn(a.name,a.is_team_0,Bx(a.boost))):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?Bx(a.boost):""},renderSettings(t){return e.renderSettings(t,{showHeader:!0})}}}function p$(){return ai({id:"core",label:"Core",select:n=>n.core,render:n=>$G(n)})}function m$(){return ai({id:"backboard",label:"Backboard",select:n=>n.backboard,render:n=>WG(n),getTimelineEvents(n){return c4(n.statsTimeline,n.replay)}})}function _$(){let n=null;return{id:"ceiling-shot",label:"Ceiling Shot",setup(e){n=new Q5(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Lx(s.ceiling_shot),s.ceiling_shot?.is_last_ceiling_shot?'Last Ceiling Shot':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Lx(s.ceiling_shot):""}}}function g$(){return{id:"wall-aerial",label:"Wall-to-Air Setup",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,kx(i.wall_aerial),i.wall_aerial?.is_last_wall_aerial?'Last Wall-to-Air Setup':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?kx(i.wall_aerial):""}}}function y$(){return{id:"wall-aerial-shot",label:"Wall Shot",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Dx(i.wall_aerial_shot),i.wall_aerial_shot?.is_last_wall_aerial_shot?'Last Wall Shot':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Dx(i.wall_aerial_shot):""}}}function v$(){return ai({id:"ball-carry",label:"Ball Carry",select:n=>n.ball_carry,render:n=>YG(n)})}function b$(){return ai({id:"air-dribble",label:"Air Dribble",select:n=>n.air_dribble,render:n=>jG(n)})}function x$(){return ai({id:"dodge-reset",label:"Dodge Refresh",select:n=>n.dodge_reset,render:n=>t$(n)})}function w$(){return ai({id:"flip-reset",label:"Flip Reset",select:n=>n.flip_reset,render:n=>n$(n)})}function S$(){return ai({id:"double-tap",label:"Double Tap",select:n=>n.double_tap,render:n=>XG(n)})}function T$(){return ai({id:"pass",label:"Pass",select:n=>n.pass,render:n=>KG(n)})}function M$(){return ai({id:"one-timer",label:"One-timer",select:n=>n.one_timer,render:n=>qG(n)})}function E$(){return{id:"flick",label:"Flick",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ox(i.flick),i.flick?.is_last_flick?'Last Flick':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ox(i.flick):""}}}function C$(){let n=null;return{id:"speed-flip",label:"Speed Flip",setup(e){n=new DG(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=zt(t.statsFrameLookup,e);return i?si(i.players,s=>Tn(s.name,s.is_team_0,Fx(s.speed_flip),s.speed_flip?.is_last_speed_flip?'Last Speed Flip':"")):""},renderFocusedPlayerStats(e,t,i){const s=wn(i,t,e);return s?Fx(s.speed_flip):""}}}function A$(){let n=null;return{id:"dodge",label:"Dodge",setup(e){n=new xG(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return w4(e.statsTimeline,e.replay)},renderStats(e,t){const i=new Map;for(const a of t.replay.players)i.set(a.id,{name:a.name,isTeamZero:a.isTeamZero,count:0});for(const a of ve(t.statsTimeline,"dodge")){const r=At(a.player),o=t.replay.players.find(c=>c.id===r)??null,l=i.get(r)??{name:o?.name??r,isTeamZero:a.is_team_0,count:0};l.count+=1,i.set(r,l)}const s=[...i.values()].filter(a=>a.count>0);return s.length===0?"":`
${[!0,!1].map(a=>{const r=s.filter(l=>l.isTeamZero===a);if(r.length===0)return"";const o=a?"Blue":"Orange";return`

${o} team

${r.length} player${r.length===1?"":"s"} @@ -5907,7 +5972,7 @@ void main() {
${r.map(l=>Tn(l.name,l.isTeamZero,`
Events${l.count}
`)).join("")}
-
`}).join("")}
`},renderFocusedPlayerStats(e,t,i){return`
Events${ve(i.statsTimeline,"dodge").filter(a=>At(a.player)===e).length}
`}}}function JG(){return{id:"half-flip",label:"Half Flip",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Rx(i.half_flip),i.half_flip?.is_last_half_flip?'Last Half Flip':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Rx(i.half_flip):""}}}function QG(){return{id:"wavedash",label:"Wavedash",setup(){},teardown(){},onBeforeRender(){},getTimelineEvents(n){return K5(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Px(i.wavedash),i.wavedash?.is_last_wavedash?'Last Wavedash':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Px(i.wavedash):""}}}function e$(){return ai({id:"whiff",label:"Whiff",select:n=>n.whiff,render:n=>xG(n),getTimelineEvents(n){return J5(n.statsTimeline,n.replay)}})}function t$(n){let e=null,t=null;const i=new Set,s=["speed_band","height_band"];return{id:"movement",label:"Movement",setup(){a()},teardown(){},onBeforeRender(){},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const c=zt(l.statsFrameLookup,o);return c?si(c.players,u=>Tn(u.name,u.is_team_0,gx(u.movement,{breakdownClasses:r()}))):""},renderFocusedPlayerStats(o,l,c){const u=wn(c,l,o);return u?gx(u.movement,{breakdownClasses:r()}):""},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Movement breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";for(const h of[{className:"speed_band",label:"Speed band"},{className:"height_band",label:"Height band"}]){const f=document.createElement("label");f.className="toggle";const p=document.createElement("input");p.type="checkbox",p.dataset.breakdownClass=h.className,p.addEventListener("change",()=>{p.checked?i.add(h.className):i.delete(h.className),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const g=document.createElement("span");g.textContent=h.label,f.append(p,g),d.append(f)}e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=r();t.textContent=o.length>0?o.map(l=>({speed_band:"Speed band",height_band:"Height band"})[l]).join(" + "):"Total only"}}}function r(){return s.filter(o=>i.has(o))}}function n$(){return ai({id:"powerslide",label:"Powerslide",select:n=>n.powerslide,render:n=>bG(n),getTimelineEvents(n){return G5(n.statsTimeline,n.replay)}})}function i$(){return ai({id:"rotation",label:"Rotation",select:n=>n.rotation,render:n=>hG(n)})}function s$(){return ai({id:"demo",label:"Demo",select:n=>n.demo,render:n=>wG(n)})}function a$(){return ai({id:"bump",label:"Bump",select:n=>n.bump,render:n=>SG(n),getTimelineEvents(n){return q5(n.statsTimeline,n.replay)}})}function r$(){let n=null,e=1;return{id:OE,label:"Relative Positioning",setup(t){e=t.fieldScale,n=new PV(t.player.sceneState.replayRoot,t.replay,e)},teardown(){n?.dispose(),n=null},onBeforeRender(t){n?.update(t,e)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>{const r=w4(i.replay,At(a.player_id),t),o=x4[r];return Tn(a.name,a.is_team_0,wx(a.positioning),`${o}`)}):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?wx(a.positioning):""}}}function o$(){return{id:"absolute-positioning",label:"Absolute Positioning",setup(n){bx.acquire(n)},teardown(){bx.release()},onBeforeRender(){},getTimelineRanges(n){return b4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Sx(i.positioning))):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Sx(i.positioning):""}}}function l$(n,e={}){return[NG(),UG(),BG(),zG(),HG(),XG(),qG(),KG(),S4(n),T4(),M4(),E4(),C4(),r$(),o$(),i$(),ZG(),jG(),JG(),QG(),OG(n),e$(),YG(),$G(),WG(),GG(),FG(n,e.boostPickupFilters),VG(),t$(n),n$(),s$(),a$()]}const c$=new Set(["player_id","name","is_team_0"]),u$=["is_last_","time_since_last_","frames_since_last_"];function d$(n){return n===null||typeof n=="number"||typeof n=="string"||typeof n=="boolean"||Array.isArray(n)}function h$(n,e){let t=n;for(const i of e){if(!t||typeof t!="object"||Array.isArray(t))return;t=t[i]}return t}function f$(n){return n==null?"--":typeof n=="number"?Number.isFinite(n)?Number.isInteger(n)?`${n}`:`${Number(n.toFixed(3))}`:"--":typeof n=="boolean"?n?"true":"false":Array.isArray(n)?n.length===0?"[]":JSON.stringify(n):`${n}`}function p$(n,e){if(u$.some(a=>n.startsWith(a)))return!0;const t=n.match(/^last_(.+)_time$/),i=n.match(/^last_(.+)_frame$/),s=t?.[1]??i?.[1];return s?`is_last_${s}`in e||`time_since_last_${s}`in e||`frames_since_last_${s}`in e:!1}function y_(n,e,t,i){if(!n||typeof n!="object"||Array.isArray(n))return;const s=n;for(const[a,r]of Object.entries(s)){if(e==="player"&&t.length===0&&c$.has(a)||p$(a,s))continue;const o=[...t,a];if(d$(r)){const l=`${e}:${o.join(".")}`;i.push({id:l,label:o.join("."),category:o[0]??e,scope:e,path:o,read(c){return h$(c,o)},format:f$});continue}y_(r,e,o,i)}}function m$(n){const e=new Set;return n.filter(t=>e.has(t.id)?!1:(e.add(t.id),!0))}function _$(n,e){const t=[];return n&&y_(n,"player",[],t),e&&y_(e,"team",[],t),m$(t).sort((i,s)=>i.label.localeCompare(s.label))}function g$(){return _$(eE(),Yl())}function Jl(n){return g$()}function GE(n){return n.toLowerCase().replace(/[_/.-]+/g," ").replace(/\s+/g," ").trim()}function y$(n){return GE(n).split(" ").filter(Boolean)}function v$(n,e){const t=y$(e);if(t.length===0)return 0;const i=GE([n.scope,n.category,n.label,n.id,...n.path].join(" "));let s=0;for(const a of t){const r=i.indexOf(a);if(r<0)return null;s+=r}return s+i.length/1e3}function b$(n,e){return n.map((t,i)=>({definition:t,index:i,score:v$(t,e)})).filter(t=>t.score!==null).sort((t,i)=>t.score-i.score||t.index-i.index).map(t=>t.definition)}function ss(n){if(!Number.isFinite(n))return"--";const e=Math.floor(Math.max(0,n)/60),t=Math.max(0,n)-e*60;return`${e}:${t.toFixed(1).padStart(4,"0")}`}class x${constructor(e){this.options=e}statsWindows=new Map;nextStatsWindowId=1;getConfigs(){return[...this.statsWindows.values()].map(e=>({id:e.id,kind:e.kind,placement:this.options.readWindowPlacement(e.element),playerId:e.playerId,team:e.team,entries:e.entries.map(t=>({statId:t.statId,targetId:t.targetId}))}))}clear(){for(const e of this.statsWindows.values())e.element.remove();this.statsWindows.clear(),this.nextStatsWindowId=1}replaceFromConfig(e){this.clear();for(const t of e)this.create(t.kind,t)}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0,t={}){for(const i of this.statsWindows.values())t.preserveOpenPickers&&(i.pickerOpen||i.element.contains(document.activeElement))||this.renderStatsWindow(i,e)}create(e,t){const i=t?.id??`stats-${this.nextStatsWindowId++}`,s=Number.parseInt(i.replace(/^stats-/,""),10);Number.isFinite(s)&&(this.nextStatsWindowId=Math.max(this.nextStatsWindowId,s+1));const{x:a,y:r}=this.getStatsWindowDefaultPosition(),o=document.createElement("section");o.className="stats-window",o.dataset.windowId=i,o.style.setProperty("--window-x",`${a}px`),o.style.setProperty("--window-y",`${r}px`),t&&this.options.applyWindowPlacement(o,t.placement);const l=document.createElement("header");l.className="stats-window-header";const c=document.createElement("div");c.className="stats-window-actions";const u=document.createElement("button");if(u.type="button",u.className="stats-window-action",u.textContent="Hide",c.append(u),this.hasStatsWindowScopeSelector(e))l.classList.add("stats-window-header-actions-only"),l.append(c);else{const f=document.createElement("h2");f.textContent=this.getStatsWindowTitle(e),l.append(f,c)}const d=document.createElement("div");d.className="stats-window-body",o.append(l,d),this.options.layer.append(o);const h={id:i,kind:e,entries:t?.entries.map(f=>({key:`${i}:${f.statId}:${f.targetId??"scope"}`,statId:f.statId,targetId:f.targetId}))??[],playerId:t?.playerId??this.options.getReplayPlayer()?.replay.players[0]?.id??null,team:t?.team??"blue",pickerOpen:!1,query:"",element:o,body:d};return u.addEventListener("click",()=>{o.hidden=!0,this.options.requestConfigSync()}),this.statsWindows.set(i,h),t||this.options.bringWindowToFront(o),this.options.setLauncherOpen(!1),this.renderStatsWindow(h),this.options.requestConfigSync(),h}getStatById(e){return this.options.getStatRegistry().find(t=>t.id===e)??null}getCurrentStatsFrame(e){const t=this.options.getStatsFrameLookup();return t?zt(t,e):null}getTeamSnapshot(e,t){return t==="blue"?e.team_zero??null:e.team_one??null}getTeamLabel(e){return e==="blue"?"Blue":"Orange"}getPlayerTeamClass(e){const t=this.options.getReplayPlayer()?.replay.players.find(i=>i.id===e);return t?ta(t.isTeamZero):null}getTeamScopeClass(e){return ta(e==="blue")}appendGroupedPlayerOptions(e,t){const i=this.options.getReplayPlayer()?.replay.players??[];for(const s of["blue","orange"]){const a=i.filter(o=>o.isTeamZero===(s==="blue"));if(a.length===0)continue;const r=document.createElement("optgroup");r.label=`${this.getTeamLabel(s)} team`;for(const o of a)r.append(new Option(o.name,o.id,o.id===t,o.id===t));e.append(r)}}getStatsWindowScopeTeamClass(e){return e.kind==="player"?this.getPlayerTeamClass(e.playerId):e.kind==="team"?this.getTeamScopeClass(e.team??"blue"):null}getStatTargetTeamClass(e,t){return e.scope==="player"?this.getPlayerTeamClass(t):this.getTeamScopeClass(t==="orange"?"orange":"blue")}getStatsWindowTitle(e){switch(e){case"player":return"Player stats";case"team":return"Team stats";case"all-players":return"All players stats";case"all-teams":return"All teams stats";case"kickoff-overview":return"Kickoff details";case"goals-overview":return"Goal labels";case"ad-hoc":return"Ad hoc stats"}}hasStatsWindowScopeSelector(e){return e==="player"||e==="team"}hasStatsWindowStatPicker(e){return e!=="goals-overview"&&e!=="kickoff-overview"}getStatsWindowAllowedScope(e){switch(e){case"player":case"all-players":return"player";case"team":case"all-teams":return"team";case"kickoff-overview":return null;case"goals-overview":return null;case"ad-hoc":return null}}getStatsWindowDefaultPosition(){const e=this.statsWindows.size*18;return{x:Math.max(12,Math.min(window.innerWidth-360,96+e)),y:Math.max(64,Math.min(window.innerHeight-240,96+e))}}renderStatsWindow(e,t=this.options.getReplayPlayer()?.getState().frameIndex??0){const i=document.activeElement,s=i instanceof HTMLInputElement&&i.dataset.statsWindowSearch===e.id,a=s?i.selectionStart:null,r=s?i.selectionEnd:null,o=s?i.selectionDirection:null;if(e.body.replaceChildren(),this.renderStatsWindowScope(e),this.hasStatsWindowStatPicker(e.kind)&&(this.renderStatsWindowAddControl(e),this.renderStatsWindowPicker(e)),this.renderStatsWindowEntries(e,t),s){const l=e.body.querySelector(`input[data-stats-window-search="${e.id}"]`);l?.focus({preventScroll:!0}),l&&a!==null&&r!==null&&l.setSelectionRange(a,r,o??"none")}}renderStatsWindowScope(e){if(e.kind!=="player"&&e.kind!=="team")return;const t=document.createElement("div");t.className="stats-window-scope-row";const i=document.createElement("select");i.className="stats-window-scope-select";const s=this.getStatsWindowScopeTeamClass(e);s&&i.classList.add(s),i.setAttribute("aria-label",e.kind==="player"?"Player stats target":"Team stats target"),e.kind==="player"?(this.appendGroupedPlayerOptions(i,e.playerId),i.value=e.playerId??"",i.addEventListener("change",()=>{e.playerId=i.value||null,this.renderStatsWindow(e),this.options.requestConfigSync()})):(i.append(new Option("Blue","blue",e.team==="blue",e.team==="blue"),new Option("Orange","orange",e.team==="orange",e.team==="orange")),i.value=e.team??"blue",i.addEventListener("change",()=>{e.team=i.value==="orange"?"orange":"blue",this.renderStatsWindow(e),this.options.requestConfigSync()})),t.append(i),e.body.append(t)}renderStatsWindowAddControl(e){const t=document.createElement("button");if(t.type="button",t.className="stats-window-add-button",t.textContent="+",t.title="Add stat",t.setAttribute("aria-label","Add stat"),t.setAttribute("aria-expanded",String(e.pickerOpen)),this.activateButton(t,()=>{e.pickerOpen=!e.pickerOpen,this.renderStatsWindow(e)}),this.hasStatsWindowScopeSelector(e.kind)){e.body.querySelector(".stats-window-scope-row")?.append(t);return}const i=document.createElement("div");i.className="stats-window-toolbar",i.append(t),e.body.append(i)}activateButton(e,t){let i=!1;e.addEventListener("pointerdown",s=>{e.disabled||(i=!0,s.preventDefault(),t())}),e.addEventListener("click",()=>{if(i){i=!1;return}e.disabled||t()})}renderStatsWindowPicker(e){const t=document.createElement("div");if(t.className="stats-window-picker",t.hidden=!e.pickerOpen,t.hidden){e.body.append(t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=document.createElement("input");s.type="search",s.placeholder="Search stats",s.value=e.query,s.dataset.statsWindowSearch=e.id;const a=document.createElement("div");a.className="stats-window-picker-list",s.addEventListener("input",()=>{e.query=s.value,this.renderStatsWindowPickerList(e,a,i)}),this.renderStatsWindowPickerList(e,a,i),t.append(s,a),e.body.append(t)}renderStatsWindowPickerList(e,t,i){t.replaceChildren();const s=this.options.getStatRegistry(),a=i?s.filter(l=>l.scope===i):s,r=b$(a,e.query),o=new Map;for(const l of r){const c=o.get(l.category)??[];c.push(l),o.set(l.category,c)}for(const[l,c]of o){if(c.length<2)continue;const u=document.createElement("button");u.type="button",u.className="stats-window-picker-item",u.innerHTML=`Add all ${l}${c.length}`,this.activateButton(u,()=>{for(const d of c)this.addStatToWindow(e,d);this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(u)}for(const l of r){const c=document.createElement("button");c.type="button",c.className="stats-window-picker-item",c.innerHTML=`${l.label}${l.scope}`,c.disabled=e.kind!=="ad-hoc"&&e.entries.some(u=>u.statId===l.id),this.activateButton(c,()=>{this.addStatToWindow(e,l),this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(c)}if(r.length===0){const l=document.createElement("p");l.className="stat-window-empty",l.textContent=s.length===0?"No stats available.":"No matching stats.",t.append(l)}}addStatToWindow(e,t){const i=e.kind==="ad-hoc"?this.getDefaultAdHocTargetId(t):void 0;e.entries.some(s=>s.statId===t.id&&s.targetId===i)||e.entries.push({key:`${e.id}:${t.id}:${i??"scope"}`,statId:t.id,targetId:i})}getDefaultAdHocTargetId(e){return e.scope==="player"?this.options.getReplayPlayer()?.replay.players[0]?.id??"":"blue"}removeStatFromWindow(e,t){const i=e.entries.findIndex(s=>s.key===t);i>=0&&e.entries.splice(i,1)}renderStatsWindowEntries(e,t){if(e.kind==="goals-overview"){this.renderGoalLabelsOverview(e);return}if(e.kind==="kickoff-overview"){this.renderKickoffOverview(e,t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=e.entries.map(r=>({entry:r,definition:this.getStatById(r.statId)})).filter(r=>r.definition!==null&&(!i||r.definition.scope===i));if(s.length===0){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="No stats added.",e.body.append(r);return}const a=this.getCurrentStatsFrame(t);if(!a){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="Load a replay to show stats.",e.body.append(r);return}if(e.kind==="all-players"){this.renderAllPlayersStats(e,a,s);return}if(e.kind==="all-teams"){this.renderAllTeamsStats(e,a,s);return}if(e.kind==="player"){const r=e.playerId?a.players.find(o=>At(o.player_id)===e.playerId)??null:null;this.renderScopedStatList(e,r,s);return}if(e.kind==="team"){this.renderScopedStatList(e,this.getTeamSnapshot(a,e.team??"blue"),s);return}e.kind==="ad-hoc"&&this.renderAdHocStats(e,a,s)}renderGoalLabelsOverview(e){const t=this.options.getStatsTimeline(),i=this.options.getReplayPlayer()?.replay??null;if(!t||!i){this.appendStatsWindowEmpty(e,"Load a replay to show goal labels.");return}const s=[...ve(t,"goal_context")].sort((o,l)=>o.time-l.time),a=s.map((o,l)=>l);if(a.length===0){this.appendStatsWindowEmpty(e,"No goals loaded.");return}const r=document.createElement("div");r.className="goal-label-list";for(const o of a){const l=s[o]??null,c=[...l?.tags??[]].sort((M,C)=>M.kind.localeCompare(C.kind)||C.metadata.confidence-M.metadata.confidence),u=l?.time??0,d=l?.scorer??null,h=d?At(d):null,f=d?i.players.find(M=>M.id===h)?.name??h:"Unknown scorer",p=l?.scoring_team_is_team_0??null,g=document.createElement("section");g.className="goal-label-item",p!==null&&g.classList.add(ta(p));const _=document.createElement("header"),m=document.createElement("h3");m.textContent=`Goal ${o+1}`;const v=document.createElement("span");v.textContent=`${ss(u)} · ${f}`,_.append(m,v);const y=document.createElement("div");if(y.className="goal-label-tags",c.length===0){const M=document.createElement("span");M.className="goal-label-tag goal-label-tag-empty",M.textContent="Unlabeled",y.append(M)}else for(const M of c){const C=document.createElement("span");C.className="goal-label-tag";const w=M5(M);C.textContent=`${Ci(M.kind)} ${Math.round(M.metadata.confidence*100)}%${w?` - ${w}`:""}`,y.append(C)}const b=document.createElement("div");b.className="goal-label-actions";const T=document.createElement("button");T.type="button",T.className="goal-label-watch",T.textContent="Watch",T.addEventListener("click",()=>{this.options.watchGoalReplay(u,h)});const x=document.createElement("button");x.type="button",x.textContent="Cue",x.addEventListener("click",()=>{this.options.cueGoalReplay(u)}),b.append(T,x),g.append(_,y,b),r.append(g)}e.body.append(r)}renderKickoffOverview(e,t){const i=this.options.getStatsTimeline(),s=this.options.getReplayPlayer()?.replay??null;if(!i||!s){this.appendStatsWindowEmpty(e,"Load a replay to show kickoff details.");return}const a=this.getClosestKickoffEvent(i,t);if(!a){this.appendStatsWindowEmpty(e,"No kickoff events loaded.");return}const r=a.payload.payload,o=document.createElement("section");o.className="kickoff-overview";const l=document.createElement("header");l.className="kickoff-overview-hero";const c=document.createElement("div"),u=document.createElement("h3");u.textContent=this.formatKickoffTitle(a);const d=document.createElement("span");d.textContent=`Nearest kickoff · resolved at ${ss(r.end_time)}`,c.append(u,d);const h=document.createElement("strong"),f=this.teamClassFromNullable(r.winning_team_is_team_0);h.className="kickoff-overview-victor",f&&h.classList.add(f),h.textContent=this.formatOutcome(r),l.append(c,h);const p=document.createElement("div");p.className="kickoff-overview-summary",p.append(this.renderKickoffMetric("Win strength",`${this.formatNullableNumber(r.win_strength,2)} · ${this.formatKickoffLabelValue("kickoff_win_strength",r.win_strength_band)}`),this.renderKickoffMetric("First touch",this.formatFirstTouch(r)),this.renderKickoffMetric("Advantage",this.formatAdvantage(r)),this.renderKickoffMetric("Contested",this.formatContested(r)));const g=document.createElement("div");g.className="kickoff-detail-grid",g.append(this.renderKickoffDetail("Kickoff start",ss(r.start_time)),this.renderKickoffDetail("Movement start",ss(r.movement_start_time)),this.renderKickoffDetail("Live action",r.live_action_start_time===null?"--":ss(r.live_action_start_time)),this.renderKickoffDetail("First touch",r.first_touch_time===null?"--":ss(r.first_touch_time)),this.renderKickoffDetail("Resolution",ss(r.end_time)),this.renderKickoffDetail("After first touch",this.formatSeconds(r.advantage_seconds_after_first_touch)));const _=document.createElement("div");_.className="kickoff-strategy-list",_.append(this.renderKickoffTeamStrategy("Blue",r.team_zero_taker,r.team_zero_non_takers),this.renderKickoffTeamStrategy("Orange",r.team_one_taker,r.team_one_non_takers)),o.append(l,p,g,_),e.body.append(o)}getClosestKickoffEvent(e,t){return jl(e).filter(s=>s.payload.kind==="kickoff").sort((s,a)=>{const r=this.kickoffFrameDistance(s.payload.payload,t),o=this.kickoffFrameDistance(a.payload.payload,t);return r!==o?r-o:s.payload.payload.start_frame-a.payload.payload.start_frame})[0]??null}kickoffFrameDistance(e,t){return t>=e.start_frame&&t<=e.end_frame?0:Math.min(Math.abs(t-e.start_frame),Math.abs(t-e.end_frame))}renderKickoffMetric(e,t){const i=document.createElement("div");i.className="kickoff-metric";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffDetail(e,t){const i=document.createElement("div");i.className="kickoff-detail-row";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffTeamStrategy(e,t,i){const s=document.createElement("section");s.className=`kickoff-strategy-team ${e==="Blue"?"team-blue":"team-orange"}`;const a=document.createElement("h4");a.textContent=e,s.append(a);const r=document.createElement("p");if(r.className="kickoff-strategy-line",r.textContent=t?`${this.getPlayerName(t.player)}: ${this.formatKickoffLabelValue("kickoff_approach",t.approach)} from ${this.formatKickoffLabelValue("kickoff_spawn",t.spawn_position)} (${this.formatKickoffLabelValue("taker_outcome",t.outcome)}, ${this.formatSeconds(t.time_to_ball)})`:"No taker detected",s.append(r),i.length>0){const o=document.createElement("ul");o.className="kickoff-support-list";for(const l of i){const c=document.createElement("li");c.textContent=`${this.getPlayerName(l.player)}: ${this.formatKickoffLabelValue("support_behavior",l.support_behavior)} from ${this.formatKickoffLabelValue("kickoff_spawn",l.spawn_position)}`,o.append(c)}s.append(o)}return s}formatOutcome(e){return e.winning_team_is_team_0===!0?"Blue wins":e.winning_team_is_team_0===!1?"Orange wins":e.outcome==="neutral"?"Neutral":"Unknown"}formatFirstTouch(e){if(!e.first_touch_player)return"--";const t=e.first_touch_team_is_team_0===!0?"Blue":e.first_touch_team_is_team_0===!1?"Orange":"Unknown",i=e.first_touch_time===null?"--":ss(e.first_touch_time);return`${t} · ${this.getPlayerName(e.first_touch_player)} · ${i}`}formatAdvantage(e){if(e.advantage==="no_advantage")return"No advantage";const t=e.advantage_team_is_team_0===!0?"Blue":e.advantage_team_is_team_0===!1?"Orange":"Unknown",i=e.advantage.replace(/^team_(zero|one)_/,""),s=e.advantage_player?` · ${this.getPlayerName(e.advantage_player)}`:"",a=e.advantage_time===null?"":` · ${ss(e.advantage_time)}`;return`${t} ${this.formatKickoffLabelValue("kickoff_advantage",i)}${s}${a}`}formatContested(e){return e.kickoff_possession_outcome==="contested"?"Yes":e.kickoff_possession_team_is_team_0===!0?`No · Blue ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:e.kickoff_possession_team_is_team_0===!1?`No · Orange ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:`No · ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`}formatPossessionOutcome(e){return e.endsWith("_advantage")?"advantage":e.endsWith("_possession")?"possession":this.formatKickoffLabelValue("kickoff_possession_outcome",e)}formatKickoffType(e){return this.formatKickoffLabelValue("kickoff_type",e)}formatKickoffTitle(e){const t=e.payload.payload,i=this.formatKickoffDirection(t.kickoff_direction),s=[this.formatKickoffType(t.kickoff_type),i].filter(Boolean).join(" ");return[e.meta.label,s].filter(Boolean).join(" · ")}formatKickoffDirection(e){return e==="unknown"?"":`(${this.formatKickoffLabelValue("kickoff_direction",e)})`}formatNullableNumber(e,t){return e===null||!Number.isFinite(e)?"--":e.toFixed(t)}formatSeconds(e){return e===null||!Number.isFinite(e)?"--":`${e.toFixed(2)}s`}formatLabel(e){return e.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_").replaceAll("_"," ").replace(/\b\w/g,t=>t.toUpperCase())}formatKickoffLabelValue(e,t){const i=t.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_");return e==="kickoff_advantage"?this.formatLabel(i.replace(/^blue_/,"").replace(/^orange_/,"")):e==="kickoff_possession_outcome"?this.formatLabel(i.replace(/^blue_/,"Blue ").replace(/^orange_/,"Orange ")):this.formatLabel(i)}teamClassFromNullable(e){return e===null?null:ta(e)}getPlayerName(e){const t=At(e);return this.options.getReplayPlayer()?.replay.players.find(i=>i.id===t)?.name??t}appendStatsWindowEmpty(e,t){const i=document.createElement("p");i.className="stat-window-empty",i.textContent=t,e.body.append(i)}renderScopedStatList(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i)s.append(this.renderStatRow(e,a,r,t?r.format(r.read(t)):"--"));e.body.append(s)}renderAllPlayersStats(e,t,i){const s=document.createElement("div");s.className="stats-window-team-list";for(const a of["blue","orange"]){const r=t.players.filter(h=>h.is_team_0===(a==="blue"));if(r.length===0)continue;const o=document.createElement("section");o.className=`stats-window-team-group ${this.getTeamScopeClass(a)}`;const l=document.createElement("header");l.className="stats-window-team-header";const c=document.createElement("h3");c.textContent=`${this.getTeamLabel(a)} team`;const u=document.createElement("span");u.textContent=`${r.length} player${r.length===1?"":"s"}`,l.append(c,u),o.append(l);const d=document.createElement("div");d.className="stats-window-entity-list";for(const h of r){const f=document.createElement("section");f.className=`stats-window-entity ${ta(h.is_team_0)}`;const p=document.createElement("h4");p.className="stats-window-entity-title",p.textContent=h.name,f.append(p);for(const{entry:g,definition:_}of i)f.append(this.renderStatRow(e,g,_,_.format(_.read(h))));d.append(f)}o.append(d),s.append(o)}e.body.append(s)}renderAllTeamsStats(e,t,i){const s=document.createElement("div");s.className="stats-window-entity-list";for(const a of["blue","orange"]){const r=this.getTeamSnapshot(t,a),o=document.createElement("section");o.className=`stats-window-entity ${this.getTeamScopeClass(a)}`;const l=document.createElement("h3");l.className="stats-window-entity-title",l.textContent=this.getTeamLabel(a),o.append(l);for(const{entry:c,definition:u}of i)o.append(this.renderStatRow(e,c,u,r?u.format(u.read(r)):"--"));s.append(o)}e.body.append(s)}renderAdHocStats(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i){const o=this.getAdHocTarget(t,r,a.targetId);s.append(this.renderStatRow(e,a,r,o?r.format(r.read(o)):"--"))}e.body.append(s)}getAdHocTarget(e,t,i){return t.scope==="player"?e.players.find(s=>At(s.player_id)===i)??e.players[0]??null:this.getTeamSnapshot(e,i==="orange"?"orange":"blue")}renderStatRow(e,t,i,s){const a=document.createElement("div");a.className="stats-window-stat-row";const r=document.createElement("span");if(r.className="stats-window-stat-name",r.textContent=i.label,e.kind==="ad-hoc"){const c=document.createElement("select");c.className="stats-window-stat-target";const u=this.getStatTargetTeamClass(i,t.targetId);u&&c.classList.add(u),i.scope==="player"?this.appendGroupedPlayerOptions(c,t.targetId):c.append(new Option("Blue","blue",t.targetId==="blue",t.targetId==="blue"),new Option("Orange","orange",t.targetId==="orange",t.targetId==="orange")),c.value=t.targetId??"",c.addEventListener("change",()=>{const d=c.value;if(e.entries.some(f=>f!==t&&f.statId===t.statId&&f.targetId===d)){this.renderStatsWindow(e);return}const h=e.entries.findIndex(f=>f.key===t.key);h>=0&&(e.entries[h]={key:`${e.id}:${t.statId}:${d}`,statId:t.statId,targetId:d}),this.renderStatsWindow(e),this.options.requestConfigSync()}),r.append(" ",c)}const o=document.createElement("span");o.className="stats-window-stat-value",o.textContent=s;const l=document.createElement("button");return l.type="button",l.className="stats-window-stat-remove",l.textContent="x",l.addEventListener("click",()=>{this.removeStatFromWindow(e,t.key),this.renderStatsWindow(e),this.options.requestConfigSync()}),a.append(r,o,l),a}}function w$(n){return new x$(n)}const S$=new Set(["module:dodge","module:touch","module:powerslide"]),T$=["stats-stream:"],ih=["#3b82f6","#06b6d4","#22c55e","#a855f7","#f97316","#ef4444","#f59e0b","#ec4899"],af="#d1d9e0",Gg=ih[0],$g=ih[4],M$=[{id:"core",label:"Shots, saves, assists",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="shot"||e.kind==="save"||e.kind==="assist")}},{id:"demo",label:"Demos",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="demo")}}],E$=[];function $E(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function WE(n){if(typeof n=="string"&&n.length>0)return n;if(!$E(n))return null;const[e,t]=Object.entries(n)[0]??[];return!e||t==null?null:typeof t=="string"||typeof t=="number"?`${e}:${t}`:`${e}:${JSON.stringify(t)}`}function XE(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>e.slice(0,1).toUpperCase()).join("").slice(0,3)||"E"}function C$(n){if(typeof n!="number"||!Number.isFinite(n))return null;const e=Math.abs(n)<1?2:1;return`${n.toFixed(e).replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}s`}function $i(n){return typeof n!="string"||n.length===0?null:n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function A$(n){return n==="team_zero_side"?"Blue side":n==="team_one_side"?"Orange side":n==="neutral"?"Neutral zone":$i(n)}function R$(n){const e=$i(n);return e?`${e.toLowerCase()} third`:null}function P$(n){return n==="team_zero_third"?"Blue third":n==="team_one_third"?"Orange third":n==="neutral_third"?"Neutral third":$i(n)}function I$(n){return n==="team_zero"?"Blue":n==="team_one"?"Orange":n==="neutral"?"Neutral":$i(n)}function ad(n){return $E(n.payload.payload)?n.payload.payload:{}}function KE(n){return n===!0?Gg:n===!1?$g:null}function L$(n){return n==="team_zero_side"?Gg:n==="team_one_side"?$g:n==="neutral"?af:null}function D$(n){return n==="team_zero"?Gg:n==="team_one"?$g:n==="neutral"?af:null}function k$(n){return typeof n=="boolean"?KE(n):null}const O$={ball_half(n){return L$(ad(n).field_half)},possession(n){return D$(ad(n).possession_state)},player_possession(n){return k$(ad(n).is_team_0)}};function qE(n,e,t){return O$[n]?.(e)??KE(t)??af}function ui(n){return n.filter(e=>!!e).join(" | ")}function F$({event:n,playerName:e,streamLabel:t,teamLabel:i}){const s=ad(n),a=C$(s.duration);if(n.payload.kind==="ball_half"){const r=A$(s.field_half),o=s.active===!1?"Ball half inactive":r?`Ball on ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="ball_third"){const r=P$(s.field_third),o=s.active===!1?"Ball third inactive":r?`Ball in ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="territorial_pressure"){const r=$i(s.end_reason),o=`${i??""} territorial pressure`.trim();return ui([r?`${o} ended: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="possession"){const r=I$(s.possession_state),o=R$(s.field_third),l=r?`${r} possession`:t;return ui([l,o,a])}if(n.payload.kind==="controlled_play"){const r=e?`${e} controlled play`:t;return ui([r,a])}if(n.payload.kind==="ball_carry"){const r=e?`${e} ${t.toLowerCase()}`:t;return ui([r,a])}if(n.payload.kind==="player_activity"){const r=$i(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="field_third"){const r=$i(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} third`:o,a])}if(n.payload.kind==="field_half"){const r=$i(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} half`:o,a])}if(n.payload.kind==="ball_depth"){const r=$i(s.state),o=e?`${e} ball depth`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="depth_role"){const r=$i(s.state),o=e?`${e} depth role`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="shadow_defense"){const r=e?`${e} shadow defense`:t;return ui([r,a])}if(n.payload.kind==="rotation_role"){const r=$i(s.state),o=e?`${e} rotation`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}return e?`${e} ${t.toLowerCase()}`:t}function N$(n,e,t){const i=Ci(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{const o=a.meta.timing.type==="moment"?{time:a.meta.timing.time,frame:a.meta.timing.frame}:{time:a.meta.timing.end_time,frame:a.meta.timing.end_frame},l=WE(a.meta.primary_player),c=l?s.get(l)??l:null,u=a.meta.team_is_team_0??null,d=u==null?null:u?"Blue":"Orange",h=a.meta.id||`${e}:${o.frame??o.time}:${r}`,f=qE(e,a,u);return[{id:`stats-stream:${h}`,time:n.replay.frames[o.frame??-1]?.time??o.time,frame:o.frame,kind:e,label:F$({event:a,playerName:c,streamLabel:i,teamLabel:d}),shortLabel:XE(e),playerId:l,playerName:c,isTeamZero:u,color:f}]})}function U$(n,e,t){const i=Ci(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{if(a.meta.timing.type!=="span")return[];const o={startTime:a.meta.timing.start_time,endTime:a.meta.timing.end_time,startFrame:a.meta.timing.start_frame,endFrame:a.meta.timing.end_frame},l=a.meta.team_is_team_0??null,c=l==null?null:l?"Blue":"Orange",u=WE(a.meta.primary_player),d=u?s.get(u)??u:null,h=qE(e,a,l),f=a.meta.id||`${e}:${o.startFrame??o.startTime}:${o.endFrame??o.endTime}:${r}`,p=d?`${d} ${i.toLowerCase()}`:c?`${c} ${i.toLowerCase()}`:i;let g=`stats-stream:${e}`,_=i;return a.meta.scope==="player"&&u?(g=`stats-stream:${e}:player:${u}`,_=d?`${d} ${i.toLowerCase()}`:i):a.meta.scope==="team"&&l!=null&&(g=`stats-stream:${e}:team:${l?"0":"1"}`,_=c?`${c} ${i.toLowerCase()}`:i),[{id:`stats-stream:${f}`,startTime:n.replay.frames[o.startFrame??-1]?.time??o.startTime,endTime:Math.max(n.replay.frames[o.startFrame??-1]?.time??o.startTime,n.replay.frames[o.endFrame??-1]?.time??o.endTime),lane:g,laneLabel:_,label:p,shortLabel:XE(e),isTeamZero:l,color:h}]}).sort((a,r)=>a.startTime!==r.startTime?a.startTime-r.startTime:(a.id??"").localeCompare(r.id??""))}function B$(n,e,t,i){return[...new Set([...FT,...jl(n.statsTimeline).map(a=>a.meta.stream)])].flatMap(a=>{const r=jl(n.statsTimeline).filter(u=>u.meta.stream===a);if(i.has(a)&&r.length>0)return[];const o=r.some(u=>u.meta.timing.type==="span"),l=o?U$(n,a,r):[],c=N$(n,a,r);return[{id:`stats-stream:${a}`,playlistId:`stats-stream:${a}`,timelineKey:`stats-stream:${a}`,timelineId:`stats-stream:${a}`,group:"Event streams",label:Ci(a),count:o?l.length:c.length,active:e.has(`stats-stream:${a}`),buildTimelineEvents(){return o?[]:c},buildPlaylistEvents(){return c},buildTimelineRanges:o?()=>l:void 0,setActive(u){t(`stats-stream:${a}`,u)}}]})}function z$(n){return new Set([...n.filter(e=>e.getTimelineEvents).map(e=>e.id),...CE])}function H$(){return[...CE].sort((n,e)=>Ci(n).localeCompare(Ci(e)))}function V$({ctx:n,modules:e,activeTimelineEventSourceIds:t,activeMechanicTimelineKinds:i,toggleEventSource:s,setMechanicTimelineKind:a}){if(!n)return[];const r=[];for(const o of M$){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`replay:${o.id}`,timelineKey:`events:${o.id}`,timelineId:`events:${o.id}`,group:"Replay",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of e.filter(l=>l.getTimelineEvents)){const l=o.getTimelineEvents?.(n)??[],c=l.length;r.push({id:o.id,playlistId:`module:${o.id}`,timelineKey:`module:${o.id}`,timelineId:`module:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of E$){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`extra:${o.id}`,timelineKey:`extra:${o.id}`,timelineId:`extra:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}r.push(...B$(n,t,s,z$(e)));for(const o of H$()){const l=EE[o](n.statsTimeline,n.replay),c=l.length;r.push({id:`mechanic:${o}`,playlistId:`mechanic:${o}`,timelineKey:`mechanic:${o}`,timelineId:`mechanic:${o}`,group:"Event types",label:Ci(o),count:c,active:i.has(o),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){a(o,u)}})}return r.sort((o,l)=>o.label.localeCompare(l.label))}function G$(n,e){if(!n)return[];const t=[{id:"replay:goals",group:"Replay",label:"Goals",events:n.replay.timelineEvents.filter(s=>s.kind==="goal")}],i=e.map(s=>({id:s.playlistId,group:s.group,label:s.label,events:s.buildPlaylistEvents()}));return[...t,...i]}function v_(n,e){const t=n.map(i=>i.id);return e===null?new Set(t.filter(i=>!S$.has(i)&&!T$.some(s=>i.startsWith(s)))):new Set(t.filter(i=>e.has(i)))}function $$(n,e){const t=n.playerId??null,i=t?e.findIndex(s=>s.id===t):-1;return i>=0?ih[i%ih.length]:n.color??af}function W$({sources:n,activeSourceIds:e,replayPlayers:t}){const i=v_(n,e);return n.filter(s=>i.has(s.id)).flatMap(s=>s.events.map((a,r)=>({key:`${s.id}:${a.id??`${a.kind}:${a.time}:${r}`}`,sourceId:s.id,sourceLabel:s.label,event:a,color:$$(a,t)}))).sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:(s.event.label??s.sourceLabel).localeCompare(a.event.label??a.sourceLabel))}class X${constructor(e){this.options=e}getSources(e=this.options.getContext()){return V$({ctx:e,modules:this.options.modules,activeTimelineEventSourceIds:this.options.getActiveTimelineEventSourceIds(),activeMechanicTimelineKinds:this.options.getActiveMechanicTimelineKinds(),toggleEventSource:this.options.toggleEventSource,setMechanicTimelineKind:this.options.setMechanicTimelineKind})}countVisibleSources(e){return e.replay.timelineEvents.filter(i=>i.kind==="goal").length+this.getSources(e).filter(i=>i.active).reduce((i,s)=>i+s.count,0)}render(){const{body:e}=this.options;e.replaceChildren();const t=this.getSources();if(t.length===0){const d=document.createElement("p");d.className="stat-window-empty",d.textContent="No events loaded.",e.append(d);return}const i=document.createElement("div");i.className="mechanics-actions";const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.addEventListener("click",()=>{for(const d of t)d.setActive(!0);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const a=document.createElement("span");a.textContent="All events";const r=document.createElement("strong");r.textContent=`${t.length}`,s.append(a,r);const o=document.createElement("button");o.type="button",o.className="module-summary-item",o.addEventListener("click",()=>{for(const d of t)d.setActive(!1);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const l=document.createElement("span");l.textContent="No events";const c=document.createElement("strong");c.textContent="Off",o.append(l,c),i.append(s,o),e.append(i);const u=this.renderSourceList(t);u&&e.append(u)}renderSourceList(e){if(e.length===0)return null;const t=document.createElement("div");t.className="module-list mechanics-list mechanics-event-list",t.style.setProperty("--event-source-columns",`${K$(e.length)}`);for(const i of e){const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.dataset.active=i.active?"true":"false",s.setAttribute("aria-pressed",i.active?"true":"false"),s.addEventListener("click",()=>{i.setActive(!i.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderTimelineEventCount()});const a=document.createElement("span");a.textContent=i.label;const r=document.createElement("strong");r.textContent=`${i.active?"On":"Off"} ${i.count}`,s.append(a,r),t.append(s)}return t}}function K$(n){return window.innerWidth<640?1:window.innerWidth<900?n>=7?2:1:n>=13?3:n>=7?2:1}function q$(n){return new X$(n)}const Y$=new Set(["ceiling-shot","fifty-fifty","ball_half",OE,"absolute-positioning","dodge","speed-flip","touch"]),kx="touch";class j${constructor(e){this.options=e}renderSummary(){const{summary:e}=this.options.elements;e.replaceChildren();const t=this.options.getTimelineSources(),i=t.map(o=>this.renderTimelineSourceToggle(o)),s=[],a=[],r=this.options.getContext();for(const o of this.options.modules){const l=Y$.has(o.id);!o.getTimelineEvents&&!o.getTimelineRanges&&!l||(t.length===0&&o.getTimelineEvents&&i.push(this.renderCapabilityToggle(o.id,rm(o,"events"),"events")),o.getTimelineRanges&&s.push(this.renderCapabilityToggle(o.id,rm(o,"ranges"),"ranges",r?o.getTimelineRanges(r).length:void 0)),l&&a.push(this.renderCapabilityToggle(o.id,rm(o,"effects"),"effects")))}a.push(this.renderBoostPickupAnimationToggle()),e.append(am("Timeline markers",i),am("Timeline ranges",s),am("In-game visualizations",a))}renderSettings(){const{settings:e}=this.options.elements;e.replaceChildren();const t=this.options.getContext(),i=this.options.getActiveModules().filter(s=>s.id!=="boost"&&s.id!==kx).map(s=>s.renderSettings?.(t)??null).filter(s=>s instanceof HTMLElement);if(i.length===0){e.hidden=!0,this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow();return}e.hidden=!1,e.append(...i),this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow()}renderBoostPickupAnimationToggle(){const e=this.options.getBoostPickupAnimationEnabled(),t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e?"true":"false",t.setAttribute("aria-pressed",e?"true":"false"),t.addEventListener("click",this.options.toggleBoostPickupAnimation);const i=document.createElement("span");i.textContent="Boost pickup animation";const s=document.createElement("strong");return s.textContent=e?"On":"Off",t.append(i,s),t}renderCapabilityToggle(e,t,i,s){const r=this.options.getActiveCapabilityIds(i).has(e),o=document.createElement("button");o.type="button",o.className="module-summary-item",o.dataset.active=r?"true":"false",o.setAttribute("aria-pressed",r?"true":"false"),o.addEventListener("click",()=>{this.options.toggleCapability(e,i,!this.options.getActiveCapabilityIds(i).has(e))});const l=document.createElement("span");l.textContent=t;const c=document.createElement("strong");return c.textContent=Ox(r,s),o.append(l,c),o}renderTimelineSourceToggle(e){const t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e.active?"true":"false",t.setAttribute("aria-pressed",e.active?"true":"false"),t.addEventListener("click",()=>{e.setActive(!e.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync(),this.renderSummary()});const i=document.createElement("span");i.textContent=Z$(e);const s=document.createElement("strong");return s.textContent=Ox(e.active,e.count),t.append(i,s),t}renderBoostPickupFiltersWindow(){const e=this.options.getContext(),t=this.options.boostPickupFilters.renderSettings(e,{showHeader:!1});this.options.elements.boostPickupFilters.replaceChildren(t)}renderTouchControlsWindow(){const e=this.options.getContext(),i=this.options.modules.find(s=>s.id===kx)?.renderSettings?.(e)??null;this.options.elements.touchControls.replaceChildren(),i instanceof HTMLElement&&this.options.elements.touchControls.append(i)}}function am(n,e){const t=document.createElement("section");t.className="module-summary-group";const i=document.createElement("h3");i.textContent=n;const s=document.createElement("div");return s.className="module-list",s.append(...e),t.append(i,s),t}function Ox(n,e){const t=n?"On":"Off";return e==null?t:`${t} ${e}`}function Z$(n){return n.group==="Replay"?n.label:`${n.label} events`}function rm(n,e){const t={"absolute-positioning:ranges":"Position zones","backboard:events":"Backboard","ball-carry:events":"Ball carry","boost:ranges":"Boost pickup timeline","bump:events":"Bump","ceiling-shot:events":"Ceiling shot","demo:events":"Demo","dodge-reset:events":"Dodge refresh","double-tap:events":"Double tap","fifty-fifty:events":"50/50","fifty-fifty:ranges":"50/50","dodge:events":"Dodge","half-flip:events":"Half flip","possession:ranges":"Possession","powerslide:events":"Powerslide","powerslide:ranges":"Powerslide","ball_half:ranges":"Half control","ball_third:ranges":"Third control","rush:ranges":"Rush","speed-flip:events":"Speed flip","touch:events":"Touch","wavedash:events":"Wavedash"},i={"absolute-positioning":"Position zones","ceiling-shot":"Ceiling shot labels","fifty-fifty":"50/50 labels",dodge:"Dodge impulse arrows",ball_half:"Half control","relative-positioning":"Player roles","speed-flip":"Speed flip labels",touch:"Touch labels"};return e==="effects"?i[n.id]??n.label:t[`${n.id}:${e}`]??`${n.label} timeline`}function J$(n){return new j$(n)}var gn=Uint8Array,fi=Uint16Array,Wg=Int32Array,rf=new gn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),of=new gn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),b_=new gn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),YE=function(n,e){for(var t=new fi(31),i=0;i<31;++i)t[i]=e+=1<>1|(Ut&21845)<<1;Zs=(Zs&52428)>>2|(Zs&13107)<<2,Zs=(Zs&61680)>>4|(Zs&3855)<<4,w_[Ut]=((Zs&65280)>>8|(Zs&255)<<8)>>1}var hs=(function(n,e,t){for(var i=n.length,s=0,a=new fi(e);s>l]=c}else for(o=new fi(i),s=0;s>15-n[s]);return o}),da=new gn(288);for(var Ut=0;Ut<144;++Ut)da[Ut]=8;for(var Ut=144;Ut<256;++Ut)da[Ut]=9;for(var Ut=256;Ut<280;++Ut)da[Ut]=7;for(var Ut=280;Ut<288;++Ut)da[Ut]=8;var Ql=new gn(32);for(var Ut=0;Ut<32;++Ut)Ql[Ut]=5;var eW=hs(da,9,0),tW=hs(da,9,1),nW=hs(Ql,5,0),iW=hs(Ql,5,1),om=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Fi=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},lm=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},Xg=function(n){return(n+7)/8|0},lf=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new gn(n.subarray(e,t))},sW=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],os=function(n,e,t){var i=new Error(e||sW[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,os),!t)throw i;return i},aW=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new gn(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new gn(s*3));var c=function(xe){var Ae=t.length;if(xe>Ae){var L=new gn(Math.max(Ae*2,xe));L.set(t),t=L}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Fi(n,d,1);var v=Fi(n,d+1,3);if(d+=3,v)if(v==1)f=tW,p=iW,g=9,_=5;else if(v==2){var x=Fi(n,d,31)+257,M=Fi(n,d+10,15)+4,C=x+Fi(n,d+5,31)+1;d+=14;for(var w=new gn(C),E=new gn(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Fi(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Fi(n,d,7),d+=3):y==18&&(W=11+Fi(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ne=w.subarray(x);g=om(H),_=om(ne),f=hs(H,g,1),p=hs(ne,_,1)}else os(1);else{var y=Xg(d)+4,b=n[y-4]|n[y-3]<<8,T=y+b;if(T>s){l&&os(0);break}o&&c(h+b),t.set(n.subarray(y,T),h),e.b=h+=b,e.p=d=T*8,e.f=u;continue}if(d>m){l&&os(0);break}}o&&c(h+131072);for(var oe=(1<>4;if(d+=F&15,d>m){l&&os(0);break}if(F||os(2),De<256)t[h++]=De;else if(De==256){Ie=d,f=null;break}else{var Xe=De-254;if(De>264){var R=De-257,ke=rf[R];Xe=Fi(n,d,(1<>4;Z||os(3),d+=Z&15;var ne=Q$[se];if(se>3){var ke=of[se];ne+=lm(n,d)&(1<m){l&&os(0);break}o&&c(h+131072);var Se=h+Xe;if(h>8},rl=function(n,e,t){t<<=e&7;var i=e/8|0;n[i]|=t,n[i+1]|=t>>8,n[i+2]|=t>>16},cm=function(n,e){for(var t=[],i=0;ih&&(h=a[i].s);var f=new fi(h+1),p=S_(t[u-1],f,0);if(p>e){var i=0,g=0,_=p-e,m=1<<_;for(a.sort(function(x,M){return f[M.s]-f[x.s]||x.f-M.f});ie)g+=m-(1<>=_;g>0;){var y=a[i].s;f[y]=0&&g;--i){var b=a[i].s;f[b]==e&&(--f[b],++g)}p=e}return{t:new gn(f),l:p}},S_=function(n,e,t){return n.s==-1?Math.max(S_(n.l,e,t+1),S_(n.r,e,t+1)):e[n.s]=t},Nx=function(n){for(var e=n.length;e&&!n[--e];);for(var t=new fi(++e),i=0,s=n[0],a=1,r=function(l){t[i++]=l},o=1;o<=e;++o)if(n[o]==s&&o!=e)++a;else{if(!s&&a>2){for(;a>138;a-=138)r(32754);a>2&&(r(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(r(s),--a;a>6;a-=6)r(8304);a>2&&(r(a-3<<5|8208),a=0)}for(;a--;)r(s);a=1,s=n[o]}return{c:t.subarray(0,i),n:e}},ol=function(n,e){for(var t=0,i=0;i>8,n[s+2]=n[s]^255,n[s+3]=n[s+1]^255;for(var a=0;a4&&!E[b_[D-1]];--D);var O=c+5<<3,k=ol(s,da)+ol(a,Ql)+r,U=ol(s,h)+ol(a,g)+r+14+3*D+ol(M,E)+2*M[16]+3*M[17]+7*M[18];if(l>=0&&O<=k&&O<=U)return QE(e,u,n.subarray(l,l+c));var F,W,H,ne;if(Es(e,u,1+(U15&&(Es(e,u,De[C]>>5&127),u+=De[C]>>12)}}else F=eW,W=da,H=nW,ne=Ql;for(var C=0;C255){var Xe=ke>>18&31;rl(e,u,F[Xe+257]),u+=W[Xe+257],Xe>7&&(Es(e,u,ke>>23&31),u+=rf[Xe]);var Z=ke&31;rl(e,u,H[Z]),u+=ne[Z],Z>3&&(rl(e,u,ke>>5&8191),u+=of[Z])}else rl(e,u,F[ke]),u+=W[ke]}return rl(e,u,F[256]),u+W[256]},rW=new Wg([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),e1=new gn(0),oW=function(n,e,t,i,s,a){var r=a.z||n.length,o=new gn(i+r+5*(1+Math.ceil(r/7e3))+s),l=o.subarray(i,o.length-s),c=a.l,u=(a.r||0)&7;if(e){u&&(l[0]=a.r>>3);for(var d=rW[e-1],h=d>>13,f=d&8191,p=(1<7e3||E>24576)&&(F>423||!c)){u=Ux(n,l,0,b,T,x,C,E,D,w-D,u),E=M=C=0,D=w;for(var W=0;W<286;++W)T[W]=0;for(var W=0;W<30;++W)x[W]=0}var H=2,ne=0,oe=f,pe=k-U&32767;if(F>2&&O==y(w-pe))for(var Ie=Math.min(h,F)-1,De=Math.min(32767,w),Xe=Math.min(258,F);pe<=De&&--oe&&k!=U;){if(n[w+H]==n[w+H-pe]){for(var ke=0;keH){if(H=ke,ne=pe,ke>Ie)break;for(var Z=Math.min(pe,ke-2),se=0,W=0;Wse&&(se=ie,U=Se)}}}k=U,U=g[k],pe+=k-U&32767}if(ne){b[E++]=268435456|x_[H]<<18|Fx[ne];var xe=x_[H]&31,Ae=Fx[ne]&31;C+=rf[xe]+of[Ae],++T[257+xe],++x[Ae],R=w+H,++M}else b[E++]=n[w],++T[n[w]]}}for(w=Math.max(w,R);w=r&&(l[u/8|0]=c,L=r),u=QE(l,u+1,n.subarray(w,L))}a.i=r}return lf(o,0,i+Xg(u)+s)},lW=function(n,e,t,i,s){if(!s&&(s={l:1},e.dictionary)){var a=e.dictionary.subarray(-32768),r=new gn(a.length+n.length);r.set(a),r.set(n,a.length),n=r,s.w=a.length}return oW(n,e.level==null?6:e.level,e.mem==null?s.l?Math.ceil(Math.max(8,Math.min(13,Math.log(n.length)))*1.5):20:12+e.mem,t,i,s)};function cW(n,e){return lW(n,e||{},0,0)}function t1(n,e){return aW(n,{i:2},e,e)}var Bx=typeof TextEncoder<"u"&&new TextEncoder,T_=typeof TextDecoder<"u"&&new TextDecoder,uW=0;try{T_.decode(e1,{stream:!0}),uW=1}catch{}var dW=function(n){for(var e="",t=0;;){var i=n[t++],s=(i>127)+(i>223)+(i>239);if(t+s>n.length)return{s:e,r:lf(n,t-1)};s?s==3?(i=((i&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,e+=String.fromCharCode(55296|i>>10,56320|i&1023)):s&1?e+=String.fromCharCode((i&31)<<6|n[t++]&63):e+=String.fromCharCode((i&15)<<12|(n[t++]&63)<<6|n[t++]&63):e+=String.fromCharCode(i)}};function hW(n,e){var t;if(Bx)return Bx.encode(n);for(var i=n.length,s=new gn(n.length+(n.length>>1)),a=0,r=function(c){s[a++]=c},t=0;ts.length){var o=new gn(a+8+(i-t<<1));o.set(s),s=o}var l=n.charCodeAt(t);l<128||e?r(l):l<2048?(r(192|l>>6),r(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|n.charCodeAt(++t)&1023,r(240|l>>18),r(128|l>>12&63),r(128|l>>6&63),r(128|l&63)):(r(224|l>>12),r(128|l>>6&63),r(128|l&63))}return lf(s,0,a)}function n1(n,e){var t;if(T_)return T_.decode(n);var i=dW(n),s=i.s,t=i.r;return t.length&&os(8),s}const M_=1,E_="cfg",zx="cfgDebug";function fW(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"")}function pW(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a!Ai(e)||!PW(e.id)?null:{id:e.id,placement:s1(e.placement)}).filter(e=>e!==null):[]}function AW(n){return Array.isArray(n)?n.map(e=>!Ai(e)||typeof e.id!="string"||!IW(e.kind)?null:{id:e.id,kind:e.kind,placement:s1(e.placement),playerId:a1(e.playerId)??null,team:e.team==="orange"?"orange":e.team==="blue"?"blue":null,entries:RW(e.entries)}).filter(e=>e!==null):[]}function RW(n){return Array.isArray(n)?n.map(e=>!Ai(e)||typeof e.statId!="string"?null:{statId:e.statId,targetId:typeof e.targetId=="string"?e.targetId:void 0}).filter(e=>e!==null):[]}function s1(n){const e=Ai(n)?n:{},t=Ai(e.viewport)?e.viewport:{};return{x:Rn(e.x)??8,y:Rn(e.y)??8,viewport:{width:sh(t.width)??1,height:sh(t.height)??1},zIndex:Rn(e.zIndex),visible:Zn(e.visible)??!0}}function PW(n){return n==="camera"||n==="scoreboard"||n==="playback"||n==="recording"||n==="mechanics"||n==="event-playlist"||n==="mechanics-review"||n==="replay-loading"||n==="boost-pickups"||n==="touch-controls"||n==="touch-legend"||n==="shot-visualization"||n==="missed-events"}function IW(n){return n==="player"||n==="team"||n==="all-players"||n==="all-teams"||n==="kickoff-overview"||n==="goals-overview"||n==="ad-hoc"}function Ai(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Rn(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function sh(n){const e=Rn(n);return e!==void 0&&e>0?e:void 0}function Zn(n){return typeof n=="boolean"?n:void 0}function a1(n){return n===null?null:typeof n=="string"?n:void 0}function ll(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function Hx(n,e,t){return Math.min(t,Math.max(e,n))}const LW=["camera","scoreboard","playback","recording","mechanics","event-playlist","mechanics-review","replay-loading","boost-pickups","touch-controls","touch-legend","shot-visualization","missed-events"];class DW{constructor(e){this.options=e}nextZIndex=30;reset(){this.nextZIndex=30}bringToFront(e){e.style.zIndex=`${this.nextZIndex++}`}show(e){const t=this.mustWindow(e);t.hidden=!1,this.bringToFront(t),this.options.requestConfigSync()}toggle(e){const t=this.mustWindow(e);t.hidden=!t.hidden,t.hidden||this.bringToFront(t),this.options.requestConfigSync()}hide(e){const t=this.mustWindow(e);t.hidden=!0,this.options.requestConfigSync()}readPlacement(e){const t=Number.parseInt(e.style.zIndex,10);return{x:this.readCoordinate(e,"--window-x"),y:this.readCoordinate(e,"--window-y"),viewport:Vx(),zIndex:Number.isFinite(t)?t:void 0,visible:!e.hidden}}applyPlacement(e,t){const i=bW(t,Vx());e.style.setProperty("--window-x",`${i.x}px`),e.style.setProperty("--window-y",`${i.y}px`),e.hidden=!t.visible,t.zIndex!==void 0&&(e.style.zIndex=`${t.zIndex}`,this.nextZIndex=Math.max(this.nextZIndex,t.zIndex+1))}getSingletonConfigs(){const e=[],t=this.options.getRoot();for(const i of LW){const s=t.querySelector(`[data-window-id="${i}"]`);s&&e.push({id:i,placement:this.readPlacement(s)})}return e}applySingletonConfigs(e){const t=this.options.getRoot();for(const i of e){const s=t.querySelector(`[data-window-id="${i.id}"]`);s&&this.applyPlacement(s,i.placement)}}installDragging(e,t){e.addEventListener("pointerdown",i=>{if(!(i.target instanceof HTMLElement)||kW(i.target))return;const s=i.target.closest("[data-window-id]");if(!s||s.hidden)return;this.bringToFront(s);const a=i.clientX,r=i.clientY,o=s.getBoundingClientRect(),l=i.pointerId;s.setPointerCapture(l),i.preventDefault();const c=d=>{const h=Math.max(8,Math.min(window.innerWidth-120,o.left+d.clientX-a)),f=Math.max(8,Math.min(window.innerHeight-100,o.top+d.clientY-r));s.style.setProperty("--window-x",`${h}px`),s.style.setProperty("--window-y",`${f}px`)},u=()=>{s.releasePointerCapture(l),s.removeEventListener("pointermove",c),s.removeEventListener("pointerup",u),s.removeEventListener("pointercancel",u),this.options.requestConfigSync()};s.addEventListener("pointermove",c),s.addEventListener("pointerup",u),s.addEventListener("pointercancel",u)},{signal:t})}mustWindow(e){const t=this.options.getRoot().querySelector(`[data-window-id="${e}"]`);if(!t)throw new Error(`Missing window for id: ${e}`);return t}readCoordinate(e,t){const i=e.style.getPropertyValue(t).trim(),s=getComputedStyle(e).getPropertyValue(t).trim(),a=i||s,r=Number.parseFloat(a);if(Number.isFinite(r))return r;const o=e.getBoundingClientRect();return t==="--window-y"?o.top:o.left}}function Vx(){return{width:Math.max(1,window.innerWidth),height:Math.max(1,window.innerHeight)}}function kW(n){return n instanceof Element&&!!n.closest("button, input, select, textarea, option, label, a, [data-no-drag]")}function OW(n){return new DW(n)}class FW{constructor(e){this.options=e}activeSourceIds=null;autoFollow=!0;lastActiveKey=null;activeItem=null;renderedItems=[];reset(){this.activeSourceIds=null,this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[]}render(){this.options.body.replaceChildren(),this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[];const e=this.options.getSources();if(e.length===0){const _=document.createElement("p");_.className="stat-window-empty",_.textContent=this.options.getReplayPlayer()?"No events loaded.":"Load a replay to see events.",this.options.body.append(_);return}const t=v_(e,this.activeSourceIds),i=W$({sources:e,activeSourceIds:this.activeSourceIds,replayPlayers:this.options.getReplayPlayer()?.replay.players??[]}),s=document.createElement("div");s.className="event-playlist-toolbar";const a=document.createElement("details");a.className="event-playlist-filter",a.dataset.noDrag="true";const r=document.createElement("summary");r.textContent=`Filters ${t.size}/${e.length}`,a.append(r);const o=document.createElement("div");o.className="event-playlist-filter-panel";const l=document.createElement("div");l.className="event-playlist-filter-actions";const c=document.createElement("button");c.type="button",c.textContent="All",c.addEventListener("click",()=>{this.activeSourceIds=new Set(e.map(m=>m.id)),this.lastActiveKey=null,this.render();const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_)});const u=document.createElement("button");u.type="button",u.textContent="None",u.addEventListener("click",()=>{this.activeSourceIds=new Set,this.lastActiveKey=null,this.render()}),l.append(c,u),o.append(l);const d=new Map;for(const _ of e){const m=d.get(_.group)??[];m.push(_),d.set(_.group,m)}for(const[_,m]of d){const v=document.createElement("section");v.className="event-playlist-filter-group";const y=document.createElement("h3");y.textContent=_,v.append(y);for(const b of m){const T=document.createElement("label");T.className="toggle event-playlist-filter-option";const x=document.createElement("input");x.type="checkbox",x.checked=t.has(b.id),x.addEventListener("change",()=>{this.setSourceSelection(e,C=>{x.checked?C.add(b.id):C.delete(b.id)})});const M=document.createElement("span");M.textContent=`${b.label} (${b.events.length})`,T.append(x,M),v.append(T)}o.append(v)}a.append(o);const h=document.createElement("label");h.className="toggle event-playlist-follow";const f=document.createElement("input");f.type="checkbox",f.checked=this.autoFollow,f.addEventListener("change",()=>{this.autoFollow=f.checked;const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_,{forceScroll:!0})});const p=document.createElement("span");p.textContent="Auto-follow",h.append(f,p),s.append(a,h);const g=document.createElement("div");if(g.className="event-playlist-list",g.dataset.noDrag="true",i.length===0){const _=document.createElement("p");_.className="stat-window-empty",t.size===0?_.textContent="No event types selected.":_.textContent="No events in selected event types.",g.append(_)}else for(const _ of i){const m=document.createElement("button");m.type="button",m.className="event-playlist-item",m.dataset.eventKey=_.key,m.dataset.eventTime=`${_.event.time}`,m.style.setProperty("--event-color",_.color),Number.isFinite(_.event.time)&&this.renderedItems.push({key:_.key,time:_.event.time,element:m}),m.addEventListener("click",()=>{this.options.cueTimelineEvent(_.event)});const v=document.createElement("span");v.className="event-playlist-time",v.textContent=this.options.formatTime(_.event.time);const y=document.createElement("span");y.className="event-playlist-main";const b=document.createElement("strong");b.textContent=_.event.label??_.sourceLabel;const T=document.createElement("span");T.textContent=[_.event.playerName??null,_.event.frame!==void 0?`frame ${_.event.frame}`:null,_.sourceLabel].filter(x=>!!x).join(" · "),y.append(b,T),m.append(v,y),g.append(m)}this.options.body.append(s,g)}syncTimeline(e,t={}){if(!this.options.body.querySelector(".event-playlist-list"))return;const s=this.getActiveItem(e.currentTime),a=s?.dataset.eventKey??null;a===this.lastActiveKey&&!t.forceScroll||(this.activeItem?.isConnected?this.activeItem.dataset.active="false":this.activeItem&&(this.activeItem=null),s?(s.dataset.active="true",this.activeItem=s,(this.autoFollow||t.forceScroll)&&s.scrollIntoView({block:"nearest"})):this.activeItem=null,this.lastActiveKey=a)}setSourceSelection(e,t){const i=v_(e,this.activeSourceIds);t(i),this.activeSourceIds=i,this.lastActiveKey=null,this.render();const s=this.options.getReplayPlayer()?.getState();s&&this.syncTimeline(s)}getActiveItem(e){const t=this.renderedItems;if(t.length===0)return null;let i=0,s=t.length-1;for(;ie.getConfig||e.applyConfig).map(e=>{const t={id:e.id};return e.id==="boost"&&(t.aliases=["boost-pickup-animation"]),e.getConfig&&(t.getConfig=()=>e.getConfig?.()),e.applyConfig&&(t.applyConfig=i=>e.applyConfig?.(i)),t})}function KW(n){return HW(o1(n))}function qW({replayPlayer:n,playbackRate:e,skipPostGoalTransitions:t,skipKickoffs:i}){const s=n?.getState();return{currentTime:s?.currentTime,playing:s?.playing,rate:s?.speed??cf(Number(e?.value??1)),skipPostGoalTransitions:n?s?.skipPostGoalTransitionsEnabled:t.checked,skipKickoffs:n?s?.skipKickoffsEnabled:i.checked}}function YW({replayPlayer:n,cameraControlsController:e}){const t=n?.getState(),i=t?sE(t):e?.ballCamMode;return{mode:t?.cameraViewMode,freePreset:e?.freeCameraPreset??null,attachedPlayerId:t?.attachedPlayerId,ballCam:i===void 0?void 0:i==="on",useReplayBallCam:i===void 0?void 0:i==="player",usePlayerCameraSettings:t?.customCameraSettings===null,autoPossession:e?.autoPossessionEnabled,customSettings:t?.customCameraSettings,nameplateLiftUu:e?.nameplateLiftUu}}function jW({playback:n,camera:e,activeTimelineEventSourceIds:t,activeTimelineRangeModuleIds:i,activeMechanicTimelineKinds:s,activeRenderEffectModuleIds:a,initialConfig:r,replayPlayer:o,boostPadOverlayEnabled:l,recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}){return{version:M_,playback:n,camera:e,overlays:{timelineEvents:[...t],timelineRanges:[...i],mechanics:[...s],renderEffects:[...a],...r?.overlays.pluginRenderEffects!==void 0?{pluginRenderEffects:[...r.overlays.pluginRenderEffects]}:{},...r?.overlays.pluginHudOverlay!==void 0?{pluginHudOverlay:r.overlays.pluginHudOverlay}:{},followedPlayerHud:!1,boostPads:l,boostPickupAnimation:o?.getState().boostPickupAnimationEnabled??!1,hitboxWireframes:o?.getState().hitboxWireframesEnabled??!1,hitboxOnlyMode:o?.getState().hitboxOnlyModeEnabled??!1},recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}}function ZW(n,e,t){return{currentTime:n.currentTime,playing:n.playing,speed:n.rate,customCameraSettings:r1(e),cameraViewMode:e.mode,attachedPlayerId:e.attachedPlayerId,...Vb(e)==="player"?{useReplayBallCam:!0}:{ballCamEnabled:Vb(e)==="on"},boostPickupAnimationEnabled:t.overlays.boostPickupAnimation,hitboxWireframesEnabled:t.overlays.hitboxWireframes,hitboxOnlyModeEnabled:t.overlays.hitboxOnlyMode,skipPostGoalTransitionsEnabled:n.skipPostGoalTransitions,skipKickoffsEnabled:n.skipKickoffs}}function JW(n,e,t){console.groupCollapsed("[subtr-actor] stats player cfg load"),console.log("location.href",window.location.href),console.log("location.search",n.search||"(empty)"),console.log("location.hash",n.hash||"(empty)"),console.table([...n.searchParams.map(([i,s])=>({source:"search",name:i,value:s})),...n.hashParams.map(([i,s])=>({source:"hash",name:i,value:s}))]),console.log("cfg selected source",n.selectedSource??"(none)"),console.log("cfg selected raw text",n.selectedValue??"(none)"),console.log("cfg selected raw length",n.selectedValue?.length??0),console.log("cfg search values",n.searchValues),console.log("cfg hash values",n.hashValues),n.hashValues.length>0&&n.searchValues.length>0&&console.warn("Both hash and search contain cfg; hash cfg is used."),e&&(console.log("cfg normalized JSON",JSON.stringify(e,null,2)),console.log("cfg normalized object",e)),t&&console.error("cfg decode/apply error",t),console.groupEnd()}function Gx(n,e){const{style:t}=n.renderer.domElement;t.visibility=e?"hidden":"",t.pointerEvents=e?"none":""}function $x(n,e={}){const t=e.destroyPlayer??!0,i=e.clearPlayerPluginHandles??!0,s=n.getUnsubscribe();s&&(s(),n.setUnsubscribe(null)),n.teardownActiveModules(),t&&(n.getReplayPlayer()?.destroy(),n.setReplayPlayer(null)),i&&(n.setCanvasRecorder(null),n.setTimelineOverlay(null)),n.setLoadedReplayName(null),n.setStatsTimeline(null),n.setStatsFrameLookup(null),n.setStatRegistry(Jl()),n.clearTimelineEventSources(),n.clearTimelineRangeSources(),n.clearStandalonePlugins(),n.clearRenderCaches(),n.resetEventPlaylistWindow(),n.renderModuleSummary(),n.renderScoreboard(),n.renderTimelineEventCount(),n.renderMechanicsTimelineControls(),n.renderEventPlaylistWindow(),n.renderModuleSettings(),n.syncRecordingWindow()}async function QW(n,e,t){const{elements:i}=t;let s=null;i.statusReadout.textContent=n.preparingStatus,i.fileInput.disabled=!0,t.getReplayLoadModal()?.show(n.name,n.preparingStatus),t.setTransportEnabled(!1),t.getCameraControlsController()?.syncAvailability(),i.emptyState.hidden=t.getReplayPlayer()!==null,t.getReplayPlayer()?.pause();try{i.statusReadout.textContent="Parsing replay...",t.getReplayLoadModal()?.show(n.name,"Parsing replay...");const a=await e,{replay:r}=a,o=t.getReplayPlayer();if(o){$x(t,{destroyPlayer:!1,clearPlayerPluginHandles:!1});const h=new xw(a.raw);await o.replaceReplay(h,r,{preservePlayback:!1}),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(Jl(null)),t.setReplayPlayer(o),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(o.subscribe(t.renderSnapshot));const f=t.getInitialConfig();if(f){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(f)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(p=>p.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(o.getState()),t.renderSnapshot(o.getState()),t.renderStatsWindows(o.getState().frameIndex),t.renderScoreboard(o.getState().frameIndex),t.syncEventPlaylistTimeline(o.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide();return}const l=QN({replayEventsLabel:"Replay",replayEvents:h=>t.withTimelineEventSeekTimes(t.getReplayTimelineEvents(h.replay))}),c=kN({onStatusChange:t.syncRecordingWindow});t.setCanvasRecorder(c);const u=t.getInitialConfig(),d=e3(i.viewport,a,{initialPlaybackRate:u?.playback.rate,initialCustomCameraSettings:r1(u?.camera),initialAttachedPlayerId:u?.camera.attachedPlayerId??null,initialCameraViewMode:u?.camera.mode,initialBoostPickupAnimationEnabled:u?.overlays.boostPickupAnimation??!1,initialHitboxWireframesEnabled:u?.overlays.hitboxWireframes??i.hitboxWireframes.checked,initialHitboxOnlyModeEnabled:u?.overlays.hitboxOnlyMode??i.hitboxOnlyMode.checked,initialSkipPostGoalTransitionsEnabled:i.skipPostGoalTransitions.checked,initialSkipKickoffsEnabled:i.skipKickoffs.checked,plugins:[cN({onSample:({renderFps:h,replayFps:f})=>{const p=document.getElementById("render-fps-readout"),g=document.getElementById("replay-fps-readout");p&&(p.textContent=`${h.toFixed(0)} fps`),g&&(g.textContent=`${f.toFixed(0)} fps`)}}),bu(u3({floatingLiftUu:()=>t.getCameraControlsController()?.nameplateLiftUu})),bu(RN({includePickup:t.includeBoostPickupAnimationPickup})),bu(c),bu(l)]});if(s=d,Gx(d,!0),await d.ready,$x(t),s=null,Gx(d,!1),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(Jl(null)),t.setTimelineOverlay(l),t.setReplayPlayer(d),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(d.subscribe(t.renderSnapshot)),u){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(u)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(h=>h.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(d.getState()),t.renderSnapshot(d.getState()),t.renderStatsWindows(d.getState().frameIndex),t.renderScoreboard(d.getState().frameIndex),t.syncEventPlaylistTimeline(d.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide()}catch(a){throw t.getReplayLoadModal()?.hide(),s?.destroy(),t.getReplayPlayer()||(i.emptyState.hidden=!1,t.setCanvasRecorder(null)),t.syncRecordingWindow(),a}finally{i.fileInput.disabled=!1}}function e8(n){if(n<=0)return"--";const e=["B","KB","MB","GB"];let t=n,i=0;for(;t>=1024&&i=10?1:2;return`${t.toFixed(s)} ${e[i]}`}function t8(n){if(!n)return"No replay";if(n.error)return n.error;switch(n.state){case"idle":return"Idle";case"recording":return"Recording";case"stopping":return"Stopping";case"ready":return"Ready";case"error":return"Error"}}function n8({fpsValue:n,playbackRateValue:e}){const t=Number(n),i=Number(e);return{fps:Number.isFinite(t)?Math.max(1,Math.min(120,Math.trunc(t))):60,playbackRate:Number.isFinite(i)?Math.max(.1,i):1}}function i8(n,e=new Date){const i=(n?.replace(/\.replay$/i,"")||"replay").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,""),s=e.toISOString().replace(/[:.]/g,"-");return`${i||"replay"}-${s}.webm`}function s8(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.append(i),i.click(),i.remove(),window.setTimeout(()=>URL.revokeObjectURL(t),0)}class a8{constructor(e){this.options=e}getConfigSnapshot(){const{elements:e}=this.options;return{fps:Number(e.fps.value),playbackRate:Number(e.playbackRate.value)}}applyConfig(e){const{elements:t}=this.options;e.fps!==void 0&&(t.fps.value=`${e.fps}`),e.playbackRate!==void 0&&(t.playbackRate.value=`${e.playbackRate}`)}sync(e=this.options.getCanvasRecorder()?.getStatus()??null){const{elements:t}=this.options,i=this.options.getCanvasRecorder()!==null&&this.options.getReplayPlayer()!==null,s=e?.state??"idle",a=s==="recording"||s==="stopping",r=(this.options.getCanvasRecorder()?.getRecording()??null)!==null;t.status.textContent=t8(e),t.elapsed.textContent=`${(e?.elapsedSeconds??0).toFixed(1)}s`,t.size.textContent=e8(e?.sizeBytes??0),t.type.textContent=e?.mimeType||"WebM",t.start.disabled=!i||a,t.fullReplay.disabled=!i||a,t.stop.disabled=!i||!a,t.download.disabled=!r||a,t.clear.disabled=!r||a,t.fps.disabled=a,t.playbackRate.disabled=a}installEventListeners(e){const{elements:t}=this.options;t.start.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(i)try{const{fps:s}=this.getRecordingOptions();i.start({fps:s}),this.sync()}catch(s){console.error("Failed to start recording:",s),this.options.setStatus(s instanceof Error?s.message:"Failed to start recording"),this.sync(i.getStatus())}},{signal:e}),t.fullReplay.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(!i)return;const{fps:s,playbackRate:a}=this.getRecordingOptions();i.recordFullReplay({fps:s,playbackRate:a,restorePlaybackState:!0}).catch(r=>{console.error("Failed to record replay:",r),this.options.setStatus(r instanceof Error?r.message:"Failed to record replay"),this.sync(this.options.getCanvasRecorder()?.getStatus()??null)}),this.sync()},{signal:e}),t.stop.addEventListener("click",()=>{this.options.getCanvasRecorder()?.stop().catch(i=>{console.error("Failed to stop recording:",i),this.options.setStatus(i instanceof Error?i.message:"Failed to stop recording")}),this.sync()},{signal:e}),t.download.addEventListener("click",()=>{const i=this.options.getCanvasRecorder()?.getRecording();i&&s8(i,i8(this.options.getLoadedReplayName()))},{signal:e}),t.clear.addEventListener("click",()=>{try{this.options.getCanvasRecorder()?.clear(),this.sync()}catch(i){console.error("Failed to clear recording:",i)}},{signal:e}),t.fps.addEventListener("change",this.options.requestConfigSync,{signal:e}),t.playbackRate.addEventListener("change",this.options.requestConfigSync,{signal:e})}getRecordingOptions(){const{elements:e}=this.options;return n8({fpsValue:e.fps.value,playbackRateValue:e.playbackRate.value})}}function r8(n){return new a8(n)}class o8{constructor(e){this.options=e}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0){const{body:t}=this.options;t.replaceChildren();const i=this.options.getStatsFrameLookup(),s=i?zt(i,e):null,a=this.options.getReplayPlayer()?.replay??null;if(!s||!a){const o=document.createElement("p");o.className="scoreboard-empty",o.textContent="Load a replay to show the scoreboard.",t.append(o);return}const r=document.createElement("div");r.className="scoreboard-scoreline",r.append(Wx(s.team_zero?.core.goals,!0),c8(),Wx(s.team_one?.core.goals,!1)),t.append(r)}}function l8(n){return typeof n=="number"&&Number.isFinite(n)?`${Math.round(n)}`:"--"}function c8(){const n=document.createElement("span");return n.className="scoreboard-divider",n.textContent="-",n}function Wx(n,e){const t=document.createElement("strong");return t.className=`scoreboard-goal-value ${ta(e)}`,t.textContent=l8(n),t}function u8(n){return new o8(n)}class d8{constructor(e){this.options=e}setTransportEnabled(e,t){const{elements:i}=this.options;i.togglePlayback.disabled=!e,i.previousFrame.disabled=!e,i.nextFrame.disabled=!e,i.playbackRate.disabled=!e,i.skipPostGoalTransitions.disabled=!e,i.skipKickoffs.disabled=!e,i.hitboxWireframes.disabled=!e,i.hitboxOnlyMode.disabled=!e,this.options.getCameraControlsController()?.setTransportEnabled(e,t)}renderSnapshot(e){const{elements:t}=this.options;t.timeReadout.textContent=`${e.currentTime.toFixed(2)}s`,t.frameReadout.textContent=`${e.frameIndex}`,t.durationReadout.textContent=`${e.duration.toFixed(2)}s`,t.playbackStatusReadout.textContent=e.playing?"Playing":"Paused",t.togglePlayback.textContent=e.playing?"Pause":"Play";const i=Math.max(0,this.options.getFrameCount()-1);t.previousFrame.disabled=e.frameIndex<=0,t.nextFrame.disabled=e.frameIndex>=i;const s=cf(e.speed);t.playbackRate.value=`${s}`,t.playbackRateReadout.textContent=qg(s),this.options.getCameraControlsController()?.syncState(e),t.skipPostGoalTransitions.checked=e.skipPostGoalTransitionsEnabled,t.skipKickoffs.checked=e.skipKickoffsEnabled,t.hitboxWireframes.checked=e.hitboxWireframesEnabled,t.hitboxOnlyMode.checked=e.hitboxOnlyModeEnabled,t.emptyState.hidden=!0}}function h8(n){return new d8(n)}function f8({elements:n,signal:e,setLauncherOpen:t,openReplayFilePicker:i,getElementWindowId:s,toggleWindow:a,hideWindow:r,createStatsWindow:o,loadReplayFile:l,togglePlayback:c,stepFrames:u,setPlaybackRate:d,setSkipPostGoalTransitionsEnabled:h,setSkipKickoffsEnabled:f,setHitboxWireframesEnabled:p,setHitboxOnlyModeEnabled:g}){n.launcherToggle.addEventListener("click",()=>{t(n.launcherMenu.hidden)},{signal:e}),n.root.addEventListener("click",m=>{m.target instanceof Element&&(m.target.closest(".top-chrome")||t(!1))},{signal:e}),n.loadReplayAction.addEventListener("click",i,{signal:e}),n.emptyLoadReplay.addEventListener("click",i,{signal:e}),n.root.querySelectorAll("[data-window-toggle]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowToggle;v&&(a(v),t(!1))},{signal:e})}),n.root.querySelectorAll("[data-window-hide]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowHide??s(m);v&&r(v)},{signal:e})}),n.root.querySelectorAll("[data-create-stats-window]").forEach(m=>{m.addEventListener("click",()=>{o(m.dataset.createStatsWindow)},{signal:e})}),n.fileInput.addEventListener("change",()=>{const m=n.fileInput.files?.[0];m&&l(m)},{signal:e}),n.togglePlayback.addEventListener("click",c,{signal:e}),n.previousFrame.addEventListener("click",()=>u(-1),{signal:e}),n.nextFrame.addEventListener("click",()=>u(1),{signal:e});const _=()=>{const m=cf(Number(n.playbackRate.value));n.playbackRate.value=`${m}`,n.playbackRateReadout.textContent=qg(m),d(m)};n.playbackRate.addEventListener("input",_,{signal:e}),n.playbackRate.addEventListener("change",_,{signal:e}),n.skipPostGoalTransitions.addEventListener("change",()=>{h(n.skipPostGoalTransitions.checked)},{signal:e}),n.skipKickoffs.addEventListener("change",()=>{f(n.skipKickoffs.checked)},{signal:e}),n.hitboxWireframes.addEventListener("change",()=>{p(n.hitboxWireframes.checked)},{signal:e}),n.hitboxOnlyMode.addEventListener("change",()=>{g(n.hitboxOnlyMode.checked)},{signal:e})}const p8=3500;function m8(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function _8(n){const{getReplayPlayer:e,signal:t}=n,i={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},s=()=>{i.forward=!1,i.backward=!1,i.left=!1,i.right=!1,i.up=!1,i.down=!1},a=(g,_)=>{switch(g){case"KeyW":return i.forward=_,!0;case"KeyS":return i.backward=_,!0;case"KeyA":return i.left=_,!0;case"KeyD":return i.right=_,!0;case"Space":return i.up=_,!0;case"ShiftLeft":case"ShiftRight":return i.down=_,!0;default:return!1}},r=g=>{g.ctrlKey||g.metaKey||g.altKey||m8()||a(g.code,!0)&&g.preventDefault()},o=g=>{a(g.code,!1)};window.addEventListener("keydown",r,{signal:t}),window.addEventListener("keyup",o,{signal:t}),window.addEventListener("blur",s,{signal:t});const l=new S,c=new S,u=new S,d=new S(0,1,0);let h=null,f=0;const p=g=>{f=requestAnimationFrame(p);const _=h===null?0:Math.min(.1,(g-h)/1e3);h=g;const m=(i.forward?1:0)-(i.backward?1:0),v=(i.right?1:0)-(i.left?1:0),y=(i.up?1:0)-(i.down?1:0);if(_===0||m===0&&v===0&&y===0)return;const b=e();if(!b||b.getState().cameraViewMode!=="free")return;const T=b.camera,x=b.controls;T.getWorldDirection(l),c.set(1,0,0).applyQuaternion(T.quaternion),u.set(0,0,0).addScaledVector(l,m).addScaledVector(c,v).addScaledVector(d,y),u.lengthSq()!==0&&(u.normalize().multiplyScalar(p8*_),T.position.add(u),x.target.add(u))};f=requestAnimationFrame(p),t.addEventListener("abort",()=>{cancelAnimationFrame(f)})}function g8(n,e){const t=new URLSearchParams(n),s=(t.get("replayId")??t.get("replay-id")??e??"").trim();return s.length>0?s:null}function y8(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function v8(n){if(!n.replayId)return null;const e={replay_id:n.replayId,reviewed_mechanic:n.mechanic,reviewed_event_frame:n.frame,reviewed_event_time:n.time,confidence:n.confidence,status:"confirmed"};return n.subjectKind&&n.subjectId&&(e.reviewed_subject_kind=n.subjectKind,e.reviewed_subject_id=n.subjectId),n.startFrame!==null&&(e.reviewed_start_frame=n.startFrame),n.endFrame!==null&&(e.reviewed_end_frame=n.endFrame),n.notes&&n.notes.trim()&&(e.notes=n.notes.trim()),Object.keys(n.context).length>0&&(e.context=n.context),e}function b8(n,e){const t=n.getState(),i=Math.max(0,Math.round(t.frameIndex??0)),s=t.currentTime??0,a=t.attachedPlayerId??null,r=a?n.replay.players.find(o=>o.id===a)?.name??null:null;return{localId:e.localId,mechanic:e.mechanic,frame:i,time:s,subjectKind:a?"player":null,subjectId:a,playerName:r,startFrame:null,endFrame:null,notes:e.notes?.trim()?e.notes.trim():null,confidence:1,replayId:e.replayId,context:{capturedFrom:"stat-evaluation-player",attachedPlayerId:a,playerName:r,durationSeconds:n.replay.duration??null}}}async function x8(n,e="/api/v1/events/reviews"){const t=v8(n);if(!t)return{record:n,ok:!1,message:"No replay id — cannot upload (export JSON instead)."};try{const i=await fetch(e,{method:"POST",headers:{"content-type":"application/json",...y8()},credentials:"same-origin",body:JSON.stringify(t)});if(!i.ok){let s=`${i.status}${i.statusText?` ${i.statusText}`:""}`;try{const a=await i.json();typeof a.error=="string"&&(s=a.error)}catch{}return{record:n,ok:!1,message:s}}return{record:n,ok:!0,message:"uploaded"}}catch(i){return{record:n,ok:!1,message:i instanceof Error?i.message:String(i)}}}const w8=["flick","whiff","double_tap","ceiling_shot","wall_aerial","flip_reset","one_timer","speed_flip","half_flip","wavedash","demo"],S8="m";function T8(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function M8(n,e){const t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(i)}class E8{constructor(e){this.options=e}records=[];localIdSeq=0;installEventListeners(e){const{elements:t}=this.options;for(const i of w8){const s=document.createElement("option");s.value=i,s.textContent=i.replaceAll("_"," "),t.mechanic.appendChild(s)}t.capture.addEventListener("click",()=>this.capture(),{signal:e}),t.export.addEventListener("click",()=>this.exportJson(),{signal:e}),t.upload.addEventListener("click",()=>{this.uploadAll()},{signal:e}),t.clear.addEventListener("click",()=>{this.records.length=0,this.render(),this.setStatus("Cleared.")},{signal:e}),window.addEventListener("keydown",i=>{i.key.toLowerCase()!==S8||i.repeat||i.metaKey||i.ctrlKey||i.altKey||T8()||(i.preventDefault(),this.capture())},{signal:e}),this.render()}capture(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}this.localIdSeq+=1;const t=b8(e,{mechanic:this.options.elements.mechanic.value||"flick",replayId:this.resolveReplayId(),localId:`missed-${this.localIdSeq}`});this.records.push(t),this.options.showWindow(),this.render(),this.setStatus(`Captured ${t.mechanic} @ ${t.time.toFixed(2)}s`+(t.replayId?".":" (no replay id — export only)."))}exportJson(){if(this.records.length===0){this.setStatus("Nothing to export.");return}M8("missed-events.json",{capturedFrom:"stat-evaluation-player",replayId:this.resolveReplayId(),missedEvents:this.records}),this.setStatus(`Exported ${this.records.length}.`)}async uploadAll(){if(this.records.length===0){this.setStatus("Nothing to upload.");return}let e=0;const t=[];for(const i of[...this.records]){const s=await x8(i);if(s.ok){e+=1;const a=this.records.findIndex(r=>r.localId===i.localId);a>=0&&this.records.splice(a,1)}else t.push(`${i.mechanic}@${i.time.toFixed(1)}s: ${s.message}`)}this.render(),this.setStatus(t.length===0?`Uploaded ${e}.`:`Uploaded ${e}, ${t.length} failed — ${t[0]}`)}render(){const{list:e}=this.options.elements;e.replaceChildren();for(const t of this.records){const i=document.createElement("li"),s=t.playerName??t.subjectId??"no subject",a=document.createElement("span");a.className="missed-event-row",a.textContent=`${t.mechanic} @ ${t.time.toFixed(2)}s · f${t.frame} · ${s}`+(t.replayId?"":" · no replay id");const r=document.createElement("button");r.type="button",r.textContent="✕",r.title="Remove",r.addEventListener("click",()=>{const o=this.records.findIndex(l=>l.localId===t.localId);o>=0&&(this.records.splice(o,1),this.render())}),i.append(a,r),e.appendChild(i)}}setStatus(e){this.options.elements.status.textContent=e}resolveReplayId(){return g8(window.location.search,this.options.getReplayId?.()??null)}}function C8(n){return new E8(n)}class A8{constructor(e){this.options=e}activeModules=[];activeTimelineEventSourceIds=new Set;activeTimelineRangeModuleIds=new Set;activeMechanicTimelineKinds=new Set;activeRenderEffectModuleIds=new Set;removeRenderHook=null;timelineSourceRemovers=new Map;timelineRangeSourceRemovers=new Map;getActiveModules(){return this.activeModules}getActiveTimelineEventSourceIds(){return this.activeTimelineEventSourceIds}getActiveTimelineRangeModuleIds(){return this.activeTimelineRangeModuleIds}getActiveMechanicTimelineKinds(){return this.activeMechanicTimelineKinds}getActiveRenderEffectModuleIds(){return this.activeRenderEffectModuleIds}getActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}getBoostPadOverlayEnabled(){return!0}getTimelineEventSourceIds(){return[...this.activeTimelineEventSourceIds]}getTimelineRangeModuleIds(){return[...this.activeTimelineRangeModuleIds]}getMechanicTimelineKinds(){return[...this.activeMechanicTimelineKinds]}getRenderEffectModuleIds(){return[...this.activeRenderEffectModuleIds]}applyOverlayConfig({timelineEvents:e,timelineRanges:t,mechanics:i,renderEffects:s,boostPads:a}){this.activeTimelineEventSourceIds=new Set(e),this.activeTimelineRangeModuleIds=new Set(t),this.activeMechanicTimelineKinds=new Set(i),this.activeRenderEffectModuleIds=new Set(s)}reset(){this.teardownActiveModules(),this.clearStandalonePlugins(),this.activeModules=[],this.activeTimelineEventSourceIds=new Set,this.activeTimelineRangeModuleIds=new Set,this.activeMechanicTimelineKinds=new Set,this.activeRenderEffectModuleIds=new Set,this.removeRenderHook=null}setupActiveModules(){this.teardownActiveModules();const e=this.options.getContext();if(!e)return;const t=this.getActiveModuleIds();this.activeModules=this.options.modules.filter(i=>t.has(i.id)),this.options.boostPickupFilters.setup(e);for(const i of this.activeModules)i.setup(e);this.removeRenderHook=e.player.onBeforeRender(i=>{for(const s of this.activeModules)this.activeRenderEffectModuleIds.has(s.id)&&s.onBeforeRender(i)}),this.syncTimelineEvents(),this.syncTimelineRanges()}teardownActiveModules(){this.removeRenderHook?.(),this.removeRenderHook=null,this.clearTimelineEventSources(),this.clearTimelineRangeSources();for(const e of this.activeModules)e.teardown();this.activeModules=[]}toggleCapability(e,t,i){const s=this.getMutableActiveCapabilityIds(t);i?s.add(e):s.delete(e),this.setupActiveModules(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderStatsWindows(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}setMechanicTimelineKind(e,t){t?this.activeMechanicTimelineKinds.add(e):this.activeMechanicTimelineKinds.delete(e),this.options.requestConfigSync()}activateMechanicTimelineKind(e){this.activeMechanicTimelineKinds.add(e),this.syncTimelineEvents(),this.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}clearTimelineEventSources(){for(const e of this.timelineSourceRemovers.values())e();this.timelineSourceRemovers.clear()}clearTimelineRangeSources(){for(const e of this.timelineRangeSourceRemovers.values())e();this.timelineRangeSourceRemovers.clear()}clearStandalonePlugins(){}syncBoostPadOverlayPlugin(){}toggleBoostPadOverlay(){this.options.renderModuleSummary(),this.options.requestConfigSync()}syncTimelineEvents(){this.clearTimelineEventSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.options.getEventTimelineSources(e)){if(!i.active)continue;const s=i.buildTimelineEvents();s.length!==0&&this.timelineSourceRemovers.set(i.timelineKey,t.addEventSource(this.options.withTimelineEventSeekTimes(s),{id:i.timelineId,label:i.label}))}t.refreshEvents()}}syncTimelineRanges(){this.clearTimelineRangeSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.activeModules)!this.activeTimelineRangeModuleIds.has(i.id)||!i.getTimelineRanges||this.timelineRangeSourceRemovers.set(i.id,t.addRangeSource(()=>i.getTimelineRanges?.(e)??[]));for(const i of this.options.getEventTimelineSources(e)){if(!i.active||!i.buildTimelineRanges)continue;const s=i.buildTimelineRanges();s.length!==0&&this.timelineRangeSourceRemovers.set(i.timelineKey,t.addRangeSource(s))}t.refreshRanges()}}getActiveModuleIds(){return new Set([...this.activeTimelineEventSourceIds,...this.activeTimelineRangeModuleIds,...this.activeRenderEffectModuleIds])}getMutableActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}}function R8(n){return new A8(n)}function Jn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Xx(n){return Jn(n)&&(n.kind==="time"||n.kind==="frame")&&typeof n.value=="number"&&Number.isFinite(n.value)?{kind:n.kind,value:n.value}:null}function Nu(n,e){if(n!=null){if(typeof n!="number"||!Number.isInteger(n)||!Number.isFinite(n)||n<0)throw new Error(`Review playlist page ${e} must be a non-negative integer.`);return n}}function Kx(n,e){if(n!=null){if(typeof n!="string")throw new Error(`Review playlist page ${e} must be a string.`);return n}}function P8(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist page must be an object.");return{next:Kx(n.next,"next"),previous:Kx(n.previous,"previous"),total:Nu(n.total,"total"),count:Nu(n.count,"count"),limit:Nu(n.limit,"limit"),offset:Nu(n.offset,"offset")}}}function I8(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist playback must be an object.");if(n.timeBase!==void 0&&n.timeBase!=="playback"&&n.timeBase!=="rawReplay")throw new Error('Review playlist playback timeBase must be "playback" or "rawReplay".');return{...n,timeBase:n.timeBase}}}function L8(n,e){if(n==null)return;if(!Jn(n))throw new Error(`Review item ${e} perspective must be an object.`);if(n.kind!=="player")throw new Error(`Review item ${e} perspective kind must be "player".`);const t=typeof n.playerId=="string"&&n.playerId.trim()?n.playerId.trim():void 0,i=typeof n.playerName=="string"&&n.playerName.trim()?n.playerName.trim():void 0;if(!t&&!i)throw new Error(`Review item ${e} player perspective needs playerId or playerName.`);if(n.ballCam!==void 0&&n.ballCam!=="off"&&n.ballCam!=="on"&&n.ballCam!=="player")throw new Error(`Review item ${e} perspective ballCam must be off, on, or player.`);if(n.usePlayerCameraSettings!==void 0&&typeof n.usePlayerCameraSettings!="boolean")throw new Error(`Review item ${e} perspective usePlayerCameraSettings must be boolean.`);return{kind:"player",playerId:t,playerName:i,ballCam:n.ballCam,usePlayerCameraSettings:n.usePlayerCameraSettings}}function D8(n){if(!Jn(n)||!Array.isArray(n.items))throw new Error("Review playlist must contain an items array.");const e=n.items.map((i,s)=>{if(!Jn(i)||typeof i.replay!="string")throw new Error(`Invalid review item at index ${s}.`);const a=Xx(i.start),r=Xx(i.end);if(!a||!r)throw new Error(`Review item ${s+1} has invalid start or end.`);return{id:typeof i.id=="string"?i.id:void 0,replay:i.replay,start:a,end:r,label:typeof i.label=="string"?i.label:void 0,perspective:L8(i.perspective,s+1),meta:Jn(i.meta)?i.meta:void 0}}),t=Array.isArray(n.replays)?n.replays.map(i=>!Jn(i)||typeof i.id!="string"?null:{id:i.id,path:typeof i.path=="string"?i.path:void 0,label:typeof i.label=="string"?i.label:void 0,locator:Jn(i.locator)?i.locator:void 0,meta:Jn(i.meta)?i.meta:void 0}).filter(i=>i!==null):void 0;return{label:typeof n.label=="string"?n.label:void 0,replays:t,items:e,page:P8(n.page),playback:I8(n.playback),meta:n.meta}}function qx(n){let e;try{e=JSON.parse(n)}catch(t){throw new Error(`Invalid review playlist JSON: ${t instanceof Error?t.message:String(t)}`)}return D8(e)}function k8(){const n=new URLSearchParams(window.location.search);return n.get("reviewPlaylist")?.trim()||n.get("review")?.trim()||n.get("playlist")?.trim()||n.get("playlistUrl")?.trim()||null}function O8(n){return/^\/(?:home|Users|tmp|var\/tmp|mnt|media|run\/user|nix\/store)\//.test(n)}function l1(n,e){const t=n.startsWith("path:")?n.slice(5):n;if(/^https?:\/\//i.test(t)||t.startsWith("/@fs/"))return t;if(t.startsWith("/")){if(O8(t))return`/@fs${t}`;if(e){const i=new URL(e,window.location.href);if(i.origin!==window.location.origin)return new URL(t,i.origin).href}return t}return e?new URL(t,e).href:t}function rd(n,e){const t=e.replaysById.get(n.replay);if(t?.path)return t.path;if(Jn(t?.locator)&&t.locator.kind==="path"&&typeof t.locator.path=="string")return t.locator.path;if(/^https?:\/\//i.test(n.replay)||n.replay.startsWith("/")||n.replay.startsWith("/@fs/")||n.replay.startsWith("path:"))return n.replay;throw new Error(`Review replay "${n.replay}" does not include a loadable path.`)}function Yx(n,e){const t=e.replaysById.get(n.replay),s=(t?.path??rd(n,e)).replace(/^path:/,"").split("/").filter(Boolean).pop();return t?.label??s??"review replay"}function od(n){return typeof n=="number"&&Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function jx(n){return n.kind==="time"?od(n.value):`frame ${Math.trunc(n.value)}`}function Ki(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?t:null}function ld(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):null}function F8(n,e){for(const[t,i]of[["eventTime","eventFrame"],["startTime","startFrame"],["endTime","endFrame"]]){const s=Ki(n,t),a=ld(n,i),r=a===null?null:e.frames[a]?.time;if(s!==null&&typeof r=="number"&&Number.isFinite(r))return s-r}return 0}function c1(n,e,t){return t==="playback"?0:t==="rawReplay"&&typeof e.rawStartTime=="number"&&Number.isFinite(e.rawStartTime)?e.rawStartTime:F8(n,e)}function C_(n,e){return Math.min(Math.max(0,n),Math.max(0,e))}function N8(n,e,t,i){if(e.kind==="frame"){const a=Math.max(0,Math.trunc(e.value));return C_(t.frames[a]?.time??0,t.duration)}const s=c1(n,t,i);return C_(e.value-s,t.duration)}function U8(n,e,t){const i=$8(n);return i===null?null:C_(i-c1(n,e,t),e.duration)}function B8(n){const e=n.start.kind==="time"?n.start.value:null,t=n.end.kind==="time"?n.end.value:null,i=[`${jx(n.start)} to ${jx(n.end)}`];e!==null&&t!==null&&i.push(`${Math.max(0,t-e).toFixed(1)}s clip`);const s=Ki(n,"startTime")??Ki(n,"eventTime"),a=Ki(n,"endTime")??Ki(n,"eventTime");return e!==null&&s!==null&&i.push(`${Math.max(0,s-e).toFixed(1)}s preroll`),t!==null&&a!==null&&i.push(`${Math.max(0,t-a).toFixed(1)}s postroll`),i.join(" · ")}function z8(n){const e=Ki(n,"eventTime"),t=Ki(n,"startTime"),i=Ki(n,"endTime"),s=ld(n,"eventFrame"),a=ld(n,"startFrame"),r=ld(n,"endFrame"),o=t!==null&&i!==null&&Math.abs(i-t)>.001?`${od(t)} to ${od(i)}`:od(e??t??i),l=a!==null&&r!==null&&r!==a?`frames ${a}-${r}`:s!==null?`frame ${s}`:a!==null?`frame ${a}`:null;return[o,l].filter(c=>c&&c!=="--").join(" · ")||"--"}function um(n,e){return n.label??n.meta?.eventTypeLabel??n.meta?.mechanicLabel??`Review item ${e+1}`}function H8(n){if(typeof n.meta?.playerName=="string"&&n.meta.playerName.trim())return n.meta.playerName.trim();if(Jn(n.meta?.target)&&typeof n.meta.target.playerName=="string"){const e=n.meta.target.playerName.trim();return e||null}return null}function Zx(n,e){if(!n)return null;if(n.playerId){const i=e.find(s=>s.id===n.playerId);if(i)return i}const t=n.playerName?.toLowerCase();return t?e.find(i=>i.name.trim().toLowerCase()===t)??null:null}function Jx(n){if(typeof n.meta?.eventTypeLabel=="string"&&n.meta.eventTypeLabel.trim())return n.meta.eventTypeLabel;if(typeof n.meta?.mechanicLabel=="string"&&n.meta.mechanicLabel.trim())return n.meta.mechanicLabel;const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"?Ci(e):"--"}function V8(n){const e=n.meta?.eventCategory;return typeof e=="string"&&e.trim()?Ci(e.trim()):"--"}function G8(n){const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"&&e.trim()?e.trim().replaceAll("-","_"):null}function $8(n){return Ki(n,"eventTime")??Ki(n,"startTime")??Ki(n,"endTime")}class W8{constructor(e){this.options=e}createReplaySource(e,t,i){const s=rd(e,t),a=l1(s,t.sourceUrl);return{name:Yx(e,t),preparingStatus:"Loading review replay...",async readBytes(){const r=await fetch(a,{signal:i});if(!r.ok){const o=r.statusText?` ${r.statusText}`:"";throw new Error(`Failed to fetch review replay from ${a} (${r.status}${o})`)}return new Uint8Array(await r.arrayBuffer())}}}initialize(e){const t=this.getReplayClipCounts(e);for(const[i,s]of this.getReplayItems(e)){let a="",r=i;try{a=rd(s,e),r=Yx(s,e)}catch{r=e.replaysById.get(i)?.label??i}e.replayLoadStates.set(i,{replayId:i,label:r,path:a,clipCount:t.get(i)??0,status:"idle",progress:null,error:null})}}preload(e,t){if(e.preloading)return;const i=this.getNextReplayItems(e,t);i.length!==0&&(e.preloading=!0,(async()=>{try{for(const s of i){const a=s.replay,r=e.replayLoadStates.get(a);if(!(r?.status==="loaded"||r?.status==="loading"))try{await this.loadBundle(s,e)}catch{}}}finally{e.preloading=!1}})())}loadBundle(e,t){const i=t.replayLoadCache.get(e.replay);if(i)return i;const s=this.createReplaySource(e,t);this.updateLoadState(t,e.replay,{label:s.name,path:rd(e,t),status:"loading",progress:null,error:null});const a=Promise.resolve().then(async()=>{const r=await s.readBytes();return iE(r,{reportEveryNFrames:100,onProgress:o=>{this.updateLoadState(t,e.replay,{status:"loading",progress:o,error:null})}})}).then(r=>(this.updateLoadState(t,e.replay,{status:"loaded",progress:null,error:null}),r)).catch(r=>{throw t.replayLoadCache.delete(e.replay),this.updateLoadState(t,e.replay,{status:"error",error:r instanceof Error?r.message:String(r)}),r});return t.replayLoadCache.set(e.replay,a),a}render(e){const{reviewSummary:t,loadingSummary:i,loadingActive:s,loadingList:a}=this.options.elements,r=e?Array.from(e.replayLoadStates.values()):[],o=r.filter(h=>h.status==="loaded").length,l=r.filter(h=>h.status==="loading").length,c=r.filter(h=>h.status==="error").length,u=r.filter(h=>h.status==="idle").length,d=r.length===0?"0 replays":`${o}/${r.length} loaded${l>0?`, ${l} loading`:""}${c>0?`, ${c} failed`:""}`;if(t.textContent=d,i.textContent=d,s.textContent=r.length===0?"No playlist":l>0?`${l} active, ${u} pending`:c>0?`${c} failed`:e?.preloading?`Background queue, ${u} pending`:o===r.length?"Complete":`${u} pending`,a.replaceChildren(),!e||r.length===0){const h=document.createElement("p");h.className="stat-window-empty",h.textContent="No replay sources.",a.append(h);return}for(const h of r){const f=document.createElement("div");f.className=`mechanics-review-replay-load ${h.status}`;const p=document.createElement("div");p.className="mechanics-review-replay-load-main";const g=document.createElement("span");g.className="mechanics-review-replay-load-title",g.textContent=h.label;const _=document.createElement("span");_.className="mechanics-review-replay-load-meta",_.textContent=[h.replayId,`${h.clipCount} ${h.clipCount===1?"clip":"clips"}`,h.path].filter(Boolean).join(" · "),p.append(g,_);const m=document.createElement("strong");m.className="mechanics-review-replay-load-status",m.textContent=this.replayLoadStatusText(h);const v=document.createElement("div");v.className="mechanics-review-replay-load-progress";const y=document.createElement("span");y.style.width=`${Math.round(this.replayLoadProgressValue(h)*100)}%`,v.append(y),f.append(p,m,v),a.append(f)}}updateLoadState(e,t,i){const s=e.replayLoadStates.get(t)??{replayId:t,label:t,path:"",clipCount:0,status:"idle",progress:null,error:null};e.replayLoadStates.set(t,{...s,...i});const a=e.manifest.items[e.currentIndex];e.loading&&a?.replay===t&&i.progress&&this.options.onActiveLoadProgress(i.progress),this.options.isActiveReview(e)&&this.render(e)}getReplayItems(e){const t=new Map;for(const i of e.manifest.items)t.has(i.replay)||t.set(i.replay,i);return t}getReplayClipCounts(e){const t=new Map;for(const i of e.manifest.items)t.set(i.replay,(t.get(i.replay)??0)+1);return t}getNextReplayItems(e,t){const i=e.manifest.items[t]?.replay,s=new Set(i?[i]:[]),a=[];for(let r=t+1;r{const i=t.file.files?.[0];if(i)try{const s=qx(await i.text());await this.loadPlaylist(s,null)}catch(s){console.error("Failed to load review playlist:",s),this.setStatus(s instanceof Error?s.message:"Failed to load review playlist")}finally{t.file.value=""}},{signal:e}),t.loadUrl.addEventListener("click",()=>{this.loadPlaylistFromUrl(t.url.value.trim()).catch(i=>{console.error("Failed to load review playlist URL:",i),this.setStatus(i instanceof Error?i.message:"Failed to load review playlist URL")})},{signal:e}),t.previous.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.max(0,i.currentIndex-1))},{signal:e}),t.replay.addEventListener("click",()=>this.replayClip(),{signal:e}),t.next.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.min(i.manifest.items.length-1,i.currentIndex+1))},{signal:e}),t.confirm.addEventListener("click",()=>{this.submitDecision("confirmed")},{signal:e}),t.reject.addEventListener("click",()=>{this.submitDecision("rejected")},{signal:e}),t.uncertain.addEventListener("click",()=>{this.submitDecision("uncertain")},{signal:e})}render(){const{elements:e}=this.options,t=this.activeReview,i=t?.manifest.items??[],s=t?i[t.currentIndex]??null:null,a=i.length>0;e.count.textContent=`${i.length} item${i.length===1?"":"s"}`,e.index.textContent=a&&t?`${t.currentIndex+1} / ${i.length}`:"0 / 0",e.title.textContent=s?um(s,t?.currentIndex??0):"No candidate selected",e.mechanic.textContent=s?Jx(s):"--",e.player.textContent=s?this.getPlayerName(s):"--",e.clip.textContent=s?B8(s):"--",e.event.textContent=s?z8(s):"--",e.reason.textContent=s?.meta?.reason??"--",e.previous.disabled=!t||t.loading||t.currentIndex<=0,e.replay.disabled=!t||t.loading||!t.currentClip,e.next.disabled=!t||t.loading||t.currentIndex>=i.length-1;const r=!t||t.loading||Qx(s)===null;if(e.confirm.disabled=r,e.reject.disabled=r,e.uncertain.disabled=r,this.options.replayLoads.render(t),e.list.replaceChildren(),!t||i.length===0){const o=document.createElement("p");o.className="stat-window-empty",o.textContent="No review playlist loaded.",e.list.append(o);return}i.forEach((o,l)=>{const c=document.createElement("button");c.type="button",c.className="mechanics-review-item",c.dataset.active=l===t.currentIndex?"true":"false",c.disabled=t.loading,c.addEventListener("click",()=>{this.activateItem(l)});const u=document.createElement("span");u.textContent=um(o,l);const d=document.createElement("strong");d.textContent=[V8(o),Jx(o),this.getPlayerName(o),dm(o.meta?.reviewStatus)].filter(h=>h&&h!=="--").join(" · ")||"--",c.append(u,d),e.list.append(c)})}async loadPlaylist(e,t){const i=new Map;for(const s of e.replays??[])i.set(s.id,s);this.activeReview={manifest:e,sourceUrl:t,replaysById:i,replayLoadStates:new Map,replayLoadCache:new Map,currentIndex:0,loading:!1,preloading:!1,currentReplayId:null,currentClip:null},this.options.replayLoads.initialize(this.activeReview),this.options.showReplayLoadingWindow(),this.setStatus(e.label?`Loaded ${e.label}.`:"Loaded review playlist."),this.render(),e.items.length>0&&await this.activateItem(0)}async loadPlaylistFromUrl(e){if(!e){this.setStatus("Enter a review playlist URL.");return}const t=l1(e,window.location.href);this.setStatus("Loading review playlist...");const i=await fetch(t);if(!i.ok){const a=i.statusText?` ${i.statusText}`:"";throw new Error(`Failed to fetch review playlist from ${t} (${i.status}${a})`)}const s=qx(await i.text());await this.loadPlaylist(s,i.url||t)}async activateItem(e){const t=this.activeReview,i=t?.manifest.items[e];if(!(!t||!i||t.loading)){t.loading=!0,t.currentIndex=e,this.render(),this.setStatus(`Loading ${um(i,e)}...`);try{if(!this.options.getReplayPlayer()||t.currentReplayId!==i.replay){const d=this.options.replayLoads.createReplaySource(i,t),h=this.options.replayLoads.loadBundle(i,t);await this.options.loadReplayBundleForDisplay(d,h),t.currentReplayId=i.replay}this.options.replayLoads.preload(t,e);const a=t.manifest.playback?.timeBase,r=Math.max(0,this.getBoundTime(i,i.start,a)),o=Math.min(this.options.getReplayPlayer()?.getState().duration??Number.POSITIVE_INFINITY,Math.max(r,this.getBoundTime(i,i.end,a)));if(!Number.isFinite(r)||!Number.isFinite(o)||o<=r)throw new Error("Review item has an empty playback range.");const l=this.options.getReplayPlayer(),c=l?Zx(i.perspective,l.replay.players):null;c&&this.options.applyClipPerspective({playerId:c.id,ballCam:i.perspective?.ballCam,usePlayerCameraSettings:i.perspective?.usePlayerCameraSettings}),this.options.resetReplayTransitionControls();const u=l===null?null:U8(i,l.replay,a);t.currentClip={startTime:r,endTime:o,targetTime:u},this.options.activateTimelineSource(i),this.options.getReplayPlayer()?.setState({currentTime:r,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),this.setStatus(u===null?`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s`:`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s; target ${u.toFixed(2)}s`)}catch(s){console.error("Failed to activate mechanics review item:",s),t.currentClip=null,this.setStatus(s instanceof Error?s.message:"Failed to load review item")}finally{t.loading=!1,this.render()}}}replayClip(){const e=this.activeReview?.currentClip,t=this.options.getReplayPlayer();!e||!t||t.setState({currentTime:e.startTime,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1})}async submitDecision(e){const t=this.activeReview,i=t?.manifest.items[t.currentIndex]??null,s=Qx(i);if(!t||!i||!s){this.setStatus("Current review item has no review endpoint.");return}this.setStatus(`Submitting ${dm(e)}...`);const a=await fetch(s,{method:"POST",headers:{"content-type":"application/json",...q8()},credentials:"same-origin",body:JSON.stringify({status:e})});if(!a.ok){let r=`${a.status}${a.statusText?` ${a.statusText}`:""}`;try{const o=await a.json();typeof o.error=="string"&&(r=o.error)}catch{}this.setStatus(`Review failed: ${r}`);return}i.meta=i.meta??{},i.meta.reviewStatus=e,this.setStatus(`Marked ${dm(e)}.`),this.render()}enforceClipBoundary(e){const t=this.activeReview?.currentClip,i=this.options.getReplayPlayer();if(!t||!i||this.boundaryGuard)return!1;const s=e.currentTime=t.endTime-.025;if(!s&&!a)return!1;this.boundaryGuard=!0;try{i.setState({currentTime:s?t.startTime:t.endTime,playing:!1,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),a&&this.setStatus(`Finished clip at ${t.endTime.toFixed(2)}s`)}finally{this.boundaryGuard=!1}return!0}getBoundTime(e,t,i){const s=this.options.getReplayPlayer();return s?N8(e,t,s.replay,i):t.kind==="time"?t.value:0}getPlayerName(e){const t=H8(e);if(t)return t;const i=this.options.getReplayPlayer()?.replay.players??[];return Zx(e.perspective,i)?.name??"--"}}function dm(n){return typeof n=="string"&&n.trim()?n.replaceAll("_"," "):"unreviewed"}function Qx(n){if(!n)return null;if(typeof n.meta?.reviewEndpoint=="string"&&n.meta.reviewEndpoint)return n.meta.reviewEndpoint;const e=typeof n.meta?.eventId=="string"&&n.meta.eventId?n.meta.eventId:n.id;return e?`/api/v1/events/${encodeURIComponent(e)}/reviews`:null}function q8(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function Y8(n){return new K8(n)}const j8=["replayUrl","replay_url","replay"],Z8=["r","replayUrlZ","replay_url_z"],J8=["ballchasing","ballchasingId","ballchasingUuid","ballchasingReplay"];function Q8(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a{n.signal.aborted||(console.error("Failed to load replay URL:",t),n.statusReadout.textContent=t instanceof Error?t.message:"Failed to load replay URL")})}function r6(n){n.initialBundle?n.loadReplayBundleForDisplay({name:n.initialReplayName??"replay",preparingStatus:"Preparing replay...",async readBytes(){throw new Error("Replay bytes are not available for this preloaded replay")}},Promise.resolve(n.initialBundle)).catch(i=>{n.signal.aborted||(console.error("Failed to load preprocessed replay bundle:",i),n.statusReadout.textContent=i instanceof Error?i.message:"Failed to load preprocessed replay bundle")}):n.loadFromLocation!==!1&&a6(n);const e=k8();if(!e)return;const t=n.getMechanicsReviewController();t?.setUrl(e),n.showMechanicsReviewWindow(),t?.loadPlaylistFromUrl(e).catch(i=>{n.signal.aborted||(console.error("Failed to load mechanics review playlist from URL:",i),t?.setStatus(i instanceof Error?i.message:"Failed to load mechanics review playlist from URL"))})}function o6(n){const e=()=>{n.getSkipPostGoalTransitions().checked=!1,n.getSkipKickoffs().checked=!1},t=(i,s)=>{const a=n.getReplayPlayer();!a||!Number.isFinite(i)||(n.getMechanicsReviewController()?.clearCurrentClip(),e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:s,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())};return{watchGoalReplay(i,s){const a=n.getReplayPlayer();if(!a||!Number.isFinite(i))return;if(n.getMechanicsReviewController()?.clearCurrentClip(),s!==null&&a.replay.players.some(o=>o.id===s)){a.setAttachedPlayer(s),a.setCameraViewMode("follow");const o=n.getCameraControlsController();o&&(o.freeCameraPreset=null)}e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate()},cueGoalReplay(i){t(i,!1)},cueTimelineEvent(i){const s=n.getReplayPlayer();s&&(n.getMechanicsReviewController()?.clearCurrentClip(),e(),s.setState({currentTime:Pg(i),skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())},applyConfigToReplayPlayer(i){const s=n.getReplayPlayer();if(!s)return;s.setState(ZW(i.playback,i.camera,i));const a=n.getCameraControlsController();a&&(a.freeCameraPreset=i.camera.freePreset??null),i.camera.mode==="free"&&i.camera.freePreset&&s.setFreeCameraPreset(i.camera.freePreset),n.syncBoostPadOverlayPlugin(),n.setupActiveModules(),n.renderModuleSummary(),n.renderModuleSettings(),n.renderStatsWindows(s.getState().frameIndex)}}}function l6(n){let e=!1,t=null;const i=()=>n.getFloatingWindowController()?.getSingletonConfigs()??[],s=()=>n.getStatsWindowsController()?.getConfigs()??[],a=()=>{const o=n.getActiveModulesRuntime(),l=n.getReplayPlayer();return jW({playback:qW({replayPlayer:l,playbackRate:n.playbackRate,skipPostGoalTransitions:n.skipPostGoalTransitions,skipKickoffs:n.skipKickoffs}),camera:YW({replayPlayer:l,cameraControlsController:n.getCameraControlsController()}),activeTimelineEventSourceIds:o.getActiveTimelineEventSourceIds(),activeTimelineRangeModuleIds:o.getActiveTimelineRangeModuleIds(),activeMechanicTimelineKinds:o.getActiveMechanicTimelineKinds(),activeRenderEffectModuleIds:o.getActiveRenderEffectModuleIds(),initialConfig:n.getInitialConfig(),replayPlayer:l,boostPadOverlayEnabled:o.getBoostPadOverlayEnabled(),recording:n.getRecordingWindowController()?.getConfigSnapshot()??{},singletonWindows:i(),statsWindows:s(),moduleConfigs:KW(n.modules)})},r=o=>{VW(o1(n.modules),o)};return{setApplyingConfig(o){e=o},reset(){t!==null&&(window.clearTimeout(t),t=null),e=!1},scheduleConfigUrlUpdate(){e||(t!==null&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null;const o=vW(new URL(window.location.href),a());window.history.replaceState(window.history.state,"",o)},150))},applyConfigToStaticControls(o){if(n.getActiveModulesRuntime().applyOverlayConfig(o.overlays),n.skipPostGoalTransitions.checked=o.playback.skipPostGoalTransitions??n.skipPostGoalTransitions.checked,n.skipKickoffs.checked=o.playback.skipKickoffs??n.skipKickoffs.checked,n.hitboxWireframes.checked=o.overlays.hitboxWireframes,n.hitboxOnlyMode.checked=o.overlays.hitboxOnlyMode,n.getCameraControlsController()?.applyNameplateLiftUu(o.camera.nameplateLiftUu),n.getCameraControlsController()?.setAutoPossessionEnabled(o.camera.autoPossession??!1,{requestConfigSync:!1}),o.playback.rate!==void 0){const l=cf(o.playback.rate);n.playbackRate.value=`${l}`,n.playbackRateReadout.textContent=qg(l)}n.getRecordingWindowController()?.applyConfig(o.recording),r(o.moduleConfigs),n.getFloatingWindowController()?.applySingletonConfigs(o.singletonWindows),n.getStatsWindowsController()?.replaceFromConfig(o.statsWindows),n.renderModuleSummary(),n.renderModuleSettings(),n.renderTimelineEventCount()}}}function c6(n){const e=t=>{const i=n.getLauncherToggle();n.getLauncherMenu().hidden=!t,i.setAttribute("aria-label",t?"Close menu":"Open menu"),i.setAttribute("aria-expanded",t?"true":"false")};return{bringWindowToFront(t){n.getFloatingWindowController()?.bringToFront(t)},showWindow(t){n.getFloatingWindowController()?.show(t)},toggleWindow(t){n.getFloatingWindowController()?.toggle(t)},hideWindow(t){n.getFloatingWindowController()?.hide(t)},setLauncherOpen:e,openReplayFilePicker(){n.getFileInput().click(),e(!1)},installWindowDragging(t,i){n.getFloatingWindowController()?.installDragging(t,i)},getElementWindowId(t){return t.closest("[data-window-id]")?.dataset.windowId??null}}}const A_=4096,hr=5120,u6=893,d6=642,qi=1/105;class h6{constructor(e){this.options=e,this.options.body.innerHTML=` +
`}).join("")}
`},renderFocusedPlayerStats(e,t,i){return`
Events${ve(i.statsTimeline,"dodge").filter(a=>At(a.player)===e).length}
`}}}function R$(){return{id:"half-flip",label:"Half Flip",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Nx(i.half_flip),i.half_flip?.is_last_half_flip?'Last Half Flip':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Nx(i.half_flip):""}}}function P$(){return{id:"wavedash",label:"Wavedash",setup(){},teardown(){},onBeforeRender(){},getTimelineEvents(n){return T4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ux(i.wavedash),i.wavedash?.is_last_wavedash?'Last Wavedash':"")):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ux(i.wavedash):""}}}function I$(){return ai({id:"whiff",label:"Whiff",select:n=>n.whiff,render:n=>JG(n),getTimelineEvents(n){return R4(n.statsTimeline,n.replay)}})}function L$(n){let e=null,t=null;const i=new Set,s=["speed_band","height_band"];return{id:"movement",label:"Movement",setup(){a()},teardown(){},onBeforeRender(){},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const c=zt(l.statsFrameLookup,o);return c?si(c.players,u=>Tn(u.name,u.is_team_0,Mx(u.movement,{breakdownClasses:r()}))):""},renderFocusedPlayerStats(o,l,c){const u=wn(c,l,o);return u?Mx(u.movement,{breakdownClasses:r()}):""},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Movement breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";for(const h of[{className:"speed_band",label:"Speed band"},{className:"height_band",label:"Height band"}]){const f=document.createElement("label");f.className="toggle";const p=document.createElement("input");p.type="checkbox",p.dataset.breakdownClass=h.className,p.addEventListener("change",()=>{p.checked?i.add(h.className):i.delete(h.className),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const g=document.createElement("span");g.textContent=h.label,f.append(p,g),d.append(f)}e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=r();t.textContent=o.length>0?o.map(l=>({speed_band:"Speed band",height_band:"Height band"})[l]).join(" + "):"Total only"}}}function r(){return s.filter(o=>i.has(o))}}function k$(){return ai({id:"powerslide",label:"Powerslide",select:n=>n.powerslide,render:n=>ZG(n),getTimelineEvents(n){return b4(n.statsTimeline,n.replay)}})}function D$(){return ai({id:"rotation",label:"Rotation",select:n=>n.rotation,render:n=>GG(n)})}function O$(){return ai({id:"demo",label:"Demo",select:n=>n.demo,render:n=>QG(n)})}function F$(){return ai({id:"bump",label:"Bump",select:n=>n.bump,render:n=>e$(n),getTimelineEvents(n){return M4(n.statsTimeline,n.replay)}})}function N$(){let n=null,e=1;return{id:WE,label:"Relative Positioning",setup(t){e=t.fieldScale,n=new o5(t.player.sceneState.replayRoot,t.replay,e)},teardown(){n?.dispose(),n=null},onBeforeRender(t){n?.update(t,e)},renderStats(t,i){const s=zt(i.statsFrameLookup,t);return s?si(s.players,a=>{const r=Q4(i.replay,At(a.player_id),t),o=J4[r];return Tn(a.name,a.is_team_0,Px(a.positioning),`${o}`)}):""},renderFocusedPlayerStats(t,i,s){const a=wn(s,i,t);return a?Px(a.positioning):""}}}function U$(){return{id:"absolute-positioning",label:"Absolute Positioning",setup(n){Ax.acquire(n)},teardown(){Ax.release()},onBeforeRender(){},getTimelineRanges(n){return Z4(n.statsTimeline,n.replay)},renderStats(n,e){const t=zt(e.statsFrameLookup,n);return t?si(t.players,i=>Tn(i.name,i.is_team_0,Ix(i.positioning))):""},renderFocusedPlayerStats(n,e,t){const i=wn(t,e,n);return i?Ix(i.positioning):""}}}function B$(n,e={}){return[p$(),m$(),_$(),g$(),y$(),S$(),M$(),T$(),eG(n),tG(),nG(),iG(),sG(),N$(),U$(),D$(),A$(),C$(),R$(),P$(),h$(n),I$(),E$(),x$(),w$(),b$(),f$(n,e.boostPickupFilters),v$(),L$(n),k$(),O$(),F$()]}const z$=new Set(["player_id","name","is_team_0"]),H$=["is_last_","time_since_last_","frames_since_last_"];function V$(n){return n===null||typeof n=="number"||typeof n=="string"||typeof n=="boolean"||Array.isArray(n)}function G$(n,e){let t=n;for(const i of e){if(!t||typeof t!="object"||Array.isArray(t))return;t=t[i]}return t}function $$(n){return n==null?"--":typeof n=="number"?Number.isFinite(n)?Number.isInteger(n)?`${n}`:`${Number(n.toFixed(3))}`:"--":typeof n=="boolean"?n?"true":"false":Array.isArray(n)?n.length===0?"[]":JSON.stringify(n):`${n}`}function W$(n,e){if(H$.some(a=>n.startsWith(a)))return!0;const t=n.match(/^last_(.+)_time$/),i=n.match(/^last_(.+)_frame$/),s=t?.[1]??i?.[1];return s?`is_last_${s}`in e||`time_since_last_${s}`in e||`frames_since_last_${s}`in e:!1}function M_(n,e,t,i){if(!n||typeof n!="object"||Array.isArray(n))return;const s=n;for(const[a,r]of Object.entries(s)){if(e==="player"&&t.length===0&&z$.has(a)||W$(a,s))continue;const o=[...t,a];if(V$(r)){const l=`${e}:${o.join(".")}`;i.push({id:l,label:o.join("."),category:o[0]??e,scope:e,path:o,read(c){return G$(c,o)},format:$$});continue}M_(r,e,o,i)}}function X$(n){const e=new Set;return n.filter(t=>e.has(t.id)?!1:(e.add(t.id),!0))}function K$(n,e){const t=[];return n&&M_(n,"player",[],t),e&&M_(e,"team",[],t),X$(t).sort((i,s)=>i.label.localeCompare(s.label))}function q$(){return K$(uE(),Ql())}function nc(n){return q$()}function QE(n){return n.toLowerCase().replace(/[_/.-]+/g," ").replace(/\s+/g," ").trim()}function Y$(n){return QE(n).split(" ").filter(Boolean)}function j$(n,e){const t=Y$(e);if(t.length===0)return 0;const i=QE([n.scope,n.category,n.label,n.id,...n.path].join(" "));let s=0;for(const a of t){const r=i.indexOf(a);if(r<0)return null;s+=r}return s+i.length/1e3}function Z$(n,e){return n.map((t,i)=>({definition:t,index:i,score:j$(t,e)})).filter(t=>t.score!==null).sort((t,i)=>t.score-i.score||t.index-i.index).map(t=>t.definition)}function wi(n){if(!Number.isFinite(n))return"--";const e=Math.floor(Math.max(0,n)/60),t=Math.max(0,n)-e*60;return`${e}:${t.toFixed(1).padStart(4,"0")}`}class J${constructor(e){this.options=e}statsWindows=new Map;nextStatsWindowId=1;getConfigs(){return[...this.statsWindows.values()].map(e=>({id:e.id,kind:e.kind,placement:this.options.readWindowPlacement(e.element),playerId:e.playerId,team:e.team,entries:e.entries.map(t=>({statId:t.statId,targetId:t.targetId}))}))}clear(){for(const e of this.statsWindows.values())e.element.remove();this.statsWindows.clear(),this.nextStatsWindowId=1}replaceFromConfig(e){this.clear();for(const t of e)this.create(t.kind,t)}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0,t={}){for(const i of this.statsWindows.values())t.preserveOpenPickers&&(i.pickerOpen||i.element.contains(document.activeElement))||this.renderStatsWindow(i,e)}create(e,t){const i=t?.id??`stats-${this.nextStatsWindowId++}`,s=Number.parseInt(i.replace(/^stats-/,""),10);Number.isFinite(s)&&(this.nextStatsWindowId=Math.max(this.nextStatsWindowId,s+1));const{x:a,y:r}=this.getStatsWindowDefaultPosition(),o=document.createElement("section");o.className="stats-window",o.dataset.windowId=i,o.style.setProperty("--window-x",`${a}px`),o.style.setProperty("--window-y",`${r}px`),t&&this.options.applyWindowPlacement(o,t.placement);const l=document.createElement("header");l.className="stats-window-header";const c=document.createElement("div");c.className="stats-window-actions";const u=document.createElement("button");if(u.type="button",u.className="stats-window-action",u.textContent="Hide",c.append(u),this.hasStatsWindowScopeSelector(e))l.classList.add("stats-window-header-actions-only"),l.append(c);else{const f=document.createElement("h2");f.textContent=this.getStatsWindowTitle(e),l.append(f,c)}const d=document.createElement("div");d.className="stats-window-body",o.append(l,d),this.options.layer.append(o);const h={id:i,kind:e,entries:t?.entries.map(f=>({key:`${i}:${f.statId}:${f.targetId??"scope"}`,statId:f.statId,targetId:f.targetId}))??[],playerId:t?.playerId??this.options.getReplayPlayer()?.replay.players[0]?.id??null,team:t?.team??"blue",pickerOpen:!1,query:"",element:o,body:d};return u.addEventListener("click",()=>{o.hidden=!0,this.options.requestConfigSync()}),this.statsWindows.set(i,h),t||this.options.bringWindowToFront(o),this.options.setLauncherOpen(!1),this.renderStatsWindow(h),this.options.requestConfigSync(),h}getStatById(e){return this.options.getStatRegistry().find(t=>t.id===e)??null}getCurrentStatsFrame(e){const t=this.options.getStatsFrameLookup();return t?zt(t,e):null}getTeamSnapshot(e,t){return t==="blue"?e.team_zero??null:e.team_one??null}getTeamLabel(e){return e==="blue"?"Blue":"Orange"}getPlayerTeamClass(e){const t=this.options.getReplayPlayer()?.replay.players.find(i=>i.id===e);return t?na(t.isTeamZero):null}getTeamScopeClass(e){return na(e==="blue")}appendGroupedPlayerOptions(e,t){const i=this.options.getReplayPlayer()?.replay.players??[];for(const s of["blue","orange"]){const a=i.filter(o=>o.isTeamZero===(s==="blue"));if(a.length===0)continue;const r=document.createElement("optgroup");r.label=`${this.getTeamLabel(s)} team`;for(const o of a)r.append(new Option(o.name,o.id,o.id===t,o.id===t));e.append(r)}}getStatsWindowScopeTeamClass(e){return e.kind==="player"?this.getPlayerTeamClass(e.playerId):e.kind==="team"?this.getTeamScopeClass(e.team??"blue"):null}getStatTargetTeamClass(e,t){return e.scope==="player"?this.getPlayerTeamClass(t):this.getTeamScopeClass(t==="orange"?"orange":"blue")}getStatsWindowTitle(e){switch(e){case"player":return"Player stats";case"team":return"Team stats";case"all-players":return"All players stats";case"all-teams":return"All teams stats";case"kickoff-overview":return"Kickoff details";case"goals-overview":return"Goal labels";case"ad-hoc":return"Ad hoc stats"}}hasStatsWindowScopeSelector(e){return e==="player"||e==="team"}hasStatsWindowStatPicker(e){return e!=="goals-overview"&&e!=="kickoff-overview"}getStatsWindowAllowedScope(e){switch(e){case"player":case"all-players":return"player";case"team":case"all-teams":return"team";case"kickoff-overview":return null;case"goals-overview":return null;case"ad-hoc":return null}}getStatsWindowDefaultPosition(){const e=this.statsWindows.size*18;return{x:Math.max(12,Math.min(window.innerWidth-360,96+e)),y:Math.max(64,Math.min(window.innerHeight-240,96+e))}}renderStatsWindow(e,t=this.options.getReplayPlayer()?.getState().frameIndex??0){const i=document.activeElement,s=i instanceof HTMLInputElement&&i.dataset.statsWindowSearch===e.id,a=s?i.selectionStart:null,r=s?i.selectionEnd:null,o=s?i.selectionDirection:null;if(e.body.replaceChildren(),this.renderStatsWindowScope(e),this.hasStatsWindowStatPicker(e.kind)&&(this.renderStatsWindowAddControl(e),this.renderStatsWindowPicker(e)),this.renderStatsWindowEntries(e,t),s){const l=e.body.querySelector(`input[data-stats-window-search="${e.id}"]`);l?.focus({preventScroll:!0}),l&&a!==null&&r!==null&&l.setSelectionRange(a,r,o??"none")}}renderStatsWindowScope(e){if(e.kind!=="player"&&e.kind!=="team")return;const t=document.createElement("div");t.className="stats-window-scope-row";const i=document.createElement("select");i.className="stats-window-scope-select";const s=this.getStatsWindowScopeTeamClass(e);s&&i.classList.add(s),i.setAttribute("aria-label",e.kind==="player"?"Player stats target":"Team stats target"),e.kind==="player"?(this.appendGroupedPlayerOptions(i,e.playerId),i.value=e.playerId??"",i.addEventListener("change",()=>{e.playerId=i.value||null,this.renderStatsWindow(e),this.options.requestConfigSync()})):(i.append(new Option("Blue","blue",e.team==="blue",e.team==="blue"),new Option("Orange","orange",e.team==="orange",e.team==="orange")),i.value=e.team??"blue",i.addEventListener("change",()=>{e.team=i.value==="orange"?"orange":"blue",this.renderStatsWindow(e),this.options.requestConfigSync()})),t.append(i),e.body.append(t)}renderStatsWindowAddControl(e){const t=document.createElement("button");if(t.type="button",t.className="stats-window-add-button",t.textContent="+",t.title="Add stat",t.setAttribute("aria-label","Add stat"),t.setAttribute("aria-expanded",String(e.pickerOpen)),this.activateButton(t,()=>{e.pickerOpen=!e.pickerOpen,this.renderStatsWindow(e)}),this.hasStatsWindowScopeSelector(e.kind)){e.body.querySelector(".stats-window-scope-row")?.append(t);return}const i=document.createElement("div");i.className="stats-window-toolbar",i.append(t),e.body.append(i)}activateButton(e,t){let i=!1;e.addEventListener("pointerdown",s=>{e.disabled||(i=!0,s.preventDefault(),t())}),e.addEventListener("click",()=>{if(i){i=!1;return}e.disabled||t()})}renderStatsWindowPicker(e){const t=document.createElement("div");if(t.className="stats-window-picker",t.hidden=!e.pickerOpen,t.hidden){e.body.append(t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=document.createElement("input");s.type="search",s.placeholder="Search stats",s.value=e.query,s.dataset.statsWindowSearch=e.id;const a=document.createElement("div");a.className="stats-window-picker-list",s.addEventListener("input",()=>{e.query=s.value,this.renderStatsWindowPickerList(e,a,i)}),this.renderStatsWindowPickerList(e,a,i),t.append(s,a),e.body.append(t)}renderStatsWindowPickerList(e,t,i){t.replaceChildren();const s=this.options.getStatRegistry(),a=i?s.filter(l=>l.scope===i):s,r=Z$(a,e.query),o=new Map;for(const l of r){const c=o.get(l.category)??[];c.push(l),o.set(l.category,c)}for(const[l,c]of o){if(c.length<2)continue;const u=document.createElement("button");u.type="button",u.className="stats-window-picker-item",u.innerHTML=`Add all ${l}${c.length}`,this.activateButton(u,()=>{for(const d of c)this.addStatToWindow(e,d);this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(u)}for(const l of r){const c=document.createElement("button");c.type="button",c.className="stats-window-picker-item",c.innerHTML=`${l.label}${l.scope}`,c.disabled=e.kind!=="ad-hoc"&&e.entries.some(u=>u.statId===l.id),this.activateButton(c,()=>{this.addStatToWindow(e,l),this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(c)}if(r.length===0){const l=document.createElement("p");l.className="stat-window-empty",l.textContent=s.length===0?"No stats available.":"No matching stats.",t.append(l)}}addStatToWindow(e,t){const i=e.kind==="ad-hoc"?this.getDefaultAdHocTargetId(t):void 0;e.entries.some(s=>s.statId===t.id&&s.targetId===i)||e.entries.push({key:`${e.id}:${t.id}:${i??"scope"}`,statId:t.id,targetId:i})}getDefaultAdHocTargetId(e){return e.scope==="player"?this.options.getReplayPlayer()?.replay.players[0]?.id??"":"blue"}removeStatFromWindow(e,t){const i=e.entries.findIndex(s=>s.key===t);i>=0&&e.entries.splice(i,1)}renderStatsWindowEntries(e,t){if(e.kind==="goals-overview"){this.renderGoalLabelsOverview(e);return}if(e.kind==="kickoff-overview"){this.renderKickoffOverview(e,t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=e.entries.map(r=>({entry:r,definition:this.getStatById(r.statId)})).filter(r=>r.definition!==null&&(!i||r.definition.scope===i));if(s.length===0){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="No stats added.",e.body.append(r);return}const a=this.getCurrentStatsFrame(t);if(!a){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="Load a replay to show stats.",e.body.append(r);return}if(e.kind==="all-players"){this.renderAllPlayersStats(e,a,s);return}if(e.kind==="all-teams"){this.renderAllTeamsStats(e,a,s);return}if(e.kind==="player"){const r=e.playerId?a.players.find(o=>At(o.player_id)===e.playerId)??null:null;this.renderScopedStatList(e,r,s);return}if(e.kind==="team"){this.renderScopedStatList(e,this.getTeamSnapshot(a,e.team??"blue"),s);return}e.kind==="ad-hoc"&&this.renderAdHocStats(e,a,s)}renderGoalLabelsOverview(e){const t=this.options.getStatsTimeline(),i=this.options.getReplayPlayer()?.replay??null;if(!t||!i){this.appendStatsWindowEmpty(e,"Load a replay to show goal labels.");return}const s=[...ve(t,"goal_context")].sort((o,l)=>o.time-l.time),a=s.map((o,l)=>l);if(a.length===0){this.appendStatsWindowEmpty(e,"No goals loaded.");return}const r=document.createElement("div");r.className="goal-label-list";for(const o of a){const l=s[o]??null,c=[...l?.tags??[]].sort((M,C)=>M.kind.localeCompare(C.kind)||C.metadata.confidence-M.metadata.confidence),u=l?.time??0,d=l?.scorer??null,h=d?At(d):null,f=d?i.players.find(M=>M.id===h)?.name??h:"Unknown scorer",p=l?.scoring_team_is_team_0??null,g=document.createElement("section");g.className="goal-label-item",p!==null&&g.classList.add(na(p));const _=document.createElement("header"),m=document.createElement("h3");m.textContent=`Goal ${o+1}`;const v=document.createElement("span");v.textContent=`${wi(u)} · ${f}`,_.append(m,v);const y=document.createElement("div");if(y.className="goal-label-tags",c.length===0){const M=document.createElement("span");M.className="goal-label-tag goal-label-tag-empty",M.textContent="Unlabeled",y.append(M)}else for(const M of c){const C=document.createElement("span");C.className="goal-label-tag";const w=n4(M);C.textContent=`${Ai(M.kind)} ${Math.round(M.metadata.confidence*100)}%${w?` - ${w}`:""}`,y.append(C)}const b=document.createElement("div");b.className="goal-label-actions";const T=document.createElement("button");T.type="button",T.className="goal-label-watch",T.textContent="Watch",T.addEventListener("click",()=>{this.options.watchGoalReplay(u,h)});const x=document.createElement("button");x.type="button",x.textContent="Cue",x.addEventListener("click",()=>{this.options.cueGoalReplay(u)}),b.append(T,x),g.append(_,y,b),r.append(g)}e.body.append(r)}renderKickoffOverview(e,t){const i=this.options.getStatsTimeline(),s=this.options.getReplayPlayer()?.replay??null;if(!i||!s){this.appendStatsWindowEmpty(e,"Load a replay to show kickoff details.");return}const a=this.getClosestKickoffEvent(i,t);if(!a){this.appendStatsWindowEmpty(e,"No kickoff events loaded.");return}const r=a.payload.payload,o=document.createElement("section");o.className="kickoff-overview";const l=document.createElement("header");l.className="kickoff-overview-hero";const c=document.createElement("div"),u=document.createElement("h3");u.textContent=this.formatKickoffTitle(a);const d=document.createElement("span");d.textContent=`Nearest kickoff · resolved at ${wi(r.end_time)}`,c.append(u,d);const h=document.createElement("strong"),f=this.teamClassFromNullable(r.winning_team_is_team_0);h.className="kickoff-overview-victor",f&&h.classList.add(f),h.textContent=this.formatOutcome(r),l.append(c,h);const p=document.createElement("div");p.className="kickoff-overview-summary",p.append(this.renderKickoffMetric("Win strength",`${this.formatNullableNumber(r.win_strength,2)} · ${this.formatKickoffLabelValue("kickoff_win_strength",r.win_strength_band)}`),this.renderKickoffMetric("First touch",this.formatFirstTouch(r)),this.renderKickoffMetric("Advantage",this.formatAdvantage(r)),this.renderKickoffMetric("Contested",this.formatContested(r)));const g=document.createElement("div");g.className="kickoff-detail-grid",g.append(this.renderKickoffDetail("Kickoff start",wi(r.start_time)),this.renderKickoffDetail("Movement start",wi(r.movement_start_time)),this.renderKickoffDetail("Live action",r.live_action_start_time===null?"--":wi(r.live_action_start_time)),this.renderKickoffDetail("First touch",r.first_touch_time===null?"--":wi(r.first_touch_time)),this.renderKickoffDetail("Resolution",wi(r.end_time)),this.renderKickoffDetail("After first touch",this.formatSeconds(r.advantage_seconds_after_first_touch)));const _=document.createElement("div");_.className="kickoff-strategy-list",_.append(this.renderKickoffTeamStrategy("Blue",r.team_zero_taker,r.team_zero_non_takers),this.renderKickoffTeamStrategy("Orange",r.team_one_taker,r.team_one_non_takers)),o.append(l,p,g,_),e.body.append(o)}getClosestKickoffEvent(e,t){return ec(e).filter(s=>s.payload.kind==="kickoff").sort((s,a)=>{const r=this.kickoffFrameDistance(s.payload.payload,t),o=this.kickoffFrameDistance(a.payload.payload,t);return r!==o?r-o:s.payload.payload.start_frame-a.payload.payload.start_frame})[0]??null}kickoffFrameDistance(e,t){return t>=e.start_frame&&t<=e.end_frame?0:Math.min(Math.abs(t-e.start_frame),Math.abs(t-e.end_frame))}renderKickoffMetric(e,t){const i=document.createElement("div");i.className="kickoff-metric";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffDetail(e,t){const i=document.createElement("div");i.className="kickoff-detail-row";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffTeamStrategy(e,t,i){const s=document.createElement("section");s.className=`kickoff-strategy-team ${e==="Blue"?"team-blue":"team-orange"}`;const a=document.createElement("h4");a.textContent=e,s.append(a);const r=document.createElement("p");if(r.className="kickoff-strategy-line",r.textContent=t?`${this.getPlayerName(t.player)}: ${this.formatKickoffLabelValue("kickoff_approach",t.approach)} from ${this.formatKickoffLabelValue("kickoff_spawn",t.spawn_position)} (${this.formatKickoffLabelValue("taker_outcome",t.outcome)}, ${this.formatSeconds(t.time_to_ball)})`:"No taker detected",s.append(r),i.length>0){const o=document.createElement("ul");o.className="kickoff-support-list";for(const l of i){const c=document.createElement("li");c.textContent=`${this.getPlayerName(l.player)}: ${this.formatKickoffLabelValue("support_behavior",l.support_behavior)} from ${this.formatKickoffLabelValue("kickoff_spawn",l.spawn_position)}`,o.append(c)}s.append(o)}return s}formatOutcome(e){return e.winning_team_is_team_0===!0?"Blue wins":e.winning_team_is_team_0===!1?"Orange wins":e.outcome==="neutral"?"Neutral":"Unknown"}formatFirstTouch(e){if(!e.first_touch_player)return"--";const t=e.first_touch_team_is_team_0===!0?"Blue":e.first_touch_team_is_team_0===!1?"Orange":"Unknown",i=e.first_touch_time===null?"--":wi(e.first_touch_time);return`${t} · ${this.getPlayerName(e.first_touch_player)} · ${i}`}formatAdvantage(e){if(e.advantage==="no_advantage")return"No advantage";const t=e.advantage_team_is_team_0===!0?"Blue":e.advantage_team_is_team_0===!1?"Orange":"Unknown",i=e.advantage.replace(/^team_(zero|one)_/,""),s=e.advantage_player?` · ${this.getPlayerName(e.advantage_player)}`:"",a=e.advantage_time===null?"":` · ${wi(e.advantage_time)}`;return`${t} ${this.formatKickoffLabelValue("kickoff_advantage",i)}${s}${a}`}formatContested(e){return e.kickoff_possession_outcome==="contested"?"Yes":e.kickoff_possession_team_is_team_0===!0?`No · Blue ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:e.kickoff_possession_team_is_team_0===!1?`No · Orange ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:`No · ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`}formatPossessionOutcome(e){return e.endsWith("_advantage")?"advantage":e.endsWith("_possession")?"possession":this.formatKickoffLabelValue("kickoff_possession_outcome",e)}formatKickoffType(e){return this.formatKickoffLabelValue("kickoff_type",e)}formatKickoffTitle(e){const t=e.payload.payload,i=this.formatKickoffDirection(t.kickoff_direction),s=[this.formatKickoffType(t.kickoff_type),i].filter(Boolean).join(" ");return[e.meta.label,s].filter(Boolean).join(" · ")}formatKickoffDirection(e){return e==="unknown"?"":`(${this.formatKickoffLabelValue("kickoff_direction",e)})`}formatNullableNumber(e,t){return e===null||!Number.isFinite(e)?"--":e.toFixed(t)}formatSeconds(e){return e===null||!Number.isFinite(e)?"--":`${e.toFixed(2)}s`}formatLabel(e){return e.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_").replaceAll("_"," ").replace(/\b\w/g,t=>t.toUpperCase())}formatKickoffLabelValue(e,t){const i=t.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_");return e==="kickoff_advantage"?this.formatLabel(i.replace(/^blue_/,"").replace(/^orange_/,"")):e==="kickoff_possession_outcome"?this.formatLabel(i.replace(/^blue_/,"Blue ").replace(/^orange_/,"Orange ")):this.formatLabel(i)}teamClassFromNullable(e){return e===null?null:na(e)}getPlayerName(e){const t=At(e);return this.options.getReplayPlayer()?.replay.players.find(i=>i.id===t)?.name??t}appendStatsWindowEmpty(e,t){const i=document.createElement("p");i.className="stat-window-empty",i.textContent=t,e.body.append(i)}renderScopedStatList(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i)s.append(this.renderStatRow(e,a,r,t?r.format(r.read(t)):"--"));e.body.append(s)}renderAllPlayersStats(e,t,i){const s=document.createElement("div");s.className="stats-window-team-list";for(const a of["blue","orange"]){const r=t.players.filter(h=>h.is_team_0===(a==="blue"));if(r.length===0)continue;const o=document.createElement("section");o.className=`stats-window-team-group ${this.getTeamScopeClass(a)}`;const l=document.createElement("header");l.className="stats-window-team-header";const c=document.createElement("h3");c.textContent=`${this.getTeamLabel(a)} team`;const u=document.createElement("span");u.textContent=`${r.length} player${r.length===1?"":"s"}`,l.append(c,u),o.append(l);const d=document.createElement("div");d.className="stats-window-entity-list";for(const h of r){const f=document.createElement("section");f.className=`stats-window-entity ${na(h.is_team_0)}`;const p=document.createElement("h4");p.className="stats-window-entity-title",p.textContent=h.name,f.append(p);for(const{entry:g,definition:_}of i)f.append(this.renderStatRow(e,g,_,_.format(_.read(h))));d.append(f)}o.append(d),s.append(o)}e.body.append(s)}renderAllTeamsStats(e,t,i){const s=document.createElement("div");s.className="stats-window-entity-list";for(const a of["blue","orange"]){const r=this.getTeamSnapshot(t,a),o=document.createElement("section");o.className=`stats-window-entity ${this.getTeamScopeClass(a)}`;const l=document.createElement("h3");l.className="stats-window-entity-title",l.textContent=this.getTeamLabel(a),o.append(l);for(const{entry:c,definition:u}of i)o.append(this.renderStatRow(e,c,u,r?u.format(u.read(r)):"--"));s.append(o)}e.body.append(s)}renderAdHocStats(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i){const o=this.getAdHocTarget(t,r,a.targetId);s.append(this.renderStatRow(e,a,r,o?r.format(r.read(o)):"--"))}e.body.append(s)}getAdHocTarget(e,t,i){return t.scope==="player"?e.players.find(s=>At(s.player_id)===i)??e.players[0]??null:this.getTeamSnapshot(e,i==="orange"?"orange":"blue")}renderStatRow(e,t,i,s){const a=document.createElement("div");a.className="stats-window-stat-row";const r=document.createElement("span");if(r.className="stats-window-stat-name",r.textContent=i.label,e.kind==="ad-hoc"){const c=document.createElement("select");c.className="stats-window-stat-target";const u=this.getStatTargetTeamClass(i,t.targetId);u&&c.classList.add(u),i.scope==="player"?this.appendGroupedPlayerOptions(c,t.targetId):c.append(new Option("Blue","blue",t.targetId==="blue",t.targetId==="blue"),new Option("Orange","orange",t.targetId==="orange",t.targetId==="orange")),c.value=t.targetId??"",c.addEventListener("change",()=>{const d=c.value;if(e.entries.some(f=>f!==t&&f.statId===t.statId&&f.targetId===d)){this.renderStatsWindow(e);return}const h=e.entries.findIndex(f=>f.key===t.key);h>=0&&(e.entries[h]={key:`${e.id}:${t.statId}:${d}`,statId:t.statId,targetId:d}),this.renderStatsWindow(e),this.options.requestConfigSync()}),r.append(" ",c)}const o=document.createElement("span");o.className="stats-window-stat-value",o.textContent=s;const l=document.createElement("button");return l.type="button",l.className="stats-window-stat-remove",l.textContent="x",l.addEventListener("click",()=>{this.removeStatFromWindow(e,t.key),this.renderStatsWindow(e),this.options.requestConfigSync()}),a.append(r,o,l),a}}function Q$(n){return new J$(n)}const eW=new Set(["module:dodge","module:touch","module:powerslide"]),tW=["stats-stream:"],ch=["#3b82f6","#06b6d4","#22c55e","#a855f7","#f97316","#ef4444","#f59e0b","#ec4899"],df="#d1d9e0",jg=ch[0],Zg=ch[4],nW=[{id:"core",label:"Shots, saves, assists",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="shot"||e.kind==="save"||e.kind==="assist")}},{id:"demo",label:"Demos",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="demo")}}],iW=[];function e1(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function t1(n){if(typeof n=="string"&&n.length>0)return n;if(!e1(n))return null;const[e,t]=Object.entries(n)[0]??[];return!e||t==null?null:typeof t=="string"||typeof t=="number"?`${e}:${t}`:`${e}:${JSON.stringify(t)}`}function n1(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>e.slice(0,1).toUpperCase()).join("").slice(0,3)||"E"}function sW(n){if(typeof n!="number"||!Number.isFinite(n))return null;const e=Math.abs(n)<1?2:1;return`${n.toFixed(e).replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}s`}function Wi(n){return typeof n!="string"||n.length===0?null:n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function aW(n){return n==="team_zero_side"?"Blue side":n==="team_one_side"?"Orange side":n==="neutral"?"Neutral zone":Wi(n)}function rW(n){const e=Wi(n);return e?`${e.toLowerCase()} third`:null}function oW(n){return n==="team_zero_third"?"Blue third":n==="team_one_third"?"Orange third":n==="neutral_third"?"Neutral third":Wi(n)}function lW(n){return n==="team_zero"?"Blue":n==="team_one"?"Orange":n==="neutral"?"Neutral":Wi(n)}function ud(n){return e1(n.payload.payload)?n.payload.payload:{}}function i1(n){return n===!0?jg:n===!1?Zg:null}function cW(n){return n==="team_zero_side"?jg:n==="team_one_side"?Zg:n==="neutral"?df:null}function uW(n){return n==="team_zero"?jg:n==="team_one"?Zg:n==="neutral"?df:null}function dW(n){return typeof n=="boolean"?i1(n):null}const hW={ball_half(n){return cW(ud(n).field_half)},possession(n){return uW(ud(n).possession_state)},player_possession(n){return dW(ud(n).is_team_0)}};function s1(n,e,t){return hW[n]?.(e)??i1(t)??df}function ui(n){return n.filter(e=>!!e).join(" | ")}function fW({event:n,playerName:e,streamLabel:t,teamLabel:i}){const s=ud(n),a=sW(s.duration);if(n.payload.kind==="ball_half"){const r=aW(s.field_half),o=s.active===!1?"Ball half inactive":r?`Ball on ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="ball_third"){const r=oW(s.field_third),o=s.active===!1?"Ball third inactive":r?`Ball in ${r.toLowerCase()}`:null;return ui([o??t,a])}if(n.payload.kind==="territorial_pressure"){const r=Wi(s.end_reason),o=`${i??""} territorial pressure`.trim();return ui([r?`${o} ended: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="possession"){const r=lW(s.possession_state),o=rW(s.field_third),l=r?`${r} possession`:t;return ui([l,o,a])}if(n.payload.kind==="controlled_play"){const r=e?`${e} controlled play`:t;return ui([r,a])}if(n.payload.kind==="ball_carry"){const r=e?`${e} ${t.toLowerCase()}`:t;return ui([r,a])}if(n.payload.kind==="player_activity"){const r=Wi(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="field_third"){const r=Wi(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} third`:o,a])}if(n.payload.kind==="field_half"){const r=Wi(s.state),o=e?`${e} positioning`:t;return ui([r?`${o} in ${r.toLowerCase()} half`:o,a])}if(n.payload.kind==="ball_depth"){const r=Wi(s.state),o=e?`${e} ball depth`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="depth_role"){const r=Wi(s.state),o=e?`${e} depth role`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="shadow_defense"){const r=e?`${e} shadow defense`:t;return ui([r,a])}if(n.payload.kind==="rotation_role"){const r=Wi(s.state),o=e?`${e} rotation`:t;return ui([r?`${o}: ${r.toLowerCase()}`:o,a])}return e?`${e} ${t.toLowerCase()}`:t}function pW(n,e,t){const i=Ai(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{const o=a.meta.timing.type==="moment"?{time:a.meta.timing.time,frame:a.meta.timing.frame}:{time:a.meta.timing.end_time,frame:a.meta.timing.end_frame},l=t1(a.meta.primary_player),c=l?s.get(l)??l:null,u=a.meta.team_is_team_0??null,d=u==null?null:u?"Blue":"Orange",h=a.meta.id||`${e}:${o.frame??o.time}:${r}`,f=s1(e,a,u);return[{id:`stats-stream:${h}`,time:n.replay.frames[o.frame??-1]?.time??o.time,frame:o.frame,kind:e,label:fW({event:a,playerName:c,streamLabel:i,teamLabel:d}),shortLabel:n1(e),playerId:l,playerName:c,isTeamZero:u,color:f}]})}function mW(n,e,t){const i=Ai(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{if(a.meta.timing.type!=="span")return[];const o={startTime:a.meta.timing.start_time,endTime:a.meta.timing.end_time,startFrame:a.meta.timing.start_frame,endFrame:a.meta.timing.end_frame},l=a.meta.team_is_team_0??null,c=l==null?null:l?"Blue":"Orange",u=t1(a.meta.primary_player),d=u?s.get(u)??u:null,h=s1(e,a,l),f=a.meta.id||`${e}:${o.startFrame??o.startTime}:${o.endFrame??o.endTime}:${r}`,p=d?`${d} ${i.toLowerCase()}`:c?`${c} ${i.toLowerCase()}`:i;let g=`stats-stream:${e}`,_=i;return a.meta.scope==="player"&&u?(g=`stats-stream:${e}:player:${u}`,_=d?`${d} ${i.toLowerCase()}`:i):a.meta.scope==="team"&&l!=null&&(g=`stats-stream:${e}:team:${l?"0":"1"}`,_=c?`${c} ${i.toLowerCase()}`:i),[{id:`stats-stream:${f}`,startTime:n.replay.frames[o.startFrame??-1]?.time??o.startTime,endTime:Math.max(n.replay.frames[o.startFrame??-1]?.time??o.startTime,n.replay.frames[o.endFrame??-1]?.time??o.endTime),lane:g,laneLabel:_,label:p,shortLabel:n1(e),isTeamZero:l,color:h}]}).sort((a,r)=>a.startTime!==r.startTime?a.startTime-r.startTime:(a.id??"").localeCompare(r.id??""))}function _W(n,e,t,i){return[...new Set([...XT,...ec(n.statsTimeline).map(a=>a.meta.stream)])].flatMap(a=>{const r=ec(n.statsTimeline).filter(u=>u.meta.stream===a);if(i.has(a)&&r.length>0)return[];const o=r.some(u=>u.meta.timing.type==="span"),l=o?mW(n,a,r):[],c=pW(n,a,r);return[{id:`stats-stream:${a}`,playlistId:`stats-stream:${a}`,timelineKey:`stats-stream:${a}`,timelineId:`stats-stream:${a}`,group:"Event streams",label:Ai(a),count:o?l.length:c.length,active:e.has(`stats-stream:${a}`),buildTimelineEvents(){return o?[]:c},buildPlaylistEvents(){return c},buildTimelineRanges:o?()=>l:void 0,setActive(u){t(`stats-stream:${a}`,u)}}]})}function gW(n){return new Set([...n.filter(e=>e.getTimelineEvents).map(e=>e.id),...NE])}function yW(){return[...NE].sort((n,e)=>Ai(n).localeCompare(Ai(e)))}function vW({ctx:n,modules:e,activeTimelineEventSourceIds:t,activeMechanicTimelineKinds:i,toggleEventSource:s,setMechanicTimelineKind:a}){if(!n)return[];const r=[];for(const o of nW){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`replay:${o.id}`,timelineKey:`events:${o.id}`,timelineId:`events:${o.id}`,group:"Replay",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of e.filter(l=>l.getTimelineEvents)){const l=o.getTimelineEvents?.(n)??[],c=l.length;r.push({id:o.id,playlistId:`module:${o.id}`,timelineKey:`module:${o.id}`,timelineId:`module:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of iW){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`extra:${o.id}`,timelineKey:`extra:${o.id}`,timelineId:`extra:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}r.push(..._W(n,t,s,gW(e)));for(const o of yW()){const l=FE[o](n.statsTimeline,n.replay),c=l.length;r.push({id:`mechanic:${o}`,playlistId:`mechanic:${o}`,timelineKey:`mechanic:${o}`,timelineId:`mechanic:${o}`,group:"Event types",label:Ai(o),count:c,active:i.has(o),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){a(o,u)}})}return r.sort((o,l)=>o.label.localeCompare(l.label))}function bW(n,e){if(!n)return[];const t=[{id:"replay:goals",group:"Replay",label:"Goals",events:n.replay.timelineEvents.filter(s=>s.kind==="goal")}],i=e.map(s=>({id:s.playlistId,group:s.group,label:s.label,events:s.buildPlaylistEvents()}));return[...t,...i]}function E_(n,e){const t=n.map(i=>i.id);return e===null?new Set(t.filter(i=>!eW.has(i)&&!tW.some(s=>i.startsWith(s)))):new Set(t.filter(i=>e.has(i)))}function xW(n,e){const t=n.playerId??null,i=t?e.findIndex(s=>s.id===t):-1;return i>=0?ch[i%ch.length]:n.color??df}function wW({sources:n,activeSourceIds:e,replayPlayers:t}){const i=E_(n,e);return n.filter(s=>i.has(s.id)).flatMap(s=>s.events.map((a,r)=>({key:`${s.id}:${a.id??`${a.kind}:${a.time}:${r}`}`,sourceId:s.id,sourceLabel:s.label,event:a,color:xW(a,t)}))).sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:(s.event.label??s.sourceLabel).localeCompare(a.event.label??a.sourceLabel))}class SW{constructor(e){this.options=e}getSources(e=this.options.getContext()){return vW({ctx:e,modules:this.options.modules,activeTimelineEventSourceIds:this.options.getActiveTimelineEventSourceIds(),activeMechanicTimelineKinds:this.options.getActiveMechanicTimelineKinds(),toggleEventSource:this.options.toggleEventSource,setMechanicTimelineKind:this.options.setMechanicTimelineKind})}countVisibleSources(e){return e.replay.timelineEvents.filter(i=>i.kind==="goal").length+this.getSources(e).filter(i=>i.active).reduce((i,s)=>i+s.count,0)}render(){const{body:e}=this.options;e.replaceChildren();const t=this.getSources();if(t.length===0){const d=document.createElement("p");d.className="stat-window-empty",d.textContent="No events loaded.",e.append(d);return}const i=document.createElement("div");i.className="mechanics-actions";const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.addEventListener("click",()=>{for(const d of t)d.setActive(!0);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const a=document.createElement("span");a.textContent="All events";const r=document.createElement("strong");r.textContent=`${t.length}`,s.append(a,r);const o=document.createElement("button");o.type="button",o.className="module-summary-item",o.addEventListener("click",()=>{for(const d of t)d.setActive(!1);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const l=document.createElement("span");l.textContent="No events";const c=document.createElement("strong");c.textContent="Off",o.append(l,c),i.append(s,o),e.append(i);const u=this.renderSourceList(t);u&&e.append(u)}renderSourceList(e){if(e.length===0)return null;const t=document.createElement("div");t.className="module-list mechanics-list mechanics-event-list",t.style.setProperty("--event-source-columns",`${TW(e.length)}`);for(const i of e){const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.dataset.active=i.active?"true":"false",s.setAttribute("aria-pressed",i.active?"true":"false"),s.addEventListener("click",()=>{i.setActive(!i.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderTimelineEventCount()});const a=document.createElement("span");a.textContent=i.label;const r=document.createElement("strong");r.textContent=`${i.active?"On":"Off"} ${i.count}`,s.append(a,r),t.append(s)}return t}}function TW(n){return window.innerWidth<640?1:window.innerWidth<900?n>=7?2:1:n>=13?3:n>=7?2:1}function MW(n){return new SW(n)}const EW=new Set(["ceiling-shot","fifty-fifty","ball_half",WE,"absolute-positioning","dodge","speed-flip","touch"]),Vx="touch";class CW{constructor(e){this.options=e}renderSummary(){const{summary:e}=this.options.elements;e.replaceChildren();const t=this.options.getTimelineSources(),i=t.map(o=>this.renderTimelineSourceToggle(o)),s=[],a=[],r=this.options.getContext();for(const o of this.options.modules){const l=EW.has(o.id);!o.getTimelineEvents&&!o.getTimelineRanges&&!l||(t.length===0&&o.getTimelineEvents&&i.push(this.renderCapabilityToggle(o.id,fm(o,"events"),"events")),o.getTimelineRanges&&s.push(this.renderCapabilityToggle(o.id,fm(o,"ranges"),"ranges",r?o.getTimelineRanges(r).length:void 0)),l&&a.push(this.renderCapabilityToggle(o.id,fm(o,"effects"),"effects")))}a.push(this.renderBoostPickupAnimationToggle()),e.append(hm("Timeline markers",i),hm("Timeline ranges",s),hm("In-game visualizations",a))}renderSettings(){const{settings:e}=this.options.elements;e.replaceChildren();const t=this.options.getContext(),i=this.options.getActiveModules().filter(s=>s.id!=="boost"&&s.id!==Vx).map(s=>s.renderSettings?.(t)??null).filter(s=>s instanceof HTMLElement);if(i.length===0){e.hidden=!0,this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow();return}e.hidden=!1,e.append(...i),this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow()}renderBoostPickupAnimationToggle(){const e=this.options.getBoostPickupAnimationEnabled(),t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e?"true":"false",t.setAttribute("aria-pressed",e?"true":"false"),t.addEventListener("click",this.options.toggleBoostPickupAnimation);const i=document.createElement("span");i.textContent="Boost pickup animation";const s=document.createElement("strong");return s.textContent=e?"On":"Off",t.append(i,s),t}renderCapabilityToggle(e,t,i,s){const r=this.options.getActiveCapabilityIds(i).has(e),o=document.createElement("button");o.type="button",o.className="module-summary-item",o.dataset.active=r?"true":"false",o.setAttribute("aria-pressed",r?"true":"false"),o.addEventListener("click",()=>{this.options.toggleCapability(e,i,!this.options.getActiveCapabilityIds(i).has(e))});const l=document.createElement("span");l.textContent=t;const c=document.createElement("strong");return c.textContent=Gx(r,s),o.append(l,c),o}renderTimelineSourceToggle(e){const t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e.active?"true":"false",t.setAttribute("aria-pressed",e.active?"true":"false"),t.addEventListener("click",()=>{e.setActive(!e.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync(),this.renderSummary()});const i=document.createElement("span");i.textContent=AW(e);const s=document.createElement("strong");return s.textContent=Gx(e.active,e.count),t.append(i,s),t}renderBoostPickupFiltersWindow(){const e=this.options.getContext(),t=this.options.boostPickupFilters.renderSettings(e,{showHeader:!1});this.options.elements.boostPickupFilters.replaceChildren(t)}renderTouchControlsWindow(){const e=this.options.getContext(),i=this.options.modules.find(s=>s.id===Vx)?.renderSettings?.(e)??null;this.options.elements.touchControls.replaceChildren(),i instanceof HTMLElement&&this.options.elements.touchControls.append(i)}}function hm(n,e){const t=document.createElement("section");t.className="module-summary-group";const i=document.createElement("h3");i.textContent=n;const s=document.createElement("div");return s.className="module-list",s.append(...e),t.append(i,s),t}function Gx(n,e){const t=n?"On":"Off";return e==null?t:`${t} ${e}`}function AW(n){return n.group==="Replay"?n.label:`${n.label} events`}function fm(n,e){const t={"absolute-positioning:ranges":"Position zones","backboard:events":"Backboard","ball-carry:events":"Ball carry","boost:ranges":"Boost pickup timeline","bump:events":"Bump","ceiling-shot:events":"Ceiling shot","demo:events":"Demo","dodge-reset:events":"Dodge refresh","double-tap:events":"Double tap","fifty-fifty:events":"50/50","fifty-fifty:ranges":"50/50","dodge:events":"Dodge","half-flip:events":"Half flip","possession:ranges":"Possession","powerslide:events":"Powerslide","powerslide:ranges":"Powerslide","ball_half:ranges":"Half control","ball_third:ranges":"Third control","rush:ranges":"Rush","speed-flip:events":"Speed flip","touch:events":"Touch","wavedash:events":"Wavedash"},i={"absolute-positioning":"Position zones","ceiling-shot":"Ceiling shot labels","fifty-fifty":"50/50 labels",dodge:"Dodge impulse arrows",ball_half:"Half control","relative-positioning":"Player roles","speed-flip":"Speed flip labels",touch:"Touch labels"};return e==="effects"?i[n.id]??n.label:t[`${n.id}:${e}`]??`${n.label} timeline`}function RW(n){return new CW(n)}var gn=Uint8Array,fi=Uint16Array,Jg=Int32Array,hf=new gn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ff=new gn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),C_=new gn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),a1=function(n,e){for(var t=new fi(31),i=0;i<31;++i)t[i]=e+=1<>1|(Ut&21845)<<1;Zs=(Zs&52428)>>2|(Zs&13107)<<2,Zs=(Zs&61680)>>4|(Zs&3855)<<4,R_[Ut]=((Zs&65280)>>8|(Zs&255)<<8)>>1}var hs=(function(n,e,t){for(var i=n.length,s=0,a=new fi(e);s>l]=c}else for(o=new fi(i),s=0;s>15-n[s]);return o}),ha=new gn(288);for(var Ut=0;Ut<144;++Ut)ha[Ut]=8;for(var Ut=144;Ut<256;++Ut)ha[Ut]=9;for(var Ut=256;Ut<280;++Ut)ha[Ut]=7;for(var Ut=280;Ut<288;++Ut)ha[Ut]=8;var ic=new gn(32);for(var Ut=0;Ut<32;++Ut)ic[Ut]=5;var IW=hs(ha,9,0),LW=hs(ha,9,1),kW=hs(ic,5,0),DW=hs(ic,5,1),pm=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Ni=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},mm=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},Qg=function(n){return(n+7)/8|0},pf=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new gn(n.subarray(e,t))},OW=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],os=function(n,e,t){var i=new Error(e||OW[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,os),!t)throw i;return i},FW=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new gn(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new gn(s*3));var c=function(xe){var Ae=t.length;if(xe>Ae){var L=new gn(Math.max(Ae*2,xe));L.set(t),t=L}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Ni(n,d,1);var v=Ni(n,d+1,3);if(d+=3,v)if(v==1)f=LW,p=DW,g=9,_=5;else if(v==2){var x=Ni(n,d,31)+257,M=Ni(n,d+10,15)+4,C=x+Ni(n,d+5,31)+1;d+=14;for(var w=new gn(C),E=new gn(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Ni(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Ni(n,d,7),d+=3):y==18&&(W=11+Ni(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ne=w.subarray(x);g=pm(H),_=pm(ne),f=hs(H,g,1),p=hs(ne,_,1)}else os(1);else{var y=Qg(d)+4,b=n[y-4]|n[y-3]<<8,T=y+b;if(T>s){l&&os(0);break}o&&c(h+b),t.set(n.subarray(y,T),h),e.b=h+=b,e.p=d=T*8,e.f=u;continue}if(d>m){l&&os(0);break}}o&&c(h+131072);for(var oe=(1<>4;if(d+=F&15,d>m){l&&os(0);break}if(F||os(2),ke<256)t[h++]=ke;else if(ke==256){Ie=d,f=null;break}else{var Xe=ke-254;if(ke>264){var R=ke-257,De=hf[R];Xe=Ni(n,d,(1<>4;Z||os(3),d+=Z&15;var ne=PW[ae];if(ae>3){var De=ff[ae];ne+=mm(n,d)&(1<m){l&&os(0);break}o&&c(h+131072);var Se=h+Xe;if(h>8},cl=function(n,e,t){t<<=e&7;var i=e/8|0;n[i]|=t,n[i+1]|=t>>8,n[i+2]|=t>>16},_m=function(n,e){for(var t=[],i=0;ih&&(h=a[i].s);var f=new fi(h+1),p=P_(t[u-1],f,0);if(p>e){var i=0,g=0,_=p-e,m=1<<_;for(a.sort(function(x,M){return f[M.s]-f[x.s]||x.f-M.f});ie)g+=m-(1<>=_;g>0;){var y=a[i].s;f[y]=0&&g;--i){var b=a[i].s;f[b]==e&&(--f[b],++g)}p=e}return{t:new gn(f),l:p}},P_=function(n,e,t){return n.s==-1?Math.max(P_(n.l,e,t+1),P_(n.r,e,t+1)):e[n.s]=t},Wx=function(n){for(var e=n.length;e&&!n[--e];);for(var t=new fi(++e),i=0,s=n[0],a=1,r=function(l){t[i++]=l},o=1;o<=e;++o)if(n[o]==s&&o!=e)++a;else{if(!s&&a>2){for(;a>138;a-=138)r(32754);a>2&&(r(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(r(s),--a;a>6;a-=6)r(8304);a>2&&(r(a-3<<5|8208),a=0)}for(;a--;)r(s);a=1,s=n[o]}return{c:t.subarray(0,i),n:e}},ul=function(n,e){for(var t=0,i=0;i>8,n[s+2]=n[s]^255,n[s+3]=n[s+1]^255;for(var a=0;a4&&!E[C_[k-1]];--k);var O=c+5<<3,D=ul(s,ha)+ul(a,ic)+r,U=ul(s,h)+ul(a,g)+r+14+3*k+ul(M,E)+2*M[16]+3*M[17]+7*M[18];if(l>=0&&O<=D&&O<=U)return c1(e,u,n.subarray(l,l+c));var F,W,H,ne;if(Es(e,u,1+(U15&&(Es(e,u,ke[C]>>5&127),u+=ke[C]>>12)}}else F=IW,W=ha,H=kW,ne=ic;for(var C=0;C255){var Xe=De>>18&31;cl(e,u,F[Xe+257]),u+=W[Xe+257],Xe>7&&(Es(e,u,De>>23&31),u+=hf[Xe]);var Z=De&31;cl(e,u,H[Z]),u+=ne[Z],Z>3&&(cl(e,u,De>>5&8191),u+=ff[Z])}else cl(e,u,F[De]),u+=W[De]}return cl(e,u,F[256]),u+W[256]},NW=new Jg([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),u1=new gn(0),UW=function(n,e,t,i,s,a){var r=a.z||n.length,o=new gn(i+r+5*(1+Math.ceil(r/7e3))+s),l=o.subarray(i,o.length-s),c=a.l,u=(a.r||0)&7;if(e){u&&(l[0]=a.r>>3);for(var d=NW[e-1],h=d>>13,f=d&8191,p=(1<7e3||E>24576)&&(F>423||!c)){u=Xx(n,l,0,b,T,x,C,E,k,w-k,u),E=M=C=0,k=w;for(var W=0;W<286;++W)T[W]=0;for(var W=0;W<30;++W)x[W]=0}var H=2,ne=0,oe=f,pe=D-U&32767;if(F>2&&O==y(w-pe))for(var Ie=Math.min(h,F)-1,ke=Math.min(32767,w),Xe=Math.min(258,F);pe<=ke&&--oe&&D!=U;){if(n[w+H]==n[w+H-pe]){for(var De=0;DeH){if(H=De,ne=pe,De>Ie)break;for(var Z=Math.min(pe,De-2),ae=0,W=0;Wae&&(ae=ie,U=Se)}}}D=U,U=g[D],pe+=D-U&32767}if(ne){b[E++]=268435456|A_[H]<<18|$x[ne];var xe=A_[H]&31,Ae=$x[ne]&31;C+=hf[xe]+ff[Ae],++T[257+xe],++x[Ae],R=w+H,++M}else b[E++]=n[w],++T[n[w]]}}for(w=Math.max(w,R);w=r&&(l[u/8|0]=c,L=r),u=c1(l,u+1,n.subarray(w,L))}a.i=r}return pf(o,0,i+Qg(u)+s)},BW=function(n,e,t,i,s){if(!s&&(s={l:1},e.dictionary)){var a=e.dictionary.subarray(-32768),r=new gn(a.length+n.length);r.set(a),r.set(n,a.length),n=r,s.w=a.length}return UW(n,e.level==null?6:e.level,e.mem==null?s.l?Math.ceil(Math.max(8,Math.min(13,Math.log(n.length)))*1.5):20:12+e.mem,t,i,s)};function zW(n,e){return BW(n,e||{},0,0)}function d1(n,e){return FW(n,{i:2},e,e)}var Kx=typeof TextEncoder<"u"&&new TextEncoder,I_=typeof TextDecoder<"u"&&new TextDecoder,HW=0;try{I_.decode(u1,{stream:!0}),HW=1}catch{}var VW=function(n){for(var e="",t=0;;){var i=n[t++],s=(i>127)+(i>223)+(i>239);if(t+s>n.length)return{s:e,r:pf(n,t-1)};s?s==3?(i=((i&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,e+=String.fromCharCode(55296|i>>10,56320|i&1023)):s&1?e+=String.fromCharCode((i&31)<<6|n[t++]&63):e+=String.fromCharCode((i&15)<<12|(n[t++]&63)<<6|n[t++]&63):e+=String.fromCharCode(i)}};function GW(n,e){var t;if(Kx)return Kx.encode(n);for(var i=n.length,s=new gn(n.length+(n.length>>1)),a=0,r=function(c){s[a++]=c},t=0;ts.length){var o=new gn(a+8+(i-t<<1));o.set(s),s=o}var l=n.charCodeAt(t);l<128||e?r(l):l<2048?(r(192|l>>6),r(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|n.charCodeAt(++t)&1023,r(240|l>>18),r(128|l>>12&63),r(128|l>>6&63),r(128|l&63)):(r(224|l>>12),r(128|l>>6&63),r(128|l&63))}return pf(s,0,a)}function h1(n,e){var t;if(I_)return I_.decode(n);var i=VW(n),s=i.s,t=i.r;return t.length&&os(8),s}const L_=1,k_="cfg",qx="cfgDebug";function $W(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"")}function WW(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a!Ri(e)||!o8(e.id)?null:{id:e.id,placement:p1(e.placement)}).filter(e=>e!==null):[]}function a8(n){return Array.isArray(n)?n.map(e=>!Ri(e)||typeof e.id!="string"||!l8(e.kind)?null:{id:e.id,kind:e.kind,placement:p1(e.placement),playerId:m1(e.playerId)??null,team:e.team==="orange"?"orange":e.team==="blue"?"blue":null,entries:r8(e.entries)}).filter(e=>e!==null):[]}function r8(n){return Array.isArray(n)?n.map(e=>!Ri(e)||typeof e.statId!="string"?null:{statId:e.statId,targetId:typeof e.targetId=="string"?e.targetId:void 0}).filter(e=>e!==null):[]}function p1(n){const e=Ri(n)?n:{},t=Ri(e.viewport)?e.viewport:{};return{x:Rn(e.x)??8,y:Rn(e.y)??8,viewport:{width:uh(t.width)??1,height:uh(t.height)??1},zIndex:Rn(e.zIndex),visible:Zn(e.visible)??!0}}function o8(n){return n==="camera"||n==="scoreboard"||n==="playback"||n==="recording"||n==="training-pack"||n==="mechanics"||n==="event-playlist"||n==="mechanics-review"||n==="replay-loading"||n==="boost-pickups"||n==="touch-controls"||n==="touch-legend"||n==="shot-visualization"||n==="missed-events"}function l8(n){return n==="player"||n==="team"||n==="all-players"||n==="all-teams"||n==="kickoff-overview"||n==="goals-overview"||n==="ad-hoc"}function Ri(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Rn(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function uh(n){const e=Rn(n);return e!==void 0&&e>0?e:void 0}function Zn(n){return typeof n=="boolean"?n:void 0}function m1(n){return n===null?null:typeof n=="string"?n:void 0}function dl(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function Yx(n,e,t){return Math.min(t,Math.max(e,n))}const c8=["camera","scoreboard","playback","recording","training-pack","mechanics","event-playlist","mechanics-review","replay-loading","boost-pickups","touch-controls","touch-legend","shot-visualization","missed-events"];class u8{constructor(e){this.options=e}nextZIndex=30;reset(){this.nextZIndex=30}bringToFront(e){e.style.zIndex=`${this.nextZIndex++}`}show(e){const t=this.mustWindow(e);t.hidden=!1,this.bringToFront(t),this.options.requestConfigSync()}toggle(e){const t=this.mustWindow(e);t.hidden=!t.hidden,t.hidden||this.bringToFront(t),this.options.requestConfigSync()}hide(e){const t=this.mustWindow(e);t.hidden=!0,this.options.requestConfigSync()}readPlacement(e){const t=Number.parseInt(e.style.zIndex,10);return{x:this.readCoordinate(e,"--window-x"),y:this.readCoordinate(e,"--window-y"),viewport:jx(),zIndex:Number.isFinite(t)?t:void 0,visible:!e.hidden}}applyPlacement(e,t){const i=ZW(t,jx());e.style.setProperty("--window-x",`${i.x}px`),e.style.setProperty("--window-y",`${i.y}px`),e.hidden=!t.visible,t.zIndex!==void 0&&(e.style.zIndex=`${t.zIndex}`,this.nextZIndex=Math.max(this.nextZIndex,t.zIndex+1))}getSingletonConfigs(){const e=[],t=this.options.getRoot();for(const i of c8){const s=t.querySelector(`[data-window-id="${i}"]`);s&&e.push({id:i,placement:this.readPlacement(s)})}return e}applySingletonConfigs(e){const t=this.options.getRoot();for(const i of e){const s=t.querySelector(`[data-window-id="${i.id}"]`);s&&this.applyPlacement(s,i.placement)}}installDragging(e,t){e.addEventListener("pointerdown",i=>{if(!(i.target instanceof HTMLElement)||d8(i.target))return;const s=i.target.closest("[data-window-id]");if(!s||s.hidden)return;this.bringToFront(s);const a=i.clientX,r=i.clientY,o=s.getBoundingClientRect(),l=i.pointerId;s.setPointerCapture(l),i.preventDefault();const c=d=>{const h=Math.max(8,Math.min(window.innerWidth-120,o.left+d.clientX-a)),f=Math.max(8,Math.min(window.innerHeight-100,o.top+d.clientY-r));s.style.setProperty("--window-x",`${h}px`),s.style.setProperty("--window-y",`${f}px`)},u=()=>{s.releasePointerCapture(l),s.removeEventListener("pointermove",c),s.removeEventListener("pointerup",u),s.removeEventListener("pointercancel",u),this.options.requestConfigSync()};s.addEventListener("pointermove",c),s.addEventListener("pointerup",u),s.addEventListener("pointercancel",u)},{signal:t})}mustWindow(e){const t=this.options.getRoot().querySelector(`[data-window-id="${e}"]`);if(!t)throw new Error(`Missing window for id: ${e}`);return t}readCoordinate(e,t){const i=e.style.getPropertyValue(t).trim(),s=getComputedStyle(e).getPropertyValue(t).trim(),a=i||s,r=Number.parseFloat(a);if(Number.isFinite(r))return r;const o=e.getBoundingClientRect();return t==="--window-y"?o.top:o.left}}function jx(){return{width:Math.max(1,window.innerWidth),height:Math.max(1,window.innerHeight)}}function d8(n){return n instanceof Element&&!!n.closest("button, input, select, textarea, option, label, a, [data-no-drag]")}function h8(n){return new u8(n)}class f8{constructor(e){this.options=e}activeSourceIds=null;autoFollow=!0;lastActiveKey=null;activeItem=null;renderedItems=[];reset(){this.activeSourceIds=null,this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[]}render(){this.options.body.replaceChildren(),this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[];const e=this.options.getSources();if(e.length===0){const _=document.createElement("p");_.className="stat-window-empty",_.textContent=this.options.getReplayPlayer()?"No events loaded.":"Load a replay to see events.",this.options.body.append(_);return}const t=E_(e,this.activeSourceIds),i=wW({sources:e,activeSourceIds:this.activeSourceIds,replayPlayers:this.options.getReplayPlayer()?.replay.players??[]}),s=document.createElement("div");s.className="event-playlist-toolbar";const a=document.createElement("details");a.className="event-playlist-filter",a.dataset.noDrag="true";const r=document.createElement("summary");r.textContent=`Filters ${t.size}/${e.length}`,a.append(r);const o=document.createElement("div");o.className="event-playlist-filter-panel";const l=document.createElement("div");l.className="event-playlist-filter-actions";const c=document.createElement("button");c.type="button",c.textContent="All",c.addEventListener("click",()=>{this.activeSourceIds=new Set(e.map(m=>m.id)),this.lastActiveKey=null,this.render();const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_)});const u=document.createElement("button");u.type="button",u.textContent="None",u.addEventListener("click",()=>{this.activeSourceIds=new Set,this.lastActiveKey=null,this.render()}),l.append(c,u),o.append(l);const d=new Map;for(const _ of e){const m=d.get(_.group)??[];m.push(_),d.set(_.group,m)}for(const[_,m]of d){const v=document.createElement("section");v.className="event-playlist-filter-group";const y=document.createElement("h3");y.textContent=_,v.append(y);for(const b of m){const T=document.createElement("label");T.className="toggle event-playlist-filter-option";const x=document.createElement("input");x.type="checkbox",x.checked=t.has(b.id),x.addEventListener("change",()=>{this.setSourceSelection(e,C=>{x.checked?C.add(b.id):C.delete(b.id)})});const M=document.createElement("span");M.textContent=`${b.label} (${b.events.length})`,T.append(x,M),v.append(T)}o.append(v)}a.append(o);const h=document.createElement("label");h.className="toggle event-playlist-follow";const f=document.createElement("input");f.type="checkbox",f.checked=this.autoFollow,f.addEventListener("change",()=>{this.autoFollow=f.checked;const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_,{forceScroll:!0})});const p=document.createElement("span");p.textContent="Auto-follow",h.append(f,p),s.append(a,h);const g=document.createElement("div");if(g.className="event-playlist-list",g.dataset.noDrag="true",i.length===0){const _=document.createElement("p");_.className="stat-window-empty",t.size===0?_.textContent="No event types selected.":_.textContent="No events in selected event types.",g.append(_)}else for(const _ of i){const m=document.createElement("button");m.type="button",m.className="event-playlist-item",m.dataset.eventKey=_.key,m.dataset.eventTime=`${_.event.time}`,m.style.setProperty("--event-color",_.color),Number.isFinite(_.event.time)&&this.renderedItems.push({key:_.key,time:_.event.time,element:m}),m.addEventListener("click",()=>{this.options.cueTimelineEvent(_.event)});const v=document.createElement("span");v.className="event-playlist-time",v.textContent=this.options.formatTime(_.event.time);const y=document.createElement("span");y.className="event-playlist-main";const b=document.createElement("strong");b.textContent=_.event.label??_.sourceLabel;const T=document.createElement("span");T.textContent=[_.event.playerName??null,_.event.frame!==void 0?`frame ${_.event.frame}`:null,_.sourceLabel].filter(x=>!!x).join(" · "),y.append(b,T),m.append(v,y),g.append(m)}this.options.body.append(s,g)}syncTimeline(e,t={}){if(!this.options.body.querySelector(".event-playlist-list"))return;const s=this.getActiveItem(e.currentTime),a=s?.dataset.eventKey??null;a===this.lastActiveKey&&!t.forceScroll||(this.activeItem?.isConnected?this.activeItem.dataset.active="false":this.activeItem&&(this.activeItem=null),s?(s.dataset.active="true",this.activeItem=s,(this.autoFollow||t.forceScroll)&&s.scrollIntoView({block:"nearest"})):this.activeItem=null,this.lastActiveKey=a)}setSourceSelection(e,t){const i=E_(e,this.activeSourceIds);t(i),this.activeSourceIds=i,this.lastActiveKey=null,this.render();const s=this.options.getReplayPlayer()?.getState();s&&this.syncTimeline(s)}getActiveItem(e){const t=this.renderedItems;if(t.length===0)return null;let i=0,s=t.length-1;for(;ie.getConfig||e.applyConfig).map(e=>{const t={id:e.id};return e.id==="boost"&&(t.aliases=["boost-pickup-animation"]),e.getConfig&&(t.getConfig=()=>e.getConfig?.()),e.applyConfig&&(t.applyConfig=i=>e.applyConfig?.(i)),t})}function T8(n){return y8(g1(n))}function M8({replayPlayer:n,playbackRate:e,skipPostGoalTransitions:t,skipKickoffs:i}){const s=n?.getState();return{currentTime:s?.currentTime,playing:s?.playing,rate:s?.speed??mf(Number(e?.value??1)),skipPostGoalTransitions:n?s?.skipPostGoalTransitionsEnabled:t.checked,skipKickoffs:n?s?.skipKickoffsEnabled:i.checked}}function E8({replayPlayer:n,cameraControlsController:e}){const t=n?.getState(),i=t?pE(t):e?.ballCamMode;return{mode:t?.cameraViewMode,freePreset:e?.freeCameraPreset??null,attachedPlayerId:t?.attachedPlayerId,ballCam:i===void 0?void 0:i==="on",useReplayBallCam:i===void 0?void 0:i==="player",usePlayerCameraSettings:t?.customCameraSettings===null,autoPossession:e?.autoPossessionEnabled,customSettings:t?.customCameraSettings,nameplateLiftUu:e?.nameplateLiftUu}}function C8({playback:n,camera:e,activeTimelineEventSourceIds:t,activeTimelineRangeModuleIds:i,activeMechanicTimelineKinds:s,activeRenderEffectModuleIds:a,initialConfig:r,replayPlayer:o,boostPadOverlayEnabled:l,recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}){return{version:L_,playback:n,camera:e,overlays:{timelineEvents:[...t],timelineRanges:[...i],mechanics:[...s],renderEffects:[...a],...r?.overlays.pluginRenderEffects!==void 0?{pluginRenderEffects:[...r.overlays.pluginRenderEffects]}:{},...r?.overlays.pluginHudOverlay!==void 0?{pluginHudOverlay:r.overlays.pluginHudOverlay}:{},followedPlayerHud:!1,boostPads:l,boostPickupAnimation:o?.getState().boostPickupAnimationEnabled??!1,hitboxWireframes:o?.getState().hitboxWireframesEnabled??!1,hitboxOnlyMode:o?.getState().hitboxOnlyModeEnabled??!1},recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}}function A8(n,e,t){return{currentTime:n.currentTime,playing:n.playing,speed:n.rate,customCameraSettings:_1(e),cameraViewMode:e.mode,attachedPlayerId:e.attachedPlayerId,...jb(e)==="player"?{useReplayBallCam:!0}:{ballCamEnabled:jb(e)==="on"},boostPickupAnimationEnabled:t.overlays.boostPickupAnimation,hitboxWireframesEnabled:t.overlays.hitboxWireframes,hitboxOnlyModeEnabled:t.overlays.hitboxOnlyMode,skipPostGoalTransitionsEnabled:n.skipPostGoalTransitions,skipKickoffsEnabled:n.skipKickoffs}}function R8(n,e,t){console.groupCollapsed("[subtr-actor] stats player cfg load"),console.log("location.href",window.location.href),console.log("location.search",n.search||"(empty)"),console.log("location.hash",n.hash||"(empty)"),console.table([...n.searchParams.map(([i,s])=>({source:"search",name:i,value:s})),...n.hashParams.map(([i,s])=>({source:"hash",name:i,value:s}))]),console.log("cfg selected source",n.selectedSource??"(none)"),console.log("cfg selected raw text",n.selectedValue??"(none)"),console.log("cfg selected raw length",n.selectedValue?.length??0),console.log("cfg search values",n.searchValues),console.log("cfg hash values",n.hashValues),n.hashValues.length>0&&n.searchValues.length>0&&console.warn("Both hash and search contain cfg; hash cfg is used."),e&&(console.log("cfg normalized JSON",JSON.stringify(e,null,2)),console.log("cfg normalized object",e)),t&&console.error("cfg decode/apply error",t),console.groupEnd()}function Zx(n,e){const{style:t}=n.renderer.domElement;t.visibility=e?"hidden":"",t.pointerEvents=e?"none":""}function Jx(n,e={}){const t=e.destroyPlayer??!0,i=e.clearPlayerPluginHandles??!0,s=n.getUnsubscribe();s&&(s(),n.setUnsubscribe(null)),n.teardownActiveModules(),t&&(n.getReplayPlayer()?.destroy(),n.setReplayPlayer(null)),i&&(n.setCanvasRecorder(null),n.setTimelineOverlay(null)),n.setLoadedReplayName(null),n.setStatsTimeline(null),n.setStatsFrameLookup(null),n.setStatRegistry(nc()),n.clearTimelineEventSources(),n.clearTimelineRangeSources(),n.clearStandalonePlugins(),n.clearRenderCaches(),n.resetEventPlaylistWindow(),n.renderModuleSummary(),n.renderScoreboard(),n.renderTimelineEventCount(),n.renderMechanicsTimelineControls(),n.renderEventPlaylistWindow(),n.renderModuleSettings(),n.syncRecordingWindow()}async function P8(n,e,t){const{elements:i}=t;let s=null;i.statusReadout.textContent=n.preparingStatus,i.fileInput.disabled=!0,t.getReplayLoadModal()?.show(n.name,n.preparingStatus),t.setTransportEnabled(!1),t.getCameraControlsController()?.syncAvailability(),i.emptyState.hidden=t.getReplayPlayer()!==null,t.getReplayPlayer()?.pause();try{i.statusReadout.textContent="Parsing replay...",t.getReplayLoadModal()?.show(n.name,"Parsing replay...");const a=await e,{replay:r}=a,o=t.getReplayPlayer();if(o){Jx(t,{destroyPlayer:!1,clearPlayerPluginHandles:!1});const h=new Rw(a.raw);await o.replaceReplay(h,r,{preservePlayback:!1}),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(nc(null)),t.setReplayPlayer(o),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(o.subscribe(t.renderSnapshot));const f=t.getInitialConfig();if(f){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(f)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(p=>p.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(o.getState()),t.renderSnapshot(o.getState()),t.renderStatsWindows(o.getState().frameIndex),t.renderScoreboard(o.getState().frameIndex),t.syncEventPlaylistTimeline(o.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide();return}const l=u3({replayEventsLabel:"Replay",replayEvents:h=>t.withTimelineEventSeekTimes(t.getReplayTimelineEvents(h.replay))}),c=WN({onStatusChange:t.syncRecordingWindow});t.setCanvasRecorder(c);const u=t.getInitialConfig(),d=d3(i.viewport,a,{initialPlaybackRate:u?.playback.rate,initialCustomCameraSettings:_1(u?.camera),initialAttachedPlayerId:u?.camera.attachedPlayerId??null,initialCameraViewMode:u?.camera.mode,initialBoostPickupAnimationEnabled:u?.overlays.boostPickupAnimation??!1,initialHitboxWireframesEnabled:u?.overlays.hitboxWireframes??i.hitboxWireframes.checked,initialHitboxOnlyModeEnabled:u?.overlays.hitboxOnlyMode??i.hitboxOnlyMode.checked,initialSkipPostGoalTransitionsEnabled:i.skipPostGoalTransitions.checked,initialSkipKickoffsEnabled:i.skipKickoffs.checked,plugins:[bN({onSample:({renderFps:h,replayFps:f})=>{const p=document.getElementById("render-fps-readout"),g=document.getElementById("replay-fps-readout");p&&(p.textContent=`${h.toFixed(0)} fps`),g&&(g.textContent=`${f.toFixed(0)} fps`)}}),Tu(x3({floatingLiftUu:()=>t.getCameraControlsController()?.nameplateLiftUu})),Tu(zN({includePickup:t.includeBoostPickupAnimationPickup})),Tu(c),Tu(l)]});if(s=d,Zx(d,!0),await d.ready,Jx(t),s=null,Zx(d,!1),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(nc(null)),t.setTimelineOverlay(l),t.setReplayPlayer(d),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(d.subscribe(t.renderSnapshot)),u){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(u)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(h=>h.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(d.getState()),t.renderSnapshot(d.getState()),t.renderStatsWindows(d.getState().frameIndex),t.renderScoreboard(d.getState().frameIndex),t.syncEventPlaylistTimeline(d.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide()}catch(a){throw t.getReplayLoadModal()?.hide(),s?.destroy(),t.getReplayPlayer()||(i.emptyState.hidden=!1,t.setCanvasRecorder(null)),t.syncRecordingWindow(),a}finally{i.fileInput.disabled=!1}}function I8(n){if(n<=0)return"--";const e=["B","KB","MB","GB"];let t=n,i=0;for(;t>=1024&&i=10?1:2;return`${t.toFixed(s)} ${e[i]}`}function L8(n){if(!n)return"No replay";if(n.error)return n.error;switch(n.state){case"idle":return"Idle";case"recording":return"Recording";case"stopping":return"Stopping";case"ready":return"Ready";case"error":return"Error"}}function k8({fpsValue:n,playbackRateValue:e}){const t=Number(n),i=Number(e);return{fps:Number.isFinite(t)?Math.max(1,Math.min(120,Math.trunc(t))):60,playbackRate:Number.isFinite(i)?Math.max(.1,i):1}}function D8(n,e=new Date){const i=(n?.replace(/\.replay$/i,"")||"replay").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,""),s=e.toISOString().replace(/[:.]/g,"-");return`${i||"replay"}-${s}.webm`}function O8(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.append(i),i.click(),i.remove(),window.setTimeout(()=>URL.revokeObjectURL(t),0)}class F8{constructor(e){this.options=e}getConfigSnapshot(){const{elements:e}=this.options;return{fps:Number(e.fps.value),playbackRate:Number(e.playbackRate.value)}}applyConfig(e){const{elements:t}=this.options;e.fps!==void 0&&(t.fps.value=`${e.fps}`),e.playbackRate!==void 0&&(t.playbackRate.value=`${e.playbackRate}`)}sync(e=this.options.getCanvasRecorder()?.getStatus()??null){const{elements:t}=this.options,i=this.options.getCanvasRecorder()!==null&&this.options.getReplayPlayer()!==null,s=e?.state??"idle",a=s==="recording"||s==="stopping",r=(this.options.getCanvasRecorder()?.getRecording()??null)!==null;t.status.textContent=L8(e),t.elapsed.textContent=`${(e?.elapsedSeconds??0).toFixed(1)}s`,t.size.textContent=I8(e?.sizeBytes??0),t.type.textContent=e?.mimeType||"WebM",t.start.disabled=!i||a,t.fullReplay.disabled=!i||a,t.stop.disabled=!i||!a,t.download.disabled=!r||a,t.clear.disabled=!r||a,t.fps.disabled=a,t.playbackRate.disabled=a}installEventListeners(e){const{elements:t}=this.options;t.start.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(i)try{const{fps:s}=this.getRecordingOptions();i.start({fps:s}),this.sync()}catch(s){console.error("Failed to start recording:",s),this.options.setStatus(s instanceof Error?s.message:"Failed to start recording"),this.sync(i.getStatus())}},{signal:e}),t.fullReplay.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(!i)return;const{fps:s,playbackRate:a}=this.getRecordingOptions();i.recordFullReplay({fps:s,playbackRate:a,restorePlaybackState:!0}).catch(r=>{console.error("Failed to record replay:",r),this.options.setStatus(r instanceof Error?r.message:"Failed to record replay"),this.sync(this.options.getCanvasRecorder()?.getStatus()??null)}),this.sync()},{signal:e}),t.stop.addEventListener("click",()=>{this.options.getCanvasRecorder()?.stop().catch(i=>{console.error("Failed to stop recording:",i),this.options.setStatus(i instanceof Error?i.message:"Failed to stop recording")}),this.sync()},{signal:e}),t.download.addEventListener("click",()=>{const i=this.options.getCanvasRecorder()?.getRecording();i&&O8(i,D8(this.options.getLoadedReplayName()))},{signal:e}),t.clear.addEventListener("click",()=>{try{this.options.getCanvasRecorder()?.clear(),this.sync()}catch(i){console.error("Failed to clear recording:",i)}},{signal:e}),t.fps.addEventListener("change",this.options.requestConfigSync,{signal:e}),t.playbackRate.addEventListener("change",this.options.requestConfigSync,{signal:e})}getRecordingOptions(){const{elements:e}=this.options;return k8({fpsValue:e.fps.value,playbackRateValue:e.playbackRate.value})}}function N8(n){return new F8(n)}class U8{constructor(e){this.options=e}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0){const{body:t}=this.options;t.replaceChildren();const i=this.options.getStatsFrameLookup(),s=i?zt(i,e):null,a=this.options.getReplayPlayer()?.replay??null;if(!s||!a){const o=document.createElement("p");o.className="scoreboard-empty",o.textContent="Load a replay to show the scoreboard.",t.append(o);return}const r=document.createElement("div");r.className="scoreboard-scoreline",r.append(Qx(s.team_zero?.core.goals,!0),z8(),Qx(s.team_one?.core.goals,!1)),t.append(r)}}function B8(n){return typeof n=="number"&&Number.isFinite(n)?`${Math.round(n)}`:"--"}function z8(){const n=document.createElement("span");return n.className="scoreboard-divider",n.textContent="-",n}function Qx(n,e){const t=document.createElement("strong");return t.className=`scoreboard-goal-value ${na(e)}`,t.textContent=B8(n),t}function H8(n){return new U8(n)}class V8{constructor(e){this.options=e}setTransportEnabled(e,t){const{elements:i}=this.options;i.togglePlayback.disabled=!e,i.previousFrame.disabled=!e,i.nextFrame.disabled=!e,i.playbackRate.disabled=!e,i.skipPostGoalTransitions.disabled=!e,i.skipKickoffs.disabled=!e,i.hitboxWireframes.disabled=!e,i.hitboxOnlyMode.disabled=!e,this.options.getCameraControlsController()?.setTransportEnabled(e,t)}renderSnapshot(e){const{elements:t}=this.options;t.timeReadout.textContent=`${e.currentTime.toFixed(2)}s`,t.frameReadout.textContent=`${e.frameIndex}`,t.durationReadout.textContent=`${e.duration.toFixed(2)}s`,t.playbackStatusReadout.textContent=e.playing?"Playing":"Paused",t.togglePlayback.textContent=e.playing?"Pause":"Play";const i=Math.max(0,this.options.getFrameCount()-1);t.previousFrame.disabled=e.frameIndex<=0,t.nextFrame.disabled=e.frameIndex>=i;const s=mf(e.speed);t.playbackRate.value=`${s}`,t.playbackRateReadout.textContent=ty(s),this.options.getCameraControlsController()?.syncState(e),t.skipPostGoalTransitions.checked=e.skipPostGoalTransitionsEnabled,t.skipKickoffs.checked=e.skipKickoffsEnabled,t.hitboxWireframes.checked=e.hitboxWireframesEnabled,t.hitboxOnlyMode.checked=e.hitboxOnlyModeEnabled,t.emptyState.hidden=!0}}function G8(n){return new V8(n)}function $8({elements:n,signal:e,setLauncherOpen:t,openReplayFilePicker:i,getElementWindowId:s,toggleWindow:a,hideWindow:r,createStatsWindow:o,loadReplayFile:l,togglePlayback:c,stepFrames:u,setPlaybackRate:d,setSkipPostGoalTransitionsEnabled:h,setSkipKickoffsEnabled:f,setHitboxWireframesEnabled:p,setHitboxOnlyModeEnabled:g}){n.launcherToggle.addEventListener("click",()=>{t(n.launcherMenu.hidden)},{signal:e}),n.root.addEventListener("click",m=>{m.target instanceof Element&&(m.target.closest(".top-chrome")||t(!1))},{signal:e}),n.loadReplayAction.addEventListener("click",i,{signal:e}),n.emptyLoadReplay.addEventListener("click",i,{signal:e}),n.root.querySelectorAll("[data-window-toggle]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowToggle;v&&(a(v),t(!1))},{signal:e})}),n.root.querySelectorAll("[data-window-hide]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowHide??s(m);v&&r(v)},{signal:e})}),n.root.querySelectorAll("[data-create-stats-window]").forEach(m=>{m.addEventListener("click",()=>{o(m.dataset.createStatsWindow)},{signal:e})}),n.fileInput.addEventListener("change",()=>{const m=n.fileInput.files?.[0];m&&l(m)},{signal:e}),n.togglePlayback.addEventListener("click",c,{signal:e}),n.previousFrame.addEventListener("click",()=>u(-1),{signal:e}),n.nextFrame.addEventListener("click",()=>u(1),{signal:e});const _=()=>{const m=mf(Number(n.playbackRate.value));n.playbackRate.value=`${m}`,n.playbackRateReadout.textContent=ty(m),d(m)};n.playbackRate.addEventListener("input",_,{signal:e}),n.playbackRate.addEventListener("change",_,{signal:e}),n.skipPostGoalTransitions.addEventListener("change",()=>{h(n.skipPostGoalTransitions.checked)},{signal:e}),n.skipKickoffs.addEventListener("change",()=>{f(n.skipKickoffs.checked)},{signal:e}),n.hitboxWireframes.addEventListener("change",()=>{p(n.hitboxWireframes.checked)},{signal:e}),n.hitboxOnlyMode.addEventListener("change",()=>{g(n.hitboxOnlyMode.checked)},{signal:e})}const W8=3500;function X8(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function K8(n){const{getReplayPlayer:e,signal:t}=n,i={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},s=()=>{i.forward=!1,i.backward=!1,i.left=!1,i.right=!1,i.up=!1,i.down=!1},a=(g,_)=>{switch(g){case"KeyW":return i.forward=_,!0;case"KeyS":return i.backward=_,!0;case"KeyA":return i.left=_,!0;case"KeyD":return i.right=_,!0;case"Space":return i.up=_,!0;case"ShiftLeft":case"ShiftRight":return i.down=_,!0;default:return!1}},r=g=>{g.ctrlKey||g.metaKey||g.altKey||X8()||a(g.code,!0)&&g.preventDefault()},o=g=>{a(g.code,!1)};window.addEventListener("keydown",r,{signal:t}),window.addEventListener("keyup",o,{signal:t}),window.addEventListener("blur",s,{signal:t});const l=new S,c=new S,u=new S,d=new S(0,1,0);let h=null,f=0;const p=g=>{f=requestAnimationFrame(p);const _=h===null?0:Math.min(.1,(g-h)/1e3);h=g;const m=(i.forward?1:0)-(i.backward?1:0),v=(i.right?1:0)-(i.left?1:0),y=(i.up?1:0)-(i.down?1:0);if(_===0||m===0&&v===0&&y===0)return;const b=e();if(!b||b.getState().cameraViewMode!=="free")return;const T=b.camera,x=b.controls;T.getWorldDirection(l),c.set(1,0,0).applyQuaternion(T.quaternion),u.set(0,0,0).addScaledVector(l,m).addScaledVector(c,v).addScaledVector(d,y),u.lengthSq()!==0&&(u.normalize().multiplyScalar(W8*_),T.position.add(u),x.target.add(u))};f=requestAnimationFrame(p),t.addEventListener("abort",()=>{cancelAnimationFrame(f)})}function q8(n,e){const t=new URLSearchParams(n),s=(t.get("replayId")??t.get("replay-id")??e??"").trim();return s.length>0?s:null}function Y8(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function j8(n){if(!n.replayId)return null;const e={replay_id:n.replayId,reviewed_mechanic:n.mechanic,reviewed_event_frame:n.frame,reviewed_event_time:n.time,confidence:n.confidence,status:"confirmed"};return n.subjectKind&&n.subjectId&&(e.reviewed_subject_kind=n.subjectKind,e.reviewed_subject_id=n.subjectId),n.startFrame!==null&&(e.reviewed_start_frame=n.startFrame),n.endFrame!==null&&(e.reviewed_end_frame=n.endFrame),n.notes&&n.notes.trim()&&(e.notes=n.notes.trim()),Object.keys(n.context).length>0&&(e.context=n.context),e}function Z8(n,e){const t=n.getState(),i=Math.max(0,Math.round(t.frameIndex??0)),s=t.currentTime??0,a=t.attachedPlayerId??null,r=a?n.replay.players.find(o=>o.id===a)?.name??null:null;return{localId:e.localId,mechanic:e.mechanic,frame:i,time:s,subjectKind:a?"player":null,subjectId:a,playerName:r,startFrame:null,endFrame:null,notes:e.notes?.trim()?e.notes.trim():null,confidence:1,replayId:e.replayId,context:{capturedFrom:"stat-evaluation-player",attachedPlayerId:a,playerName:r,durationSeconds:n.replay.duration??null}}}async function J8(n,e="/api/v1/events/reviews"){const t=j8(n);if(!t)return{record:n,ok:!1,message:"No replay id — cannot upload (export JSON instead)."};try{const i=await fetch(e,{method:"POST",headers:{"content-type":"application/json",...Y8()},credentials:"same-origin",body:JSON.stringify(t)});if(!i.ok){let s=`${i.status}${i.statusText?` ${i.statusText}`:""}`;try{const a=await i.json();typeof a.error=="string"&&(s=a.error)}catch{}return{record:n,ok:!1,message:s}}return{record:n,ok:!0,message:"uploaded"}}catch(i){return{record:n,ok:!1,message:i instanceof Error?i.message:String(i)}}}const Q8=["flick","whiff","double_tap","ceiling_shot","wall_aerial","flip_reset","one_timer","speed_flip","half_flip","wavedash","demo"],e6="m";function t6(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function n6(n,e){const t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(i)}class i6{constructor(e){this.options=e}records=[];localIdSeq=0;installEventListeners(e){const{elements:t}=this.options;for(const i of Q8){const s=document.createElement("option");s.value=i,s.textContent=i.replaceAll("_"," "),t.mechanic.appendChild(s)}t.capture.addEventListener("click",()=>this.capture(),{signal:e}),t.export.addEventListener("click",()=>this.exportJson(),{signal:e}),t.upload.addEventListener("click",()=>{this.uploadAll()},{signal:e}),t.clear.addEventListener("click",()=>{this.records.length=0,this.render(),this.setStatus("Cleared.")},{signal:e}),window.addEventListener("keydown",i=>{i.key.toLowerCase()!==e6||i.repeat||i.metaKey||i.ctrlKey||i.altKey||t6()||(i.preventDefault(),this.capture())},{signal:e}),this.render()}capture(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}this.localIdSeq+=1;const t=Z8(e,{mechanic:this.options.elements.mechanic.value||"flick",replayId:this.resolveReplayId(),localId:`missed-${this.localIdSeq}`});this.records.push(t),this.options.showWindow(),this.render(),this.setStatus(`Captured ${t.mechanic} @ ${t.time.toFixed(2)}s`+(t.replayId?".":" (no replay id — export only)."))}exportJson(){if(this.records.length===0){this.setStatus("Nothing to export.");return}n6("missed-events.json",{capturedFrom:"stat-evaluation-player",replayId:this.resolveReplayId(),missedEvents:this.records}),this.setStatus(`Exported ${this.records.length}.`)}async uploadAll(){if(this.records.length===0){this.setStatus("Nothing to upload.");return}let e=0;const t=[];for(const i of[...this.records]){const s=await J8(i);if(s.ok){e+=1;const a=this.records.findIndex(r=>r.localId===i.localId);a>=0&&this.records.splice(a,1)}else t.push(`${i.mechanic}@${i.time.toFixed(1)}s: ${s.message}`)}this.render(),this.setStatus(t.length===0?`Uploaded ${e}.`:`Uploaded ${e}, ${t.length} failed — ${t[0]}`)}render(){const{list:e}=this.options.elements;e.replaceChildren();for(const t of this.records){const i=document.createElement("li"),s=t.playerName??t.subjectId??"no subject",a=document.createElement("span");a.className="missed-event-row",a.textContent=`${t.mechanic} @ ${t.time.toFixed(2)}s · f${t.frame} · ${s}`+(t.replayId?"":" · no replay id");const r=document.createElement("button");r.type="button",r.textContent="✕",r.title="Remove",r.addEventListener("click",()=>{const o=this.records.findIndex(l=>l.localId===t.localId);o>=0&&(this.records.splice(o,1),this.render())}),i.append(a,r),e.appendChild(i)}}setStatus(e){this.options.elements.status.textContent=e}resolveReplayId(){return q8(window.location.search,this.options.getReplayId?.()??null)}}function s6(n){return new i6(n)}class mo{constructor(e,t){this.file=e,this.sourceTimes=t}sourceTimes;dirty=!1;static async createNew(e){const t=await ta.create(H3(),e);return new mo(t,[])}static async loadFromBytes(e,t){const i=await ta.load(e,t);return new mo(i,new Array(i.roundCount).fill(null))}get shotCount(){return this.file.roundCount}get hasUnsavedShots(){return this.dirty}shots(){return this.file.rounds.map((e,t)=>({index:t,timeLimit:e.time_limit,sourceReplayTime:this.sourceTimes[t]??null}))}captureShot(e,t=null){const i=N3(this.file,e);return this.sourceTimes[i]=t,this.dirty=!0,i}removeShot(e){this.file.removeRound(e),this.sourceTimes.splice(e,1),this.dirty=!0}setShotTimeLimit(e,t){this.file.setRoundTimeLimit(e,t),this.dirty=!0}downloadFileName(){return z3(this.file.guid)}toBytes(e=Math.floor(Date.now()/1e3)){this.file.updateMetadata({updated_at:BigInt(e)});const t=this.file.toBytes();return this.dirty=!1,t}}function a6(n,e,t,i){const s=`Captured shot ${n} (${e} at ${t})`;return i===null?`${s}.`:`${s}; warning: ${i}.`}function r6(n,e){const t=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),i=new Blob([t],{type:"application/octet-stream"}),s=URL.createObjectURL(i),a=document.createElement("a");a.href=s,a.download=e,document.body.appendChild(a),a.click(),a.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0)}class o6{constructor(e){this.options=e}session=null;sessionPromise=null;installEventListeners(e){const{elements:t}=this.options;t.capture.addEventListener("click",()=>{this.captureShot()},{signal:e}),t.newPack.addEventListener("click",()=>{this.newPack()},{signal:e}),t.download.addEventListener("click",()=>{this.download()},{signal:e}),t.load.addEventListener("click",()=>t.loadInput.click(),{signal:e}),t.loadInput.addEventListener("change",()=>{const i=t.loadInput.files?.[0]??null;t.loadInput.value="",i&&this.loadPackFile(i)},{signal:e}),t.name.addEventListener("change",()=>this.session?.file.setName(t.name.value||null),{signal:e}),t.creator.addEventListener("change",()=>this.session?.file.setCreatorName(t.creator.value||null),{signal:e}),t.description.addEventListener("change",()=>this.session?.file.setDescription(t.description.value||null),{signal:e}),t.difficulty.addEventListener("change",()=>this.session?.file.setDifficulty(t.difficulty.value),{signal:e}),this.sync()}sync(){const{elements:e}=this.options,t=this.options.getReplayPlayer();e.capture.disabled=!t,e.shooter.disabled=!t,this.populateShooterOptions(t),this.renderShotList()}populateShooterOptions(e){const{shooter:t}=this.options.elements,i=t.value;t.replaceChildren(),t.append(new Option("Followed player (camera)",""));for(const s of e?.replay.players??[])t.append(new Option(s.name,s.id));[...t.options].some(s=>s.value===i)&&(t.value=i)}async ensureSession(){if(this.session)return this.session;this.sessionPromise??=mo.createNew();const e=await this.sessionPromise;return this.session||this.adoptSession(e),this.session??e}adoptSession(e){this.session=e,this.sessionPromise=null;const{elements:t}=this.options;t.name.value=e.file.name??"",t.creator.value=e.file.creatorName??"",t.description.value=e.file.description??"";const i=e.file.difficulty;[...t.difficulty.options].some(s=>s.value===i)&&(t.difficulty.value=i),this.renderShotList()}resolveShooter(e,t){const i=this.options.elements.shooter.value||null,s=e.getState().attachedPlayerId,a=e.replay.players,r=[...a.filter(o=>o.id===(i??s)),...a];for(const o of r){const l=o.frames[t];if(l?.position)return i&&o.id!==i?null:{track:o,sample:l}}return null}timeLimitSeconds(){const e=Number(this.options.elements.timeLimit.value);return!Number.isFinite(e)||e<0?$T:e}async captureShot(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}const t=e.getState(),i=e.replay.ballFrames[t.frameIndex];if(!i?.position){this.setStatus("No ball state on the current frame.");return}const s=this.resolveShooter(e,t.frameIndex);if(!s){this.setStatus("Selected shooter has no car state on the current frame.");return}const a=await this.ensureSession(),r={position:s.sample.position,rotation:s.sample.rotation,linearVelocity:s.sample.linearVelocity},o=a.captureShot({ball:{position:i.position,linearVelocity:i.linearVelocity},shooter:r,timeLimit:this.timeLimitSeconds()},t.currentTime);this.renderShotList(),this.setStatus(a6(o+1,s.track.name,wi(t.currentTime),k3(r)))}async loadPackFile(e){if(!(this.session?.hasUnsavedShots&&!window.confirm("Discard unsaved captured shots and open this pack?")))try{const t=await mo.loadFromBytes(await e.arrayBuffer());this.adoptSession(t),this.setStatus(`Opened ${e.name} (${t.shotCount} shot${t.shotCount===1?"":"s"}); captures will append.`)}catch(t){console.error("Failed to load training pack:",t),this.setStatus(t instanceof Error?t.message:"Failed to load training pack.")}}async newPack(){if(!(this.session?.hasUnsavedShots&&!window.confirm("Discard unsaved captured shots and start a new pack?")))try{this.adoptSession(await mo.createNew()),this.setStatus("Started a new pack.")}catch(e){console.error("Failed to create training pack:",e),this.setStatus(e instanceof Error?e.message:"Failed to create training pack.")}}async download(){const e=await this.ensureSession();if(e.shotCount===0){this.setStatus("No shots to download; capture one first.");return}try{r6(e.toBytes(),e.downloadFileName()),this.setStatus(`Downloaded ${e.downloadFileName()}.`)}catch(t){console.error("Failed to serialize training pack:",t),this.setStatus(t instanceof Error?t.message:"Failed to serialize pack.")}}renderShotList(){const{shotList:e}=this.options.elements;e.replaceChildren();const t=this.session;if(t)for(const i of t.shots()){const s=document.createElement("li"),a=document.createElement("span"),r=i.sourceReplayTime===null?"loaded":`at ${wi(i.sourceReplayTime)}`,o=i.timeLimit===0?"no limit":`${i.timeLimit}s`;a.textContent=`Shot ${i.index+1} — ${r} — ${o}`;const l=document.createElement("button");l.type="button",l.textContent="Remove",l.addEventListener("click",()=>{t.removeShot(i.index),this.renderShotList(),this.setStatus(`Removed shot ${i.index+1}.`)}),s.append(a,l),e.appendChild(s)}}setStatus(e){this.options.elements.status.textContent=e}}function l6(n){return new o6(n)}class c6{constructor(e){this.options=e}activeModules=[];activeTimelineEventSourceIds=new Set;activeTimelineRangeModuleIds=new Set;activeMechanicTimelineKinds=new Set;activeRenderEffectModuleIds=new Set;removeRenderHook=null;timelineSourceRemovers=new Map;timelineRangeSourceRemovers=new Map;getActiveModules(){return this.activeModules}getActiveTimelineEventSourceIds(){return this.activeTimelineEventSourceIds}getActiveTimelineRangeModuleIds(){return this.activeTimelineRangeModuleIds}getActiveMechanicTimelineKinds(){return this.activeMechanicTimelineKinds}getActiveRenderEffectModuleIds(){return this.activeRenderEffectModuleIds}getActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}getBoostPadOverlayEnabled(){return!0}getTimelineEventSourceIds(){return[...this.activeTimelineEventSourceIds]}getTimelineRangeModuleIds(){return[...this.activeTimelineRangeModuleIds]}getMechanicTimelineKinds(){return[...this.activeMechanicTimelineKinds]}getRenderEffectModuleIds(){return[...this.activeRenderEffectModuleIds]}applyOverlayConfig({timelineEvents:e,timelineRanges:t,mechanics:i,renderEffects:s,boostPads:a}){this.activeTimelineEventSourceIds=new Set(e),this.activeTimelineRangeModuleIds=new Set(t),this.activeMechanicTimelineKinds=new Set(i),this.activeRenderEffectModuleIds=new Set(s)}reset(){this.teardownActiveModules(),this.clearStandalonePlugins(),this.activeModules=[],this.activeTimelineEventSourceIds=new Set,this.activeTimelineRangeModuleIds=new Set,this.activeMechanicTimelineKinds=new Set,this.activeRenderEffectModuleIds=new Set,this.removeRenderHook=null}setupActiveModules(){this.teardownActiveModules();const e=this.options.getContext();if(!e)return;const t=this.getActiveModuleIds();this.activeModules=this.options.modules.filter(i=>t.has(i.id)),this.options.boostPickupFilters.setup(e);for(const i of this.activeModules)i.setup(e);this.removeRenderHook=e.player.onBeforeRender(i=>{for(const s of this.activeModules)this.activeRenderEffectModuleIds.has(s.id)&&s.onBeforeRender(i)}),this.syncTimelineEvents(),this.syncTimelineRanges()}teardownActiveModules(){this.removeRenderHook?.(),this.removeRenderHook=null,this.clearTimelineEventSources(),this.clearTimelineRangeSources();for(const e of this.activeModules)e.teardown();this.activeModules=[]}toggleCapability(e,t,i){const s=this.getMutableActiveCapabilityIds(t);i?s.add(e):s.delete(e),this.setupActiveModules(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderStatsWindows(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}setMechanicTimelineKind(e,t){t?this.activeMechanicTimelineKinds.add(e):this.activeMechanicTimelineKinds.delete(e),this.options.requestConfigSync()}activateMechanicTimelineKind(e){this.activeMechanicTimelineKinds.add(e),this.syncTimelineEvents(),this.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}clearTimelineEventSources(){for(const e of this.timelineSourceRemovers.values())e();this.timelineSourceRemovers.clear()}clearTimelineRangeSources(){for(const e of this.timelineRangeSourceRemovers.values())e();this.timelineRangeSourceRemovers.clear()}clearStandalonePlugins(){}syncBoostPadOverlayPlugin(){}toggleBoostPadOverlay(){this.options.renderModuleSummary(),this.options.requestConfigSync()}syncTimelineEvents(){this.clearTimelineEventSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.options.getEventTimelineSources(e)){if(!i.active)continue;const s=i.buildTimelineEvents();s.length!==0&&this.timelineSourceRemovers.set(i.timelineKey,t.addEventSource(this.options.withTimelineEventSeekTimes(s),{id:i.timelineId,label:i.label}))}t.refreshEvents()}}syncTimelineRanges(){this.clearTimelineRangeSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.activeModules)!this.activeTimelineRangeModuleIds.has(i.id)||!i.getTimelineRanges||this.timelineRangeSourceRemovers.set(i.id,t.addRangeSource(()=>i.getTimelineRanges?.(e)??[]));for(const i of this.options.getEventTimelineSources(e)){if(!i.active||!i.buildTimelineRanges)continue;const s=i.buildTimelineRanges();s.length!==0&&this.timelineRangeSourceRemovers.set(i.timelineKey,t.addRangeSource(s))}t.refreshRanges()}}getActiveModuleIds(){return new Set([...this.activeTimelineEventSourceIds,...this.activeTimelineRangeModuleIds,...this.activeRenderEffectModuleIds])}getMutableActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}}function u6(n){return new c6(n)}function Jn(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ew(n){return Jn(n)&&(n.kind==="time"||n.kind==="frame")&&typeof n.value=="number"&&Number.isFinite(n.value)?{kind:n.kind,value:n.value}:null}function Hu(n,e){if(n!=null){if(typeof n!="number"||!Number.isInteger(n)||!Number.isFinite(n)||n<0)throw new Error(`Review playlist page ${e} must be a non-negative integer.`);return n}}function tw(n,e){if(n!=null){if(typeof n!="string")throw new Error(`Review playlist page ${e} must be a string.`);return n}}function d6(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist page must be an object.");return{next:tw(n.next,"next"),previous:tw(n.previous,"previous"),total:Hu(n.total,"total"),count:Hu(n.count,"count"),limit:Hu(n.limit,"limit"),offset:Hu(n.offset,"offset")}}}function h6(n){if(n!=null){if(!Jn(n))throw new Error("Review playlist playback must be an object.");if(n.timeBase!==void 0&&n.timeBase!=="playback"&&n.timeBase!=="rawReplay")throw new Error('Review playlist playback timeBase must be "playback" or "rawReplay".');return{...n,timeBase:n.timeBase}}}function f6(n,e){if(n==null)return;if(!Jn(n))throw new Error(`Review item ${e} perspective must be an object.`);if(n.kind!=="player")throw new Error(`Review item ${e} perspective kind must be "player".`);const t=typeof n.playerId=="string"&&n.playerId.trim()?n.playerId.trim():void 0,i=typeof n.playerName=="string"&&n.playerName.trim()?n.playerName.trim():void 0;if(!t&&!i)throw new Error(`Review item ${e} player perspective needs playerId or playerName.`);if(n.ballCam!==void 0&&n.ballCam!=="off"&&n.ballCam!=="on"&&n.ballCam!=="player")throw new Error(`Review item ${e} perspective ballCam must be off, on, or player.`);if(n.usePlayerCameraSettings!==void 0&&typeof n.usePlayerCameraSettings!="boolean")throw new Error(`Review item ${e} perspective usePlayerCameraSettings must be boolean.`);return{kind:"player",playerId:t,playerName:i,ballCam:n.ballCam,usePlayerCameraSettings:n.usePlayerCameraSettings}}function p6(n){if(!Jn(n)||!Array.isArray(n.items))throw new Error("Review playlist must contain an items array.");const e=n.items.map((i,s)=>{if(!Jn(i)||typeof i.replay!="string")throw new Error(`Invalid review item at index ${s}.`);const a=ew(i.start),r=ew(i.end);if(!a||!r)throw new Error(`Review item ${s+1} has invalid start or end.`);return{id:typeof i.id=="string"?i.id:void 0,replay:i.replay,start:a,end:r,label:typeof i.label=="string"?i.label:void 0,perspective:f6(i.perspective,s+1),meta:Jn(i.meta)?i.meta:void 0}}),t=Array.isArray(n.replays)?n.replays.map(i=>!Jn(i)||typeof i.id!="string"?null:{id:i.id,path:typeof i.path=="string"?i.path:void 0,label:typeof i.label=="string"?i.label:void 0,locator:Jn(i.locator)?i.locator:void 0,meta:Jn(i.meta)?i.meta:void 0}).filter(i=>i!==null):void 0;return{label:typeof n.label=="string"?n.label:void 0,replays:t,items:e,page:d6(n.page),playback:h6(n.playback),meta:n.meta}}function nw(n){let e;try{e=JSON.parse(n)}catch(t){throw new Error(`Invalid review playlist JSON: ${t instanceof Error?t.message:String(t)}`)}return p6(e)}function m6(){const n=new URLSearchParams(window.location.search);return n.get("reviewPlaylist")?.trim()||n.get("review")?.trim()||n.get("playlist")?.trim()||n.get("playlistUrl")?.trim()||null}function _6(n){return/^\/(?:home|Users|tmp|var\/tmp|mnt|media|run\/user|nix\/store)\//.test(n)}function y1(n,e){const t=n.startsWith("path:")?n.slice(5):n;if(/^https?:\/\//i.test(t)||t.startsWith("/@fs/"))return t;if(t.startsWith("/")){if(_6(t))return`/@fs${t}`;if(e){const i=new URL(e,window.location.href);if(i.origin!==window.location.origin)return new URL(t,i.origin).href}return t}return e?new URL(t,e).href:t}function dd(n,e){const t=e.replaysById.get(n.replay);if(t?.path)return t.path;if(Jn(t?.locator)&&t.locator.kind==="path"&&typeof t.locator.path=="string")return t.locator.path;if(/^https?:\/\//i.test(n.replay)||n.replay.startsWith("/")||n.replay.startsWith("/@fs/")||n.replay.startsWith("path:"))return n.replay;throw new Error(`Review replay "${n.replay}" does not include a loadable path.`)}function iw(n,e){const t=e.replaysById.get(n.replay),s=(t?.path??dd(n,e)).replace(/^path:/,"").split("/").filter(Boolean).pop();return t?.label??s??"review replay"}function hd(n){return typeof n=="number"&&Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function sw(n){return n.kind==="time"?hd(n.value):`frame ${Math.trunc(n.value)}`}function qi(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?t:null}function fd(n,e){if(!Jn(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):null}function g6(n,e){for(const[t,i]of[["eventTime","eventFrame"],["startTime","startFrame"],["endTime","endFrame"]]){const s=qi(n,t),a=fd(n,i),r=a===null?null:e.frames[a]?.time;if(s!==null&&typeof r=="number"&&Number.isFinite(r))return s-r}return 0}function v1(n,e,t){return t==="playback"?0:t==="rawReplay"&&typeof e.rawStartTime=="number"&&Number.isFinite(e.rawStartTime)?e.rawStartTime:g6(n,e)}function D_(n,e){return Math.min(Math.max(0,n),Math.max(0,e))}function y6(n,e,t,i){if(e.kind==="frame"){const a=Math.max(0,Math.trunc(e.value));return D_(t.frames[a]?.time??0,t.duration)}const s=v1(n,t,i);return D_(e.value-s,t.duration)}function v6(n,e,t){const i=M6(n);return i===null?null:D_(i-v1(n,e,t),e.duration)}function b6(n){const e=n.start.kind==="time"?n.start.value:null,t=n.end.kind==="time"?n.end.value:null,i=[`${sw(n.start)} to ${sw(n.end)}`];e!==null&&t!==null&&i.push(`${Math.max(0,t-e).toFixed(1)}s clip`);const s=qi(n,"startTime")??qi(n,"eventTime"),a=qi(n,"endTime")??qi(n,"eventTime");return e!==null&&s!==null&&i.push(`${Math.max(0,s-e).toFixed(1)}s preroll`),t!==null&&a!==null&&i.push(`${Math.max(0,t-a).toFixed(1)}s postroll`),i.join(" · ")}function x6(n){const e=qi(n,"eventTime"),t=qi(n,"startTime"),i=qi(n,"endTime"),s=fd(n,"eventFrame"),a=fd(n,"startFrame"),r=fd(n,"endFrame"),o=t!==null&&i!==null&&Math.abs(i-t)>.001?`${hd(t)} to ${hd(i)}`:hd(e??t??i),l=a!==null&&r!==null&&r!==a?`frames ${a}-${r}`:s!==null?`frame ${s}`:a!==null?`frame ${a}`:null;return[o,l].filter(c=>c&&c!=="--").join(" · ")||"--"}function gm(n,e){return n.label??n.meta?.eventTypeLabel??n.meta?.mechanicLabel??`Review item ${e+1}`}function w6(n){if(typeof n.meta?.playerName=="string"&&n.meta.playerName.trim())return n.meta.playerName.trim();if(Jn(n.meta?.target)&&typeof n.meta.target.playerName=="string"){const e=n.meta.target.playerName.trim();return e||null}return null}function aw(n,e){if(!n)return null;if(n.playerId){const i=e.find(s=>s.id===n.playerId);if(i)return i}const t=n.playerName?.toLowerCase();return t?e.find(i=>i.name.trim().toLowerCase()===t)??null:null}function rw(n){if(typeof n.meta?.eventTypeLabel=="string"&&n.meta.eventTypeLabel.trim())return n.meta.eventTypeLabel;if(typeof n.meta?.mechanicLabel=="string"&&n.meta.mechanicLabel.trim())return n.meta.mechanicLabel;const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"?Ai(e):"--"}function S6(n){const e=n.meta?.eventCategory;return typeof e=="string"&&e.trim()?Ai(e.trim()):"--"}function T6(n){const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"&&e.trim()?e.trim().replaceAll("-","_"):null}function M6(n){return qi(n,"eventTime")??qi(n,"startTime")??qi(n,"endTime")}class E6{constructor(e){this.options=e}createReplaySource(e,t,i){const s=dd(e,t),a=y1(s,t.sourceUrl);return{name:iw(e,t),preparingStatus:"Loading review replay...",async readBytes(){const r=await fetch(a,{signal:i});if(!r.ok){const o=r.statusText?` ${r.statusText}`:"";throw new Error(`Failed to fetch review replay from ${a} (${r.status}${o})`)}return new Uint8Array(await r.arrayBuffer())}}}initialize(e){const t=this.getReplayClipCounts(e);for(const[i,s]of this.getReplayItems(e)){let a="",r=i;try{a=dd(s,e),r=iw(s,e)}catch{r=e.replaysById.get(i)?.label??i}e.replayLoadStates.set(i,{replayId:i,label:r,path:a,clipCount:t.get(i)??0,status:"idle",progress:null,error:null})}}preload(e,t){if(e.preloading)return;const i=this.getNextReplayItems(e,t);i.length!==0&&(e.preloading=!0,(async()=>{try{for(const s of i){const a=s.replay,r=e.replayLoadStates.get(a);if(!(r?.status==="loaded"||r?.status==="loading"))try{await this.loadBundle(s,e)}catch{}}}finally{e.preloading=!1}})())}loadBundle(e,t){const i=t.replayLoadCache.get(e.replay);if(i)return i;const s=this.createReplaySource(e,t);this.updateLoadState(t,e.replay,{label:s.name,path:dd(e,t),status:"loading",progress:null,error:null});const a=Promise.resolve().then(async()=>{const r=await s.readBytes();return fE(r,{reportEveryNFrames:100,onProgress:o=>{this.updateLoadState(t,e.replay,{status:"loading",progress:o,error:null})}})}).then(r=>(this.updateLoadState(t,e.replay,{status:"loaded",progress:null,error:null}),r)).catch(r=>{throw t.replayLoadCache.delete(e.replay),this.updateLoadState(t,e.replay,{status:"error",error:r instanceof Error?r.message:String(r)}),r});return t.replayLoadCache.set(e.replay,a),a}render(e){const{reviewSummary:t,loadingSummary:i,loadingActive:s,loadingList:a}=this.options.elements,r=e?Array.from(e.replayLoadStates.values()):[],o=r.filter(h=>h.status==="loaded").length,l=r.filter(h=>h.status==="loading").length,c=r.filter(h=>h.status==="error").length,u=r.filter(h=>h.status==="idle").length,d=r.length===0?"0 replays":`${o}/${r.length} loaded${l>0?`, ${l} loading`:""}${c>0?`, ${c} failed`:""}`;if(t.textContent=d,i.textContent=d,s.textContent=r.length===0?"No playlist":l>0?`${l} active, ${u} pending`:c>0?`${c} failed`:e?.preloading?`Background queue, ${u} pending`:o===r.length?"Complete":`${u} pending`,a.replaceChildren(),!e||r.length===0){const h=document.createElement("p");h.className="stat-window-empty",h.textContent="No replay sources.",a.append(h);return}for(const h of r){const f=document.createElement("div");f.className=`mechanics-review-replay-load ${h.status}`;const p=document.createElement("div");p.className="mechanics-review-replay-load-main";const g=document.createElement("span");g.className="mechanics-review-replay-load-title",g.textContent=h.label;const _=document.createElement("span");_.className="mechanics-review-replay-load-meta",_.textContent=[h.replayId,`${h.clipCount} ${h.clipCount===1?"clip":"clips"}`,h.path].filter(Boolean).join(" · "),p.append(g,_);const m=document.createElement("strong");m.className="mechanics-review-replay-load-status",m.textContent=this.replayLoadStatusText(h);const v=document.createElement("div");v.className="mechanics-review-replay-load-progress";const y=document.createElement("span");y.style.width=`${Math.round(this.replayLoadProgressValue(h)*100)}%`,v.append(y),f.append(p,m,v),a.append(f)}}updateLoadState(e,t,i){const s=e.replayLoadStates.get(t)??{replayId:t,label:t,path:"",clipCount:0,status:"idle",progress:null,error:null};e.replayLoadStates.set(t,{...s,...i});const a=e.manifest.items[e.currentIndex];e.loading&&a?.replay===t&&i.progress&&this.options.onActiveLoadProgress(i.progress),this.options.isActiveReview(e)&&this.render(e)}getReplayItems(e){const t=new Map;for(const i of e.manifest.items)t.has(i.replay)||t.set(i.replay,i);return t}getReplayClipCounts(e){const t=new Map;for(const i of e.manifest.items)t.set(i.replay,(t.get(i.replay)??0)+1);return t}getNextReplayItems(e,t){const i=e.manifest.items[t]?.replay,s=new Set(i?[i]:[]),a=[];for(let r=t+1;r{const i=t.file.files?.[0];if(i)try{const s=nw(await i.text());await this.loadPlaylist(s,null)}catch(s){console.error("Failed to load review playlist:",s),this.setStatus(s instanceof Error?s.message:"Failed to load review playlist")}finally{t.file.value=""}},{signal:e}),t.loadUrl.addEventListener("click",()=>{this.loadPlaylistFromUrl(t.url.value.trim()).catch(i=>{console.error("Failed to load review playlist URL:",i),this.setStatus(i instanceof Error?i.message:"Failed to load review playlist URL")})},{signal:e}),t.previous.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.max(0,i.currentIndex-1))},{signal:e}),t.replay.addEventListener("click",()=>this.replayClip(),{signal:e}),t.next.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.min(i.manifest.items.length-1,i.currentIndex+1))},{signal:e}),t.confirm.addEventListener("click",()=>{this.submitDecision("confirmed")},{signal:e}),t.reject.addEventListener("click",()=>{this.submitDecision("rejected")},{signal:e}),t.uncertain.addEventListener("click",()=>{this.submitDecision("uncertain")},{signal:e})}render(){const{elements:e}=this.options,t=this.activeReview,i=t?.manifest.items??[],s=t?i[t.currentIndex]??null:null,a=i.length>0;e.count.textContent=`${i.length} item${i.length===1?"":"s"}`,e.index.textContent=a&&t?`${t.currentIndex+1} / ${i.length}`:"0 / 0",e.title.textContent=s?gm(s,t?.currentIndex??0):"No candidate selected",e.mechanic.textContent=s?rw(s):"--",e.player.textContent=s?this.getPlayerName(s):"--",e.clip.textContent=s?b6(s):"--",e.event.textContent=s?x6(s):"--",e.reason.textContent=s?.meta?.reason??"--",e.previous.disabled=!t||t.loading||t.currentIndex<=0,e.replay.disabled=!t||t.loading||!t.currentClip,e.next.disabled=!t||t.loading||t.currentIndex>=i.length-1;const r=!t||t.loading||ow(s)===null;if(e.confirm.disabled=r,e.reject.disabled=r,e.uncertain.disabled=r,this.options.replayLoads.render(t),e.list.replaceChildren(),!t||i.length===0){const o=document.createElement("p");o.className="stat-window-empty",o.textContent="No review playlist loaded.",e.list.append(o);return}i.forEach((o,l)=>{const c=document.createElement("button");c.type="button",c.className="mechanics-review-item",c.dataset.active=l===t.currentIndex?"true":"false",c.disabled=t.loading,c.addEventListener("click",()=>{this.activateItem(l)});const u=document.createElement("span");u.textContent=gm(o,l);const d=document.createElement("strong");d.textContent=[S6(o),rw(o),this.getPlayerName(o),ym(o.meta?.reviewStatus)].filter(h=>h&&h!=="--").join(" · ")||"--",c.append(u,d),e.list.append(c)})}async loadPlaylist(e,t){const i=new Map;for(const s of e.replays??[])i.set(s.id,s);this.activeReview={manifest:e,sourceUrl:t,replaysById:i,replayLoadStates:new Map,replayLoadCache:new Map,currentIndex:0,loading:!1,preloading:!1,currentReplayId:null,currentClip:null},this.options.replayLoads.initialize(this.activeReview),this.options.showReplayLoadingWindow(),this.setStatus(e.label?`Loaded ${e.label}.`:"Loaded review playlist."),this.render(),e.items.length>0&&await this.activateItem(0)}async loadPlaylistFromUrl(e){if(!e){this.setStatus("Enter a review playlist URL.");return}const t=y1(e,window.location.href);this.setStatus("Loading review playlist...");const i=await fetch(t);if(!i.ok){const a=i.statusText?` ${i.statusText}`:"";throw new Error(`Failed to fetch review playlist from ${t} (${i.status}${a})`)}const s=nw(await i.text());await this.loadPlaylist(s,i.url||t)}async activateItem(e){const t=this.activeReview,i=t?.manifest.items[e];if(!(!t||!i||t.loading)){t.loading=!0,t.currentIndex=e,this.render(),this.setStatus(`Loading ${gm(i,e)}...`);try{if(!this.options.getReplayPlayer()||t.currentReplayId!==i.replay){const d=this.options.replayLoads.createReplaySource(i,t),h=this.options.replayLoads.loadBundle(i,t);await this.options.loadReplayBundleForDisplay(d,h),t.currentReplayId=i.replay}this.options.replayLoads.preload(t,e);const a=t.manifest.playback?.timeBase,r=Math.max(0,this.getBoundTime(i,i.start,a)),o=Math.min(this.options.getReplayPlayer()?.getState().duration??Number.POSITIVE_INFINITY,Math.max(r,this.getBoundTime(i,i.end,a)));if(!Number.isFinite(r)||!Number.isFinite(o)||o<=r)throw new Error("Review item has an empty playback range.");const l=this.options.getReplayPlayer(),c=l?aw(i.perspective,l.replay.players):null;c&&this.options.applyClipPerspective({playerId:c.id,ballCam:i.perspective?.ballCam,usePlayerCameraSettings:i.perspective?.usePlayerCameraSettings}),this.options.resetReplayTransitionControls();const u=l===null?null:v6(i,l.replay,a);t.currentClip={startTime:r,endTime:o,targetTime:u},this.options.activateTimelineSource(i),this.options.getReplayPlayer()?.setState({currentTime:r,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),this.setStatus(u===null?`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s`:`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s; target ${u.toFixed(2)}s`)}catch(s){console.error("Failed to activate mechanics review item:",s),t.currentClip=null,this.setStatus(s instanceof Error?s.message:"Failed to load review item")}finally{t.loading=!1,this.render()}}}replayClip(){const e=this.activeReview?.currentClip,t=this.options.getReplayPlayer();!e||!t||t.setState({currentTime:e.startTime,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1})}async submitDecision(e){const t=this.activeReview,i=t?.manifest.items[t.currentIndex]??null,s=ow(i);if(!t||!i||!s){this.setStatus("Current review item has no review endpoint.");return}this.setStatus(`Submitting ${ym(e)}...`);const a=await fetch(s,{method:"POST",headers:{"content-type":"application/json",...R6()},credentials:"same-origin",body:JSON.stringify({status:e})});if(!a.ok){let r=`${a.status}${a.statusText?` ${a.statusText}`:""}`;try{const o=await a.json();typeof o.error=="string"&&(r=o.error)}catch{}this.setStatus(`Review failed: ${r}`);return}i.meta=i.meta??{},i.meta.reviewStatus=e,this.setStatus(`Marked ${ym(e)}.`),this.render()}enforceClipBoundary(e){const t=this.activeReview?.currentClip,i=this.options.getReplayPlayer();if(!t||!i||this.boundaryGuard)return!1;const s=e.currentTime=t.endTime-.025;if(!s&&!a)return!1;this.boundaryGuard=!0;try{i.setState({currentTime:s?t.startTime:t.endTime,playing:!1,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),a&&this.setStatus(`Finished clip at ${t.endTime.toFixed(2)}s`)}finally{this.boundaryGuard=!1}return!0}getBoundTime(e,t,i){const s=this.options.getReplayPlayer();return s?y6(e,t,s.replay,i):t.kind==="time"?t.value:0}getPlayerName(e){const t=w6(e);if(t)return t;const i=this.options.getReplayPlayer()?.replay.players??[];return aw(e.perspective,i)?.name??"--"}}function ym(n){return typeof n=="string"&&n.trim()?n.replaceAll("_"," "):"unreviewed"}function ow(n){if(!n)return null;if(typeof n.meta?.reviewEndpoint=="string"&&n.meta.reviewEndpoint)return n.meta.reviewEndpoint;const e=typeof n.meta?.eventId=="string"&&n.meta.eventId?n.meta.eventId:n.id;return e?`/api/v1/events/${encodeURIComponent(e)}/reviews`:null}function R6(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function P6(n){return new A6(n)}const I6=["replayUrl","replay_url","replay"],L6=["r","replayUrlZ","replay_url_z"],k6=["ballchasing","ballchasingId","ballchasingUuid","ballchasingReplay"];function D6(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a{n.signal.aborted||(console.error("Failed to load replay URL:",t),n.statusReadout.textContent=t instanceof Error?t.message:"Failed to load replay URL")})}function H6(n){n.initialBundle?n.loadReplayBundleForDisplay({name:n.initialReplayName??"replay",preparingStatus:"Preparing replay...",async readBytes(){throw new Error("Replay bytes are not available for this preloaded replay")}},Promise.resolve(n.initialBundle)).catch(i=>{n.signal.aborted||(console.error("Failed to load preprocessed replay bundle:",i),n.statusReadout.textContent=i instanceof Error?i.message:"Failed to load preprocessed replay bundle")}):n.loadFromLocation!==!1&&z6(n);const e=m6();if(!e)return;const t=n.getMechanicsReviewController();t?.setUrl(e),n.showMechanicsReviewWindow(),t?.loadPlaylistFromUrl(e).catch(i=>{n.signal.aborted||(console.error("Failed to load mechanics review playlist from URL:",i),t?.setStatus(i instanceof Error?i.message:"Failed to load mechanics review playlist from URL"))})}function V6(n){const e=()=>{n.getSkipPostGoalTransitions().checked=!1,n.getSkipKickoffs().checked=!1},t=(i,s)=>{const a=n.getReplayPlayer();!a||!Number.isFinite(i)||(n.getMechanicsReviewController()?.clearCurrentClip(),e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:s,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())};return{watchGoalReplay(i,s){const a=n.getReplayPlayer();if(!a||!Number.isFinite(i))return;if(n.getMechanicsReviewController()?.clearCurrentClip(),s!==null&&a.replay.players.some(o=>o.id===s)){a.setAttachedPlayer(s),a.setCameraViewMode("follow");const o=n.getCameraControlsController();o&&(o.freeCameraPreset=null)}e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate()},cueGoalReplay(i){t(i,!1)},cueTimelineEvent(i){const s=n.getReplayPlayer();s&&(n.getMechanicsReviewController()?.clearCurrentClip(),e(),s.setState({currentTime:Ng(i),skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())},applyConfigToReplayPlayer(i){const s=n.getReplayPlayer();if(!s)return;s.setState(A8(i.playback,i.camera,i));const a=n.getCameraControlsController();a&&(a.freeCameraPreset=i.camera.freePreset??null),i.camera.mode==="free"&&i.camera.freePreset&&s.setFreeCameraPreset(i.camera.freePreset),n.syncBoostPadOverlayPlugin(),n.setupActiveModules(),n.renderModuleSummary(),n.renderModuleSettings(),n.renderStatsWindows(s.getState().frameIndex)}}}function G6(n){let e=!1,t=null;const i=()=>n.getFloatingWindowController()?.getSingletonConfigs()??[],s=()=>n.getStatsWindowsController()?.getConfigs()??[],a=()=>{const o=n.getActiveModulesRuntime(),l=n.getReplayPlayer();return C8({playback:M8({replayPlayer:l,playbackRate:n.playbackRate,skipPostGoalTransitions:n.skipPostGoalTransitions,skipKickoffs:n.skipKickoffs}),camera:E8({replayPlayer:l,cameraControlsController:n.getCameraControlsController()}),activeTimelineEventSourceIds:o.getActiveTimelineEventSourceIds(),activeTimelineRangeModuleIds:o.getActiveTimelineRangeModuleIds(),activeMechanicTimelineKinds:o.getActiveMechanicTimelineKinds(),activeRenderEffectModuleIds:o.getActiveRenderEffectModuleIds(),initialConfig:n.getInitialConfig(),replayPlayer:l,boostPadOverlayEnabled:o.getBoostPadOverlayEnabled(),recording:n.getRecordingWindowController()?.getConfigSnapshot()??{},singletonWindows:i(),statsWindows:s(),moduleConfigs:T8(n.modules)})},r=o=>{v8(g1(n.modules),o)};return{setApplyingConfig(o){e=o},reset(){t!==null&&(window.clearTimeout(t),t=null),e=!1},scheduleConfigUrlUpdate(){e||(t!==null&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null;const o=jW(new URL(window.location.href),a());window.history.replaceState(window.history.state,"",o)},150))},applyConfigToStaticControls(o){if(n.getActiveModulesRuntime().applyOverlayConfig(o.overlays),n.skipPostGoalTransitions.checked=o.playback.skipPostGoalTransitions??n.skipPostGoalTransitions.checked,n.skipKickoffs.checked=o.playback.skipKickoffs??n.skipKickoffs.checked,n.hitboxWireframes.checked=o.overlays.hitboxWireframes,n.hitboxOnlyMode.checked=o.overlays.hitboxOnlyMode,n.getCameraControlsController()?.applyNameplateLiftUu(o.camera.nameplateLiftUu),n.getCameraControlsController()?.setAutoPossessionEnabled(o.camera.autoPossession??!1,{requestConfigSync:!1}),o.playback.rate!==void 0){const l=mf(o.playback.rate);n.playbackRate.value=`${l}`,n.playbackRateReadout.textContent=ty(l)}n.getRecordingWindowController()?.applyConfig(o.recording),r(o.moduleConfigs),n.getFloatingWindowController()?.applySingletonConfigs(o.singletonWindows),n.getStatsWindowsController()?.replaceFromConfig(o.statsWindows),n.renderModuleSummary(),n.renderModuleSettings(),n.renderTimelineEventCount()}}}function $6(n){const e=t=>{const i=n.getLauncherToggle();n.getLauncherMenu().hidden=!t,i.setAttribute("aria-label",t?"Close menu":"Open menu"),i.setAttribute("aria-expanded",t?"true":"false")};return{bringWindowToFront(t){n.getFloatingWindowController()?.bringToFront(t)},showWindow(t){n.getFloatingWindowController()?.show(t)},toggleWindow(t){n.getFloatingWindowController()?.toggle(t)},hideWindow(t){n.getFloatingWindowController()?.hide(t)},setLauncherOpen:e,openReplayFilePicker(){n.getFileInput().click(),e(!1)},installWindowDragging(t,i){n.getFloatingWindowController()?.installDragging(t,i)},getElementWindowId(t){return t.closest("[data-window-id]")?.dataset.windowId??null}}}const O_=4096,fr=5120,W6=893,X6=642,Yi=1/105;class K6{constructor(e){this.options=e,this.options.body.innerHTML=`
@@ -5920,4 +5985,4 @@ void main() {

Load a replay with shot events.

- `,this.chartCanvas=this.mustElement("#shot-chart-canvas"),this.shotList=this.mustElement("#shot-list"),this.summary=this.mustElement("#shot-visualization-summary"),this.details=this.mustElement("#shot-details"),this.sceneRoot=this.mustElement("#shot-demo-scene"),this.emptyState=this.mustElement("#shot-visualization-empty"),this.chartCanvas.addEventListener("click",t=>this.handleChartClick(t))}chartCanvas;shotList;summary;details;sceneRoot;emptyState;renderer=null;scene=null;camera=null;resizeObserver=null;selectedShotId=null;cachedReplay=null;cachedShots=[];lastShotsSignature="";lastListSelectionKey=null;lastSelectedShotKey=null;shotButtons=new Map;destroy(){this.resizeObserver?.disconnect(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}render(e=this.options.getReplayPlayer()?.getState()??null){const t=this.shotEvents(),i=e?.currentTime??null;this.findSelectedShot(t)||(this.selectedShotId=t[0]?this.shotKey(t[0],0):null);const s=this.findSelectedShot(t),a=s?.key??null,r=this.shotsSignature(t),o=r!==this.lastShotsSignature;this.emptyState.hidden=t.length>0,o&&(this.summary.textContent=this.summaryText(t)),o||a!==this.lastListSelectionKey?(this.renderShotList(t,i,a),this.lastListSelectionKey=a):this.updateShotListActiveState(t,i),this.renderChart(t,i),(o||a!==this.lastSelectedShotKey)&&(this.renderSelectedShot(s?.shot??null),this.lastSelectedShotKey=a),this.lastShotsSignature=r}shotEvents(){const e=this.options.getReplayPlayer()?.replay;return e?e===this.cachedReplay?this.cachedShots:(this.cachedReplay=e,this.cachedShots=e.timelineEvents.filter(f6),this.cachedShots):(this.cachedReplay=null,this.cachedShots=[],[])}summaryText(e){if(e.length===0)return"No shots";const t=e.filter(a=>a.shot.resulting_save).length,i=e.map(a=>a.shot.ball_speed).filter(a=>Number.isFinite(a)),s=i.length===0?null:i.reduce((a,r)=>a+r,0)/i.length;return`${e.length} shots | ${t} saved | avg ${Uu(s)}`}renderShotList(e,t,i){this.shotButtons.clear(),this.shotList.replaceChildren(...e.map((s,a)=>{const r=this.shotKey(s,a),o=document.createElement("button");o.type="button",o.className="shot-list-item",o.dataset.selected=String(r===i),o.dataset.active=String(hm(s,t)),o.addEventListener("click",()=>{this.selectedShotId=r,this.options.cueTimelineEvent(s),this.render()});const l=document.createElement("span");l.className="shot-list-title",l.textContent=s.playerName??s.playerId??`Shot ${a+1}`;const c=document.createElement("span");return c.className="shot-list-meta",c.textContent=`${nw(s.time)} | ${Uu(s.shot.ball_speed)} | ${s.shot.resulting_save?"saved":"unsaved"}`,o.append(l,c),this.shotButtons.set(r,o),o}))}updateShotListActiveState(e,t){e.forEach((i,s)=>{const a=this.shotButtons.get(this.shotKey(i,s));a&&(a.dataset.active=String(hm(i,t)))})}renderChart(e,t){const i=this.chartCanvas.getContext("2d");if(!i)return;const s=window.devicePixelRatio||1,a=this.chartCanvas.getBoundingClientRect(),r=Math.max(320,Math.round(a.width*s)),o=Math.max(220,Math.round(a.height*s));(this.chartCanvas.width!==r||this.chartCanvas.height!==o)&&(this.chartCanvas.width=r,this.chartCanvas.height=o),i.setTransform(s,0,0,s,0,0);const l=r/s,c=o/s;i.clearRect(0,0,l,c),p6(i,l,c),e.forEach((u,d)=>{const h=u.shot.shot_touch_position??u.shot.ball_position,f=ah(h,l,c),p=!!u.shot.resulting_save,g=hm(u,t),_=this.shotKey(u,d)===this.selectedShotId,m=_?6:g?5:4;i.beginPath(),i.arc(f.x,f.y,m,0,Math.PI*2),i.fillStyle=p?"#f2c14e":"#62d2a2",i.fill(),i.lineWidth=_?2.5:1.25,i.strokeStyle=_?"#f8fafc":g?"#e11d48":"rgba(4, 12, 20, 0.85)",i.stroke()})}renderSelectedShot(e){if(!e){this.details.replaceChildren(),this.clearThreeScene();return}this.details.replaceChildren(cl("Player",e.playerName??e.playerId??"--"),cl("Speed",Uu(e.shot.ball_speed)),cl("Toward goal",Uu(e.shot.ball_speed_toward_goal)),cl("Touch",_6(e.shot.shot_touch_position??e.shot.ball_position)),cl("Save",e.shot.resulting_save?nw(e.shot.resulting_save.time):"--")),this.renderThreeScene(e)}renderThreeScene(e){const t=this.ensureRenderer(),i=this.scene,s=this.camera;i.clear(),i.add(new dc(16777215,1.2));const a=new Do(16777215,1.7);a.position.set(18,28,22),i.add(a);const r=new we(new Dn(A_*2*qi,hr*2*qi),new Ye({color:1520422,side:ct}));r.rotation.x=-Math.PI/2,i.add(r);const o=new Rt({color:14280674,transparent:!0,opacity:.55});i.add(new Ln(new Bh(r.geometry),o)),i.add(ew(!0)),i.add(ew(!1));const l=tw(e.shot.shot_touch_position??e.shot.ball_position),c=tw(e.shot.target_goal_position),u=e.shot.ball_velocity,d=u?l.clone().add(m6(u).normalize().multiplyScalar(22)):c.clone(),h=new sg([l,l.clone().lerp(d,.45).setY(Math.max(l.y,d.y)+2.8),d]),f=new Ge().setFromPoints(h.getPoints(36));i.add(new In(f,new Rt({color:e.shot.resulting_save?15909198:6476450,linewidth:2})));const p=new we(new yn(.9,24,16),new Pn({color:16317180,roughness:.36}));p.position.copy(l),i.add(p);const g=new we(new ni(1.05,1.45,32),new Ye({color:8892372,side:ct}));g.position.copy(c),g.rotation.y=Math.PI/2,i.add(g),s.position.set(0,54,72),s.lookAt(0,0,0),t.render(i,s)}ensureRenderer(){if(this.renderer&&this.scene&&this.camera)return this.resizeThreeScene(),this.renderer;const e=new Eg({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return e.setPixelRatio(window.devicePixelRatio||1),this.sceneRoot.replaceChildren(e.domElement),this.renderer=e,this.scene=new ac,this.scene.background=new ue(463132),this.camera=new Jt(42,1,.1,500),this.resizeObserver=new ResizeObserver(()=>{this.resizeThreeScene();const t=this.shotEvents().find(i=>i.id===this.selectedShotId)??null;t&&this.renderThreeScene(t)}),this.resizeObserver.observe(this.sceneRoot),this.resizeThreeScene(),e}resizeThreeScene(){if(!this.renderer||!this.camera)return;const e=this.sceneRoot.getBoundingClientRect(),t=Math.max(240,Math.round(e.width)),i=Math.max(170,Math.round(e.height));this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.renderer.setSize(t,i,!1)}clearThreeScene(){this.sceneRoot.replaceChildren(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}handleChartClick(e){const t=this.shotEvents(),i=this.chartCanvas.getBoundingClientRect(),s={x:e.clientX-i.left,y:e.clientY-i.top};let a=null,r=Number.POSITIVE_INFINITY;for(const o of t){const l=ah(o.shot.shot_touch_position??o.shot.ball_position,i.width,i.height),c=Math.hypot(l.x-s.x,l.y-s.y);c`${this.shotKey(t,i)}:${t.time}:${t.shot.ball_speed}`).join("|")}}function f6(n){return n.kind==="shot"&&!!n.shot}function hm(n,e){return e!==null&&Math.abs(e-n.time)<1.5}function p6(n,e,t){n.fillStyle="#0f2b24",n.fillRect(0,0,e,t),n.strokeStyle="rgba(226, 241, 236, 0.74)",n.lineWidth=1.2,n.strokeRect(18,18,e-36,t-36),n.beginPath(),n.moveTo(18,t/2),n.lineTo(e-18,t/2),n.stroke(),n.beginPath(),n.arc(e/2,t/2,34,0,Math.PI*2),n.stroke();const s=ah({x:0,y:-hr},e,t),a=ah({x:0,y:hr},e,t);n.fillStyle="#4fa3ff",n.fillRect(s.x-28,s.y-4,56,8),n.fillStyle="#ff8a4c",n.fillRect(a.x-28,a.y-4,56,8)}function ah(n,e,t){const s=e-36,a=t-36;return{x:18+(n.x+A_)/(A_*2)*s,y:18+(1-(n.y+hr)/(hr*2))*a}}function ew(n){const e=new Mt,t=new Rt({color:n?16747084:5219327}),i=(n?hr:-hr)*qi,s=u6*qi,a=d6*qi,r=[new S(-s,0,i),new S(-s,a,i),new S(s,a,i),new S(s,0,i)];return e.add(new In(new Ge().setFromPoints(r),t)),e}function tw(n){return new S(n.x*qi,n.z*qi,n.y*qi)}function m6(n){return new S(n.x*qi,n.z*qi,n.y*qi)}function cl(n,e){const t=document.createElement("div"),i=document.createElement("dt");i.textContent=n;const s=document.createElement("dd");return s.textContent=e,t.append(i,s),t}function nw(n){return Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function Uu(n){return Number.isFinite(n)?`${Math.round(n)} uu/s`:"--"}function _6(n){return n?`${Math.round(n.x)}, ${Math.round(n.y)}, ${Math.round(n.z)}`:"--"}const g6=4,y6=100;let ot=null,Yg=null,rh=null,fo=null,po=null,oh=null,iw=0,Va=null;const uf=BE({refreshTimelineRanges(){hh()},rerenderCurrentState(){ot&&ot.setBoostPickupAnimationEnabled(ot.getState().boostPickupAnimationEnabled)},requestConfigSync(){mn()}}),cd=l$({rerenderCurrentState(){if(!ot)return;const n=ot.getState();pc(n.frameIndex)},refreshTimelineRanges(){hh()},requestConfigSync(){mn()}},{boostPickupFilters:uf}),_n=R8({modules:cd,boostPickupFilters:uf,getContext:_o,getReplayPlayer:()=>ot,getTimelineOverlay:()=>Yg,getEventTimelineSources:jg,withTimelineEventSeekTimes:m1,renderModuleSummary:Ja,renderModuleSettings:Qa,renderStatsWindows(){ot&&pc(ot.getState().frameIndex)},renderTimelineEventCount:Qr,requestConfigSync:mn}),vl=o6({goalWatchLeadSeconds:g6,getReplayPlayer:()=>ot,getCameraControlsController:()=>Bi,getMechanicsReviewController:()=>zi,getSkipPostGoalTransitions:()=>Ga,getSkipKickoffs:()=>$a,syncBoostPadOverlayPlugin:p1,setupActiveModules:dh,renderModuleSummary:Ja,renderModuleSettings:Qa,renderStatsWindows(n){pc(n)},scheduleConfigUrlUpdate:mn}),bi=c6({getFloatingWindowController:()=>aa,getLauncherMenu:()=>I_,getLauncherToggle:()=>P_,getFileInput:()=>lh});let bl=null,lh,u1,R_,sw,P_,I_,aw,rw,ow,lw,cw,uw,fm,pm,mm,_m,Bu,zu,dw,hw,fw,pw,ea,d1,h1,L_,Ga,Jr=null,$a,xl,wl,Hu=null,D_=Jl(),Bi=null,Sl=null,mw=null,mo=null,ec=null,tc=null,ch=null,zi=null,aa=null,k_=null,uh=null,ud=null,na=null,O_=null,As=null;function v6(n){return _n.getActiveCapabilityIds(n)}function b6(){}function _o(){return!ot||!fo||!po?null:{player:ot,replay:ot.replay,statsTimeline:fo,statsFrameLookup:po,fieldScale:1}}function dh(){_n.setupActiveModules()}function f1(){_n.teardownActiveModules()}function _w(n,e,t){_n.toggleCapability(n,e,t)}function x6(){_n.clearTimelineEventSources()}function w6(){_n.clearTimelineRangeSources()}function S6(){_n.clearStandalonePlugins()}function p1(){_n.syncBoostPadOverlayPlugin()}function gw(){_n.syncTimelineEvents()}function hh(){_n.syncTimelineRanges()}function Qr(){const n=_o();if(!n){L_.textContent="--";return}L_.textContent=`${T6(n)}`}function T6(n){return tc?.countVisibleSources(n)??0}function ae(n,e){const t=n.querySelector(e);if(!(t instanceof HTMLElement))throw new Error(`Missing element for selector: ${e}`);return t}function M6(n){if(!aa)throw new Error("Floating windows are not initialized.");return aa.readPlacement(n)}function E6(n,e){aa?.applyPlacement(n,e)}function pc(n=ot?.getState().frameIndex??0,e={}){mo?.render(n,e)}function C6(n){mo?.create(n)}function A6(){mo?.clear()}function mn(){na?.scheduleConfigUrlUpdate()}function R6(n){na?.applyConfigToStaticControls(n)}function m1(n){return n.map(e=>({...e,seekTime:Pg(e)}))}function Ja(){ch?.renderSummary()}function _1(){tc?.render()}function jg(n){return tc?.getSources(n)??[]}function P6(){const n=_o();return G$(n,jg(n))}function Zg(){ec?.render()}function Jg(n){const e=bl?.querySelector(`[data-window-id="${n}"]`);return!!(e&&!e.hidden)}function Qg(n,e={}){!e.forceScroll&&!Jg("event-playlist")||ec?.syncTimeline(n,e)}function g1(){ec?.reset()}function I6(n){const e=G8(n);e&&(_n.activateMechanicTimelineKind(e),_1())}function L6(n){return zi?.enforceClipBoundary(n)??!1}function Qa(){ch?.renderSettings()}function ey(n=ot?.getState().frameIndex??0){k_?.render(n)}function y1(n=ot?.getState()??null){Jg("shot-visualization")&&ud?.render(n)}function D6(n){if(bi.toggleWindow(n),!!Jg(n)){if(n==="event-playlist"){Zg();const e=ot?.getState();e&&Qg(e,{forceScroll:!0})}n==="shot-visualization"&&y1(ot?.getState()??null)}}function k6(n){uh?.setTransportEnabled(n,ot?.getState())}function v1(n=rh?.getStatus()??null){Sl?.sync(n)}function O6(n){if(L6(n))return;const e=performance.now();n.playing&&e-iwzW(n,e=>{ea.textContent=tf(e),Jr?.update(e)})))}async function F_(n,e){await QW(n,e,{elements:{fileInput:lh,viewport:u1,emptyState:R_,statusReadout:ea,playersReadout:d1,framesReadout:h1,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl},getReplayLoadModal:()=>Jr,getReplayPlayer:()=>ot,setReplayPlayer(t){ot=t,Va?.syncSource()},getUnsubscribe:()=>oh,setUnsubscribe(t){oh=t},setCanvasRecorder(t){rh=t},setLoadedReplayName(t){O_=t},setTimelineOverlay(t){Yg=t},setStatsTimeline(t){fo=t,Va?.syncSource()},setStatsFrameLookup(t){po=t},setStatRegistry(t){D_=t},getInitialConfig:()=>As,setApplyingConfig(t){na?.setApplyingConfig(t)},getReplayTimelineEvents(t){return A5(t,_n.getActiveTimelineEventSourceIds())},withTimelineEventSeekTimes:m1,includeBoostPickupAnimationPickup:F6,syncRecordingWindow:v1,setTransportEnabled:k6,teardownActiveModules:f1,clearTimelineEventSources:x6,clearTimelineRangeSources:w6,clearStandalonePlugins:S6,clearRenderCaches:b6,resetEventPlaylistWindow:g1,renderModuleSummary:Ja,renderScoreboard:ey,renderTimelineEventCount:Qr,renderMechanicsTimelineControls:_1,renderEventPlaylistWindow:Zg,renderModuleSettings:Qa,syncBoostPadOverlayPlugin:p1,setupActiveModules:dh,renderSnapshot:O6,applyConfigToReplayPlayer:vl.applyConfigToReplayPlayer,renderStatsWindows:pc,syncEventPlaylistTimeline:Qg,getCameraControlsController:()=>Bi})}function U6(n,e={}){Hu?.(),n.innerHTML=d3(),bl=n,Jr=IH(n),aa=OW({getRoot:()=>bl??document,requestConfigSync:mn}),lh=ae(n,"#replay-file"),u1=ae(n,"#viewport"),R_=ae(n,"#empty-state"),sw=ae(n,"#empty-load-replay"),P_=ae(n,"#launcher-toggle"),I_=ae(n,"#launcher-menu"),aw=ae(n,"#load-replay-action"),rw=ae(n,"#floating-window-layer"),k_=u8({body:ae(n,"#scoreboard-window-body"),getReplayPlayer:()=>ot,getStatsFrameLookup:()=>po});const t=ae(n,"#mechanics-timeline-window-body");tc=q$({body:t,modules:cd,getContext:_o,getActiveTimelineEventSourceIds:()=>_n.getActiveTimelineEventSourceIds(),getActiveMechanicTimelineKinds:()=>_n.getActiveMechanicTimelineKinds(),toggleEventSource(d,h){_w(d,"events",h)},setMechanicTimelineKind(d,h){_n.setMechanicTimelineKind(d,h)},setupActiveModules:dh,syncTimelineEvents:gw,syncTimelineRanges:hh,renderModuleSummary:Ja,renderModuleSettings:Qa,renderTimelineEventCount:Qr,requestConfigSync:mn}),ow=ae(n,"#event-playlist-window-body"),ec=NW({body:ow,getReplayPlayer:()=>ot,getSources:P6,cueTimelineEvent:vl.cueTimelineEvent,formatTime:ss}),ud=new h6({body:ae(n,"#shot-visualization-window-body"),getReplayPlayer:()=>ot,cueTimelineEvent:vl.cueTimelineEvent}),lw=ae(n,"#replay-loading-summary"),cw=ae(n,"#replay-loading-active"),uw=ae(n,"#replay-loading-list");const i=X8({elements:{reviewSummary:ae(n,"#mechanics-review-replay-load-summary"),loadingSummary:lw,loadingActive:cw,loadingList:uw},isActiveReview(d){return zi?.review===d},onActiveLoadProgress(d){ea.textContent=tf(d),Jr?.update(d)}});zi=Y8({elements:{file:ae(n,"#mechanics-review-file"),url:ae(n,"#mechanics-review-url"),loadUrl:ae(n,"#mechanics-review-load-url"),status:ae(n,"#mechanics-review-status"),index:ae(n,"#mechanics-review-index"),title:ae(n,"#mechanics-review-title"),mechanic:ae(n,"#mechanics-review-mechanic"),player:ae(n,"#mechanics-review-player"),clip:ae(n,"#mechanics-review-clip"),event:ae(n,"#mechanics-review-event"),reason:ae(n,"#mechanics-review-reason"),previous:ae(n,"#mechanics-review-prev"),replay:ae(n,"#mechanics-review-replay"),next:ae(n,"#mechanics-review-next"),confirm:ae(n,"#mechanics-review-confirm"),reject:ae(n,"#mechanics-review-reject"),uncertain:ae(n,"#mechanics-review-uncertain"),count:ae(n,"#mechanics-review-count"),list:ae(n,"#mechanics-review-list")},replayLoads:i,getReplayPlayer:()=>ot,resetReplayTransitionControls(){Ga.checked=!1,$a.checked=!1},activateTimelineSource:I6,loadReplayBundleForDisplay:F_,applyClipPerspective(d){Bi?.followPlayerWithReplayCamera(d.playerId,{ballCam:d.ballCam,usePlayerCameraSettings:d.usePlayerCameraSettings})},showReplayLoadingWindow(){bi.showWindow("replay-loading")}});const s=ae(n,"#boost-pickup-filters-window-body"),a=ae(n,"#touch-controls-window-body");fm=ae(n,"#stats-window-layer"),mo=w$({layer:fm,getReplayPlayer:()=>ot,getStatsTimeline:()=>fo,getStatsFrameLookup:()=>po,getStatRegistry:()=>D_,readWindowPlacement:M6,applyWindowPlacement:E6,bringWindowToFront:bi.bringWindowToFront,setLauncherOpen:bi.setLauncherOpen,requestConfigSync:mn,watchGoalReplay:vl.watchGoalReplay,cueGoalReplay:vl.cueGoalReplay}),pm=ae(n,"#toggle-playback"),mm=ae(n,"#previous-frame"),_m=ae(n,"#next-frame"),Bu=ae(n,"#playback-rate"),Bi=DH({elements:{attachedPlayer:ae(n,"#attached-player"),cameraViewFreeButton:ae(n,"#camera-view-free"),cameraViewFollowButton:ae(n,"#camera-view-follow"),cameraViewAutoPossession:ae(n,"#camera-view-auto-possession"),cameraViewOverheadButton:ae(n,"#camera-view-overhead"),cameraViewSideButton:ae(n,"#camera-view-side"),usePlayerCameraSettings:ae(n,"#use-player-camera-settings"),cameraSettingsControls:ae(n,"#camera-settings-controls"),customCameraFov:ae(n,"#custom-camera-fov"),customCameraHeight:ae(n,"#custom-camera-height"),customCameraPitch:ae(n,"#custom-camera-pitch"),customCameraDistance:ae(n,"#custom-camera-distance"),customCameraStiffness:ae(n,"#custom-camera-stiffness"),customCameraSwivelSpeed:ae(n,"#custom-camera-swivel-speed"),customCameraTransitionSpeed:ae(n,"#custom-camera-transition-speed"),customCameraFovReadout:ae(n,"#custom-camera-fov-readout"),customCameraHeightReadout:ae(n,"#custom-camera-height-readout"),customCameraPitchReadout:ae(n,"#custom-camera-pitch-readout"),customCameraDistanceReadout:ae(n,"#custom-camera-distance-readout"),customCameraStiffnessReadout:ae(n,"#custom-camera-stiffness-readout"),customCameraSwivelSpeedReadout:ae(n,"#custom-camera-swivel-speed-readout"),customCameraTransitionSpeedReadout:ae(n,"#custom-camera-transition-speed-readout"),ballCamOffButton:ae(n,"#ball-cam-off"),ballCamOnButton:ae(n,"#ball-cam-on"),ballCamPlayerButton:ae(n,"#ball-cam-player"),nameplateLift:ae(n,"#custom-nameplate-lift"),nameplateLiftReadout:ae(n,"#custom-nameplate-lift-readout"),cameraProfileReadout:ae(n,"#camera-profile-readout"),cameraFovReadout:ae(n,"#camera-fov-readout"),cameraHeightReadout:ae(n,"#camera-height-readout"),cameraPitchReadout:ae(n,"#camera-pitch-readout"),cameraBaseDistanceReadout:ae(n,"#camera-base-distance-readout"),cameraStiffnessReadout:ae(n,"#camera-stiffness-readout")},getReplayPlayer:()=>ot,requestConfigSync:mn,onAutoPossessionChange(d){Va?.syncSource(),d&&Va?.syncCurrentFrame()}}),Va=rV({getReplayPlayer:()=>ot,getStatsTimeline:()=>fo,getCameraControlsController:()=>Bi}),VE(ae(n,"#touch-color-legend-body"),["team"]),ch=J$({elements:{summary:ae(n,"#module-summary"),settings:ae(n,"#module-settings"),boostPickupFilters:s,touchControls:a},modules:cd,boostPickupFilters:uf,getContext:_o,getTimelineSources:()=>jg(_o()),getActiveModules:()=>_n.getActiveModules(),getActiveCapabilityIds:v6,getBoostPickupAnimationEnabled:()=>ot?.getState().boostPickupAnimationEnabled??!1,toggleCapability:_w,toggleBoostPickupAnimation(){const d=!(ot?.getState().boostPickupAnimationEnabled??!1);ot?.setBoostPickupAnimationEnabled(d),dh(),Ja(),Qa(),mn()},syncTimelineEvents:gw,syncTimelineRanges:hh,renderTimelineEventCount:Qr,requestConfigSync:mn}),dw=ae(n,"#time-readout"),hw=ae(n,"#frame-readout"),fw=ae(n,"#duration-readout"),pw=ae(n,"#playback-status-readout"),ea=ae(n,"#status-readout"),d1=ae(n,"#players-readout"),h1=ae(n,"#frames-readout"),L_=ae(n,"#events-readout"),zu=ae(n,"#playback-rate-readout"),Ga=ae(n,"#skip-post-goal-transitions"),$a=ae(n,"#skip-kickoffs"),xl=ae(n,"#hitbox-wireframes"),wl=ae(n,"#hitbox-only-mode"),uh=h8({elements:{togglePlayback:pm,previousFrame:mm,nextFrame:_m,playbackRate:Bu,playbackRateReadout:zu,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl,emptyState:R_,timeReadout:dw,frameReadout:hw,durationReadout:fw,playbackStatusReadout:pw},getFrameCount:()=>ot?.replay.frameCount??0,getCameraControlsController:()=>Bi}),Sl=r8({elements:{fps:ae(n,"#recording-fps"),playbackRate:ae(n,"#recording-playback-rate"),start:ae(n,"#recording-start"),fullReplay:ae(n,"#recording-full-replay"),stop:ae(n,"#recording-stop"),download:ae(n,"#recording-download"),clear:ae(n,"#recording-clear"),status:ae(n,"#recording-status"),elapsed:ae(n,"#recording-elapsed"),size:ae(n,"#recording-size"),type:ae(n,"#recording-type")},getCanvasRecorder:()=>rh,getReplayPlayer:()=>ot,getLoadedReplayName:()=>O_,setStatus(d){ea.textContent=d},requestConfigSync:mn}),mw=C8({elements:{mechanic:ae(n,"#missed-event-mechanic"),capture:ae(n,"#missed-event-capture"),list:ae(n,"#missed-event-list"),export:ae(n,"#missed-event-export"),upload:ae(n,"#missed-event-upload"),clear:ae(n,"#missed-event-clear"),status:ae(n,"#missed-event-status")},getReplayPlayer:()=>ot,showWindow:()=>bi.showWindow("missed-events")}),na=l6({modules:cd,playbackRate:Bu,playbackRateReadout:zu,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl,getReplayPlayer:()=>ot,getCameraControlsController:()=>Bi,getRecordingWindowController:()=>Sl,getFloatingWindowController:()=>aa,getStatsWindowsController:()=>mo,getActiveModulesRuntime:()=>_n,getInitialConfig:()=>As,renderModuleSummary:Ja,renderModuleSettings:Qa,renderTimelineEventCount:Qr});const r=i1(window.location),o=yW(window.location);let l=null;if(e.initialConfig!==void 0)As=e.initialConfig;else{try{As=gW(window.location)}catch(d){l=d,console.error("Invalid stats player config:",d),ea.textContent=d instanceof Error?d.message:"Invalid stats player config",As=null}o&&JW(r,As,l)}const c=new AbortController;bi.installWindowDragging(rw,c.signal),bi.installWindowDragging(fm,c.signal);const u=()=>{c.abort(),oh?.(),oh=null,f1(),ot?.destroy(),ot=null,rh=null,Yg=null,fo=null,po=null,D_=Jl(),A6(),mo=null,_n.reset(),Jr?.destroy(),Jr=null,g1(),tc=null,ec=null,zi?.reset(),zi=null,O_=null,Va?.reset(),Va=null,Bi=null,Sl=null,ch=null,k_=null,uh=null,ud?.destroy(),ud=null,As=null,na?.reset(),na=null,aa?.reset(),aa=null,bl===n&&(bl=null,n.replaceChildren()),Hu===u&&(Hu=null)};if(Hu=u,As){na?.setApplyingConfig(!0);try{R6(As)}finally{na?.setApplyingConfig(!1)}}return f8({elements:{root:n,launcherToggle:P_,launcherMenu:I_,loadReplayAction:aw,emptyLoadReplay:sw,fileInput:lh,togglePlayback:pm,previousFrame:mm,nextFrame:_m,playbackRate:Bu,playbackRateReadout:zu,skipPostGoalTransitions:Ga,skipKickoffs:$a,hitboxWireframes:xl,hitboxOnlyMode:wl},signal:c.signal,setLauncherOpen:bi.setLauncherOpen,openReplayFilePicker:bi.openReplayFilePicker,getElementWindowId:bi.getElementWindowId,toggleWindow:D6,hideWindow:bi.hideWindow,createStatsWindow:C6,async loadReplayFile(d){try{zi?.clearCurrentClip({resetReplayId:!0,render:!0}),await yw(UW(d))}catch(h){console.error("Failed to load replay:",h),ea.textContent=h instanceof Error?h.message:"Failed to load replay"}},togglePlayback(){ot?.togglePlayback(),mn()},stepFrames(d){ot?.stepFrames(d),mn()},setPlaybackRate(d){ot?.setPlaybackRate(d),mn()},setSkipPostGoalTransitionsEnabled(d){ot?.setSkipPostGoalTransitionsEnabled(d),mn()},setSkipKickoffsEnabled(d){ot?.setSkipKickoffsEnabled(d),mn()},setHitboxWireframesEnabled(d){ot?.setHitboxWireframesEnabled(d),mn()},setHitboxOnlyModeEnabled(d){ot?.setHitboxOnlyModeEnabled(d),mn()}}),zi?.installEventListeners(c.signal),Sl?.installEventListeners(c.signal),mw?.installEventListeners(c.signal),Bi?.installEventListeners(c.signal),_8({getReplayPlayer:()=>ot,signal:c.signal}),window.addEventListener("message",d=>{if(d.origin!==window.location.origin)return;const h=d.data;!h||typeof h!="object"||h.source!=="rocket-sense"||h.type==="activateReviewItem"&&typeof h.index=="number"&&Number.isInteger(h.index)&&zi?.activateItem(h.index)},{signal:c.signal}),Ja(),Qa(),ey(),Bi?.renderProfile(),Bi?.syncModeButtons(),v1(),Qr(),zi?.render(),Zg(),r6({signal:c.signal,location:window.location,statusReadout:ea,initialBundle:e.initialBundle,initialReplayName:e.initialReplayName,loadFromLocation:e.loadFromLocation,loadReplay:yw,loadReplayBundleForDisplay:F_,getMechanicsReviewController:()=>zi,showMechanicsReviewWindow(){bi.showWindow("mechanics-review")}}),{root:n,destroy:u}}export{U6 as mountStatEvaluationPlayer}; + `,this.chartCanvas=this.mustElement("#shot-chart-canvas"),this.shotList=this.mustElement("#shot-list"),this.summary=this.mustElement("#shot-visualization-summary"),this.details=this.mustElement("#shot-details"),this.sceneRoot=this.mustElement("#shot-demo-scene"),this.emptyState=this.mustElement("#shot-visualization-empty"),this.chartCanvas.addEventListener("click",t=>this.handleChartClick(t))}chartCanvas;shotList;summary;details;sceneRoot;emptyState;renderer=null;scene=null;camera=null;resizeObserver=null;selectedShotId=null;cachedReplay=null;cachedShots=[];lastShotsSignature="";lastListSelectionKey=null;lastSelectedShotKey=null;shotButtons=new Map;destroy(){this.resizeObserver?.disconnect(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}render(e=this.options.getReplayPlayer()?.getState()??null){const t=this.shotEvents(),i=e?.currentTime??null;this.findSelectedShot(t)||(this.selectedShotId=t[0]?this.shotKey(t[0],0):null);const s=this.findSelectedShot(t),a=s?.key??null,r=this.shotsSignature(t),o=r!==this.lastShotsSignature;this.emptyState.hidden=t.length>0,o&&(this.summary.textContent=this.summaryText(t)),o||a!==this.lastListSelectionKey?(this.renderShotList(t,i,a),this.lastListSelectionKey=a):this.updateShotListActiveState(t,i),this.renderChart(t,i),(o||a!==this.lastSelectedShotKey)&&(this.renderSelectedShot(s?.shot??null),this.lastSelectedShotKey=a),this.lastShotsSignature=r}shotEvents(){const e=this.options.getReplayPlayer()?.replay;return e?e===this.cachedReplay?this.cachedShots:(this.cachedReplay=e,this.cachedShots=e.timelineEvents.filter(q6),this.cachedShots):(this.cachedReplay=null,this.cachedShots=[],[])}summaryText(e){if(e.length===0)return"No shots";const t=e.filter(a=>a.shot.resulting_save).length,i=e.map(a=>a.shot.ball_speed).filter(a=>Number.isFinite(a)),s=i.length===0?null:i.reduce((a,r)=>a+r,0)/i.length;return`${e.length} shots | ${t} saved | avg ${Vu(s)}`}renderShotList(e,t,i){this.shotButtons.clear(),this.shotList.replaceChildren(...e.map((s,a)=>{const r=this.shotKey(s,a),o=document.createElement("button");o.type="button",o.className="shot-list-item",o.dataset.selected=String(r===i),o.dataset.active=String(vm(s,t)),o.addEventListener("click",()=>{this.selectedShotId=r,this.options.cueTimelineEvent(s),this.render()});const l=document.createElement("span");l.className="shot-list-title",l.textContent=s.playerName??s.playerId??`Shot ${a+1}`;const c=document.createElement("span");return c.className="shot-list-meta",c.textContent=`${uw(s.time)} | ${Vu(s.shot.ball_speed)} | ${s.shot.resulting_save?"saved":"unsaved"}`,o.append(l,c),this.shotButtons.set(r,o),o}))}updateShotListActiveState(e,t){e.forEach((i,s)=>{const a=this.shotButtons.get(this.shotKey(i,s));a&&(a.dataset.active=String(vm(i,t)))})}renderChart(e,t){const i=this.chartCanvas.getContext("2d");if(!i)return;const s=window.devicePixelRatio||1,a=this.chartCanvas.getBoundingClientRect(),r=Math.max(320,Math.round(a.width*s)),o=Math.max(220,Math.round(a.height*s));(this.chartCanvas.width!==r||this.chartCanvas.height!==o)&&(this.chartCanvas.width=r,this.chartCanvas.height=o),i.setTransform(s,0,0,s,0,0);const l=r/s,c=o/s;i.clearRect(0,0,l,c),Y6(i,l,c),e.forEach((u,d)=>{const h=u.shot.shot_touch_position??u.shot.ball_position,f=dh(h,l,c),p=!!u.shot.resulting_save,g=vm(u,t),_=this.shotKey(u,d)===this.selectedShotId,m=_?6:g?5:4;i.beginPath(),i.arc(f.x,f.y,m,0,Math.PI*2),i.fillStyle=p?"#f2c14e":"#62d2a2",i.fill(),i.lineWidth=_?2.5:1.25,i.strokeStyle=_?"#f8fafc":g?"#e11d48":"rgba(4, 12, 20, 0.85)",i.stroke()})}renderSelectedShot(e){if(!e){this.details.replaceChildren(),this.clearThreeScene();return}this.details.replaceChildren(hl("Player",e.playerName??e.playerId??"--"),hl("Speed",Vu(e.shot.ball_speed)),hl("Toward goal",Vu(e.shot.ball_speed_toward_goal)),hl("Touch",Z6(e.shot.shot_touch_position??e.shot.ball_position)),hl("Save",e.shot.resulting_save?uw(e.shot.resulting_save.time):"--")),this.renderThreeScene(e)}renderThreeScene(e){const t=this.ensureRenderer(),i=this.scene,s=this.camera;i.clear(),i.add(new mc(16777215,1.2));const a=new Fo(16777215,1.7);a.position.set(18,28,22),i.add(a);const r=new we(new kn(O_*2*Yi,fr*2*Yi),new Ye({color:1520422,side:ct}));r.rotation.x=-Math.PI/2,i.add(r);const o=new Rt({color:14280674,transparent:!0,opacity:.55});i.add(new Ln(new Wh(r.geometry),o)),i.add(lw(!0)),i.add(lw(!1));const l=cw(e.shot.shot_touch_position??e.shot.ball_position),c=cw(e.shot.target_goal_position),u=e.shot.ball_velocity,d=u?l.clone().add(j6(u).normalize().multiplyScalar(22)):c.clone(),h=new dg([l,l.clone().lerp(d,.45).setY(Math.max(l.y,d.y)+2.8),d]),f=new Ge().setFromPoints(h.getPoints(36));i.add(new In(f,new Rt({color:e.shot.resulting_save?15909198:6476450,linewidth:2})));const p=new we(new yn(.9,24,16),new Pn({color:16317180,roughness:.36}));p.position.copy(l),i.add(p);const g=new we(new ni(1.05,1.45,32),new Ye({color:8892372,side:ct}));g.position.copy(c),g.rotation.y=Math.PI/2,i.add(g),s.position.set(0,54,72),s.lookAt(0,0,0),t.render(i,s)}ensureRenderer(){if(this.renderer&&this.scene&&this.camera)return this.resizeThreeScene(),this.renderer;const e=new kg({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return e.setPixelRatio(window.devicePixelRatio||1),this.sceneRoot.replaceChildren(e.domElement),this.renderer=e,this.scene=new cc,this.scene.background=new ue(463132),this.camera=new Jt(42,1,.1,500),this.resizeObserver=new ResizeObserver(()=>{this.resizeThreeScene();const t=this.shotEvents().find(i=>i.id===this.selectedShotId)??null;t&&this.renderThreeScene(t)}),this.resizeObserver.observe(this.sceneRoot),this.resizeThreeScene(),e}resizeThreeScene(){if(!this.renderer||!this.camera)return;const e=this.sceneRoot.getBoundingClientRect(),t=Math.max(240,Math.round(e.width)),i=Math.max(170,Math.round(e.height));this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.renderer.setSize(t,i,!1)}clearThreeScene(){this.sceneRoot.replaceChildren(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}handleChartClick(e){const t=this.shotEvents(),i=this.chartCanvas.getBoundingClientRect(),s={x:e.clientX-i.left,y:e.clientY-i.top};let a=null,r=Number.POSITIVE_INFINITY;for(const o of t){const l=dh(o.shot.shot_touch_position??o.shot.ball_position,i.width,i.height),c=Math.hypot(l.x-s.x,l.y-s.y);c`${this.shotKey(t,i)}:${t.time}:${t.shot.ball_speed}`).join("|")}}function q6(n){return n.kind==="shot"&&!!n.shot}function vm(n,e){return e!==null&&Math.abs(e-n.time)<1.5}function Y6(n,e,t){n.fillStyle="#0f2b24",n.fillRect(0,0,e,t),n.strokeStyle="rgba(226, 241, 236, 0.74)",n.lineWidth=1.2,n.strokeRect(18,18,e-36,t-36),n.beginPath(),n.moveTo(18,t/2),n.lineTo(e-18,t/2),n.stroke(),n.beginPath(),n.arc(e/2,t/2,34,0,Math.PI*2),n.stroke();const s=dh({x:0,y:-fr},e,t),a=dh({x:0,y:fr},e,t);n.fillStyle="#4fa3ff",n.fillRect(s.x-28,s.y-4,56,8),n.fillStyle="#ff8a4c",n.fillRect(a.x-28,a.y-4,56,8)}function dh(n,e,t){const s=e-36,a=t-36;return{x:18+(n.x+O_)/(O_*2)*s,y:18+(1-(n.y+fr)/(fr*2))*a}}function lw(n){const e=new Mt,t=new Rt({color:n?16747084:5219327}),i=(n?fr:-fr)*Yi,s=W6*Yi,a=X6*Yi,r=[new S(-s,0,i),new S(-s,a,i),new S(s,a,i),new S(s,0,i)];return e.add(new In(new Ge().setFromPoints(r),t)),e}function cw(n){return new S(n.x*Yi,n.z*Yi,n.y*Yi)}function j6(n){return new S(n.x*Yi,n.z*Yi,n.y*Yi)}function hl(n,e){const t=document.createElement("div"),i=document.createElement("dt");i.textContent=n;const s=document.createElement("dd");return s.textContent=e,t.append(i,s),t}function uw(n){return Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function Vu(n){return Number.isFinite(n)?`${Math.round(n)} uu/s`:"--"}function Z6(n){return n?`${Math.round(n.x)}, ${Math.round(n.y)}, ${Math.round(n.z)}`:"--"}const J6=4,Q6=100;let st=null,ny=null,hh=null,_o=null,go=null,fh=null,dw=0,Ga=null;const _f=YE({refreshTimelineRanges(){yh()},rerenderCurrentState(){st&&st.setBoostPickupAnimationEnabled(st.getState().boostPickupAnimationEnabled)},requestConfigSync(){mn()}}),pd=B$({rerenderCurrentState(){if(!st)return;const n=st.getState();yc(n.frameIndex)},refreshTimelineRanges(){yh()},requestConfigSync(){mn()}},{boostPickupFilters:_f}),_n=u6({modules:pd,boostPickupFilters:_f,getContext:vo,getReplayPlayer:()=>st,getTimelineOverlay:()=>ny,getEventTimelineSources:iy,withTimelineEventSeekTimes:M1,renderModuleSummary:Qa,renderModuleSettings:er,renderStatsWindows(){st&&yc(st.getState().frameIndex)},renderTimelineEventCount:to,requestConfigSync:mn}),wl=V6({goalWatchLeadSeconds:J6,getReplayPlayer:()=>st,getCameraControlsController:()=>zi,getMechanicsReviewController:()=>Hi,getSkipPostGoalTransitions:()=>$a,getSkipKickoffs:()=>Wa,syncBoostPadOverlayPlugin:T1,setupActiveModules:gh,renderModuleSummary:Qa,renderModuleSettings:er,renderStatsWindows(n){yc(n)},scheduleConfigUrlUpdate:mn}),bi=$6({getFloatingWindowController:()=>ra,getLauncherMenu:()=>U_,getLauncherToggle:()=>N_,getFileInput:()=>ph});let Sl=null,ph,b1,F_,hw,N_,U_,fw,pw,mw,_w,gw,yw,bm,xm,wm,Sm,Gu,$u,vw,bw,xw,ww,ea,x1,w1,B_,$a,eo=null,Wa,Tl,Ml,Wu=null,z_=nc(),zi=null,El=null,Sw=null,md=null,yo=null,sc=null,ac=null,mh=null,Hi=null,ra=null,H_=null,_h=null,_d=null,ia=null,V_=null,As=null;function e9(n){return _n.getActiveCapabilityIds(n)}function t9(){}function vo(){return!st||!_o||!go?null:{player:st,replay:st.replay,statsTimeline:_o,statsFrameLookup:go,fieldScale:1}}function gh(){_n.setupActiveModules()}function S1(){_n.teardownActiveModules()}function Tw(n,e,t){_n.toggleCapability(n,e,t)}function n9(){_n.clearTimelineEventSources()}function i9(){_n.clearTimelineRangeSources()}function s9(){_n.clearStandalonePlugins()}function T1(){_n.syncBoostPadOverlayPlugin()}function Mw(){_n.syncTimelineEvents()}function yh(){_n.syncTimelineRanges()}function to(){const n=vo();if(!n){B_.textContent="--";return}B_.textContent=`${a9(n)}`}function a9(n){return ac?.countVisibleSources(n)??0}function se(n,e){const t=n.querySelector(e);if(!(t instanceof HTMLElement))throw new Error(`Missing element for selector: ${e}`);return t}function r9(n){if(!ra)throw new Error("Floating windows are not initialized.");return ra.readPlacement(n)}function o9(n,e){ra?.applyPlacement(n,e)}function yc(n=st?.getState().frameIndex??0,e={}){yo?.render(n,e)}function l9(n){yo?.create(n)}function c9(){yo?.clear()}function mn(){ia?.scheduleConfigUrlUpdate()}function u9(n){ia?.applyConfigToStaticControls(n)}function M1(n){return n.map(e=>({...e,seekTime:Ng(e)}))}function Qa(){mh?.renderSummary()}function E1(){ac?.render()}function iy(n){return ac?.getSources(n)??[]}function d9(){const n=vo();return bW(n,iy(n))}function sy(){sc?.render()}function ay(n){const e=Sl?.querySelector(`[data-window-id="${n}"]`);return!!(e&&!e.hidden)}function ry(n,e={}){!e.forceScroll&&!ay("event-playlist")||sc?.syncTimeline(n,e)}function C1(){sc?.reset()}function h9(n){const e=T6(n);e&&(_n.activateMechanicTimelineKind(e),E1())}function f9(n){return Hi?.enforceClipBoundary(n)??!1}function er(){mh?.renderSettings()}function oy(n=st?.getState().frameIndex??0){H_?.render(n)}function A1(n=st?.getState()??null){ay("shot-visualization")&&_d?.render(n)}function p9(n){if(bi.toggleWindow(n),!!ay(n)){if(n==="event-playlist"){sy();const e=st?.getState();e&&ry(e,{forceScroll:!0})}n==="shot-visualization"&&A1(st?.getState()??null)}}function m9(n){_h?.setTransportEnabled(n,st?.getState())}function R1(n=hh?.getStatus()??null){El?.sync(n),md?.sync()}function _9(n){if(f9(n))return;const e=performance.now();n.playing&&e-dwg8(n,e=>{ea.textContent=lf(e),eo?.update(e)})))}async function G_(n,e){await P8(n,e,{elements:{fileInput:ph,viewport:b1,emptyState:F_,statusReadout:ea,playersReadout:x1,framesReadout:w1,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml},getReplayLoadModal:()=>eo,getReplayPlayer:()=>st,setReplayPlayer(t){st=t,Ga?.syncSource()},getUnsubscribe:()=>fh,setUnsubscribe(t){fh=t},setCanvasRecorder(t){hh=t},setLoadedReplayName(t){V_=t},setTimelineOverlay(t){ny=t},setStatsTimeline(t){_o=t,Ga?.syncSource()},setStatsFrameLookup(t){go=t},setStatRegistry(t){z_=t},getInitialConfig:()=>As,setApplyingConfig(t){ia?.setApplyingConfig(t)},getReplayTimelineEvents(t){return a4(t,_n.getActiveTimelineEventSourceIds())},withTimelineEventSeekTimes:M1,includeBoostPickupAnimationPickup:g9,syncRecordingWindow:R1,setTransportEnabled:m9,teardownActiveModules:S1,clearTimelineEventSources:n9,clearTimelineRangeSources:i9,clearStandalonePlugins:s9,clearRenderCaches:t9,resetEventPlaylistWindow:C1,renderModuleSummary:Qa,renderScoreboard:oy,renderTimelineEventCount:to,renderMechanicsTimelineControls:E1,renderEventPlaylistWindow:sy,renderModuleSettings:er,syncBoostPadOverlayPlugin:T1,setupActiveModules:gh,renderSnapshot:_9,applyConfigToReplayPlayer:wl.applyConfigToReplayPlayer,renderStatsWindows:yc,syncEventPlaylistTimeline:ry,getCameraControlsController:()=>zi})}function b9(n,e={}){Wu?.(),n.innerHTML=V3(),Sl=n,eo=lV(n),ra=h8({getRoot:()=>Sl??document,requestConfigSync:mn}),ph=se(n,"#replay-file"),b1=se(n,"#viewport"),F_=se(n,"#empty-state"),hw=se(n,"#empty-load-replay"),N_=se(n,"#launcher-toggle"),U_=se(n,"#launcher-menu"),fw=se(n,"#load-replay-action"),pw=se(n,"#floating-window-layer"),H_=H8({body:se(n,"#scoreboard-window-body"),getReplayPlayer:()=>st,getStatsFrameLookup:()=>go});const t=se(n,"#mechanics-timeline-window-body");ac=MW({body:t,modules:pd,getContext:vo,getActiveTimelineEventSourceIds:()=>_n.getActiveTimelineEventSourceIds(),getActiveMechanicTimelineKinds:()=>_n.getActiveMechanicTimelineKinds(),toggleEventSource(d,h){Tw(d,"events",h)},setMechanicTimelineKind(d,h){_n.setMechanicTimelineKind(d,h)},setupActiveModules:gh,syncTimelineEvents:Mw,syncTimelineRanges:yh,renderModuleSummary:Qa,renderModuleSettings:er,renderTimelineEventCount:to,requestConfigSync:mn}),mw=se(n,"#event-playlist-window-body"),sc=p8({body:mw,getReplayPlayer:()=>st,getSources:d9,cueTimelineEvent:wl.cueTimelineEvent,formatTime:wi}),_d=new K6({body:se(n,"#shot-visualization-window-body"),getReplayPlayer:()=>st,cueTimelineEvent:wl.cueTimelineEvent}),_w=se(n,"#replay-loading-summary"),gw=se(n,"#replay-loading-active"),yw=se(n,"#replay-loading-list");const i=C6({elements:{reviewSummary:se(n,"#mechanics-review-replay-load-summary"),loadingSummary:_w,loadingActive:gw,loadingList:yw},isActiveReview(d){return Hi?.review===d},onActiveLoadProgress(d){ea.textContent=lf(d),eo?.update(d)}});Hi=P6({elements:{file:se(n,"#mechanics-review-file"),url:se(n,"#mechanics-review-url"),loadUrl:se(n,"#mechanics-review-load-url"),status:se(n,"#mechanics-review-status"),index:se(n,"#mechanics-review-index"),title:se(n,"#mechanics-review-title"),mechanic:se(n,"#mechanics-review-mechanic"),player:se(n,"#mechanics-review-player"),clip:se(n,"#mechanics-review-clip"),event:se(n,"#mechanics-review-event"),reason:se(n,"#mechanics-review-reason"),previous:se(n,"#mechanics-review-prev"),replay:se(n,"#mechanics-review-replay"),next:se(n,"#mechanics-review-next"),confirm:se(n,"#mechanics-review-confirm"),reject:se(n,"#mechanics-review-reject"),uncertain:se(n,"#mechanics-review-uncertain"),count:se(n,"#mechanics-review-count"),list:se(n,"#mechanics-review-list")},replayLoads:i,getReplayPlayer:()=>st,resetReplayTransitionControls(){$a.checked=!1,Wa.checked=!1},activateTimelineSource:h9,loadReplayBundleForDisplay:G_,applyClipPerspective(d){zi?.followPlayerWithReplayCamera(d.playerId,{ballCam:d.ballCam,usePlayerCameraSettings:d.usePlayerCameraSettings})},showReplayLoadingWindow(){bi.showWindow("replay-loading")}});const s=se(n,"#boost-pickup-filters-window-body"),a=se(n,"#touch-controls-window-body");bm=se(n,"#stats-window-layer"),yo=Q$({layer:bm,getReplayPlayer:()=>st,getStatsTimeline:()=>_o,getStatsFrameLookup:()=>go,getStatRegistry:()=>z_,readWindowPlacement:r9,applyWindowPlacement:o9,bringWindowToFront:bi.bringWindowToFront,setLauncherOpen:bi.setLauncherOpen,requestConfigSync:mn,watchGoalReplay:wl.watchGoalReplay,cueGoalReplay:wl.cueGoalReplay}),xm=se(n,"#toggle-playback"),wm=se(n,"#previous-frame"),Sm=se(n,"#next-frame"),Gu=se(n,"#playback-rate"),zi=uV({elements:{attachedPlayer:se(n,"#attached-player"),cameraViewFreeButton:se(n,"#camera-view-free"),cameraViewFollowButton:se(n,"#camera-view-follow"),cameraViewAutoPossession:se(n,"#camera-view-auto-possession"),cameraViewOverheadButton:se(n,"#camera-view-overhead"),cameraViewSideButton:se(n,"#camera-view-side"),usePlayerCameraSettings:se(n,"#use-player-camera-settings"),cameraSettingsControls:se(n,"#camera-settings-controls"),customCameraFov:se(n,"#custom-camera-fov"),customCameraHeight:se(n,"#custom-camera-height"),customCameraPitch:se(n,"#custom-camera-pitch"),customCameraDistance:se(n,"#custom-camera-distance"),customCameraStiffness:se(n,"#custom-camera-stiffness"),customCameraSwivelSpeed:se(n,"#custom-camera-swivel-speed"),customCameraTransitionSpeed:se(n,"#custom-camera-transition-speed"),customCameraFovReadout:se(n,"#custom-camera-fov-readout"),customCameraHeightReadout:se(n,"#custom-camera-height-readout"),customCameraPitchReadout:se(n,"#custom-camera-pitch-readout"),customCameraDistanceReadout:se(n,"#custom-camera-distance-readout"),customCameraStiffnessReadout:se(n,"#custom-camera-stiffness-readout"),customCameraSwivelSpeedReadout:se(n,"#custom-camera-swivel-speed-readout"),customCameraTransitionSpeedReadout:se(n,"#custom-camera-transition-speed-readout"),ballCamOffButton:se(n,"#ball-cam-off"),ballCamOnButton:se(n,"#ball-cam-on"),ballCamPlayerButton:se(n,"#ball-cam-player"),nameplateLift:se(n,"#custom-nameplate-lift"),nameplateLiftReadout:se(n,"#custom-nameplate-lift-readout"),cameraProfileReadout:se(n,"#camera-profile-readout"),cameraFovReadout:se(n,"#camera-fov-readout"),cameraHeightReadout:se(n,"#camera-height-readout"),cameraPitchReadout:se(n,"#camera-pitch-readout"),cameraBaseDistanceReadout:se(n,"#camera-base-distance-readout"),cameraStiffnessReadout:se(n,"#camera-stiffness-readout")},getReplayPlayer:()=>st,requestConfigSync:mn,onAutoPossessionChange(d){Ga?.syncSource(),d&&Ga?.syncCurrentFrame()}}),Ga=NV({getReplayPlayer:()=>st,getStatsTimeline:()=>_o,getCameraControlsController:()=>zi}),JE(se(n,"#touch-color-legend-body"),["team"]),mh=RW({elements:{summary:se(n,"#module-summary"),settings:se(n,"#module-settings"),boostPickupFilters:s,touchControls:a},modules:pd,boostPickupFilters:_f,getContext:vo,getTimelineSources:()=>iy(vo()),getActiveModules:()=>_n.getActiveModules(),getActiveCapabilityIds:e9,getBoostPickupAnimationEnabled:()=>st?.getState().boostPickupAnimationEnabled??!1,toggleCapability:Tw,toggleBoostPickupAnimation(){const d=!(st?.getState().boostPickupAnimationEnabled??!1);st?.setBoostPickupAnimationEnabled(d),gh(),Qa(),er(),mn()},syncTimelineEvents:Mw,syncTimelineRanges:yh,renderTimelineEventCount:to,requestConfigSync:mn}),vw=se(n,"#time-readout"),bw=se(n,"#frame-readout"),xw=se(n,"#duration-readout"),ww=se(n,"#playback-status-readout"),ea=se(n,"#status-readout"),x1=se(n,"#players-readout"),w1=se(n,"#frames-readout"),B_=se(n,"#events-readout"),$u=se(n,"#playback-rate-readout"),$a=se(n,"#skip-post-goal-transitions"),Wa=se(n,"#skip-kickoffs"),Tl=se(n,"#hitbox-wireframes"),Ml=se(n,"#hitbox-only-mode"),_h=G8({elements:{togglePlayback:xm,previousFrame:wm,nextFrame:Sm,playbackRate:Gu,playbackRateReadout:$u,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml,emptyState:F_,timeReadout:vw,frameReadout:bw,durationReadout:xw,playbackStatusReadout:ww},getFrameCount:()=>st?.replay.frameCount??0,getCameraControlsController:()=>zi}),El=N8({elements:{fps:se(n,"#recording-fps"),playbackRate:se(n,"#recording-playback-rate"),start:se(n,"#recording-start"),fullReplay:se(n,"#recording-full-replay"),stop:se(n,"#recording-stop"),download:se(n,"#recording-download"),clear:se(n,"#recording-clear"),status:se(n,"#recording-status"),elapsed:se(n,"#recording-elapsed"),size:se(n,"#recording-size"),type:se(n,"#recording-type")},getCanvasRecorder:()=>hh,getReplayPlayer:()=>st,getLoadedReplayName:()=>V_,setStatus(d){ea.textContent=d},requestConfigSync:mn}),Sw=s6({elements:{mechanic:se(n,"#missed-event-mechanic"),capture:se(n,"#missed-event-capture"),list:se(n,"#missed-event-list"),export:se(n,"#missed-event-export"),upload:se(n,"#missed-event-upload"),clear:se(n,"#missed-event-clear"),status:se(n,"#missed-event-status")},getReplayPlayer:()=>st,showWindow:()=>bi.showWindow("missed-events")}),md=l6({elements:{name:se(n,"#training-pack-name"),creator:se(n,"#training-pack-creator"),description:se(n,"#training-pack-description"),difficulty:se(n,"#training-pack-difficulty"),shooter:se(n,"#training-pack-shooter"),timeLimit:se(n,"#training-pack-time-limit"),capture:se(n,"#training-pack-capture"),load:se(n,"#training-pack-load"),loadInput:se(n,"#training-pack-load-input"),newPack:se(n,"#training-pack-new"),download:se(n,"#training-pack-download"),shotList:se(n,"#training-pack-shots"),status:se(n,"#training-pack-status")},getReplayPlayer:()=>st}),ia=G6({modules:pd,playbackRate:Gu,playbackRateReadout:$u,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml,getReplayPlayer:()=>st,getCameraControlsController:()=>zi,getRecordingWindowController:()=>El,getFloatingWindowController:()=>ra,getStatsWindowsController:()=>yo,getActiveModulesRuntime:()=>_n,getInitialConfig:()=>As,renderModuleSummary:Qa,renderModuleSettings:er,renderTimelineEventCount:to});const r=f1(window.location),o=YW(window.location);let l=null;if(e.initialConfig!==void 0)As=e.initialConfig;else{try{As=qW(window.location)}catch(d){l=d,console.error("Invalid stats player config:",d),ea.textContent=d instanceof Error?d.message:"Invalid stats player config",As=null}o&&R8(r,As,l)}const c=new AbortController;bi.installWindowDragging(pw,c.signal),bi.installWindowDragging(bm,c.signal);const u=()=>{c.abort(),fh?.(),fh=null,S1(),st?.destroy(),st=null,hh=null,ny=null,_o=null,go=null,z_=nc(),c9(),yo=null,_n.reset(),eo?.destroy(),eo=null,C1(),ac=null,sc=null,Hi?.reset(),Hi=null,V_=null,Ga?.reset(),Ga=null,zi=null,El=null,md=null,mh=null,H_=null,_h=null,_d?.destroy(),_d=null,As=null,ia?.reset(),ia=null,ra?.reset(),ra=null,Sl===n&&(Sl=null,n.replaceChildren()),Wu===u&&(Wu=null)};if(Wu=u,As){ia?.setApplyingConfig(!0);try{u9(As)}finally{ia?.setApplyingConfig(!1)}}return $8({elements:{root:n,launcherToggle:N_,launcherMenu:U_,loadReplayAction:fw,emptyLoadReplay:hw,fileInput:ph,togglePlayback:xm,previousFrame:wm,nextFrame:Sm,playbackRate:Gu,playbackRateReadout:$u,skipPostGoalTransitions:$a,skipKickoffs:Wa,hitboxWireframes:Tl,hitboxOnlyMode:Ml},signal:c.signal,setLauncherOpen:bi.setLauncherOpen,openReplayFilePicker:bi.openReplayFilePicker,getElementWindowId:bi.getElementWindowId,toggleWindow:p9,hideWindow:bi.hideWindow,createStatsWindow:l9,async loadReplayFile(d){try{Hi?.clearCurrentClip({resetReplayId:!0,render:!0}),await Ew(m8(d))}catch(h){console.error("Failed to load replay:",h),ea.textContent=h instanceof Error?h.message:"Failed to load replay"}},togglePlayback(){st?.togglePlayback(),mn()},stepFrames(d){st?.stepFrames(d),mn()},setPlaybackRate(d){st?.setPlaybackRate(d),mn()},setSkipPostGoalTransitionsEnabled(d){st?.setSkipPostGoalTransitionsEnabled(d),mn()},setSkipKickoffsEnabled(d){st?.setSkipKickoffsEnabled(d),mn()},setHitboxWireframesEnabled(d){st?.setHitboxWireframesEnabled(d),mn()},setHitboxOnlyModeEnabled(d){st?.setHitboxOnlyModeEnabled(d),mn()}}),Hi?.installEventListeners(c.signal),El?.installEventListeners(c.signal),Sw?.installEventListeners(c.signal),md?.installEventListeners(c.signal),zi?.installEventListeners(c.signal),K8({getReplayPlayer:()=>st,signal:c.signal}),window.addEventListener("message",d=>{if(d.origin!==window.location.origin)return;const h=d.data;!h||typeof h!="object"||h.source!=="rocket-sense"||h.type==="activateReviewItem"&&typeof h.index=="number"&&Number.isInteger(h.index)&&Hi?.activateItem(h.index)},{signal:c.signal}),Qa(),er(),oy(),zi?.renderProfile(),zi?.syncModeButtons(),R1(),to(),Hi?.render(),sy(),H6({signal:c.signal,location:window.location,statusReadout:ea,initialBundle:e.initialBundle,initialReplayName:e.initialReplayName,loadFromLocation:e.loadFromLocation,loadReplay:Ew,loadReplayBundleForDisplay:G_,getMechanicsReviewController:()=>Hi,showMechanicsReviewWindow(){bi.showWindow("mechanics-review")}}),{root:n,destroy:u}}export{b9 as mountStatEvaluationPlayer}; diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/preload-helper-PPVm8Dsz.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/preload-helper-PPVm8Dsz.js new file mode 100644 index 00000000..f5001933 --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/review/assets/preload-helper-PPVm8Dsz.js @@ -0,0 +1 @@ +const p="modulepreload",y=function(u,i){return new URL(u,i).href},v={},w=function(i,a,f){let d=Promise.resolve();if(a&&a.length>0){let E=function(e){return Promise.all(e.map(o=>Promise.resolve(o).then(s=>({status:"fulfilled",value:s}),s=>({status:"rejected",reason:s}))))};const r=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),m=t?.nonce||t?.getAttribute("nonce");d=E(a.map(e=>{if(e=y(e,f),e in v)return;v[e]=!0;const o=e.endsWith(".css"),s=o?'[rel="stylesheet"]':"";if(f)for(let c=r.length-1;c>=0;c--){const l=r[c];if(l.href===e&&(!o||l.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${s}`))return;const n=document.createElement("link");if(n.rel=o?"stylesheet":p,o||(n.as="script"),n.crossOrigin="",n.href=e,m&&n.setAttribute("nonce",m),document.head.appendChild(n),o)return new Promise((c,l)=>{n.addEventListener("load",c),n.addEventListener("error",()=>l(new Error(`Unable to preload CSS for ${e}`)))})}))}function h(r){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=r,window.dispatchEvent(t),!t.defaultPrevented)throw r}return d.then(r=>{for(const t of r||[])t.status==="rejected"&&h(t.reason);return i().catch(h)})};export{w as _}; diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/replayLoader.worker-BOmyAjmY.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/replayLoader.worker-BOmyAjmY.js new file mode 100644 index 00000000..34a9e71b --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/review/assets/replayLoader.worker-BOmyAjmY.js @@ -0,0 +1,2 @@ +(function(){"use strict";function be(e,t,n,r){const o=pe(e,u.__wbindgen_malloc),i=x,a=u.get_replay_bundle_json_parts_with_progress(o,i,t,k(n)?4294967297:n>>>0,k(r)?4294967297:r>>>0);if(a[2])throw G(a[1]);return G(a[0])}function ge(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(P(t,n))},__wbg_Number_04624de7d0e8332d:function(t){return Number(t)},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(t,n){const r=n,o=typeof r=="bigint"?r:void 0;y().setBigInt64(t+8,k(o)?BigInt(0):o,!0),y().setInt32(t+0,!k(o),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(t){const n=t,r=typeof n=="boolean"?n:void 0;return k(r)?16777215:r?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(t,n){const r=U(n),o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(t,n){return t in n},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(t){return typeof t=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(t){return typeof t=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(t){const n=t;return typeof n=="object"&&n!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(t){return t===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(t,n){return t===n},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(t,n){return t==n},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(t,n){const r=n,o=typeof r=="number"?r:void 0;y().setFloat64(t+8,k(o)?0:o,!0),y().setInt32(t+0,!k(o),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var i=k(o)?0:F(o,u.__wbindgen_malloc,u.__wbindgen_realloc),a=x;y().setInt32(t+4,a,!0),y().setInt32(t+0,i,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(P(t,n))},__wbg_call_389efe28435a9388:function(){return E(function(t,n){return t.call(n)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return E(function(t,n,r){return t.call(n,r)},arguments)},__wbg_done_57b39ecd9addfe81:function(t){return t.done},__wbg_entries_58c7934c745daac7:function(t){return Object.entries(t)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(P(t,n))}finally{u.__wbindgen_free(r,o,1)}},__wbg_get_9b94d73e6221f75c:function(t,n){return t[n>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return E(function(t,n){return Reflect.get(t,n)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(t,n){return t[n]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(t){let n;try{n=t instanceof ArrayBuffer}catch{n=!1}return n},__wbg_instanceof_Map_53af74335dec57f4:function(t){let n;try{n=t instanceof Map}catch{n=!1}return n},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(t){let n;try{n=t instanceof Uint8Array}catch{n=!1}return n},__wbg_isArray_d314bb98fcf08331:function(t){return Array.isArray(t)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(t){return Number.isSafeInteger(t)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(t){return t.length},__wbg_length_35a7bace40f36eac:function(t){return t.length},__wbg_log_f1a1b5cd3f9c7822:function(t,n){console.log(P(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(t){return new Uint8Array(t)},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(Z(t,n))},__wbg_next_3482f54c49e8af19:function(){return E(function(t){return t.next()},arguments)},__wbg_next_418f80d8f5303233:function(t){return t.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(t,n,r){Uint8Array.prototype.set.call(Z(t,n),r)},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return E(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg_value_0546255b415e96c1:function(t){return t.value},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return P(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=u.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function ye(e){const t=u.__externref_table_alloc();return u.__wbindgen_externrefs.set(t,e),t}function U(e){const t=typeof e;if(t=="number"||t=="boolean"||e==null)return`${e}`;if(t=="string")return`"${e}"`;if(t=="symbol"){const o=e.description;return o==null?"Symbol":`Symbol(${o})`}if(t=="function"){const o=e.name;return typeof o=="string"&&o.length>0?`Function(${o})`:"Function"}if(Array.isArray(e)){const o=e.length;let i="[";o>0&&(i+=U(e[0]));for(let a=1;a1)r=n[1];else return toString.call(e);if(r=="Object")try{return"Object("+JSON.stringify(e)+")"}catch{return"Object"}return e instanceof Error?`${e.name}: ${e.message} +${e.stack}`:r}function Z(e,t){return e=e>>>0,O().subarray(e/1,e/1+t)}let T=null;function y(){return(T===null||T.buffer.detached===!0||T.buffer.detached===void 0&&T.buffer!==u.memory.buffer)&&(T=new DataView(u.memory.buffer)),T}function P(e,t){return e=e>>>0,we(e,t)}let B=null;function O(){return(B===null||B.byteLength===0)&&(B=new Uint8Array(u.memory.buffer)),B}function E(e,t){try{return e.apply(this,t)}catch(n){const r=ye(n);u.__wbindgen_exn_store(r)}}function k(e){return e==null}function pe(e,t){const n=t(e.length*1,1)>>>0;return O().set(e,n/1),x=e.length,n}function F(e,t,n){if(n===void 0){const s=D.encode(e),l=t(s.length,1)>>>0;return O().subarray(l,l+s.length).set(s),x=s.length,l}let r=e.length,o=t(r,1)>>>0;const i=O();let a=0;for(;a127)break;i[o+a]=s}if(a!==r){a!==0&&(e=e.slice(a)),o=n(o,r,r=a+e.length*3,1)>>>0;const s=O().subarray(o+a,o+r),l=D.encodeInto(e,s);a+=l.written,o=n(o,r,a,1)>>>0}return x=a,o}function G(e){const t=u.__wbindgen_externrefs.get(e);return u.__externref_table_dealloc(e),t}let z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});z.decode();const he=2146435072;let H=0;function we(e,t){return H+=t,H>=he&&(z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),z.decode(),H=t),z.decode(O().subarray(e,e+t))}const D=new TextEncoder;"encodeInto"in D||(D.encodeInto=function(e,t){const n=D.encode(e);return t.set(n),{read:e.length,written:n.length}});let x=0,u;function ke(e,t){return u=e.exports,T=null,B=null,u.__wbindgen_start(),u}async function xe(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Ae(e){if(u!==void 0)return u;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",self.location.href).href,self.location.href));const t=ge();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await xe(await e,t);return ke(n)}const q="octane",Te={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Se={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function ve(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Oe=ve([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function J(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Q(e){if(!e)return null;switch(J(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function ee(e){return e?Se[J(e)]??null:null}function Ie(e){return Q(e)??ee(e)}function Pe(e){return Te[e]}function Y(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),Y(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),Y(r[1],t))}}}function Be(e){const t=Q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const a=Oe[n];if(a)return a}const r=ee(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return q;const i=[];for(const[a,s]of Object.entries(o))i.push(a),Y(s,i);for(const a of i){const s=Ie(a);if(s)return s}return q}function A(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function N(e,t){return Math.max(0,e-t)}function te(e){return new Map(e.map(t=>[t.id,t]))}const p=70,ne=73,Ee=3072,De=4096,Ne=1792,Me=4184,Re=940,Fe=3308,ze=2816,re=3584,Ce=2484,je=1788,Le=2300,Ve=2048,Ue=1036,He=1024,Ye=1024,$e=4240,oe=34;function C(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function j(e,t,n,r,o){C(e,-t,n,r,o),C(e,t,n,r,o)}function $(e,t,n,r,o){C(e,t,-n,r,o),C(e,t,n,r,o)}function I(e,t,n,r,o){j(e,t,-n,r,o),j(e,t,n,r,o)}function Xe(){const e=[];return $(e,0,$e,p,"small"),I(e,Ne,Me,p,"small"),I(e,Ee,De,ne,"big"),I(e,Re,Fe,p,"small"),$(e,0,ze,p,"small"),I(e,re,Ce,p,"small"),I(e,je,Le,p,"small"),I(e,Ve,Ue,p,"small"),$(e,0,Ye,p,"small"),j(e,re,0,ne,"big"),j(e,He,0,p,"small"),e}function X(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function We(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ke(e){let t=null;for(const n of e){const r=X(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ze(e,t,n,r){const o=te(t),i=new Map;for(const c of e.boost_pad_events??[]){if(X(c.kind)===null){r?.advance();continue}const d=i.get(c.pad_id);d?d.push(c):i.set(c.pad_id,[c]),r?.advance()}const a=e.boost_pads;if(!a||a.length===0)return r?.advance(oe),Xe();const s=[...a].sort((c,f)=>c.index-f.index),l=new Array(s.length);for(let c=0;c=72?"big":"small"),h=g.sort((_,w)=>_.time-w.time),m=new Array(h.length);for(let _=0;_=0?e.frame:null}function Ge(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=W(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function qe(e,t){return`bookmark:${W(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Je(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const i=Ge(r,e);return i===null?[]:[{id:qe(r,o),description:r.description,frame:W(r),time:N(i,t)}]})}function Qe(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const S={distance:270,height:100,pitch:-4,fov:110},et=.005,tt=Number.POSITIVE_INFINITY,nt=!0,rt=.15,ot=10,at=.1,it=10;function ae(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function ie(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function se(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ce(e,t){const n=se(se(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function st(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:ie(t.rotation)}}function ue(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function le(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function de(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ct={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function ut(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ct};const t=e.Data.rigid_body,n=ie(t.rotation),r=n?ae(ce({x:1,y:0,z:0},n)):null,o=n?ae(ce({x:0,y:0,z:1},n)):null,i=e.Data.camera,a=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:le(i?.pitch),cameraYaw:le(i?.yaw),throttle:ue(a?.throttle),steer:ue(a?.steer),dodgeImpulse:de(a?.dodge_impulse),dodgeTorque:de(a?.dodge_torque)}}function lt(e){return e.position!==null}function dt(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function ft(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=M(t[r].position);for(let i=r+1;iat){o=M(s.position);continue}if(mt(o,s.position)>it){o=M(s.position);continue}const d={x:(a.linearVelocity.x+s.linearVelocity.x)/2,y:(a.linearVelocity.y+s.linearVelocity.y)/2,z:(a.linearVelocity.z+s.linearVelocity.z)/2},g={x:o.x+d.x*f,y:o.y+d.y*f,z:o.z+d.z*f},b=(i-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:g.x*(1-b)+s.position.x*b,y:g.y*(1-b)+s.position.y*b,z:g.z*(1-b)+s.position.z*b},s.position=M(o)}}function _t(e){return{motionSmoothing:e.motionSmoothing??nt,smoothingBlendFactor:e.smoothingBlendFactor??rt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??ot)}}function _e(){return typeof performance>"u"?Date.now():performance.now()}function bt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((a,[,s])=>a+s.frames.length,0),r=e.boost_pads?.length??oe,o=e.boost_pad_events?.length??0,i=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,i)].reduce((a,s)=>a+s,0)}function gt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=bt(e),o=gt(e);let i=0,a=0,s=-1,l=-1,c=_e();const f=n.yieldEveryMs??Number.POSITIVE_INFINITY,d=n.progressReportMinDelta??et,g=Math.max(1,n.progressReportFrameInterval??tt),b=()=>{if(!t)return!1;const m=Math.max(0,Math.min(1,i/r));if(m<=s)return!1;const w=a-l>=g;return m>=1||m-s>=d||w?(s=m,l=a,t(m,{progress:m,processedFrames:Math.min(a,o),totalFrames:o,processedUnits:i,totalUnits:r}),!0):!1},h=(m=!1)=>{const _=_e();return!m&&_-cr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=wt(e?.stats);return{fov:v(t,"CameraFOV")??S.fov,height:v(t,"CameraHeight")??S.height,pitch:v(t,"CameraPitch")??S.pitch,distance:v(t,"CameraDistance")??S.distance,stiffness:v(t,"CameraStiffness")??S.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??S.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??S.transitionSpeed}}function xt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const i of o)r.set(i.name,i),i.remote_id&&n.set(A(i.remote_id),i),t?.advance();return{byId:n,byName:r}}function At(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(A(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function Tt(e,t){const n=new Set(e.meta.team_zero.map(l=>l.name)),r=new Set(e.meta.team_one.map(l=>l.name)),o=xt(e,t),i=At(e),a=[];let s=0;for(const[l,c]of e.frame_data.players){const f=new Array(c.frames.length);let d;for(let m=0;mt.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Ot(e,t,n){const r=e.player?A(e.player):null,o=r?t.get(r)?.name??r:null,i=o?`${o} scored`:"Goal";return{id:K("goal",e.frame,r??"team"),time:N(e.time,n),frame:e.frame,kind:"goal",label:i,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function It(e,t,n){const r=A(e.player),o=t.get(r)?.name??r,i=e.kind.toLowerCase(),a=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:K(i,e.frame,r),time:N(e.time,n),frame:e.frame,kind:i,label:`${o} ${a}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Pt(e,t,n){const r=A(e.attacker),o=A(e.victim),i=t.get(r),a=t.get(o);return{id:K("demo",e.frame,`${r}:${o}`),time:N(e.time,n),frame:e.frame,kind:"demo",label:`${i?.name??r} demoed ${a?.name??o}`,shortLabel:"D",playerId:r,playerName:i?.name??r,secondaryPlayerId:o,secondaryPlayerName:a?.name??o,location:e.victim_location,isTeamZero:i?.isTeamZero??null}}function Bt(e,t,n,r,o){const i=te(t),a=[];for(const s of e.goal_events??[])a.push(Ot(s,i,r)),o?.advance();for(const s of e.player_stat_events??[])a.push(It(s,i,r)),o?.advance();for(const s of e.demolish_infos??[])a.push(Pt(s,i,r)),o?.advance();for(const s of n)a.push(Qe(s));return a.length===0&&o?.advance(),vt(a)}function Et(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=pt(e,n),i=Tt(e,n),a=St(e,n),s=_t(t);me(o,a,s);for(const d of i)me(o,d.frames,s);const l=Ze(e,i,r,n),c=Je(e,r,n),f=Bt(e,i,c,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:a,boostPads:l,players:i,tickMarks:c,timelineEvents:f,teamZeroNames:e.meta.team_zero.map(d=>d.name),teamOneNames:e.meta.team_one.map(d=>d.name)}}function L(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,L(n)]));if(Array.isArray(e))return e.map(t=>L(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=L(r);return t}return e}async function Dt(){const e=Ae;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Dt();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=be(t,c=>{R({type:"progress",progress:L(c)})},e.data.reportEveryNFrames,32*1024*1024);R({type:"progress",progress:{stage:"normalizing",progress:0}});const r=JSON.parse(new TextDecoder().decode(n.rawReplayData)),o=Et(r,{progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(c){R({type:"progress",progress:{stage:"normalizing",progress:c}})}}),i=new TextEncoder().encode(JSON.stringify(o)),a=n.rawReplayData,s=a.byteOffset===0&&a.byteLength===a.buffer.byteLength?a.buffer:a.slice().buffer,l=Array.from(n.statsTimelineParts.frameChunks,c=>c.buffer);self.postMessage({type:"done",replayBuffer:i.buffer,rawReplayBuffer:s,statsTimelineParts:{configBuffer:n.statsTimelineParts.config.buffer,replayMetaBuffer:n.statsTimelineParts.replayMeta.buffer,eventsBuffer:n.statsTimelineParts.events.buffer,activitySummaryBuffer:n.statsTimelineParts.activitySummary.buffer,positioningSummaryBuffer:n.statsTimelineParts.positioningSummary.buffer,accumulationTracksBuffer:n.statsTimelineParts.accumulationTracks.buffer,frameChunkBuffers:l}},[i.buffer,s,n.statsTimelineParts.config.buffer,n.statsTimelineParts.replayMeta.buffer,n.statsTimelineParts.events.buffer,n.statsTimelineParts.activitySummary.buffer,n.statsTimelineParts.positioningSummary.buffer,n.statsTimelineParts.accumulationTracks.buffer,...l])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/replayLoader.worker-D3pjMe81.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/replayLoader.worker-D3pjMe81.js deleted file mode 100644 index 1217437e..00000000 --- a/crates/rocket-sense-server/static/subtr-actor/review/assets/replayLoader.worker-D3pjMe81.js +++ /dev/null @@ -1 +0,0 @@ -(function(){"use strict";function fe(e,t,n,r){const o=ge(e,m.__wbindgen_malloc),i=x,a=m.get_replay_bundle_json_parts_with_progress(o,i,t,L(n)?4294967297:n>>>0,L(r)?4294967297:r>>>0);if(a[2])throw K(a[1]);return K(a[0])}function be(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(I(t,n))},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=V(r,m.__wbindgen_malloc,m.__wbindgen_realloc),i=x;T().setInt32(t+4,i,!0),T().setInt32(t+0,o,!0)},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var i=L(o)?0:V(o,m.__wbindgen_malloc,m.__wbindgen_realloc),a=x;T().setInt32(t+4,a,!0),T().setInt32(t+0,i,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(I(t,n))},__wbg_call_4708e0c13bdc8e95:function(){return W(function(t,n,r){return t.call(n,r)},arguments)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(I(t,n))}finally{m.__wbindgen_free(r,o,1)}},__wbg_log_d095c16a726a937c:function(t,n){console.log(I(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(ye(t,n))},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return W(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=V(r,m.__wbindgen_malloc,m.__wbindgen_realloc),i=x;T().setInt32(t+4,i,!0),T().setInt32(t+0,o,!0)},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return I(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=m.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function _e(e){const t=m.__externref_table_alloc();return m.__wbindgen_externrefs.set(t,e),t}function ye(e,t){return e=e>>>0,S().subarray(e/1,e/1+t)}let w=null;function T(){return(w===null||w.buffer.detached===!0||w.buffer.detached===void 0&&w.buffer!==m.memory.buffer)&&(w=new DataView(m.memory.buffer)),w}function I(e,t){return e=e>>>0,he(e,t)}let P=null;function S(){return(P===null||P.byteLength===0)&&(P=new Uint8Array(m.memory.buffer)),P}function W(e,t){try{return e.apply(this,t)}catch(n){const r=_e(n);m.__wbindgen_exn_store(r)}}function L(e){return e==null}function ge(e,t){const n=t(e.length*1,1)>>>0;return S().set(e,n/1),x=e.length,n}function V(e,t,n){if(n===void 0){const s=B.encode(e),l=t(s.length,1)>>>0;return S().subarray(l,l+s.length).set(s),x=s.length,l}let r=e.length,o=t(r,1)>>>0;const i=S();let a=0;for(;a127)break;i[o+a]=s}if(a!==r){a!==0&&(e=e.slice(a)),o=n(o,r,r=a+e.length*3,1)>>>0;const s=S().subarray(o+a,o+r),l=B.encodeInto(e,s);a+=l.written,o=n(o,r,a,1)>>>0}return x=a,o}function K(e){const t=m.__wbindgen_externrefs.get(e);return m.__externref_table_dealloc(e),t}let M=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});M.decode();const pe=2146435072;let j=0;function he(e,t){return j+=t,j>=pe&&(M=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),M.decode(),j=t),M.decode(S().subarray(e,e+t))}const B=new TextEncoder;"encodeInto"in B||(B.encodeInto=function(e,t){const n=B.encode(e);return t.set(n),{read:e.length,written:n.length}});let x=0,m;function ke(e,t){return m=e.exports,w=null,P=null,m.__wbindgen_start(),m}async function we(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function xe(e){if(m!==void 0)return m;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-Xy9_Ya42.wasm",self.location.href).href,self.location.href));const t=be();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await we(await e,t);return ke(n)}const Z="octane",Ae={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},ve={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Te(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Se=Te([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function G(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function q(e){if(!e)return null;switch(G(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function J(e){return e?ve[G(e)]??null:null}function Oe(e){return q(e)??J(e)}function Ie(e){return Ae[e]}function H(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t))}}}function Pe(e){const t=q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const a=Se[n];if(a)return a}const r=J(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return Z;const i=[];for(const[a,s]of Object.entries(o))i.push(a),H(s,i);for(const a of i){const s=Oe(a);if(s)return s}return Z}function k(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function E(e,t){return Math.max(0,e-t)}function Q(e){return new Map(e.map(t=>[t.id,t]))}const g=70,ee=73,Be=3072,Ee=4096,De=1792,Re=4184,Me=940,Ne=3308,ze=2816,te=3584,Fe=2484,Ce=1788,Le=2300,Ve=2048,je=1036,He=1024,Ue=1024,Ye=4240,ne=34;function N(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function z(e,t,n,r,o){N(e,-t,n,r,o),N(e,t,n,r,o)}function U(e,t,n,r,o){N(e,t,-n,r,o),N(e,t,n,r,o)}function O(e,t,n,r,o){z(e,t,-n,r,o),z(e,t,n,r,o)}function $e(){const e=[];return U(e,0,Ye,g,"small"),O(e,De,Re,g,"small"),O(e,Be,Ee,ee,"big"),O(e,Me,Ne,g,"small"),U(e,0,ze,g,"small"),O(e,te,Fe,g,"small"),O(e,Ce,Le,g,"small"),O(e,Ve,je,g,"small"),U(e,0,Ue,g,"small"),z(e,te,0,ee,"big"),z(e,He,0,g,"small"),e}function Y(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function Xe(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function We(e){let t=null;for(const n of e){const r=Y(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ke(e,t,n,r){const o=Q(t),i=new Map;for(const c of e.boost_pad_events??[]){if(Y(c.kind)===null){r?.advance();continue}const u=i.get(c.pad_id);u?u.push(c):i.set(c.pad_id,[c]),r?.advance()}const a=e.boost_pads;if(!a||a.length===0)return r?.advance(ne),$e();const s=[...a].sort((c,d)=>c.index-d.index),l=new Array(s.length);for(let c=0;c=72?"big":"small"),p=y.sort((b,h)=>b.time-h.time),f=new Array(p.length);for(let b=0;b=0?e.frame:null}function Ze(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=$(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function Ge(e,t){return`bookmark:${$(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function qe(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const i=Ze(r,e);return i===null?[]:[{id:Ge(r,o),description:r.description,frame:$(r),time:E(i,t)}]})}function Je(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const A={distance:270,height:100,pitch:-4,fov:110},Qe=.005,et=Number.POSITIVE_INFINITY,tt=!0,nt=.15,rt=10,ot=.1,at=10;function re(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function oe(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function ae(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ie(e,t){const n=ae(ae(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function it(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:oe(t.rotation)}}function se(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function ce(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function le(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const st={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function ct(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...st};const t=e.Data.rigid_body,n=oe(t.rotation),r=n?re(ie({x:1,y:0,z:0},n)):null,o=n?re(ie({x:0,y:0,z:1},n)):null,i=e.Data.camera,a=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:ce(i?.pitch),cameraYaw:ce(i?.yaw),throttle:se(a?.throttle),steer:se(a?.steer),dodgeImpulse:le(a?.dodge_impulse),dodgeTorque:le(a?.dodge_torque)}}function lt(e){return e.position!==null}function ut(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=D(t[r].position);for(let i=r+1;iot){o=D(s.position);continue}if(dt(o,s.position)>at){o=D(s.position);continue}const u={x:(a.linearVelocity.x+s.linearVelocity.x)/2,y:(a.linearVelocity.y+s.linearVelocity.y)/2,z:(a.linearVelocity.z+s.linearVelocity.z)/2},y={x:o.x+u.x*d,y:o.y+u.y*d,z:o.z+u.z*d},_=(i-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:y.x*(1-_)+s.position.x*_,y:y.y*(1-_)+s.position.y*_,z:y.z*(1-_)+s.position.z*_},s.position=D(o)}}function ft(e){return{motionSmoothing:e.motionSmoothing??tt,smoothingBlendFactor:e.smoothingBlendFactor??nt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??rt)}}function de(){return typeof performance>"u"?Date.now():performance.now()}function bt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((a,[,s])=>a+s.frames.length,0),r=e.boost_pads?.length??ne,o=e.boost_pad_events?.length??0,i=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,i)].reduce((a,s)=>a+s,0)}function _t(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=bt(e),o=_t(e);let i=0,a=0,s=-1,l=-1,c=de();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,u=n.progressReportMinDelta??Qe,y=Math.max(1,n.progressReportFrameInterval??et),_=()=>{if(!t)return!1;const f=Math.max(0,Math.min(1,i/r));if(f<=s)return!1;const h=a-l>=y;return f>=1||f-s>=u||h?(s=f,l=a,t(f,{progress:f,processedFrames:Math.min(a,o),totalFrames:o,processedUnits:i,totalUnits:r}),!0):!1},p=(f=!1)=>{const b=de();return!f&&b-cr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=ht(e?.stats);return{fov:v(t,"CameraFOV")??A.fov,height:v(t,"CameraHeight")??A.height,pitch:v(t,"CameraPitch")??A.pitch,distance:v(t,"CameraDistance")??A.distance,stiffness:v(t,"CameraStiffness")??A.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??A.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??A.transitionSpeed}}function wt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const i of o)r.set(i.name,i),i.remote_id&&n.set(k(i.remote_id),i),t?.advance();return{byId:n,byName:r}}function xt(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(k(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function At(e,t){const n=new Set(e.meta.team_zero.map(l=>l.name)),r=new Set(e.meta.team_one.map(l=>l.name)),o=wt(e,t),i=xt(e),a=[];let s=0;for(const[l,c]of e.frame_data.players){const d=new Array(c.frames.length);let u;for(let f=0;ft.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function St(e,t,n){const r=e.player?k(e.player):null,o=r?t.get(r)?.name??r:null,i=o?`${o} scored`:"Goal";return{id:X("goal",e.frame,r??"team"),time:E(e.time,n),frame:e.frame,kind:"goal",label:i,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function Ot(e,t,n){const r=k(e.player),o=t.get(r)?.name??r,i=e.kind.toLowerCase(),a=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:X(i,e.frame,r),time:E(e.time,n),frame:e.frame,kind:i,label:`${o} ${a}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function It(e,t,n){const r=k(e.attacker),o=k(e.victim),i=t.get(r),a=t.get(o);return{id:X("demo",e.frame,`${r}:${o}`),time:E(e.time,n),frame:e.frame,kind:"demo",label:`${i?.name??r} demoed ${a?.name??o}`,shortLabel:"D",playerId:r,playerName:i?.name??r,secondaryPlayerId:o,secondaryPlayerName:a?.name??o,location:e.victim_location,isTeamZero:i?.isTeamZero??null}}function Pt(e,t,n,r,o){const i=Q(t),a=[];for(const s of e.goal_events??[])a.push(St(s,i,r)),o?.advance();for(const s of e.player_stat_events??[])a.push(Ot(s,i,r)),o?.advance();for(const s of e.demolish_infos??[])a.push(It(s,i,r)),o?.advance();for(const s of n)a.push(Je(s));return a.length===0&&o?.advance(),Tt(a)}function Bt(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=gt(e,n),i=At(e,n),a=vt(e,n),s=ft(t);me(o,a,s);for(const u of i)me(o,u.frames,s);const l=Ke(e,i,r,n),c=qe(e,r,n),d=Pt(e,i,c,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:a,boostPads:l,players:i,tickMarks:c,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(u=>u.name),teamOneNames:e.meta.team_one.map(u=>u.name)}}function F(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,F(n)]));if(Array.isArray(e))return e.map(t=>F(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=F(r);return t}return e}async function Et(){const e=xe;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Et();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=fe(t,c=>{R({type:"progress",progress:F(c)})},e.data.reportEveryNFrames,32*1024*1024);R({type:"progress",progress:{stage:"normalizing",progress:0}});const r=JSON.parse(new TextDecoder().decode(n.rawReplayData)),o=Bt(r,{progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(c){R({type:"progress",progress:{stage:"normalizing",progress:c}})}}),i=new TextEncoder().encode(JSON.stringify(o)),a=n.rawReplayData,s=a.byteOffset===0&&a.byteLength===a.buffer.byteLength?a.buffer:a.slice().buffer,l=Array.from(n.statsTimelineParts.frameChunks,c=>c.buffer);self.postMessage({type:"done",replayBuffer:i.buffer,rawReplayBuffer:s,statsTimelineParts:{configBuffer:n.statsTimelineParts.config.buffer,replayMetaBuffer:n.statsTimelineParts.replayMeta.buffer,eventsBuffer:n.statsTimelineParts.events.buffer,activitySummaryBuffer:n.statsTimelineParts.activitySummary.buffer,positioningSummaryBuffer:n.statsTimelineParts.positioningSummary.buffer,accumulationTracksBuffer:n.statsTimelineParts.accumulationTracks.buffer,frameChunkBuffers:l}},[i.buffer,s,n.statsTimelineParts.config.buffer,n.statsTimelineParts.replayMeta.buffer,n.statsTimelineParts.events.buffer,n.statsTimelineParts.activitySummary.buffer,n.statsTimelineParts.positioningSummary.buffer,n.statsTimelineParts.accumulationTracks.buffer,...l])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/rl_replay_subtr_actor-Cnltgw4Z.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/rl_replay_subtr_actor-Cnltgw4Z.js new file mode 100644 index 00000000..d2cb4f7d --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/review/assets/rl_replay_subtr_actor-Cnltgw4Z.js @@ -0,0 +1,2 @@ +function U(r,n){var e=g(r)?0:k(r,_.__wbindgen_malloc),t=a,i=g(n)?0:k(n,_.__wbindgen_malloc),c=a;const o=_.get_column_headers(e,t,i,c);if(o[2])throw s(o[1]);return s(o[0])}function B(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_legacy_stats_timeline_json(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function D(r,n,e,t){const i=w(r,_.__wbindgen_malloc),c=a;var o=g(n)?0:k(n,_.__wbindgen_malloc),l=a,f=g(e)?0:k(e,_.__wbindgen_malloc),u=a;const p=_.get_ndarray_with_info(i,c,o,l,f,u,g(t)?4294967297:Math.fround(t));if(p[2])throw s(p[1]);return s(p[0])}function N(r,n,e,t){const i=w(r,_.__wbindgen_malloc),c=a,o=_.get_replay_bundle_json_parts_with_progress(i,c,n,g(e)?4294967297:e>>>0,g(t)?4294967297:t>>>0);if(o[2])throw s(o[1]);return s(o[0])}function L(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_bundle_json_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[2])throw s(c[1]);return s(c[0])}function $(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_replay_frames_data(n,e);if(t[2])throw s(t[1]);return s(t[0])}function V(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_frames_data_json_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[3])throw s(c[2]);var o=v(c[0],c[1]).slice();return _.__wbindgen_free(c[0],c[1]*1,1),o}function q(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_frames_data_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[2])throw s(c[1]);return s(c[0])}function z(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_replay_info(n,e);if(t[2])throw s(t[1]);return s(t[0])}function C(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a;var c=g(n)?0:k(n,_.__wbindgen_malloc),o=a,l=g(e)?0:k(e,_.__wbindgen_malloc),f=a;const u=_.get_replay_meta(t,i,c,o,l,f);if(u[2])throw s(u[1]);return s(u[0])}function J(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_stats_timeline(n,e);if(t[2])throw s(t[1]);return s(t[0])}function P(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_stats_timeline_json(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function H(r,n){const e=w(r,_.__wbindgen_malloc),t=a,i=_.get_stats_timeline_json_parts(e,t,g(n)?4294967297:n>>>0);if(i[2])throw s(i[1]);return s(i[0])}function K(){_.main()}function X(r){let n,e;try{const c=_.new_training_pack(r);var t=c[0],i=c[1];if(c[3])throw t=0,i=0,s(c[2]);return n=t,e=i,b(t,i)}finally{_.__wbindgen_free(n,e,1)}}function Y(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.parse_replay(n,e);if(t[2])throw s(t[1]);return s(t[0])}function G(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.parse_training_pack(n,e);if(t[2])throw s(t[1]);return s(t[0])}function Q(r){let n,e;try{const c=w(r,_.__wbindgen_malloc),o=a,l=_.parse_training_pack_lossless(c,o);var t=l[0],i=l[1];if(l[3])throw t=0,i=0,s(l[2]);return n=t,e=i,b(t,i)}finally{_.__wbindgen_free(n,e,1)}}function Z(r){const n=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),e=a,t=_.serialize_training_pack(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function nn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_add_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function en(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_add_round_archetype(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function tn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=d(n,_.__wbindgen_malloc,_.__wbindgen_realloc),u=a,p=_.training_pack_append_rounds(o,l,f,u);var i=p[0],c=p[1];if(p[3])throw i=0,c=0,s(p[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function rn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_duplicate_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function _n(r){const n=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),e=a,t=_.training_pack_from_lossless(n,e);if(t[2])throw s(t[1]);return s(t[0])}function cn(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_insert_round(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function on(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_move_round(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function sn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_remove_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function an(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_remove_round_archetype(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function fn(r,n){const e=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),t=a,i=_.training_pack_round_archetypes(e,t,n);if(i[2])throw s(i[1]);return s(i[0])}function ln(r,n,e,t){let i,c;try{const f=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),u=a,p=_.training_pack_set_round_archetype(f,u,n,e,t);var o=p[0],l=p[1];if(p[3])throw o=0,l=0,s(p[2]);return i=o,c=l,b(o,l)}finally{_.__wbindgen_free(i,c,1)}}function un(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_set_round_ball(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function dn(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_set_round_time_limit(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function gn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.update_training_pack_metadata(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function bn(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.validate_replay(n,e);if(t[2])throw s(t[1]);return s(t[0])}function O(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(n,e){return Error(b(n,e))},__wbg_Number_04624de7d0e8332d:function(n){return Number(n)},__wbg_String_8f0eb39a4a4c2f66:function(n,e){const t=String(e),i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(n,e){const t=e,i=typeof t=="bigint"?t:void 0;y().setBigInt64(n+8,g(i)?BigInt(0):i,!0),y().setInt32(n+0,!g(i),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(n){const e=n,t=typeof e=="boolean"?e:void 0;return g(t)?16777215:t?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(n,e){const t=M(e),i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(n,e){return n in e},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(n){return typeof n=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(n){return typeof n=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(n){const e=n;return typeof e=="object"&&e!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(n){return typeof n=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(n){return n===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(n,e){return n===e},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(n,e){return n==e},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(n,e){const t=e,i=typeof t=="number"?t:void 0;y().setFloat64(n+8,g(i)?0:i,!0),y().setInt32(n+0,!g(i),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(n,e){const t=e,i=typeof t=="string"?t:void 0;var c=g(i)?0:d(i,_.__wbindgen_malloc,_.__wbindgen_realloc),o=a;y().setInt32(n+4,o,!0),y().setInt32(n+0,c,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(n,e){throw new Error(b(n,e))},__wbg_call_389efe28435a9388:function(){return A(function(n,e){return n.call(e)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return A(function(n,e,t){return n.call(e,t)},arguments)},__wbg_done_57b39ecd9addfe81:function(n){return n.done},__wbg_entries_58c7934c745daac7:function(n){return Object.entries(n)},__wbg_error_7534b8e9a36f1ab4:function(n,e){let t,i;try{t=n,i=e,console.error(b(n,e))}finally{_.__wbindgen_free(t,i,1)}},__wbg_get_9b94d73e6221f75c:function(n,e){return n[e>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return A(function(n,e){return Reflect.get(n,e)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(n,e){return n[e]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(n){let e;try{e=n instanceof ArrayBuffer}catch{e=!1}return e},__wbg_instanceof_Map_53af74335dec57f4:function(n){let e;try{e=n instanceof Map}catch{e=!1}return e},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(n){let e;try{e=n instanceof Uint8Array}catch{e=!1}return e},__wbg_isArray_d314bb98fcf08331:function(n){return Array.isArray(n)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(n){return Number.isSafeInteger(n)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(n){return n.length},__wbg_length_35a7bace40f36eac:function(n){return n.length},__wbg_log_f1a1b5cd3f9c7822:function(n,e){console.log(b(n,e))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(n){return new Uint8Array(n)},__wbg_new_from_slice_a3d2629dc1826784:function(n,e){return new Uint8Array(v(n,e))},__wbg_next_3482f54c49e8af19:function(){return A(function(n){return n.next()},arguments)},__wbg_next_418f80d8f5303233:function(n){return n.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(n,e,t){Uint8Array.prototype.set.call(v(n,e),t)},__wbg_push_8ffdcb2063340ba5:function(n,e){return n.push(e)},__wbg_set_1eb0999cf5d27fc8:function(n,e,t){return n.set(e,t)},__wbg_set_3f1d0b984ed272ed:function(n,e,t){n[e]=t},__wbg_set_6cb8631f80447a67:function(){return A(function(n,e,t){return Reflect.set(n,e,t)},arguments)},__wbg_set_f43e577aea94465b:function(n,e,t){n[e>>>0]=t},__wbg_stack_0ed75d68575b0f3c:function(n,e){const t=e.stack,i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg_value_0546255b415e96c1:function(n){return n.value},__wbindgen_cast_0000000000000001:function(n){return n},__wbindgen_cast_0000000000000002:function(n){return n},__wbindgen_cast_0000000000000003:function(n,e){return b(n,e)},__wbindgen_cast_0000000000000004:function(n){return BigInt.asUintN(64,n)},__wbindgen_init_externref_table:function(){const n=_.__wbindgen_externrefs,e=n.grow(4);n.set(0,void 0),n.set(e+0,void 0),n.set(e+1,null),n.set(e+2,!0),n.set(e+3,!1)}}}}function W(r){const n=_.__externref_table_alloc();return _.__wbindgen_externrefs.set(n,r),n}function M(r){const n=typeof r;if(n=="number"||n=="boolean"||r==null)return`${r}`;if(n=="string")return`"${r}"`;if(n=="symbol"){const i=r.description;return i==null?"Symbol":`Symbol(${i})`}if(n=="function"){const i=r.name;return typeof i=="string"&&i.length>0?`Function(${i})`:"Function"}if(Array.isArray(r)){const i=r.length;let c="[";i>0&&(c+=M(r[0]));for(let o=1;o1)t=e[1];else return toString.call(r);if(t=="Object")try{return"Object("+JSON.stringify(r)+")"}catch{return"Object"}return r instanceof Error?`${r.name}: ${r.message} +${r.stack}`:t}function v(r,n){return r=r>>>0,h().subarray(r/1,r/1+n)}let m=null;function y(){return(m===null||m.buffer.detached===!0||m.buffer.detached===void 0&&m.buffer!==_.memory.buffer)&&(m=new DataView(_.memory.buffer)),m}function b(r,n){return r=r>>>0,F(r,n)}let j=null;function h(){return(j===null||j.byteLength===0)&&(j=new Uint8Array(_.memory.buffer)),j}function A(r,n){try{return r.apply(this,n)}catch(e){const t=W(e);_.__wbindgen_exn_store(t)}}function g(r){return r==null}function w(r,n){const e=n(r.length*1,1)>>>0;return h().set(r,e/1),a=r.length,e}function k(r,n){const e=n(r.length*4,4)>>>0;for(let t=0;t>>0;return h().subarray(f,f+l.length).set(l),a=l.length,f}let t=r.length,i=n(t,1)>>>0;const c=h();let o=0;for(;o127)break;c[i+o]=l}if(o!==t){o!==0&&(r=r.slice(o)),i=e(i,t,t=o+r.length*3,1)>>>0;const l=h().subarray(i+o,i+t),f=x.encodeInto(r,l);o+=f.written,i=e(i,t,o,1)>>>0}return a=o,i}function s(r){const n=_.__wbindgen_externrefs.get(r);return _.__externref_table_dealloc(r),n}let I=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});I.decode();const T=2146435072;let S=0;function F(r,n){return S+=n,S>=T&&(I=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),I.decode(),S=n),I.decode(h().subarray(r,r+n))}const x=new TextEncoder;"encodeInto"in x||(x.encodeInto=function(r,n){const e=x.encode(r);return n.set(e),{read:r.length,written:e.length}});let a=0,_;function E(r,n){return _=r.exports,m=null,j=null,_.__wbindgen_start(),_}async function R(r,n){if(typeof Response=="function"&&r instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(r,n)}catch(i){if(r.ok&&e(r.type)&&r.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",i);else throw i}const t=await r.arrayBuffer();return await WebAssembly.instantiate(t,n)}else{const t=await WebAssembly.instantiate(r,n);return t instanceof WebAssembly.Instance?{instance:t,module:r}:t}function e(t){switch(t){case"basic":case"cors":case"default":return!0}return!1}}function wn(r){if(_!==void 0)return _;r!==void 0&&(Object.getPrototypeOf(r)===Object.prototype?{module:r}=r:console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const n=O();r instanceof WebAssembly.Module||(r=new WebAssembly.Module(r));const e=new WebAssembly.Instance(r,n);return E(e)}async function pn(r){if(_!==void 0)return _;r!==void 0&&(Object.getPrototypeOf(r)===Object.prototype?{module_or_path:r}=r:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),r===void 0&&(r=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",import.meta.url).href,import.meta.url));const n=O();(typeof r=="string"||typeof Request=="function"&&r instanceof Request||typeof URL=="function"&&r instanceof URL)&&(r=fetch(r));const{instance:e,module:t}=await R(await r,n);return E(e)}export{pn as default,U as get_column_headers,B as get_legacy_stats_timeline_json,D as get_ndarray_with_info,N as get_replay_bundle_json_parts_with_progress,L as get_replay_bundle_json_with_progress,$ as get_replay_frames_data,V as get_replay_frames_data_json_with_progress,q as get_replay_frames_data_with_progress,z as get_replay_info,C as get_replay_meta,J as get_stats_timeline,P as get_stats_timeline_json,H as get_stats_timeline_json_parts,wn as initSync,K as main,X as new_training_pack,Y as parse_replay,G as parse_training_pack,Q as parse_training_pack_lossless,Z as serialize_training_pack,nn as training_pack_add_round,en as training_pack_add_round_archetype,tn as training_pack_append_rounds,rn as training_pack_duplicate_round,_n as training_pack_from_lossless,cn as training_pack_insert_round,on as training_pack_move_round,sn as training_pack_remove_round,an as training_pack_remove_round_archetype,fn as training_pack_round_archetypes,ln as training_pack_set_round_archetype,un as training_pack_set_round_ball,dn as training_pack_set_round_time_limit,gn as update_training_pack_metadata,bn as validate_replay}; diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/rl_replay_subtr_actor_bg-Xy9_Ya42.wasm b/crates/rocket-sense-server/static/subtr-actor/review/assets/rl_replay_subtr_actor_bg-BjSK7HJ9.wasm similarity index 50% rename from crates/rocket-sense-server/static/subtr-actor/review/assets/rl_replay_subtr_actor_bg-Xy9_Ya42.wasm rename to crates/rocket-sense-server/static/subtr-actor/review/assets/rl_replay_subtr_actor_bg-BjSK7HJ9.wasm index 28187c217632d571a5857f5a0f1fb0f6964e42af..140cd48935d815ae088e781af91126296cb6b31d 100644 GIT binary patch delta 1564516 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
UL>y9ajG{^(jK| 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 &6;lVZ3jlx`7VLIvx)4c$E)X!r{E@o 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­gd|zN8>R!+x-ml{ffpL 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 z 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≺sjBFN=XYQWnc%^+%M+<}_Yj7Mq@- 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
VUnz}0{lXDWTf!AstV%GL~&X8 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¥2M&rDef(~V#= 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

+6y5I69#ghF8$JX9n3Eh${asA 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

*~nY--&At)GjM5_u)} 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 MvW)8YnmzLW0B(eqx&QzG delta 1157678 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�D)&P&;7t*~EvGic*12Gpi4Jn0m�JDg9N&Ccn7rsf-A={n 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%0A^L zbS1Laz1h2)h3pRb$zAK!xp#kT-L`5wR2>}zXbfFlNlk1|9vT7 z$7r+W558+B4+^AU&ranRTJ*5AMuXsk2X~Lf(o_p%o+7Ct8TlOZJmn7%CO@Opsa=DStZAsgMFF+6-AHy!z0sB_6n&t7jf>@!NeV zCUr9Yv#9Qy_tMMPy9nMF-MJw(3iQRKX8*6O%uc)xX+P`zjqPDL5F~&UO+tpt*iV|2f%m|HHkmbT>$&{?@9IJUd$<|> zj_ESAh$O>y?c1(>JG5^HefzAage5%Uq7)i`Ujh}E>QBdONACNFUe01N6-TNc=_DJJfd?n{C1pg8Wrf%$QPbQo+Mim zpB?Th37CL|77x-`03DE{DPo)*Sn2pSL24M6^X-+Sb{71GOvR=z zK4{&@RFB?EOrL(xn$C3m{e61(iTAhY-6P(&(K|V+F_pA2t)~x2c`5TMddC(Kyxg$@ zKP`IU^1%4Y7}hrS!?hlds;zl(vpTnvC$|gCI+8Gf`HJMj3W6~!HK8m3wv0}<$Uvfq z2JG)nCwHM1{LUNZBKHY-De60~1Bq*4(qjskXkWt{`j(Fx9ZWb&nFP|QjijSg#B<tQllosxtMAo{eC#e`GVYsh>rIKT&tu=P{7_s4#nZjsDhoFiaau^Wmf ziz{}R96uMaEBku7Yv_FgwAll_mxi7Nbo|JS=<6fscLb~g{Zi`o|LL+doXGAm9*$d>SG6V+*E66Z#J5M5yBckGG+* z(OA)Oh_yvwi&b7Q%o44CjuC}y>HtqUQOGK*l0y2QQ|Mpjd73Dk0EOs|_xwNX{Rezh z#ri*vXV0c>vPm}moIQKaZWc(R1w^{QBKCU`I~Eia5z(tyuh*7;U<6M9ett|9~l z7ZoKaLWC$mQ6n`7NPqwVQ2_(|-p|b0l7bDspX=X0@-jQmGtcxnQ=WOs1M*E2bKTU& zi5(-r#I)7T4RwsKi^EP7T*r@8w&DS~uY_OyLAiDE>)EcP%VNS^DXt`+l%O@74f#1e zDIQ|sA+>U2qaKt`Sqm}${FBhHS^Kt&75xhr%+qe~u7Am$OwvZh>v~wej9v}deS_t% z2+`#cc?ysD`ce4<2^co{3Hi#1(ziY(#y{KrggjrGmB_|EDfg6yyVD^ve1 z4sl%#<%D`ZBE)Yx|rDB8QC=L=O8V@Ep9BiE_3Hl`0=8-}X`+2&ywu%&G2 zi|C`JY{!f81YfTjL-pKC^@eKBOL9{hs?T4NuTZd=;;@5TOR40Jro)WlBAbyIxfa9a zPa7DyAurV*xtC-$A(=9%klZn@WLJz}D&I7sP65fHfMi~Pci9NpZ9=WvyevB(}IWy^So zAKFN+bm3V=YV$UER&L&Q~{A~&}jAgTnS>Ny2N0}0OxCMQ8VB}lgQ(TvG#em{Nco7Z4E_tj#Ep zo5Td=XpLbz3uHHYrasx=fdMG&!~nt6~lQU~5h@;q1ocEkj&jtkPRRKDLK?#s|{g!V?TM?9)DwxtwYY zE!9HUPUs0WBbG0Y%Oq?U&=Z1UkTKxgm;!WtJ{SGPL8$r|Rr9I(7_mN8AEO-sRUc@_ zx+Dk5r|skdrOSP~K0X=JY}R(Bd>t)(un?fIzHiGxx;~G*EgCT-E+Mt0PuHhjBf!e7 z)d*^7nTd6JSso`H`ak+gJ|IcrB$`#f_LXcTsuZI7jjv=c5vCI1@Ayhi6S0Gcf8{Hg zMsmeE5&f>O#4qOk7ye58qSF71uf!N|-&f)n}Muf(XD?<+B4f5%sH=zsE+?D{|Y zN>)wg>l!BEuYDz75*7cJe(NhC!sOrimDCV1-zI+LE15C{MEq0wU0=zCz2rCc5@W!9 zU&;B}OLqNFzLKHZ|ILZ3Z~`V_JWcCg`%0D&6+cM*##geM2>IvqJNA-tB36E5FF8U) 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

OQ-xFlYo0a_U1P-#lc5gWJ|;jSq323 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≻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�SU%F}3Hlc}572XLRFvPC2Mg3!?IH~whYIo~ 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 B7(M_1 diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/wasm.worker-Bj4v8ZR2.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/wasm.worker-Bj4v8ZR2.js deleted file mode 100644 index 5e7d7d50..00000000 --- a/crates/rocket-sense-server/static/subtr-actor/review/assets/wasm.worker-Bj4v8ZR2.js +++ /dev/null @@ -1 +0,0 @@ -(function(){"use strict";function ge(e,t,n){const r=G(e,c.__wbindgen_malloc),o=w,a=c.get_replay_frames_data_json_with_progress(r,o,t,Z(n)?4294967297:n>>>0);if(a[3])throw V(a[2]);var i=W(a[0],a[1]).slice();return c.__wbindgen_free(a[0],a[1]*1,1),i}function be(e){const t=G(e,c.__wbindgen_malloc),n=w,r=c.validate_replay(t,n);if(r[2])throw V(r[1]);return V(r[0])}function ye(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(I(t,n))},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=L(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=w;O().setInt32(t+4,a,!0),O().setInt32(t+0,o,!0)},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var a=Z(o)?0:L(o,c.__wbindgen_malloc,c.__wbindgen_realloc),i=w;O().setInt32(t+4,i,!0),O().setInt32(t+0,a,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(I(t,n))},__wbg_call_4708e0c13bdc8e95:function(){return K(function(t,n,r){return t.call(n,r)},arguments)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(I(t,n))}finally{c.__wbindgen_free(r,o,1)}},__wbg_log_d095c16a726a937c:function(t,n){console.log(I(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(W(t,n))},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return K(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=L(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=w;O().setInt32(t+4,a,!0),O().setInt32(t+0,o,!0)},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return I(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=c.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function pe(e){const t=c.__externref_table_alloc();return c.__wbindgen_externrefs.set(t,e),t}function W(e,t){return e=e>>>0,S().subarray(e/1,e/1+t)}let x=null;function O(){return(x===null||x.buffer.detached===!0||x.buffer.detached===void 0&&x.buffer!==c.memory.buffer)&&(x=new DataView(c.memory.buffer)),x}function I(e,t){return e=e>>>0,we(e,t)}let E=null;function S(){return(E===null||E.byteLength===0)&&(E=new Uint8Array(c.memory.buffer)),E}function K(e,t){try{return e.apply(this,t)}catch(n){const r=pe(n);c.__wbindgen_exn_store(r)}}function Z(e){return e==null}function G(e,t){const n=t(e.length*1,1)>>>0;return S().set(e,n/1),w=e.length,n}function L(e,t,n){if(n===void 0){const s=D.encode(e),f=t(s.length,1)>>>0;return S().subarray(f,f+s.length).set(s),w=s.length,f}let r=e.length,o=t(r,1)>>>0;const a=S();let i=0;for(;i127)break;a[o+i]=s}if(i!==r){i!==0&&(e=e.slice(i)),o=n(o,r,r=i+e.length*3,1)>>>0;const s=S().subarray(o+i,o+r),f=D.encodeInto(e,s);i+=f.written,o=n(o,r,i,1)>>>0}return w=i,o}function V(e){const t=c.__wbindgen_externrefs.get(e);return c.__externref_table_dealloc(e),t}let R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});R.decode();const he=2146435072;let j=0;function we(e,t){return j+=t,j>=he&&(R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),R.decode(),j=t),R.decode(S().subarray(e,e+t))}const D=new TextEncoder;"encodeInto"in D||(D.encodeInto=function(e,t){const n=D.encode(e);return t.set(n),{read:e.length,written:n.length}});let w=0,c;function ke(e,t){return c=e.exports,x=null,E=null,c.__wbindgen_start(),c}async function xe(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Ae(e){if(c!==void 0)return c;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-Xy9_Ya42.wasm",self.location.href).href,self.location.href));const t=ye();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await xe(await e,t);return ke(n)}const q="octane",ve={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Oe={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Se(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Te=Se([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function J(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Q(e){if(!e)return null;switch(J(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function ee(e){return e?Oe[J(e)]??null:null}function Ie(e){return Q(e)??ee(e)}function Ee(e){return ve[e]}function H(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t))}}}function De(e){const t=Q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const i=Te[n];if(i)return i}const r=ee(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return q;const a=[];for(const[i,s]of Object.entries(o))a.push(i),H(s,a);for(const i of a){const s=Ie(i);if(s)return s}return q}function k(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function B(e,t){return Math.max(0,e-t)}function te(e){return new Map(e.map(t=>[t.id,t]))}const y=70,ne=73,Be=3072,Pe=4096,Ne=1792,Re=4184,ze=940,Me=3308,Fe=2816,re=3584,Ce=2484,Le=1788,Ve=2300,je=2048,He=1036,Ue=1024,Ye=1024,$e=4240,oe=34;function z(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function M(e,t,n,r,o){z(e,-t,n,r,o),z(e,t,n,r,o)}function U(e,t,n,r,o){z(e,t,-n,r,o),z(e,t,n,r,o)}function T(e,t,n,r,o){M(e,t,-n,r,o),M(e,t,n,r,o)}function Xe(){const e=[];return U(e,0,$e,y,"small"),T(e,Ne,Re,y,"small"),T(e,Be,Pe,ne,"big"),T(e,ze,Me,y,"small"),U(e,0,Fe,y,"small"),T(e,re,Ce,y,"small"),T(e,Le,Ve,y,"small"),T(e,je,He,y,"small"),U(e,0,Ye,y,"small"),M(e,re,0,ne,"big"),M(e,Ue,0,y,"small"),e}function Y(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function We(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ke(e){let t=null;for(const n of e){const r=Y(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ze(e,t,n,r){const o=te(t),a=new Map;for(const l of e.boost_pad_events??[]){if(Y(l.kind)===null){r?.advance();continue}const u=a.get(l.pad_id);u?u.push(l):a.set(l.pad_id,[l]),r?.advance()}const i=e.boost_pads;if(!i||i.length===0)return r?.advance(oe),Xe();const s=[...i].sort((l,d)=>l.index-d.index),f=new Array(s.length);for(let l=0;l=72?"big":"small"),p=b.sort((_,h)=>_.time-h.time),m=new Array(p.length);for(let _=0;_=0?e.frame:null}function Ge(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=$(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function qe(e,t){return`bookmark:${$(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Je(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const a=Ge(r,e);return a===null?[]:[{id:qe(r,o),description:r.description,frame:$(r),time:B(a,t)}]})}function Qe(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const A={distance:270,height:100,pitch:-4,fov:110},et=.005,tt=Number.POSITIVE_INFINITY,nt=!0,rt=.15,ot=10,at=.1,it=10;function ae(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function ie(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function se(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ce(e,t){const n=se(se(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function st(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:ie(t.rotation)}}function le(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function ue(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function de(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ct={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function lt(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ct};const t=e.Data.rigid_body,n=ie(t.rotation),r=n?ae(ce({x:1,y:0,z:0},n)):null,o=n?ae(ce({x:0,y:0,z:1},n)):null,a=e.Data.camera,i=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:ue(a?.pitch),cameraYaw:ue(a?.yaw),throttle:le(i?.throttle),steer:le(i?.steer),dodgeImpulse:de(i?.dodge_impulse),dodgeTorque:de(i?.dodge_torque)}}function ut(e){return e.position!==null}function dt(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=P(t[r].position);for(let a=r+1;aat){o=P(s.position);continue}if(ft(o,s.position)>it){o=P(s.position);continue}const u={x:(i.linearVelocity.x+s.linearVelocity.x)/2,y:(i.linearVelocity.y+s.linearVelocity.y)/2,z:(i.linearVelocity.z+s.linearVelocity.z)/2},b={x:o.x+u.x*d,y:o.y+u.y*d,z:o.z+u.z*d},g=(a-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:b.x*(1-g)+s.position.x*g,y:b.y*(1-g)+s.position.y*g,z:b.z*(1-g)+s.position.z*g},s.position=P(o)}}function _t(e){return{motionSmoothing:e.motionSmoothing??nt,smoothingBlendFactor:e.smoothingBlendFactor??rt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??ot)}}function _e(){return typeof performance>"u"?Date.now():performance.now()}function gt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((i,[,s])=>i+s.frames.length,0),r=e.boost_pads?.length??oe,o=e.boost_pad_events?.length??0,a=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,a)].reduce((i,s)=>i+s,0)}function bt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=gt(e),o=bt(e);let a=0,i=0,s=-1,f=-1,l=_e();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,u=n.progressReportMinDelta??et,b=Math.max(1,n.progressReportFrameInterval??tt),g=()=>{if(!t)return!1;const m=Math.max(0,Math.min(1,a/r));if(m<=s)return!1;const h=i-f>=b;return m>=1||m-s>=u||h?(s=m,f=i,t(m,{progress:m,processedFrames:Math.min(i,o),totalFrames:o,processedUnits:a,totalUnits:r}),!0):!1},p=(m=!1)=>{const _=_e();return!m&&_-lr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=wt(e?.stats);return{fov:v(t,"CameraFOV")??A.fov,height:v(t,"CameraHeight")??A.height,pitch:v(t,"CameraPitch")??A.pitch,distance:v(t,"CameraDistance")??A.distance,stiffness:v(t,"CameraStiffness")??A.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??A.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??A.transitionSpeed}}function xt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const a of o)r.set(a.name,a),a.remote_id&&n.set(k(a.remote_id),a),t?.advance();return{byId:n,byName:r}}function At(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(k(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function vt(e,t){const n=new Set(e.meta.team_zero.map(f=>f.name)),r=new Set(e.meta.team_one.map(f=>f.name)),o=xt(e,t),a=At(e),i=[];let s=0;for(const[f,l]of e.frame_data.players){const d=new Array(l.frames.length);let u;for(let m=0;mt.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Tt(e,t,n){const r=e.player?k(e.player):null,o=r?t.get(r)?.name??r:null,a=o?`${o} scored`:"Goal";return{id:X("goal",e.frame,r??"team"),time:B(e.time,n),frame:e.frame,kind:"goal",label:a,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function It(e,t,n){const r=k(e.player),o=t.get(r)?.name??r,a=e.kind.toLowerCase(),i=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:X(a,e.frame,r),time:B(e.time,n),frame:e.frame,kind:a,label:`${o} ${i}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Et(e,t,n){const r=k(e.attacker),o=k(e.victim),a=t.get(r),i=t.get(o);return{id:X("demo",e.frame,`${r}:${o}`),time:B(e.time,n),frame:e.frame,kind:"demo",label:`${a?.name??r} demoed ${i?.name??o}`,shortLabel:"D",playerId:r,playerName:a?.name??r,secondaryPlayerId:o,secondaryPlayerName:i?.name??o,location:e.victim_location,isTeamZero:a?.isTeamZero??null}}function Dt(e,t,n,r,o){const a=te(t),i=[];for(const s of e.goal_events??[])i.push(Tt(s,a,r)),o?.advance();for(const s of e.player_stat_events??[])i.push(It(s,a,r)),o?.advance();for(const s of e.demolish_infos??[])i.push(Et(s,a,r)),o?.advance();for(const s of n)i.push(Qe(s));return i.length===0&&o?.advance(),St(i)}function Bt(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=pt(e,n),a=vt(e,n),i=Ot(e,n),s=_t(t);fe(o,i,s);for(const u of a)fe(o,u.frames,s);const f=Ze(e,a,r,n),l=Je(e,r,n),d=Dt(e,a,l,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:i,boostPads:f,players:a,tickMarks:l,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(u=>u.name),teamOneNames:e.meta.team_one.map(u=>u.name)}}function F(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,F(n)]));if(Array.isArray(e))return e.map(t=>F(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=F(r);return t}return e}async function Pt(){const e=Ae;typeof e=="function"&&await e()}function N(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Pt();const t=new Uint8Array(e.data.bytes);N({type:"progress",progress:{stage:"validating",progress:0}});const n=F(be(t));if(!n.valid)throw new Error(n.error??"Replay validation failed");const r=ge(t,s=>{N({type:"progress",progress:s})},e.data.reportEveryNFrames);N({type:"progress",progress:{stage:"normalizing",progress:0}});const o=JSON.parse(new TextDecoder().decode(r)),a=Bt(o,{motionSmoothing:e.data.motionSmoothing,smoothingBlendFactor:e.data.smoothingBlendFactor,smoothingAnchorInterval:e.data.smoothingAnchorInterval,progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(s){N({type:"progress",progress:{stage:"normalizing",progress:s}})}}),i=new TextEncoder().encode(JSON.stringify(a));self.postMessage({type:"done",rawBuffer:r.buffer,replayBuffer:i.buffer},[r.buffer,i.buffer])}catch(t){N({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/review/assets/wasm.worker-zm5sJFWS.js b/crates/rocket-sense-server/static/subtr-actor/review/assets/wasm.worker-zm5sJFWS.js new file mode 100644 index 00000000..1f671e38 --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/review/assets/wasm.worker-zm5sJFWS.js @@ -0,0 +1,2 @@ +(function(){"use strict";function ge(e,t,n){const r=q(e,c.__wbindgen_malloc),o=p,a=c.get_replay_frames_data_json_with_progress(r,o,t,v(n)?4294967297:n>>>0);if(a[3])throw Y(a[2]);var i=H(a[0],a[1]).slice();return c.__wbindgen_free(a[0],a[1]*1,1),i}function ye(e){const t=q(e,c.__wbindgen_malloc),n=p,r=c.validate_replay(t,n);if(r[2])throw Y(r[1]);return Y(r[0])}function pe(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(E(t,n))},__wbg_Number_04624de7d0e8332d:function(t){return Number(t)},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(t,n){const r=n,o=typeof r=="bigint"?r:void 0;y().setBigInt64(t+8,v(o)?BigInt(0):o,!0),y().setInt32(t+0,!v(o),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(t){const n=t,r=typeof n=="boolean"?n:void 0;return v(r)?16777215:r?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(t,n){const r=U(n),o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(t,n){return t in n},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(t){return typeof t=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(t){return typeof t=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(t){const n=t;return typeof n=="object"&&n!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(t){return t===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(t,n){return t===n},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(t,n){return t==n},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(t,n){const r=n,o=typeof r=="number"?r:void 0;y().setFloat64(t+8,v(o)?0:o,!0),y().setInt32(t+0,!v(o),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var a=v(o)?0:M(o,c.__wbindgen_malloc,c.__wbindgen_realloc),i=p;y().setInt32(t+4,i,!0),y().setInt32(t+0,a,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(E(t,n))},__wbg_call_389efe28435a9388:function(){return D(function(t,n){return t.call(n)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return D(function(t,n,r){return t.call(n,r)},arguments)},__wbg_done_57b39ecd9addfe81:function(t){return t.done},__wbg_entries_58c7934c745daac7:function(t){return Object.entries(t)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(E(t,n))}finally{c.__wbindgen_free(r,o,1)}},__wbg_get_9b94d73e6221f75c:function(t,n){return t[n>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return D(function(t,n){return Reflect.get(t,n)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(t,n){return t[n]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(t){let n;try{n=t instanceof ArrayBuffer}catch{n=!1}return n},__wbg_instanceof_Map_53af74335dec57f4:function(t){let n;try{n=t instanceof Map}catch{n=!1}return n},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(t){let n;try{n=t instanceof Uint8Array}catch{n=!1}return n},__wbg_isArray_d314bb98fcf08331:function(t){return Array.isArray(t)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(t){return Number.isSafeInteger(t)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(t){return t.length},__wbg_length_35a7bace40f36eac:function(t){return t.length},__wbg_log_f1a1b5cd3f9c7822:function(t,n){console.log(E(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(t){return new Uint8Array(t)},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(H(t,n))},__wbg_next_3482f54c49e8af19:function(){return D(function(t){return t.next()},arguments)},__wbg_next_418f80d8f5303233:function(t){return t.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(t,n,r){Uint8Array.prototype.set.call(H(t,n),r)},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return D(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg_value_0546255b415e96c1:function(t){return t.value},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return E(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=c.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function he(e){const t=c.__externref_table_alloc();return c.__wbindgen_externrefs.set(t,e),t}function U(e){const t=typeof e;if(t=="number"||t=="boolean"||e==null)return`${e}`;if(t=="string")return`"${e}"`;if(t=="symbol"){const o=e.description;return o==null?"Symbol":`Symbol(${o})`}if(t=="function"){const o=e.name;return typeof o=="string"&&o.length>0?`Function(${o})`:"Function"}if(Array.isArray(e)){const o=e.length;let a="[";o>0&&(a+=U(e[0]));for(let i=1;i1)r=n[1];else return toString.call(e);if(r=="Object")try{return"Object("+JSON.stringify(e)+")"}catch{return"Object"}return e instanceof Error?`${e.name}: ${e.message} +${e.stack}`:r}function H(e,t){return e=e>>>0,I().subarray(e/1,e/1+t)}let A=null;function y(){return(A===null||A.buffer.detached===!0||A.buffer.detached===void 0&&A.buffer!==c.memory.buffer)&&(A=new DataView(c.memory.buffer)),A}function E(e,t){return e=e>>>0,ke(e,t)}let B=null;function I(){return(B===null||B.byteLength===0)&&(B=new Uint8Array(c.memory.buffer)),B}function D(e,t){try{return e.apply(this,t)}catch(n){const r=he(n);c.__wbindgen_exn_store(r)}}function v(e){return e==null}function q(e,t){const n=t(e.length*1,1)>>>0;return I().set(e,n/1),p=e.length,n}function M(e,t,n){if(n===void 0){const s=N.encode(e),m=t(s.length,1)>>>0;return I().subarray(m,m+s.length).set(s),p=s.length,m}let r=e.length,o=t(r,1)>>>0;const a=I();let i=0;for(;i127)break;a[o+i]=s}if(i!==r){i!==0&&(e=e.slice(i)),o=n(o,r,r=i+e.length*3,1)>>>0;const s=I().subarray(o+i,o+r),m=N.encodeInto(e,s);i+=m.written,o=n(o,r,i,1)>>>0}return p=i,o}function Y(e){const t=c.__wbindgen_externrefs.get(e);return c.__externref_table_dealloc(e),t}let z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});z.decode();const we=2146435072;let $=0;function ke(e,t){return $+=t,$>=we&&(z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),z.decode(),$=t),z.decode(I().subarray(e,e+t))}const N=new TextEncoder;"encodeInto"in N||(N.encodeInto=function(e,t){const n=N.encode(e);return t.set(n),{read:e.length,written:n.length}});let p=0,c;function xe(e,t){return c=e.exports,A=null,B=null,c.__wbindgen_start(),c}async function Ae(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function ve(e){if(c!==void 0)return c;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",self.location.href).href,self.location.href));const t=pe();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await Ae(await e,t);return xe(n)}const J="octane",Se={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Oe={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Ie(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Te=Ie([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function Q(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function ee(e){if(!e)return null;switch(Q(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function te(e){return e?Oe[Q(e)]??null:null}function Ee(e){return ee(e)??te(e)}function Be(e){return Se[e]}function X(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),X(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),X(r[1],t))}}}function De(e){const t=ee(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const i=Te[n];if(i)return i}const r=te(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return J;const a=[];for(const[i,s]of Object.entries(o))a.push(i),X(s,a);for(const i of a){const s=Ee(i);if(s)return s}return J}function x(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function P(e,t){return Math.max(0,e-t)}function ne(e){return new Map(e.map(t=>[t.id,t]))}const h=70,re=73,Ne=3072,Pe=4096,Fe=1792,Re=4184,Me=940,ze=3308,Ce=2816,oe=3584,je=2484,Le=1788,Ve=2300,Ue=2048,He=1036,Ye=1024,$e=1024,Xe=4240,ae=34;function C(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function j(e,t,n,r,o){C(e,-t,n,r,o),C(e,t,n,r,o)}function W(e,t,n,r,o){C(e,t,-n,r,o),C(e,t,n,r,o)}function T(e,t,n,r,o){j(e,t,-n,r,o),j(e,t,n,r,o)}function We(){const e=[];return W(e,0,Xe,h,"small"),T(e,Fe,Re,h,"small"),T(e,Ne,Pe,re,"big"),T(e,Me,ze,h,"small"),W(e,0,Ce,h,"small"),T(e,oe,je,h,"small"),T(e,Le,Ve,h,"small"),T(e,Ue,He,h,"small"),W(e,0,$e,h,"small"),j(e,oe,0,re,"big"),j(e,Ye,0,h,"small"),e}function K(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function Ke(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ze(e){let t=null;for(const n of e){const r=K(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ge(e,t,n,r){const o=ne(t),a=new Map;for(const u of e.boost_pad_events??[]){if(K(u.kind)===null){r?.advance();continue}const l=a.get(u.pad_id);l?l.push(u):a.set(u.pad_id,[u]),r?.advance()}const i=e.boost_pads;if(!i||i.length===0)return r?.advance(ae),We();const s=[...i].sort((u,d)=>u.index-d.index),m=new Array(s.length);for(let u=0;u=72?"big":"small"),w=g.sort((_,k)=>_.time-k.time),f=new Array(w.length);for(let _=0;_=0?e.frame:null}function qe(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=Z(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function Je(e,t){return`bookmark:${Z(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Qe(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const a=qe(r,e);return a===null?[]:[{id:Je(r,o),description:r.description,frame:Z(r),time:P(a,t)}]})}function et(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const S={distance:270,height:100,pitch:-4,fov:110},tt=.005,nt=Number.POSITIVE_INFINITY,rt=!0,ot=.15,at=10,it=.1,st=10;function ie(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function se(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function ce(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ue(e,t){const n=ce(ce(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function ct(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:se(t.rotation)}}function le(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function de(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function fe(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ut={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function lt(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ut};const t=e.Data.rigid_body,n=se(t.rotation),r=n?ie(ue({x:1,y:0,z:0},n)):null,o=n?ie(ue({x:0,y:0,z:1},n)):null,a=e.Data.camera,i=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:de(a?.pitch),cameraYaw:de(a?.yaw),throttle:le(i?.throttle),steer:le(i?.steer),dodgeImpulse:fe(i?.dodge_impulse),dodgeTorque:fe(i?.dodge_torque)}}function dt(e){return e.position!==null}function ft(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=F(t[r].position);for(let a=r+1;ait){o=F(s.position);continue}if(_t(o,s.position)>st){o=F(s.position);continue}const l={x:(i.linearVelocity.x+s.linearVelocity.x)/2,y:(i.linearVelocity.y+s.linearVelocity.y)/2,z:(i.linearVelocity.z+s.linearVelocity.z)/2},g={x:o.x+l.x*d,y:o.y+l.y*d,z:o.z+l.z*d},b=(a-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:g.x*(1-b)+s.position.x*b,y:g.y*(1-b)+s.position.y*b,z:g.z*(1-b)+s.position.z*b},s.position=F(o)}}function bt(e){return{motionSmoothing:e.motionSmoothing??rt,smoothingBlendFactor:e.smoothingBlendFactor??ot,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??at)}}function be(){return typeof performance>"u"?Date.now():performance.now()}function gt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((i,[,s])=>i+s.frames.length,0),r=e.boost_pads?.length??ae,o=e.boost_pad_events?.length??0,a=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,a)].reduce((i,s)=>i+s,0)}function yt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function pt(e,t,n={}){const r=gt(e),o=yt(e);let a=0,i=0,s=-1,m=-1,u=be();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,l=n.progressReportMinDelta??tt,g=Math.max(1,n.progressReportFrameInterval??nt),b=()=>{if(!t)return!1;const f=Math.max(0,Math.min(1,a/r));if(f<=s)return!1;const k=i-m>=g;return f>=1||f-s>=l||k?(s=f,m=i,t(f,{progress:f,processedFrames:Math.min(i,o),totalFrames:o,processedUnits:a,totalUnits:r}),!0):!1},w=(f=!1)=>{const _=be();return!f&&_-ur===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function xt(e){const t=kt(e?.stats);return{fov:O(t,"CameraFOV")??S.fov,height:O(t,"CameraHeight")??S.height,pitch:O(t,"CameraPitch")??S.pitch,distance:O(t,"CameraDistance")??S.distance,stiffness:O(t,"CameraStiffness")??S.stiffness,swivelSpeed:O(t,"CameraSwivelSpeed")??S.swivelSpeed,transitionSpeed:O(t,"CameraTransitionSpeed")??S.transitionSpeed}}function At(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const a of o)r.set(a.name,a),a.remote_id&&n.set(x(a.remote_id),a),t?.advance();return{byId:n,byName:r}}function vt(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(x(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function St(e,t){const n=new Set(e.meta.team_zero.map(m=>m.name)),r=new Set(e.meta.team_one.map(m=>m.name)),o=At(e,t),a=vt(e),i=[];let s=0;for(const[m,u]of e.frame_data.players){const d=new Array(u.frames.length);let l;for(let f=0;ft.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Tt(e,t,n){const r=e.player?x(e.player):null,o=r?t.get(r)?.name??r:null,a=o?`${o} scored`:"Goal";return{id:G("goal",e.frame,r??"team"),time:P(e.time,n),frame:e.frame,kind:"goal",label:a,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function Et(e,t,n){const r=x(e.player),o=t.get(r)?.name??r,a=e.kind.toLowerCase(),i=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:G(a,e.frame,r),time:P(e.time,n),frame:e.frame,kind:a,label:`${o} ${i}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Bt(e,t,n){const r=x(e.attacker),o=x(e.victim),a=t.get(r),i=t.get(o);return{id:G("demo",e.frame,`${r}:${o}`),time:P(e.time,n),frame:e.frame,kind:"demo",label:`${a?.name??r} demoed ${i?.name??o}`,shortLabel:"D",playerId:r,playerName:a?.name??r,secondaryPlayerId:o,secondaryPlayerName:i?.name??o,location:e.victim_location,isTeamZero:a?.isTeamZero??null}}function Dt(e,t,n,r,o){const a=ne(t),i=[];for(const s of e.goal_events??[])i.push(Tt(s,a,r)),o?.advance();for(const s of e.player_stat_events??[])i.push(Et(s,a,r)),o?.advance();for(const s of e.demolish_infos??[])i.push(Bt(s,a,r)),o?.advance();for(const s of n)i.push(et(s));return i.length===0&&o?.advance(),It(i)}function Nt(e,t={}){const n=pt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=ht(e,n),a=St(e,n),i=Ot(e,n),s=bt(t);_e(o,i,s);for(const l of a)_e(o,l.frames,s);const m=Ge(e,a,r,n),u=Qe(e,r,n),d=Dt(e,a,u,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:i,boostPads:m,players:a,tickMarks:u,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(l=>l.name),teamOneNames:e.meta.team_one.map(l=>l.name)}}function L(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,L(n)]));if(Array.isArray(e))return e.map(t=>L(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=L(r);return t}return e}async function Pt(){const e=ve;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Pt();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=L(ye(t));if(!n.valid)throw new Error(n.error??"Replay validation failed");const r=ge(t,s=>{R({type:"progress",progress:s})},e.data.reportEveryNFrames);R({type:"progress",progress:{stage:"normalizing",progress:0}});const o=JSON.parse(new TextDecoder().decode(r)),a=Nt(o,{motionSmoothing:e.data.motionSmoothing,smoothingBlendFactor:e.data.smoothingBlendFactor,smoothingAnchorInterval:e.data.smoothingAnchorInterval,progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(s){R({type:"progress",progress:{stage:"normalizing",progress:s}})}}),i=new TextEncoder().encode(JSON.stringify(a));self.postMessage({type:"done",rawBuffer:r.buffer,replayBuffer:i.buffer},[r.buffer,i.buffer])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/review/index.html b/crates/rocket-sense-server/static/subtr-actor/review/index.html index 3f930690..132f6a76 100644 --- a/crates/rocket-sense-server/static/subtr-actor/review/index.html +++ b/crates/rocket-sense-server/static/subtr-actor/review/index.html @@ -5,7 +5,8 @@ stat evaluation player - + +
diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-rme7XOnQ.css b/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-BBR8rq7J.css similarity index 76% rename from crates/rocket-sense-server/static/subtr-actor/stats/assets/index-rme7XOnQ.css rename to crates/rocket-sense-server/static/subtr-actor/stats/assets/index-BBR8rq7J.css index 8c843e63..c3d19f60 100644 --- a/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-rme7XOnQ.css +++ b/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-BBR8rq7J.css @@ -1 +1 @@ -:root{color-scheme:dark;font-family:IBM Plex Sans,Avenir Next,sans-serif;font-size:13px;--surface: rgba(8, 20, 30, .82);--surface-strong: rgba(7, 16, 24, .94);--surface-soft: rgba(12, 28, 40, .72);--border: rgba(167, 199, 222, .14);--text: #edf5fa;--muted: #9eb4c6;--blue: #4b94ff;--blue-soft: rgba(75, 148, 255, .18);--orange: #f39a37;--orange-soft: rgba(243, 154, 55, .18);--ui-gap-xs: .22rem;--ui-gap-sm: .34rem;--ui-gap-md: .5rem;--ui-panel-padding: .52rem;--ui-control-font-size: .72rem;--ui-control-line-height: 1.15;--ui-control-padding-block: .22rem;--ui-control-padding-inline: .38rem;--ui-control-height: 1.55rem;--ui-radius-sm: .36rem;--ui-radius-md: .5rem;--ui-radius-lg: .72rem;--ui-radius-pill: 999px;--ui-border-subtle: rgba(255, 255, 255, .1);--ui-border-hover: rgba(255, 255, 255, .18);--ui-overlay-bg: rgba(4, 12, 18, .82);--ui-overlay-bg-strong: rgba(4, 12, 18, .9);background:radial-gradient(circle at top left,rgba(73,112,158,.28),transparent 32%),radial-gradient(circle at top right,rgba(243,154,55,.12),transparent 24%),linear-gradient(180deg,#071018,#0b1721);color:var(--text)}html,body,#app{width:100%;height:100%;overflow:hidden}.shell{min-height:100dvh;height:100dvh;padding:0;display:block}.workspace{height:100%;display:block;min-height:0}.panel h2,.stats-panel h2{margin:0}.panel-copy{color:#bdd0de}.viewport-panel,.panel,.stats-panel{position:relative;border:1px solid var(--border);border-radius:1.4rem;background:var(--surface);box-shadow:0 22px 56px #0000003d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.viewport-panel{width:100%;height:100%;min-height:100dvh;overflow:hidden;border:0;border-radius:0;background:#061019;box-shadow:none}.viewport{position:absolute;inset:0}.top-chrome{position:absolute;top:.8rem;left:.8rem;z-index:20}.launcher-toggle{width:2.65rem;min-width:0;aspect-ratio:1;display:grid;place-items:center;padding:0;border-color:transparent;border-radius:var(--ui-radius-md);background:#050e16ad;box-shadow:0 12px 30px #0000004d;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.launcher-toggle:hover,.launcher-toggle[aria-expanded=true]{border-color:#ffffff29;background:#081824d1}.launcher-toggle-bars,.launcher-toggle-bars:before,.launcher-toggle-bars:after{display:block;width:1.18rem;height:.12rem;border-radius:var(--ui-radius-pill);background:#edf5fa}.launcher-toggle-bars{position:relative}.launcher-toggle-bars:before,.launcher-toggle-bars:after{content:"";position:absolute;left:0}.launcher-toggle-bars:before{top:-.38rem}.launcher-toggle-bars:after{top:.38rem}.launcher-menu{position:absolute;top:calc(100% + .55rem);left:0;width:min(22rem,calc(100vw - 1.6rem));max-height:calc(100dvh - 7.5rem);overflow:auto;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg-strong);box-shadow:0 18px 54px #0000005c;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.launcher-menu[hidden]{display:none}.launcher-section{display:grid;gap:var(--ui-gap-xs)}.launcher-section h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.launcher-section button{width:100%;text-align:left}.hidden-file-input,.visually-hidden{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.team-blue{--team-accent: var(--blue);--team-soft: var(--blue-soft)}.team-orange{--team-accent: var(--orange);--team-soft: var(--orange-soft)}.floating-window-layer,.stats-window-layer{position:absolute;inset:0;z-index:12;pointer-events:none}.floating-window,.stats-window,.scoreboard-window{position:absolute;left:clamp(.8rem,var(--window-x, 1rem),calc(100vw - 18rem));top:clamp(.8rem,var(--window-y, 1rem),calc(100dvh - 12rem));width:min(26rem,calc(100vw - 1.6rem));overflow:visible;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg);box-shadow:0 16px 44px #00000052;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:auto;-webkit-user-select:none;user-select:none}.floating-window[hidden],.stats-window[hidden],.scoreboard-window[hidden]{display:none}.scoreboard-window{left:50%;top:.7rem;width:auto;min-width:4.4rem;transform:translate(-50%);gap:var(--ui-gap-sm);padding:.34rem .62rem;border-radius:999px}.scoreboard-window-body{display:grid;gap:.42rem}.scoreboard-scoreline{display:grid;grid-template-columns:minmax(1.2rem,auto) auto minmax(1.2rem,auto);align-items:center;justify-content:center;gap:.3rem;min-width:0;font-variant-numeric:tabular-nums}.scoreboard-goal-value{color:var(--team-accent);font-size:1rem;font-weight:850;line-height:1;text-align:center}.scoreboard-divider{color:var(--muted);font-size:1rem;font-weight:800;line-height:1}.scoreboard-empty{margin:0;color:var(--muted);font-size:.74rem;text-align:center}@media(max-width:900px){.scoreboard-window{top:3.25rem}}@media(max-width:640px){.scoreboard-window{min-width:4rem;padding:.32rem .56rem}.scoreboard-scoreline{gap:.24rem}.scoreboard-goal-value{font-size:.92rem}}.floating-window-camera{width:min(26rem,calc(100vw - 1.6rem))}.floating-window-recording{--window-x: calc(100vw - 27rem) ;width:min(26rem,calc(100vw - 1.6rem))}.floating-window-playback{--window-x: calc(100vw - 23rem) ;width:min(21rem,calc(100vw - 1.6rem))}.floating-window-mechanics{width:auto;min-width:min(18rem,calc(100vw - 1.6rem));max-width:min(42rem,calc(100vw - 1.6rem))}.mechanics-timeline-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,42rem);overflow:auto}.floating-window-event-playlist{width:min(27rem,calc(100vw - 1.6rem))}.floating-window-mechanics-review{width:min(30rem,calc(100vw - 1.6rem))}.floating-window-replay-loading{width:min(32rem,calc(100vw - 1.6rem))}.floating-window-boost-pickups{width:min(34rem,calc(100vw - 1.6rem))}.floating-window-touch-controls,.floating-window-touch-legend{width:min(24rem,calc(100vw - 1.6rem))}.floating-window-shot-visualization{width:min(38rem,calc(100vw - 1.6rem))}.floating-window-header,.stats-window-header{display:flex;align-items:start;justify-content:space-between;gap:var(--ui-gap-md);cursor:grab}.stats-window-header-actions-only{justify-content:end}.floating-window:active .floating-window-header,.stats-window:active .stats-window-header{cursor:grabbing}.floating-window-header h2,.stats-window-header h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.floating-window-hide,.stats-window-action{flex-shrink:0;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-md);font-size:var(--ui-control-font-size)}.mechanics-review-window-body{display:grid;gap:var(--ui-gap-md);max-height:min(74dvh,42rem);min-height:0;overflow:hidden auto;scrollbar-width:thin}.event-playlist-window-body{display:grid;gap:var(--ui-gap-sm);min-height:0}.touch-color-legend-body{display:grid;gap:var(--ui-gap-md);max-height:min(70dvh,38rem);overflow:auto;scrollbar-width:thin}.touch-color-legend-explainer{display:grid;gap:var(--ui-gap-xs);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);color:#c3d3df;font-size:.78rem;background:#ffffff0a}.touch-color-legend-group{display:grid;gap:var(--ui-gap-xs)}.touch-color-legend-heading{width:100%;min-height:1.45rem;margin:0;padding:.12rem .32rem;border-radius:var(--ui-radius-sm);color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.1em;text-align:left;text-transform:uppercase}.touch-color-legend-heading[data-active=true]{border-color:#8ec5ff6b;background:#21476b94;color:#f3f8fc}.touch-color-legend-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.touch-color-legend-item{min-width:0;display:flex;align-items:center;gap:var(--ui-gap-xs);color:#e8f0f7;font-size:.76rem}.touch-color-legend-swatch{flex:0 0 auto;width:.78rem;height:.78rem;border:1px solid rgba(255,255,255,.35);border-radius:50%;box-shadow:0 0 0 1px #00000038}.event-playlist-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.event-playlist-filter{position:relative;min-width:0}.event-playlist-filter summary{display:inline-flex;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0a;color:var(--text);font-size:var(--ui-control-font-size);cursor:pointer;list-style:none}.event-playlist-filter summary::-webkit-details-marker{display:none}.event-playlist-filter-panel{position:absolute;z-index:5;top:calc(100% + .4rem);left:0;width:min(22rem,calc(100vw - 3rem));max-height:min(28rem,calc(100dvh - 10rem));overflow:auto;display:grid;gap:var(--ui-gap-md);padding:.85rem;border:1px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#090e16fa;box-shadow:0 16px 34px #00000057}.event-playlist-filter-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem}.event-playlist-filter-group{display:grid;gap:.45rem}.event-playlist-filter-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.event-playlist-filter-option{min-width:0}.event-playlist-follow{flex-shrink:0}.event-playlist-list{max-height:min(31rem,calc(100dvh - 11rem));overflow:auto;display:grid;gap:.45rem;padding-right:.15rem;scrollbar-width:thin}.event-playlist-item{--event-color: #d1d9e0;appearance:none;width:100%;display:grid;grid-template-columns:3.4rem minmax(0,1fr);gap:.7rem;align-items:start;padding:.6rem .7rem;border:1px solid rgba(255,255,255,.09);border-left:.28rem solid var(--event-color);border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.event-playlist-item:hover,.event-playlist-item[data-active=true]{border-color:color-mix(in srgb,var(--event-color) 48%,rgba(255,255,255,.12));background:color-mix(in srgb,var(--event-color) 15%,rgba(255,255,255,.045))}.event-playlist-time{color:var(--muted);font-size:.72rem;font-variant-numeric:tabular-nums;line-height:1.35}.event-playlist-main{min-width:0;display:grid;gap:.15rem}.shot-visualization{display:grid;gap:var(--ui-gap-md);min-height:0}.shot-visualization-summary{color:var(--text);font-size:.78rem;font-weight:700;font-variant-numeric:tabular-nums}.shot-chart-canvas{width:100%;aspect-ratio:16 / 10;display:block;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#0f2b24}.shot-visualization-layout{display:grid;grid-template-columns:minmax(10rem,.78fr) minmax(15rem,1.22fr);gap:var(--ui-gap-md);min-height:0}.shot-list{display:grid;align-content:start;gap:.45rem;max-height:18rem;overflow:auto;padding-right:.15rem;scrollbar-width:thin}.shot-list-item{appearance:none;width:100%;display:grid;gap:.15rem;min-height:3.1rem;padding:.52rem .62rem;border:1px solid rgba(255,255,255,.09);border-left:.24rem solid #62d2a2;border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.shot-list-item[data-selected=true]{border-color:#f8fafcb8;background:#87afd429}.shot-list-item[data-active=true]{border-left-color:#e11d48}.shot-list-title{min-width:0;overflow:hidden;color:var(--text);font-size:.78rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.shot-list-meta{color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums;white-space:nowrap}.shot-demo-panel{display:grid;gap:var(--ui-gap-sm);min-width:0}.shot-demo-scene{width:100%;height:12rem;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#07111c}.shot-demo-scene canvas{width:100%;height:100%;display:block}.shot-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin:0}.shot-details div{min-width:0;padding:.48rem .56rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.shot-details dt{color:var(--muted);font-size:.62rem;font-weight:700;text-transform:uppercase}.shot-details dd{min-width:0;margin:.14rem 0 0;overflow:hidden;color:var(--text);font-size:.76rem;font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.shot-visualization-empty{margin:0;color:var(--muted);font-size:.78rem}.event-playlist-main strong{min-width:0;overflow-wrap:anywhere;font-size:.82rem;line-height:1.3}.event-playlist-main span{min-width:0;overflow-wrap:anywhere;color:var(--muted);font-size:.68rem;line-height:1.35}.mechanics-review-load-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center}.mechanics-review-file{display:inline-grid;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0e;color:var(--text);cursor:pointer}.mechanics-review-file input{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.mechanics-review-url{min-width:0}.mechanics-review-status{min-height:1.2rem;color:var(--muted);font-size:.78rem}.mechanics-review-current{display:grid;gap:var(--ui-gap-sm);padding:.55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-index{color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mechanics-review-current h3{margin:0;font-size:.96rem;line-height:1.2}.mechanics-review-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm);margin:0}.mechanics-review-fields div{min-width:0}.mechanics-review-fields dt{color:var(--muted);font-size:.68rem;text-transform:uppercase}.mechanics-review-fields dd{margin:.1rem 0 0;overflow-wrap:anywhere}.mechanics-review-wide{grid-column:1 / -1}.mechanics-review-actions,.mechanics-review-decision-actions,.mechanics-review-list-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.mechanics-review-actions button,.mechanics-review-decision-actions button{flex:1 1 0}#mechanics-review-confirm{border-color:#4caf7885}#mechanics-review-reject{border-color:#dc5f5f94}.mechanics-review-list-header{color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.mechanics-review-replays{display:grid;gap:var(--ui-gap-xs)}.replay-loading-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,40rem);min-height:0}.replay-loading-summary{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.replay-loading-list{max-height:min(38rem,calc(100dvh - 9rem));overflow:auto;display:grid;gap:var(--ui-gap-xs);padding-right:.15rem;scrollbar-width:thin}.mechanics-review-replay-load{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem var(--ui-gap-sm);min-width:0;padding:.5rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-replay-load.loaded{border-color:#4caf786b}.mechanics-review-replay-load.error{border-color:#dc5f5f94}.mechanics-review-replay-load-main{display:grid;min-width:0;gap:.16rem}.mechanics-review-replay-load-title,.mechanics-review-replay-load-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load-title{color:var(--text);font-size:.78rem;font-weight:700}.mechanics-review-replay-load-meta{color:var(--muted);font-size:.68rem}.mechanics-review-replay-load-status{max-width:11rem;overflow:hidden;color:var(--muted);font-size:.68rem;text-align:right;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-status{color:#83d4a4}.mechanics-review-replay-load.error .mechanics-review-replay-load-status{color:#ff9b9b}.mechanics-review-replay-load-progress{grid-column:1 / -1;height:.25rem;overflow:hidden;border-radius:999px;background:#ffffff14}.mechanics-review-replay-load-progress span{display:block;width:0;height:100%;border-radius:inherit;background:#77a9ff;transition:width .14s ease}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-progress span{background:#4caf78}.mechanics-review-replay-load.error .mechanics-review-replay-load-progress span{background:#dc5f5f}.mechanics-review-list{max-height:min(22rem,calc(100dvh - 27rem));display:grid;gap:var(--ui-gap-xs);overflow:auto;padding-right:.15rem;scrollbar-width:thin}.mechanics-review-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;width:100%;min-height:2rem;text-align:left}.mechanics-review-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item strong{color:var(--muted);font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item[data-active=true]{border-color:#4b94ff6b;background:#4b94ff29}.viewport canvas{display:block;width:100%;height:100%}.replay-load-modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:1.25rem;background:radial-gradient(circle at top,rgba(89,157,219,.18),transparent 30%),#040b12c2;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.replay-load-modal[hidden]{display:none}.replay-load-modal__dialog{width:min(32rem,100%);display:grid;gap:.75rem;padding:1.4rem 1.45rem;border-radius:1.35rem;border:1px solid rgba(255,255,255,.12);background:linear-gradient(180deg,#0b1724f5,#070f18f0);box-shadow:0 24px 70px #0006}.replay-load-modal__eyebrow{margin:0;font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#87afd4}.replay-load-modal__title,.replay-load-modal__status,.replay-load-modal__meta{margin:0}.replay-load-modal__title{font-size:clamp(1.45rem,4vw,2.1rem);line-height:1.1;color:#f3f8fc}.replay-load-modal__status{color:#e6f0f7;font-size:1rem}.replay-load-modal__phase-list{display:grid;gap:.52rem}.replay-load-modal__phase-row{display:grid;gap:.28rem}.replay-load-modal__phase-label{margin:0;font-size:.82rem;letter-spacing:.04em;color:#9eb4c6}.replay-load-modal__phase-row[data-state=active] .replay-load-modal__phase-label{color:#edf5fa}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-label{color:#c5d9e7}.replay-load-modal__phase-bar{overflow:hidden;height:.58rem;border-radius:999px;background:#ffffff1a}.replay-load-modal__phase-fill{width:0%;height:100%;border-radius:inherit;background:linear-gradient(90deg,#4b94ff,#8ec5ff 55%,#f39a37);transition:width .14s ease}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-fill{opacity:.95}.replay-load-modal__phase-fill[data-indeterminate=true]{width:100%!important;background:linear-gradient(90deg,#4b94ff40,#4b94ffcc 28%,#8ec5fff2,#f39a37cc 72%,#f39a3740);background-size:180% 100%;animation:replay-load-phase-indeterminate 1.1s linear infinite}@keyframes replay-load-phase-indeterminate{0%{background-position:0% 0%}to{background-position:180% 0%}}.replay-load-modal__meta{color:#9eb4c6;font-size:.92rem}.empty-state{position:absolute;left:50%;top:50%;z-index:10;display:grid;gap:.55rem;min-width:min(20rem,calc(100vw - 2rem));transform:translate(-50%,-50%);padding:.85rem .95rem;border-radius:1rem;border:1px solid rgba(169,201,226,.14);background:#040c12d1;color:#bfd2de;text-align:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.empty-state[hidden]{display:none}.empty-state p{margin:0}.stats-panel{padding:1.15rem 1.15rem 1rem}.panel-heading{display:flex;justify-content:space-between;align-items:start;gap:1rem;margin-bottom:1rem}.player-stats-stack{display:grid;gap:.9rem}.player-team-stack{display:grid;gap:.85rem}.player-team-group{display:grid;gap:.7rem;padding:.75rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.player-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.42rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.player-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.player-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.player-stats-grid{display:flex;gap:.7rem;flex-wrap:wrap}.player-card{flex:1 1 13rem;min-width:12rem;padding:.85rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.player-card.team-blue{background:var(--blue-soft);border-color:#4b94ff42}.player-card.team-orange{background:var(--orange-soft);border-color:#f39a3747}.player-card.shared{background:linear-gradient(180deg,#ffffff0f,#ffffff06),#ffffff09;border-color:#ffffff1f}.player-card-header{display:flex;justify-content:space-between;align-items:center;gap:.4rem;margin-bottom:.45rem}.player-name{font-size:.85rem;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-row{display:flex;justify-content:space-between;gap:.5rem;padding:.15rem 0;font-size:.8rem}.label,.detail-grid dt,.stat-row .label{color:#89a4ba}.stat-row .value,.detail-grid dd{font-variant-numeric:tabular-nums}.role-indicator,.depth-indicator{flex-shrink:0;padding:.18rem .45rem;border-radius:999px;font-size:.64rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.role-back,.depth-last{background:#ea55552e;color:#ff9b9b}.role-forward,.depth-upfield{background:#4ac6762e;color:#9ce5a8}.role-other,.depth-level{background:#8495a82e;color:#c0cbd6}.role-mid,.depth-mid{background:#f39a372e;color:#ffc680}.stat-module-section{display:grid;gap:.45rem}.stat-module-label{font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#6f889d}.sidebar{min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;align-items:start;gap:1rem}.stat-window-empty{margin:0;color:#9eb4c6;font-size:.88rem}.stats-window-toolbar,.stats-window-scope-row,.stats-window-actions{display:flex;align-items:center;gap:var(--ui-gap-sm);flex-wrap:wrap}.stats-window-toolbar{justify-content:end}.stats-window-scope-select{min-width:min(100%,13rem)}.stats-window-add-button{width:var(--ui-control-height);min-width:var(--ui-control-height);padding:0;font-size:1rem;font-weight:800;line-height:1}.stats-window-add-button[aria-expanded=true]{border-color:var(--ui-border-hover);background:#ffffff1a}.stats-window-scope-select.team-blue,.stats-window-scope-select.team-orange,.stats-window-stat-target.team-blue,.stats-window-stat-target.team-orange{border-color:var(--team-accent);box-shadow:inset .22rem 0 0 var(--team-accent)}.stats-window-picker{display:grid;gap:var(--ui-gap-sm);padding:var(--ui-panel-padding);border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff0a}.stats-window-picker[hidden]{display:none}.stats-window-picker-list{display:grid;gap:var(--ui-gap-xs);overflow:visible}.stats-window-picker-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.45rem;align-items:center;width:100%;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);text-align:left}.stats-window-picker-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-picker-item strong{color:#87afd4;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.stats-window-stat-list,.stats-window-entity-list,.stats-window-team-list{display:grid;gap:var(--ui-gap-sm)}.stats-window-team-group{display:grid;gap:var(--ui-gap-sm);padding:.48rem .5rem .55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.stats-window-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.34rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.stats-window-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.stats-window-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.stats-window-entity{display:grid;gap:var(--ui-gap-xs);padding-left:.5rem;border-left:2px solid rgba(255,255,255,.12)}.stats-window-entity.team-blue,.stats-window-entity.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),transparent 70%)}.stats-window-entity-title{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.stats-window-stat-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--ui-gap-sm);align-items:center;min-height:1.45rem;font-size:.8rem}.stats-window-stat-name{min-width:0;color:#9eb4c6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-stat-target{max-width:7rem;margin-left:.35rem;padding:.16rem .3rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.stats-window-stat-value{color:#edf5fa;font-variant-numeric:tabular-nums}.stats-window-stat-remove{padding:.18rem .36rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.goal-label-list{display:grid;gap:var(--ui-gap-sm);min-width:min(26rem,72vw)}.goal-label-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;padding:.56rem .62rem;border-left:2px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#ffffff09}.goal-label-item.team-blue,.goal-label-item.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),rgba(255,255,255,.03))}.goal-label-item header{min-width:0}.goal-label-item h3{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.goal-label-item header span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.goal-label-tags{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:.32rem}.goal-label-tag{padding:.16rem .38rem;border-radius:var(--ui-radius-sm);background:#8ec5ff21;color:#cfe6ff;font-size:.68rem;font-weight:800}.goal-label-tag-empty{background:#8495a829;color:#c0cbd6}.goal-label-actions{justify-self:end;display:flex;gap:.28rem}.goal-label-actions button{min-height:1.8rem;padding:.2rem .48rem;font-size:.72rem}.goal-label-actions .goal-label-watch{border-color:#65d6ad5c;background:#65d6ad2e;color:#d7ffef}.stats-window:has(.kickoff-overview){width:min(34rem,calc(100vw - 1.6rem))}.kickoff-overview{display:grid;gap:var(--ui-gap-md);width:100%;min-width:0}.kickoff-overview-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-md);align-items:start;padding-bottom:.52rem;border-bottom:1px solid rgba(255,255,255,.1)}.kickoff-overview-hero h3{margin:0;color:#edf5fa;font-size:.92rem;font-weight:800}.kickoff-overview-hero span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem}.kickoff-overview-victor{max-width:9rem;padding:.2rem .46rem;border-radius:var(--ui-radius-sm);background:#8495a82e;color:#d8e5ee;font-size:.72rem;font-weight:800;text-align:center}.kickoff-overview-victor.team-blue,.kickoff-overview-victor.team-orange{background:var(--team-soft);color:color-mix(in srgb,var(--team-accent) 72%,#ffffff)}.kickoff-overview-summary{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-metric{display:grid;gap:.12rem;min-width:0;padding:.46rem .52rem;border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff09}.kickoff-metric span,.kickoff-detail-row span{color:#89a4ba;font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-metric strong{min-width:0;color:#edf5fa;font-size:.78rem;overflow-wrap:anywhere}.kickoff-detail-grid{display:grid;gap:.18rem}.kickoff-detail-row{display:grid;grid-template-columns:minmax(7.5rem,1fr) auto;gap:var(--ui-gap-sm);align-items:baseline;min-height:1.38rem;font-size:.78rem}.kickoff-detail-row strong{color:#edf5fa;font-variant-numeric:tabular-nums}.kickoff-strategy-list{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-strategy-team{display:grid;gap:.34rem;min-width:0;padding:.54rem .58rem;border-radius:var(--ui-radius-md);border:1px solid color-mix(in srgb,var(--team-accent) 26%,transparent);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.kickoff-strategy-team h4{margin:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-strategy-line{margin:0;color:#edf5fa;font-size:.78rem;line-height:1.35;overflow-wrap:anywhere}.kickoff-support-list{display:grid;gap:.22rem;margin:0;padding:0;list-style:none}.kickoff-support-list li{color:#afc4d4;font-size:.74rem;line-height:1.3;overflow-wrap:anywhere}@media(min-width:46rem){.kickoff-overview-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:720px){.kickoff-overview-summary,.kickoff-detail-grid,.kickoff-strategy-list,.kickoff-overview-hero{grid-template-columns:1fr}.kickoff-overview-victor{justify-self:start}}.panel{padding:var(--ui-panel-padding);display:grid;gap:var(--ui-gap-md)}.panel>label,.panel>.detail-grid,.panel>.transport-row,.panel>.module-list{margin-top:0}.panel-copy{margin:0;font-size:.92rem;line-height:1.45}.transport-row{display:flex;gap:var(--ui-gap-sm)}.transport-row>*{flex:1 1 auto}.playback-rate-control{display:grid;gap:var(--ui-gap-xs)}.playback-rate-header{align-items:center;display:flex;justify-content:space-between}.playback-rate-header strong{font-variant-numeric:tabular-nums}.playback-rate-notches{color:var(--ui-muted);display:grid;font-size:.72rem;grid-template-columns:repeat(5,minmax(0,1fr));line-height:1.1;text-align:center}.playback-rate-notches span:first-child{text-align:left}.playback-rate-notches span:last-child{text-align:right}.recording-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm)}.camera-presets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.camera-presets button{font-size:var(--ui-control-font-size)}.camera-presets button[data-active=true]{border-color:#8ec5ff6b;background:linear-gradient(180deg,#21476bf5,#0c1b2afa);color:#f3f8fc;box-shadow:inset 0 0 0 1px #8ec5ff1f}.camera-ball-cam{display:grid;gap:var(--ui-gap-xs)}.camera-ball-cam-modes{grid-template-columns:repeat(3,minmax(0,1fr))}.camera-settings-controls{display:grid;gap:var(--ui-gap-sm)}.camera-settings-controls[hidden]{display:none}.camera-setting-label{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);font-size:.8rem;color:#9fb3c4}.camera-setting-label strong{color:#e8f0f7;font-variant-numeric:tabular-nums}button,select,input[type=file],input[type=range]{border-radius:var(--ui-radius-md)}button,select,input[type=file]{min-height:var(--ui-control-height);border:1px solid var(--ui-border-subtle);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);background:var(--surface-strong);color:var(--text);font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height)}button{cursor:pointer}select{appearance:none;padding-right:1.35rem;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - .76rem) 50%,calc(100% - .52rem) 50%;background-repeat:no-repeat;background-size:.24rem .24rem}button:hover:not(:disabled),select:hover:not(:disabled){border-color:var(--ui-border-hover)}button:disabled,select:disabled,input:disabled{opacity:.55;cursor:not-allowed}input[type=range]{width:100%;margin-top:var(--ui-gap-xs);accent-color:var(--blue)}.metric-readout{font-size:.88rem;font-weight:700;font-variant-numeric:tabular-nums}.toggle{display:inline-flex;align-items:center;gap:.4rem;color:#bfd0dd}.detail-grid{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem .7rem}.detail-grid dt,.detail-grid dd{margin:0}.detail-grid dt{font-size:.68rem;margin-bottom:.12rem}.detail-grid dd{font-size:.84rem;color:var(--text);overflow-wrap:anywhere}.module-groups{display:grid;gap:var(--ui-gap-md)}.module-summary-group{display:grid;gap:var(--ui-gap-xs)}.module-summary-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.module-list{display:flex;flex-wrap:wrap;gap:.5rem}.mechanics-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin-bottom:.65rem}.mechanics-event-list{display:grid;grid-template-columns:repeat(var(--event-source-columns, 1),minmax(9.5rem,1fr));align-items:stretch}.module-settings{display:grid;gap:.75rem}.module-settings-card{display:grid;gap:.75rem;padding:.85rem .9rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.module-settings-subgroup{display:grid;gap:.65rem;padding-top:.15rem;border-top:1px solid rgba(255,255,255,.06)}.module-settings-options{display:grid;gap:.45rem}.module-settings-group-title{margin:0;color:#d7e5ef;font-size:.78rem;font-weight:800}.module-settings-header{display:flex;align-items:start;justify-content:space-between;gap:.8rem}.module-settings-header h3{margin:.1rem 0 0;font-size:.96rem}.module-settings-eyebrow{margin:0;font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#87afd4}.boost-pickup-filter-panel{display:grid;gap:.65rem}.boost-pickup-filter-summary{display:flex;justify-content:end}.boost-pickup-filter-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1rem}.boost-pickup-filter-group{display:grid;align-content:start;gap:.35rem;min-width:0}.boost-pickup-filter-group[hidden]{display:none}.boost-pickup-filter-group-wide{grid-column:1 / -1}.boost-pickup-filter-options{display:flex;flex-wrap:wrap;gap:.35rem .8rem;min-width:0}.boost-pickup-filter-options .toggle{min-width:0}.module-summary-item{appearance:none;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-pill);border:1px solid var(--ui-border-subtle);background:#ffffff08;color:var(--muted);font:inherit;font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height);cursor:pointer;transition:border-color .14s ease,background-color .14s ease,color .14s ease}.module-summary-item:hover{border-color:var(--ui-border-hover);color:var(--text)}.module-summary-item strong{font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.module-summary-item[data-active=true]{border-color:#4b94ff38;background:#4b94ff14;color:#dceafb}@media(max-width:1180px){.sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:860px){.shell{padding:0}.sidebar{grid-template-columns:1fr}.panel-heading{display:grid}.detail-grid{grid-template-columns:1fr 1fr}.viewport-panel{min-height:100dvh}}@media(max-width:560px){.detail-grid{grid-template-columns:1fr}.transport-row{flex-direction:column}.floating-window,.stats-window{left:.55rem;right:.55rem;width:auto}}@media(max-width:720px){.viewport-panel:has(.floating-window:not([hidden])) .viewport{inset:0 0 52dvh}.floating-window{position:fixed;inset:auto 0 0;width:100%;max-width:none;height:52dvh;max-height:52dvh;overflow:auto;border-width:1px 0 0 0;border-radius:1rem 1rem 0 0;transform:none;z-index:30}.floating-window .floating-window-header{cursor:default}}.missed-event-body{display:flex;flex-direction:column;gap:.5rem;padding:.6rem .7rem;max-height:50vh;font-size:.8rem}.missed-event-controls{display:flex;align-items:center;gap:.4rem}.missed-event-controls select{flex:1 1 auto}.missed-event-list{list-style:none;margin:0;padding:0;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.missed-event-list li{display:flex;align-items:center;justify-content:space-between;gap:.4rem;padding:.2rem .3rem;border-radius:.3rem;background:#1c272ee6}.missed-event-status{margin:0;min-height:1rem;color:#9fadb7}:root{color-scheme:dark;font-family:IBM Plex Sans,Avenir Next,sans-serif;font-size:13px;--surface: rgba(10, 16, 20, .86);--surface-strong: rgba(14, 22, 27, .96);--border: rgba(218, 226, 232, .14);--text: #f2f6f8;--muted: #9fadb7;--blue: #58a6ff;--orange: #f39a37;--green: #65d6ad;--ui-border-subtle: rgba(255, 255, 255, .1);--ui-border-hover: rgba(255, 255, 255, .2);--ui-radius-md: .5rem;--ui-radius-lg: .72rem;background:radial-gradient(circle at 8% 0%,rgba(88,166,255,.16),transparent 28rem),radial-gradient(circle at 95% 12%,rgba(243,154,55,.12),transparent 24rem),linear-gradient(180deg,#080d10,#11181d);color:var(--text)}*,*:before,*:after{box-sizing:border-box}html,body,#app{min-height:100%}body{margin:0}button,select,input{font:inherit}.stats-report{width:min(1380px,calc(100vw - 2rem));margin:0 auto;padding:1rem 0 2rem}.stats-report-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem;align-items:end;padding:1rem 0 .8rem}.stats-report-title h1{margin:0;font-size:clamp(1.55rem,2.6vw,2.7rem);line-height:1;letter-spacing:0}.stats-report-title p{max-width:62rem;margin:.55rem 0 0;color:var(--muted);font-size:.94rem;line-height:1.45}.stats-report-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.stats-report-link,.stats-report-file-label,.stats-report-tabs button,.stats-report-jump-nav a{display:inline-flex;align-items:center;justify-content:center;min-height:2.15rem;padding:.48rem .72rem;border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#10181dd1;color:var(--text);text-decoration:none;cursor:pointer}.stats-report-link:hover,.stats-report-file-label:hover,.stats-report-tabs button:hover,.stats-report-jump-nav a:hover{border-color:var(--ui-border-hover);background:#1c272ef2}.stats-report-file-label input{display:none}.stats-report-status{margin:.25rem 0 1rem;color:#c9d6dd}.stats-report-empty{display:grid;min-height:48dvh;place-items:center;border:1px dashed rgba(255,255,255,.2);border-radius:var(--ui-radius-lg);color:var(--muted);text-align:center}.stats-report-tabs{position:sticky;top:0;z-index:4;display:flex;gap:.45rem;overflow:auto;padding:.65rem 0;background:#080d10d1;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.stats-report-tabs button{flex:0 0 auto;color:#dce8ee}.stats-report-tabs button[data-active=true]{border-color:#65d6ad85;background:#65d6ad24;color:#effff9}.stats-report-page{display:grid;gap:1rem}.stats-report-page-intro{max-width:78rem;padding-top:.35rem}.stats-report-page-intro h2{margin:0;font-size:1.12rem;letter-spacing:0}.stats-report-page-intro p,.stats-report-note,.stats-report-chart-card p{margin:.35rem 0 0;color:var(--muted);line-height:1.45}.stats-report-summary,.stats-report-metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem}.stats-report-summary-card,.stats-report-section,.stats-report-chart-card{border:1px solid var(--border);border-radius:var(--ui-radius-lg);background:var(--surface);box-shadow:0 18px 44px #0003}.stats-report-summary-card{min-width:0;padding:.8rem}.stats-report-summary-card span{display:block;overflow:hidden;color:var(--muted);font-size:.72rem;font-weight:800;letter-spacing:.1em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.stats-report-summary-card strong{display:block;overflow-wrap:anywhere;margin-top:.35rem;font-size:1.18rem}.stats-report-summary-card small{display:block;margin-top:.28rem;color:var(--muted)}.stats-report-charts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.stats-report-chart-card{min-width:0;padding:.8rem}.stats-report-chart-card h3{margin:0 0 .75rem;font-size:.92rem;letter-spacing:0}.stats-report-bar-chart{display:grid;gap:.5rem}.stats-report-bar-row{display:grid;grid-template-columns:minmax(5.5rem,10rem) minmax(8rem,1fr) minmax(3rem,auto);gap:.55rem;align-items:center;min-height:1.35rem}.stats-report-bar-label{overflow:hidden;color:#dce8ee;text-overflow:ellipsis;white-space:nowrap}.stats-report-bar-track{position:relative;height:.72rem;overflow:hidden;border-radius:999px;background:#ffffff14}.stats-report-bar-track:before{content:"";position:absolute;inset:0 auto 0 0;width:var(--bar-width);border-radius:inherit;background:var(--bar-color)}.stats-report-pie-chart{display:grid;grid-template-columns:8.5rem minmax(0,1fr);gap:1rem;align-items:center}.stats-report-pie{width:8.5rem;aspect-ratio:1;border:1px solid rgba(255,255,255,.16);border-radius:50%}.stats-report-pie-legend{display:grid;gap:.45rem}.stats-report-pie-legend div{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem;align-items:baseline}.stats-report-pie-legend span:before,.stats-report-stacked-legend span:before{content:"";display:inline-block;width:.58rem;height:.58rem;margin-right:.3rem;border-radius:50%;background:var(--legend-color)}.stats-report-pie-legend span,.stats-report-stacked-legend span{overflow:hidden;color:#dce8ee;text-overflow:ellipsis;white-space:nowrap}.stats-report-stacked-chart{display:grid;gap:.82rem}.stats-report-stacked-row{display:grid;gap:.38rem}.stats-report-stacked-row>strong{overflow:hidden;color:#e5edf1;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.stats-report-stacked-track{display:flex;height:.82rem;overflow:hidden;border-radius:999px;background:#ffffff14}.stats-report-stacked-track span{flex:0 0 var(--segment-width);min-width:0;background:var(--segment-color)}.stats-report-stacked-legend{display:flex;flex-wrap:wrap;gap:.42rem .72rem;color:var(--muted);font-size:.82rem}.stats-report-goal-list{display:grid;gap:1rem}.stats-report-goal-card{overflow:hidden;border:1px solid var(--border);border-left:3px solid rgba(255,255,255,.16);border-radius:var(--ui-radius-lg);background:var(--surface);box-shadow:0 18px 44px #0003}.stats-report-goal-card[data-team=blue]{border-left-color:var(--blue)}.stats-report-goal-card[data-team=orange]{border-left-color:var(--orange)}.stats-report-goal-card>header{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding:.85rem .9rem;border-bottom:1px solid var(--border);background:#ffffff05}.stats-report-goal-heading{min-width:0}.stats-report-goal-card h2,.stats-report-goal-subsection h3{margin:0;letter-spacing:0}.stats-report-goal-card h2{font-size:1rem}.stats-report-goal-heading span{display:block;margin-top:.14rem;overflow:hidden;color:var(--muted);text-overflow:ellipsis;white-space:nowrap}.stats-report-goal-watch{flex:0 0 auto;padding:.34rem .58rem;border:1px solid rgba(101,214,173,.34);border-radius:var(--ui-radius-md);background:#65d6ad24;color:#d7ffef;cursor:pointer;font-size:.82rem;font-weight:800;text-decoration:none}.stats-report-goal-watch:hover{border-color:#65d6ad85;background:#65d6ad38}.stats-report-goal-tags{display:flex;flex-wrap:wrap;gap:.42rem;padding:.7rem .9rem 0}.stats-report-goal-tag{padding:.2rem .48rem;border:1px solid rgba(88,166,255,.24);border-radius:var(--ui-radius-md);background:#58a6ff24;color:#d8ecff;font-size:.78rem;font-weight:800}.stats-report-goal-tag-empty{border-color:#9fadb733;background:#9fadb71f;color:#c8d2d9}.stats-report-detail-list{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.7rem .9rem;margin:0;padding:.85rem .9rem}.stats-report-detail-item{min-width:0}.stats-report-detail-list dt{color:var(--muted);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.stats-report-detail-list dd{overflow-wrap:anywhere;margin:.22rem 0 0;color:#edf5fa;font-weight:700}.stats-report-goal-subsection{display:grid;gap:.5rem;padding:0 .9rem .9rem}.stats-report-goal-subsection h3{color:#dce8ee;font-size:.88rem}.stats-report-jump-nav{display:flex;flex-wrap:wrap;gap:.45rem}.stats-report-grid{display:grid;gap:1rem}.stats-report-section{overflow:hidden}.stats-report-section header{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding:.85rem .9rem;border-bottom:1px solid var(--border);background:#ffffff05}.stats-report-section h2{margin:0;font-size:1rem;letter-spacing:0}.stats-report-section header span{color:var(--muted)}.stats-report-table-wrap{overflow:auto}.stats-report-table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.stats-report-table th,.stats-report-table td{padding:.48rem .62rem;border-bottom:1px solid rgba(255,255,255,.07);text-align:right;white-space:nowrap}.stats-report-table th:first-child,.stats-report-table td:first-child{position:sticky;left:0;z-index:1;max-width:20rem;background:var(--surface-strong);text-align:left;white-space:normal}.stats-report-table th{color:#b7c6cf;font-size:.72rem;text-transform:uppercase}@media(max-width:960px){.stats-report-header{grid-template-columns:1fr}.stats-report-actions{justify-content:flex-start}.stats-report-summary,.stats-report-metric-grid,.stats-report-charts{grid-template-columns:1fr}.stats-report-detail-list{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:620px){.stats-report{width:min(100vw - 1rem,1380px)}.stats-report-bar-row,.stats-report-pie-chart{grid-template-columns:1fr}.stats-report-pie{width:min(11rem,54vw)}.stats-report-goal-card>header{display:grid}.stats-report-detail-list{grid-template-columns:1fr}}.replay-review-document,#app.replay-review-root,.replay-review-root{height:auto;min-height:100%;overflow:visible}body.replay-review-document{overflow-y:auto}.replay-review-shell{min-height:100dvh}.replay-review-toolbar{position:fixed;top:.75rem;right:.75rem;z-index:1000;display:flex;align-items:center;gap:.4rem;max-width:min(34rem,calc(100vw - 1.5rem));padding:.35rem;border:1px solid rgba(255,255,255,.14);border-radius:.5rem;background:#080d10c7;color:#f2f6f8;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 14px 34px #00000042}.replay-review-status{overflow:hidden;max-width:14rem;padding:0 .35rem;color:#c9d6dd;font-size:.78rem;text-overflow:ellipsis;white-space:nowrap}.replay-review-toolbar button,.replay-review-file{display:inline-flex;align-items:center;justify-content:center;min-height:2rem;padding:.42rem .62rem;border:1px solid rgba(255,255,255,.12);border-radius:.4rem;background:#10181dd6;color:#f2f6f8;cursor:pointer;font:inherit;text-decoration:none}.replay-review-toolbar button:hover,.replay-review-file:hover{border-color:#ffffff38;background:#1c272ef2}.replay-review-toolbar button[data-active=true]{border-color:#65d6ad8c;background:#65d6ad29;color:#effff9}.replay-review-file input,.replay-review-pane[hidden]{display:none}.replay-review-empty{display:grid;min-height:100dvh;place-items:center;padding:4rem 1rem;color:#9fadb7;text-align:center}@media(max-width:720px){.replay-review-toolbar{left:.5rem;right:.5rem}.replay-review-status{flex:1 1 auto;max-width:none}} +:root{color-scheme:dark;font-family:IBM Plex Sans,Avenir Next,sans-serif;font-size:13px;--surface: rgba(8, 20, 30, .82);--surface-strong: rgba(7, 16, 24, .94);--surface-soft: rgba(12, 28, 40, .72);--border: rgba(167, 199, 222, .14);--text: #edf5fa;--muted: #9eb4c6;--blue: #4b94ff;--blue-soft: rgba(75, 148, 255, .18);--orange: #f39a37;--orange-soft: rgba(243, 154, 55, .18);--ui-gap-xs: .22rem;--ui-gap-sm: .34rem;--ui-gap-md: .5rem;--ui-panel-padding: .52rem;--ui-control-font-size: .72rem;--ui-control-line-height: 1.15;--ui-control-padding-block: .22rem;--ui-control-padding-inline: .38rem;--ui-control-height: 1.55rem;--ui-radius-sm: .36rem;--ui-radius-md: .5rem;--ui-radius-lg: .72rem;--ui-radius-pill: 999px;--ui-border-subtle: rgba(255, 255, 255, .1);--ui-border-hover: rgba(255, 255, 255, .18);--ui-overlay-bg: rgba(4, 12, 18, .82);--ui-overlay-bg-strong: rgba(4, 12, 18, .9);background:radial-gradient(circle at top left,rgba(73,112,158,.28),transparent 32%),radial-gradient(circle at top right,rgba(243,154,55,.12),transparent 24%),linear-gradient(180deg,#071018,#0b1721);color:var(--text)}html,body,#app{width:100%;height:100%;overflow:hidden}.shell{min-height:100dvh;height:100dvh;padding:0;display:block}.workspace{height:100%;display:block;min-height:0}.panel h2,.stats-panel h2{margin:0}.panel-copy{color:#bdd0de}.viewport-panel,.panel,.stats-panel{position:relative;border:1px solid var(--border);border-radius:1.4rem;background:var(--surface);box-shadow:0 22px 56px #0000003d;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.viewport-panel{width:100%;height:100%;min-height:100dvh;overflow:hidden;border:0;border-radius:0;background:#061019;box-shadow:none}.viewport{position:absolute;inset:0}.top-chrome{position:absolute;top:.8rem;left:.8rem;z-index:20}.launcher-toggle{width:2.65rem;min-width:0;aspect-ratio:1;display:grid;place-items:center;padding:0;border-color:transparent;border-radius:var(--ui-radius-md);background:#050e16ad;box-shadow:0 12px 30px #0000004d;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.launcher-toggle:hover,.launcher-toggle[aria-expanded=true]{border-color:#ffffff29;background:#081824d1}.launcher-toggle-bars,.launcher-toggle-bars:before,.launcher-toggle-bars:after{display:block;width:1.18rem;height:.12rem;border-radius:var(--ui-radius-pill);background:#edf5fa}.launcher-toggle-bars{position:relative}.launcher-toggle-bars:before,.launcher-toggle-bars:after{content:"";position:absolute;left:0}.launcher-toggle-bars:before{top:-.38rem}.launcher-toggle-bars:after{top:.38rem}.launcher-menu{position:absolute;top:calc(100% + .55rem);left:0;width:min(22rem,calc(100vw - 1.6rem));max-height:calc(100dvh - 7.5rem);overflow:auto;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg-strong);box-shadow:0 18px 54px #0000005c;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.launcher-menu[hidden]{display:none}.launcher-section{display:grid;gap:var(--ui-gap-xs)}.launcher-section h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.launcher-section button{width:100%;text-align:left}.hidden-file-input,.visually-hidden{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.team-blue{--team-accent: var(--blue);--team-soft: var(--blue-soft)}.team-orange{--team-accent: var(--orange);--team-soft: var(--orange-soft)}.floating-window-layer,.stats-window-layer{position:absolute;inset:0;z-index:12;pointer-events:none}.floating-window,.stats-window,.scoreboard-window{position:absolute;left:clamp(.8rem,var(--window-x, 1rem),calc(100vw - 18rem));top:clamp(.8rem,var(--window-y, 1rem),calc(100dvh - 12rem));width:min(26rem,calc(100vw - 1.6rem));overflow:visible;display:grid;gap:var(--ui-gap-md);padding:var(--ui-panel-padding);border:1px solid rgba(255,255,255,.12);border-radius:var(--ui-radius-lg);background:var(--ui-overlay-bg);box-shadow:0 16px 44px #00000052;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);pointer-events:auto;-webkit-user-select:none;user-select:none}.floating-window[hidden],.stats-window[hidden],.scoreboard-window[hidden]{display:none}.scoreboard-window{left:50%;top:.7rem;width:auto;min-width:4.4rem;transform:translate(-50%);gap:var(--ui-gap-sm);padding:.34rem .62rem;border-radius:999px}.scoreboard-window-body{display:grid;gap:.42rem}.scoreboard-scoreline{display:grid;grid-template-columns:minmax(1.2rem,auto) auto minmax(1.2rem,auto);align-items:center;justify-content:center;gap:.3rem;min-width:0;font-variant-numeric:tabular-nums}.scoreboard-goal-value{color:var(--team-accent);font-size:1rem;font-weight:850;line-height:1;text-align:center}.scoreboard-divider{color:var(--muted);font-size:1rem;font-weight:800;line-height:1}.scoreboard-empty{margin:0;color:var(--muted);font-size:.74rem;text-align:center}@media(max-width:900px){.scoreboard-window{top:3.25rem}}@media(max-width:640px){.scoreboard-window{min-width:4rem;padding:.32rem .56rem}.scoreboard-scoreline{gap:.24rem}.scoreboard-goal-value{font-size:.92rem}}.floating-window-camera{width:min(26rem,calc(100vw - 1.6rem))}.floating-window-recording{--window-x: calc(100vw - 27rem) ;width:min(26rem,calc(100vw - 1.6rem))}.floating-window-playback{--window-x: calc(100vw - 23rem) ;width:min(21rem,calc(100vw - 1.6rem))}.floating-window-mechanics{width:auto;min-width:min(18rem,calc(100vw - 1.6rem));max-width:min(42rem,calc(100vw - 1.6rem))}.mechanics-timeline-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,42rem);overflow:auto}.floating-window-event-playlist{width:min(27rem,calc(100vw - 1.6rem))}.floating-window-mechanics-review{width:min(30rem,calc(100vw - 1.6rem))}.floating-window-replay-loading{width:min(32rem,calc(100vw - 1.6rem))}.floating-window-boost-pickups{width:min(34rem,calc(100vw - 1.6rem))}.floating-window-touch-controls,.floating-window-touch-legend{width:min(24rem,calc(100vw - 1.6rem))}.floating-window-shot-visualization{width:min(38rem,calc(100vw - 1.6rem))}.floating-window-header,.stats-window-header{display:flex;align-items:start;justify-content:space-between;gap:var(--ui-gap-md);cursor:grab}.stats-window-header-actions-only{justify-content:end}.floating-window:active .floating-window-header,.stats-window:active .stats-window-header{cursor:grabbing}.floating-window-header h2,.stats-window-header h2{margin:0;color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.floating-window-hide,.stats-window-action{flex-shrink:0;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-md);font-size:var(--ui-control-font-size)}.mechanics-review-window-body{display:grid;gap:var(--ui-gap-md);max-height:min(74dvh,42rem);min-height:0;overflow:hidden auto;scrollbar-width:thin}.event-playlist-window-body{display:grid;gap:var(--ui-gap-sm);min-height:0}.touch-color-legend-body{display:grid;gap:var(--ui-gap-md);max-height:min(70dvh,38rem);overflow:auto;scrollbar-width:thin}.touch-color-legend-explainer{display:grid;gap:var(--ui-gap-xs);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);color:#c3d3df;font-size:.78rem;background:#ffffff0a}.touch-color-legend-group{display:grid;gap:var(--ui-gap-xs)}.touch-color-legend-heading{width:100%;min-height:1.45rem;margin:0;padding:.12rem .32rem;border-radius:var(--ui-radius-sm);color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.1em;text-align:left;text-transform:uppercase}.touch-color-legend-heading[data-active=true]{border-color:#8ec5ff6b;background:#21476b94;color:#f3f8fc}.touch-color-legend-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.touch-color-legend-item{min-width:0;display:flex;align-items:center;gap:var(--ui-gap-xs);color:#e8f0f7;font-size:.76rem}.touch-color-legend-swatch{flex:0 0 auto;width:.78rem;height:.78rem;border:1px solid rgba(255,255,255,.35);border-radius:50%;box-shadow:0 0 0 1px #00000038}.event-playlist-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.event-playlist-filter{position:relative;min-width:0}.event-playlist-filter summary{display:inline-flex;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0a;color:var(--text);font-size:var(--ui-control-font-size);cursor:pointer;list-style:none}.event-playlist-filter summary::-webkit-details-marker{display:none}.event-playlist-filter-panel{position:absolute;z-index:5;top:calc(100% + .4rem);left:0;width:min(22rem,calc(100vw - 3rem));max-height:min(28rem,calc(100dvh - 10rem));overflow:auto;display:grid;gap:var(--ui-gap-md);padding:.85rem;border:1px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#090e16fa;box-shadow:0 16px 34px #00000057}.event-playlist-filter-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem}.event-playlist-filter-group{display:grid;gap:.45rem}.event-playlist-filter-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.event-playlist-filter-option{min-width:0}.event-playlist-follow{flex-shrink:0}.event-playlist-list{max-height:min(31rem,calc(100dvh - 11rem));overflow:auto;display:grid;gap:.45rem;padding-right:.15rem;scrollbar-width:thin}.event-playlist-item{--event-color: #d1d9e0;appearance:none;width:100%;display:grid;grid-template-columns:3.4rem minmax(0,1fr);gap:.7rem;align-items:start;padding:.6rem .7rem;border:1px solid rgba(255,255,255,.09);border-left:.28rem solid var(--event-color);border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.event-playlist-item:hover,.event-playlist-item[data-active=true]{border-color:color-mix(in srgb,var(--event-color) 48%,rgba(255,255,255,.12));background:color-mix(in srgb,var(--event-color) 15%,rgba(255,255,255,.045))}.event-playlist-time{color:var(--muted);font-size:.72rem;font-variant-numeric:tabular-nums;line-height:1.35}.event-playlist-main{min-width:0;display:grid;gap:.15rem}.shot-visualization{display:grid;gap:var(--ui-gap-md);min-height:0}.shot-visualization-summary{color:var(--text);font-size:.78rem;font-weight:700;font-variant-numeric:tabular-nums}.shot-chart-canvas{width:100%;aspect-ratio:16 / 10;display:block;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#0f2b24}.shot-visualization-layout{display:grid;grid-template-columns:minmax(10rem,.78fr) minmax(15rem,1.22fr);gap:var(--ui-gap-md);min-height:0}.shot-list{display:grid;align-content:start;gap:.45rem;max-height:18rem;overflow:auto;padding-right:.15rem;scrollbar-width:thin}.shot-list-item{appearance:none;width:100%;display:grid;gap:.15rem;min-height:3.1rem;padding:.52rem .62rem;border:1px solid rgba(255,255,255,.09);border-left:.24rem solid #62d2a2;border-radius:var(--ui-radius-md);background:#ffffff09;color:var(--text);font:inherit;text-align:left;cursor:pointer}.shot-list-item[data-selected=true]{border-color:#f8fafcb8;background:#87afd429}.shot-list-item[data-active=true]{border-left-color:#e11d48}.shot-list-title{min-width:0;overflow:hidden;color:var(--text);font-size:.78rem;font-weight:800;text-overflow:ellipsis;white-space:nowrap}.shot-list-meta{color:var(--muted);font-size:.68rem;font-variant-numeric:tabular-nums;white-space:nowrap}.shot-demo-panel{display:grid;gap:var(--ui-gap-sm);min-width:0}.shot-demo-scene{width:100%;height:12rem;overflow:hidden;border:1px solid rgba(255,255,255,.1);border-radius:var(--ui-radius-md);background:#07111c}.shot-demo-scene canvas{width:100%;height:100%;display:block}.shot-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin:0}.shot-details div{min-width:0;padding:.48rem .56rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.shot-details dt{color:var(--muted);font-size:.62rem;font-weight:700;text-transform:uppercase}.shot-details dd{min-width:0;margin:.14rem 0 0;overflow:hidden;color:var(--text);font-size:.76rem;font-variant-numeric:tabular-nums;text-overflow:ellipsis;white-space:nowrap}.shot-visualization-empty{margin:0;color:var(--muted);font-size:.78rem}.event-playlist-main strong{min-width:0;overflow-wrap:anywhere;font-size:.82rem;line-height:1.3}.event-playlist-main span{min-width:0;overflow-wrap:anywhere;color:var(--muted);font-size:.68rem;line-height:1.35}.mechanics-review-load-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center}.mechanics-review-file{display:inline-grid;align-items:center;min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#ffffff0e;color:var(--text);cursor:pointer}.mechanics-review-file input{position:fixed;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.mechanics-review-url{min-width:0}.mechanics-review-status{min-height:1.2rem;color:var(--muted);font-size:.78rem}.mechanics-review-current{display:grid;gap:var(--ui-gap-sm);padding:.55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-index{color:#87afd4;font-size:.68rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.mechanics-review-current h3{margin:0;font-size:.96rem;line-height:1.2}.mechanics-review-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm);margin:0}.mechanics-review-fields div{min-width:0}.mechanics-review-fields dt{color:var(--muted);font-size:.68rem;text-transform:uppercase}.mechanics-review-fields dd{margin:.1rem 0 0;overflow-wrap:anywhere}.mechanics-review-wide{grid-column:1 / -1}.mechanics-review-actions,.mechanics-review-decision-actions,.mechanics-review-list-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm)}.mechanics-review-actions button,.mechanics-review-decision-actions button{flex:1 1 0}#mechanics-review-confirm{border-color:#4caf7885}#mechanics-review-reject{border-color:#dc5f5f94}.mechanics-review-list-header{color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.mechanics-review-replays{display:grid;gap:var(--ui-gap-xs)}.replay-loading-window-body{display:grid;gap:var(--ui-gap-sm);max-height:min(72dvh,40rem);min-height:0}.replay-loading-summary{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);color:var(--muted);font-size:.72rem;font-weight:700;text-transform:uppercase}.replay-loading-list{max-height:min(38rem,calc(100dvh - 9rem));overflow:auto;display:grid;gap:var(--ui-gap-xs);padding-right:.15rem;scrollbar-width:thin}.mechanics-review-replay-load{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.35rem var(--ui-gap-sm);min-width:0;padding:.5rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:#ffffff09}.mechanics-review-replay-load.loaded{border-color:#4caf786b}.mechanics-review-replay-load.error{border-color:#dc5f5f94}.mechanics-review-replay-load-main{display:grid;min-width:0;gap:.16rem}.mechanics-review-replay-load-title,.mechanics-review-replay-load-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load-title{color:var(--text);font-size:.78rem;font-weight:700}.mechanics-review-replay-load-meta{color:var(--muted);font-size:.68rem}.mechanics-review-replay-load-status{max-width:11rem;overflow:hidden;color:var(--muted);font-size:.68rem;text-align:right;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-status{color:#83d4a4}.mechanics-review-replay-load.error .mechanics-review-replay-load-status{color:#ff9b9b}.mechanics-review-replay-load-progress{grid-column:1 / -1;height:.25rem;overflow:hidden;border-radius:999px;background:#ffffff14}.mechanics-review-replay-load-progress span{display:block;width:0;height:100%;border-radius:inherit;background:#77a9ff;transition:width .14s ease}.mechanics-review-replay-load.loaded .mechanics-review-replay-load-progress span{background:#4caf78}.mechanics-review-replay-load.error .mechanics-review-replay-load-progress span{background:#dc5f5f}.mechanics-review-list{max-height:min(22rem,calc(100dvh - 27rem));display:grid;gap:var(--ui-gap-xs);overflow:auto;padding-right:.15rem;scrollbar-width:thin}.mechanics-review-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;width:100%;min-height:2rem;text-align:left}.mechanics-review-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item strong{color:var(--muted);font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mechanics-review-item[data-active=true]{border-color:#4b94ff6b;background:#4b94ff29}.viewport canvas{display:block;width:100%;height:100%}.replay-load-modal{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:1.25rem;background:radial-gradient(circle at top,rgba(89,157,219,.18),transparent 30%),#040b12c2;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.replay-load-modal[hidden]{display:none}.replay-load-modal__dialog{width:min(32rem,100%);display:grid;gap:.75rem;padding:1.4rem 1.45rem;border-radius:1.35rem;border:1px solid rgba(255,255,255,.12);background:linear-gradient(180deg,#0b1724f5,#070f18f0);box-shadow:0 24px 70px #0006}.replay-load-modal__eyebrow{margin:0;font-size:.72rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:#87afd4}.replay-load-modal__title,.replay-load-modal__status,.replay-load-modal__meta{margin:0}.replay-load-modal__title{font-size:clamp(1.45rem,4vw,2.1rem);line-height:1.1;color:#f3f8fc}.replay-load-modal__status{color:#e6f0f7;font-size:1rem}.replay-load-modal__phase-list{display:grid;gap:.52rem}.replay-load-modal__phase-row{display:grid;gap:.28rem}.replay-load-modal__phase-label{margin:0;font-size:.82rem;letter-spacing:.04em;color:#9eb4c6}.replay-load-modal__phase-row[data-state=active] .replay-load-modal__phase-label{color:#edf5fa}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-label{color:#c5d9e7}.replay-load-modal__phase-bar{overflow:hidden;height:.58rem;border-radius:999px;background:#ffffff1a}.replay-load-modal__phase-fill{width:0%;height:100%;border-radius:inherit;background:linear-gradient(90deg,#4b94ff,#8ec5ff 55%,#f39a37);transition:width .14s ease}.replay-load-modal__phase-row[data-state=complete] .replay-load-modal__phase-fill{opacity:.95}.replay-load-modal__phase-fill[data-indeterminate=true]{width:100%!important;background:linear-gradient(90deg,#4b94ff40,#4b94ffcc 28%,#8ec5fff2,#f39a37cc 72%,#f39a3740);background-size:180% 100%;animation:replay-load-phase-indeterminate 1.1s linear infinite}@keyframes replay-load-phase-indeterminate{0%{background-position:0% 0%}to{background-position:180% 0%}}.replay-load-modal__meta{color:#9eb4c6;font-size:.92rem}.empty-state{position:absolute;left:50%;top:50%;z-index:10;display:grid;gap:.55rem;min-width:min(20rem,calc(100vw - 2rem));transform:translate(-50%,-50%);padding:.85rem .95rem;border-radius:1rem;border:1px solid rgba(169,201,226,.14);background:#040c12d1;color:#bfd2de;text-align:center;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.empty-state[hidden]{display:none}.empty-state p{margin:0}.stats-panel{padding:1.15rem 1.15rem 1rem}.panel-heading{display:flex;justify-content:space-between;align-items:start;gap:1rem;margin-bottom:1rem}.player-stats-stack{display:grid;gap:.9rem}.player-team-stack{display:grid;gap:.85rem}.player-team-group{display:grid;gap:.7rem;padding:.75rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.player-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.42rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.player-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.player-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.player-stats-grid{display:flex;gap:.7rem;flex-wrap:wrap}.player-card{flex:1 1 13rem;min-width:12rem;padding:.85rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.player-card.team-blue{background:var(--blue-soft);border-color:#4b94ff42}.player-card.team-orange{background:var(--orange-soft);border-color:#f39a3747}.player-card.shared{background:linear-gradient(180deg,#ffffff0f,#ffffff06),#ffffff09;border-color:#ffffff1f}.player-card-header{display:flex;justify-content:space-between;align-items:center;gap:.4rem;margin-bottom:.45rem}.player-name{font-size:.85rem;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stat-row{display:flex;justify-content:space-between;gap:.5rem;padding:.15rem 0;font-size:.8rem}.label,.detail-grid dt,.stat-row .label{color:#89a4ba}.stat-row .value,.detail-grid dd{font-variant-numeric:tabular-nums}.role-indicator,.depth-indicator{flex-shrink:0;padding:.18rem .45rem;border-radius:999px;font-size:.64rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.role-back,.depth-last{background:#ea55552e;color:#ff9b9b}.role-forward,.depth-upfield{background:#4ac6762e;color:#9ce5a8}.role-other,.depth-level{background:#8495a82e;color:#c0cbd6}.role-mid,.depth-mid{background:#f39a372e;color:#ffc680}.stat-module-section{display:grid;gap:.45rem}.stat-module-label{font-size:.72rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#6f889d}.sidebar{min-height:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-content:start;align-items:start;gap:1rem}.stat-window-empty{margin:0;color:#9eb4c6;font-size:.88rem}.stats-window-toolbar,.stats-window-scope-row,.stats-window-actions{display:flex;align-items:center;gap:var(--ui-gap-sm);flex-wrap:wrap}.stats-window-toolbar{justify-content:end}.stats-window-scope-select{min-width:min(100%,13rem)}.stats-window-add-button{width:var(--ui-control-height);min-width:var(--ui-control-height);padding:0;font-size:1rem;font-weight:800;line-height:1}.stats-window-add-button[aria-expanded=true]{border-color:var(--ui-border-hover);background:#ffffff1a}.stats-window-scope-select.team-blue,.stats-window-scope-select.team-orange,.stats-window-stat-target.team-blue,.stats-window-stat-target.team-orange{border-color:var(--team-accent);box-shadow:inset .22rem 0 0 var(--team-accent)}.stats-window-picker{display:grid;gap:var(--ui-gap-sm);padding:var(--ui-panel-padding);border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff0a}.stats-window-picker[hidden]{display:none}.stats-window-picker-list{display:grid;gap:var(--ui-gap-xs);overflow:visible}.stats-window-picker-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.45rem;align-items:center;width:100%;padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);text-align:left}.stats-window-picker-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-picker-item strong{color:#87afd4;font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.stats-window-stat-list,.stats-window-entity-list,.stats-window-team-list{display:grid;gap:var(--ui-gap-sm)}.stats-window-team-group{display:grid;gap:var(--ui-gap-sm);padding:.48rem .5rem .55rem;border:1px solid rgba(255,255,255,.08);border-radius:var(--ui-radius-md);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.stats-window-team-header{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);padding-bottom:.34rem;border-bottom:1px solid color-mix(in srgb,var(--team-accent) 36%,transparent)}.stats-window-team-header h3{margin:0;color:#edf5fa;font-size:.76rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.stats-window-team-header span{flex-shrink:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.68rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase}.stats-window-entity{display:grid;gap:var(--ui-gap-xs);padding-left:.5rem;border-left:2px solid rgba(255,255,255,.12)}.stats-window-entity.team-blue,.stats-window-entity.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),transparent 70%)}.stats-window-entity-title{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.stats-window-stat-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:var(--ui-gap-sm);align-items:center;min-height:1.45rem;font-size:.8rem}.stats-window-stat-name{min-width:0;color:#9eb4c6;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stats-window-stat-target{max-width:7rem;margin-left:.35rem;padding:.16rem .3rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.stats-window-stat-value{color:#edf5fa;font-variant-numeric:tabular-nums}.stats-window-stat-remove{padding:.18rem .36rem;border-radius:var(--ui-radius-sm);font-size:.7rem}.goal-label-list{display:grid;gap:var(--ui-gap-sm);min-width:min(26rem,72vw)}.goal-label-item{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-sm);align-items:center;padding:.56rem .62rem;border-left:2px solid rgba(255,255,255,.14);border-radius:var(--ui-radius-md);background:#ffffff09}.goal-label-item.team-blue,.goal-label-item.team-orange{border-left-color:var(--team-accent);background:linear-gradient(90deg,var(--team-soft),rgba(255,255,255,.03))}.goal-label-item header{min-width:0}.goal-label-item h3{margin:0;color:#edf5fa;font-size:.82rem;font-weight:800}.goal-label-item header span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.goal-label-tags{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:.32rem}.goal-label-tag{padding:.16rem .38rem;border-radius:var(--ui-radius-sm);background:#8ec5ff21;color:#cfe6ff;font-size:.68rem;font-weight:800}.goal-label-tag-empty{background:#8495a829;color:#c0cbd6}.goal-label-actions{justify-self:end;display:flex;gap:.28rem}.goal-label-actions button{min-height:1.8rem;padding:.2rem .48rem;font-size:.72rem}.goal-label-actions .goal-label-watch{border-color:#65d6ad5c;background:#65d6ad2e;color:#d7ffef}.stats-window:has(.kickoff-overview){width:min(34rem,calc(100vw - 1.6rem))}.kickoff-overview{display:grid;gap:var(--ui-gap-md);width:100%;min-width:0}.kickoff-overview-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--ui-gap-md);align-items:start;padding-bottom:.52rem;border-bottom:1px solid rgba(255,255,255,.1)}.kickoff-overview-hero h3{margin:0;color:#edf5fa;font-size:.92rem;font-weight:800}.kickoff-overview-hero span{display:block;margin-top:.12rem;color:#9eb4c6;font-size:.72rem}.kickoff-overview-victor{max-width:9rem;padding:.2rem .46rem;border-radius:var(--ui-radius-sm);background:#8495a82e;color:#d8e5ee;font-size:.72rem;font-weight:800;text-align:center}.kickoff-overview-victor.team-blue,.kickoff-overview-victor.team-orange{background:var(--team-soft);color:color-mix(in srgb,var(--team-accent) 72%,#ffffff)}.kickoff-overview-summary{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-metric{display:grid;gap:.12rem;min-width:0;padding:.46rem .52rem;border-radius:var(--ui-radius-md);border:1px solid rgba(255,255,255,.08);background:#ffffff09}.kickoff-metric span,.kickoff-detail-row span{color:#89a4ba;font-size:.7rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-metric strong{min-width:0;color:#edf5fa;font-size:.78rem;overflow-wrap:anywhere}.kickoff-detail-grid{display:grid;gap:.18rem}.kickoff-detail-row{display:grid;grid-template-columns:minmax(7.5rem,1fr) auto;gap:var(--ui-gap-sm);align-items:baseline;min-height:1.38rem;font-size:.78rem}.kickoff-detail-row strong{color:#edf5fa;font-variant-numeric:tabular-nums}.kickoff-strategy-list{display:grid;grid-template-columns:1fr;gap:var(--ui-gap-sm)}.kickoff-strategy-team{display:grid;gap:.34rem;min-width:0;padding:.54rem .58rem;border-radius:var(--ui-radius-md);border:1px solid color-mix(in srgb,var(--team-accent) 26%,transparent);background:linear-gradient(180deg,var(--team-soft),rgba(255,255,255,.025)),#ffffff08}.kickoff-strategy-team h4{margin:0;color:color-mix(in srgb,var(--team-accent) 62%,#edf5fa);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.kickoff-strategy-line{margin:0;color:#edf5fa;font-size:.78rem;line-height:1.35;overflow-wrap:anywhere}.kickoff-support-list{display:grid;gap:.22rem;margin:0;padding:0;list-style:none}.kickoff-support-list li{color:#afc4d4;font-size:.74rem;line-height:1.3;overflow-wrap:anywhere}@media(min-width:46rem){.kickoff-overview-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:720px){.kickoff-overview-summary,.kickoff-detail-grid,.kickoff-strategy-list,.kickoff-overview-hero{grid-template-columns:1fr}.kickoff-overview-victor{justify-self:start}}.panel{padding:var(--ui-panel-padding);display:grid;gap:var(--ui-gap-md)}.panel>label,.panel>.detail-grid,.panel>.transport-row,.panel>.module-list{margin-top:0}.panel-copy{margin:0;font-size:.92rem;line-height:1.45}.transport-row{display:flex;gap:var(--ui-gap-sm)}.transport-row>*{flex:1 1 auto}.playback-rate-control{display:grid;gap:var(--ui-gap-xs)}.playback-rate-header{align-items:center;display:flex;justify-content:space-between}.playback-rate-header strong{font-variant-numeric:tabular-nums}.playback-rate-notches{color:var(--ui-muted);display:grid;font-size:.72rem;grid-template-columns:repeat(5,minmax(0,1fr));line-height:1.1;text-align:center}.playback-rate-notches span:first-child{text-align:left}.playback-rate-notches span:last-child{text-align:right}.recording-controls{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-sm)}.camera-presets{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--ui-gap-xs)}.camera-presets button{font-size:var(--ui-control-font-size)}.camera-presets button[data-active=true]{border-color:#8ec5ff6b;background:linear-gradient(180deg,#21476bf5,#0c1b2afa);color:#f3f8fc;box-shadow:inset 0 0 0 1px #8ec5ff1f}.camera-ball-cam{display:grid;gap:var(--ui-gap-xs)}.camera-ball-cam-modes{grid-template-columns:repeat(3,minmax(0,1fr))}.camera-settings-controls{display:grid;gap:var(--ui-gap-sm)}.camera-settings-controls[hidden]{display:none}.camera-setting-label{display:flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-md);font-size:.8rem;color:#9fb3c4}.camera-setting-label strong{color:#e8f0f7;font-variant-numeric:tabular-nums}button,select,input[type=file],input[type=range]{border-radius:var(--ui-radius-md)}button,select,input[type=file]{min-height:var(--ui-control-height);border:1px solid var(--ui-border-subtle);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);background:var(--surface-strong);color:var(--text);font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height)}button{cursor:pointer}select{appearance:none;padding-right:1.35rem;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);background-position:calc(100% - .76rem) 50%,calc(100% - .52rem) 50%;background-repeat:no-repeat;background-size:.24rem .24rem}button:hover:not(:disabled),select:hover:not(:disabled){border-color:var(--ui-border-hover)}button:disabled,select:disabled,input:disabled{opacity:.55;cursor:not-allowed}input[type=range]{width:100%;margin-top:var(--ui-gap-xs);accent-color:var(--blue)}.metric-readout{font-size:.88rem;font-weight:700;font-variant-numeric:tabular-nums}.toggle{display:inline-flex;align-items:center;gap:.4rem;color:#bfd0dd}.detail-grid{margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.55rem .7rem}.detail-grid dt,.detail-grid dd{margin:0}.detail-grid dt{font-size:.68rem;margin-bottom:.12rem}.detail-grid dd{font-size:.84rem;color:var(--text);overflow-wrap:anywhere}.module-groups{display:grid;gap:var(--ui-gap-md)}.module-summary-group{display:grid;gap:var(--ui-gap-xs)}.module-summary-group h3{margin:0;color:#87afd4;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase}.module-list{display:flex;flex-wrap:wrap;gap:.5rem}.mechanics-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.45rem;margin-bottom:.65rem}.mechanics-event-list{display:grid;grid-template-columns:repeat(var(--event-source-columns, 1),minmax(9.5rem,1fr));align-items:stretch}.module-settings{display:grid;gap:.75rem}.module-settings-card{display:grid;gap:.75rem;padding:.85rem .9rem;border-radius:1rem;border:1px solid rgba(255,255,255,.08);background:#ffffff09}.module-settings-subgroup{display:grid;gap:.65rem;padding-top:.15rem;border-top:1px solid rgba(255,255,255,.06)}.module-settings-options{display:grid;gap:.45rem}.module-settings-group-title{margin:0;color:#d7e5ef;font-size:.78rem;font-weight:800}.module-settings-header{display:flex;align-items:start;justify-content:space-between;gap:.8rem}.module-settings-header h3{margin:.1rem 0 0;font-size:.96rem}.module-settings-eyebrow{margin:0;font-size:.66rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#87afd4}.boost-pickup-filter-panel{display:grid;gap:.65rem}.boost-pickup-filter-summary{display:flex;justify-content:end}.boost-pickup-filter-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem 1rem}.boost-pickup-filter-group{display:grid;align-content:start;gap:.35rem;min-width:0}.boost-pickup-filter-group[hidden]{display:none}.boost-pickup-filter-group-wide{grid-column:1 / -1}.boost-pickup-filter-options{display:flex;flex-wrap:wrap;gap:.35rem .8rem;min-width:0}.boost-pickup-filter-options .toggle{min-width:0}.module-summary-item{appearance:none;display:inline-flex;align-items:center;justify-content:space-between;gap:var(--ui-gap-sm);min-height:var(--ui-control-height);padding:var(--ui-control-padding-block) var(--ui-control-padding-inline);border-radius:var(--ui-radius-pill);border:1px solid var(--ui-border-subtle);background:#ffffff08;color:var(--muted);font:inherit;font-size:var(--ui-control-font-size);line-height:var(--ui-control-line-height);cursor:pointer;transition:border-color .14s ease,background-color .14s ease,color .14s ease}.module-summary-item:hover{border-color:var(--ui-border-hover);color:var(--text)}.module-summary-item strong{font-size:.62rem;letter-spacing:.08em;text-transform:uppercase}.module-summary-item[data-active=true]{border-color:#4b94ff38;background:#4b94ff14;color:#dceafb}@media(max-width:1180px){.sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:860px){.shell{padding:0}.sidebar{grid-template-columns:1fr}.panel-heading{display:grid}.detail-grid{grid-template-columns:1fr 1fr}.viewport-panel{min-height:100dvh}}@media(max-width:560px){.detail-grid{grid-template-columns:1fr}.transport-row{flex-direction:column}.floating-window,.stats-window{left:.55rem;right:.55rem;width:auto}}@media(max-width:720px){.viewport-panel:has(.floating-window:not([hidden])) .viewport{inset:0 0 52dvh}.floating-window{position:fixed;inset:auto 0 0;width:100%;max-width:none;height:52dvh;max-height:52dvh;overflow:auto;border-width:1px 0 0 0;border-radius:1rem 1rem 0 0;transform:none;z-index:30}.floating-window .floating-window-header{cursor:default}}.missed-event-body{display:flex;flex-direction:column;gap:.5rem;padding:.6rem .7rem;max-height:50vh;font-size:.8rem}.missed-event-controls{display:flex;align-items:center;gap:.4rem}.missed-event-controls select{flex:1 1 auto}.missed-event-list{list-style:none;margin:0;padding:0;overflow-y:auto;display:flex;flex-direction:column;gap:.25rem}.missed-event-list li{display:flex;align-items:center;justify-content:space-between;gap:.4rem;padding:.2rem .3rem;border-radius:.3rem;background:#1c272ee6}.missed-event-status{margin:0;min-height:1rem;color:#9fadb7}.training-pack-shots{list-style:none;margin:.4rem 0 0;padding:0;overflow-y:auto;max-height:12rem;display:flex;flex-direction:column;gap:.25rem;font-size:.8rem}.training-pack-shots li{display:flex;align-items:center;justify-content:space-between;gap:.4rem;padding:.2rem .3rem;border-radius:.3rem;background:#1c272ee6}.training-pack-status{margin:.4rem 0 0;min-height:1rem;font-size:.8rem;color:#9fadb7}:root{color-scheme:dark;font-family:IBM Plex Sans,Avenir Next,sans-serif;font-size:13px;--surface: rgba(10, 16, 20, .86);--surface-strong: rgba(14, 22, 27, .96);--border: rgba(218, 226, 232, .14);--text: #f2f6f8;--muted: #9fadb7;--blue: #58a6ff;--orange: #f39a37;--green: #65d6ad;--ui-border-subtle: rgba(255, 255, 255, .1);--ui-border-hover: rgba(255, 255, 255, .2);--ui-radius-md: .5rem;--ui-radius-lg: .72rem;background:radial-gradient(circle at 8% 0%,rgba(88,166,255,.16),transparent 28rem),radial-gradient(circle at 95% 12%,rgba(243,154,55,.12),transparent 24rem),linear-gradient(180deg,#080d10,#11181d);color:var(--text)}*,*:before,*:after{box-sizing:border-box}html,body,#app{min-height:100%}body{margin:0}button,select,input{font:inherit}.stats-report{width:min(1380px,calc(100vw - 2rem));margin:0 auto;padding:1rem 0 2rem}.stats-report-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:1rem;align-items:end;padding:1rem 0 .8rem}.stats-report-title h1{margin:0;font-size:clamp(1.55rem,2.6vw,2.7rem);line-height:1;letter-spacing:0}.stats-report-title p{max-width:62rem;margin:.55rem 0 0;color:var(--muted);font-size:.94rem;line-height:1.45}.stats-report-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.5rem}.stats-report-link,.stats-report-file-label,.stats-report-tabs button,.stats-report-jump-nav a{display:inline-flex;align-items:center;justify-content:center;min-height:2.15rem;padding:.48rem .72rem;border:1px solid var(--ui-border-subtle);border-radius:var(--ui-radius-md);background:#10181dd1;color:var(--text);text-decoration:none;cursor:pointer}.stats-report-link:hover,.stats-report-file-label:hover,.stats-report-tabs button:hover,.stats-report-jump-nav a:hover{border-color:var(--ui-border-hover);background:#1c272ef2}.stats-report-file-label input{display:none}.stats-report-status{margin:.25rem 0 1rem;color:#c9d6dd}.stats-report-empty{display:grid;min-height:48dvh;place-items:center;border:1px dashed rgba(255,255,255,.2);border-radius:var(--ui-radius-lg);color:var(--muted);text-align:center}.stats-report-tabs{position:sticky;top:0;z-index:4;display:flex;gap:.45rem;overflow:auto;padding:.65rem 0;background:#080d10d1;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.stats-report-tabs button{flex:0 0 auto;color:#dce8ee}.stats-report-tabs button[data-active=true]{border-color:#65d6ad85;background:#65d6ad24;color:#effff9}.stats-report-page{display:grid;gap:1rem}.stats-report-page-intro{max-width:78rem;padding-top:.35rem}.stats-report-page-intro h2{margin:0;font-size:1.12rem;letter-spacing:0}.stats-report-page-intro p,.stats-report-note,.stats-report-chart-card p{margin:.35rem 0 0;color:var(--muted);line-height:1.45}.stats-report-summary,.stats-report-metric-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.75rem}.stats-report-summary-card,.stats-report-section,.stats-report-chart-card{border:1px solid var(--border);border-radius:var(--ui-radius-lg);background:var(--surface);box-shadow:0 18px 44px #0003}.stats-report-summary-card{min-width:0;padding:.8rem}.stats-report-summary-card span{display:block;overflow:hidden;color:var(--muted);font-size:.72rem;font-weight:800;letter-spacing:.1em;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.stats-report-summary-card strong{display:block;overflow-wrap:anywhere;margin-top:.35rem;font-size:1.18rem}.stats-report-summary-card small{display:block;margin-top:.28rem;color:var(--muted)}.stats-report-charts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.75rem}.stats-report-chart-card{min-width:0;padding:.8rem}.stats-report-chart-card h3{margin:0 0 .75rem;font-size:.92rem;letter-spacing:0}.stats-report-bar-chart{display:grid;gap:.5rem}.stats-report-bar-row{display:grid;grid-template-columns:minmax(5.5rem,10rem) minmax(8rem,1fr) minmax(3rem,auto);gap:.55rem;align-items:center;min-height:1.35rem}.stats-report-bar-label{overflow:hidden;color:#dce8ee;text-overflow:ellipsis;white-space:nowrap}.stats-report-bar-track{position:relative;height:.72rem;overflow:hidden;border-radius:999px;background:#ffffff14}.stats-report-bar-track:before{content:"";position:absolute;inset:0 auto 0 0;width:var(--bar-width);border-radius:inherit;background:var(--bar-color)}.stats-report-pie-chart{display:grid;grid-template-columns:8.5rem minmax(0,1fr);gap:1rem;align-items:center}.stats-report-pie{width:8.5rem;aspect-ratio:1;border:1px solid rgba(255,255,255,.16);border-radius:50%}.stats-report-pie-legend{display:grid;gap:.45rem}.stats-report-pie-legend div{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem;align-items:baseline}.stats-report-pie-legend span:before,.stats-report-stacked-legend span:before{content:"";display:inline-block;width:.58rem;height:.58rem;margin-right:.3rem;border-radius:50%;background:var(--legend-color)}.stats-report-pie-legend span,.stats-report-stacked-legend span{overflow:hidden;color:#dce8ee;text-overflow:ellipsis;white-space:nowrap}.stats-report-stacked-chart{display:grid;gap:.82rem}.stats-report-stacked-row{display:grid;gap:.38rem}.stats-report-stacked-row>strong{overflow:hidden;color:#e5edf1;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.stats-report-stacked-track{display:flex;height:.82rem;overflow:hidden;border-radius:999px;background:#ffffff14}.stats-report-stacked-track span{flex:0 0 var(--segment-width);min-width:0;background:var(--segment-color)}.stats-report-stacked-legend{display:flex;flex-wrap:wrap;gap:.42rem .72rem;color:var(--muted);font-size:.82rem}.stats-report-goal-list{display:grid;gap:1rem}.stats-report-goal-card{overflow:hidden;border:1px solid var(--border);border-left:3px solid rgba(255,255,255,.16);border-radius:var(--ui-radius-lg);background:var(--surface);box-shadow:0 18px 44px #0003}.stats-report-goal-card[data-team=blue]{border-left-color:var(--blue)}.stats-report-goal-card[data-team=orange]{border-left-color:var(--orange)}.stats-report-goal-card>header{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding:.85rem .9rem;border-bottom:1px solid var(--border);background:#ffffff05}.stats-report-goal-heading{min-width:0}.stats-report-goal-card h2,.stats-report-goal-subsection h3{margin:0;letter-spacing:0}.stats-report-goal-card h2{font-size:1rem}.stats-report-goal-heading span{display:block;margin-top:.14rem;overflow:hidden;color:var(--muted);text-overflow:ellipsis;white-space:nowrap}.stats-report-goal-watch{flex:0 0 auto;padding:.34rem .58rem;border:1px solid rgba(101,214,173,.34);border-radius:var(--ui-radius-md);background:#65d6ad24;color:#d7ffef;cursor:pointer;font-size:.82rem;font-weight:800;text-decoration:none}.stats-report-goal-watch:hover{border-color:#65d6ad85;background:#65d6ad38}.stats-report-goal-tags{display:flex;flex-wrap:wrap;gap:.42rem;padding:.7rem .9rem 0}.stats-report-goal-tag{padding:.2rem .48rem;border:1px solid rgba(88,166,255,.24);border-radius:var(--ui-radius-md);background:#58a6ff24;color:#d8ecff;font-size:.78rem;font-weight:800}.stats-report-goal-tag-empty{border-color:#9fadb733;background:#9fadb71f;color:#c8d2d9}.stats-report-detail-list{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:.7rem .9rem;margin:0;padding:.85rem .9rem}.stats-report-detail-item{min-width:0}.stats-report-detail-list dt{color:var(--muted);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.stats-report-detail-list dd{overflow-wrap:anywhere;margin:.22rem 0 0;color:#edf5fa;font-weight:700}.stats-report-goal-subsection{display:grid;gap:.5rem;padding:0 .9rem .9rem}.stats-report-goal-subsection h3{color:#dce8ee;font-size:.88rem}.stats-report-jump-nav{display:flex;flex-wrap:wrap;gap:.45rem}.stats-report-grid{display:grid;gap:1rem}.stats-report-section{overflow:hidden}.stats-report-section header{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding:.85rem .9rem;border-bottom:1px solid var(--border);background:#ffffff05}.stats-report-section h2{margin:0;font-size:1rem;letter-spacing:0}.stats-report-section header span{color:var(--muted)}.stats-report-table-wrap{overflow:auto}.stats-report-table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}.stats-report-table th,.stats-report-table td{padding:.48rem .62rem;border-bottom:1px solid rgba(255,255,255,.07);text-align:right;white-space:nowrap}.stats-report-table th:first-child,.stats-report-table td:first-child{position:sticky;left:0;z-index:1;max-width:20rem;background:var(--surface-strong);text-align:left;white-space:normal}.stats-report-table th{color:#b7c6cf;font-size:.72rem;text-transform:uppercase}@media(max-width:960px){.stats-report-header{grid-template-columns:1fr}.stats-report-actions{justify-content:flex-start}.stats-report-summary,.stats-report-metric-grid,.stats-report-charts{grid-template-columns:1fr}.stats-report-detail-list{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:620px){.stats-report{width:min(100vw - 1rem,1380px)}.stats-report-bar-row,.stats-report-pie-chart{grid-template-columns:1fr}.stats-report-pie{width:min(11rem,54vw)}.stats-report-goal-card>header{display:grid}.stats-report-detail-list{grid-template-columns:1fr}}.replay-review-document,#app.replay-review-root,.replay-review-root{height:auto;min-height:100%;overflow:visible}body.replay-review-document{overflow-y:auto}.replay-review-shell{min-height:100dvh}.replay-review-toolbar{position:fixed;top:.75rem;right:.75rem;z-index:1000;display:flex;align-items:center;gap:.4rem;max-width:min(34rem,calc(100vw - 1.5rem));padding:.35rem;border:1px solid rgba(255,255,255,.14);border-radius:.5rem;background:#080d10c7;color:#f2f6f8;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);box-shadow:0 14px 34px #00000042}.replay-review-status{overflow:hidden;max-width:14rem;padding:0 .35rem;color:#c9d6dd;font-size:.78rem;text-overflow:ellipsis;white-space:nowrap}.replay-review-toolbar button,.replay-review-file{display:inline-flex;align-items:center;justify-content:center;min-height:2rem;padding:.42rem .62rem;border:1px solid rgba(255,255,255,.12);border-radius:.4rem;background:#10181dd6;color:#f2f6f8;cursor:pointer;font:inherit;text-decoration:none}.replay-review-toolbar button:hover,.replay-review-file:hover{border-color:#ffffff38;background:#1c272ef2}.replay-review-toolbar button[data-active=true]{border-color:#65d6ad8c;background:#65d6ad29;color:#effff9}.replay-review-file input,.replay-review-pane[hidden]{display:none}.replay-review-empty{display:grid;min-height:100dvh;place-items:center;padding:4rem 1rem;color:#9fadb7;text-align:center}@media(max-width:720px){.replay-review-toolbar{left:.5rem;right:.5rem}.replay-review-status{flex:1 1 auto;max-width:none}} diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-B06RRC2i.js b/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-N5lUKPt0.js similarity index 74% rename from crates/rocket-sense-server/static/subtr-actor/stats/assets/index-B06RRC2i.js rename to crates/rocket-sense-server/static/subtr-actor/stats/assets/index-N5lUKPt0.js index 5ec87c40..8535b5ec 100644 --- a/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-B06RRC2i.js +++ b/crates/rocket-sense-server/static/subtr-actor/stats/assets/index-N5lUKPt0.js @@ -1,8 +1,8 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))i(s);new MutationObserver(s=>{for(const a of s)if(a.type==="childList")for(const r of a.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&i(r)}).observe(document,{childList:!0,subtree:!0});function t(s){const a={};return s.integrity&&(a.integrity=s.integrity),s.referrerPolicy&&(a.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?a.credentials="include":s.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function i(s){if(s.ep)return;s.ep=!0;const a=t(s);fetch(s.href,a)}})();function Bh(n,e){if(n.frames.length===0)return 0;let t=0,i=n.frames.length-1;for(;t<=i;){const s=Math.floor((t+i)/2),a=n.frames[s]?.time??0;if(ae)i=s-1;else return s}return Math.max(0,t-1)}class eS{_listeners=new Map;on(e,t){let i=this._listeners.get(e);return i||(i=new Set,this._listeners.set(e,i)),i.add(t),this}once(e,t){const i=(...s)=>{this.off(e,i),t(...s)};return this.on(e,i)}off(e,t){const i=this._listeners.get(e);return i?(t?i.delete(t):i.clear(),i.size===0&&this._listeners.delete(e),this):this}removeListener(e,t){return this.off(e,t)}removeAllListeners(e){return e?this._listeners.delete(e):this._listeners.clear(),this}emit(e,...t){const i=this._listeners.get(e);if(!i||i.size===0)return!1;for(const s of[...i])s(...t);return!0}}function Bf(n){return n?{x:n.x,y:n.z,z:n.y}:null}function CC(n){return n?{x:n.x,y:n.z,z:n.y,w:-n.w}:null}function AC(n){return n*100/255}const Ny={Octane:{length:118.0074,width:84.19941,height:36.15907,offsetX:13.87566,offsetZ:20.75499},Dominus:{length:127.9268,width:83.27995,height:31.3,offsetX:9,offsetZ:15.75},Plank:{length:128.8198,width:84.67036,height:29.3944,offsetX:9.00857,offsetZ:12.0942},Breakout:{length:131.4924,width:80.521,height:30.3,offsetX:12.5,offsetZ:11.75},Hybrid:{length:127.0192,width:82.18787,height:34.15907,offsetX:13.87566,offsetZ:20.75499},Merc:{length:120.72,width:76.71,height:41.66,offsetX:11.37566,offsetZ:21.504988}},RC={21:{name:"Backfire",hitbox:"Octane"},22:{name:"Breakout",hitbox:"Breakout"},23:{name:"Octane",hitbox:"Octane"},24:{name:"Paladin",hitbox:"Plank"},25:{name:"Road Hog",hitbox:"Octane"},26:{name:"Gizmo",hitbox:"Octane"},28:{name:"X-Devil",hitbox:"Hybrid"},29:{name:"Hotshot",hitbox:"Dominus"},30:{name:"Merc",hitbox:"Merc"},31:{name:"Venom",hitbox:"Hybrid"},402:{name:"Takumi",hitbox:"Octane"},403:{name:"Dominus",hitbox:"Dominus"},404:{name:"Scarab",hitbox:"Octane"},523:{name:"Zippy",hitbox:"Octane"},597:{name:"DeLorean Time Machine",hitbox:"Dominus"},600:{name:"Ripper",hitbox:"Dominus"},607:{name:"Grog",hitbox:"Octane"},1018:{name:"Dominus GT",hitbox:"Dominus"},1159:{name:"X-Devil Mk2",hitbox:"Hybrid"},1171:{name:"Masamune",hitbox:"Dominus"},1172:{name:"Marauder",hitbox:"Octane"},1286:{name:"Aftershock",hitbox:"Dominus"},1295:{name:"Takumi RX-T",hitbox:"Octane"},1300:{name:"Road Hog XL",hitbox:"Octane"},1317:{name:"Esper",hitbox:"Hybrid"},1416:{name:"Breakout Type-S",hitbox:"Breakout"},1475:{name:"Proteus",hitbox:"Octane"},1478:{name:"Triton",hitbox:"Octane"},1533:{name:"Vulcan",hitbox:"Octane"},1568:{name:"Octane ZSR",hitbox:"Octane"},1603:{name:"Twin Mill III",hitbox:"Plank"},1623:{name:"Bone Shaker",hitbox:"Octane"},1624:{name:"Endo",hitbox:"Hybrid"},1675:{name:"Ice Charger",hitbox:"Dominus"},1689:{name:"Nemesis",hitbox:"Dominus"},1691:{name:"Mantis",hitbox:"Plank"},1856:{name:"Jager 619",hitbox:"Hybrid"},1883:{name:"Imperator DT5",hitbox:"Dominus"},1894:{name:"Samurai",hitbox:"Breakout"},1919:{name:"Centio",hitbox:"Plank"},1932:{name:"Animus GP",hitbox:"Breakout"},2070:{name:"Werewolf",hitbox:"Dominus"},2268:{name:"Fast & Furious Dodge Charger",hitbox:"Dominus"},2269:{name:"Fast & Furious Nissan Skyline",hitbox:"Hybrid"},2665:{name:"The Dark Knight's Tumbler",hitbox:"Octane"},2666:{name:"Batmobile (1989)",hitbox:"Dominus"},2853:{name:"Twinzer",hitbox:"Octane"},2919:{name:"Jurassic Jeep Wrangler",hitbox:"Octane"},2949:{name:"Fast 4WD",hitbox:"Octane"},2950:{name:"MR11",hitbox:"Dominus"},2951:{name:"Gazella GT",hitbox:"Dominus"},3031:{name:"Cyclone",hitbox:"Breakout"},3155:{name:"Maverick",hitbox:"Dominus"},3156:{name:"Maverick G1",hitbox:"Dominus"},3157:{name:"Maverick GXT",hitbox:"Dominus"},3265:{name:"McLaren 570S",hitbox:"Dominus"},3311:{name:"Komodo",hitbox:"Breakout"},3426:{name:"Diestro",hitbox:"Dominus"},3451:{name:"Nimbus",hitbox:"Hybrid"},3582:{name:"Insidio",hitbox:"Hybrid"},3594:{name:"Artemis G1",hitbox:"Plank"},3614:{name:"Artemis",hitbox:"Plank"},3622:{name:"Artemis GXT",hitbox:"Plank"},3702:{name:"Tygris",hitbox:"Hybrid"},3875:{name:"Guardian GXT",hitbox:"Dominus"},3879:{name:"Guardian",hitbox:"Dominus"},3880:{name:"Guardian G1",hitbox:"Dominus"},4014:{name:"K.I.T.T.",hitbox:"Dominus"},4155:{name:"Ecto-1",hitbox:"Dominus"},4268:{name:"Sentinel",hitbox:"Plank"},4284:{name:"Fennec",hitbox:"Octane"},4318:{name:"Mudcat",hitbox:"Octane"},4319:{name:"Mudcat G1",hitbox:"Octane"},4320:{name:"Mudcat GXT",hitbox:"Octane"},4367:{name:"Chikara GXT",hitbox:"Dominus"},4472:{name:"Chikara",hitbox:"Dominus"},4473:{name:"Chikara G1",hitbox:"Dominus"},4745:{name:"Ronin GXT",hitbox:"Dominus"},4770:{name:"Dominus",hitbox:"Dominus"},4780:{name:"Battle Bus",hitbox:"Merc"},4781:{name:"Peregrine TT",hitbox:"Dominus"},4782:{name:"Psyclops",hitbox:"Body_Tritip_Handling"},4861:{name:"Ronin",hitbox:"Dominus"},4864:{name:"Ronin G1",hitbox:"Dominus"},4906:{name:"Harbinger",hitbox:"Octane"},5020:{name:"Outlaw",hitbox:"Octane"},5039:{name:"Harbinger GXT",hitbox:"Octane"},5188:{name:"Scarab",hitbox:"Octane"},5265:{name:"Formula 1 2021",hitbox:"Plank"},5361:{name:"Dingo",hitbox:"Octane"},5470:{name:"R3MX",hitbox:"Hybrid"},5488:{name:"R3MX GXT",hitbox:"Hybrid"},5547:{name:"007's Aston Martin DB5",hitbox:"Octane"},5709:{name:"NASCAR Ford Mustang",hitbox:"Dominus"},5713:{name:"Ford F-150 RLE",hitbox:"Octane"},5773:{name:"NASCAR Toyota Camry",hitbox:"Dominus"},5823:{name:"NASCAR Chevrolet Camaro",hitbox:"Dominus"},5837:{name:"Outlaw GXT",hitbox:"Octane"},5858:{name:"Tyranno",hitbox:"Dominus"},5879:{name:"Fast & Furious Pontiac Fiero",hitbox:"Hybrid"},5951:{name:"Jackal",hitbox:"Octane"},5964:{name:"Lamborghini Huracan STO",hitbox:"Dominus"},5979:{name:"Tyranno GXT",hitbox:"Dominus"},6122:{name:"Masamune",hitbox:"Dominus"},6243:{name:"Nexus",hitbox:"Breakout"},6244:{name:"BMW M240i",hitbox:"Dominus"},6247:{name:"McLaren 765LT",hitbox:"Dominus"},6260:{name:"007's Aston Martin Valhalla",hitbox:"Dominus"},6489:{name:"Nexus SC",hitbox:"Breakout"},6836:{name:"Ford Mustang Shelby GT350R RLE",hitbox:"Dominus"},6939:{name:"Ford Mustang Mach-E RLE",hitbox:"Octane"},7012:{name:"Tesla Cybertruck",hitbox:"Hybrid"},7052:{name:"Formula 1 2022",hitbox:"Plank"},7211:{name:"Mamba",hitbox:"Dominus"},7336:{name:"Nomad",hitbox:"Merc"},7337:{name:"NASCAR Next Gen Chevrolet Camaro",hitbox:"Dominus"},7338:{name:"NASCAR Next Gen Ford Mustang",hitbox:"Dominus"},7341:{name:"NASCAR Next Gen Toyota Camry",hitbox:"Dominus"},7343:{name:"007's Aston Martin DBS",hitbox:"Dominus"},7415:{name:"Batmobile (2022)",hitbox:"Dominus"},7477:{name:"Nomad GXT",hitbox:"Merc"},7512:{name:"Lamborghini Countach LPI 800-4",hitbox:"Dominus"},7532:{name:"Maestro",hitbox:"Dominus"},7593:{name:"Nissan Z Performance",hitbox:"Dominus"},7651:{name:"Redline",hitbox:"Breakout"},7696:{name:"Whiplash",hitbox:"Breakout"},7772:{name:"Ferrari 296 GTB",hitbox:"Dominus"},7815:{name:"Ford Bronco Raptor RLE",hitbox:"Merc"},7890:{name:"Fuse",hitbox:"Breakout"},7901:{name:"Fast & Furious Mazda RX-7",hitbox:"Breakout"},7947:{name:"Honda Civic Type R",hitbox:"Octane"},7948:{name:"Honda Civic Type R-LE",hitbox:"Octane"},7979:{name:"Stampede",hitbox:"Merc"},8006:{name:"Mako",hitbox:"Breakout"},8360:{name:"Emperor",hitbox:"Breakout"},8361:{name:"Emperor II",hitbox:"Breakout"},8383:{name:"Xentari",hitbox:"Octane"},8454:{name:"Admiral",hitbox:"Dominus"},8524:{name:"Bugatti Centodieci",hitbox:"Plank"},8565:{name:"Emperor II: Frozen",hitbox:"Breakout"},8566:{name:"Emperor II: Scorched",hitbox:"Breakout"},8669:{name:"Ace",hitbox:"Breakout"},8806:{name:"Volkswagen Golf GTI",hitbox:"Octane"},8807:{name:"Volkswagen Golf GTI RLE",hitbox:"Octane"},9053:{name:"Fast & Furious Dodge Charger SRT Hellcat",hitbox:"Dominus"},9084:{name:"Nissan Silvia",hitbox:"Hybrid"},9085:{name:"Nissan Silvia RLE",hitbox:"Hybrid"},9088:{name:"Porsche 911 Turbo",hitbox:"Dominus"},9089:{name:"Porsche 911 Turbo RLE",hitbox:"Dominus"},9140:{name:"Bumblebee",hitbox:"Dominus"},9357:{name:"Diesel",hitbox:"Breakout"},9388:{name:"Lightning McQueen",hitbox:"Dominus"},9427:{name:"Primo",hitbox:"Hybrid"},9894:{name:"Scorpion",hitbox:"Dominus"},10044:{name:"Beskar",hitbox:"Hybrid"},10094:{name:"Ford Mustang GTD",hitbox:"Dominus"},10440:{name:"Nissan Fairlady Z",hitbox:"Dominus"},10441:{name:"Nissan Fairlady Z RLE",hitbox:"Dominus"},10689:{name:"Behemoth",hitbox:"Merc"},10694:{name:"Lockjaw",hitbox:"Dominus"},10697:{name:"The Incredibile",hitbox:"Breakout"},10698:{name:"1966 Cadillac DeVille",hitbox:"Breakout"},10805:{name:"Nissan Skyline GT-R (R32)",hitbox:"Hybrid"},10817:{name:"Quadra Turbo-R",hitbox:"Breakout"},10822:{name:"McLaren Senna",hitbox:"Breakout"},10896:{name:"BMW 1 Series",hitbox:"Octane"},10897:{name:"BMW 1 Series RLE",hitbox:"Octane"},10900:{name:"Shokunin",hitbox:"Octane"},10901:{name:"Shokunin GXT",hitbox:"Octane"},11016:{name:"Porsche 911 GT3 RS",hitbox:"Dominus"},11038:{name:"Revolver",hitbox:"Breakout"},11095:{name:"Dodge Charger Daytona Scat Pack",hitbox:"Dominus"},11098:{name:"Turtle Van",hitbox:"Merc"},11138:{name:"Void Burn",hitbox:"Hybrid"},11141:{name:"Lamborghini Urus SE",hitbox:"Hybrid"},11314:{name:"Jeep Wrangler Rubicon",hitbox:"Merc"},11315:{name:"Ford Mustang Shelby GT500",hitbox:"Dominus"},11336:{name:"Dominus: Neon",hitbox:"Dominus"},11379:{name:"Ram 1500 RHO",hitbox:"Hybrid"},11394:{name:"Azura",hitbox:"Breakout"},11505:{name:"Breakout X",hitbox:"Breakout"},11534:{name:"BMW M3 (E30)",hitbox:"Dominus"},11603:{name:"Fennec ZR-F",hitbox:"Octane"},11677:{name:"Chevrolet Corvette ZR1",hitbox:"Breakout"},11736:{name:"Recoil AV",hitbox:"Merc"},11800:{name:"Megastar",hitbox:"Breakout"},11905:{name:"The Mystery Machine",hitbox:"Merc"},11932:{name:"Hearse",hitbox:"Hybrid"},11933:{name:"Porsche 918 Spyder",hitbox:"Breakout"},11941:{name:"Mercedes-AMG GT 63 S",hitbox:"Dominus"},11949:{name:"Pontiac Firebird",hitbox:"Breakout"},11950:{name:"Chevrolet Astro",hitbox:"Merc"},12142:{name:"Homer's Car",hitbox:"Dominus"},12173:{name:"Ferrari F40",hitbox:"Breakout"}},PC=RC;function tS(n){const e=PC[String(n)];return e?{name:e.name,hitboxType:e.hitbox}:null}function IC(n){if(!n)return null;const e={fov:n.fov,height:n.height,angle:n.angle,distance:n.distance,stiffness:n.stiffness,swivelSpeed:n.swivel_speed};return n.transition_speed!=null&&(e.transitionSpeed=n.transition_speed),e}const LC=2200,kC=!0,DC=!1,OC=.15,FC=10,NC=.1,UC=10,BC=.1,zC=.15,HC=10;function el(n,e){if(n.length===0)return null;let t=0,i=n.length-1;if(e<=n[0].time)return n[0];if(e>=n[i].time)return n[i];for(;t>1;n[s].time<=e?t=s:i=s-1}return n[t]}class VC{position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;visible=!0}class GC{constructor(e,t,i){this.isBig=e,this.position=t,this.events=i}isAvailable=!0}class $C extends eS{constructor(e,t,i,s,a,r=null){super(),this.id=e,this.name=t,this.team=i,this.carName=s,this.hitboxType=a,this.cameraSettings=r}position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;steer=0;boost=0;isBoosting=!1;isSupersonic=!1;isKickoffReset=!1;isVisible=!0;isBallCam=!0}class nS extends eS{constructor(e,t={}){super(),this.raw=e,this.options=t,this._compile()}duration=0;playerList=[];frameTimes=[];rawStartTime=0;ball=new VC;players=new Map;boostPads=new Map;_currentTime=0;_ballTimeline=[];_playerTimelines={};_ballFlags=[];_playerFlags={};_playerCameraEvents={};_teams={};_timelineCompaction=null;_compile(){const e=this.raw.frame_data,t=this.raw.meta,i=e.metadata_frames,s=i[0]?.time??0;this.rawStartTime=s;const a=l=>Math.max(0,l-s);this.duration=i.length?a(i[i.length-1].time):0,this.frameTimes=i.map(l=>a(l.time));const r=new Map;t.team_zero.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:0})),t.team_one.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:1})),e.ball_data.frames.forEach((l,c)=>{if(l==="Empty"||!("Data"in l))return;const u=this._rbToKeyframe(l.Data.rigid_body,a(i[c]?.time??s),c);u&&this._ballTimeline.push(u)}),e.players.forEach(([l,c])=>{const u=this._idKey(l),d=r.get(u);let h=d?.info.name??null,f=d?.team??0;if(!h){for(const S of c.frames)if(S!=="Empty"&&"Data"in S&&S.Data.player_name){h=S.Data.player_name,S.Data.is_team_0!=null&&(f=S.Data.is_team_0?0:1);break}}h||(h=`Player_${u}`);const p=d?.info,g=p?.car_body_id!=null?tS(p.car_body_id):null,_=p?.car_body_name??g?.name??"Octane",m=p?.car_hitbox_family??g?.hitboxType??"Octane",v=[],y=[];c.frames.forEach((S,x)=>{const M=a(i[x]?.time??s);if(S==="Empty"||!("Data"in S))return;const C=this._rbToKeyframe(S.Data.rigid_body,M,x);C&&v.push(C);const w=S.Data.input?.steer;y.push({time:M,boost:AC(S.Data.boost_amount??0),isBoosting:!!S.Data.boost_active,present:!0,steer:w==null?0:Math.max(-1,Math.min(1,(w-128)/128))})});const b=IC(p?.camera_settings);this._playerTimelines[h]=v,this._playerFlags[h]=y,this._teams[h]=f,this.playerList.push({id:u,name:h,team:f,carName:_,hitboxType:m,cameraSettings:b}),this.players.set(h,new $C(u,h,f,_,m,b))});const o=new Map;this.playerList.forEach(l=>o.set(l.id,l.name));for(const[l,c]of this.raw.player_camera_events??[]){const u=o.get(this._idKey(l));u&&(this._playerCameraEvents[u]=c.map(d=>({time:a(i[d.frame]?.time??s),ballCam:d.ball_cam_active})))}this._preprocessMotionTimelines(),this._compileBoostPads(),this.seek(0)}_timelineProcessingOptions(){return{motionSmoothing:this.options.motionSmoothing??kC,smoothingBlendFactor:this.options.smoothingBlendFactor??OC,smoothingAnchorInterval:this.options.smoothingAnchorInterval??FC,timelineCompaction:this.options.timelineCompaction??DC,disableFrameFiltering:this.options.disableFrameFiltering??!1}}_preprocessMotionTimelines(){const e=this._timelineProcessingOptions();e.motionSmoothing&&this._applyVelocityBasedPositionCorrection(e),e.timelineCompaction&&this._applyTimelineCompaction(),e.disableFrameFiltering||this._filterInconsistentFrames()}_applyTimelineCompaction(){const e=this._buildTimelineCompaction();!e||e.gaps.length===0&&e.prematchEndTime===null||(this._timelineCompaction=e,this._ballTimeline=this._compactTimeline(this._ballTimeline,e),Object.entries(this._playerTimelines).forEach(([t,i])=>{this._playerTimelines[t]=this._compactTimeline(i,e)}),Object.entries(this._playerFlags).forEach(([t,i])=>{this._playerFlags[t]=this._compactTimeline(i,e)}),this.frameTimes=this.frameTimes.map(t=>this._compactTime(t,e)),this.duration=e.compactedDuration)}_buildTimelineCompaction(){if(this.frameTimes.length===0)return null;const e=this._detectPostGoalTimeGaps(),t=this._detectFirstKickoffGoTime(),i=t==null?null:tl(t,e),a=e.reduce((r,o)=>r+o.duration,0)+(i??0);return a<=0?null:{gaps:e,prematchEndTime:i,removedDuration:a,compactedDuration:Math.max(0,this.duration-a)}}_detectPostGoalTimeGaps(){const e=[];for(const t of this.raw.goal_events??[]){const i=t.frame;if(!Number.isInteger(i)||i<0||i>=this.frameTimes.length)continue;const s=this.frameTimes[i];for(let a=i+1;a10)break;const l=o-r;if(l>.3){e.push({beforeFrame:a-1,afterFrame:a,beforeTime:r,afterTime:o,duration:l});break}}}return e}_detectFirstKickoffGoTime(){const e=this.raw.frame_data.metadata_frames;let t=!1;for(let s=0;s0&&(t=!0),t&&a===0)return this.frameTimes[s]??null}const i=e.findIndex(s=>s.replicated_game_state_name===54);return i===-1?null:this.frameTimes[i]??null}_compactTimeline(e,t){const i=this._remapReplayGaps(e,t.gaps);return t.prematchEndTime===null?i:this._remapPrematch(i,t.prematchEndTime)}_remapReplayGaps(e,t){if(t.length===0)return e;const i=[];t.forEach((a,r)=>{const o=e.find(l=>l.time>=a.afterTime);o&&i.push({...o,time:tl(a.afterTime,t.slice(0,r+1))})});const s=e.filter(a=>!zy(a.time,t)).map(a=>({...a,time:tl(a.time,t)}));for(const a of i){if(s.some(o=>Math.abs(o.time-a.time)<.001))continue;let r=s.findIndex(o=>o.time>a.time);r===-1&&(r=s.length),s.splice(r,0,a)}return s}_remapPrematch(e,t){let i=null;for(const a of e)if(a.timea.time>=t).map(a=>({...a,time:a.time-t}));return i&&(s.length===0||s[0].time>.001)&&s.unshift({...i,time:0}),s}_compactTime(e,t){const i=tl(e,t.gaps);return t.prematchEndTime===null?i:Math.max(0,i-t.prematchEndTime)}_applyVelocityBasedPositionCorrection(e){const t=i=>{if(i.length<3)return;let s=0;for(;s=i.length-1)return;let a={...i[s].position};for(let r=s+1;rNC){a={...l.position};continue}if(By(a,l.position)>UC){a={...l.position};continue}const u={x:(o.velocity.x+l.velocity.x)/2,y:(o.velocity.y+l.velocity.y)/2,z:(o.velocity.z+l.velocity.z)/2},d={x:a.x+u.x*c,y:a.y+u.y*c,z:a.z+u.z*c},h=(r-s)%e.smoothingAnchorInterval===0?.5:e.smoothingBlendFactor;a={x:d.x*(1-h)+l.position.x*h,y:d.y*(1-h)+l.position.y*h,z:d.z*(1-h)+l.position.z*h},l.position={...a}}};t(this._ballTimeline),Object.values(this._playerTimelines).forEach(t)}_filterInconsistentFrames(){this._ballTimeline=this._filterInconsistentTimeline(this._ballTimeline),Object.entries(this._playerTimelines).forEach(([e,t])=>{this._playerTimelines[e]=this._filterInconsistentTimeline(t)})}_filterInconsistentTimeline(e){if(e.length<2)return e;const t=[e[0]];let i=0;for(let s=1;s.001){const u=o*c,d=By(r.position,a.position),h=Math.abs(d-u)/u;if(Number.isFinite(h)&&h>zC)continue}}t.push(a),i=s}return t}_compileBoostPads(){const e=new Map;(this.raw.boost_pad_events??[]).forEach(t=>{const i=t.kind==="Available"?!0:t.kind&&typeof t.kind=="object"&&"PickedUp"in t.kind?!1:null;if(i===null)return;const s=Math.max(0,t.time-this.rawStartTime);if(this._timelineCompaction&&this._isRemovedByTimelineCompaction(s))return;const a=this._timelineCompaction?this._compactTime(s,this._timelineCompaction):s,r=e.get(t.pad_id);r?r.push({time:a,available:i}):e.set(t.pad_id,[{time:a,available:i}])}),(this.raw.boost_pads??[]).forEach(t=>{const i=(t.pad_id?e.get(t.pad_id):void 0)??[];i.sort((s,a)=>s.time-a.time),this.boostPads.set(t.index,new GC(t.size==="Big",t.position,i))})}_rbToKeyframe(e,t,i){const s=Bf(e.location);return s?{time:t,frame:i,position:s,rotation:CC(e.rotation),velocity:Bf(e.linear_velocity)??{x:0,y:0,z:0},angularVelocity:Bf(e.angular_velocity),sleeping:!!e.sleeping}:null}_isRemovedByTimelineCompaction(e){const t=this._timelineCompaction;if(!t)return!1;if(zy(e,t.gaps))return!0;const i=tl(e,t.gaps);return t.prematchEndTime!==null&&i=LC}const r=el(this._playerFlags[i]??[],e);r&&(s.boost=r.boost,s.isBoosting=r.isBoosting,s.steer=r.steer);const o=el(this._playerCameraEvents[i]??[],e);o&&o.ballCam!=null&&(s.isBallCam=o.ballCam);const l=this._playerTimelines[i]??[];s.isVisible=l.length>0&&e>=l[0].time-.001&&e<=l[l.length-1].time+1}for(const i of this.boostPads.values()){if(i.events.length===0)continue;const s=el(i.events,e);i.isAvailable=s&&s.time<=e?s.available:!0}}frameIndexAt(e){const t=this.frameTimes;if(t.length===0||e<=t[0])return 0;let i=0,s=t.length-1;if(e>=t[s])return s;for(;i>1;t[a]<=e?i=a:s=a-1}return i}getBall(){return this.ball}getPlayer(e){return this.players.get(e)}getPlayerById(e){for(const t of this.players.values())if(t.id===e)return t}getAllPlayers(){return Array.from(this.players.values())}getPlayerTeams(){return{...this._teams}}getGameTimeMap(){return[]}getCountdownEvents(){return[]}getPlayerStatsTimelines(){return{}}getGameEventTimeline(){return[]}getAdvancedStats(){return null}getEvents(){return[]}getEventsInRange(){return[]}getTextOverlaysAt(){return[]}getGamePhaseAt(){return null}}function Uy(n){return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)}function By(n,e){const t=e.x-n.x,i=e.y-n.y,s=e.z-n.z;return Math.sqrt(t*t+i*i+s*s)}function tl(n,e){let t=0;for(const i of e){if(n=i.afterTime){t+=i.duration;continue}return i.beforeTime-t}return n-t}function zy(n,e){return e.some(t=>n>t.beforeTime&&n>8&255]+Cn[n>>16&255]+Cn[n>>24&255]+"-"+Cn[e&255]+Cn[e>>8&255]+"-"+Cn[e>>16&15|64]+Cn[e>>24&255]+"-"+Cn[t&63|128]+Cn[t>>8&255]+"-"+Cn[t>>16&255]+Cn[t>>24&255]+Cn[i&255]+Cn[i>>8&255]+Cn[i>>16&255]+Cn[i>>24&255]).toLowerCase()}function Je(n,e,t){return Math.max(e,Math.min(t,n))}function Sg(n,e){return(n%e+e)%e}function EA(n,e,t,i,s){return i+(n-e)*(s-i)/(t-e)}function CA(n,e,t){return n!==e?(t-n)/(e-n):0}function Wl(n,e,t){return(1-t)*n+t*e}function AA(n,e,t,i){return Wl(n,e,1-Math.exp(-t*i))}function RA(n,e=1){return e-Math.abs(Sg(n,e*2)-e)}function PA(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function IA(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function LA(n,e){return n+Math.floor(Math.random()*(e-n+1))}function kA(n,e){return n+Math.random()*(e-n)}function DA(n){return n*(.5-Math.random())}function OA(n){n!==void 0&&(Hy=n);let e=Hy+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function FA(n){return n*dr}function NA(n){return n*Oo}function UA(n){return(n&n-1)===0&&n!==0}function BA(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function zA(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function HA(n,e,t,i,s){const a=Math.cos,r=Math.sin,o=a(t/2),l=r(t/2),c=a((e+i)/2),u=r((e+i)/2),d=a((e-i)/2),h=r((e-i)/2),f=a((i-e)/2),p=r((i-e)/2);switch(s){case"XYX":n.set(o*u,l*d,l*h,o*c);break;case"YZY":n.set(l*h,o*u,l*d,o*c);break;case"ZXZ":n.set(l*d,l*h,o*u,o*c);break;case"XZX":n.set(o*u,l*p,l*f,o*c);break;case"YXY":n.set(l*f,o*u,l*p,o*c);break;case"ZYZ":n.set(l*p,l*f,o*u,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}}function $n(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function dt(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}const bt={DEG2RAD:dr,RAD2DEG:Oo,generateUUID:bi,clamp:Je,euclideanModulo:Sg,mapLinear:EA,inverseLerp:CA,lerp:Wl,damp:AA,pingpong:RA,smoothstep:PA,smootherstep:IA,randInt:LA,randFloat:kA,randFloatSpread:DA,seededRandom:OA,degToRad:FA,radToDeg:NA,isPowerOfTwo:UA,ceilPowerOfTwo:BA,floorPowerOfTwo:zA,setQuaternionFromProperEuler:HA,normalize:dt,denormalize:$n};class ne{constructor(e=0,t=0){ne.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6],this.y=s[1]*t+s[4]*i+s[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Je(this.x,e.x,t.x),this.y=Je(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Je(this.x,e,t),this.y=Je(this.y,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Je(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Je(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),s=Math.sin(t),a=this.x-e.x,r=this.y-e.y;return this.x=a*i-r*s+e.x,this.y=a*s+r*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class ht{constructor(e=0,t=0,i=0,s=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=s}static slerpFlat(e,t,i,s,a,r,o){let l=i[s+0],c=i[s+1],u=i[s+2],d=i[s+3];const h=a[r+0],f=a[r+1],p=a[r+2],g=a[r+3];if(o===0){e[t+0]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d;return}if(o===1){e[t+0]=h,e[t+1]=f,e[t+2]=p,e[t+3]=g;return}if(d!==g||l!==h||c!==f||u!==p){let _=1-o;const m=l*h+c*f+u*p+d*g,v=m>=0?1:-1,y=1-m*m;if(y>Number.EPSILON){const S=Math.sqrt(y),x=Math.atan2(S,m*v);_=Math.sin(_*x)/S,o=Math.sin(o*x)/S}const b=o*v;if(l=l*_+h*b,c=c*_+f*b,u=u*_+p*b,d=d*_+g*b,_===1-o){const S=1/Math.sqrt(l*l+c*c+u*u+d*d);l*=S,c*=S,u*=S,d*=S}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,s,a,r){const o=i[s],l=i[s+1],c=i[s+2],u=i[s+3],d=a[r],h=a[r+1],f=a[r+2],p=a[r+3];return e[t]=o*p+u*d+l*f-c*h,e[t+1]=l*p+u*h+c*d-o*f,e[t+2]=c*p+u*f+o*h-l*d,e[t+3]=u*p-o*d-l*h-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,s){return this._x=e,this._y=t,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const i=e._x,s=e._y,a=e._z,r=e._order,o=Math.cos,l=Math.sin,c=o(i/2),u=o(s/2),d=o(a/2),h=l(i/2),f=l(s/2),p=l(a/2);switch(r){case"XYZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"YXZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"ZXY":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"ZYX":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"YZX":this._x=h*u*d+c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d-h*f*p;break;case"XZY":this._x=h*u*d-c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d+h*f*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+r)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,s=Math.sin(i);return this._x=e.x*s,this._y=e.y*s,this._z=e.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],s=t[4],a=t[8],r=t[1],o=t[5],l=t[9],c=t[2],u=t[6],d=t[10],h=i+o+d;if(h>0){const f=.5/Math.sqrt(h+1);this._w=.25/f,this._x=(u-l)*f,this._y=(a-c)*f,this._z=(r-s)*f}else if(i>o&&i>d){const f=2*Math.sqrt(1+i-o-d);this._w=(u-l)/f,this._x=.25*f,this._y=(s+r)/f,this._z=(a+c)/f}else if(o>d){const f=2*Math.sqrt(1+o-i-d);this._w=(a-c)/f,this._x=(s+r)/f,this._y=.25*f,this._z=(l+u)/f}else{const f=2*Math.sqrt(1+d-i-o);this._w=(r-s)/f,this._x=(a+c)/f,this._y=(l+u)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Je(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const s=Math.min(1,t/i);return this.slerp(e,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,s=e._y,a=e._z,r=e._w,o=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+r*o+s*c-a*l,this._y=s*u+r*l+a*o-i*c,this._z=a*u+r*c+i*l-s*o,this._w=r*u-i*o-s*l-a*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);const i=this._x,s=this._y,a=this._z,r=this._w;let o=r*e._w+i*e._x+s*e._y+a*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=r,this._x=i,this._y=s,this._z=a,this;const l=1-o*o;if(l<=Number.EPSILON){const f=1-t;return this._w=f*r+t*this._w,this._x=f*i+t*this._x,this._y=f*s+t*this._y,this._z=f*a+t*this._z,this.normalize(),this}const c=Math.sqrt(l),u=Math.atan2(c,o),d=Math.sin((1-t)*u)/c,h=Math.sin(t*u)/c;return this._w=r*d+this._w*h,this._x=i*d+this._x*h,this._y=s*d+this._y*h,this._z=a*d+this._z*h,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),a=Math.sqrt(i);return this.set(s*Math.sin(e),s*Math.cos(e),a*Math.sin(t),a*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class T{constructor(e=0,t=0,i=0){T.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Vy.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Vy.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[3]*i+a[6]*s,this.y=a[1]*t+a[4]*i+a[7]*s,this.z=a[2]*t+a[5]*i+a[8]*s,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=e.elements,r=1/(a[3]*t+a[7]*i+a[11]*s+a[15]);return this.x=(a[0]*t+a[4]*i+a[8]*s+a[12])*r,this.y=(a[1]*t+a[5]*i+a[9]*s+a[13])*r,this.z=(a[2]*t+a[6]*i+a[10]*s+a[14])*r,this}applyQuaternion(e){const t=this.x,i=this.y,s=this.z,a=e.x,r=e.y,o=e.z,l=e.w,c=2*(r*s-o*i),u=2*(o*t-a*s),d=2*(a*i-r*t);return this.x=t+l*c+r*d-o*u,this.y=i+l*u+o*c-a*d,this.z=s+l*d+a*u-r*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*s,this.y=a[1]*t+a[5]*i+a[9]*s,this.z=a[2]*t+a[6]*i+a[10]*s,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Je(this.x,e.x,t.x),this.y=Je(this.y,e.y,t.y),this.z=Je(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Je(this.x,e,t),this.y=Je(this.y,e,t),this.z=Je(this.z,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Je(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,s=e.y,a=e.z,r=t.x,o=t.y,l=t.z;return this.x=s*l-a*o,this.y=a*r-i*l,this.z=i*o-s*r,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return zf.copy(this).projectOnVector(e),this.sub(zf)}reflect(e){return this.sub(zf.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Je(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,s=this.z-e.z;return t*t+i*i+s*s}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const s=Math.sin(t)*e;return this.x=s*Math.sin(i),this.y=Math.cos(t)*e,this.z=s*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),s=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=s,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const zf=new T,Vy=new ht;class at{constructor(e,t,i,s,a,r,o,l,c){at.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c)}set(e,t,i,s,a,r,o,l,c){const u=this.elements;return u[0]=e,u[1]=s,u[2]=o,u[3]=t,u[4]=a,u[5]=l,u[6]=i,u[7]=r,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[3],l=i[6],c=i[1],u=i[4],d=i[7],h=i[2],f=i[5],p=i[8],g=s[0],_=s[3],m=s[6],v=s[1],y=s[4],b=s[7],S=s[2],x=s[5],M=s[8];return a[0]=r*g+o*v+l*S,a[3]=r*_+o*y+l*x,a[6]=r*m+o*b+l*M,a[1]=c*g+u*v+d*S,a[4]=c*_+u*y+d*x,a[7]=c*m+u*b+d*M,a[2]=h*g+f*v+p*S,a[5]=h*_+f*y+p*x,a[8]=h*m+f*b+p*M,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8];return t*r*u-t*o*c-i*a*u+i*o*l+s*a*c-s*r*l}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=u*r-o*c,h=o*l-u*a,f=c*a-r*l,p=t*d+i*h+s*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const g=1/p;return e[0]=d*g,e[1]=(s*c-u*i)*g,e[2]=(o*i-s*r)*g,e[3]=h*g,e[4]=(u*t-s*l)*g,e[5]=(s*a-o*t)*g,e[6]=f*g,e[7]=(i*l-c*t)*g,e[8]=(r*t-i*a)*g,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,s,a,r,o){const l=Math.cos(a),c=Math.sin(a);return this.set(i*l,i*c,-i*(l*r+c*o)+r+e,-s*c,s*l,-s*(-c*r+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(Hf.makeScale(e,t)),this}rotate(e){return this.premultiply(Hf.makeRotation(-e)),this}translate(e,t){return this.premultiply(Hf.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<9;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}}const Hf=new at;function $S(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}const VA={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function ro(n,e){return new VA[n](e)}function rc(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function WS(){const n=rc("canvas");return n.style.display="block",n}const Gy={};function oc(n){n in Gy||(Gy[n]=!0,console.warn(n))}function GA(n,e,t){return new Promise(function(i,s){function a(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:s();break;case n.TIMEOUT_EXPIRED:setTimeout(a,t);break;default:i()}}setTimeout(a,t)})}const $y=new at().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Wy=new at().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function $A(){const n={enabled:!0,workingColorSpace:wn,spaces:{},convert:function(s,a,r){return this.enabled===!1||a===r||!a||!r||(this.spaces[a].transfer===It&&(s.r=Gs(s.r),s.g=Gs(s.g),s.b=Gs(s.b)),this.spaces[a].primaries!==this.spaces[r].primaries&&(s.applyMatrix3(this.spaces[a].toXYZ),s.applyMatrix3(this.spaces[r].fromXYZ)),this.spaces[r].transfer===It&&(s.r=fo(s.r),s.g=fo(s.g),s.b=fo(s.b))),s},workingToColorSpace:function(s,a){return this.convert(s,this.workingColorSpace,a)},colorSpaceToWorking:function(s,a){return this.convert(s,a,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===Bs?sc:this.spaces[s].transfer},getToneMappingMode:function(s){return this.spaces[s].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(s,a=this.workingColorSpace){return s.fromArray(this.spaces[a].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,a,r){return s.copy(this.spaces[a].toXYZ).multiply(this.spaces[r].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(s,a){return oc("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(s,a)},toWorkingColorSpace:function(s,a){return oc("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(s,a)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[wn]:{primaries:e,whitePoint:i,transfer:sc,toXYZ:$y,fromXYZ:Wy,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:yt},outputColorSpaceConfig:{drawingBufferColorSpace:yt}},[yt]:{primaries:e,whitePoint:i,transfer:It,toXYZ:$y,fromXYZ:Wy,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:yt}}}),n}const rt=$A();function Gs(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function fo(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}let Ar;class XS{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{Ar===void 0&&(Ar=rc("canvas")),Ar.width=e.width,Ar.height=e.height;const s=Ar.getContext("2d");e instanceof ImageData?s.putImageData(e,0,0):s.drawImage(e,0,0,e.width,e.height),i=Ar}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=rc("canvas");t.width=e.width,t.height=e.height;const i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);const s=i.getImageData(0,0,e.width,e.height),a=s.data;for(let r=0;r1),this.pmremVersion=0}get width(){return this.source.getSize(Gf).x}get height(){return this.source.getSize(Gf).y}get depth(){return this.source.getSize(Gf).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Texture.setValues(): property '${t}' does not exist.`);continue}s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==Hh)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case xs:e.x=e.x-Math.floor(e.x);break;case Wn:e.x=e.x<0?0:1;break;case Ao:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case xs:e.y=e.y-Math.floor(e.y);break;case Wn:e.y=e.y<0?0:1;break;case Ao:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}}zt.DEFAULT_IMAGE=null;zt.DEFAULT_MAPPING=Hh;zt.DEFAULT_ANISOTROPY=1;class Ye{constructor(e=0,t=0,i=0,s=1){Ye.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=s}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=this.w,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*s+r[12]*a,this.y=r[1]*t+r[5]*i+r[9]*s+r[13]*a,this.z=r[2]*t+r[6]*i+r[10]*s+r[14]*a,this.w=r[3]*t+r[7]*i+r[11]*s+r[15]*a,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,s,a;const l=e.elements,c=l[0],u=l[4],d=l[8],h=l[1],f=l[5],p=l[9],g=l[2],_=l[6],m=l[10];if(Math.abs(u-h)<.01&&Math.abs(d-g)<.01&&Math.abs(p-_)<.01){if(Math.abs(u+h)<.1&&Math.abs(d+g)<.1&&Math.abs(p+_)<.1&&Math.abs(c+f+m-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const y=(c+1)/2,b=(f+1)/2,S=(m+1)/2,x=(u+h)/4,M=(d+g)/4,C=(p+_)/4;return y>b&&y>S?y<.01?(i=0,s=.707106781,a=.707106781):(i=Math.sqrt(y),s=x/i,a=M/i):b>S?b<.01?(i=.707106781,s=0,a=.707106781):(s=Math.sqrt(b),i=x/s,a=C/s):S<.01?(i=.707106781,s=.707106781,a=0):(a=Math.sqrt(S),i=M/a,s=C/a),this.set(i,s,a,t),this}let v=Math.sqrt((_-p)*(_-p)+(d-g)*(d-g)+(h-u)*(h-u));return Math.abs(v)<.001&&(v=1),this.x=(_-p)/v,this.y=(d-g)/v,this.z=(h-u)/v,this.w=Math.acos((c+f+m-1)/2),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Je(this.x,e.x,t.x),this.y=Je(this.y,e.y,t.y),this.z=Je(this.z,e.z,t.z),this.w=Je(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Je(this.x,e,t),this.y=Je(this.y,e,t),this.z=Je(this.z,e,t),this.w=Je(this.w,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Je(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class Tg extends Ts{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Gt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new Ye(0,0,e,t),this.scissorTest=!1,this.viewport=new Ye(0,0,e,t);const s={width:e,height:t,depth:i.depth},a=new zt(s);this.textures=[];const r=i.count;for(let o=0;o1;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Ni),Ni.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(nl),Nc.subVectors(this.max,nl),Rr.subVectors(e.a,nl),Pr.subVectors(e.b,nl),Ir.subVectors(e.c,nl),js.subVectors(Pr,Rr),Zs.subVectors(Ir,Pr),Ma.subVectors(Rr,Ir);let t=[0,-js.z,js.y,0,-Zs.z,Zs.y,0,-Ma.z,Ma.y,js.z,0,-js.x,Zs.z,0,-Zs.x,Ma.z,0,-Ma.x,-js.y,js.x,0,-Zs.y,Zs.x,0,-Ma.y,Ma.x,0];return!$f(t,Rr,Pr,Ir,Nc)||(t=[1,0,0,0,1,0,0,0,1],!$f(t,Rr,Pr,Ir,Nc))?!1:(Uc.crossVectors(js,Zs),t=[Uc.x,Uc.y,Uc.z],$f(t,Rr,Pr,Ir,Nc))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ni).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ni).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Es[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Es[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Es[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Es[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Es[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Es[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Es[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Es[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Es),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}}const Es=[new T,new T,new T,new T,new T,new T,new T,new T],Ni=new T,Fc=new bn,Rr=new T,Pr=new T,Ir=new T,js=new T,Zs=new T,Ma=new T,nl=new T,Nc=new T,Uc=new T,Ea=new T;function $f(n,e,t,i,s){for(let a=0,r=n.length-3;a<=r;a+=3){Ea.fromArray(n,a);const o=s.x*Math.abs(Ea.x)+s.y*Math.abs(Ea.y)+s.z*Math.abs(Ea.z),l=e.dot(Ea),c=t.dot(Ea),u=i.dot(Ea);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>o)return!1}return!0}const YA=new bn,il=new T,Wf=new T;class xn{constructor(e=new T,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const i=this.center;t!==void 0?i.copy(t):YA.setFromPoints(e).getCenter(i);let s=0;for(let a=0,r=e.length;athis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;il.subVectors(e,this.center);const t=il.lengthSq();if(t>this.radius*this.radius){const i=Math.sqrt(t),s=(i-this.radius)*.5;this.center.addScaledVector(il,s/i),this.radius+=s}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Wf.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(il.copy(e.center).add(Wf)),this.expandByPoint(il.copy(e.center).sub(Wf))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}}const Cs=new T,Xf=new T,Bc=new T,Js=new T,Kf=new T,zc=new T,qf=new T;class Sr{constructor(e=new T,t=new T(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,Cs)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=Cs.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Cs.copy(this.origin).addScaledVector(this.direction,t),Cs.distanceToSquared(e))}distanceSqToSegment(e,t,i,s){Xf.copy(e).add(t).multiplyScalar(.5),Bc.copy(t).sub(e).normalize(),Js.copy(this.origin).sub(Xf);const a=e.distanceTo(t)*.5,r=-this.direction.dot(Bc),o=Js.dot(this.direction),l=-Js.dot(Bc),c=Js.lengthSq(),u=Math.abs(1-r*r);let d,h,f,p;if(u>0)if(d=r*l-o,h=r*o-l,p=a*u,d>=0)if(h>=-p)if(h<=p){const g=1/u;d*=g,h*=g,f=d*(d+r*h+2*o)+h*(r*d+h+2*l)+c}else h=a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h=-a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h<=-p?(d=Math.max(0,-(-r*a+o)),h=d>0?-a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c):h<=p?(d=0,h=Math.min(Math.max(-a,-l),a),f=h*(h+2*l)+c):(d=Math.max(0,-(r*a+o)),h=d>0?a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c);else h=r>0?-a:a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,d),s&&s.copy(Xf).addScaledVector(Bc,h),f}intersectSphere(e,t){Cs.subVectors(e.center,this.origin);const i=Cs.dot(this.direction),s=Cs.dot(Cs)-i*i,a=e.radius*e.radius;if(s>a)return null;const r=Math.sqrt(a-s),o=i-r,l=i+r;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,s,a,r,o,l;const c=1/this.direction.x,u=1/this.direction.y,d=1/this.direction.z,h=this.origin;return c>=0?(i=(e.min.x-h.x)*c,s=(e.max.x-h.x)*c):(i=(e.max.x-h.x)*c,s=(e.min.x-h.x)*c),u>=0?(a=(e.min.y-h.y)*u,r=(e.max.y-h.y)*u):(a=(e.max.y-h.y)*u,r=(e.min.y-h.y)*u),i>r||a>s||((a>i||isNaN(i))&&(i=a),(r=0?(o=(e.min.z-h.z)*d,l=(e.max.z-h.z)*d):(o=(e.max.z-h.z)*d,l=(e.min.z-h.z)*d),i>l||o>s)||((o>i||i!==i)&&(i=o),(l=0?i:s,t)}intersectsBox(e){return this.intersectBox(e,Cs)!==null}intersectTriangle(e,t,i,s,a){Kf.subVectors(t,e),zc.subVectors(i,e),qf.crossVectors(Kf,zc);let r=this.direction.dot(qf),o;if(r>0){if(s)return null;o=1}else if(r<0)o=-1,r=-r;else return null;Js.subVectors(this.origin,e);const l=o*this.direction.dot(zc.crossVectors(Js,zc));if(l<0)return null;const c=o*this.direction.dot(Kf.cross(Js));if(c<0||l+c>r)return null;const u=-o*Js.dot(qf);return u<0?null:this.at(u/r,a)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Ee{constructor(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){Ee.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_)}set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){const m=this.elements;return m[0]=e,m[4]=t,m[8]=i,m[12]=s,m[1]=a,m[5]=r,m[9]=o,m[13]=l,m[2]=c,m[6]=u,m[10]=d,m[14]=h,m[3]=f,m[7]=p,m[11]=g,m[15]=_,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Ee().fromArray(this.elements)}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){const t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,i=e.elements,s=1/Lr.setFromMatrixColumn(e,0).length(),a=1/Lr.setFromMatrixColumn(e,1).length(),r=1/Lr.setFromMatrixColumn(e,2).length();return t[0]=i[0]*s,t[1]=i[1]*s,t[2]=i[2]*s,t[3]=0,t[4]=i[4]*a,t[5]=i[5]*a,t[6]=i[6]*a,t[7]=0,t[8]=i[8]*r,t[9]=i[9]*r,t[10]=i[10]*r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,i=e.x,s=e.y,a=e.z,r=Math.cos(i),o=Math.sin(i),l=Math.cos(s),c=Math.sin(s),u=Math.cos(a),d=Math.sin(a);if(e.order==="XYZ"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=-l*d,t[8]=c,t[1]=f+p*c,t[5]=h-g*c,t[9]=-o*l,t[2]=g-h*c,t[6]=p+f*c,t[10]=r*l}else if(e.order==="YXZ"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h+g*o,t[4]=p*o-f,t[8]=r*c,t[1]=r*d,t[5]=r*u,t[9]=-o,t[2]=f*o-p,t[6]=g+h*o,t[10]=r*l}else if(e.order==="ZXY"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h-g*o,t[4]=-r*d,t[8]=p+f*o,t[1]=f+p*o,t[5]=r*u,t[9]=g-h*o,t[2]=-r*c,t[6]=o,t[10]=r*l}else if(e.order==="ZYX"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=p*c-f,t[8]=h*c+g,t[1]=l*d,t[5]=g*c+h,t[9]=f*c-p,t[2]=-c,t[6]=o*l,t[10]=r*l}else if(e.order==="YZX"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=g-h*d,t[8]=p*d+f,t[1]=d,t[5]=r*u,t[9]=-o*u,t[2]=-c*u,t[6]=f*d+p,t[10]=h-g*d}else if(e.order==="XZY"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=-d,t[8]=c*u,t[1]=h*d+g,t[5]=r*u,t[9]=f*d-p,t[2]=p*d-f,t[6]=o*u,t[10]=g*d+h}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(jA,e,ZA)}lookAt(e,t,i){const s=this.elements;return fi.subVectors(e,t),fi.lengthSq()===0&&(fi.z=1),fi.normalize(),Qs.crossVectors(i,fi),Qs.lengthSq()===0&&(Math.abs(i.z)===1?fi.x+=1e-4:fi.z+=1e-4,fi.normalize(),Qs.crossVectors(i,fi)),Qs.normalize(),Hc.crossVectors(fi,Qs),s[0]=Qs.x,s[4]=Hc.x,s[8]=fi.x,s[1]=Qs.y,s[5]=Hc.y,s[9]=fi.y,s[2]=Qs.z,s[6]=Hc.z,s[10]=fi.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[4],l=i[8],c=i[12],u=i[1],d=i[5],h=i[9],f=i[13],p=i[2],g=i[6],_=i[10],m=i[14],v=i[3],y=i[7],b=i[11],S=i[15],x=s[0],M=s[4],C=s[8],w=s[12],E=s[1],R=s[5],L=s[9],O=s[13],D=s[2],U=s[6],F=s[10],W=s[14],H=s[3],ie=s[7],le=s[11],me=s[15];return a[0]=r*x+o*E+l*D+c*H,a[4]=r*M+o*R+l*U+c*ie,a[8]=r*C+o*L+l*F+c*le,a[12]=r*w+o*O+l*W+c*me,a[1]=u*x+d*E+h*D+f*H,a[5]=u*M+d*R+h*U+f*ie,a[9]=u*C+d*L+h*F+f*le,a[13]=u*w+d*O+h*W+f*me,a[2]=p*x+g*E+_*D+m*H,a[6]=p*M+g*R+_*U+m*ie,a[10]=p*C+g*L+_*F+m*le,a[14]=p*w+g*O+_*W+m*me,a[3]=v*x+y*E+b*D+S*H,a[7]=v*M+y*R+b*U+S*ie,a[11]=v*C+y*L+b*F+S*le,a[15]=v*w+y*O+b*W+S*me,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[4],s=e[8],a=e[12],r=e[1],o=e[5],l=e[9],c=e[13],u=e[2],d=e[6],h=e[10],f=e[14],p=e[3],g=e[7],_=e[11],m=e[15];return p*(+a*l*d-s*c*d-a*o*h+i*c*h+s*o*f-i*l*f)+g*(+t*l*f-t*c*h+a*r*h-s*r*f+s*c*u-a*l*u)+_*(+t*c*d-t*o*f-a*r*d+i*r*f+a*o*u-i*c*u)+m*(-s*o*u-t*l*d+t*o*h+s*r*d-i*r*h+i*l*u)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){const s=this.elements;return e.isVector3?(s[12]=e.x,s[13]=e.y,s[14]=e.z):(s[12]=e,s[13]=t,s[14]=i),this}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=e[9],h=e[10],f=e[11],p=e[12],g=e[13],_=e[14],m=e[15],v=d*_*c-g*h*c+g*l*f-o*_*f-d*l*m+o*h*m,y=p*h*c-u*_*c-p*l*f+r*_*f+u*l*m-r*h*m,b=u*g*c-p*d*c+p*o*f-r*g*f-u*o*m+r*d*m,S=p*d*l-u*g*l-p*o*h+r*g*h+u*o*_-r*d*_,x=t*v+i*y+s*b+a*S;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/x;return e[0]=v*M,e[1]=(g*h*a-d*_*a-g*s*f+i*_*f+d*s*m-i*h*m)*M,e[2]=(o*_*a-g*l*a+g*s*c-i*_*c-o*s*m+i*l*m)*M,e[3]=(d*l*a-o*h*a-d*s*c+i*h*c+o*s*f-i*l*f)*M,e[4]=y*M,e[5]=(u*_*a-p*h*a+p*s*f-t*_*f-u*s*m+t*h*m)*M,e[6]=(p*l*a-r*_*a-p*s*c+t*_*c+r*s*m-t*l*m)*M,e[7]=(r*h*a-u*l*a+u*s*c-t*h*c-r*s*f+t*l*f)*M,e[8]=b*M,e[9]=(p*d*a-u*g*a-p*i*f+t*g*f+u*i*m-t*d*m)*M,e[10]=(r*g*a-p*o*a+p*i*c-t*g*c-r*i*m+t*o*m)*M,e[11]=(u*o*a-r*d*a-u*i*c+t*d*c+r*i*f-t*o*f)*M,e[12]=S*M,e[13]=(u*g*s-p*d*s+p*i*h-t*g*h-u*i*_+t*d*_)*M,e[14]=(p*o*s-r*g*s-p*i*l+t*g*l+r*i*_-t*o*_)*M,e[15]=(r*d*s-u*o*s+u*i*l-t*d*l-r*i*h+t*o*h)*M,this}scale(e){const t=this.elements,i=e.x,s=e.y,a=e.z;return t[0]*=i,t[4]*=s,t[8]*=a,t[1]*=i,t[5]*=s,t[9]*=a,t[2]*=i,t[6]*=s,t[10]*=a,t[3]*=i,t[7]*=s,t[11]*=a,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],i=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],s=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,i,s))}makeTranslation(e,t,i){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const i=Math.cos(t),s=Math.sin(t),a=1-i,r=e.x,o=e.y,l=e.z,c=a*r,u=a*o;return this.set(c*r+i,c*o-s*l,c*l+s*o,0,c*o+s*l,u*o+i,u*l-s*r,0,c*l-s*o,u*l+s*r,a*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,s,a,r){return this.set(1,i,a,0,e,1,r,0,t,s,1,0,0,0,0,1),this}compose(e,t,i){const s=this.elements,a=t._x,r=t._y,o=t._z,l=t._w,c=a+a,u=r+r,d=o+o,h=a*c,f=a*u,p=a*d,g=r*u,_=r*d,m=o*d,v=l*c,y=l*u,b=l*d,S=i.x,x=i.y,M=i.z;return s[0]=(1-(g+m))*S,s[1]=(f+b)*S,s[2]=(p-y)*S,s[3]=0,s[4]=(f-b)*x,s[5]=(1-(h+m))*x,s[6]=(_+v)*x,s[7]=0,s[8]=(p+y)*M,s[9]=(_-v)*M,s[10]=(1-(h+g))*M,s[11]=0,s[12]=e.x,s[13]=e.y,s[14]=e.z,s[15]=1,this}decompose(e,t,i){const s=this.elements;let a=Lr.set(s[0],s[1],s[2]).length();const r=Lr.set(s[4],s[5],s[6]).length(),o=Lr.set(s[8],s[9],s[10]).length();this.determinant()<0&&(a=-a),e.x=s[12],e.y=s[13],e.z=s[14],Ui.copy(this);const c=1/a,u=1/r,d=1/o;return Ui.elements[0]*=c,Ui.elements[1]*=c,Ui.elements[2]*=c,Ui.elements[4]*=u,Ui.elements[5]*=u,Ui.elements[6]*=u,Ui.elements[8]*=d,Ui.elements[9]*=d,Ui.elements[10]*=d,t.setFromRotationMatrix(Ui),i.x=a,i.y=r,i.z=o,this}makePerspective(e,t,i,s,a,r,o=yi,l=!1){const c=this.elements,u=2*a/(t-e),d=2*a/(i-s),h=(t+e)/(t-e),f=(i+s)/(i-s);let p,g;if(l)p=a/(r-a),g=r*a/(r-a);else if(o===yi)p=-(r+a)/(r-a),g=-2*r*a/(r-a);else if(o===Do)p=-r/(r-a),g=-r*a/(r-a);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=h,c[12]=0,c[1]=0,c[5]=d,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,i,s,a,r,o=yi,l=!1){const c=this.elements,u=2/(t-e),d=2/(i-s),h=-(t+e)/(t-e),f=-(i+s)/(i-s);let p,g;if(l)p=1/(r-a),g=r/(r-a);else if(o===yi)p=-2/(r-a),g=-(r+a)/(r-a);else if(o===Do)p=-1/(r-a),g=-a/(r-a);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=0,c[12]=h,c[1]=0,c[5]=d,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<16;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}}const Lr=new T,Ui=new Ee,jA=new T(0,0,0),ZA=new T(1,1,1),Qs=new T,Hc=new T,fi=new T,Xy=new Ee,Ky=new ht;class rn{constructor(e=0,t=0,i=0,s=rn.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=s}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,s=this._order){return this._x=e,this._y=t,this._z=i,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){const s=e.elements,a=s[0],r=s[4],o=s[8],l=s[1],c=s[5],u=s[9],d=s[2],h=s[6],f=s[10];switch(t){case"XYZ":this._y=Math.asin(Je(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,f),this._z=Math.atan2(-r,a)):(this._x=Math.atan2(h,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Je(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-d,a),this._z=0);break;case"ZXY":this._x=Math.asin(Je(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-d,f),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(l,a));break;case"ZYX":this._y=Math.asin(-Je(d,-1,1)),Math.abs(d)<.9999999?(this._x=Math.atan2(h,f),this._z=Math.atan2(l,a)):(this._x=0,this._z=Math.atan2(-r,c));break;case"YZX":this._z=Math.asin(Je(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-d,a)):(this._x=0,this._y=Math.atan2(o,f));break;case"XZY":this._z=Math.asin(-Je(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(h,c),this._y=Math.atan2(o,a)):(this._x=Math.atan2(-u,f),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,i===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return Xy.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Xy,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Ky.setFromEuler(this),this.setFromQuaternion(Ky,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}rn.DEFAULT_ORDER="XYZ";class Jh{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(o=>({...o})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(e),s.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(s.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(s.boundingBox=this.boundingBox.toJSON()));function a(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=a(e.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),u.length>0&&(i.images=u),d.length>0&&(i.shapes=d),h.length>0&&(i.skeletons=h),f.length>0&&(i.animations=f),p.length>0&&(i.nodes=p)}return i.object=s,i;function r(o){const l=[];for(const c in o){const u=o[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;i0?s.multiplyScalar(1/Math.sqrt(a)):s.set(0,0,0)}static getBarycoord(e,t,i,s,a){Bi.subVectors(s,t),Rs.subVectors(i,t),jf.subVectors(e,t);const r=Bi.dot(Bi),o=Bi.dot(Rs),l=Bi.dot(jf),c=Rs.dot(Rs),u=Rs.dot(jf),d=r*c-o*o;if(d===0)return a.set(0,0,0),null;const h=1/d,f=(c*l-o*u)*h,p=(r*u-o*l)*h;return a.set(1-f-p,p,f)}static containsPoint(e,t,i,s){return this.getBarycoord(e,t,i,s,Ps)===null?!1:Ps.x>=0&&Ps.y>=0&&Ps.x+Ps.y<=1}static getInterpolation(e,t,i,s,a,r,o,l){return this.getBarycoord(e,t,i,s,Ps)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(a,Ps.x),l.addScaledVector(r,Ps.y),l.addScaledVector(o,Ps.z),l)}static getInterpolatedAttribute(e,t,i,s,a,r){return ep.setScalar(0),tp.setScalar(0),np.setScalar(0),ep.fromBufferAttribute(e,t),tp.fromBufferAttribute(e,i),np.fromBufferAttribute(e,s),r.setScalar(0),r.addScaledVector(ep,a.x),r.addScaledVector(tp,a.y),r.addScaledVector(np,a.z),r}static isFrontFacing(e,t,i,s){return Bi.subVectors(i,t),Rs.subVectors(e,t),Bi.cross(Rs).dot(s)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,s){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[s]),this}setFromAttributeAndIndices(e,t,i,s){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,s),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Bi.subVectors(this.c,this.b),Rs.subVectors(this.a,this.b),Bi.cross(Rs).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return ii.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return ii.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,s,a){return ii.getInterpolation(e,this.a,this.b,this.c,t,i,s,a)}containsPoint(e){return ii.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return ii.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,s=this.b,a=this.c;let r,o;Or.subVectors(s,i),Fr.subVectors(a,i),Zf.subVectors(e,i);const l=Or.dot(Zf),c=Fr.dot(Zf);if(l<=0&&c<=0)return t.copy(i);Jf.subVectors(e,s);const u=Or.dot(Jf),d=Fr.dot(Jf);if(u>=0&&d<=u)return t.copy(s);const h=l*d-u*c;if(h<=0&&l>=0&&u<=0)return r=l/(l-u),t.copy(i).addScaledVector(Or,r);Qf.subVectors(e,a);const f=Or.dot(Qf),p=Fr.dot(Qf);if(p>=0&&f<=p)return t.copy(a);const g=f*c-l*p;if(g<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(i).addScaledVector(Fr,o);const _=u*p-f*d;if(_<=0&&d-u>=0&&f-p>=0)return Qy.subVectors(a,s),o=(d-u)/(d-u+(f-p)),t.copy(s).addScaledVector(Qy,o);const m=1/(_+g+h);return r=g*m,o=h*m,t.copy(i).addScaledVector(Or,r).addScaledVector(Fr,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}const KS={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ea={h:0,s:0,l:0},Gc={h:0,s:0,l:0};function ip(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}class de{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){const s=e;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=yt){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,rt.colorSpaceToWorking(this,t),this}setRGB(e,t,i,s=rt.workingColorSpace){return this.r=e,this.g=t,this.b=i,rt.colorSpaceToWorking(this,s),this}setHSL(e,t,i,s=rt.workingColorSpace){if(e=Sg(e,1),t=Je(t,0,1),i=Je(i,0,1),t===0)this.r=this.g=this.b=i;else{const a=i<=.5?i*(1+t):i+t-i*t,r=2*i-a;this.r=ip(r,a,e+1/3),this.g=ip(r,a,e),this.b=ip(r,a,e-1/3)}return rt.colorSpaceToWorking(this,s),this}setStyle(e,t=yt){function i(a){a!==void 0&&parseFloat(a)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(e)){let a;const r=s[1],o=s[2];switch(r){case"rgb":case"rgba":if(a=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(255,parseInt(a[1],10))/255,Math.min(255,parseInt(a[2],10))/255,Math.min(255,parseInt(a[3],10))/255,t);if(a=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(100,parseInt(a[1],10))/100,Math.min(100,parseInt(a[2],10))/100,Math.min(100,parseInt(a[3],10))/100,t);break;case"hsl":case"hsla":if(a=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setHSL(parseFloat(a[1])/360,parseFloat(a[2])/100,parseFloat(a[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(e)){const a=s[1],r=a.length;if(r===3)return this.setRGB(parseInt(a.charAt(0),16)/15,parseInt(a.charAt(1),16)/15,parseInt(a.charAt(2),16)/15,t);if(r===6)return this.setHex(parseInt(a,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=yt){const i=KS[e.toLowerCase()];return i!==void 0?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Gs(e.r),this.g=Gs(e.g),this.b=Gs(e.b),this}copyLinearToSRGB(e){return this.r=fo(e.r),this.g=fo(e.g),this.b=fo(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=yt){return rt.workingToColorSpace(An.copy(this),e),Math.round(Je(An.r*255,0,255))*65536+Math.round(Je(An.g*255,0,255))*256+Math.round(Je(An.b*255,0,255))}getHexString(e=yt){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=rt.workingColorSpace){rt.workingToColorSpace(An.copy(this),t);const i=An.r,s=An.g,a=An.b,r=Math.max(i,s,a),o=Math.min(i,s,a);let l,c;const u=(o+r)/2;if(o===r)l=0,c=0;else{const d=r-o;switch(c=u<=.5?d/(r+o):d/(2-r-o),r){case i:l=(s-a)/d+(s0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==ur&&(i.blending=this.blending),this.side!==bs&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==ec&&(i.blendSrc=this.blendSrc),this.blendDst!==tc&&(i.blendDst=this.blendDst),this.blendEquation!==Us&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==fr&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Km&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Xa&&(i.stencilFail=this.stencilFail),this.stencilZFail!==Xa&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==Xa&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function s(a){const r=[];for(const o in a){const l=a[o];delete l.metadata,r.push(l)}return r}if(t){const a=s(e.textures),r=s(e.images);a.length>0&&(i.textures=a),r.length>0&&(i.images=r)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const s=t.length;i=new Array(s);for(let a=0;a!==s;++a)i[a]=t[a].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}}class je extends en{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new de(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new rn,this.combine=xc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const zs=iR();function iR(){const n=new ArrayBuffer(4),e=new Float32Array(n),t=new Uint32Array(n),i=new Uint32Array(512),s=new Uint32Array(512);for(let l=0;l<256;++l){const c=l-127;c<-27?(i[l]=0,i[l|256]=32768,s[l]=24,s[l|256]=24):c<-14?(i[l]=1024>>-c-14,i[l|256]=1024>>-c-14|32768,s[l]=-c-1,s[l|256]=-c-1):c<=15?(i[l]=c+15<<10,i[l|256]=c+15<<10|32768,s[l]=13,s[l|256]=13):c<128?(i[l]=31744,i[l|256]=64512,s[l]=24,s[l|256]=24):(i[l]=31744,i[l|256]=64512,s[l]=13,s[l|256]=13)}const a=new Uint32Array(2048),r=new Uint32Array(64),o=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,u=0;for(;(c&8388608)===0;)c<<=1,u-=8388608;c&=-8388609,u+=947912704,a[l]=c|u}for(let l=1024;l<2048;++l)a[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)r[l]=l<<23;r[31]=1199570944,r[32]=2147483648;for(let l=33;l<63;++l)r[l]=2147483648+(l-32<<23);r[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(o[l]=1024);return{floatView:e,uint32View:t,baseTable:i,shiftTable:s,mantissaTable:a,exponentTable:r,offsetTable:o}}function Qn(n){Math.abs(n)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),n=Je(n,-65504,65504),zs.floatView[0]=n;const e=zs.uint32View[0],t=e>>23&511;return zs.baseTable[t]+((e&8388607)>>zs.shiftTable[t])}function Cl(n){const e=n>>10;return zs.uint32View[0]=zs.mantissaTable[zs.offsetTable[e]+(n&1023)]+zs.exponentTable[e],zs.floatView[0]}class Al{static toHalfFloat(e){return Qn(e)}static fromHalfFloat(e){return Cl(e)}}const sn=new T,$c=new ne;let sR=0;class ot{constructor(e,t,i=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:sR++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=ac,this.updateRanges=[],this.gpuType=Mn,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let s=0,a=this.itemSize;st.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new bn);const e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new T(-1/0,-1/0,-1/0),new T(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,s=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const s={};let a=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let d=0,h=c.length;d0&&(s[l]=u,a=!0)}a&&(e.data.morphAttributes=s,e.data.morphTargetsRelative=this.morphTargetsRelative);const r=this.groups;r.length>0&&(e.data.groups=JSON.parse(JSON.stringify(r)));const o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null&&this.setIndex(i.clone());const s=e.attributes;for(const c in s){const u=s[c];this.setAttribute(c,u.clone(t))}const a=e.morphAttributes;for(const c in a){const u=[],d=a[c];for(let h=0,f=d.length;h0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;a(e.far-e.near)**2))&&(e0.copy(a).invert(),Ca.copy(e.ray).applyMatrix4(e0),!(i.boundingBox!==null&&Ca.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,Ca)))}_computeIntersections(e,t,i){let s;const a=this.geometry,r=this.material,o=a.index,l=a.attributes.position,c=a.attributes.uv,u=a.attributes.uv1,d=a.attributes.normal,h=a.groups,f=a.drawRange;if(o!==null)if(Array.isArray(r))for(let p=0,g=h.length;pt.far?null:{distance:c,point:jc.clone(),object:n}}function Zc(n,e,t,i,s,a,r,o,l,c){n.getVertexPosition(o,Xc),n.getVertexPosition(l,Kc),n.getVertexPosition(c,qc);const u=hR(n,e,t,i,Xc,Kc,qc,n0);if(u){const d=new T;ii.getBarycoord(n0,Xc,Kc,qc,d),s&&(u.uv=ii.getInterpolatedAttribute(s,o,l,c,d,new ne)),a&&(u.uv1=ii.getInterpolatedAttribute(a,o,l,c,d,new ne)),r&&(u.normal=ii.getInterpolatedAttribute(r,o,l,c,d,new T),u.normal.dot(i.direction)>0&&u.normal.multiplyScalar(-1));const h={a:o,b:l,c,normal:new T,materialIndex:0};ii.getNormal(Xc,Kc,qc,h.normal),u.face=h,u.barycoord=d}return u}class ki extends $e{constructor(e=1,t=1,i=1,s=1,a=1,r=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:s,heightSegments:a,depthSegments:r};const o=this;s=Math.floor(s),a=Math.floor(a),r=Math.floor(r);const l=[],c=[],u=[],d=[];let h=0,f=0;p("z","y","x",-1,-1,i,t,e,r,a,0),p("z","y","x",1,-1,i,t,-e,r,a,1),p("x","z","y",1,1,e,i,t,s,r,2),p("x","z","y",1,-1,e,i,-t,s,r,3),p("x","y","z",1,-1,e,t,i,s,a,4),p("x","y","z",-1,-1,e,t,-i,s,a,5),this.setIndex(l),this.setAttribute("position",new Ce(c,3)),this.setAttribute("normal",new Ce(u,3)),this.setAttribute("uv",new Ce(d,2));function p(g,_,m,v,y,b,S,x,M,C,w){const E=b/M,R=S/C,L=b/2,O=S/2,D=x/2,U=M+1,F=C+1;let W=0,H=0;const ie=new T;for(let le=0;le0?1:-1,u.push(ie.x,ie.y,ie.z),d.push(Le/M),d.push(1-le/C),W+=1}}for(let le=0;le{for(const a of s)if(a.type==="childList")for(const r of a.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&i(r)}).observe(document,{childList:!0,subtree:!0});function t(s){const a={};return s.integrity&&(a.integrity=s.integrity),s.referrerPolicy&&(a.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?a.credentials="include":s.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function i(s){if(s.ep)return;s.ep=!0;const a=t(s);fetch(s.href,a)}})();function Wh(n,e){if(n.frames.length===0)return 0;let t=0,i=n.frames.length-1;for(;t<=i;){const s=Math.floor((t+i)/2),a=n.frames[s]?.time??0;if(ae)i=s-1;else return s}return Math.max(0,t-1)}class cS{_listeners=new Map;on(e,t){let i=this._listeners.get(e);return i||(i=new Set,this._listeners.set(e,i)),i.add(t),this}once(e,t){const i=(...s)=>{this.off(e,i),t(...s)};return this.on(e,i)}off(e,t){const i=this._listeners.get(e);return i?(t?i.delete(t):i.clear(),i.size===0&&this._listeners.delete(e),this):this}removeListener(e,t){return this.off(e,t)}removeAllListeners(e){return e?this._listeners.delete(e):this._listeners.clear(),this}emit(e,...t){const i=this._listeners.get(e);if(!i||i.size===0)return!1;for(const s of[...i])s(...t);return!0}}function Wf(n){return n?{x:n.x,y:n.z,z:n.y}:null}function UC(n){return n?{x:n.x,y:n.z,z:n.y,w:-n.w}:null}function BC(n){return n*100/255}const $y={Octane:{length:118.0074,width:84.19941,height:36.15907,offsetX:13.87566,offsetZ:20.75499},Dominus:{length:127.9268,width:83.27995,height:31.3,offsetX:9,offsetZ:15.75},Plank:{length:128.8198,width:84.67036,height:29.3944,offsetX:9.00857,offsetZ:12.0942},Breakout:{length:131.4924,width:80.521,height:30.3,offsetX:12.5,offsetZ:11.75},Hybrid:{length:127.0192,width:82.18787,height:34.15907,offsetX:13.87566,offsetZ:20.75499},Merc:{length:120.72,width:76.71,height:41.66,offsetX:11.37566,offsetZ:21.504988}},zC={21:{name:"Backfire",hitbox:"Octane"},22:{name:"Breakout",hitbox:"Breakout"},23:{name:"Octane",hitbox:"Octane"},24:{name:"Paladin",hitbox:"Plank"},25:{name:"Road Hog",hitbox:"Octane"},26:{name:"Gizmo",hitbox:"Octane"},28:{name:"X-Devil",hitbox:"Hybrid"},29:{name:"Hotshot",hitbox:"Dominus"},30:{name:"Merc",hitbox:"Merc"},31:{name:"Venom",hitbox:"Hybrid"},402:{name:"Takumi",hitbox:"Octane"},403:{name:"Dominus",hitbox:"Dominus"},404:{name:"Scarab",hitbox:"Octane"},523:{name:"Zippy",hitbox:"Octane"},597:{name:"DeLorean Time Machine",hitbox:"Dominus"},600:{name:"Ripper",hitbox:"Dominus"},607:{name:"Grog",hitbox:"Octane"},1018:{name:"Dominus GT",hitbox:"Dominus"},1159:{name:"X-Devil Mk2",hitbox:"Hybrid"},1171:{name:"Masamune",hitbox:"Dominus"},1172:{name:"Marauder",hitbox:"Octane"},1286:{name:"Aftershock",hitbox:"Dominus"},1295:{name:"Takumi RX-T",hitbox:"Octane"},1300:{name:"Road Hog XL",hitbox:"Octane"},1317:{name:"Esper",hitbox:"Hybrid"},1416:{name:"Breakout Type-S",hitbox:"Breakout"},1475:{name:"Proteus",hitbox:"Octane"},1478:{name:"Triton",hitbox:"Octane"},1533:{name:"Vulcan",hitbox:"Octane"},1568:{name:"Octane ZSR",hitbox:"Octane"},1603:{name:"Twin Mill III",hitbox:"Plank"},1623:{name:"Bone Shaker",hitbox:"Octane"},1624:{name:"Endo",hitbox:"Hybrid"},1675:{name:"Ice Charger",hitbox:"Dominus"},1689:{name:"Nemesis",hitbox:"Dominus"},1691:{name:"Mantis",hitbox:"Plank"},1856:{name:"Jager 619",hitbox:"Hybrid"},1883:{name:"Imperator DT5",hitbox:"Dominus"},1894:{name:"Samurai",hitbox:"Breakout"},1919:{name:"Centio",hitbox:"Plank"},1932:{name:"Animus GP",hitbox:"Breakout"},2070:{name:"Werewolf",hitbox:"Dominus"},2268:{name:"Fast & Furious Dodge Charger",hitbox:"Dominus"},2269:{name:"Fast & Furious Nissan Skyline",hitbox:"Hybrid"},2665:{name:"The Dark Knight's Tumbler",hitbox:"Octane"},2666:{name:"Batmobile (1989)",hitbox:"Dominus"},2853:{name:"Twinzer",hitbox:"Octane"},2919:{name:"Jurassic Jeep Wrangler",hitbox:"Octane"},2949:{name:"Fast 4WD",hitbox:"Octane"},2950:{name:"MR11",hitbox:"Dominus"},2951:{name:"Gazella GT",hitbox:"Dominus"},3031:{name:"Cyclone",hitbox:"Breakout"},3155:{name:"Maverick",hitbox:"Dominus"},3156:{name:"Maverick G1",hitbox:"Dominus"},3157:{name:"Maverick GXT",hitbox:"Dominus"},3265:{name:"McLaren 570S",hitbox:"Dominus"},3311:{name:"Komodo",hitbox:"Breakout"},3426:{name:"Diestro",hitbox:"Dominus"},3451:{name:"Nimbus",hitbox:"Hybrid"},3582:{name:"Insidio",hitbox:"Hybrid"},3594:{name:"Artemis G1",hitbox:"Plank"},3614:{name:"Artemis",hitbox:"Plank"},3622:{name:"Artemis GXT",hitbox:"Plank"},3702:{name:"Tygris",hitbox:"Hybrid"},3875:{name:"Guardian GXT",hitbox:"Dominus"},3879:{name:"Guardian",hitbox:"Dominus"},3880:{name:"Guardian G1",hitbox:"Dominus"},4014:{name:"K.I.T.T.",hitbox:"Dominus"},4155:{name:"Ecto-1",hitbox:"Dominus"},4268:{name:"Sentinel",hitbox:"Plank"},4284:{name:"Fennec",hitbox:"Octane"},4318:{name:"Mudcat",hitbox:"Octane"},4319:{name:"Mudcat G1",hitbox:"Octane"},4320:{name:"Mudcat GXT",hitbox:"Octane"},4367:{name:"Chikara GXT",hitbox:"Dominus"},4472:{name:"Chikara",hitbox:"Dominus"},4473:{name:"Chikara G1",hitbox:"Dominus"},4745:{name:"Ronin GXT",hitbox:"Dominus"},4770:{name:"Dominus",hitbox:"Dominus"},4780:{name:"Battle Bus",hitbox:"Merc"},4781:{name:"Peregrine TT",hitbox:"Dominus"},4782:{name:"Psyclops",hitbox:"Body_Tritip_Handling"},4861:{name:"Ronin",hitbox:"Dominus"},4864:{name:"Ronin G1",hitbox:"Dominus"},4906:{name:"Harbinger",hitbox:"Octane"},5020:{name:"Outlaw",hitbox:"Octane"},5039:{name:"Harbinger GXT",hitbox:"Octane"},5188:{name:"Scarab",hitbox:"Octane"},5265:{name:"Formula 1 2021",hitbox:"Plank"},5361:{name:"Dingo",hitbox:"Octane"},5470:{name:"R3MX",hitbox:"Hybrid"},5488:{name:"R3MX GXT",hitbox:"Hybrid"},5547:{name:"007's Aston Martin DB5",hitbox:"Octane"},5709:{name:"NASCAR Ford Mustang",hitbox:"Dominus"},5713:{name:"Ford F-150 RLE",hitbox:"Octane"},5773:{name:"NASCAR Toyota Camry",hitbox:"Dominus"},5823:{name:"NASCAR Chevrolet Camaro",hitbox:"Dominus"},5837:{name:"Outlaw GXT",hitbox:"Octane"},5858:{name:"Tyranno",hitbox:"Dominus"},5879:{name:"Fast & Furious Pontiac Fiero",hitbox:"Hybrid"},5951:{name:"Jackal",hitbox:"Octane"},5964:{name:"Lamborghini Huracan STO",hitbox:"Dominus"},5979:{name:"Tyranno GXT",hitbox:"Dominus"},6122:{name:"Masamune",hitbox:"Dominus"},6243:{name:"Nexus",hitbox:"Breakout"},6244:{name:"BMW M240i",hitbox:"Dominus"},6247:{name:"McLaren 765LT",hitbox:"Dominus"},6260:{name:"007's Aston Martin Valhalla",hitbox:"Dominus"},6489:{name:"Nexus SC",hitbox:"Breakout"},6836:{name:"Ford Mustang Shelby GT350R RLE",hitbox:"Dominus"},6939:{name:"Ford Mustang Mach-E RLE",hitbox:"Octane"},7012:{name:"Tesla Cybertruck",hitbox:"Hybrid"},7052:{name:"Formula 1 2022",hitbox:"Plank"},7211:{name:"Mamba",hitbox:"Dominus"},7336:{name:"Nomad",hitbox:"Merc"},7337:{name:"NASCAR Next Gen Chevrolet Camaro",hitbox:"Dominus"},7338:{name:"NASCAR Next Gen Ford Mustang",hitbox:"Dominus"},7341:{name:"NASCAR Next Gen Toyota Camry",hitbox:"Dominus"},7343:{name:"007's Aston Martin DBS",hitbox:"Dominus"},7415:{name:"Batmobile (2022)",hitbox:"Dominus"},7477:{name:"Nomad GXT",hitbox:"Merc"},7512:{name:"Lamborghini Countach LPI 800-4",hitbox:"Dominus"},7532:{name:"Maestro",hitbox:"Dominus"},7593:{name:"Nissan Z Performance",hitbox:"Dominus"},7651:{name:"Redline",hitbox:"Breakout"},7696:{name:"Whiplash",hitbox:"Breakout"},7772:{name:"Ferrari 296 GTB",hitbox:"Dominus"},7815:{name:"Ford Bronco Raptor RLE",hitbox:"Merc"},7890:{name:"Fuse",hitbox:"Breakout"},7901:{name:"Fast & Furious Mazda RX-7",hitbox:"Breakout"},7947:{name:"Honda Civic Type R",hitbox:"Octane"},7948:{name:"Honda Civic Type R-LE",hitbox:"Octane"},7979:{name:"Stampede",hitbox:"Merc"},8006:{name:"Mako",hitbox:"Breakout"},8360:{name:"Emperor",hitbox:"Breakout"},8361:{name:"Emperor II",hitbox:"Breakout"},8383:{name:"Xentari",hitbox:"Octane"},8454:{name:"Admiral",hitbox:"Dominus"},8524:{name:"Bugatti Centodieci",hitbox:"Plank"},8565:{name:"Emperor II: Frozen",hitbox:"Breakout"},8566:{name:"Emperor II: Scorched",hitbox:"Breakout"},8669:{name:"Ace",hitbox:"Breakout"},8806:{name:"Volkswagen Golf GTI",hitbox:"Octane"},8807:{name:"Volkswagen Golf GTI RLE",hitbox:"Octane"},9053:{name:"Fast & Furious Dodge Charger SRT Hellcat",hitbox:"Dominus"},9084:{name:"Nissan Silvia",hitbox:"Hybrid"},9085:{name:"Nissan Silvia RLE",hitbox:"Hybrid"},9088:{name:"Porsche 911 Turbo",hitbox:"Dominus"},9089:{name:"Porsche 911 Turbo RLE",hitbox:"Dominus"},9140:{name:"Bumblebee",hitbox:"Dominus"},9357:{name:"Diesel",hitbox:"Breakout"},9388:{name:"Lightning McQueen",hitbox:"Dominus"},9427:{name:"Primo",hitbox:"Hybrid"},9894:{name:"Scorpion",hitbox:"Dominus"},10044:{name:"Beskar",hitbox:"Hybrid"},10094:{name:"Ford Mustang GTD",hitbox:"Dominus"},10440:{name:"Nissan Fairlady Z",hitbox:"Dominus"},10441:{name:"Nissan Fairlady Z RLE",hitbox:"Dominus"},10689:{name:"Behemoth",hitbox:"Merc"},10694:{name:"Lockjaw",hitbox:"Dominus"},10697:{name:"The Incredibile",hitbox:"Breakout"},10698:{name:"1966 Cadillac DeVille",hitbox:"Breakout"},10805:{name:"Nissan Skyline GT-R (R32)",hitbox:"Hybrid"},10817:{name:"Quadra Turbo-R",hitbox:"Breakout"},10822:{name:"McLaren Senna",hitbox:"Breakout"},10896:{name:"BMW 1 Series",hitbox:"Octane"},10897:{name:"BMW 1 Series RLE",hitbox:"Octane"},10900:{name:"Shokunin",hitbox:"Octane"},10901:{name:"Shokunin GXT",hitbox:"Octane"},11016:{name:"Porsche 911 GT3 RS",hitbox:"Dominus"},11038:{name:"Revolver",hitbox:"Breakout"},11095:{name:"Dodge Charger Daytona Scat Pack",hitbox:"Dominus"},11098:{name:"Turtle Van",hitbox:"Merc"},11138:{name:"Void Burn",hitbox:"Hybrid"},11141:{name:"Lamborghini Urus SE",hitbox:"Hybrid"},11314:{name:"Jeep Wrangler Rubicon",hitbox:"Merc"},11315:{name:"Ford Mustang Shelby GT500",hitbox:"Dominus"},11336:{name:"Dominus: Neon",hitbox:"Dominus"},11379:{name:"Ram 1500 RHO",hitbox:"Hybrid"},11394:{name:"Azura",hitbox:"Breakout"},11505:{name:"Breakout X",hitbox:"Breakout"},11534:{name:"BMW M3 (E30)",hitbox:"Dominus"},11603:{name:"Fennec ZR-F",hitbox:"Octane"},11677:{name:"Chevrolet Corvette ZR1",hitbox:"Breakout"},11736:{name:"Recoil AV",hitbox:"Merc"},11800:{name:"Megastar",hitbox:"Breakout"},11905:{name:"The Mystery Machine",hitbox:"Merc"},11932:{name:"Hearse",hitbox:"Hybrid"},11933:{name:"Porsche 918 Spyder",hitbox:"Breakout"},11941:{name:"Mercedes-AMG GT 63 S",hitbox:"Dominus"},11949:{name:"Pontiac Firebird",hitbox:"Breakout"},11950:{name:"Chevrolet Astro",hitbox:"Merc"},12142:{name:"Homer's Car",hitbox:"Dominus"},12173:{name:"Ferrari F40",hitbox:"Breakout"}},HC=zC;function uS(n){const e=HC[String(n)];return e?{name:e.name,hitboxType:e.hitbox}:null}function VC(n){if(!n)return null;const e={fov:n.fov,height:n.height,angle:n.angle,distance:n.distance,stiffness:n.stiffness,swivelSpeed:n.swivel_speed};return n.transition_speed!=null&&(e.transitionSpeed=n.transition_speed),e}const GC=2200,$C=!0,WC=!1,XC=.15,KC=10,qC=.1,YC=10,jC=.1,ZC=.15,JC=10;function il(n,e){if(n.length===0)return null;let t=0,i=n.length-1;if(e<=n[0].time)return n[0];if(e>=n[i].time)return n[i];for(;t>1;n[s].time<=e?t=s:i=s-1}return n[t]}class QC{position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;visible=!0}class eA{constructor(e,t,i){this.isBig=e,this.position=t,this.events=i}isAvailable=!0}class tA extends cS{constructor(e,t,i,s,a,r=null){super(),this.id=e,this.name=t,this.team=i,this.carName=s,this.hitboxType=a,this.cameraSettings=r}position={x:0,y:0,z:0};rotation={x:0,y:0,z:0,w:1};velocity={x:0,y:0,z:0};angularVelocity={x:0,y:0,z:0};sleeping=!1;steer=0;boost=0;isBoosting=!1;isSupersonic=!1;isKickoffReset=!1;isVisible=!0;isBallCam=!0}class dS extends cS{constructor(e,t={}){super(),this.raw=e,this.options=t,this._compile()}duration=0;playerList=[];frameTimes=[];rawStartTime=0;ball=new QC;players=new Map;boostPads=new Map;_currentTime=0;_ballTimeline=[];_playerTimelines={};_ballFlags=[];_playerFlags={};_playerCameraEvents={};_teams={};_timelineCompaction=null;_compile(){const e=this.raw.frame_data,t=this.raw.meta,i=e.metadata_frames,s=i[0]?.time??0;this.rawStartTime=s;const a=l=>Math.max(0,l-s);this.duration=i.length?a(i[i.length-1].time):0,this.frameTimes=i.map(l=>a(l.time));const r=new Map;t.team_zero.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:0})),t.team_one.forEach(l=>r.set(this._idKey(l.remote_id),{info:l,team:1})),e.ball_data.frames.forEach((l,c)=>{if(l==="Empty"||!("Data"in l))return;const u=this._rbToKeyframe(l.Data.rigid_body,a(i[c]?.time??s),c);u&&this._ballTimeline.push(u)}),e.players.forEach(([l,c])=>{const u=this._idKey(l),d=r.get(u);let h=d?.info.name??null,f=d?.team??0;if(!h){for(const S of c.frames)if(S!=="Empty"&&"Data"in S&&S.Data.player_name){h=S.Data.player_name,S.Data.is_team_0!=null&&(f=S.Data.is_team_0?0:1);break}}h||(h=`Player_${u}`);const p=d?.info,g=p?.car_body_id!=null?uS(p.car_body_id):null,_=p?.car_body_name??g?.name??"Octane",m=p?.car_hitbox_family??g?.hitboxType??"Octane",v=[],y=[];c.frames.forEach((S,x)=>{const M=a(i[x]?.time??s);if(S==="Empty"||!("Data"in S))return;const C=this._rbToKeyframe(S.Data.rigid_body,M,x);C&&v.push(C);const w=S.Data.input?.steer;y.push({time:M,boost:BC(S.Data.boost_amount??0),isBoosting:!!S.Data.boost_active,present:!0,steer:w==null?0:Math.max(-1,Math.min(1,(w-128)/128))})});const b=VC(p?.camera_settings);this._playerTimelines[h]=v,this._playerFlags[h]=y,this._teams[h]=f,this.playerList.push({id:u,name:h,team:f,carName:_,hitboxType:m,cameraSettings:b}),this.players.set(h,new tA(u,h,f,_,m,b))});const o=new Map;this.playerList.forEach(l=>o.set(l.id,l.name));for(const[l,c]of this.raw.player_camera_events??[]){const u=o.get(this._idKey(l));u&&(this._playerCameraEvents[u]=c.map(d=>({time:a(i[d.frame]?.time??s),ballCam:d.ball_cam_active})))}this._preprocessMotionTimelines(),this._compileBoostPads(),this.seek(0)}_timelineProcessingOptions(){return{motionSmoothing:this.options.motionSmoothing??$C,smoothingBlendFactor:this.options.smoothingBlendFactor??XC,smoothingAnchorInterval:this.options.smoothingAnchorInterval??KC,timelineCompaction:this.options.timelineCompaction??WC,disableFrameFiltering:this.options.disableFrameFiltering??!1}}_preprocessMotionTimelines(){const e=this._timelineProcessingOptions();e.motionSmoothing&&this._applyVelocityBasedPositionCorrection(e),e.timelineCompaction&&this._applyTimelineCompaction(),e.disableFrameFiltering||this._filterInconsistentFrames()}_applyTimelineCompaction(){const e=this._buildTimelineCompaction();!e||e.gaps.length===0&&e.prematchEndTime===null||(this._timelineCompaction=e,this._ballTimeline=this._compactTimeline(this._ballTimeline,e),Object.entries(this._playerTimelines).forEach(([t,i])=>{this._playerTimelines[t]=this._compactTimeline(i,e)}),Object.entries(this._playerFlags).forEach(([t,i])=>{this._playerFlags[t]=this._compactTimeline(i,e)}),this.frameTimes=this.frameTimes.map(t=>this._compactTime(t,e)),this.duration=e.compactedDuration)}_buildTimelineCompaction(){if(this.frameTimes.length===0)return null;const e=this._detectPostGoalTimeGaps(),t=this._detectFirstKickoffGoTime(),i=t==null?null:sl(t,e),a=e.reduce((r,o)=>r+o.duration,0)+(i??0);return a<=0?null:{gaps:e,prematchEndTime:i,removedDuration:a,compactedDuration:Math.max(0,this.duration-a)}}_detectPostGoalTimeGaps(){const e=[];for(const t of this.raw.goal_events??[]){const i=t.frame;if(!Number.isInteger(i)||i<0||i>=this.frameTimes.length)continue;const s=this.frameTimes[i];for(let a=i+1;a10)break;const l=o-r;if(l>.3){e.push({beforeFrame:a-1,afterFrame:a,beforeTime:r,afterTime:o,duration:l});break}}}return e}_detectFirstKickoffGoTime(){const e=this.raw.frame_data.metadata_frames;let t=!1;for(let s=0;s0&&(t=!0),t&&a===0)return this.frameTimes[s]??null}const i=e.findIndex(s=>s.replicated_game_state_name===54);return i===-1?null:this.frameTimes[i]??null}_compactTimeline(e,t){const i=this._remapReplayGaps(e,t.gaps);return t.prematchEndTime===null?i:this._remapPrematch(i,t.prematchEndTime)}_remapReplayGaps(e,t){if(t.length===0)return e;const i=[];t.forEach((a,r)=>{const o=e.find(l=>l.time>=a.afterTime);o&&i.push({...o,time:sl(a.afterTime,t.slice(0,r+1))})});const s=e.filter(a=>!Ky(a.time,t)).map(a=>({...a,time:sl(a.time,t)}));for(const a of i){if(s.some(o=>Math.abs(o.time-a.time)<.001))continue;let r=s.findIndex(o=>o.time>a.time);r===-1&&(r=s.length),s.splice(r,0,a)}return s}_remapPrematch(e,t){let i=null;for(const a of e)if(a.timea.time>=t).map(a=>({...a,time:a.time-t}));return i&&(s.length===0||s[0].time>.001)&&s.unshift({...i,time:0}),s}_compactTime(e,t){const i=sl(e,t.gaps);return t.prematchEndTime===null?i:Math.max(0,i-t.prematchEndTime)}_applyVelocityBasedPositionCorrection(e){const t=i=>{if(i.length<3)return;let s=0;for(;s=i.length-1)return;let a={...i[s].position};for(let r=s+1;rqC){a={...l.position};continue}if(Xy(a,l.position)>YC){a={...l.position};continue}const u={x:(o.velocity.x+l.velocity.x)/2,y:(o.velocity.y+l.velocity.y)/2,z:(o.velocity.z+l.velocity.z)/2},d={x:a.x+u.x*c,y:a.y+u.y*c,z:a.z+u.z*c},h=(r-s)%e.smoothingAnchorInterval===0?.5:e.smoothingBlendFactor;a={x:d.x*(1-h)+l.position.x*h,y:d.y*(1-h)+l.position.y*h,z:d.z*(1-h)+l.position.z*h},l.position={...a}}};t(this._ballTimeline),Object.values(this._playerTimelines).forEach(t)}_filterInconsistentFrames(){this._ballTimeline=this._filterInconsistentTimeline(this._ballTimeline),Object.entries(this._playerTimelines).forEach(([e,t])=>{this._playerTimelines[e]=this._filterInconsistentTimeline(t)})}_filterInconsistentTimeline(e){if(e.length<2)return e;const t=[e[0]];let i=0;for(let s=1;s.001){const u=o*c,d=Xy(r.position,a.position),h=Math.abs(d-u)/u;if(Number.isFinite(h)&&h>ZC)continue}}t.push(a),i=s}return t}_compileBoostPads(){const e=new Map;(this.raw.boost_pad_events??[]).forEach(t=>{const i=t.kind==="Available"?!0:t.kind&&typeof t.kind=="object"&&"PickedUp"in t.kind?!1:null;if(i===null)return;const s=Math.max(0,t.time-this.rawStartTime);if(this._timelineCompaction&&this._isRemovedByTimelineCompaction(s))return;const a=this._timelineCompaction?this._compactTime(s,this._timelineCompaction):s,r=e.get(t.pad_id);r?r.push({time:a,available:i}):e.set(t.pad_id,[{time:a,available:i}])}),(this.raw.boost_pads??[]).forEach(t=>{const i=(t.pad_id?e.get(t.pad_id):void 0)??[];i.sort((s,a)=>s.time-a.time),this.boostPads.set(t.index,new eA(t.size==="Big",t.position,i))})}_rbToKeyframe(e,t,i){const s=Wf(e.location);return s?{time:t,frame:i,position:s,rotation:UC(e.rotation),velocity:Wf(e.linear_velocity)??{x:0,y:0,z:0},angularVelocity:Wf(e.angular_velocity),sleeping:!!e.sleeping}:null}_isRemovedByTimelineCompaction(e){const t=this._timelineCompaction;if(!t)return!1;if(Ky(e,t.gaps))return!0;const i=sl(e,t.gaps);return t.prematchEndTime!==null&&i=GC}const r=il(this._playerFlags[i]??[],e);r&&(s.boost=r.boost,s.isBoosting=r.isBoosting,s.steer=r.steer);const o=il(this._playerCameraEvents[i]??[],e);o&&o.ballCam!=null&&(s.isBallCam=o.ballCam);const l=this._playerTimelines[i]??[];s.isVisible=l.length>0&&e>=l[0].time-.001&&e<=l[l.length-1].time+1}for(const i of this.boostPads.values()){if(i.events.length===0)continue;const s=il(i.events,e);i.isAvailable=s&&s.time<=e?s.available:!0}}frameIndexAt(e){const t=this.frameTimes;if(t.length===0||e<=t[0])return 0;let i=0,s=t.length-1;if(e>=t[s])return s;for(;i>1;t[a]<=e?i=a:s=a-1}return i}getBall(){return this.ball}getPlayer(e){return this.players.get(e)}getPlayerById(e){for(const t of this.players.values())if(t.id===e)return t}getAllPlayers(){return Array.from(this.players.values())}getPlayerTeams(){return{...this._teams}}getGameTimeMap(){return[]}getCountdownEvents(){return[]}getPlayerStatsTimelines(){return{}}getGameEventTimeline(){return[]}getAdvancedStats(){return null}getEvents(){return[]}getEventsInRange(){return[]}getTextOverlaysAt(){return[]}getGamePhaseAt(){return null}}function Wy(n){return Math.sqrt(n.x*n.x+n.y*n.y+n.z*n.z)}function Xy(n,e){const t=e.x-n.x,i=e.y-n.y,s=e.z-n.z;return Math.sqrt(t*t+i*i+s*s)}function sl(n,e){let t=0;for(const i of e){if(n=i.afterTime){t+=i.duration;continue}return i.beforeTime-t}return n-t}function Ky(n,e){return e.some(t=>n>t.beforeTime&&n>8&255]+Cn[n>>16&255]+Cn[n>>24&255]+"-"+Cn[e&255]+Cn[e>>8&255]+"-"+Cn[e>>16&15|64]+Cn[e>>24&255]+"-"+Cn[t&63|128]+Cn[t>>8&255]+"-"+Cn[t>>16&255]+Cn[t>>24&255]+Cn[i&255]+Cn[i>>8&255]+Cn[i>>16&255]+Cn[i>>24&255]).toLowerCase()}function Je(n,e,t){return Math.max(e,Math.min(t,n))}function Pg(n,e){return(n%e+e)%e}function NA(n,e,t,i,s){return i+(n-e)*(s-i)/(t-e)}function UA(n,e,t){return n!==e?(t-n)/(e-n):0}function ql(n,e,t){return(1-t)*n+t*e}function BA(n,e,t,i){return ql(n,e,1-Math.exp(-t*i))}function zA(n,e=1){return e-Math.abs(Pg(n,e*2)-e)}function HA(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*(3-2*n))}function VA(n,e,t){return n<=e?0:n>=t?1:(n=(n-e)/(t-e),n*n*n*(n*(n*6-15)+10))}function GA(n,e){return n+Math.floor(Math.random()*(e-n+1))}function $A(n,e){return n+Math.random()*(e-n)}function WA(n){return n*(.5-Math.random())}function XA(n){n!==void 0&&(qy=n);let e=qy+=1831565813;return e=Math.imul(e^e>>>15,e|1),e^=e+Math.imul(e^e>>>7,e|61),((e^e>>>14)>>>0)/4294967296}function KA(n){return n*hr}function qA(n){return n*Uo}function YA(n){return(n&n-1)===0&&n!==0}function jA(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function ZA(n){return Math.pow(2,Math.floor(Math.log(n)/Math.LN2))}function JA(n,e,t,i,s){const a=Math.cos,r=Math.sin,o=a(t/2),l=r(t/2),c=a((e+i)/2),u=r((e+i)/2),d=a((e-i)/2),h=r((e-i)/2),f=a((i-e)/2),p=r((i-e)/2);switch(s){case"XYX":n.set(o*u,l*d,l*h,o*c);break;case"YZY":n.set(l*h,o*u,l*d,o*c);break;case"ZXZ":n.set(l*d,l*h,o*u,o*c);break;case"XZX":n.set(o*u,l*p,l*f,o*c);break;case"YXY":n.set(l*f,o*u,l*p,o*c);break;case"ZYZ":n.set(l*p,l*f,o*u,o*c);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+s)}}function $n(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return n/4294967295;case Uint16Array:return n/65535;case Uint8Array:return n/255;case Int32Array:return Math.max(n/2147483647,-1);case Int16Array:return Math.max(n/32767,-1);case Int8Array:return Math.max(n/127,-1);default:throw new Error("Invalid component type.")}}function dt(n,e){switch(e.constructor){case Float32Array:return n;case Uint32Array:return Math.round(n*4294967295);case Uint16Array:return Math.round(n*65535);case Uint8Array:return Math.round(n*255);case Int32Array:return Math.round(n*2147483647);case Int16Array:return Math.round(n*32767);case Int8Array:return Math.round(n*127);default:throw new Error("Invalid component type.")}}const bt={DEG2RAD:hr,RAD2DEG:Uo,generateUUID:bi,clamp:Je,euclideanModulo:Pg,mapLinear:NA,inverseLerp:UA,lerp:ql,damp:BA,pingpong:zA,smoothstep:HA,smootherstep:VA,randInt:GA,randFloat:$A,randFloatSpread:WA,seededRandom:XA,degToRad:KA,radToDeg:qA,isPowerOfTwo:YA,ceilPowerOfTwo:jA,floorPowerOfTwo:ZA,setQuaternionFromProperEuler:JA,normalize:dt,denormalize:$n};class ne{constructor(e=0,t=0){ne.prototype.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e){return this.x+=e.x,this.y+=e.y,this}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6],this.y=s[1]*t+s[4]*i+s[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Je(this.x,e.x,t.x),this.y=Je(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=Je(this.x,e,t),this.y=Je(this.y,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Je(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Je(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x&&e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),s=Math.sin(t),a=this.x-e.x,r=this.y-e.y;return this.x=a*i-r*s+e.x,this.y=a*s+r*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class ht{constructor(e=0,t=0,i=0,s=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=s}static slerpFlat(e,t,i,s,a,r,o){let l=i[s+0],c=i[s+1],u=i[s+2],d=i[s+3];const h=a[r+0],f=a[r+1],p=a[r+2],g=a[r+3];if(o===0){e[t+0]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d;return}if(o===1){e[t+0]=h,e[t+1]=f,e[t+2]=p,e[t+3]=g;return}if(d!==g||l!==h||c!==f||u!==p){let _=1-o;const m=l*h+c*f+u*p+d*g,v=m>=0?1:-1,y=1-m*m;if(y>Number.EPSILON){const S=Math.sqrt(y),x=Math.atan2(S,m*v);_=Math.sin(_*x)/S,o=Math.sin(o*x)/S}const b=o*v;if(l=l*_+h*b,c=c*_+f*b,u=u*_+p*b,d=d*_+g*b,_===1-o){const S=1/Math.sqrt(l*l+c*c+u*u+d*d);l*=S,c*=S,u*=S,d*=S}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=d}static multiplyQuaternionsFlat(e,t,i,s,a,r){const o=i[s],l=i[s+1],c=i[s+2],u=i[s+3],d=a[r],h=a[r+1],f=a[r+2],p=a[r+3];return e[t]=o*p+u*d+l*f-c*h,e[t+1]=l*p+u*h+c*d-o*f,e[t+2]=c*p+u*f+o*h-l*d,e[t+3]=u*p-o*d-l*h-c*f,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,s){return this._x=e,this._y=t,this._z=i,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t=!0){const i=e._x,s=e._y,a=e._z,r=e._order,o=Math.cos,l=Math.sin,c=o(i/2),u=o(s/2),d=o(a/2),h=l(i/2),f=l(s/2),p=l(a/2);switch(r){case"XYZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"YXZ":this._x=h*u*d+c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"ZXY":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d-h*f*p;break;case"ZYX":this._x=h*u*d-c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d+h*f*p;break;case"YZX":this._x=h*u*d+c*f*p,this._y=c*f*d+h*u*p,this._z=c*u*p-h*f*d,this._w=c*u*d-h*f*p;break;case"XZY":this._x=h*u*d-c*f*p,this._y=c*f*d-h*u*p,this._z=c*u*p+h*f*d,this._w=c*u*d+h*f*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+r)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,s=Math.sin(i);return this._x=e.x*s,this._y=e.y*s,this._z=e.z*s,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],s=t[4],a=t[8],r=t[1],o=t[5],l=t[9],c=t[2],u=t[6],d=t[10],h=i+o+d;if(h>0){const f=.5/Math.sqrt(h+1);this._w=.25/f,this._x=(u-l)*f,this._y=(a-c)*f,this._z=(r-s)*f}else if(i>o&&i>d){const f=2*Math.sqrt(1+i-o-d);this._w=(u-l)/f,this._x=.25*f,this._y=(s+r)/f,this._z=(a+c)/f}else if(o>d){const f=2*Math.sqrt(1+o-i-d);this._w=(a-c)/f,this._x=(s+r)/f,this._y=.25*f,this._z=(l+u)/f}else{const f=2*Math.sqrt(1+d-i-o);this._w=(r-s)/f,this._x=(a+c)/f,this._y=(l+u)/f,this._z=.25*f}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i<1e-8?(i=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(Je(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const s=Math.min(1,t/i);return this.slerp(e,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,s=e._y,a=e._z,r=e._w,o=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+r*o+s*c-a*l,this._y=s*u+r*l+a*o-i*c,this._z=a*u+r*c+i*l-s*o,this._w=r*u-i*o-s*l-a*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);const i=this._x,s=this._y,a=this._z,r=this._w;let o=r*e._w+i*e._x+s*e._y+a*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=r,this._x=i,this._y=s,this._z=a,this;const l=1-o*o;if(l<=Number.EPSILON){const f=1-t;return this._w=f*r+t*this._w,this._x=f*i+t*this._x,this._y=f*s+t*this._y,this._z=f*a+t*this._z,this.normalize(),this}const c=Math.sqrt(l),u=Math.atan2(c,o),d=Math.sin((1-t)*u)/c,h=Math.sin(t*u)/c;return this._w=r*d+this._w*h,this._x=i*d+this._x*h,this._y=s*d+this._y*h,this._z=a*d+this._z*h,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),i=Math.random(),s=Math.sqrt(1-i),a=Math.sqrt(i);return this.set(s*Math.sin(e),s*Math.cos(e),a*Math.sin(t),a*Math.cos(t))}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class T{constructor(e=0,t=0,i=0){T.prototype.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0&&(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return this.applyQuaternion(Yy.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Yy.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[3]*i+a[6]*s,this.y=a[1]*t+a[4]*i+a[7]*s,this.z=a[2]*t+a[5]*i+a[8]*s,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=e.elements,r=1/(a[3]*t+a[7]*i+a[11]*s+a[15]);return this.x=(a[0]*t+a[4]*i+a[8]*s+a[12])*r,this.y=(a[1]*t+a[5]*i+a[9]*s+a[13])*r,this.z=(a[2]*t+a[6]*i+a[10]*s+a[14])*r,this}applyQuaternion(e){const t=this.x,i=this.y,s=this.z,a=e.x,r=e.y,o=e.z,l=e.w,c=2*(r*s-o*i),u=2*(o*t-a*s),d=2*(a*i-r*t);return this.x=t+l*c+r*d-o*u,this.y=i+l*u+o*c-a*d,this.z=s+l*d+a*u-r*c,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,s=this.z,a=e.elements;return this.x=a[0]*t+a[4]*i+a[8]*s,this.y=a[1]*t+a[5]*i+a[9]*s,this.z=a[2]*t+a[6]*i+a[10]*s,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Je(this.x,e.x,t.x),this.y=Je(this.y,e.y,t.y),this.z=Je(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=Je(this.x,e,t),this.y=Je(this.y,e,t),this.z=Je(this.z,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Je(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,s=e.y,a=e.z,r=t.x,o=t.y,l=t.z;return this.x=s*l-a*o,this.y=a*r-i*l,this.z=i*o-s*r,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return Xf.copy(this).projectOnVector(e),this.sub(Xf)}reflect(e){return this.sub(Xf.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(Je(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,s=this.z-e.z;return t*t+i*i+s*s}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const s=Math.sin(t)*e;return this.x=s*Math.sin(i),this.y=Math.cos(t)*e,this.z=s*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),s=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=s,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=Math.random()*Math.PI*2,t=Math.random()*2-1,i=Math.sqrt(1-t*t);return this.x=i*Math.cos(e),this.y=t,this.z=i*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Xf=new T,Yy=new ht;class rt{constructor(e,t,i,s,a,r,o,l,c){rt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c)}set(e,t,i,s,a,r,o,l,c){const u=this.elements;return u[0]=e,u[1]=s,u[2]=o,u[3]=t,u[4]=a,u[5]=l,u[6]=i,u[7]=r,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[3],l=i[6],c=i[1],u=i[4],d=i[7],h=i[2],f=i[5],p=i[8],g=s[0],_=s[3],m=s[6],v=s[1],y=s[4],b=s[7],S=s[2],x=s[5],M=s[8];return a[0]=r*g+o*v+l*S,a[3]=r*_+o*y+l*x,a[6]=r*m+o*b+l*M,a[1]=c*g+u*v+d*S,a[4]=c*_+u*y+d*x,a[7]=c*m+u*b+d*M,a[2]=h*g+f*v+p*S,a[5]=h*_+f*y+p*x,a[8]=h*m+f*b+p*M,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8];return t*r*u-t*o*c-i*a*u+i*o*l+s*a*c-s*r*l}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=u*r-o*c,h=o*l-u*a,f=c*a-r*l,p=t*d+i*h+s*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);const g=1/p;return e[0]=d*g,e[1]=(s*c-u*i)*g,e[2]=(o*i-s*r)*g,e[3]=h*g,e[4]=(u*t-s*l)*g,e[5]=(s*a-o*t)*g,e[6]=f*g,e[7]=(i*l-c*t)*g,e[8]=(r*t-i*a)*g,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,s,a,r,o){const l=Math.cos(a),c=Math.sin(a);return this.set(i*l,i*c,-i*(l*r+c*o)+r+e,-s*c,s*l,-s*(-c*r+l*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(Kf.makeScale(e,t)),this}rotate(e){return this.premultiply(Kf.makeRotation(-e)),this}translate(e,t){return this.premultiply(Kf.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,i,t,0,0,0,1),this}makeScale(e,t){return this.set(e,0,0,0,t,0,0,0,1),this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<9;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}}const Kf=new rt;function QS(n){for(let e=n.length-1;e>=0;--e)if(n[e]>=65535)return!0;return!1}const QA={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function lo(n,e){return new QA[n](e)}function uc(n){return document.createElementNS("http://www.w3.org/1999/xhtml",n)}function eT(){const n=uc("canvas");return n.style.display="block",n}const jy={};function dc(n){n in jy||(jy[n]=!0,console.warn(n))}function eR(n,e,t){return new Promise(function(i,s){function a(){switch(n.clientWaitSync(e,n.SYNC_FLUSH_COMMANDS_BIT,0)){case n.WAIT_FAILED:s();break;case n.TIMEOUT_EXPIRED:setTimeout(a,t);break;default:i()}}setTimeout(a,t)})}const Zy=new rt().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Jy=new rt().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function tR(){const n={enabled:!0,workingColorSpace:wn,spaces:{},convert:function(s,a,r){return this.enabled===!1||a===r||!a||!r||(this.spaces[a].transfer===It&&(s.r=Gs(s.r),s.g=Gs(s.g),s.b=Gs(s.b)),this.spaces[a].primaries!==this.spaces[r].primaries&&(s.applyMatrix3(this.spaces[a].toXYZ),s.applyMatrix3(this.spaces[r].fromXYZ)),this.spaces[r].transfer===It&&(s.r=mo(s.r),s.g=mo(s.g),s.b=mo(s.b))),s},workingToColorSpace:function(s,a){return this.convert(s,this.workingColorSpace,a)},colorSpaceToWorking:function(s,a){return this.convert(s,a,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===Bs?lc:this.spaces[s].transfer},getToneMappingMode:function(s){return this.spaces[s].outputColorSpaceConfig.toneMappingMode||"standard"},getLuminanceCoefficients:function(s,a=this.workingColorSpace){return s.fromArray(this.spaces[a].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,a,r){return s.copy(this.spaces[a].toXYZ).multiply(this.spaces[r].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(s,a){return dc("THREE.ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace()."),n.workingToColorSpace(s,a)},toWorkingColorSpace:function(s,a){return dc("THREE.ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking()."),n.colorSpaceToWorking(s,a)}},e=[.64,.33,.3,.6,.15,.06],t=[.2126,.7152,.0722],i=[.3127,.329];return n.define({[wn]:{primaries:e,whitePoint:i,transfer:lc,toXYZ:Zy,fromXYZ:Jy,luminanceCoefficients:t,workingColorSpaceConfig:{unpackColorSpace:yt},outputColorSpaceConfig:{drawingBufferColorSpace:yt}},[yt]:{primaries:e,whitePoint:i,transfer:It,toXYZ:Zy,fromXYZ:Jy,luminanceCoefficients:t,outputColorSpaceConfig:{drawingBufferColorSpace:yt}}}),n}const ot=tR();function Gs(n){return n<.04045?n*.0773993808:Math.pow(n*.9478672986+.0521327014,2.4)}function mo(n){return n<.0031308?n*12.92:1.055*Math.pow(n,.41666)-.055}let Rr;class tT{static getDataURL(e,t="image/png"){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>"u")return e.src;let i;if(e instanceof HTMLCanvasElement)i=e;else{Rr===void 0&&(Rr=uc("canvas")),Rr.width=e.width,Rr.height=e.height;const s=Rr.getContext("2d");e instanceof ImageData?s.putImageData(e,0,0):s.drawImage(e,0,0,e.width,e.height),i=Rr}return i.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<"u"&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&e instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&e instanceof ImageBitmap){const t=uc("canvas");t.width=e.width,t.height=e.height;const i=t.getContext("2d");i.drawImage(e,0,0,e.width,e.height);const s=i.getImageData(0,0,e.width,e.height),a=s.data;for(let r=0;r1),this.pmremVersion=0}get width(){return this.source.getSize(Yf).x}get height(){return this.source.getSize(Yf).y}get depth(){return this.source.getSize(Yf).z}get image(){return this.source.data}set image(e=null){this.source.data=e}updateMatrix(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}clone(){return new this.constructor().copy(this)}copy(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.channel=e.channel,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Texture.setValues(): parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Texture.setValues(): property '${t}' does not exist.`);continue}s&&i&&s.isVector2&&i.isVector2||s&&i&&s.isVector3&&i.isVector3||s&&i&&s.isMatrix3&&i.isMatrix3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const i={metadata:{version:4.7,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,internalFormat:this.internalFormat,type:this.type,colorSpace:this.colorSpace,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,generateMipmaps:this.generateMipmaps,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return Object.keys(this.userData).length>0&&(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(e){if(this.mapping!==Kh)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case xs:e.x=e.x-Math.floor(e.x);break;case Wn:e.x=e.x<0?0:1;break;case Io:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case xs:e.y=e.y-Math.floor(e.y);break;case Wn:e.y=e.y<0?0:1;break;case Io:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}}zt.DEFAULT_IMAGE=null;zt.DEFAULT_MAPPING=Kh;zt.DEFAULT_ANISOTROPY=1;class Ye{constructor(e=0,t=0,i=0,s=1){Ye.prototype.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=s}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,s){return this.x=e,this.y=t,this.z=i,this.w=s,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e){return this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e){return this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,s=this.z,a=this.w,r=e.elements;return this.x=r[0]*t+r[4]*i+r[8]*s+r[12]*a,this.y=r[1]*t+r[5]*i+r[9]*s+r[13]*a,this.z=r[2]*t+r[6]*i+r[10]*s+r[14]*a,this.w=r[3]*t+r[7]*i+r[11]*s+r[15]*a,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,s,a;const l=e.elements,c=l[0],u=l[4],d=l[8],h=l[1],f=l[5],p=l[9],g=l[2],_=l[6],m=l[10];if(Math.abs(u-h)<.01&&Math.abs(d-g)<.01&&Math.abs(p-_)<.01){if(Math.abs(u+h)<.1&&Math.abs(d+g)<.1&&Math.abs(p+_)<.1&&Math.abs(c+f+m-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;const y=(c+1)/2,b=(f+1)/2,S=(m+1)/2,x=(u+h)/4,M=(d+g)/4,C=(p+_)/4;return y>b&&y>S?y<.01?(i=0,s=.707106781,a=.707106781):(i=Math.sqrt(y),s=x/i,a=M/i):b>S?b<.01?(i=.707106781,s=0,a=.707106781):(s=Math.sqrt(b),i=x/s,a=C/s):S<.01?(i=.707106781,s=.707106781,a=0):(a=Math.sqrt(S),i=M/a,s=C/a),this.set(i,s,a,t),this}let v=Math.sqrt((_-p)*(_-p)+(d-g)*(d-g)+(h-u)*(h-u));return Math.abs(v)<.001&&(v=1),this.x=(_-p)/v,this.y=(d-g)/v,this.z=(h-u)/v,this.w=Math.acos((c+f+m-1)/2),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this.w=t[15],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Je(this.x,e.x,t.x),this.y=Je(this.y,e.y,t.y),this.z=Je(this.z,e.z,t.z),this.w=Je(this.w,e.w,t.w),this}clampScalar(e,t){return this.x=Je(this.x,e,t),this.y=Je(this.y,e,t),this.z=Je(this.z,e,t),this.w=Je(this.w,e,t),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Je(i,e,t))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t){return this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class Ig extends Ts{constructor(e=1,t=1,i={}){super(),i=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:Gt,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1,depth:1,multiview:!1},i),this.isRenderTarget=!0,this.width=e,this.height=t,this.depth=i.depth,this.scissor=new Ye(0,0,e,t),this.scissorTest=!1,this.viewport=new Ye(0,0,e,t);const s={width:e,height:t,depth:i.depth},a=new zt(s);this.textures=[];const r=i.count;for(let o=0;o1;this.dispose()}this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,i=e.textures.length;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y&&e.z>=this.min.z&&e.z<=this.max.z}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y&&e.max.z>=this.min.z&&e.min.z<=this.max.z}intersectsSphere(e){return this.clampPoint(e.center,Ui),Ui.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x>0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t<=-e.constant&&i>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(al),Hc.subVectors(this.max,al),Pr.subVectors(e.a,al),Ir.subVectors(e.b,al),Lr.subVectors(e.c,al),js.subVectors(Ir,Pr),Zs.subVectors(Lr,Ir),Ea.subVectors(Pr,Lr);let t=[0,-js.z,js.y,0,-Zs.z,Zs.y,0,-Ea.z,Ea.y,js.z,0,-js.x,Zs.z,0,-Zs.x,Ea.z,0,-Ea.x,-js.y,js.x,0,-Zs.y,Zs.x,0,-Ea.y,Ea.x,0];return!jf(t,Pr,Ir,Lr,Hc)||(t=[1,0,0,0,1,0,0,0,1],!jf(t,Pr,Ir,Lr,Hc))?!1:(Vc.crossVectors(js,Zs),t=[Vc.x,Vc.y,Vc.z],jf(t,Pr,Ir,Lr,Hc))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,Ui).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(Ui).length()*.5),e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(Es[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),Es[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),Es[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),Es[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),Es[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),Es[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),Es[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),Es[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(Es),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}}const Es=[new T,new T,new T,new T,new T,new T,new T,new T],Ui=new T,zc=new bn,Pr=new T,Ir=new T,Lr=new T,js=new T,Zs=new T,Ea=new T,al=new T,Hc=new T,Vc=new T,Ca=new T;function jf(n,e,t,i,s){for(let a=0,r=n.length-3;a<=r;a+=3){Ca.fromArray(n,a);const o=s.x*Math.abs(Ca.x)+s.y*Math.abs(Ca.y)+s.z*Math.abs(Ca.z),l=e.dot(Ca),c=t.dot(Ca),u=i.dot(Ca);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))>o)return!1}return!0}const rR=new bn,rl=new T,Zf=new T;class xn{constructor(e=new T,t=-1){this.isSphere=!0,this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const i=this.center;t!==void 0?i.copy(t):rR.setFromPoints(e).getCenter(i);let s=0;for(let a=0,r=e.length;athis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){if(this.isEmpty())return this.center.copy(e),this.radius=0,this;rl.subVectors(e,this.center);const t=rl.lengthSq();if(t>this.radius*this.radius){const i=Math.sqrt(t),s=(i-this.radius)*.5;this.center.addScaledVector(rl,s/i),this.radius+=s}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Zf.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(rl.copy(e.center).add(Zf)),this.expandByPoint(rl.copy(e.center).sub(Zf))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}}const Cs=new T,Jf=new T,Gc=new T,Js=new T,Qf=new T,$c=new T,ep=new T;class Tr{constructor(e=new T,t=new T(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.origin).addScaledVector(this.direction,e)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,Cs)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i<0?t.copy(this.origin):t.copy(this.origin).addScaledVector(this.direction,i)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=Cs.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Cs.copy(this.origin).addScaledVector(this.direction,t),Cs.distanceToSquared(e))}distanceSqToSegment(e,t,i,s){Jf.copy(e).add(t).multiplyScalar(.5),Gc.copy(t).sub(e).normalize(),Js.copy(this.origin).sub(Jf);const a=e.distanceTo(t)*.5,r=-this.direction.dot(Gc),o=Js.dot(this.direction),l=-Js.dot(Gc),c=Js.lengthSq(),u=Math.abs(1-r*r);let d,h,f,p;if(u>0)if(d=r*l-o,h=r*o-l,p=a*u,d>=0)if(h>=-p)if(h<=p){const g=1/u;d*=g,h*=g,f=d*(d+r*h+2*o)+h*(r*d+h+2*l)+c}else h=a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h=-a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;else h<=-p?(d=Math.max(0,-(-r*a+o)),h=d>0?-a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c):h<=p?(d=0,h=Math.min(Math.max(-a,-l),a),f=h*(h+2*l)+c):(d=Math.max(0,-(r*a+o)),h=d>0?a:Math.min(Math.max(-a,-l),a),f=-d*d+h*(h+2*l)+c);else h=r>0?-a:a,d=Math.max(0,-(r*h+o)),f=-d*d+h*(h+2*l)+c;return i&&i.copy(this.origin).addScaledVector(this.direction,d),s&&s.copy(Jf).addScaledVector(Gc,h),f}intersectSphere(e,t){Cs.subVectors(e.center,this.origin);const i=Cs.dot(this.direction),s=Cs.dot(Cs)-i*i,a=e.radius*e.radius;if(s>a)return null;const r=Math.sqrt(a-s),o=i-r,l=i+r;return l<0?null:o<0?this.at(l,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i>=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let i,s,a,r,o,l;const c=1/this.direction.x,u=1/this.direction.y,d=1/this.direction.z,h=this.origin;return c>=0?(i=(e.min.x-h.x)*c,s=(e.max.x-h.x)*c):(i=(e.max.x-h.x)*c,s=(e.min.x-h.x)*c),u>=0?(a=(e.min.y-h.y)*u,r=(e.max.y-h.y)*u):(a=(e.max.y-h.y)*u,r=(e.min.y-h.y)*u),i>r||a>s||((a>i||isNaN(i))&&(i=a),(r=0?(o=(e.min.z-h.z)*d,l=(e.max.z-h.z)*d):(o=(e.max.z-h.z)*d,l=(e.min.z-h.z)*d),i>l||o>s)||((o>i||i!==i)&&(i=o),(l=0?i:s,t)}intersectsBox(e){return this.intersectBox(e,Cs)!==null}intersectTriangle(e,t,i,s,a){Qf.subVectors(t,e),$c.subVectors(i,e),ep.crossVectors(Qf,$c);let r=this.direction.dot(ep),o;if(r>0){if(s)return null;o=1}else if(r<0)o=-1,r=-r;else return null;Js.subVectors(this.origin,e);const l=o*this.direction.dot($c.crossVectors(Js,$c));if(l<0)return null;const c=o*this.direction.dot(Qf.cross(Js));if(c<0||l+c>r)return null;const u=-o*Js.dot(ep);return u<0?null:this.at(u/r,a)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class Ee{constructor(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){Ee.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],e!==void 0&&this.set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_)}set(e,t,i,s,a,r,o,l,c,u,d,h,f,p,g,_){const m=this.elements;return m[0]=e,m[4]=t,m[8]=i,m[12]=s,m[1]=a,m[5]=r,m[9]=o,m[13]=l,m[2]=c,m[6]=u,m[10]=d,m[14]=h,m[3]=f,m[7]=p,m[11]=g,m[15]=_,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new Ee().fromArray(this.elements)}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){const t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,i=e.elements,s=1/kr.setFromMatrixColumn(e,0).length(),a=1/kr.setFromMatrixColumn(e,1).length(),r=1/kr.setFromMatrixColumn(e,2).length();return t[0]=i[0]*s,t[1]=i[1]*s,t[2]=i[2]*s,t[3]=0,t[4]=i[4]*a,t[5]=i[5]*a,t[6]=i[6]*a,t[7]=0,t[8]=i[8]*r,t[9]=i[9]*r,t[10]=i[10]*r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){const t=this.elements,i=e.x,s=e.y,a=e.z,r=Math.cos(i),o=Math.sin(i),l=Math.cos(s),c=Math.sin(s),u=Math.cos(a),d=Math.sin(a);if(e.order==="XYZ"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=-l*d,t[8]=c,t[1]=f+p*c,t[5]=h-g*c,t[9]=-o*l,t[2]=g-h*c,t[6]=p+f*c,t[10]=r*l}else if(e.order==="YXZ"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h+g*o,t[4]=p*o-f,t[8]=r*c,t[1]=r*d,t[5]=r*u,t[9]=-o,t[2]=f*o-p,t[6]=g+h*o,t[10]=r*l}else if(e.order==="ZXY"){const h=l*u,f=l*d,p=c*u,g=c*d;t[0]=h-g*o,t[4]=-r*d,t[8]=p+f*o,t[1]=f+p*o,t[5]=r*u,t[9]=g-h*o,t[2]=-r*c,t[6]=o,t[10]=r*l}else if(e.order==="ZYX"){const h=r*u,f=r*d,p=o*u,g=o*d;t[0]=l*u,t[4]=p*c-f,t[8]=h*c+g,t[1]=l*d,t[5]=g*c+h,t[9]=f*c-p,t[2]=-c,t[6]=o*l,t[10]=r*l}else if(e.order==="YZX"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=g-h*d,t[8]=p*d+f,t[1]=d,t[5]=r*u,t[9]=-o*u,t[2]=-c*u,t[6]=f*d+p,t[10]=h-g*d}else if(e.order==="XZY"){const h=r*l,f=r*c,p=o*l,g=o*c;t[0]=l*u,t[4]=-d,t[8]=c*u,t[1]=h*d+g,t[5]=r*u,t[9]=f*d-p,t[2]=p*d-f,t[6]=o*u,t[10]=g*d+h}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(oR,e,lR)}lookAt(e,t,i){const s=this.elements;return fi.subVectors(e,t),fi.lengthSq()===0&&(fi.z=1),fi.normalize(),Qs.crossVectors(i,fi),Qs.lengthSq()===0&&(Math.abs(i.z)===1?fi.x+=1e-4:fi.z+=1e-4,fi.normalize(),Qs.crossVectors(i,fi)),Qs.normalize(),Wc.crossVectors(fi,Qs),s[0]=Qs.x,s[4]=Wc.x,s[8]=fi.x,s[1]=Qs.y,s[5]=Wc.y,s[9]=fi.y,s[2]=Qs.z,s[6]=Wc.z,s[10]=fi.z,this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,s=t.elements,a=this.elements,r=i[0],o=i[4],l=i[8],c=i[12],u=i[1],d=i[5],h=i[9],f=i[13],p=i[2],g=i[6],_=i[10],m=i[14],v=i[3],y=i[7],b=i[11],S=i[15],x=s[0],M=s[4],C=s[8],w=s[12],E=s[1],R=s[5],L=s[9],O=s[13],D=s[2],U=s[6],F=s[10],W=s[14],H=s[3],ie=s[7],le=s[11],me=s[15];return a[0]=r*x+o*E+l*D+c*H,a[4]=r*M+o*R+l*U+c*ie,a[8]=r*C+o*L+l*F+c*le,a[12]=r*w+o*O+l*W+c*me,a[1]=u*x+d*E+h*D+f*H,a[5]=u*M+d*R+h*U+f*ie,a[9]=u*C+d*L+h*F+f*le,a[13]=u*w+d*O+h*W+f*me,a[2]=p*x+g*E+_*D+m*H,a[6]=p*M+g*R+_*U+m*ie,a[10]=p*C+g*L+_*F+m*le,a[14]=p*w+g*O+_*W+m*me,a[3]=v*x+y*E+b*D+S*H,a[7]=v*M+y*R+b*U+S*ie,a[11]=v*C+y*L+b*F+S*le,a[15]=v*w+y*O+b*W+S*me,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[4],s=e[8],a=e[12],r=e[1],o=e[5],l=e[9],c=e[13],u=e[2],d=e[6],h=e[10],f=e[14],p=e[3],g=e[7],_=e[11],m=e[15];return p*(+a*l*d-s*c*d-a*o*h+i*c*h+s*o*f-i*l*f)+g*(+t*l*f-t*c*h+a*r*h-s*r*f+s*c*u-a*l*u)+_*(+t*c*d-t*o*f-a*r*d+i*r*f+a*o*u-i*c*u)+m*(-s*o*u-t*l*d+t*o*h+s*r*d-i*r*h+i*l*u)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){const s=this.elements;return e.isVector3?(s[12]=e.x,s[13]=e.y,s[14]=e.z):(s[12]=e,s[13]=t,s[14]=i),this}invert(){const e=this.elements,t=e[0],i=e[1],s=e[2],a=e[3],r=e[4],o=e[5],l=e[6],c=e[7],u=e[8],d=e[9],h=e[10],f=e[11],p=e[12],g=e[13],_=e[14],m=e[15],v=d*_*c-g*h*c+g*l*f-o*_*f-d*l*m+o*h*m,y=p*h*c-u*_*c-p*l*f+r*_*f+u*l*m-r*h*m,b=u*g*c-p*d*c+p*o*f-r*g*f-u*o*m+r*d*m,S=p*d*l-u*g*l-p*o*h+r*g*h+u*o*_-r*d*_,x=t*v+i*y+s*b+a*S;if(x===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/x;return e[0]=v*M,e[1]=(g*h*a-d*_*a-g*s*f+i*_*f+d*s*m-i*h*m)*M,e[2]=(o*_*a-g*l*a+g*s*c-i*_*c-o*s*m+i*l*m)*M,e[3]=(d*l*a-o*h*a-d*s*c+i*h*c+o*s*f-i*l*f)*M,e[4]=y*M,e[5]=(u*_*a-p*h*a+p*s*f-t*_*f-u*s*m+t*h*m)*M,e[6]=(p*l*a-r*_*a-p*s*c+t*_*c+r*s*m-t*l*m)*M,e[7]=(r*h*a-u*l*a+u*s*c-t*h*c-r*s*f+t*l*f)*M,e[8]=b*M,e[9]=(p*d*a-u*g*a-p*i*f+t*g*f+u*i*m-t*d*m)*M,e[10]=(r*g*a-p*o*a+p*i*c-t*g*c-r*i*m+t*o*m)*M,e[11]=(u*o*a-r*d*a-u*i*c+t*d*c+r*i*f-t*o*f)*M,e[12]=S*M,e[13]=(u*g*s-p*d*s+p*i*h-t*g*h-u*i*_+t*d*_)*M,e[14]=(p*o*s-r*g*s-p*i*l+t*g*l+r*i*_-t*o*_)*M,e[15]=(r*d*s-u*o*s+u*i*l-t*d*l-r*i*h+t*o*h)*M,this}scale(e){const t=this.elements,i=e.x,s=e.y,a=e.z;return t[0]*=i,t[4]*=s,t[8]*=a,t[1]*=i,t[5]*=s,t[9]*=a,t[2]*=i,t[6]*=s,t[10]*=a,t[3]*=i,t[7]*=s,t[11]*=a,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],i=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],s=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,i,s))}makeTranslation(e,t,i){return e.isVector3?this.set(1,0,0,e.x,0,1,0,e.y,0,0,1,e.z,0,0,0,1):this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const i=Math.cos(t),s=Math.sin(t),a=1-i,r=e.x,o=e.y,l=e.z,c=a*r,u=a*o;return this.set(c*r+i,c*o-s*l,c*l+s*o,0,c*o+s*l,u*o+i,u*l-s*r,0,c*l-s*o,u*l+s*r,a*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,s,a,r){return this.set(1,i,a,0,e,1,r,0,t,s,1,0,0,0,0,1),this}compose(e,t,i){const s=this.elements,a=t._x,r=t._y,o=t._z,l=t._w,c=a+a,u=r+r,d=o+o,h=a*c,f=a*u,p=a*d,g=r*u,_=r*d,m=o*d,v=l*c,y=l*u,b=l*d,S=i.x,x=i.y,M=i.z;return s[0]=(1-(g+m))*S,s[1]=(f+b)*S,s[2]=(p-y)*S,s[3]=0,s[4]=(f-b)*x,s[5]=(1-(h+m))*x,s[6]=(_+v)*x,s[7]=0,s[8]=(p+y)*M,s[9]=(_-v)*M,s[10]=(1-(h+g))*M,s[11]=0,s[12]=e.x,s[13]=e.y,s[14]=e.z,s[15]=1,this}decompose(e,t,i){const s=this.elements;let a=kr.set(s[0],s[1],s[2]).length();const r=kr.set(s[4],s[5],s[6]).length(),o=kr.set(s[8],s[9],s[10]).length();this.determinant()<0&&(a=-a),e.x=s[12],e.y=s[13],e.z=s[14],Bi.copy(this);const c=1/a,u=1/r,d=1/o;return Bi.elements[0]*=c,Bi.elements[1]*=c,Bi.elements[2]*=c,Bi.elements[4]*=u,Bi.elements[5]*=u,Bi.elements[6]*=u,Bi.elements[8]*=d,Bi.elements[9]*=d,Bi.elements[10]*=d,t.setFromRotationMatrix(Bi),i.x=a,i.y=r,i.z=o,this}makePerspective(e,t,i,s,a,r,o=yi,l=!1){const c=this.elements,u=2*a/(t-e),d=2*a/(i-s),h=(t+e)/(t-e),f=(i+s)/(i-s);let p,g;if(l)p=a/(r-a),g=r*a/(r-a);else if(o===yi)p=-(r+a)/(r-a),g=-2*r*a/(r-a);else if(o===No)p=-r/(r-a),g=-r*a/(r-a);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=h,c[12]=0,c[1]=0,c[5]=d,c[9]=f,c[13]=0,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=-1,c[15]=0,this}makeOrthographic(e,t,i,s,a,r,o=yi,l=!1){const c=this.elements,u=2/(t-e),d=2/(i-s),h=-(t+e)/(t-e),f=-(i+s)/(i-s);let p,g;if(l)p=1/(r-a),g=r/(r-a);else if(o===yi)p=-2/(r-a),g=-(r+a)/(r-a);else if(o===No)p=-1/(r-a),g=-a/(r-a);else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return c[0]=u,c[4]=0,c[8]=0,c[12]=h,c[1]=0,c[5]=d,c[9]=0,c[13]=f,c[2]=0,c[6]=0,c[10]=p,c[14]=g,c[3]=0,c[7]=0,c[11]=0,c[15]=1,this}equals(e){const t=this.elements,i=e.elements;for(let s=0;s<16;s++)if(t[s]!==i[s])return!1;return!0}fromArray(e,t=0){for(let i=0;i<16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}}const kr=new T,Bi=new Ee,oR=new T(0,0,0),lR=new T(1,1,1),Qs=new T,Wc=new T,fi=new T,Qy=new Ee,e0=new ht;class rn{constructor(e=0,t=0,i=0,s=rn.DEFAULT_ORDER){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=s}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,s=this._order){return this._x=e,this._y=t,this._z=i,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){const s=e.elements,a=s[0],r=s[4],o=s[8],l=s[1],c=s[5],u=s[9],d=s[2],h=s[6],f=s[10];switch(t){case"XYZ":this._y=Math.asin(Je(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-u,f),this._z=Math.atan2(-r,a)):(this._x=Math.atan2(h,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Je(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(o,f),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-d,a),this._z=0);break;case"ZXY":this._x=Math.asin(Je(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-d,f),this._z=Math.atan2(-r,c)):(this._y=0,this._z=Math.atan2(l,a));break;case"ZYX":this._y=Math.asin(-Je(d,-1,1)),Math.abs(d)<.9999999?(this._x=Math.atan2(h,f),this._z=Math.atan2(l,a)):(this._x=0,this._z=Math.atan2(-r,c));break;case"YZX":this._z=Math.asin(Je(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-d,a)):(this._x=0,this._y=Math.atan2(o,f));break;case"XZY":this._z=Math.asin(-Je(r,-1,1)),Math.abs(r)<.9999999?(this._x=Math.atan2(h,c),this._y=Math.atan2(o,a)):(this._x=Math.atan2(-u,f),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+t)}return this._order=t,i===!0&&this._onChangeCallback(),this}setFromQuaternion(e,t,i){return Qy.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Qy,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return e0.setFromEuler(this),this.setFromQuaternion(e0,e)}equals(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0&&(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}rn.DEFAULT_ORDER="XYZ";class af{constructor(){this.mask=1}set(e){this.mask=(1<>>0}enable(e){this.mask|=1<1){for(let t=0;t1){for(let i=0;i0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.geometryInfo=this._geometryInfo.map(o=>({...o,boundingBox:o.boundingBox?o.boundingBox.toJSON():void 0,boundingSphere:o.boundingSphere?o.boundingSphere.toJSON():void 0})),s.instanceInfo=this._instanceInfo.map(o=>({...o})),s.availableInstanceIds=this._availableInstanceIds.slice(),s.availableGeometryIds=this._availableGeometryIds.slice(),s.nextIndexStart=this._nextIndexStart,s.nextVertexStart=this._nextVertexStart,s.geometryCount=this._geometryCount,s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.matricesTexture=this._matricesTexture.toJSON(e),s.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(s.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(s.boundingBox=this.boundingBox.toJSON()));function a(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(e).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=a(e.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(i.geometries=o),l.length>0&&(i.materials=l),c.length>0&&(i.textures=c),u.length>0&&(i.images=u),d.length>0&&(i.shapes=d),h.length>0&&(i.skeletons=h),f.length>0&&(i.animations=f),p.length>0&&(i.nodes=p)}return i.object=s,i;function r(o){const l=[];for(const c in o){const u=o[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;i0?s.multiplyScalar(1/Math.sqrt(a)):s.set(0,0,0)}static getBarycoord(e,t,i,s,a){zi.subVectors(s,t),Rs.subVectors(i,t),np.subVectors(e,t);const r=zi.dot(zi),o=zi.dot(Rs),l=zi.dot(np),c=Rs.dot(Rs),u=Rs.dot(np),d=r*c-o*o;if(d===0)return a.set(0,0,0),null;const h=1/d,f=(c*l-o*u)*h,p=(r*u-o*l)*h;return a.set(1-f-p,p,f)}static containsPoint(e,t,i,s){return this.getBarycoord(e,t,i,s,Ps)===null?!1:Ps.x>=0&&Ps.y>=0&&Ps.x+Ps.y<=1}static getInterpolation(e,t,i,s,a,r,o,l){return this.getBarycoord(e,t,i,s,Ps)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(a,Ps.x),l.addScaledVector(r,Ps.y),l.addScaledVector(o,Ps.z),l)}static getInterpolatedAttribute(e,t,i,s,a,r){return rp.setScalar(0),op.setScalar(0),lp.setScalar(0),rp.fromBufferAttribute(e,t),op.fromBufferAttribute(e,i),lp.fromBufferAttribute(e,s),r.setScalar(0),r.addScaledVector(rp,a.x),r.addScaledVector(op,a.y),r.addScaledVector(lp,a.z),r}static isFrontFacing(e,t,i,s){return zi.subVectors(i,t),Rs.subVectors(e,t),zi.cross(Rs).dot(s)<0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,s){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[s]),this}setFromAttributeAndIndices(e,t,i,s){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,s),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return zi.subVectors(this.c,this.b),Rs.subVectors(this.a,this.b),zi.cross(Rs).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return ii.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return ii.getBarycoord(e,this.a,this.b,this.c,t)}getInterpolation(e,t,i,s,a){return ii.getInterpolation(e,this.a,this.b,this.c,t,i,s,a)}containsPoint(e){return ii.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return ii.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,s=this.b,a=this.c;let r,o;Fr.subVectors(s,i),Nr.subVectors(a,i),ip.subVectors(e,i);const l=Fr.dot(ip),c=Nr.dot(ip);if(l<=0&&c<=0)return t.copy(i);sp.subVectors(e,s);const u=Fr.dot(sp),d=Nr.dot(sp);if(u>=0&&d<=u)return t.copy(s);const h=l*d-u*c;if(h<=0&&l>=0&&u<=0)return r=l/(l-u),t.copy(i).addScaledVector(Fr,r);ap.subVectors(e,a);const f=Fr.dot(ap),p=Nr.dot(ap);if(p>=0&&f<=p)return t.copy(a);const g=f*c-l*p;if(g<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(i).addScaledVector(Nr,o);const _=u*p-f*d;if(_<=0&&d-u>=0&&f-p>=0)return r0.subVectors(a,s),o=(d-u)/(d-u+(f-p)),t.copy(s).addScaledVector(r0,o);const m=1/(_+g+h);return r=g*m,o=h*m,t.copy(i).addScaledVector(Fr,r).addScaledVector(Nr,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}}const nT={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ea={h:0,s:0,l:0},Kc={h:0,s:0,l:0};function cp(n,e,t){return t<0&&(t+=1),t>1&&(t-=1),t<1/6?n+(e-n)*6*t:t<1/2?e:t<2/3?n+(e-n)*6*(2/3-t):n}class de{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,i)}set(e,t,i){if(t===void 0&&i===void 0){const s=e;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(e,t,i);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=yt){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,ot.colorSpaceToWorking(this,t),this}setRGB(e,t,i,s=ot.workingColorSpace){return this.r=e,this.g=t,this.b=i,ot.colorSpaceToWorking(this,s),this}setHSL(e,t,i,s=ot.workingColorSpace){if(e=Pg(e,1),t=Je(t,0,1),i=Je(i,0,1),t===0)this.r=this.g=this.b=i;else{const a=i<=.5?i*(1+t):i+t-i*t,r=2*i-a;this.r=cp(r,a,e+1/3),this.g=cp(r,a,e),this.b=cp(r,a,e-1/3)}return ot.colorSpaceToWorking(this,s),this}setStyle(e,t=yt){function i(a){a!==void 0&&parseFloat(a)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(e)){let a;const r=s[1],o=s[2];switch(r){case"rgb":case"rgba":if(a=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(255,parseInt(a[1],10))/255,Math.min(255,parseInt(a[2],10))/255,Math.min(255,parseInt(a[3],10))/255,t);if(a=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setRGB(Math.min(100,parseInt(a[1],10))/100,Math.min(100,parseInt(a[2],10))/100,Math.min(100,parseInt(a[3],10))/100,t);break;case"hsl":case"hsla":if(a=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return i(a[4]),this.setHSL(parseFloat(a[1])/360,parseFloat(a[2])/100,parseFloat(a[3])/100,t);break;default:console.warn("THREE.Color: Unknown color model "+e)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(e)){const a=s[1],r=a.length;if(r===3)return this.setRGB(parseInt(a.charAt(0),16)/15,parseInt(a.charAt(1),16)/15,parseInt(a.charAt(2),16)/15,t);if(r===6)return this.setHex(parseInt(a,16),t);console.warn("THREE.Color: Invalid hex color "+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=yt){const i=nT[e.toLowerCase()];return i!==void 0?this.setHex(i,t):console.warn("THREE.Color: Unknown color "+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=Gs(e.r),this.g=Gs(e.g),this.b=Gs(e.b),this}copyLinearToSRGB(e){return this.r=mo(e.r),this.g=mo(e.g),this.b=mo(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=yt){return ot.workingToColorSpace(An.copy(this),e),Math.round(Je(An.r*255,0,255))*65536+Math.round(Je(An.g*255,0,255))*256+Math.round(Je(An.b*255,0,255))}getHexString(e=yt){return("000000"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=ot.workingColorSpace){ot.workingToColorSpace(An.copy(this),t);const i=An.r,s=An.g,a=An.b,r=Math.max(i,s,a),o=Math.min(i,s,a);let l,c;const u=(o+r)/2;if(o===r)l=0,c=0;else{const d=r-o;switch(c=u<=.5?d/(r+o):d/(2-r-o),r){case i:l=(s-a)/d+(s0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){console.warn(`THREE.Material: parameter '${t}' has value of undefined.`);continue}const s=this[t];if(s===void 0){console.warn(`THREE.Material: '${t}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(i):s&&s.isVector3&&i&&i.isVector3?s.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e=="string";t&&(e={textures:{},images:{}});const i={metadata:{version:4.7,type:"Material",generator:"Material.toJSON"}};i.uuid=this.uuid,i.type=this.type,this.name!==""&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),this.roughness!==void 0&&(i.roughness=this.roughness),this.metalness!==void 0&&(i.metalness=this.metalness),this.sheen!==void 0&&(i.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(i.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(i.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(i.shininess=this.shininess),this.clearcoat!==void 0&&(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(i.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(i.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(i.dispersion=this.dispersion),this.iridescence!==void 0&&(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(i.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(i.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(i.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(i.combine=this.combine)),this.envMapRotation!==void 0&&(i.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(i.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(i.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(i.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(i.size=this.size),this.shadowSide!==null&&(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==dr&&(i.blending=this.blending),this.side!==bs&&(i.side=this.side),this.vertexColors===!0&&(i.vertexColors=!0),this.opacity<1&&(i.opacity=this.opacity),this.transparent===!0&&(i.transparent=!0),this.blendSrc!==sc&&(i.blendSrc=this.blendSrc),this.blendDst!==ac&&(i.blendDst=this.blendDst),this.blendEquation!==Us&&(i.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(i.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(i.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(i.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(i.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(i.blendAlpha=this.blendAlpha),this.depthFunc!==pr&&(i.depthFunc=this.depthFunc),this.depthTest===!1&&(i.depthTest=this.depthTest),this.depthWrite===!1&&(i.depthWrite=this.depthWrite),this.colorWrite===!1&&(i.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(i.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==e_&&(i.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(i.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(i.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==Ka&&(i.stencilFail=this.stencilFail),this.stencilZFail!==Ka&&(i.stencilZFail=this.stencilZFail),this.stencilZPass!==Ka&&(i.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(i.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(i.rotation=this.rotation),this.polygonOffset===!0&&(i.polygonOffset=!0),this.polygonOffsetFactor!==0&&(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(i.linewidth=this.linewidth),this.dashSize!==void 0&&(i.dashSize=this.dashSize),this.gapSize!==void 0&&(i.gapSize=this.gapSize),this.scale!==void 0&&(i.scale=this.scale),this.dithering===!0&&(i.dithering=!0),this.alphaTest>0&&(i.alphaTest=this.alphaTest),this.alphaHash===!0&&(i.alphaHash=!0),this.alphaToCoverage===!0&&(i.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(i.premultipliedAlpha=!0),this.forceSinglePass===!0&&(i.forceSinglePass=!0),this.wireframe===!0&&(i.wireframe=!0),this.wireframeLinewidth>1&&(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(i.flatShading=!0),this.visible===!1&&(i.visible=!1),this.toneMapped===!1&&(i.toneMapped=!1),this.fog===!1&&(i.fog=!1),Object.keys(this.userData).length>0&&(i.userData=this.userData);function s(a){const r=[];for(const o in a){const l=a[o];delete l.metadata,r.push(l)}return r}if(t){const a=s(e.textures),r=s(e.images);a.length>0&&(i.textures=a),r.length>0&&(i.images=r)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const s=t.length;i=new Array(s);for(let a=0;a!==s;++a)i[a]=t[a].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(e){e===!0&&this.version++}}class je extends en{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new de(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new rn,this.combine=Mc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const zs=pR();function pR(){const n=new ArrayBuffer(4),e=new Float32Array(n),t=new Uint32Array(n),i=new Uint32Array(512),s=new Uint32Array(512);for(let l=0;l<256;++l){const c=l-127;c<-27?(i[l]=0,i[l|256]=32768,s[l]=24,s[l|256]=24):c<-14?(i[l]=1024>>-c-14,i[l|256]=1024>>-c-14|32768,s[l]=-c-1,s[l|256]=-c-1):c<=15?(i[l]=c+15<<10,i[l|256]=c+15<<10|32768,s[l]=13,s[l|256]=13):c<128?(i[l]=31744,i[l|256]=64512,s[l]=24,s[l|256]=24):(i[l]=31744,i[l|256]=64512,s[l]=13,s[l|256]=13)}const a=new Uint32Array(2048),r=new Uint32Array(64),o=new Uint32Array(64);for(let l=1;l<1024;++l){let c=l<<13,u=0;for(;(c&8388608)===0;)c<<=1,u-=8388608;c&=-8388609,u+=947912704,a[l]=c|u}for(let l=1024;l<2048;++l)a[l]=939524096+(l-1024<<13);for(let l=1;l<31;++l)r[l]=l<<23;r[31]=1199570944,r[32]=2147483648;for(let l=33;l<63;++l)r[l]=2147483648+(l-32<<23);r[63]=3347054592;for(let l=1;l<64;++l)l!==32&&(o[l]=1024);return{floatView:e,uint32View:t,baseTable:i,shiftTable:s,mantissaTable:a,exponentTable:r,offsetTable:o}}function Qn(n){Math.abs(n)>65504&&console.warn("THREE.DataUtils.toHalfFloat(): Value out of range."),n=Je(n,-65504,65504),zs.floatView[0]=n;const e=zs.uint32View[0],t=e>>23&511;return zs.baseTable[t]+((e&8388607)>>zs.shiftTable[t])}function Pl(n){const e=n>>10;return zs.uint32View[0]=zs.mantissaTable[zs.offsetTable[e]+(n&1023)]+zs.exponentTable[e],zs.floatView[0]}class Il{static toHalfFloat(e){return Qn(e)}static fromHalfFloat(e){return Pl(e)}}const sn=new T,qc=new ne;let mR=0;class lt{constructor(e,t,i=!1){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:mR++}),this.name="",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i,this.usage=cc,this.updateRanges=[],this.gpuType=Mn,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this.gpuType=e.gpuType,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let s=0,a=this.itemSize;st.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new bn);const e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new T(-1/0,-1/0,-1/0),new T(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,s=t.length;i0&&(e.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const s={};let a=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let d=0,h=c.length;d0&&(s[l]=u,a=!0)}a&&(e.data.morphAttributes=s,e.data.morphTargetsRelative=this.morphTargetsRelative);const r=this.groups;r.length>0&&(e.data.groups=JSON.parse(JSON.stringify(r)));const o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null&&this.setIndex(i.clone());const s=e.attributes;for(const c in s){const u=s[c];this.setAttribute(c,u.clone(t))}const a=e.morphAttributes;for(const c in a){const u=[],d=a[c];for(let h=0,f=d.length;h0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;a(e.far-e.near)**2))&&(o0.copy(a).invert(),Aa.copy(e.ray).applyMatrix4(o0),!(i.boundingBox!==null&&Aa.intersectsBox(i.boundingBox)===!1)&&this._computeIntersections(e,t,Aa)))}_computeIntersections(e,t,i){let s;const a=this.geometry,r=this.material,o=a.index,l=a.attributes.position,c=a.attributes.uv,u=a.attributes.uv1,d=a.attributes.normal,h=a.groups,f=a.drawRange;if(o!==null)if(Array.isArray(r))for(let p=0,g=h.length;pt.far?null:{distance:c,point:eu.clone(),object:n}}function tu(n,e,t,i,s,a,r,o,l,c){n.getVertexPosition(o,jc),n.getVertexPosition(l,Zc),n.getVertexPosition(c,Jc);const u=SR(n,e,t,i,jc,Zc,Jc,c0);if(u){const d=new T;ii.getBarycoord(c0,jc,Zc,Jc,d),s&&(u.uv=ii.getInterpolatedAttribute(s,o,l,c,d,new ne)),a&&(u.uv1=ii.getInterpolatedAttribute(a,o,l,c,d,new ne)),r&&(u.normal=ii.getInterpolatedAttribute(r,o,l,c,d,new T),u.normal.dot(i.direction)>0&&u.normal.multiplyScalar(-1));const h={a:o,b:l,c,normal:new T,materialIndex:0};ii.getNormal(jc,Zc,Jc,h.normal),u.face=h,u.barycoord=d}return u}class Di extends $e{constructor(e=1,t=1,i=1,s=1,a=1,r=1){super(),this.type="BoxGeometry",this.parameters={width:e,height:t,depth:i,widthSegments:s,heightSegments:a,depthSegments:r};const o=this;s=Math.floor(s),a=Math.floor(a),r=Math.floor(r);const l=[],c=[],u=[],d=[];let h=0,f=0;p("z","y","x",-1,-1,i,t,e,r,a,0),p("z","y","x",1,-1,i,t,-e,r,a,1),p("x","z","y",1,1,e,i,t,s,r,2),p("x","z","y",1,-1,e,i,-t,s,r,3),p("x","y","z",1,-1,e,t,i,s,a,4),p("x","y","z",-1,-1,e,t,-i,s,a,5),this.setIndex(l),this.setAttribute("position",new Ce(c,3)),this.setAttribute("normal",new Ce(u,3)),this.setAttribute("uv",new Ce(d,2));function p(g,_,m,v,y,b,S,x,M,C,w){const E=b/M,R=S/C,L=b/2,O=S/2,D=x/2,U=M+1,F=C+1;let W=0,H=0;const ie=new T;for(let le=0;le0?1:-1,u.push(ie.x,ie.y,ie.z),d.push(Le/M),d.push(1-le/C),W+=1}}for(let le=0;le0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const i={};for(const s in this.extensions)this.extensions[s]===!0&&(i[s]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}}class ef extends et{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Ee,this.projectionMatrix=new Ee,this.projectionMatrixInverse=new Ee,this.coordinateSystem=yi,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const ta=new T,i0=new ne,s0=new ne;class Qt extends ef{constructor(e=50,t=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=Oo*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(dr*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return Oo*2*Math.atan(Math.tan(dr*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,i){ta.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(ta.x,ta.y).multiplyScalar(-e/ta.z),ta.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(ta.x,ta.y).multiplyScalar(-e/ta.z)}getViewSize(e,t){return this.getViewBounds(e,i0,s0),t.subVectors(s0,i0)}setViewOffset(e,t,i,s,a,r){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=a,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(dr*.5*this.fov)/this.zoom,i=2*t,s=this.aspect*i,a=-.5*s;const r=this.view;if(this.view!==null&&this.view.enabled){const l=r.fullWidth,c=r.fullHeight;a+=r.offsetX*s/l,t-=r.offsetY*i/c,s*=r.width/l,i*=r.height/c}const o=this.filmOffset;o!==0&&(a+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(a,a+s,t,t-i,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const Ur=-90,Br=1;class jS extends et{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Qt(Ur,Br,e,t);s.layers=this.layers,this.add(s);const a=new Qt(Ur,Br,e,t);a.layers=this.layers,this.add(a);const r=new Qt(Ur,Br,e,t);r.layers=this.layers,this.add(r);const o=new Qt(Ur,Br,e,t);o.layers=this.layers,this.add(o);const l=new Qt(Ur,Br,e,t);l.layers=this.layers,this.add(l);const c=new Qt(Ur,Br,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[i,s,a,r,o,l]=t;for(const c of t)this.remove(c);if(e===yi)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),a.up.set(0,0,-1),a.lookAt(0,1,0),r.up.set(0,0,1),r.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===Do)i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),a.up.set(0,0,1),a.lookAt(0,1,0),r.up.set(0,0,-1),r.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(const c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[a,r,o,l,c,u]=this.children,d=e.getRenderTarget(),h=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;const g=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0,s),e.render(t,a),e.setRenderTarget(i,1,s),e.render(t,r),e.setRenderTarget(i,2,s),e.render(t,o),e.setRenderTarget(i,3,s),e.render(t,l),e.setRenderTarget(i,4,s),e.render(t,c),i.texture.generateMipmaps=g,e.setRenderTarget(i,5,s),e.render(t,u),e.setRenderTarget(d,h,f),e.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class Sc extends zt{constructor(e=[],t=Xs,i,s,a,r,o,l,c,u){super(e,t,i,s,a,r,o,l,c,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class ZS extends ws{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},s=[i,i,i,i,i,i];this.texture=new Sc(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:` +}`;class ri extends en{constructor(e){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=MR,this.fragmentShader=ER,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=Bo(e.uniforms),this.uniformsGroups=TR(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){const t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(const s in this.uniforms){const r=this.uniforms[s].value;r&&r.isTexture?t.uniforms[s]={type:"t",value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[s]={type:"c",value:r.getHex()}:r&&r.isVector2?t.uniforms[s]={type:"v2",value:r.toArray()}:r&&r.isVector3?t.uniforms[s]={type:"v3",value:r.toArray()}:r&&r.isVector4?t.uniforms[s]={type:"v4",value:r.toArray()}:r&&r.isMatrix3?t.uniforms[s]={type:"m3",value:r.toArray()}:r&&r.isMatrix4?t.uniforms[s]={type:"m4",value:r.toArray()}:t.uniforms[s]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;const i={};for(const s in this.extensions)this.extensions[s]===!0&&(i[s]=!0);return Object.keys(i).length>0&&(t.extensions=i),t}}class of extends et{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new Ee,this.projectionMatrix=new Ee,this.projectionMatrixInverse=new Ee,this.coordinateSystem=yi,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const ta=new T,u0=new ne,d0=new ne;class Qt extends of{constructor(e=50,t=1,i=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=e,this.zoom=1,this.near=i,this.far=s,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=Uo*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(hr*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return Uo*2*Math.atan(Math.tan(hr*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,i){ta.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(ta.x,ta.y).multiplyScalar(-e/ta.z),ta.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),i.set(ta.x,ta.y).multiplyScalar(-e/ta.z)}getViewSize(e,t){return this.getViewBounds(e,u0,d0),t.subVectors(d0,u0)}setViewOffset(e,t,i,s,a,r){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=s,this.view.width=a,this.view.height=r,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(hr*.5*this.fov)/this.zoom,i=2*t,s=this.aspect*i,a=-.5*s;const r=this.view;if(this.view!==null&&this.view.enabled){const l=r.fullWidth,c=r.fullHeight;a+=r.offsetX*s/l,t-=r.offsetY*i/c,s*=r.width/l,i*=r.height/c}const o=this.filmOffset;o!==0&&(a+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(a,a+s,t,t-i,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const Br=-90,zr=1;class aT extends et{constructor(e,t,i){super(),this.type="CubeCamera",this.renderTarget=i,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new Qt(Br,zr,e,t);s.layers=this.layers,this.add(s);const a=new Qt(Br,zr,e,t);a.layers=this.layers,this.add(a);const r=new Qt(Br,zr,e,t);r.layers=this.layers,this.add(r);const o=new Qt(Br,zr,e,t);o.layers=this.layers,this.add(o);const l=new Qt(Br,zr,e,t);l.layers=this.layers,this.add(l);const c=new Qt(Br,zr,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const e=this.coordinateSystem,t=this.children.concat(),[i,s,a,r,o,l]=t;for(const c of t)this.remove(c);if(e===yi)i.up.set(0,1,0),i.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),a.up.set(0,0,-1),a.lookAt(0,1,0),r.up.set(0,0,1),r.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(e===No)i.up.set(0,-1,0),i.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),a.up.set(0,0,1),a.lookAt(0,1,0),r.up.set(0,0,-1),r.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+e);for(const c of t)this.add(c),c.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();const{renderTarget:i,activeMipmapLevel:s}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());const[a,r,o,l,c,u]=this.children,d=e.getRenderTarget(),h=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;const g=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0,s),e.render(t,a),e.setRenderTarget(i,1,s),e.render(t,r),e.setRenderTarget(i,2,s),e.render(t,o),e.setRenderTarget(i,3,s),e.render(t,l),e.setRenderTarget(i,4,s),e.render(t,c),i.texture.generateMipmaps=g,e.setRenderTarget(i,5,s),e.render(t,u),e.setRenderTarget(d,h,f),e.xr.enabled=p,i.texture.needsPMREMUpdate=!0}}class Cc extends zt{constructor(e=[],t=Xs,i,s,a,r,o,l,c,u){super(e,t,i,s,a,r,o,l,c,u),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class rT extends ws{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},s=[i,i,i,i,i,i];this.texture=new Cc(s),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:` varying vec3 vWorldDirection; @@ -37,9 +37,9 @@ gl_FragColor = texture2D( tEquirect, sampleUV ); } - `},s=new ki(5,5,5),a=new ri({name:"CubemapFromEquirect",uniforms:Fo(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:dn,blending:Hs});a.uniforms.tEquirect.value=t;const r=new Se(s,a),o=t.minFilter;return t.minFilter===Ii&&(t.minFilter=Gt),new jS(1,10,this).update(e,r),t.minFilter=o,r.geometry.dispose(),r.material.dispose(),this}clear(e,t=!0,i=!0,s=!0){const a=e.getRenderTarget();for(let r=0;r<6;r++)e.setRenderTarget(this,r),e.clear(t,i,s);e.setRenderTarget(a)}}class Et extends et{constructor(){super(),this.isGroup=!0,this.type="Group"}}const _R={type:"move"};class cd{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Et,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Et,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new T,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new T),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Et,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new T,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new T),this._grip}dispatchEvent(e){return this._targetRay!==null&&this._targetRay.dispatchEvent(e),this._grip!==null&&this._grip.dispatchEvent(e),this._hand!==null&&this._hand.dispatchEvent(e),this}connect(e){if(e&&e.hand){const t=this._hand;if(t)for(const i of e.hand.values())this._getHandJoint(t,i)}return this.dispatchEvent({type:"connected",data:e}),this}disconnect(e){return this.dispatchEvent({type:"disconnected",data:e}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(e,t,i){let s=null,a=null,r=null;const o=this._targetRay,l=this._grip,c=this._hand;if(e&&t.session.visibilityState!=="visible-blurred"){if(c&&e.hand){r=!0;for(const g of e.hand.values()){const _=t.getJointPose(g,i),m=this._getHandJoint(c,g);_!==null&&(m.matrix.fromArray(_.transform.matrix),m.matrix.decompose(m.position,m.rotation,m.scale),m.matrixWorldNeedsUpdate=!0,m.jointRadius=_.radius),m.visible=_!==null}const u=c.joints["index-finger-tip"],d=c.joints["thumb-tip"],h=u.position.distanceTo(d.position),f=.02,p=.005;c.inputState.pinching&&h>f+p?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&h<=f-p&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(a=t.getPose(e.gripSpace,i),a!==null&&(l.matrix.fromArray(a.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,a.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(a.linearVelocity)):l.hasLinearVelocity=!1,a.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(a.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(s=t.getPose(e.targetRaySpace,i),s===null&&a!==null&&(s=a),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(_R)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=a!==null),c!==null&&(c.visible=r!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){const i=new Et;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}}class tf{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new de(e),this.density=t}clone(){return new tf(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class nf{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new de(e),this.near=t,this.far=i}clone(){return new nf(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class Tc extends et{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new rn,this.environmentIntensity=1,this.environmentRotation=new rn,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class Mc{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=ac,this.updateRanges=[],this.version=0,this.uuid=bi()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let s=0,a=this.stride;se.far||t.push({distance:l,point:rl.clone(),uv:ii.getInterpolation(rl,Jc,ll,Qc,a0,rp,r0,new ne),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}}function eu(n,e,t,i,s,a){Gr.subVectors(n,t).addScalar(.5).multiply(i),s!==void 0?(ol.x=a*Gr.x-s*Gr.y,ol.y=s*Gr.x+a*Gr.y):ol.copy(Gr),n.copy(e),n.x+=ol.x,n.y+=ol.y,n.applyMatrix4(JS)}const tu=new T,o0=new T;class QS extends et{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);const t=e.levels;for(let i=0,s=t.length;i0){let i,s;for(i=1,s=t.length;i0){tu.setFromMatrixPosition(this.matrixWorld);const s=e.ray.origin.distanceTo(tu);this.getObjectForDistance(s).raycast(e,t)}}update(e){const t=this.levels;if(t.length>1){tu.setFromMatrixPosition(e.matrixWorld),o0.setFromMatrixPosition(this.matrixWorld);const i=tu.distanceTo(o0)/e.zoom;t[0].object.visible=!0;let s,a;for(s=1,a=t.length;s=r)t[s-1].object.visible=!1,t[s].object.visible=!0;else break}for(this._currentLevel=s-1;s1?null:t.copy(e.start).addScaledVector(i,a)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||xR.getNormalMatrix(e),s=this.coplanarPoint(cp).applyMatrix4(e),a=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(a),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Aa=new xn,wR=new ne(.5,.5),su=new T;class $o{constructor(e=new Ns,t=new Ns,i=new Ns,s=new Ns,a=new Ns,r=new Ns){this.planes=[e,t,i,s,a,r]}set(e,t,i,s,a,r){const o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(s),o[4].copy(a),o[5].copy(r),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=yi,i=!1){const s=this.planes,a=e.elements,r=a[0],o=a[1],l=a[2],c=a[3],u=a[4],d=a[5],h=a[6],f=a[7],p=a[8],g=a[9],_=a[10],m=a[11],v=a[12],y=a[13],b=a[14],S=a[15];if(s[0].setComponents(c-r,f-u,m-p,S-v).normalize(),s[1].setComponents(c+r,f+u,m+p,S+v).normalize(),s[2].setComponents(c+o,f+d,m+g,S+y).normalize(),s[3].setComponents(c-o,f-d,m-g,S-y).normalize(),i)s[4].setComponents(l,h,_,b).normalize(),s[5].setComponents(c-l,f-h,m-_,S-b).normalize();else if(s[4].setComponents(c-l,f-h,m-_,S-b).normalize(),t===yi)s[5].setComponents(c+l,f+h,m+_,S+b).normalize();else if(t===Do)s[5].setComponents(l,h,_,b).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),Aa.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Aa.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(Aa)}intersectsSprite(e){Aa.center.set(0,0,0);const t=wR.distanceTo(e.center);return Aa.radius=.7071067811865476+t,Aa.applyMatrix4(e.matrixWorld),this.intersectsSphere(Aa)}intersectsSphere(e){const t=this.planes,i=e.center,s=-e.radius;for(let a=0;a<6;a++)if(t[a].distanceToPoint(i)0?e.max.x:e.min.x,su.y=s.normal.y>0?e.max.y:e.min.y,su.z=s.normal.z>0?e.max.z:e.min.z,s.distanceToPoint(su)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}const as=new Ee,rs=new $o;class lf{constructor(){this.coordinateSystem=yi}intersectsObject(e,t){if(!t.isArrayCamera||t.cameras.length===0)return!1;for(let i=0;i=a.length&&a.push({start:-1,count:-1,z:-1,index:-1});const o=a[this.index];r.push(o),this.index++,o.start=e,o.count=t,o.z=i,o.index=s}reset(){this.list.length=0,this.index=0}}const Yn=new Ee,ER=new de(1,1,1),_0=new $o,CR=new lf,au=new bn,Ra=new xn,dl=new T,g0=new T,AR=new T,dp=new MR,Rn=new Se,ru=[];function RR(n,e,t=0){const i=e.itemSize;if(n.isInterleavedBufferAttribute||n.array.constructor!==e.array.constructor){const s=n.count;for(let a=0;a65535?new Uint32Array(s):new Uint16Array(s);t.setIndex(new ot(a,1))}this._geometryInitialized=!0}}_validateGeometry(e){const t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw new Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(const i in t.attributes){if(!e.hasAttribute(i))throw new Error(`THREE.BatchedMesh: Added geometry missing "${i}". All geometries must have consistent attributes.`);const s=e.getAttribute(i),a=t.getAttribute(i);if(s.itemSize!==a.itemSize||s.normalized!==a.normalized)throw new Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(e){const t=this._instanceInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid instanceId ${e}. Instance is either out of range or has been deleted.`)}validateGeometryId(e){const t=this._geometryInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid geometryId ${e}. Geometry is either out of range or has been deleted.`)}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new bn);const e=this.boundingBox,t=this._instanceInfo;e.makeEmpty();for(let i=0,s=t.length;i=this.maxInstanceCount&&this._availableInstanceIds.length===0)throw new Error("THREE.BatchedMesh: Maximum item count reached.");const i={visible:!0,active:!0,geometryIndex:e};let s=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(up),s=this._availableInstanceIds.shift(),this._instanceInfo[s]=i):(s=this._instanceInfo.length,this._instanceInfo.push(i));const a=this._matricesTexture;Yn.identity().toArray(a.image.data,s*16),a.needsUpdate=!0;const r=this._colorsTexture;return r&&(ER.toArray(r.image.data,s*4),r.needsUpdate=!0),this._visibilityChanged=!0,s}addGeometry(e,t=-1,i=-1){this._initializeGeometry(e),this._validateGeometry(e);const s={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},a=this._geometryInfo;s.vertexStart=this._nextVertexStart,s.reservedVertexCount=t===-1?e.getAttribute("position").count:t;const r=e.getIndex();if(r!==null&&(s.indexStart=this._nextIndexStart,s.reservedIndexCount=i===-1?r.count:i),s.indexStart!==-1&&s.indexStart+s.reservedIndexCount>this._maxIndexCount||s.vertexStart+s.reservedVertexCount>this._maxVertexCount)throw new Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");let l;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(up),l=this._availableGeometryIds.shift(),a[l]=s):(l=this._geometryCount,this._geometryCount++,a.push(s)),this.setGeometryAt(l,e),this._nextIndexStart=s.indexStart+s.reservedIndexCount,this._nextVertexStart=s.vertexStart+s.reservedVertexCount,l}setGeometryAt(e,t){if(e>=this._geometryCount)throw new Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(t);const i=this.geometry,s=i.getIndex()!==null,a=i.getIndex(),r=t.getIndex(),o=this._geometryInfo[e];if(s&&r.count>o.reservedIndexCount||t.attributes.position.count>o.reservedVertexCount)throw new Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");const l=o.vertexStart,c=o.reservedVertexCount;o.vertexCount=t.getAttribute("position").count;for(const u in i.attributes){const d=t.getAttribute(u),h=i.getAttribute(u);RR(d,h,l);const f=d.itemSize;for(let p=d.count,g=c;p=t.length||t[e].active===!1)return this;const i=this._instanceInfo;for(let s=0,a=i.length;so).sort((r,o)=>i[r].vertexStart-i[o].vertexStart),a=this.geometry;for(let r=0,o=i.length;r=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingBox===null){const a=new bn,r=i.index,o=i.attributes.position;for(let l=s.start,c=s.start+s.count;l=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingSphere===null){const a=new xn;this.getBoundingBoxAt(e,au),au.getCenter(a.center);const r=i.index,o=i.attributes.position;let l=0;for(let c=s.start,u=s.start+s.count;co.active);if(Math.max(...i.map(o=>o.vertexStart+o.reservedVertexCount))>e)throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${t}. Cannot shrink further.`);if(this.geometry.index&&Math.max(...i.map(l=>l.indexStart+l.reservedIndexCount))>t)throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${t}. Cannot shrink further.`);const a=this.geometry;a.dispose(),this._maxVertexCount=e,this._maxIndexCount=t,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new $e,this._initializeGeometry(a));const r=this.geometry;a.index&&Pa(a.index.array,r.index.array);for(const o in a.attributes)Pa(a.attributes[o].array,r.attributes[o].array)}raycast(e,t){const i=this._instanceInfo,s=this._geometryInfo,a=this.matrixWorld,r=this.geometry;Rn.material=this.material,Rn.geometry.index=r.index,Rn.geometry.attributes=r.attributes,Rn.geometry.boundingBox===null&&(Rn.geometry.boundingBox=new bn),Rn.geometry.boundingSphere===null&&(Rn.geometry.boundingSphere=new xn);for(let o=0,l=i.length;o({...t,boundingBox:t.boundingBox!==null?t.boundingBox.clone():null,boundingSphere:t.boundingSphere!==null?t.boundingSphere.clone():null})),this._instanceInfo=e._instanceInfo.map(t=>({...t})),this._availableInstanceIds=e._availableInstanceIds.slice(),this._availableGeometryIds=e._availableGeometryIds.slice(),this._nextIndexStart=e._nextIndexStart,this._nextVertexStart=e._nextVertexStart,this._geometryCount=e._geometryCount,this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._indirectTexture=e._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),this._colorsTexture!==null&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,this._colorsTexture!==null&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(e,t,i,s,a){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const r=s.getIndex(),o=r===null?1:r.array.BYTES_PER_ELEMENT,l=this._instanceInfo,c=this._multiDrawStarts,u=this._multiDrawCounts,d=this._geometryInfo,h=this.perObjectFrustumCulled,f=this._indirectTexture,p=f.image.data,g=i.isArrayCamera?CR:_0;h&&!i.isArrayCamera&&(Yn.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse).multiply(this.matrixWorld),_0.setFromProjectionMatrix(Yn,i.coordinateSystem,i.reversedDepth));let _=0;if(this.sortObjects){Yn.copy(this.matrixWorld).invert(),dl.setFromMatrixPosition(i.matrixWorld).applyMatrix4(Yn),g0.set(0,0,-1).transformDirection(i.matrixWorld).transformDirection(Yn);for(let y=0,b=l.length;y0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;ai)return;hp.applyMatrix4(n.matrixWorld);const c=e.ray.origin.distanceTo(hp);if(!(ce.far))return{distance:c,point:v0.clone().applyMatrix4(n.matrixWorld),index:r,face:null,faceIndex:null,barycoord:null,object:n}}const b0=new T,x0=new T;class Fn extends On{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[];for(let s=0,a=t.count;s0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;as.far)return;a.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:e,face:null,faceIndex:null,barycoord:null,object:r})}}class tT extends zt{constructor(e,t,i,s,a=Gt,r=Gt,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;const u=this;function d(){u.needsUpdate=!0,u._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d)}"requestVideoFrameCallback"in e&&(this._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d))}clone(){return new this.constructor(this.image).copy(this)}update(){const e=this.image;"requestVideoFrameCallback"in e===!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){this._requestVideoFrameCallbackId!==0&&this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),super.dispose()}}class PR extends tT{constructor(e,t,i,s,a,r,o,l){super({},e,t,i,s,a,r,o,l),this.isVideoFrameTexture=!0}update(){}clone(){return new this.constructor().copy(this)}setFrame(e){this.image=e,this.needsUpdate=!0}}class IR extends zt{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=hn,this.minFilter=hn,this.generateMipmaps=!1,this.needsUpdate=!0}}class cf extends zt{constructor(e,t,i,s,a,r,o,l,c,u,d,h){super(null,r,o,l,c,u,s,a,d,h),this.isCompressedTexture=!0,this.image={width:t,height:i},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class LR extends cf{constructor(e,t,i,s,a,r){super(e,t,i,a,r),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=Wn,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}}class kR extends cf{constructor(e,t,i){super(void 0,e[0].width,e[0].height,t,i,Xs),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}}class Ec extends zt{constructor(e,t,i,s,a,r,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class Cg extends zt{constructor(e,t,i=Ks,s,a,r,o=hn,l=hn,c,u=Io,d=1){if(u!==Io&&u!==Lo)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const h={width:e,height:t,depth:d};super(h,s,a,r,o,l,u,i,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new da(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){const t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}}class Ag extends zt{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}}class uf extends $e{constructor(e=1,t=1,i=4,s=8,a=1){super(),this.type="CapsuleGeometry",this.parameters={radius:e,height:t,capSegments:i,radialSegments:s,heightSegments:a},t=Math.max(0,t),i=Math.max(1,Math.floor(i)),s=Math.max(3,Math.floor(s)),a=Math.max(1,Math.floor(a));const r=[],o=[],l=[],c=[],u=t/2,d=Math.PI/2*e,h=t,f=2*d+h,p=i*2+a,g=s+1,_=new T,m=new T;for(let v=0;v<=p;v++){let y=0,b=0,S=0,x=0;if(v<=i){const w=v/i,E=w*Math.PI/2;b=-u-e*Math.cos(E),S=e*Math.sin(E),x=-e*Math.cos(E),y=w*d}else if(v<=i+a){const w=(v-i)/a;b=-u+w*t,S=e,x=0,y=d+w*h}else{const w=(v-i-a)/i,E=w*Math.PI/2;b=u+e*Math.sin(E),S=e*Math.cos(E),x=e*Math.sin(E),y=d+h+w*d}const M=Math.max(0,Math.min(1,y/f));let C=0;v===0?C=.5/s:v===p&&(C=-.5/s);for(let w=0;w<=s;w++){const E=w/s,R=E*Math.PI*2,L=Math.sin(R),O=Math.cos(R);m.x=-S*O,m.y=b,m.z=S*L,o.push(m.x,m.y,m.z),_.set(-S*O,x,S*L),_.normalize(),l.push(_.x,_.y,_.z),c.push(E+C,M)}if(v>0){const w=(v-1)*g;for(let E=0;E0&&y(!0),t>0&&y(!1)),this.setIndex(u),this.setAttribute("position",new Ce(d,3)),this.setAttribute("normal",new Ce(h,3)),this.setAttribute("uv",new Ce(f,2));function v(){const b=new T,S=new T;let x=0;const M=(t-e)/i;for(let C=0;C<=a;C++){const w=[],E=C/a,R=E*(t-e)+e;for(let L=0;L<=s;L++){const O=L/s,D=O*l+o,U=Math.sin(D),F=Math.cos(D);S.x=R*U,S.y=-E*i+_,S.z=R*F,d.push(S.x,S.y,S.z),b.set(U,M,F).normalize(),h.push(b.x,b.y,b.z),f.push(O,1-E),w.push(p++)}g.push(w)}for(let C=0;C0||w!==0)&&(u.push(E,R,O),x+=3),(t>0||w!==a-1)&&(u.push(R,L,O),x+=3)}c.addGroup(m,x,0),m+=x}function y(b){const S=p,x=new ne,M=new T;let C=0;const w=b===!0?e:t,E=b===!0?1:-1;for(let L=1;L<=s;L++)d.push(0,_*E,0),h.push(0,E,0),f.push(.5,.5),p++;const R=p;for(let L=0;L<=s;L++){const D=L/s*l+o,U=Math.cos(D),F=Math.sin(D);M.x=w*F,M.y=_*E,M.z=w*U,d.push(M.x,M.y,M.z),h.push(0,E,0),x.x=U*.5+.5,x.y=F*.5*E+.5,f.push(x.x,x.y),p++}for(let L=0;L.9&&M<.1&&(y<.2&&(r[v+0]+=1),b<.2&&(r[v+2]+=1),S<.2&&(r[v+4]+=1))}}function h(v){a.push(v.x,v.y,v.z)}function f(v,y){const b=v*3;y.x=e[b+0],y.y=e[b+1],y.z=e[b+2]}function p(){const v=new T,y=new T,b=new T,S=new T,x=new ne,M=new ne,C=new ne;for(let w=0,E=0;w0)l=s-1;else{l=s;break}if(s=l,i[s]===r)return s/(a-1);const u=i[s],h=i[s+1]-u,f=(r-u)/h;return(s+f)/(a-1)}getTangent(e,t){let s=e-1e-4,a=e+1e-4;s<0&&(s=0),a>1&&(a=1);const r=this.getPoint(s),o=this.getPoint(a),l=t||(r.isVector2?new ne:new T);return l.copy(o).sub(r).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t=!1){const i=new T,s=[],a=[],r=[],o=new T,l=new Ee;for(let f=0;f<=e;f++){const p=f/e;s[f]=this.getTangentAt(p,new T)}a[0]=new T,r[0]=new T;let c=Number.MAX_VALUE;const u=Math.abs(s[0].x),d=Math.abs(s[0].y),h=Math.abs(s[0].z);u<=c&&(c=u,i.set(1,0,0)),d<=c&&(c=d,i.set(0,1,0)),h<=c&&i.set(0,0,1),o.crossVectors(s[0],i).normalize(),a[0].crossVectors(s[0],o),r[0].crossVectors(s[0],a[0]);for(let f=1;f<=e;f++){if(a[f]=a[f-1].clone(),r[f]=r[f-1].clone(),o.crossVectors(s[f-1],s[f]),o.length()>Number.EPSILON){o.normalize();const p=Math.acos(Je(s[f-1].dot(s[f]),-1,1));a[f].applyMatrix4(l.makeRotationAxis(o,p))}r[f].crossVectors(s[f],a[f])}if(t===!0){let f=Math.acos(Je(a[0].dot(a[e]),-1,1));f/=e,s[0].dot(o.crossVectors(a[0],a[e]))>0&&(f=-f);for(let p=1;p<=e;p++)a[p].applyMatrix4(l.makeRotationAxis(s[p],f*p)),r[p].crossVectors(s[p],a[p])}return{tangents:s,normals:a,binormals:r}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class ff extends Oi{constructor(e=0,t=0,i=1,s=1,a=0,r=Math.PI*2,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=s,this.aStartAngle=a,this.aEndAngle=r,this.aClockwise=o,this.aRotation=l}getPoint(e,t=new ne){const i=t,s=Math.PI*2;let a=this.aEndAngle-this.aStartAngle;const r=Math.abs(a)s;)a-=s;a0?0:(Math.floor(Math.abs(o)/a)+1)*a:l===0&&o===a-1&&(o=a-2,l=1);let c,u;this.closed||o>0?c=s[(o-1)%a]:(pu.subVectors(s[0],s[1]).add(s[0]),c=pu);const d=s[o%a],h=s[(o+1)%a];if(this.closed||o+2s.length-2?s.length-1:r+1],d=s[r>s.length-3?s.length-1:r+2];return i.set(T0(o,l.x,c.x,u.x,d.x),T0(o,l.y,c.y,u.y,d.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const r=s[a]-i,o=this.curves[a],l=o.getLength(),c=l===0?0:1-r/l;return o.getPointAt(c,t)}a++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,s=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const d=c.getPoint(0);d.equals(this.currentPoint)||this.lineTo(d.x,d.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class $s extends vh{constructor(e){super(e),this.uuid=bi(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,s=this.holes.length;i80*t){o=1/0,l=1/0;let u=-1/0,d=-1/0;for(let h=t;hu&&(u=f),p>d&&(d=p)}c=Math.max(u-o,d-l),c=c!==0?32767/c:0}return lc(a,r,t,o,l,c,0),r}function rT(n,e,t,i,s){let a;if(s===iP(n,e,t,i)>0)for(let r=e;r=e;r-=i)a=M0(r/i|0,n[r],n[r+1],a);return a&&Uo(a,a.next)&&(uc(a),a=a.next),a}function yr(n,e){if(!n)return n;e||(e=n);let t=n,i;do if(i=!1,!t.steiner&&(Uo(t,t.next)||qt(t.prev,t,t.next)===0)){if(uc(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function lc(n,e,t,i,s,a,r){if(!n)return;!r&&a&&ZR(n,i,s,a);let o=n;for(;n.prev!==n.next;){const l=n.prev,c=n.next;if(a?GR(n,i,s,a):VR(n)){e.push(l.i,n.i,c.i),uc(n),n=c.next,o=c.next;continue}if(n=c,n===o){r?r===1?(n=$R(yr(n),e),lc(n,e,t,i,s,a,2)):r===2&&WR(n,e,t,i,s,a):lc(yr(n),e,t,i,s,a,1);break}}}function VR(n){const e=n.prev,t=n,i=n.next;if(qt(e,t,i)>=0)return!1;const s=e.x,a=t.x,r=i.x,o=e.y,l=t.y,c=i.y,u=Math.min(s,a,r),d=Math.min(o,l,c),h=Math.max(s,a,r),f=Math.max(o,l,c);let p=i.next;for(;p!==e;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=f&&Rl(s,o,a,l,r,c,p.x,p.y)&&qt(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function GR(n,e,t,i){const s=n.prev,a=n,r=n.next;if(qt(s,a,r)>=0)return!1;const o=s.x,l=a.x,c=r.x,u=s.y,d=a.y,h=r.y,f=Math.min(o,l,c),p=Math.min(u,d,h),g=Math.max(o,l,c),_=Math.max(u,d,h),m=jm(f,p,e,t,i),v=jm(g,_,e,t,i);let y=n.prevZ,b=n.nextZ;for(;y&&y.z>=m&&b&&b.z<=v;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&Rl(o,u,l,d,c,h,y.x,y.y)&&qt(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&Rl(o,u,l,d,c,h,b.x,b.y)&&qt(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=m;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&Rl(o,u,l,d,c,h,y.x,y.y)&&qt(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&Rl(o,u,l,d,c,h,b.x,b.y)&&qt(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function $R(n,e){let t=n;do{const i=t.prev,s=t.next.next;!Uo(i,s)&&lT(i,t,t.next,s)&&cc(i,s)&&cc(s,i)&&(e.push(i.i,t.i,s.i),uc(t),uc(t.next),t=n=s),t=t.next}while(t!==n);return yr(t)}function WR(n,e,t,i,s,a){let r=n;do{let o=r.next.next;for(;o!==r.prev;){if(r.i!==o.i&&eP(r,o)){let l=cT(r,o);r=yr(r,r.next),l=yr(l,l.next),lc(r,e,t,i,s,a,0),lc(l,e,t,i,s,a,0);return}o=o.next}r=r.next}while(r!==n)}function XR(n,e,t,i){const s=[];for(let a=0,r=e.length;a=t.next.y&&t.next.y!==t.y){const d=t.x+(s-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(d<=i&&d>a&&(a=d,r=t.x=t.x&&t.x>=l&&i!==t.x&&oT(sr.x||t.x===r.x&&jR(r,t)))&&(r=t,u=d)}t=t.next}while(t!==o);return r}function jR(n,e){return qt(n.prev,n,e.prev)<0&&qt(e.next,n,n.next)<0}function ZR(n,e,t,i){let s=n;do s.z===0&&(s.z=jm(s.x,s.y,e,t,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==n);s.prevZ.nextZ=null,s.prevZ=null,JR(s)}function JR(n){let e,t=1;do{let i=n,s;n=null;let a=null;for(e=0;i;){e++;let r=i,o=0;for(let c=0;c0||l>0&&r;)o!==0&&(l===0||!r||i.z<=r.z)?(s=i,i=i.nextZ,o--):(s=r,r=r.nextZ,l--),a?a.nextZ=s:n=s,s.prevZ=a,a=s;i=r}a.nextZ=null,t*=2}while(e>1);return n}function jm(n,e,t,i,s){return n=(n-t)*s|0,e=(e-i)*s|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n|e<<1}function QR(n){let e=n,t=n;do(e.x=(n-r)*(a-o)&&(n-r)*(i-o)>=(t-r)*(e-o)&&(t-r)*(a-o)>=(s-r)*(i-o)}function Rl(n,e,t,i,s,a,r,o){return!(n===r&&e===o)&&oT(n,e,t,i,s,a,r,o)}function eP(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!tP(n,e)&&(cc(n,e)&&cc(e,n)&&nP(n,e)&&(qt(n.prev,n,e.prev)||qt(n,e.prev,e))||Uo(n,e)&&qt(n.prev,n,n.next)>0&&qt(e.prev,e,e.next)>0)}function qt(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function Uo(n,e){return n.x===e.x&&n.y===e.y}function lT(n,e,t,i){const s=_u(qt(n,e,t)),a=_u(qt(n,e,i)),r=_u(qt(t,i,n)),o=_u(qt(t,i,e));return!!(s!==a&&r!==o||s===0&&mu(n,t,e)||a===0&&mu(n,i,e)||r===0&&mu(t,n,i)||o===0&&mu(t,e,i))}function mu(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function _u(n){return n>0?1:n<0?-1:0}function tP(n,e){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&lT(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}function cc(n,e){return qt(n.prev,n,n.next)<0?qt(n,e,n.next)>=0&&qt(n,n.prev,e)>=0:qt(n,e,n.prev)<0||qt(n,n.next,e)<0}function nP(n,e){let t=n,i=!1;const s=(n.x+e.x)/2,a=(n.y+e.y)/2;do t.y>a!=t.next.y>a&&t.next.y!==t.y&&s<(t.next.x-t.x)*(a-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==n);return i}function cT(n,e){const t=Zm(n.i,n.x,n.y),i=Zm(e.i,e.x,e.y),s=n.next,a=e.prev;return n.next=e,e.prev=n,t.next=s,s.prev=t,i.next=t,t.prev=i,a.next=i,i.prev=a,i}function M0(n,e,t,i){const s=Zm(n,e,t);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function uc(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function Zm(n,e,t){return{i:n,x:e,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function iP(n,e,t,i){let s=0;for(let a=e,r=t-i;a2&&n[e-1].equals(n[0])&&n.pop()}function C0(n,e){for(let t=0;tNumber.EPSILON){const J=Math.sqrt(A),ce=Math.sqrt(st*st+I*I),ee=j.x-We/J,Ve=j.y+ye/J,ve=Y.x-I/ce,Be=Y.y+st/ce,ze=((ve-ee)*I-(Be-Ve)*st)/(ye*I-We*st);Q=ee+ye*ze-G.x,ge=Ve+We*ze-G.y;const he=Q*Q+ge*ge;if(he<=2)return new ne(Q,ge);ue=Math.sqrt(he/2)}else{let J=!1;ye>Number.EPSILON?st>Number.EPSILON&&(J=!0):ye<-Number.EPSILON?st<-Number.EPSILON&&(J=!0):Math.sign(We)===Math.sign(I)&&(J=!0),J?(Q=-We,ge=ye,ue=Math.sqrt(A)):(Q=ye,ge=We,ue=Math.sqrt(A/2))}return new ne(Q/ue,ge/ue)}const ie=[];for(let G=0,j=U.length,Y=j-1,Q=G+1;G=0;G--){const j=G/_,Y=f*Math.cos(j*Math.PI/2),Q=p*Math.sin(j*Math.PI/2)+g;for(let ge=0,ue=U.length;ge=0;){const Q=Y;let ge=Y-1;ge<0&&(ge=G.length-1);for(let ue=0,ye=u+_*2;ue0)&&f.push(y,b,x),(m!==i-1||l0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class ir extends en{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new de(16777215),this.specular=new de(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new de(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ba,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new rn,this.combine=xc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class hT extends en{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new de(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new de(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ba,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class fT extends en{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ba,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class xf extends en{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new de(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new de(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ba,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new rn,this.combine=xc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class Ng extends en{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=DS,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class Ug extends en{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class pT extends en{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new de(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=ba,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class mT extends Pt{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function sr(n,e){return!n||n.constructor===e?n:typeof e.BYTES_PER_ELEMENT=="number"?new e(n):Array.prototype.slice.call(n)}function _T(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function gT(n){function e(s,a){return n[s]-n[a]}const t=n.length,i=new Array(t);for(let s=0;s!==t;++s)i[s]=s;return i.sort(e),i}function Jm(n,e,t){const i=n.length,s=new n.constructor(i);for(let a=0,r=0;r!==i;++a){const o=t[a]*e;for(let l=0;l!==e;++l)s[r++]=n[o+l]}return s}function Bg(n,e,t,i){let s=1,a=n[0];for(;a!==void 0&&a[i]===void 0;)a=n[s++];if(a===void 0)return;let r=a[i];if(r!==void 0)if(Array.isArray(r))do r=a[i],r!==void 0&&(e.push(a.time),t.push(...r)),a=n[s++];while(a!==void 0);else if(r.toArray!==void 0)do r=a[i],r!==void 0&&(e.push(a.time),r.toArray(t,t.length)),a=n[s++];while(a!==void 0);else do r=a[i],r!==void 0&&(e.push(a.time),t.push(r)),a=n[s++];while(a!==void 0)}function lP(n,e,t,i,s=30){const a=n.clone();a.name=e;const r=[];for(let l=0;l=i)){d.push(c.times[f]);for(let g=0;ga.tracks[l].times[0]&&(o=a.tracks[l].times[0]);for(let l=0;l=o.times[p]){const m=p*d+u,v=m+d-u;g=o.values.slice(m,v)}else{const m=o.createInterpolant(),v=u,y=d-u;m.evaluate(a),g=m.resultBuffer.slice(v,y)}l==="quaternion"&&new ht().fromArray(g).normalize().conjugate().toArray(g);const _=c.times.length;for(let m=0;m<_;++m){const v=m*f+h;if(l==="quaternion")ht.multiplyQuaternionsFlat(c.values,v,g,0,c.values,v);else{const y=f-h*2;for(let b=0;b=a)){const o=t[1];e=a)break t}r=i,i=0;break n}break e}for(;i>>1;et;)--r;if(++r,a!==0||r!==s){a>=r&&(r=Math.max(r,1),a=r-1);const o=this.getValueSize();this.times=i.slice(a,r),this.values=this.values.slice(a*o,r*o)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const i=this.times,s=this.values,a=i.length;a===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let r=null;for(let o=0;o!==a;o++){const l=i[o];if(typeof l=="number"&&isNaN(l)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(r!==null&&r>l){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,l,r),e=!1;break}r=l}if(s!==void 0&&_T(s))for(let o=0,l=s.length;o!==l;++o){const c=s[o];if(isNaN(c)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,c),e=!1;break}}return e}optimize(){const e=this.times.slice(),t=this.values.slice(),i=this.getValueSize(),s=this.getInterpolation()===ld,a=e.length-1;let r=1;for(let o=1;o0){e[r]=e[a];for(let o=a*i,l=r*i,c=0;c!==i;++c)t[l+c]=t[o+c];++r}return r!==e.length?(this.times=e.slice(0,r),this.values=t.slice(0,r*i)):(this.times=e,this.values=t),this}clone(){const e=this.times.slice(),t=this.values.slice(),i=this.constructor,s=new i(this.name,e,t);return s.createInterpolant=this.createInterpolant,s}}Fi.prototype.ValueTypeName="";Fi.prototype.TimeBufferType=Float32Array;Fi.prototype.ValueBufferType=Float32Array;Fi.prototype.DefaultInterpolation=mr;class Tr extends Fi{constructor(e,t,i){super(e,t,i)}}Tr.prototype.ValueTypeName="bool";Tr.prototype.ValueBufferType=Array;Tr.prototype.DefaultInterpolation=ko;Tr.prototype.InterpolantFactoryMethodLinear=void 0;Tr.prototype.InterpolantFactoryMethodSmooth=void 0;class Hg extends Fi{constructor(e,t,i,s){super(e,t,i,s)}}Hg.prototype.ValueTypeName="color";class ga extends Fi{constructor(e,t,i,s){super(e,t,i,s)}}ga.prototype.ValueTypeName="number";class bT extends Xo{constructor(e,t,i,s){super(e,t,i,s)}interpolate_(e,t,i,s){const a=this.resultBuffer,r=this.sampleValues,o=this.valueSize,l=(i-t)/(s-t);let c=e*o;for(let u=c+o;c!==u;c+=4)ht.slerpFlat(a,0,r,c-o,r,c,l);return a}}class Ss extends Fi{constructor(e,t,i,s){super(e,t,i,s)}InterpolantFactoryMethodLinear(e){return new bT(this.times,this.values,this.getValueSize(),e)}}Ss.prototype.ValueTypeName="quaternion";Ss.prototype.InterpolantFactoryMethodSmooth=void 0;class Mr extends Fi{constructor(e,t,i){super(e,t,i)}}Mr.prototype.ValueTypeName="string";Mr.prototype.ValueBufferType=Array;Mr.prototype.DefaultInterpolation=ko;Mr.prototype.InterpolantFactoryMethodLinear=void 0;Mr.prototype.InterpolantFactoryMethodSmooth=void 0;class qs extends Fi{constructor(e,t,i,s){super(e,t,i,s)}}qs.prototype.ValueTypeName="vector";class ya{constructor(e="",t=-1,i=[],s=Yh){this.name=e,this.tracks=i,this.duration=t,this.blendMode=s,this.uuid=bi(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){const t=[],i=e.tracks,s=1/(e.fps||1);for(let r=0,o=i.length;r!==o;++r)t.push(hP(i[r]).scale(s));const a=new this(e.name,e.duration,t,e.blendMode);return a.uuid=e.uuid,a.userData=JSON.parse(e.userData||"{}"),a}static toJSON(e){const t=[],i=e.tracks,s={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let a=0,r=i.length;a!==r;++a)t.push(Fi.toJSON(i[a]));return s}static CreateFromMorphTargetSequence(e,t,i,s){const a=t.length,r=[];for(let o=0;o1){const d=u[1];let h=s[d];h||(s[d]=h=[]),h.push(c)}}const r=[];for(const o in s)r.push(this.CreateFromMorphTargetSequence(o,s[o],t,i));return r}static parseAnimation(e,t){if(console.warn("THREE.AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(d,h,f,p,g){if(f.length!==0){const _=[],m=[];Bg(f,_,m,p),_.length!==0&&g.push(new d(h,_,m))}},s=[],a=e.name||"default",r=e.fps||30,o=e.blendMode;let l=e.length||-1;const c=e.hierarchy||[];for(let d=0;d{t&&t(a),this.manager.itemEnd(e)},0),a;if(Is[e]!==void 0){Is[e].push({onLoad:t,onProgress:i,onError:s});return}Is[e]=[],Is[e].push({onLoad:t,onProgress:i,onError:s});const r=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,l=this.responseType;fetch(r).then(c=>{if(c.status===200||c.status===0){if(c.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||c.body===void 0||c.body.getReader===void 0)return c;const u=Is[e],d=c.body.getReader(),h=c.headers.get("X-File-Size")||c.headers.get("Content-Length"),f=h?parseInt(h):0,p=f!==0;let g=0;const _=new ReadableStream({start(m){v();function v(){d.read().then(({done:y,value:b})=>{if(y)m.close();else{g+=b.byteLength;const S=new ProgressEvent("progress",{lengthComputable:p,loaded:g,total:f});for(let x=0,M=u.length;x{m.error(y)})}}});return new Response(_)}else throw new fP(`fetch for "${c.url}" responded with ${c.status}: ${c.statusText}`,c)}).then(c=>{switch(l){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then(u=>new DOMParser().parseFromString(u,o));case"json":return c.json();default:if(o==="")return c.text();{const d=/charset="?([^;"\s]*)"?/i.exec(o),h=d&&d[1]?d[1].toLowerCase():void 0,f=new TextDecoder(h);return c.arrayBuffer().then(p=>f.decode(p))}}}).then(c=>{_s.add(`file:${e}`,c);const u=Is[e];delete Is[e];for(let d=0,h=u.length;d{const u=Is[e];if(u===void 0)throw this.manager.itemError(e),c;delete Is[e];for(let d=0,h=u.length;d{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}class pP extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Kn(this.manager);r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t=[];for(let i=0;i0:s.vertexColors=e.vertexColors),e.uniforms!==void 0)for(const a in e.uniforms){const r=e.uniforms[a];switch(s.uniforms[a]={},r.type){case"t":s.uniforms[a].value=i(r.value);break;case"c":s.uniforms[a].value=new de().setHex(r.value);break;case"v2":s.uniforms[a].value=new ne().fromArray(r.value);break;case"v3":s.uniforms[a].value=new T().fromArray(r.value);break;case"v4":s.uniforms[a].value=new Ye().fromArray(r.value);break;case"m3":s.uniforms[a].value=new at().fromArray(r.value);break;case"m4":s.uniforms[a].value=new Ee().fromArray(r.value);break;default:s.uniforms[a].value=r.value}}if(e.defines!==void 0&&(s.defines=e.defines),e.vertexShader!==void 0&&(s.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(s.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(s.glslVersion=e.glslVersion),e.extensions!==void 0)for(const a in e.extensions)s.extensions[a]=e.extensions[a];if(e.lights!==void 0&&(s.lights=e.lights),e.clipping!==void 0&&(s.clipping=e.clipping),e.size!==void 0&&(s.size=e.size),e.sizeAttenuation!==void 0&&(s.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(s.map=i(e.map)),e.matcap!==void 0&&(s.matcap=i(e.matcap)),e.alphaMap!==void 0&&(s.alphaMap=i(e.alphaMap)),e.bumpMap!==void 0&&(s.bumpMap=i(e.bumpMap)),e.bumpScale!==void 0&&(s.bumpScale=e.bumpScale),e.normalMap!==void 0&&(s.normalMap=i(e.normalMap)),e.normalMapType!==void 0&&(s.normalMapType=e.normalMapType),e.normalScale!==void 0){let a=e.normalScale;Array.isArray(a)===!1&&(a=[a,a]),s.normalScale=new ne().fromArray(a)}return e.displacementMap!==void 0&&(s.displacementMap=i(e.displacementMap)),e.displacementScale!==void 0&&(s.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(s.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(s.roughnessMap=i(e.roughnessMap)),e.metalnessMap!==void 0&&(s.metalnessMap=i(e.metalnessMap)),e.emissiveMap!==void 0&&(s.emissiveMap=i(e.emissiveMap)),e.emissiveIntensity!==void 0&&(s.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(s.specularMap=i(e.specularMap)),e.specularIntensityMap!==void 0&&(s.specularIntensityMap=i(e.specularIntensityMap)),e.specularColorMap!==void 0&&(s.specularColorMap=i(e.specularColorMap)),e.envMap!==void 0&&(s.envMap=i(e.envMap)),e.envMapRotation!==void 0&&s.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(s.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(s.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(s.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(s.lightMap=i(e.lightMap)),e.lightMapIntensity!==void 0&&(s.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(s.aoMap=i(e.aoMap)),e.aoMapIntensity!==void 0&&(s.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(s.gradientMap=i(e.gradientMap)),e.clearcoatMap!==void 0&&(s.clearcoatMap=i(e.clearcoatMap)),e.clearcoatRoughnessMap!==void 0&&(s.clearcoatRoughnessMap=i(e.clearcoatRoughnessMap)),e.clearcoatNormalMap!==void 0&&(s.clearcoatNormalMap=i(e.clearcoatNormalMap)),e.clearcoatNormalScale!==void 0&&(s.clearcoatNormalScale=new ne().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(s.iridescenceMap=i(e.iridescenceMap)),e.iridescenceThicknessMap!==void 0&&(s.iridescenceThicknessMap=i(e.iridescenceThicknessMap)),e.transmissionMap!==void 0&&(s.transmissionMap=i(e.transmissionMap)),e.thicknessMap!==void 0&&(s.thicknessMap=i(e.thicknessMap)),e.anisotropyMap!==void 0&&(s.anisotropyMap=i(e.anisotropyMap)),e.sheenColorMap!==void 0&&(s.sheenColorMap=i(e.sheenColorMap)),e.sheenRoughnessMap!==void 0&&(s.sheenRoughnessMap=i(e.sheenRoughnessMap)),s}setTextures(e){return this.textures=e,this}createMaterialFromType(e){return Tf.createMaterialFromType(e)}static createMaterialFromType(e){const t={ShadowMaterial:uT,SpriteMaterial:sf,RawShaderMaterial:dT,ShaderMaterial:ri,PointsMaterial:ha,MeshPhysicalMaterial:li,MeshStandardMaterial:kn,MeshPhongMaterial:ir,MeshToonMaterial:hT,MeshNormalMaterial:fT,MeshLambertMaterial:xf,MeshDepthMaterial:Ng,MeshDistanceMaterial:Ug,MeshBasicMaterial:je,MeshMatcapMaterial:pT,LineDashedMaterial:mT,LineBasicMaterial:Pt,Material:en};return new t[e]}}class Ws{static extractUrlBase(e){const t=e.lastIndexOf("/");return t===-1?"./":e.slice(0,t+1)}static resolveURL(e,t){return typeof e!="string"||e===""?"":(/^https?:\/\//i.test(t)&&/^\//.test(e)&&(t=t.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(e)||/^data:.*,.*$/i.test(e)||/^blob:.*$/i.test(e)?e:t+e)}}class CT extends $e{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){const e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}}class AT extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Kn(a.manager);r.setPath(a.path),r.setRequestHeader(a.requestHeader),r.setWithCredentials(a.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t={},i={};function s(f,p){if(t[p]!==void 0)return t[p];const _=f.interleavedBuffers[p],m=a(f,_.buffer),v=ro(_.type,m),y=new Mc(v,_.stride);return y.uuid=_.uuid,t[p]=y,y}function a(f,p){if(i[p]!==void 0)return i[p];const _=f.arrayBuffers[p],m=new Uint32Array(_).buffer;return i[p]=m,m}const r=e.isInstancedBufferGeometry?new CT:new $e,o=e.data.index;if(o!==void 0){const f=ro(o.type,o.array);r.setIndex(new ot(f,1))}const l=e.data.attributes;for(const f in l){const p=l[f];let g;if(p.isInterleavedBufferAttribute){const _=s(e.data,p.data);g=new _a(_,p.itemSize,p.offset,p.normalized)}else{const _=ro(p.type,p.array),m=p.isInstancedBufferAttribute?_r:ot;g=new m(_,p.itemSize,p.normalized)}p.name!==void 0&&(g.name=p.name),p.usage!==void 0&&g.setUsage(p.usage),r.setAttribute(f,g)}const c=e.data.morphAttributes;if(c)for(const f in c){const p=c[f],g=[];for(let _=0,m=p.length;_0){const l=new Vg(t);a=new dc(l),a.setCrossOrigin(this.crossOrigin);for(let c=0,u=e.length;c0){s=new dc(this.manager),s.setCrossOrigin(this.crossOrigin);for(let r=0,o=e.length;r{let _=null,m=null;return g.boundingBox!==void 0&&(_=new bn().fromJSON(g.boundingBox)),g.boundingSphere!==void 0&&(m=new xn().fromJSON(g.boundingSphere)),{...g,boundingBox:_,boundingSphere:m}}),r._instanceInfo=e.instanceInfo,r._availableInstanceIds=e._availableInstanceIds,r._availableGeometryIds=e._availableGeometryIds,r._nextIndexStart=e.nextIndexStart,r._nextVertexStart=e.nextVertexStart,r._geometryCount=e.geometryCount,r._maxInstanceCount=e.maxInstanceCount,r._maxVertexCount=e.maxVertexCount,r._maxIndexCount=e.maxIndexCount,r._geometryInitialized=e.geometryInitialized,r._matricesTexture=c(e.matricesTexture.uuid),r._indirectTexture=c(e.indirectTexture.uuid),e.colorsTexture!==void 0&&(r._colorsTexture=c(e.colorsTexture.uuid)),e.boundingSphere!==void 0&&(r.boundingSphere=new xn().fromJSON(e.boundingSphere)),e.boundingBox!==void 0&&(r.boundingBox=new bn().fromJSON(e.boundingBox));break;case"LOD":r=new QS;break;case"Line":r=new On(o(e.geometry),l(e.material));break;case"LineLoop":r=new Eg(o(e.geometry),l(e.material));break;case"LineSegments":r=new Fn(o(e.geometry),l(e.material));break;case"PointCloud":case"Points":r=new hr(o(e.geometry),l(e.material));break;case"Sprite":r=new af(l(e.material));break;case"Group":r=new Et;break;case"Bone":r=new No;break;default:r=new et}if(r.uuid=e.uuid,e.name!==void 0&&(r.name=e.name),e.matrix!==void 0?(r.matrix.fromArray(e.matrix),e.matrixAutoUpdate!==void 0&&(r.matrixAutoUpdate=e.matrixAutoUpdate),r.matrixAutoUpdate&&r.matrix.decompose(r.position,r.quaternion,r.scale)):(e.position!==void 0&&r.position.fromArray(e.position),e.rotation!==void 0&&r.rotation.fromArray(e.rotation),e.quaternion!==void 0&&r.quaternion.fromArray(e.quaternion),e.scale!==void 0&&r.scale.fromArray(e.scale)),e.up!==void 0&&r.up.fromArray(e.up),e.castShadow!==void 0&&(r.castShadow=e.castShadow),e.receiveShadow!==void 0&&(r.receiveShadow=e.receiveShadow),e.shadow&&(e.shadow.intensity!==void 0&&(r.shadow.intensity=e.shadow.intensity),e.shadow.bias!==void 0&&(r.shadow.bias=e.shadow.bias),e.shadow.normalBias!==void 0&&(r.shadow.normalBias=e.shadow.normalBias),e.shadow.radius!==void 0&&(r.shadow.radius=e.shadow.radius),e.shadow.mapSize!==void 0&&r.shadow.mapSize.fromArray(e.shadow.mapSize),e.shadow.camera!==void 0&&(r.shadow.camera=this.parseObject(e.shadow.camera))),e.visible!==void 0&&(r.visible=e.visible),e.frustumCulled!==void 0&&(r.frustumCulled=e.frustumCulled),e.renderOrder!==void 0&&(r.renderOrder=e.renderOrder),e.userData!==void 0&&(r.userData=e.userData),e.layers!==void 0&&(r.layers.mask=e.layers),e.children!==void 0){const h=e.children;for(let f=0;f"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"},this._abortController=new AbortController}setOptions(e){return this.options=e,this}load(e,t,i,s){e===void 0&&(e=""),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);const a=this,r=_s.get(`image-bitmap:${e}`);if(r!==void 0){if(a.manager.itemStart(e),r.then){r.then(c=>{if(vp.has(r)===!0)s&&s(vp.get(r)),a.manager.itemError(e),a.manager.itemEnd(e);else return t&&t(c),a.manager.itemEnd(e),c});return}return setTimeout(function(){t&&t(r),a.manager.itemEnd(e)},0),r}const o={};o.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",o.headers=this.requestHeader,o.signal=typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;const l=fetch(e,o).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(a.options,{colorSpaceConversion:"none"}))}).then(function(c){return _s.add(`image-bitmap:${e}`,c),t&&t(c),a.manager.itemEnd(e),c}).catch(function(c){s&&s(c),vp.set(l,c),_s.remove(`image-bitmap:${e}`),a.manager.itemError(e),a.manager.itemEnd(e)});_s.add(`image-bitmap:${e}`,l),a.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}let gu;class $g{static getContext(){return gu===void 0&&(gu=new(window.AudioContext||window.webkitAudioContext)),gu}static setContext(e){gu=e}}class wP extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Kn(this.manager);r.setResponseType("arraybuffer"),r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(l){try{const c=l.slice(0);$g.getContext().decodeAudioData(c,function(d){t(d)}).catch(o)}catch(c){o(c)}},i,s);function o(l){s?s(l):console.error(l),a.manager.itemError(e)}}}const O0=new Ee,F0=new Ee,Ia=new Ee;class SP{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Qt,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Qt,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){const t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,Ia.copy(e.projectionMatrix);const s=t.eyeSep/2,a=s*t.near/t.focus,r=t.near*Math.tan(dr*t.fov*.5)/t.zoom;let o,l;F0.elements[12]=-s,O0.elements[12]=s,o=-r*t.aspect+a,l=r*t.aspect+a,Ia.elements[0]=2*t.near/(l-o),Ia.elements[8]=(l+o)/(l-o),this.cameraL.projectionMatrix.copy(Ia),o=-r*t.aspect-a,l=r*t.aspect-a,Ia.elements[0]=2*t.near/(l-o),Ia.elements[8]=(l+o)/(l-o),this.cameraR.projectionMatrix.copy(Ia)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(F0),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(O0)}}class PT extends Qt{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}}class Wg{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const t=performance.now();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}const La=new T,bp=new ht,TP=new T,ka=new T,Da=new T;class MP extends et{constructor(){super(),this.type="AudioListener",this.context=$g.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Wg}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return this.filter!==null?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);const t=this.context.listener;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(La,bp,TP),ka.set(0,0,-1).applyQuaternion(bp),Da.set(0,1,0).applyQuaternion(bp),t.positionX){const i=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(La.x,i),t.positionY.linearRampToValueAtTime(La.y,i),t.positionZ.linearRampToValueAtTime(La.z,i),t.forwardX.linearRampToValueAtTime(ka.x,i),t.forwardY.linearRampToValueAtTime(ka.y,i),t.forwardZ.linearRampToValueAtTime(ka.z,i),t.upX.linearRampToValueAtTime(Da.x,i),t.upY.linearRampToValueAtTime(Da.y,i),t.upZ.linearRampToValueAtTime(Da.z,i)}else t.setPosition(La.x,La.y,La.z),t.setOrientation(ka.x,ka.y,ka.z,Da.x,Da.y,Da.z)}}class IT extends et{constructor(e){super(),this.type="Audio",this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType="buffer",this.autoplay&&this.play(),this}play(e=0){if(this.isPlaying===!0){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}this._startedAt=this.context.currentTime+e;const t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(e=0){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this._progress=0,this.source!==null&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(i,s,this._addIndex*t,1,t);for(let l=t,c=t+t;l!==c;++l)if(i[l]!==i[l+t]){o.setValue(i,s);break}}saveOriginalState(){const e=this.binding,t=this.buffer,i=this.valueSize,s=i*this._origIndex;e.getValue(t,s);for(let a=i,r=s;a!==r;++a)t[a]=t[s+a%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){const e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let r=0;r!==a;++r)e[t+r]=e[i+r]}_slerp(e,t,i,s){ht.slerpFlat(e,t,e,t,e,i,s)}_slerpAdditive(e,t,i,s,a){const r=this._workIndex*a;ht.multiplyQuaternionsFlat(e,r,e,t,e,i),ht.slerpFlat(e,t,e,t,e,r,s)}_lerp(e,t,i,s,a){const r=1-s;for(let o=0;o!==a;++o){const l=t+o;e[l]=e[l]*r+e[i+o]*s}}_lerpAdditive(e,t,i,s,a){for(let r=0;r!==a;++r){const o=t+r;e[o]=e[o]+e[i+r]*s}}}const Xg="\\[\\]\\.:\\/",RP=new RegExp("["+Xg+"]","g"),Kg="[^"+Xg+"]",PP="[^"+Xg.replace("\\.","")+"]",IP=/((?:WC+[\/:])*)/.source.replace("WC",Kg),LP=/(WCOD+)?/.source.replace("WCOD",PP),kP=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Kg),DP=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Kg),OP=new RegExp("^"+IP+LP+kP+DP+"$"),FP=["material","materials","bones","map"];class NP{constructor(e,t,i){const s=i||vt.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,s)}getValue(e,t){this.bind();const i=this._targetGroup.nCachedObjects_,s=this._bindings[i];s!==void 0&&s.getValue(e,t)}setValue(e,t){const i=this._bindings;for(let s=this._targetGroup.nCachedObjects_,a=i.length;s!==a;++s)i[s].setValue(e,t)}bind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}}class vt{constructor(e,t,i){this.path=t,this.parsedPath=i||vt.parseTrackName(t),this.node=vt.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new vt.Composite(e,t,i):new vt(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(RP,"")}static parseTrackName(e){const t=OP.exec(e);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+e);const i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(s!==void 0&&s!==-1){const a=i.nodeName.substring(s+1);FP.indexOf(a)!==-1&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=a)}if(i.propertyName===null||i.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){const i=e.skeleton.getBoneByName(t);if(i!==void 0)return i}if(e.children){const i=function(a){for(let r=0;r=a){const d=a++,h=e[d];t[h.uuid]=u,e[u]=h,t[c]=d,e[d]=l;for(let f=0,p=s;f!==p;++f){const g=i[f],_=g[d],m=g[u];g[u]=_,g[d]=m}}}this.nCachedObjects_=a}uncache(){const e=this._objects,t=this._indicesByUUID,i=this._bindings,s=i.length;let a=this.nCachedObjects_,r=e.length;for(let o=0,l=arguments.length;o!==l;++o){const c=arguments[o],u=c.uuid,d=t[u];if(d!==void 0)if(delete t[u],d0&&(t[f.uuid]=d),e[d]=f,e.pop();for(let p=0,g=s;p!==g;++p){const _=i[p];_[d]=_[h],_.pop()}}}this.nCachedObjects_=a}subscribe_(e,t){const i=this._bindingsIndicesByPath;let s=i[e];const a=this._bindings;if(s!==void 0)return a[s];const r=this._paths,o=this._parsedPaths,l=this._objects,c=l.length,u=this.nCachedObjects_,d=new Array(c);s=a.length,i[e]=s,r.push(e),o.push(t),a.push(d);for(let h=u,f=l.length;h!==f;++h){const p=l[h];d[h]=new vt(p,e,t)}return d}unsubscribe_(e){const t=this._bindingsIndicesByPath,i=t[e];if(i!==void 0){const s=this._paths,a=this._parsedPaths,r=this._bindings,o=r.length-1,l=r[o],c=e[o];t[c]=i,r[i]=l,r.pop(),a[i]=a[o],a.pop(),s[i]=s[o],s.pop()}}}class kT{constructor(e,t,i=null,s=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=s;const a=t.tracks,r=a.length,o=new Array(r),l={endingStart:tr,endingEnd:tr};for(let c=0;c!==r;++c){const u=a[c].createInterpolant(null);o[c]=u,u.settings=l}this._interpolantSettings=l,this._interpolants=o,this._propertyBindings=new Array(r),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=IS,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i=!1){if(e.fadeOut(t),this.fadeIn(t),i===!0){const s=this._clip.duration,a=e._clip.duration,r=a/s,o=s/a;e.warp(1,r,t),this.warp(o,1,t)}return this}crossFadeTo(e,t,i=!1){return e.crossFadeFrom(this,t,i)}stopFading(){const e=this._weightInterpolant;return e!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){const s=this._mixer,a=s.time,r=this.timeScale;let o=this._timeScaleInterpolant;o===null&&(o=s._lendControlInterpolant(),this._timeScaleInterpolant=o);const l=o.parameterPositions,c=o.sampleValues;return l[0]=a,l[1]=a+i,c[0]=e/r,c[1]=t/r,this}stopWarping(){const e=this._timeScaleInterpolant;return e!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,s){if(!this.enabled){this._updateWeight(e);return}const a=this._startTime;if(a!==null){const l=(e-a)*i;l<0||i===0?t=0:(this._startTime=null,t=i*l)}t*=this._updateTimeScale(e);const r=this._updateTime(t),o=this._updateWeight(e);if(o>0){const l=this._interpolants,c=this._propertyBindings;switch(this.blendMode){case bg:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulateAdditive(o);break;case Yh:default:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulate(s,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;const i=this._weightInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopFading(),s===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;const i=this._timeScaleInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){const t=this._clip.duration,i=this.loop;let s=this.time+e,a=this._loopCount;const r=i===LS;if(e===0)return a===-1?s:r&&(a&1)===1?t-s:s;if(i===ph){a===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(a===-1&&(e>=0?(a=0,this._setEndings(!0,this.repetitions===0,r)):this._setEndings(this.repetitions===0,!0,r)),s>=t||s<0){const o=Math.floor(s/t);s-=t*o,a+=Math.abs(o);const l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=e>0?t:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(l===1){const c=e<0;this._setEndings(c,!c,r)}else this._setEndings(!1,!1,r);this._loopCount=a,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this.time=s;if(r&&(a&1)===1)return t-s}return s}_setEndings(e,t,i){const s=this._interpolantSettings;i?(s.endingStart=nr,s.endingEnd=nr):(e?s.endingStart=this.zeroSlopeAtStart?nr:tr:s.endingStart=ic,t?s.endingEnd=this.zeroSlopeAtEnd?nr:tr:s.endingEnd=ic)}_scheduleFading(e,t,i){const s=this._mixer,a=s.time;let r=this._weightInterpolant;r===null&&(r=s._lendControlInterpolant(),this._weightInterpolant=r);const o=r.parameterPositions,l=r.sampleValues;return o[0]=a,l[0]=t,o[1]=a+e,l[1]=i,this}}const BP=new Float32Array(1);class DT extends Ts{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){const i=e._localRoot||this._root,s=e._clip.tracks,a=s.length,r=e._propertyBindings,o=e._interpolants,l=i.uuid,c=this._bindingsByRootAndName;let u=c[l];u===void 0&&(u={},c[l]=u);for(let d=0;d!==a;++d){const h=s[d],f=h.name;let p=u[f];if(p!==void 0)++p.referenceCount,r[d]=p;else{if(p=r[d],p!==void 0){p._cacheIndex===null&&(++p.referenceCount,this._addInactiveBinding(p,l,f));continue}const g=t&&t._propertyBindings[d].binding.parsedPath;p=new LT(vt.create(i,f,g),h.ValueTypeName,h.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,l,f),r[d]=p}o[d].resultBuffer=p.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){const i=(e._localRoot||this._root).uuid,s=e._clip.uuid,a=this._actionsByClip[s];this._bindAction(e,a&&a.knownActions[0]),this._addInactiveAction(e,s,i)}const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];a.useCount++===0&&(this._lendBinding(a),a.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];--a.useCount===0&&(a.restoreOriginalState(),this._takeBackBinding(a))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){const t=e._cacheIndex;return t!==null&&t=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;const t=this._actions,i=this._nActiveActions,s=this.time+=e,a=Math.sign(e),r=this._accuIndex^=1;for(let c=0;c!==i;++c)t[c]._update(s,e,a,r);const o=this._bindings,l=this._nActiveBindings;for(let c=0;c!==l;++c)o[c].apply(r);return this}setTime(e){this.time=0;for(let t=0;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,z0).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const H0=new T,yu=new T,Xr=new T,Kr=new T,xp=new T,jP=new T,ZP=new T;class JP{constructor(e=new T,t=new T){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){H0.subVectors(e,this.start),yu.subVectors(this.end,this.start);const i=yu.dot(yu);let a=yu.dot(H0)/i;return t&&(a=Je(a,0,1)),a}closestPointToPoint(e,t,i){const s=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(s).add(this.start)}distanceSqToLine3(e,t=jP,i=ZP){const s=10000000000000001e-32;let a,r;const o=this.start,l=e.start,c=this.end,u=e.end;Xr.subVectors(c,o),Kr.subVectors(u,l),xp.subVectors(o,l);const d=Xr.dot(Xr),h=Kr.dot(Kr),f=Kr.dot(xp);if(d<=s&&h<=s)return t.copy(o),i.copy(l),t.sub(i),t.dot(t);if(d<=s)a=0,r=f/h,r=Je(r,0,1);else{const p=Xr.dot(xp);if(h<=s)r=0,a=Je(-p/d,0,1);else{const g=Xr.dot(Kr),_=d*h-g*g;_!==0?a=Je((g*f-p*h)/_,0,1):a=0,r=(g*a+f)/h,r<0?(r=0,a=Je(-p/d,0,1)):r>1&&(r=1,a=Je((g-p)/d,0,1))}}return t.copy(o).add(Xr.multiplyScalar(a)),i.copy(l).add(Kr.multiplyScalar(r)),t.sub(i),t.dot(t)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}const V0=new T;class QP extends et{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const i=new $e,s=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let r=0,o=1,l=32;r1)for(let d=0;d.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{K0.set(e.z,0,-e.x).normalize();const t=Math.acos(e.y);this.quaternion.setFromAxisAngle(K0,t)}}setLength(e,t=e*.2,i=t*.2){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(i,t,i),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class dI extends Fn{constructor(e=1){const t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],i=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],s=new $e;s.setAttribute("position",new Ce(t,3)),s.setAttribute("color",new Ce(i,3));const a=new Pt({vertexColors:!0,toneMapped:!1});super(s,a),this.type="AxesHelper"}setColors(e,t,i){const s=new de,a=this.geometry.attributes.color.array;return s.set(e),s.toArray(a,0),s.toArray(a,3),s.set(t),s.toArray(a,6),s.toArray(a,9),s.set(i),s.toArray(a,12),s.toArray(a,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class hI{constructor(){this.type="ShapePath",this.color=new de,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new vh,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,i,s){return this.currentPath.quadraticCurveTo(e,t,i,s),this}bezierCurveTo(e,t,i,s,a,r){return this.currentPath.bezierCurveTo(e,t,i,s,a,r),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){function t(m){const v=[];for(let y=0,b=m.length;yNumber.EPSILON){if(E<0&&(M=v[x],w=-w,C=v[S],E=-E),m.yC.y)continue;if(m.y===M.y){if(m.x===M.x)return!0}else{const R=E*(m.x-M.x)-w*(m.y-M.y);if(R===0)return!0;if(R<0)continue;b=!b}}else{if(m.y!==M.y)continue;if(C.x<=m.x&&m.x<=M.x||M.x<=m.x&&m.x<=C.x)return!0}}return b}const s=Li.isClockWise,a=this.subPaths;if(a.length===0)return[];let r,o,l;const c=[];if(a.length===1)return o=a[0],l=new $s,l.curves=o.curves,c.push(l),c;let u=!s(a[0].getPoints());u=e?!u:u;const d=[],h=[];let f=[],p=0,g;h[p]=void 0,f[p]=[];for(let m=0,v=a.length;m1){let m=!1,v=0;for(let y=0,b=h.length;y0&&m===!1&&(f=d)}let _;for(let m=0,v=h.length;me?(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2):(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0),n}function pI(n,e){const t=n.image&&n.image.width?n.image.width/n.image.height:1;return t>e?(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0):(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2),n}function mI(n){return n.repeat.x=1,n.repeat.y=1,n.offset.x=0,n.offset.y=0,n}function t_(n,e,t,i){const s=_I(i);switch(t){case gg:return n*e;case Xh:return n*e/s.components*s.byteLength;case wc:return n*e/s.components*s.byteLength;case vg:return n*e*2/s.components*s.byteLength;case Kh:return n*e*2/s.components*s.byteLength;case yg:return n*e*3/s.components*s.byteLength;case Xn:return n*e*4/s.components*s.byteLength;case qh:return n*e*4/s.components*s.byteLength;case Hl:case Vl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Gl:case $l:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Hd:case Gd:return Math.max(n,16)*Math.max(e,8)/4;case zd:case Vd:return Math.max(n,8)*Math.max(e,8)/2;case $d:case Wd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Xd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Kd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case qd:return Math.floor((n+4)/5)*Math.floor((e+3)/4)*16;case Yd:return Math.floor((n+4)/5)*Math.floor((e+4)/5)*16;case jd:return Math.floor((n+5)/6)*Math.floor((e+4)/5)*16;case Zd:return Math.floor((n+5)/6)*Math.floor((e+5)/6)*16;case Jd:return Math.floor((n+7)/8)*Math.floor((e+4)/5)*16;case Qd:return Math.floor((n+7)/8)*Math.floor((e+5)/6)*16;case eh:return Math.floor((n+7)/8)*Math.floor((e+7)/8)*16;case th:return Math.floor((n+9)/10)*Math.floor((e+4)/5)*16;case nh:return Math.floor((n+9)/10)*Math.floor((e+5)/6)*16;case ih:return Math.floor((n+9)/10)*Math.floor((e+7)/8)*16;case sh:return Math.floor((n+9)/10)*Math.floor((e+9)/10)*16;case ah:return Math.floor((n+11)/12)*Math.floor((e+9)/10)*16;case rh:return Math.floor((n+11)/12)*Math.floor((e+11)/12)*16;case oh:case lh:case ch:return Math.ceil(n/4)*Math.ceil(e/4)*16;case uh:case dh:return Math.ceil(n/4)*Math.ceil(e/4)*8;case hh:case fh:return Math.ceil(n/4)*Math.ceil(e/4)*16}throw new Error(`Unable to determine texture byte length for ${t} format.`)}function _I(n){switch(n){case ns:case fg:return{byteLength:1,components:1};case Ro:case pg:case ms:return{byteLength:2,components:1};case $h:case Wh:return{byteLength:2,components:4};case Ks:case Gh:case Mn:return{byteLength:4,components:1};case mg:case _g:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${n}.`)}class gI{static contain(e,t){return fI(e,t)}static cover(e,t){return pI(e,t)}static fill(e){return mI(e)}static getByteLength(e,t,i,s){return t_(e,t,i,s)}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:zh}}));typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=zh);function NT(){let n=null,e=!1,t=null,i=null;function s(a,r){t(a,r),i=n.requestAnimationFrame(s)}return{start:function(){e!==!0&&t!==null&&(i=n.requestAnimationFrame(s),e=!0)},stop:function(){n.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(a){t=a},setContext:function(a){n=a}}}function yI(n){const e=new WeakMap;function t(o,l){const c=o.array,u=o.usage,d=c.byteLength,h=n.createBuffer();n.bindBuffer(l,h),n.bufferData(l,c,u),o.onUploadCallback();let f;if(c instanceof Float32Array)f=n.FLOAT;else if(typeof Float16Array<"u"&&c instanceof Float16Array)f=n.HALF_FLOAT;else if(c instanceof Uint16Array)o.isFloat16BufferAttribute?f=n.HALF_FLOAT:f=n.UNSIGNED_SHORT;else if(c instanceof Int16Array)f=n.SHORT;else if(c instanceof Uint32Array)f=n.UNSIGNED_INT;else if(c instanceof Int32Array)f=n.INT;else if(c instanceof Int8Array)f=n.BYTE;else if(c instanceof Uint8Array)f=n.UNSIGNED_BYTE;else if(c instanceof Uint8ClampedArray)f=n.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+c);return{buffer:h,type:f,bytesPerElement:c.BYTES_PER_ELEMENT,version:o.version,size:d}}function i(o,l,c){const u=l.array,d=l.updateRanges;if(n.bindBuffer(c,o),d.length===0)n.bufferSubData(c,0,u);else{d.sort((f,p)=>f.start-p.start);let h=0;for(let f=1;ff+p?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:e.handedness,target:this})):!c.inputState.pinching&&h<=f-p&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:e.handedness,target:this}))}else l!==null&&e.gripSpace&&(a=t.getPose(e.gripSpace,i),a!==null&&(l.matrix.fromArray(a.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,a.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(a.linearVelocity)):l.hasLinearVelocity=!1,a.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(a.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(s=t.getPose(e.targetRaySpace,i),s===null&&a!==null&&(s=a),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(CR)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=a!==null),c!==null&&(c.visible=r!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){const i=new Et;i.matrixAutoUpdate=!1,i.visible=!1,e.joints[t.jointName]=i,e.add(i)}return e.joints[t.jointName]}}class lf{constructor(e,t=25e-5){this.isFogExp2=!0,this.name="",this.color=new de(e),this.density=t}clone(){return new lf(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class cf{constructor(e,t=1,i=1e3){this.isFog=!0,this.name="",this.color=new de(e),this.near=t,this.far=i}clone(){return new cf(this.color,this.near,this.far)}toJSON(){return{type:"Fog",name:this.name,color:this.color.getHex(),near:this.near,far:this.far}}}class Ac extends et{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new rn,this.environmentIntensity=1,this.environmentRotation=new rn,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null&&(this.background=e.background.clone()),e.environment!==null&&(this.environment=e.environment.clone()),e.fog!==null&&(this.fog=e.fog.clone()),this.backgroundBlurriness=e.backgroundBlurriness,this.backgroundIntensity=e.backgroundIntensity,this.backgroundRotation.copy(e.backgroundRotation),this.environmentIntensity=e.environmentIntensity,this.environmentRotation.copy(e.environmentRotation),e.overrideMaterial!==null&&(this.overrideMaterial=e.overrideMaterial.clone()),this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return this.fog!==null&&(t.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}}class Rc{constructor(e,t){this.isInterleavedBuffer=!0,this.array=e,this.stride=t,this.count=e!==void 0?e.length/t:0,this.usage=cc,this.updateRanges=[],this.version=0,this.uuid=bi()}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}copy(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this}copyAt(e,t,i){e*=this.stride,i*=t.stride;for(let s=0,a=this.stride;se.far||t.push({distance:l,point:cl.clone(),uv:ii.getInterpolation(cl,nu,dl,iu,h0,hp,f0,new ne),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}}function su(n,e,t,i,s,a){$r.subVectors(n,t).addScalar(.5).multiply(i),s!==void 0?(ul.x=a*$r.x-s*$r.y,ul.y=s*$r.x+a*$r.y):ul.copy($r),n.copy(e),n.x+=ul.x,n.y+=ul.y,n.applyMatrix4(oT)}const au=new T,p0=new T;class lT extends et{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);const t=e.levels;for(let i=0,s=t.length;i0){let i,s;for(i=1,s=t.length;i0){au.setFromMatrixPosition(this.matrixWorld);const s=e.ray.origin.distanceTo(au);this.getObjectForDistance(s).raycast(e,t)}}update(e){const t=this.levels;if(t.length>1){au.setFromMatrixPosition(e.matrixWorld),p0.setFromMatrixPosition(this.matrixWorld);const i=au.distanceTo(p0)/e.zoom;t[0].object.visible=!0;let s,a;for(s=1,a=t.length;s=r)t[s-1].object.visible=!1,t[s].object.visible=!0;else break}for(this._currentLevel=s-1;s1?null:t.copy(e.start).addScaledVector(i,a)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t<0&&i>0||i<0&&t>0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||LR.getNormalMatrix(e),s=this.coplanarPoint(mp).applyMatrix4(e),a=this.normal.applyMatrix3(i).normalize();return this.constant=-s.dot(a),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)&&e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Ra=new xn,kR=new ne(.5,.5),lu=new T;class Ko{constructor(e=new Ns,t=new Ns,i=new Ns,s=new Ns,a=new Ns,r=new Ns){this.planes=[e,t,i,s,a,r]}set(e,t,i,s,a,r){const o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(i),o[3].copy(s),o[4].copy(a),o[5].copy(r),this}copy(e){const t=this.planes;for(let i=0;i<6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e,t=yi,i=!1){const s=this.planes,a=e.elements,r=a[0],o=a[1],l=a[2],c=a[3],u=a[4],d=a[5],h=a[6],f=a[7],p=a[8],g=a[9],_=a[10],m=a[11],v=a[12],y=a[13],b=a[14],S=a[15];if(s[0].setComponents(c-r,f-u,m-p,S-v).normalize(),s[1].setComponents(c+r,f+u,m+p,S+v).normalize(),s[2].setComponents(c+o,f+d,m+g,S+y).normalize(),s[3].setComponents(c-o,f-d,m-g,S-y).normalize(),i)s[4].setComponents(l,h,_,b).normalize(),s[5].setComponents(c-l,f-h,m-_,S-b).normalize();else if(s[4].setComponents(c-l,f-h,m-_,S-b).normalize(),t===yi)s[5].setComponents(c+l,f+h,m+_,S+b).normalize();else if(t===No)s[5].setComponents(l,h,_,b).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),Ra.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{const t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),Ra.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(Ra)}intersectsSprite(e){Ra.center.set(0,0,0);const t=kR.distanceTo(e.center);return Ra.radius=.7071067811865476+t,Ra.applyMatrix4(e.matrixWorld),this.intersectsSphere(Ra)}intersectsSphere(e){const t=this.planes,i=e.center,s=-e.radius;for(let a=0;a<6;a++)if(t[a].distanceToPoint(i)0?e.max.x:e.min.x,lu.y=s.normal.y>0?e.max.y:e.min.y,lu.z=s.normal.z>0?e.max.z:e.min.z,s.distanceToPoint(lu)<0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i<6;i++)if(t[i].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}const rs=new Ee,os=new Ko;class pf{constructor(){this.coordinateSystem=yi}intersectsObject(e,t){if(!t.isArrayCamera||t.cameras.length===0)return!1;for(let i=0;i=a.length&&a.push({start:-1,count:-1,z:-1,index:-1});const o=a[this.index];r.push(o),this.index++,o.start=e,o.count=t,o.z=i,o.index=s}reset(){this.list.length=0,this.index=0}}const Yn=new Ee,NR=new de(1,1,1),S0=new Ko,UR=new pf,cu=new bn,Pa=new xn,pl=new T,T0=new T,BR=new T,gp=new FR,Rn=new Se,uu=[];function zR(n,e,t=0){const i=e.itemSize;if(n.isInterleavedBufferAttribute||n.array.constructor!==e.array.constructor){const s=n.count;for(let a=0;a65535?new Uint32Array(s):new Uint16Array(s);t.setIndex(new lt(a,1))}this._geometryInitialized=!0}}_validateGeometry(e){const t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw new Error('THREE.BatchedMesh: All geometries must consistently have "index".');for(const i in t.attributes){if(!e.hasAttribute(i))throw new Error(`THREE.BatchedMesh: Added geometry missing "${i}". All geometries must have consistent attributes.`);const s=e.getAttribute(i),a=t.getAttribute(i);if(s.itemSize!==a.itemSize||s.normalized!==a.normalized)throw new Error("THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.")}}validateInstanceId(e){const t=this._instanceInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid instanceId ${e}. Instance is either out of range or has been deleted.`)}validateGeometryId(e){const t=this._geometryInfo;if(e<0||e>=t.length||t[e].active===!1)throw new Error(`THREE.BatchedMesh: Invalid geometryId ${e}. Geometry is either out of range or has been deleted.`)}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new bn);const e=this.boundingBox,t=this._instanceInfo;e.makeEmpty();for(let i=0,s=t.length;i=this.maxInstanceCount&&this._availableInstanceIds.length===0)throw new Error("THREE.BatchedMesh: Maximum item count reached.");const i={visible:!0,active:!0,geometryIndex:e};let s=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(_p),s=this._availableInstanceIds.shift(),this._instanceInfo[s]=i):(s=this._instanceInfo.length,this._instanceInfo.push(i));const a=this._matricesTexture;Yn.identity().toArray(a.image.data,s*16),a.needsUpdate=!0;const r=this._colorsTexture;return r&&(NR.toArray(r.image.data,s*4),r.needsUpdate=!0),this._visibilityChanged=!0,s}addGeometry(e,t=-1,i=-1){this._initializeGeometry(e),this._validateGeometry(e);const s={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},a=this._geometryInfo;s.vertexStart=this._nextVertexStart,s.reservedVertexCount=t===-1?e.getAttribute("position").count:t;const r=e.getIndex();if(r!==null&&(s.indexStart=this._nextIndexStart,s.reservedIndexCount=i===-1?r.count:i),s.indexStart!==-1&&s.indexStart+s.reservedIndexCount>this._maxIndexCount||s.vertexStart+s.reservedVertexCount>this._maxVertexCount)throw new Error("THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.");let l;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(_p),l=this._availableGeometryIds.shift(),a[l]=s):(l=this._geometryCount,this._geometryCount++,a.push(s)),this.setGeometryAt(l,e),this._nextIndexStart=s.indexStart+s.reservedIndexCount,this._nextVertexStart=s.vertexStart+s.reservedVertexCount,l}setGeometryAt(e,t){if(e>=this._geometryCount)throw new Error("THREE.BatchedMesh: Maximum geometry count reached.");this._validateGeometry(t);const i=this.geometry,s=i.getIndex()!==null,a=i.getIndex(),r=t.getIndex(),o=this._geometryInfo[e];if(s&&r.count>o.reservedIndexCount||t.attributes.position.count>o.reservedVertexCount)throw new Error("THREE.BatchedMesh: Reserved space not large enough for provided geometry.");const l=o.vertexStart,c=o.reservedVertexCount;o.vertexCount=t.getAttribute("position").count;for(const u in i.attributes){const d=t.getAttribute(u),h=i.getAttribute(u);zR(d,h,l);const f=d.itemSize;for(let p=d.count,g=c;p=t.length||t[e].active===!1)return this;const i=this._instanceInfo;for(let s=0,a=i.length;so).sort((r,o)=>i[r].vertexStart-i[o].vertexStart),a=this.geometry;for(let r=0,o=i.length;r=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingBox===null){const a=new bn,r=i.index,o=i.attributes.position;for(let l=s.start,c=s.start+s.count;l=this._geometryCount)return null;const i=this.geometry,s=this._geometryInfo[e];if(s.boundingSphere===null){const a=new xn;this.getBoundingBoxAt(e,cu),cu.getCenter(a.center);const r=i.index,o=i.attributes.position;let l=0;for(let c=s.start,u=s.start+s.count;co.active);if(Math.max(...i.map(o=>o.vertexStart+o.reservedVertexCount))>e)throw new Error(`BatchedMesh: Geometry vertex values are being used outside the range ${t}. Cannot shrink further.`);if(this.geometry.index&&Math.max(...i.map(l=>l.indexStart+l.reservedIndexCount))>t)throw new Error(`BatchedMesh: Geometry index values are being used outside the range ${t}. Cannot shrink further.`);const a=this.geometry;a.dispose(),this._maxVertexCount=e,this._maxIndexCount=t,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new $e,this._initializeGeometry(a));const r=this.geometry;a.index&&Ia(a.index.array,r.index.array);for(const o in a.attributes)Ia(a.attributes[o].array,r.attributes[o].array)}raycast(e,t){const i=this._instanceInfo,s=this._geometryInfo,a=this.matrixWorld,r=this.geometry;Rn.material=this.material,Rn.geometry.index=r.index,Rn.geometry.attributes=r.attributes,Rn.geometry.boundingBox===null&&(Rn.geometry.boundingBox=new bn),Rn.geometry.boundingSphere===null&&(Rn.geometry.boundingSphere=new xn);for(let o=0,l=i.length;o({...t,boundingBox:t.boundingBox!==null?t.boundingBox.clone():null,boundingSphere:t.boundingSphere!==null?t.boundingSphere.clone():null})),this._instanceInfo=e._instanceInfo.map(t=>({...t})),this._availableInstanceIds=e._availableInstanceIds.slice(),this._availableGeometryIds=e._availableGeometryIds.slice(),this._nextIndexStart=e._nextIndexStart,this._nextVertexStart=e._nextVertexStart,this._geometryCount=e._geometryCount,this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._indirectTexture=e._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),this._colorsTexture!==null&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,this._colorsTexture!==null&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(e,t,i,s,a){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;const r=s.getIndex(),o=r===null?1:r.array.BYTES_PER_ELEMENT,l=this._instanceInfo,c=this._multiDrawStarts,u=this._multiDrawCounts,d=this._geometryInfo,h=this.perObjectFrustumCulled,f=this._indirectTexture,p=f.image.data,g=i.isArrayCamera?UR:S0;h&&!i.isArrayCamera&&(Yn.multiplyMatrices(i.projectionMatrix,i.matrixWorldInverse).multiply(this.matrixWorld),S0.setFromProjectionMatrix(Yn,i.coordinateSystem,i.reversedDepth));let _=0;if(this.sortObjects){Yn.copy(this.matrixWorld).invert(),pl.setFromMatrixPosition(i.matrixWorld).applyMatrix4(Yn),T0.set(0,0,-1).transformDirection(i.matrixWorld).transformDirection(Yn);for(let y=0,b=l.length;y0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;ai)return;yp.applyMatrix4(n.matrixWorld);const c=e.ray.origin.distanceTo(yp);if(!(ce.far))return{distance:c,point:E0.clone().applyMatrix4(n.matrixWorld),index:r,face:null,faceIndex:null,barycoord:null,object:n}}const C0=new T,A0=new T;class Fn extends On{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type="LineSegments"}computeLineDistances(){const e=this.geometry;if(e.index===null){const t=e.attributes.position,i=[];for(let s=0,a=t.count;s0){const s=t[i[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let a=0,r=s.length;as.far)return;a.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:e,face:null,faceIndex:null,barycoord:null,object:r})}}class uT extends zt{constructor(e,t,i,s,a=Gt,r=Gt,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;const u=this;function d(){u.needsUpdate=!0,u._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d)}"requestVideoFrameCallback"in e&&(this._requestVideoFrameCallbackId=e.requestVideoFrameCallback(d))}clone(){return new this.constructor(this.image).copy(this)}update(){const e=this.image;"requestVideoFrameCallback"in e===!1&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){this._requestVideoFrameCallbackId!==0&&this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),super.dispose()}}class HR extends uT{constructor(e,t,i,s,a,r,o,l){super({},e,t,i,s,a,r,o,l),this.isVideoFrameTexture=!0}update(){}clone(){return new this.constructor().copy(this)}setFrame(e){this.image=e,this.needsUpdate=!0}}class VR extends zt{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=hn,this.minFilter=hn,this.generateMipmaps=!1,this.needsUpdate=!0}}class mf extends zt{constructor(e,t,i,s,a,r,o,l,c,u,d,h){super(null,r,o,l,c,u,s,a,d,h),this.isCompressedTexture=!0,this.image={width:t,height:i},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}}class GR extends mf{constructor(e,t,i,s,a,r){super(e,t,i,a,r),this.isCompressedArrayTexture=!0,this.image.depth=s,this.wrapR=Wn,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}}class $R extends mf{constructor(e,t,i){super(void 0,e[0].width,e[0].height,t,i,Xs),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}}class Pc extends zt{constructor(e,t,i,s,a,r,o,l,c){super(e,t,i,s,a,r,o,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class Dg extends zt{constructor(e,t,i=Ks,s,a,r,o=hn,l=hn,c,u=Do,d=1){if(u!==Do&&u!==Oo)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");const h={width:e,height:t,depth:d};super(h,s,a,r,o,l,u,i,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new ha(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){const t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}}class Og extends zt{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}}class _f extends $e{constructor(e=1,t=1,i=4,s=8,a=1){super(),this.type="CapsuleGeometry",this.parameters={radius:e,height:t,capSegments:i,radialSegments:s,heightSegments:a},t=Math.max(0,t),i=Math.max(1,Math.floor(i)),s=Math.max(3,Math.floor(s)),a=Math.max(1,Math.floor(a));const r=[],o=[],l=[],c=[],u=t/2,d=Math.PI/2*e,h=t,f=2*d+h,p=i*2+a,g=s+1,_=new T,m=new T;for(let v=0;v<=p;v++){let y=0,b=0,S=0,x=0;if(v<=i){const w=v/i,E=w*Math.PI/2;b=-u-e*Math.cos(E),S=e*Math.sin(E),x=-e*Math.cos(E),y=w*d}else if(v<=i+a){const w=(v-i)/a;b=-u+w*t,S=e,x=0,y=d+w*h}else{const w=(v-i-a)/i,E=w*Math.PI/2;b=u+e*Math.sin(E),S=e*Math.cos(E),x=e*Math.sin(E),y=d+h+w*d}const M=Math.max(0,Math.min(1,y/f));let C=0;v===0?C=.5/s:v===p&&(C=-.5/s);for(let w=0;w<=s;w++){const E=w/s,R=E*Math.PI*2,L=Math.sin(R),O=Math.cos(R);m.x=-S*O,m.y=b,m.z=S*L,o.push(m.x,m.y,m.z),_.set(-S*O,x,S*L),_.normalize(),l.push(_.x,_.y,_.z),c.push(E+C,M)}if(v>0){const w=(v-1)*g;for(let E=0;E0&&y(!0),t>0&&y(!1)),this.setIndex(u),this.setAttribute("position",new Ce(d,3)),this.setAttribute("normal",new Ce(h,3)),this.setAttribute("uv",new Ce(f,2));function v(){const b=new T,S=new T;let x=0;const M=(t-e)/i;for(let C=0;C<=a;C++){const w=[],E=C/a,R=E*(t-e)+e;for(let L=0;L<=s;L++){const O=L/s,D=O*l+o,U=Math.sin(D),F=Math.cos(D);S.x=R*U,S.y=-E*i+_,S.z=R*F,d.push(S.x,S.y,S.z),b.set(U,M,F).normalize(),h.push(b.x,b.y,b.z),f.push(O,1-E),w.push(p++)}g.push(w)}for(let C=0;C0||w!==0)&&(u.push(E,R,O),x+=3),(t>0||w!==a-1)&&(u.push(R,L,O),x+=3)}c.addGroup(m,x,0),m+=x}function y(b){const S=p,x=new ne,M=new T;let C=0;const w=b===!0?e:t,E=b===!0?1:-1;for(let L=1;L<=s;L++)d.push(0,_*E,0),h.push(0,E,0),f.push(.5,.5),p++;const R=p;for(let L=0;L<=s;L++){const D=L/s*l+o,U=Math.cos(D),F=Math.sin(D);M.x=w*F,M.y=_*E,M.z=w*U,d.push(M.x,M.y,M.z),h.push(0,E,0),x.x=U*.5+.5,x.y=F*.5*E+.5,f.push(x.x,x.y),p++}for(let L=0;L.9&&M<.1&&(y<.2&&(r[v+0]+=1),b<.2&&(r[v+2]+=1),S<.2&&(r[v+4]+=1))}}function h(v){a.push(v.x,v.y,v.z)}function f(v,y){const b=v*3;y.x=e[b+0],y.y=e[b+1],y.z=e[b+2]}function p(){const v=new T,y=new T,b=new T,S=new T,x=new ne,M=new ne,C=new ne;for(let w=0,E=0;w0)l=s-1;else{l=s;break}if(s=l,i[s]===r)return s/(a-1);const u=i[s],h=i[s+1]-u,f=(r-u)/h;return(s+f)/(a-1)}getTangent(e,t){let s=e-1e-4,a=e+1e-4;s<0&&(s=0),a>1&&(a=1);const r=this.getPoint(s),o=this.getPoint(a),l=t||(r.isVector2?new ne:new T);return l.copy(o).sub(r).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t=!1){const i=new T,s=[],a=[],r=[],o=new T,l=new Ee;for(let f=0;f<=e;f++){const p=f/e;s[f]=this.getTangentAt(p,new T)}a[0]=new T,r[0]=new T;let c=Number.MAX_VALUE;const u=Math.abs(s[0].x),d=Math.abs(s[0].y),h=Math.abs(s[0].z);u<=c&&(c=u,i.set(1,0,0)),d<=c&&(c=d,i.set(0,1,0)),h<=c&&i.set(0,0,1),o.crossVectors(s[0],i).normalize(),a[0].crossVectors(s[0],o),r[0].crossVectors(s[0],a[0]);for(let f=1;f<=e;f++){if(a[f]=a[f-1].clone(),r[f]=r[f-1].clone(),o.crossVectors(s[f-1],s[f]),o.length()>Number.EPSILON){o.normalize();const p=Math.acos(Je(s[f-1].dot(s[f]),-1,1));a[f].applyMatrix4(l.makeRotationAxis(o,p))}r[f].crossVectors(s[f],a[f])}if(t===!0){let f=Math.acos(Je(a[0].dot(a[e]),-1,1));f/=e,s[0].dot(o.crossVectors(a[0],a[e]))>0&&(f=-f);for(let p=1;p<=e;p++)a[p].applyMatrix4(l.makeRotationAxis(s[p],f*p)),r[p].crossVectors(s[p],a[p])}return{tangents:s,normals:a,binormals:r}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.7,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class vf extends Fi{constructor(e=0,t=0,i=1,s=1,a=0,r=Math.PI*2,o=!1,l=0){super(),this.isEllipseCurve=!0,this.type="EllipseCurve",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=s,this.aStartAngle=a,this.aEndAngle=r,this.aClockwise=o,this.aRotation=l}getPoint(e,t=new ne){const i=t,s=Math.PI*2;let a=this.aEndAngle-this.aStartAngle;const r=Math.abs(a)s;)a-=s;a0?0:(Math.floor(Math.abs(o)/a)+1)*a:l===0&&o===a-1&&(o=a-2,l=1);let c,u;this.closed||o>0?c=s[(o-1)%a]:(yu.subVectors(s[0],s[1]).add(s[0]),c=yu);const d=s[o%a],h=s[(o+1)%a];if(this.closed||o+2s.length-2?s.length-1:r+1],d=s[r>s.length-3?s.length-1:r+2];return i.set(I0(o,l.x,c.x,u.x,d.x),I0(o,l.y,c.y,u.y,d.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t=i){const r=s[a]-i,o=this.curves[a],l=o.getLength(),c=l===0?0:1-r/l;return o.getPointAt(c,t)}a++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,s=this.curves.length;i1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t0){const d=c.getPoint(0);d.equals(this.currentPoint)||this.lineTo(d.x,d.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class $s extends Mh{constructor(e){super(e),this.uuid=bi(),this.type="Shape",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,s=this.holes.length;i80*t){o=1/0,l=1/0;let u=-1/0,d=-1/0;for(let h=t;hu&&(u=f),p>d&&(d=p)}c=Math.max(u-o,d-l),c=c!==0?32767/c:0}return hc(a,r,t,o,l,c,0),r}function mT(n,e,t,i,s){let a;if(s===pP(n,e,t,i)>0)for(let r=e;r=e;r-=i)a=L0(r/i|0,n[r],n[r+1],a);return a&&Ho(a,a.next)&&(pc(a),a=a.next),a}function vr(n,e){if(!n)return n;e||(e=n);let t=n,i;do if(i=!1,!t.steiner&&(Ho(t,t.next)||qt(t.prev,t,t.next)===0)){if(pc(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function hc(n,e,t,i,s,a,r){if(!n)return;!r&&a&&lP(n,i,s,a);let o=n;for(;n.prev!==n.next;){const l=n.prev,c=n.next;if(a?eP(n,i,s,a):QR(n)){e.push(l.i,n.i,c.i),pc(n),n=c.next,o=c.next;continue}if(n=c,n===o){r?r===1?(n=tP(vr(n),e),hc(n,e,t,i,s,a,2)):r===2&&nP(n,e,t,i,s,a):hc(vr(n),e,t,i,s,a,1);break}}}function QR(n){const e=n.prev,t=n,i=n.next;if(qt(e,t,i)>=0)return!1;const s=e.x,a=t.x,r=i.x,o=e.y,l=t.y,c=i.y,u=Math.min(s,a,r),d=Math.min(o,l,c),h=Math.max(s,a,r),f=Math.max(o,l,c);let p=i.next;for(;p!==e;){if(p.x>=u&&p.x<=h&&p.y>=d&&p.y<=f&&Ll(s,o,a,l,r,c,p.x,p.y)&&qt(p.prev,p,p.next)>=0)return!1;p=p.next}return!0}function eP(n,e,t,i){const s=n.prev,a=n,r=n.next;if(qt(s,a,r)>=0)return!1;const o=s.x,l=a.x,c=r.x,u=s.y,d=a.y,h=r.y,f=Math.min(o,l,c),p=Math.min(u,d,h),g=Math.max(o,l,c),_=Math.max(u,d,h),m=i_(f,p,e,t,i),v=i_(g,_,e,t,i);let y=n.prevZ,b=n.nextZ;for(;y&&y.z>=m&&b&&b.z<=v;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&Ll(o,u,l,d,c,h,y.x,y.y)&&qt(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&Ll(o,u,l,d,c,h,b.x,b.y)&&qt(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=m;){if(y.x>=f&&y.x<=g&&y.y>=p&&y.y<=_&&y!==s&&y!==r&&Ll(o,u,l,d,c,h,y.x,y.y)&&qt(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=f&&b.x<=g&&b.y>=p&&b.y<=_&&b!==s&&b!==r&&Ll(o,u,l,d,c,h,b.x,b.y)&&qt(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function tP(n,e){let t=n;do{const i=t.prev,s=t.next.next;!Ho(i,s)&&gT(i,t,t.next,s)&&fc(i,s)&&fc(s,i)&&(e.push(i.i,t.i,s.i),pc(t),pc(t.next),t=n=s),t=t.next}while(t!==n);return vr(t)}function nP(n,e,t,i,s,a){let r=n;do{let o=r.next.next;for(;o!==r.prev;){if(r.i!==o.i&&dP(r,o)){let l=yT(r,o);r=vr(r,r.next),l=vr(l,l.next),hc(r,e,t,i,s,a,0),hc(l,e,t,i,s,a,0);return}o=o.next}r=r.next}while(r!==n)}function iP(n,e,t,i){const s=[];for(let a=0,r=e.length;a=t.next.y&&t.next.y!==t.y){const d=t.x+(s-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(d<=i&&d>a&&(a=d,r=t.x=t.x&&t.x>=l&&i!==t.x&&_T(sr.x||t.x===r.x&&oP(r,t)))&&(r=t,u=d)}t=t.next}while(t!==o);return r}function oP(n,e){return qt(n.prev,n,e.prev)<0&&qt(e.next,n,n.next)<0}function lP(n,e,t,i){let s=n;do s.z===0&&(s.z=i_(s.x,s.y,e,t,i)),s.prevZ=s.prev,s.nextZ=s.next,s=s.next;while(s!==n);s.prevZ.nextZ=null,s.prevZ=null,cP(s)}function cP(n){let e,t=1;do{let i=n,s;n=null;let a=null;for(e=0;i;){e++;let r=i,o=0;for(let c=0;c0||l>0&&r;)o!==0&&(l===0||!r||i.z<=r.z)?(s=i,i=i.nextZ,o--):(s=r,r=r.nextZ,l--),a?a.nextZ=s:n=s,s.prevZ=a,a=s;i=r}a.nextZ=null,t*=2}while(e>1);return n}function i_(n,e,t,i,s){return n=(n-t)*s|0,e=(e-i)*s|0,n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,n|e<<1}function uP(n){let e=n,t=n;do(e.x=(n-r)*(a-o)&&(n-r)*(i-o)>=(t-r)*(e-o)&&(t-r)*(a-o)>=(s-r)*(i-o)}function Ll(n,e,t,i,s,a,r,o){return!(n===r&&e===o)&&_T(n,e,t,i,s,a,r,o)}function dP(n,e){return n.next.i!==e.i&&n.prev.i!==e.i&&!hP(n,e)&&(fc(n,e)&&fc(e,n)&&fP(n,e)&&(qt(n.prev,n,e.prev)||qt(n,e.prev,e))||Ho(n,e)&&qt(n.prev,n,n.next)>0&&qt(e.prev,e,e.next)>0)}function qt(n,e,t){return(e.y-n.y)*(t.x-e.x)-(e.x-n.x)*(t.y-e.y)}function Ho(n,e){return n.x===e.x&&n.y===e.y}function gT(n,e,t,i){const s=bu(qt(n,e,t)),a=bu(qt(n,e,i)),r=bu(qt(t,i,n)),o=bu(qt(t,i,e));return!!(s!==a&&r!==o||s===0&&vu(n,t,e)||a===0&&vu(n,i,e)||r===0&&vu(t,n,i)||o===0&&vu(t,e,i))}function vu(n,e,t){return e.x<=Math.max(n.x,t.x)&&e.x>=Math.min(n.x,t.x)&&e.y<=Math.max(n.y,t.y)&&e.y>=Math.min(n.y,t.y)}function bu(n){return n>0?1:n<0?-1:0}function hP(n,e){let t=n;do{if(t.i!==n.i&&t.next.i!==n.i&&t.i!==e.i&&t.next.i!==e.i&&gT(t,t.next,n,e))return!0;t=t.next}while(t!==n);return!1}function fc(n,e){return qt(n.prev,n,n.next)<0?qt(n,e,n.next)>=0&&qt(n,n.prev,e)>=0:qt(n,e,n.prev)<0||qt(n,n.next,e)<0}function fP(n,e){let t=n,i=!1;const s=(n.x+e.x)/2,a=(n.y+e.y)/2;do t.y>a!=t.next.y>a&&t.next.y!==t.y&&s<(t.next.x-t.x)*(a-t.y)/(t.next.y-t.y)+t.x&&(i=!i),t=t.next;while(t!==n);return i}function yT(n,e){const t=s_(n.i,n.x,n.y),i=s_(e.i,e.x,e.y),s=n.next,a=e.prev;return n.next=e,e.prev=n,t.next=s,s.prev=t,i.next=t,t.prev=i,a.next=i,i.prev=a,i}function L0(n,e,t,i){const s=s_(n,e,t);return i?(s.next=i.next,s.prev=i,i.next.prev=s,i.next=s):(s.prev=s,s.next=s),s}function pc(n){n.next.prev=n.prev,n.prev.next=n.next,n.prevZ&&(n.prevZ.nextZ=n.nextZ),n.nextZ&&(n.nextZ.prevZ=n.prevZ)}function s_(n,e,t){return{i:n,x:e,y:t,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function pP(n,e,t,i){let s=0;for(let a=e,r=t-i;a2&&n[e-1].equals(n[0])&&n.pop()}function D0(n,e){for(let t=0;tNumber.EPSILON){const J=Math.sqrt(A),ce=Math.sqrt(st*st+I*I),ee=j.x-We/J,Ve=j.y+ye/J,ve=Y.x-I/ce,Be=Y.y+st/ce,ze=((ve-ee)*I-(Be-Ve)*st)/(ye*I-We*st);Q=ee+ye*ze-G.x,ge=Ve+We*ze-G.y;const he=Q*Q+ge*ge;if(he<=2)return new ne(Q,ge);ue=Math.sqrt(he/2)}else{let J=!1;ye>Number.EPSILON?st>Number.EPSILON&&(J=!0):ye<-Number.EPSILON?st<-Number.EPSILON&&(J=!0):Math.sign(We)===Math.sign(I)&&(J=!0),J?(Q=-We,ge=ye,ue=Math.sqrt(A)):(Q=ye,ge=We,ue=Math.sqrt(A/2))}return new ne(Q/ue,ge/ue)}const ie=[];for(let G=0,j=U.length,Y=j-1,Q=G+1;G=0;G--){const j=G/_,Y=f*Math.cos(j*Math.PI/2),Q=p*Math.sin(j*Math.PI/2)+g;for(let ge=0,ue=U.length;ge=0;){const Q=Y;let ge=Y-1;ge<0&&(ge=G.length-1);for(let ue=0,ye=u+_*2;ue0)&&f.push(y,b,x),(m!==i-1||l0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:"",PHYSICAL:""},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}}class sr extends en{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type="MeshPhongMaterial",this.color=new de(16777215),this.specular=new de(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new de(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=xa,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new rn,this.combine=Mc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class xT extends en{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new de(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new de(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=xa,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}class wT extends en{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=xa,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}}class Cf extends en{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type="MeshLambertMaterial",this.color=new de(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new de(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=xa,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new rn,this.combine=Mc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}}class $g extends en{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type="MeshDepthMaterial",this.depthPacking=GS,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class Wg extends en{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type="MeshDistanceMaterial",this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}class ST extends en{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new de(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=xa,this.normalScale=new ne(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.flatShading=e.flatShading,this.fog=e.fog,this}}class TT extends Pt{constructor(e){super(),this.isLineDashedMaterial=!0,this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}}function ar(n,e){return!n||n.constructor===e?n:typeof e.BYTES_PER_ELEMENT=="number"?new e(n):Array.prototype.slice.call(n)}function MT(n){return ArrayBuffer.isView(n)&&!(n instanceof DataView)}function ET(n){function e(s,a){return n[s]-n[a]}const t=n.length,i=new Array(t);for(let s=0;s!==t;++s)i[s]=s;return i.sort(e),i}function a_(n,e,t){const i=n.length,s=new n.constructor(i);for(let a=0,r=0;r!==i;++a){const o=t[a]*e;for(let l=0;l!==e;++l)s[r++]=n[o+l]}return s}function Xg(n,e,t,i){let s=1,a=n[0];for(;a!==void 0&&a[i]===void 0;)a=n[s++];if(a===void 0)return;let r=a[i];if(r!==void 0)if(Array.isArray(r))do r=a[i],r!==void 0&&(e.push(a.time),t.push(...r)),a=n[s++];while(a!==void 0);else if(r.toArray!==void 0)do r=a[i],r!==void 0&&(e.push(a.time),r.toArray(t,t.length)),a=n[s++];while(a!==void 0);else do r=a[i],r!==void 0&&(e.push(a.time),t.push(r)),a=n[s++];while(a!==void 0)}function vP(n,e,t,i,s=30){const a=n.clone();a.name=e;const r=[];for(let l=0;l=i)){d.push(c.times[f]);for(let g=0;ga.tracks[l].times[0]&&(o=a.tracks[l].times[0]);for(let l=0;l=o.times[p]){const m=p*d+u,v=m+d-u;g=o.values.slice(m,v)}else{const m=o.createInterpolant(),v=u,y=d-u;m.evaluate(a),g=m.resultBuffer.slice(v,y)}l==="quaternion"&&new ht().fromArray(g).normalize().conjugate().toArray(g);const _=c.times.length;for(let m=0;m<_;++m){const v=m*f+h;if(l==="quaternion")ht.multiplyQuaternionsFlat(c.values,v,g,0,c.values,v);else{const y=f-h*2;for(let b=0;b=a)){const o=t[1];e=a)break t}r=i,i=0;break n}break e}for(;i>>1;et;)--r;if(++r,a!==0||r!==s){a>=r&&(r=Math.max(r,1),a=r-1);const o=this.getValueSize();this.times=i.slice(a,r),this.values=this.values.slice(a*o,r*o)}return this}validate(){let e=!0;const t=this.getValueSize();t-Math.floor(t)!==0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);const i=this.times,s=this.values,a=i.length;a===0&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);let r=null;for(let o=0;o!==a;o++){const l=i[o];if(typeof l=="number"&&isNaN(l)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,l),e=!1;break}if(r!==null&&r>l){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,l,r),e=!1;break}r=l}if(s!==void 0&&MT(s))for(let o=0,l=s.length;o!==l;++o){const c=s[o];if(isNaN(c)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,c),e=!1;break}}return e}optimize(){const e=this.times.slice(),t=this.values.slice(),i=this.getValueSize(),s=this.getInterpolation()===hd,a=e.length-1;let r=1;for(let o=1;o0){e[r]=e[a];for(let o=a*i,l=r*i,c=0;c!==i;++c)t[l+c]=t[o+c];++r}return r!==e.length?(this.times=e.slice(0,r),this.values=t.slice(0,r*i)):(this.times=e,this.values=t),this}clone(){const e=this.times.slice(),t=this.values.slice(),i=this.constructor,s=new i(this.name,e,t);return s.createInterpolant=this.createInterpolant,s}}Ni.prototype.ValueTypeName="";Ni.prototype.TimeBufferType=Float32Array;Ni.prototype.ValueBufferType=Float32Array;Ni.prototype.DefaultInterpolation=_r;class Mr extends Ni{constructor(e,t,i){super(e,t,i)}}Mr.prototype.ValueTypeName="bool";Mr.prototype.ValueBufferType=Array;Mr.prototype.DefaultInterpolation=Fo;Mr.prototype.InterpolantFactoryMethodLinear=void 0;Mr.prototype.InterpolantFactoryMethodSmooth=void 0;class qg extends Ni{constructor(e,t,i,s){super(e,t,i,s)}}qg.prototype.ValueTypeName="color";class ya extends Ni{constructor(e,t,i,s){super(e,t,i,s)}}ya.prototype.ValueTypeName="number";class RT extends Yo{constructor(e,t,i,s){super(e,t,i,s)}interpolate_(e,t,i,s){const a=this.resultBuffer,r=this.sampleValues,o=this.valueSize,l=(i-t)/(s-t);let c=e*o;for(let u=c+o;c!==u;c+=4)ht.slerpFlat(a,0,r,c-o,r,c,l);return a}}class Ss extends Ni{constructor(e,t,i,s){super(e,t,i,s)}InterpolantFactoryMethodLinear(e){return new RT(this.times,this.values,this.getValueSize(),e)}}Ss.prototype.ValueTypeName="quaternion";Ss.prototype.InterpolantFactoryMethodSmooth=void 0;class Er extends Ni{constructor(e,t,i){super(e,t,i)}}Er.prototype.ValueTypeName="string";Er.prototype.ValueBufferType=Array;Er.prototype.DefaultInterpolation=Fo;Er.prototype.InterpolantFactoryMethodLinear=void 0;Er.prototype.InterpolantFactoryMethodSmooth=void 0;class qs extends Ni{constructor(e,t,i,s){super(e,t,i,s)}}qs.prototype.ValueTypeName="vector";class va{constructor(e="",t=-1,i=[],s=tf){this.name=e,this.tracks=i,this.duration=t,this.blendMode=s,this.uuid=bi(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){const t=[],i=e.tracks,s=1/(e.fps||1);for(let r=0,o=i.length;r!==o;++r)t.push(SP(i[r]).scale(s));const a=new this(e.name,e.duration,t,e.blendMode);return a.uuid=e.uuid,a.userData=JSON.parse(e.userData||"{}"),a}static toJSON(e){const t=[],i=e.tracks,s={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let a=0,r=i.length;a!==r;++a)t.push(Ni.toJSON(i[a]));return s}static CreateFromMorphTargetSequence(e,t,i,s){const a=t.length,r=[];for(let o=0;o1){const d=u[1];let h=s[d];h||(s[d]=h=[]),h.push(c)}}const r=[];for(const o in s)r.push(this.CreateFromMorphTargetSequence(o,s[o],t,i));return r}static parseAnimation(e,t){if(console.warn("THREE.AnimationClip: parseAnimation() is deprecated and will be removed with r185"),!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;const i=function(d,h,f,p,g){if(f.length!==0){const _=[],m=[];Xg(f,_,m,p),_.length!==0&&g.push(new d(h,_,m))}},s=[],a=e.name||"default",r=e.fps||30,o=e.blendMode;let l=e.length||-1;const c=e.hierarchy||[];for(let d=0;d{t&&t(a),this.manager.itemEnd(e)},0),a;if(Is[e]!==void 0){Is[e].push({onLoad:t,onProgress:i,onError:s});return}Is[e]=[],Is[e].push({onLoad:t,onProgress:i,onError:s});const r=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?"include":"same-origin",signal:typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,l=this.responseType;fetch(r).then(c=>{if(c.status===200||c.status===0){if(c.status===0&&console.warn("THREE.FileLoader: HTTP Status 0 received."),typeof ReadableStream>"u"||c.body===void 0||c.body.getReader===void 0)return c;const u=Is[e],d=c.body.getReader(),h=c.headers.get("X-File-Size")||c.headers.get("Content-Length"),f=h?parseInt(h):0,p=f!==0;let g=0;const _=new ReadableStream({start(m){v();function v(){d.read().then(({done:y,value:b})=>{if(y)m.close();else{g+=b.byteLength;const S=new ProgressEvent("progress",{lengthComputable:p,loaded:g,total:f});for(let x=0,M=u.length;x{m.error(y)})}}});return new Response(_)}else throw new TP(`fetch for "${c.url}" responded with ${c.status}: ${c.statusText}`,c)}).then(c=>{switch(l){case"arraybuffer":return c.arrayBuffer();case"blob":return c.blob();case"document":return c.text().then(u=>new DOMParser().parseFromString(u,o));case"json":return c.json();default:if(o==="")return c.text();{const d=/charset="?([^;"\s]*)"?/i.exec(o),h=d&&d[1]?d[1].toLowerCase():void 0,f=new TextDecoder(h);return c.arrayBuffer().then(p=>f.decode(p))}}}).then(c=>{_s.add(`file:${e}`,c);const u=Is[e];delete Is[e];for(let d=0,h=u.length;d{const u=Is[e];if(u===void 0)throw this.manager.itemError(e),c;delete Is[e];for(let d=0,h=u.length;d{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}class MP extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Kn(this.manager);r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t=[];for(let i=0;i0:s.vertexColors=e.vertexColors),e.uniforms!==void 0)for(const a in e.uniforms){const r=e.uniforms[a];switch(s.uniforms[a]={},r.type){case"t":s.uniforms[a].value=i(r.value);break;case"c":s.uniforms[a].value=new de().setHex(r.value);break;case"v2":s.uniforms[a].value=new ne().fromArray(r.value);break;case"v3":s.uniforms[a].value=new T().fromArray(r.value);break;case"v4":s.uniforms[a].value=new Ye().fromArray(r.value);break;case"m3":s.uniforms[a].value=new rt().fromArray(r.value);break;case"m4":s.uniforms[a].value=new Ee().fromArray(r.value);break;default:s.uniforms[a].value=r.value}}if(e.defines!==void 0&&(s.defines=e.defines),e.vertexShader!==void 0&&(s.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(s.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(s.glslVersion=e.glslVersion),e.extensions!==void 0)for(const a in e.extensions)s.extensions[a]=e.extensions[a];if(e.lights!==void 0&&(s.lights=e.lights),e.clipping!==void 0&&(s.clipping=e.clipping),e.size!==void 0&&(s.size=e.size),e.sizeAttenuation!==void 0&&(s.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(s.map=i(e.map)),e.matcap!==void 0&&(s.matcap=i(e.matcap)),e.alphaMap!==void 0&&(s.alphaMap=i(e.alphaMap)),e.bumpMap!==void 0&&(s.bumpMap=i(e.bumpMap)),e.bumpScale!==void 0&&(s.bumpScale=e.bumpScale),e.normalMap!==void 0&&(s.normalMap=i(e.normalMap)),e.normalMapType!==void 0&&(s.normalMapType=e.normalMapType),e.normalScale!==void 0){let a=e.normalScale;Array.isArray(a)===!1&&(a=[a,a]),s.normalScale=new ne().fromArray(a)}return e.displacementMap!==void 0&&(s.displacementMap=i(e.displacementMap)),e.displacementScale!==void 0&&(s.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(s.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(s.roughnessMap=i(e.roughnessMap)),e.metalnessMap!==void 0&&(s.metalnessMap=i(e.metalnessMap)),e.emissiveMap!==void 0&&(s.emissiveMap=i(e.emissiveMap)),e.emissiveIntensity!==void 0&&(s.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(s.specularMap=i(e.specularMap)),e.specularIntensityMap!==void 0&&(s.specularIntensityMap=i(e.specularIntensityMap)),e.specularColorMap!==void 0&&(s.specularColorMap=i(e.specularColorMap)),e.envMap!==void 0&&(s.envMap=i(e.envMap)),e.envMapRotation!==void 0&&s.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(s.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(s.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(s.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(s.lightMap=i(e.lightMap)),e.lightMapIntensity!==void 0&&(s.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(s.aoMap=i(e.aoMap)),e.aoMapIntensity!==void 0&&(s.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(s.gradientMap=i(e.gradientMap)),e.clearcoatMap!==void 0&&(s.clearcoatMap=i(e.clearcoatMap)),e.clearcoatRoughnessMap!==void 0&&(s.clearcoatRoughnessMap=i(e.clearcoatRoughnessMap)),e.clearcoatNormalMap!==void 0&&(s.clearcoatNormalMap=i(e.clearcoatNormalMap)),e.clearcoatNormalScale!==void 0&&(s.clearcoatNormalScale=new ne().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(s.iridescenceMap=i(e.iridescenceMap)),e.iridescenceThicknessMap!==void 0&&(s.iridescenceThicknessMap=i(e.iridescenceThicknessMap)),e.transmissionMap!==void 0&&(s.transmissionMap=i(e.transmissionMap)),e.thicknessMap!==void 0&&(s.thicknessMap=i(e.thicknessMap)),e.anisotropyMap!==void 0&&(s.anisotropyMap=i(e.anisotropyMap)),e.sheenColorMap!==void 0&&(s.sheenColorMap=i(e.sheenColorMap)),e.sheenRoughnessMap!==void 0&&(s.sheenRoughnessMap=i(e.sheenRoughnessMap)),s}setTextures(e){return this.textures=e,this}createMaterialFromType(e){return Pf.createMaterialFromType(e)}static createMaterialFromType(e){const t={ShadowMaterial:vT,SpriteMaterial:uf,RawShaderMaterial:bT,ShaderMaterial:ri,PointsMaterial:fa,MeshPhysicalMaterial:li,MeshStandardMaterial:kn,MeshPhongMaterial:sr,MeshToonMaterial:xT,MeshNormalMaterial:wT,MeshLambertMaterial:Cf,MeshDepthMaterial:$g,MeshDistanceMaterial:Wg,MeshBasicMaterial:je,MeshMatcapMaterial:ST,LineDashedMaterial:TT,LineBasicMaterial:Pt,Material:en};return new t[e]}}class Ws{static extractUrlBase(e){const t=e.lastIndexOf("/");return t===-1?"./":e.slice(0,t+1)}static resolveURL(e,t){return typeof e!="string"||e===""?"":(/^https?:\/\//i.test(t)&&/^\//.test(e)&&(t=t.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(e)||/^data:.*,.*$/i.test(e)||/^blob:.*$/i.test(e)?e:t+e)}}class FT extends $e{constructor(){super(),this.isInstancedBufferGeometry=!0,this.type="InstancedBufferGeometry",this.instanceCount=1/0}copy(e){return super.copy(e),this.instanceCount=e.instanceCount,this}toJSON(){const e=super.toJSON();return e.instanceCount=this.instanceCount,e.isInstancedBufferGeometry=!0,e}}class NT extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Kn(a.manager);r.setPath(a.path),r.setRequestHeader(a.requestHeader),r.setWithCredentials(a.withCredentials),r.load(e,function(o){try{t(a.parse(JSON.parse(o)))}catch(l){s?s(l):console.error(l),a.manager.itemError(e)}},i,s)}parse(e){const t={},i={};function s(f,p){if(t[p]!==void 0)return t[p];const _=f.interleavedBuffers[p],m=a(f,_.buffer),v=lo(_.type,m),y=new Rc(v,_.stride);return y.uuid=_.uuid,t[p]=y,y}function a(f,p){if(i[p]!==void 0)return i[p];const _=f.arrayBuffers[p],m=new Uint32Array(_).buffer;return i[p]=m,m}const r=e.isInstancedBufferGeometry?new FT:new $e,o=e.data.index;if(o!==void 0){const f=lo(o.type,o.array);r.setIndex(new lt(f,1))}const l=e.data.attributes;for(const f in l){const p=l[f];let g;if(p.isInterleavedBufferAttribute){const _=s(e.data,p.data);g=new ga(_,p.itemSize,p.offset,p.normalized)}else{const _=lo(p.type,p.array),m=p.isInstancedBufferAttribute?gr:lt;g=new m(_,p.itemSize,p.normalized)}p.name!==void 0&&(g.name=p.name),p.usage!==void 0&&g.setUsage(p.usage),r.setAttribute(f,g)}const c=e.data.morphAttributes;if(c)for(const f in c){const p=c[f],g=[];for(let _=0,m=p.length;_0){const l=new Yg(t);a=new mc(l),a.setCrossOrigin(this.crossOrigin);for(let c=0,u=e.length;c0){s=new mc(this.manager),s.setCrossOrigin(this.crossOrigin);for(let r=0,o=e.length;r{let _=null,m=null;return g.boundingBox!==void 0&&(_=new bn().fromJSON(g.boundingBox)),g.boundingSphere!==void 0&&(m=new xn().fromJSON(g.boundingSphere)),{...g,boundingBox:_,boundingSphere:m}}),r._instanceInfo=e.instanceInfo,r._availableInstanceIds=e._availableInstanceIds,r._availableGeometryIds=e._availableGeometryIds,r._nextIndexStart=e.nextIndexStart,r._nextVertexStart=e.nextVertexStart,r._geometryCount=e.geometryCount,r._maxInstanceCount=e.maxInstanceCount,r._maxVertexCount=e.maxVertexCount,r._maxIndexCount=e.maxIndexCount,r._geometryInitialized=e.geometryInitialized,r._matricesTexture=c(e.matricesTexture.uuid),r._indirectTexture=c(e.indirectTexture.uuid),e.colorsTexture!==void 0&&(r._colorsTexture=c(e.colorsTexture.uuid)),e.boundingSphere!==void 0&&(r.boundingSphere=new xn().fromJSON(e.boundingSphere)),e.boundingBox!==void 0&&(r.boundingBox=new bn().fromJSON(e.boundingBox));break;case"LOD":r=new lT;break;case"Line":r=new On(o(e.geometry),l(e.material));break;case"LineLoop":r=new kg(o(e.geometry),l(e.material));break;case"LineSegments":r=new Fn(o(e.geometry),l(e.material));break;case"PointCloud":case"Points":r=new fr(o(e.geometry),l(e.material));break;case"Sprite":r=new df(l(e.material));break;case"Group":r=new Et;break;case"Bone":r=new zo;break;default:r=new et}if(r.uuid=e.uuid,e.name!==void 0&&(r.name=e.name),e.matrix!==void 0?(r.matrix.fromArray(e.matrix),e.matrixAutoUpdate!==void 0&&(r.matrixAutoUpdate=e.matrixAutoUpdate),r.matrixAutoUpdate&&r.matrix.decompose(r.position,r.quaternion,r.scale)):(e.position!==void 0&&r.position.fromArray(e.position),e.rotation!==void 0&&r.rotation.fromArray(e.rotation),e.quaternion!==void 0&&r.quaternion.fromArray(e.quaternion),e.scale!==void 0&&r.scale.fromArray(e.scale)),e.up!==void 0&&r.up.fromArray(e.up),e.castShadow!==void 0&&(r.castShadow=e.castShadow),e.receiveShadow!==void 0&&(r.receiveShadow=e.receiveShadow),e.shadow&&(e.shadow.intensity!==void 0&&(r.shadow.intensity=e.shadow.intensity),e.shadow.bias!==void 0&&(r.shadow.bias=e.shadow.bias),e.shadow.normalBias!==void 0&&(r.shadow.normalBias=e.shadow.normalBias),e.shadow.radius!==void 0&&(r.shadow.radius=e.shadow.radius),e.shadow.mapSize!==void 0&&r.shadow.mapSize.fromArray(e.shadow.mapSize),e.shadow.camera!==void 0&&(r.shadow.camera=this.parseObject(e.shadow.camera))),e.visible!==void 0&&(r.visible=e.visible),e.frustumCulled!==void 0&&(r.frustumCulled=e.frustumCulled),e.renderOrder!==void 0&&(r.renderOrder=e.renderOrder),e.userData!==void 0&&(r.userData=e.userData),e.layers!==void 0&&(r.layers.mask=e.layers),e.children!==void 0){const h=e.children;for(let f=0;f"u"&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),typeof fetch>"u"&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.options={premultiplyAlpha:"none"},this._abortController=new AbortController}setOptions(e){return this.options=e,this}load(e,t,i,s){e===void 0&&(e=""),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);const a=this,r=_s.get(`image-bitmap:${e}`);if(r!==void 0){if(a.manager.itemStart(e),r.then){r.then(c=>{if(Mp.has(r)===!0)s&&s(Mp.get(r)),a.manager.itemError(e),a.manager.itemEnd(e);else return t&&t(c),a.manager.itemEnd(e),c});return}return setTimeout(function(){t&&t(r),a.manager.itemEnd(e)},0),r}const o={};o.credentials=this.crossOrigin==="anonymous"?"same-origin":"include",o.headers=this.requestHeader,o.signal=typeof AbortSignal.any=="function"?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;const l=fetch(e,o).then(function(c){return c.blob()}).then(function(c){return createImageBitmap(c,Object.assign(a.options,{colorSpaceConversion:"none"}))}).then(function(c){return _s.add(`image-bitmap:${e}`,c),t&&t(c),a.manager.itemEnd(e),c}).catch(function(c){s&&s(c),Mp.set(l,c),_s.remove(`image-bitmap:${e}`),a.manager.itemError(e),a.manager.itemEnd(e)});_s.add(`image-bitmap:${e}`,l),a.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}}let xu;class Zg{static getContext(){return xu===void 0&&(xu=new(window.AudioContext||window.webkitAudioContext)),xu}static setContext(e){xu=e}}class kP extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=new Kn(this.manager);r.setResponseType("arraybuffer"),r.setPath(this.path),r.setRequestHeader(this.requestHeader),r.setWithCredentials(this.withCredentials),r.load(e,function(l){try{const c=l.slice(0);Zg.getContext().decodeAudioData(c,function(d){t(d)}).catch(o)}catch(c){o(c)}},i,s);function o(l){s?s(l):console.error(l),a.manager.itemError(e)}}}const V0=new Ee,G0=new Ee,La=new Ee;class DP{constructor(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new Qt,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Qt,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){const t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,La.copy(e.projectionMatrix);const s=t.eyeSep/2,a=s*t.near/t.focus,r=t.near*Math.tan(hr*t.fov*.5)/t.zoom;let o,l;G0.elements[12]=-s,V0.elements[12]=s,o=-r*t.aspect+a,l=r*t.aspect+a,La.elements[0]=2*t.near/(l-o),La.elements[8]=(l+o)/(l-o),this.cameraL.projectionMatrix.copy(La),o=-r*t.aspect-a,l=r*t.aspect-a,La.elements[0]=2*t.near/(l-o),La.elements[8]=(l+o)/(l-o),this.cameraR.projectionMatrix.copy(La)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(G0),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(V0)}}class BT extends Qt{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}}class Jg{constructor(e=!0){this.autoStart=e,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=performance.now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let e=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const t=performance.now();e=(t-this.oldTime)/1e3,this.oldTime=t,this.elapsedTime+=e}return e}}const ka=new T,Ep=new ht,OP=new T,Da=new T,Oa=new T;class FP extends et{constructor(){super(),this.type="AudioListener",this.context=Zg.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Jg}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return this.filter!==null?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e);const t=this.context.listener;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(ka,Ep,OP),Da.set(0,0,-1).applyQuaternion(Ep),Oa.set(0,1,0).applyQuaternion(Ep),t.positionX){const i=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(ka.x,i),t.positionY.linearRampToValueAtTime(ka.y,i),t.positionZ.linearRampToValueAtTime(ka.z,i),t.forwardX.linearRampToValueAtTime(Da.x,i),t.forwardY.linearRampToValueAtTime(Da.y,i),t.forwardZ.linearRampToValueAtTime(Da.z,i),t.upX.linearRampToValueAtTime(Oa.x,i),t.upY.linearRampToValueAtTime(Oa.y,i),t.upZ.linearRampToValueAtTime(Oa.z,i)}else t.setPosition(ka.x,ka.y,ka.z),t.setOrientation(Da.x,Da.y,Da.z,Oa.x,Oa.y,Oa.z)}}class zT extends et{constructor(e){super(),this.type="Audio",this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType="empty",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaNode",this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType="mediaStreamNode",this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType="buffer",this.autoplay&&this.play(),this}play(e=0){if(this.isPlaying===!0){console.warn("THREE.Audio: Audio is already playing.");return}if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}this._startedAt=this.context.currentTime+e;const t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(e=0){if(this.hasPlaybackControl===!1){console.warn("THREE.Audio: this Audio has no playback control.");return}return this._progress=0,this.source!==null&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(i,s,this._addIndex*t,1,t);for(let l=t,c=t+t;l!==c;++l)if(i[l]!==i[l+t]){o.setValue(i,s);break}}saveOriginalState(){const e=this.binding,t=this.buffer,i=this.valueSize,s=i*this._origIndex;e.getValue(t,s);for(let a=i,r=s;a!==r;++a)t[a]=t[s+a%i];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){const e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let i=e;i=.5)for(let r=0;r!==a;++r)e[t+r]=e[i+r]}_slerp(e,t,i,s){ht.slerpFlat(e,t,e,t,e,i,s)}_slerpAdditive(e,t,i,s,a){const r=this._workIndex*a;ht.multiplyQuaternionsFlat(e,r,e,t,e,i),ht.slerpFlat(e,t,e,t,e,r,s)}_lerp(e,t,i,s,a){const r=1-s;for(let o=0;o!==a;++o){const l=t+o;e[l]=e[l]*r+e[i+o]*s}}_lerpAdditive(e,t,i,s,a){for(let r=0;r!==a;++r){const o=t+r;e[o]=e[o]+e[i+r]*s}}}const Qg="\\[\\]\\.:\\/",zP=new RegExp("["+Qg+"]","g"),ey="[^"+Qg+"]",HP="[^"+Qg.replace("\\.","")+"]",VP=/((?:WC+[\/:])*)/.source.replace("WC",ey),GP=/(WCOD+)?/.source.replace("WCOD",HP),$P=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",ey),WP=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",ey),XP=new RegExp("^"+VP+GP+$P+WP+"$"),KP=["material","materials","bones","map"];class qP{constructor(e,t,i){const s=i||vt.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,s)}getValue(e,t){this.bind();const i=this._targetGroup.nCachedObjects_,s=this._bindings[i];s!==void 0&&s.getValue(e,t)}setValue(e,t){const i=this._bindings;for(let s=this._targetGroup.nCachedObjects_,a=i.length;s!==a;++s)i[s].setValue(e,t)}bind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].bind()}unbind(){const e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,i=e.length;t!==i;++t)e[t].unbind()}}class vt{constructor(e,t,i){this.path=t,this.parsedPath=i||vt.parseTrackName(t),this.node=vt.findNode(e,this.parsedPath.nodeName),this.rootNode=e,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(e,t,i){return e&&e.isAnimationObjectGroup?new vt.Composite(e,t,i):new vt(e,t,i)}static sanitizeNodeName(e){return e.replace(/\s/g,"_").replace(zP,"")}static parseTrackName(e){const t=XP.exec(e);if(t===null)throw new Error("PropertyBinding: Cannot parse trackName: "+e);const i={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},s=i.nodeName&&i.nodeName.lastIndexOf(".");if(s!==void 0&&s!==-1){const a=i.nodeName.substring(s+1);KP.indexOf(a)!==-1&&(i.nodeName=i.nodeName.substring(0,s),i.objectName=a)}if(i.propertyName===null||i.propertyName.length===0)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+e);return i}static findNode(e,t){if(t===void 0||t===""||t==="."||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){const i=e.skeleton.getBoneByName(t);if(i!==void 0)return i}if(e.children){const i=function(a){for(let r=0;r=a){const d=a++,h=e[d];t[h.uuid]=u,e[u]=h,t[c]=d,e[d]=l;for(let f=0,p=s;f!==p;++f){const g=i[f],_=g[d],m=g[u];g[u]=_,g[d]=m}}}this.nCachedObjects_=a}uncache(){const e=this._objects,t=this._indicesByUUID,i=this._bindings,s=i.length;let a=this.nCachedObjects_,r=e.length;for(let o=0,l=arguments.length;o!==l;++o){const c=arguments[o],u=c.uuid,d=t[u];if(d!==void 0)if(delete t[u],d0&&(t[f.uuid]=d),e[d]=f,e.pop();for(let p=0,g=s;p!==g;++p){const _=i[p];_[d]=_[h],_.pop()}}}this.nCachedObjects_=a}subscribe_(e,t){const i=this._bindingsIndicesByPath;let s=i[e];const a=this._bindings;if(s!==void 0)return a[s];const r=this._paths,o=this._parsedPaths,l=this._objects,c=l.length,u=this.nCachedObjects_,d=new Array(c);s=a.length,i[e]=s,r.push(e),o.push(t),a.push(d);for(let h=u,f=l.length;h!==f;++h){const p=l[h];d[h]=new vt(p,e,t)}return d}unsubscribe_(e){const t=this._bindingsIndicesByPath,i=t[e];if(i!==void 0){const s=this._paths,a=this._parsedPaths,r=this._bindings,o=r.length-1,l=r[o],c=e[o];t[c]=i,r[i]=l,r.pop(),a[i]=a[o],a.pop(),s[i]=s[o],s.pop()}}}class VT{constructor(e,t,i=null,s=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=i,this.blendMode=s;const a=t.tracks,r=a.length,o=new Array(r),l={endingStart:nr,endingEnd:nr};for(let c=0;c!==r;++c){const u=a[c].createInterpolant(null);o[c]=u,u.settings=l}this._interpolantSettings=l,this._interpolants=o,this._propertyBindings=new Array(r),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=zS,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled&&!this.paused&&this.timeScale!==0&&this._startTime===null&&this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(e){return this._startTime=e,this}setLoop(e,t){return this.loop=e,this.repetitions=t,this}setEffectiveWeight(e){return this.weight=e,this._effectiveWeight=this.enabled?e:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,i=!1){if(e.fadeOut(t),this.fadeIn(t),i===!0){const s=this._clip.duration,a=e._clip.duration,r=a/s,o=s/a;e.warp(1,r,t),this.warp(o,1,t)}return this}crossFadeTo(e,t,i=!1){return e.crossFadeFrom(this,t,i)}stopFading(){const e=this._weightInterpolant;return e!==null&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}setEffectiveTimeScale(e){return this.timeScale=e,this._effectiveTimeScale=this.paused?0:e,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(e){return this.timeScale=this._clip.duration/e,this.stopWarping()}syncWith(e){return this.time=e.time,this.timeScale=e.timeScale,this.stopWarping()}halt(e){return this.warp(this._effectiveTimeScale,0,e)}warp(e,t,i){const s=this._mixer,a=s.time,r=this.timeScale;let o=this._timeScaleInterpolant;o===null&&(o=s._lendControlInterpolant(),this._timeScaleInterpolant=o);const l=o.parameterPositions,c=o.sampleValues;return l[0]=a,l[1]=a+i,c[0]=e/r,c[1]=t/r,this}stopWarping(){const e=this._timeScaleInterpolant;return e!==null&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(e)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(e,t,i,s){if(!this.enabled){this._updateWeight(e);return}const a=this._startTime;if(a!==null){const l=(e-a)*i;l<0||i===0?t=0:(this._startTime=null,t=i*l)}t*=this._updateTimeScale(e);const r=this._updateTime(t),o=this._updateWeight(e);if(o>0){const l=this._interpolants,c=this._propertyBindings;switch(this.blendMode){case Cg:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulateAdditive(o);break;case tf:default:for(let u=0,d=l.length;u!==d;++u)l[u].evaluate(r),c[u].accumulate(s,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;const i=this._weightInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopFading(),s===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;const i=this._timeScaleInterpolant;if(i!==null){const s=i.evaluate(e)[0];t*=s,e>i.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){const t=this._clip.duration,i=this.loop;let s=this.time+e,a=this._loopCount;const r=i===HS;if(e===0)return a===-1?s:r&&(a&1)===1?t-s:s;if(i===bh){a===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(s>=t)s=t;else if(s<0)s=0;else{this.time=s;break e}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(a===-1&&(e>=0?(a=0,this._setEndings(!0,this.repetitions===0,r)):this._setEndings(this.repetitions===0,!0,r)),s>=t||s<0){const o=Math.floor(s/t);s-=t*o,a+=Math.abs(o);const l=this.repetitions-a;if(l<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,s=e>0?t:0,this.time=s,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(l===1){const c=e<0;this._setEndings(c,!c,r)}else this._setEndings(!1,!1,r);this._loopCount=a,this.time=s,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this.time=s;if(r&&(a&1)===1)return t-s}return s}_setEndings(e,t,i){const s=this._interpolantSettings;i?(s.endingStart=ir,s.endingEnd=ir):(e?s.endingStart=this.zeroSlopeAtStart?ir:nr:s.endingStart=oc,t?s.endingEnd=this.zeroSlopeAtEnd?ir:nr:s.endingEnd=oc)}_scheduleFading(e,t,i){const s=this._mixer,a=s.time;let r=this._weightInterpolant;r===null&&(r=s._lendControlInterpolant(),this._weightInterpolant=r);const o=r.parameterPositions,l=r.sampleValues;return o[0]=a,l[0]=t,o[1]=a+e,l[1]=i,this}}const jP=new Float32Array(1);class GT extends Ts{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(e,t){const i=e._localRoot||this._root,s=e._clip.tracks,a=s.length,r=e._propertyBindings,o=e._interpolants,l=i.uuid,c=this._bindingsByRootAndName;let u=c[l];u===void 0&&(u={},c[l]=u);for(let d=0;d!==a;++d){const h=s[d],f=h.name;let p=u[f];if(p!==void 0)++p.referenceCount,r[d]=p;else{if(p=r[d],p!==void 0){p._cacheIndex===null&&(++p.referenceCount,this._addInactiveBinding(p,l,f));continue}const g=t&&t._propertyBindings[d].binding.parsedPath;p=new HT(vt.create(i,f,g),h.ValueTypeName,h.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,l,f),r[d]=p}o[d].resultBuffer=p.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){const i=(e._localRoot||this._root).uuid,s=e._clip.uuid,a=this._actionsByClip[s];this._bindAction(e,a&&a.knownActions[0]),this._addInactiveAction(e,s,i)}const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];a.useCount++===0&&(this._lendBinding(a),a.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){const t=e._propertyBindings;for(let i=0,s=t.length;i!==s;++i){const a=t[i];--a.useCount===0&&(a.restoreOriginalState(),this._takeBackBinding(a))}this._takeBackAction(e)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}}_isActiveAction(e){const t=e._cacheIndex;return t!==null&&t=0;--i)e[i].stop();return this}update(e){e*=this.timeScale;const t=this._actions,i=this._nActiveActions,s=this.time+=e,a=Math.sign(e),r=this._accuIndex^=1;for(let c=0;c!==i;++c)t[c]._update(s,e,a,r);const o=this._bindings,l=this._nActiveBindings;for(let c=0;c!==l;++c)o[c].apply(r);return this}setTime(e){this.time=0;for(let t=0;t=this.min.x&&e.x<=this.max.x&&e.y>=this.min.y&&e.y<=this.max.y}containsBox(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(e){return e.max.x>=this.min.x&&e.min.x<=this.max.x&&e.max.y>=this.min.y&&e.min.y<=this.max.y}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,K0).distanceTo(e)}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)&&e.max.equals(this.max)}}const q0=new T,wu=new T,Kr=new T,qr=new T,Cp=new T,oI=new T,lI=new T;class cI{constructor(e=new T,t=new T){this.start=e,this.end=t}set(e,t){return this.start.copy(e),this.end.copy(t),this}copy(e){return this.start.copy(e.start),this.end.copy(e.end),this}getCenter(e){return e.addVectors(this.start,this.end).multiplyScalar(.5)}delta(e){return e.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(e,t){return this.delta(t).multiplyScalar(e).add(this.start)}closestPointToPointParameter(e,t){q0.subVectors(e,this.start),wu.subVectors(this.end,this.start);const i=wu.dot(wu);let a=wu.dot(q0)/i;return t&&(a=Je(a,0,1)),a}closestPointToPoint(e,t,i){const s=this.closestPointToPointParameter(e,t);return this.delta(i).multiplyScalar(s).add(this.start)}distanceSqToLine3(e,t=oI,i=lI){const s=10000000000000001e-32;let a,r;const o=this.start,l=e.start,c=this.end,u=e.end;Kr.subVectors(c,o),qr.subVectors(u,l),Cp.subVectors(o,l);const d=Kr.dot(Kr),h=qr.dot(qr),f=qr.dot(Cp);if(d<=s&&h<=s)return t.copy(o),i.copy(l),t.sub(i),t.dot(t);if(d<=s)a=0,r=f/h,r=Je(r,0,1);else{const p=Kr.dot(Cp);if(h<=s)r=0,a=Je(-p/d,0,1);else{const g=Kr.dot(qr),_=d*h-g*g;_!==0?a=Je((g*f-p*h)/_,0,1):a=0,r=(g*a+f)/h,r<0?(r=0,a=Je(-p/d,0,1)):r>1&&(r=1,a=Je((g-p)/d,0,1))}}return t.copy(o).add(Kr.multiplyScalar(a)),i.copy(l).add(qr.multiplyScalar(r)),t.sub(i),t.dot(t)}applyMatrix4(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this}equals(e){return e.start.equals(this.start)&&e.end.equals(this.end)}clone(){return new this.constructor().copy(this)}}const Y0=new T;class uI extends et{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type="SpotLightHelper";const i=new $e,s=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1];for(let r=0,o=1,l=32;r1)for(let d=0;d.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{ev.set(e.z,0,-e.x).normalize();const t=Math.acos(e.y);this.quaternion.setFromAxisAngle(ev,t)}}setLength(e,t=e*.2,i=t*.2){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(i,t,i),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}}class wI extends Fn{constructor(e=1){const t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],i=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],s=new $e;s.setAttribute("position",new Ce(t,3)),s.setAttribute("color",new Ce(i,3));const a=new Pt({vertexColors:!0,toneMapped:!1});super(s,a),this.type="AxesHelper"}setColors(e,t,i){const s=new de,a=this.geometry.attributes.color.array;return s.set(e),s.toArray(a,0),s.toArray(a,3),s.set(t),s.toArray(a,6),s.toArray(a,9),s.set(i),s.toArray(a,12),s.toArray(a,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}class SI{constructor(){this.type="ShapePath",this.color=new de,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new Mh,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,i,s){return this.currentPath.quadraticCurveTo(e,t,i,s),this}bezierCurveTo(e,t,i,s,a,r){return this.currentPath.bezierCurveTo(e,t,i,s,a,r),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){function t(m){const v=[];for(let y=0,b=m.length;yNumber.EPSILON){if(E<0&&(M=v[x],w=-w,C=v[S],E=-E),m.yC.y)continue;if(m.y===M.y){if(m.x===M.x)return!0}else{const R=E*(m.x-M.x)-w*(m.y-M.y);if(R===0)return!0;if(R<0)continue;b=!b}}else{if(m.y!==M.y)continue;if(C.x<=m.x&&m.x<=M.x||M.x<=m.x&&m.x<=C.x)return!0}}return b}const s=ki.isClockWise,a=this.subPaths;if(a.length===0)return[];let r,o,l;const c=[];if(a.length===1)return o=a[0],l=new $s,l.curves=o.curves,c.push(l),c;let u=!s(a[0].getPoints());u=e?!u:u;const d=[],h=[];let f=[],p=0,g;h[p]=void 0,f[p]=[];for(let m=0,v=a.length;m1){let m=!1,v=0;for(let y=0,b=h.length;y0&&m===!1&&(f=d)}let _;for(let m=0,v=h.length;me?(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2):(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0),n}function MI(n,e){const t=n.image&&n.image.width?n.image.width/n.image.height:1;return t>e?(n.repeat.x=e/t,n.repeat.y=1,n.offset.x=(1-n.repeat.x)/2,n.offset.y=0):(n.repeat.x=1,n.repeat.y=t/e,n.offset.x=0,n.offset.y=(1-n.repeat.y)/2),n}function EI(n){return n.repeat.x=1,n.repeat.y=1,n.offset.x=0,n.offset.y=0,n}function l_(n,e,t,i){const s=CI(i);switch(t){case Tg:return n*e;case Jh:return n*e/s.components*s.byteLength;case Ec:return n*e/s.components*s.byteLength;case Eg:return n*e*2/s.components*s.byteLength;case Qh:return n*e*2/s.components*s.byteLength;case Mg:return n*e*3/s.components*s.byteLength;case Xn:return n*e*4/s.components*s.byteLength;case ef:return n*e*4/s.components*s.byteLength;case $l:case Wl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Xl:case Kl:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Kd:case Yd:return Math.max(n,16)*Math.max(e,8)/4;case Xd:case qd:return Math.max(n,8)*Math.max(e,8)/2;case jd:case Zd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*8;case Jd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case Qd:return Math.floor((n+3)/4)*Math.floor((e+3)/4)*16;case eh:return Math.floor((n+4)/5)*Math.floor((e+3)/4)*16;case th:return Math.floor((n+4)/5)*Math.floor((e+4)/5)*16;case nh:return Math.floor((n+5)/6)*Math.floor((e+4)/5)*16;case ih:return Math.floor((n+5)/6)*Math.floor((e+5)/6)*16;case sh:return Math.floor((n+7)/8)*Math.floor((e+4)/5)*16;case ah:return Math.floor((n+7)/8)*Math.floor((e+5)/6)*16;case rh:return Math.floor((n+7)/8)*Math.floor((e+7)/8)*16;case oh:return Math.floor((n+9)/10)*Math.floor((e+4)/5)*16;case lh:return Math.floor((n+9)/10)*Math.floor((e+5)/6)*16;case ch:return Math.floor((n+9)/10)*Math.floor((e+7)/8)*16;case uh:return Math.floor((n+9)/10)*Math.floor((e+9)/10)*16;case dh:return Math.floor((n+11)/12)*Math.floor((e+9)/10)*16;case hh:return Math.floor((n+11)/12)*Math.floor((e+11)/12)*16;case fh:case ph:case mh:return Math.ceil(n/4)*Math.ceil(e/4)*16;case _h:case gh:return Math.ceil(n/4)*Math.ceil(e/4)*8;case yh:case vh:return Math.ceil(n/4)*Math.ceil(e/4)*16}throw new Error(`Unable to determine texture byte length for ${t} format.`)}function CI(n){switch(n){case is:case bg:return{byteLength:1,components:1};case Lo:case xg:case ms:return{byteLength:2,components:1};case jh:case Zh:return{byteLength:2,components:4};case Ks:case Yh:case Mn:return{byteLength:4,components:1};case wg:case Sg:return{byteLength:4,components:3}}throw new Error(`Unknown texture type ${n}.`)}class AI{static contain(e,t){return TI(e,t)}static cover(e,t){return MI(e,t)}static fill(e){return EI(e)}static getByteLength(e,t,i,s){return l_(e,t,i,s)}}typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:Xh}}));typeof window<"u"&&(window.__THREE__?console.warn("WARNING: Multiple instances of Three.js being imported."):window.__THREE__=Xh);function XT(){let n=null,e=!1,t=null,i=null;function s(a,r){t(a,r),i=n.requestAnimationFrame(s)}return{start:function(){e!==!0&&t!==null&&(i=n.requestAnimationFrame(s),e=!0)},stop:function(){n.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(a){t=a},setContext:function(a){n=a}}}function RI(n){const e=new WeakMap;function t(o,l){const c=o.array,u=o.usage,d=c.byteLength,h=n.createBuffer();n.bindBuffer(l,h),n.bufferData(l,c,u),o.onUploadCallback();let f;if(c instanceof Float32Array)f=n.FLOAT;else if(typeof Float16Array<"u"&&c instanceof Float16Array)f=n.HALF_FLOAT;else if(c instanceof Uint16Array)o.isFloat16BufferAttribute?f=n.HALF_FLOAT:f=n.UNSIGNED_SHORT;else if(c instanceof Int16Array)f=n.SHORT;else if(c instanceof Uint32Array)f=n.UNSIGNED_INT;else if(c instanceof Int32Array)f=n.INT;else if(c instanceof Int8Array)f=n.BYTE;else if(c instanceof Uint8Array)f=n.UNSIGNED_BYTE;else if(c instanceof Uint8ClampedArray)f=n.UNSIGNED_BYTE;else throw new Error("THREE.WebGLAttributes: Unsupported buffer data format: "+c);return{buffer:h,type:f,bytesPerElement:c.BYTES_PER_ELEMENT,version:o.version,size:d}}function i(o,l,c){const u=l.array,d=l.updateRanges;if(n.bindBuffer(c,o),d.length===0)n.bufferSubData(c,0,u);else{d.sort((f,p)=>f.start-p.start);let h=0;for(let f=1;f 0 +#endif`,WI=`#if NUM_CLIPPING_PLANES > 0 vec4 plane; #ifdef ALPHA_TO_COVERAGE float distanceToPlane, distanceGradient; @@ -289,26 +289,26 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve if ( clipped ) discard; #endif #endif -#endif`,OI=`#if NUM_CLIPPING_PLANES > 0 +#endif`,XI=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,FI=`#if NUM_CLIPPING_PLANES > 0 +#endif`,KI=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; -#endif`,NI=`#if NUM_CLIPPING_PLANES > 0 +#endif`,qI=`#if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; -#endif`,UI=`#if defined( USE_COLOR_ALPHA ) +#endif`,YI=`#if defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; #elif defined( USE_COLOR ) diffuseColor.rgb *= vColor; -#endif`,BI=`#if defined( USE_COLOR_ALPHA ) +#endif`,jI=`#if defined( USE_COLOR_ALPHA ) varying vec4 vColor; #elif defined( USE_COLOR ) varying vec3 vColor; -#endif`,zI=`#if defined( USE_COLOR_ALPHA ) +#endif`,ZI=`#if defined( USE_COLOR_ALPHA ) varying vec4 vColor; #elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) varying vec3 vColor; -#endif`,HI=`#if defined( USE_COLOR_ALPHA ) +#endif`,JI=`#if defined( USE_COLOR_ALPHA ) vColor = vec4( 1.0 ); #elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) vColor = vec3( 1.0 ); @@ -322,7 +322,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve #ifdef USE_BATCHING_COLOR vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) ); vColor.xyz *= batchingColor.xyz; -#endif`,VI=`#define PI 3.141592653589793 +#endif`,QI=`#define PI 3.141592653589793 #define PI2 6.283185307179586 #define PI_HALF 1.5707963267948966 #define RECIPROCAL_PI 0.3183098861837907 @@ -396,7 +396,7 @@ vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,GI=`#ifdef ENVMAP_TYPE_CUBE_UV +} // validated`,eL=`#ifdef ENVMAP_TYPE_CUBE_UV #define cubeUV_minMipLevel 4.0 #define cubeUV_minTileSize 16.0 float getFace( vec3 direction ) { @@ -489,7 +489,7 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { return vec4( mix( color0, color1, mipF ), 1.0 ); } } -#endif`,$I=`vec3 transformedNormal = objectNormal; +#endif`,tL=`vec3 transformedNormal = objectNormal; #ifdef USE_TANGENT vec3 transformedTangent = objectTangent; #endif @@ -518,21 +518,21 @@ transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif -#endif`,WI=`#ifdef USE_DISPLACEMENTMAP +#endif`,nL=`#ifdef USE_DISPLACEMENTMAP uniform sampler2D displacementMap; uniform float displacementScale; uniform float displacementBias; -#endif`,XI=`#ifdef USE_DISPLACEMENTMAP +#endif`,iL=`#ifdef USE_DISPLACEMENTMAP transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,KI=`#ifdef USE_EMISSIVEMAP +#endif`,sL=`#ifdef USE_EMISSIVEMAP vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE emissiveColor = sRGBTransferEOTF( emissiveColor ); #endif totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,qI=`#ifdef USE_EMISSIVEMAP +#endif`,aL=`#ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; -#endif`,YI="gl_FragColor = linearToOutputTexel( gl_FragColor );",jI=`vec4 LinearTransferOETF( in vec4 value ) { +#endif`,rL="gl_FragColor = linearToOutputTexel( gl_FragColor );",oL=`vec4 LinearTransferOETF( in vec4 value ) { return value; } vec4 sRGBTransferEOTF( in vec4 value ) { @@ -540,7 +540,7 @@ vec4 sRGBTransferEOTF( in vec4 value ) { } vec4 sRGBTransferOETF( in vec4 value ) { return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,ZI=`#ifdef USE_ENVMAP +}`,lL=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vec3 cameraToFrag; if ( isOrthographic ) { @@ -569,7 +569,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #elif defined( ENVMAP_BLENDING_ADD ) outgoingLight += envColor.xyz * specularStrength * reflectivity; #endif -#endif`,JI=`#ifdef USE_ENVMAP +#endif`,cL=`#ifdef USE_ENVMAP uniform float envMapIntensity; uniform float flipEnvMap; uniform mat3 envMapRotation; @@ -579,7 +579,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform sampler2D envMap; #endif -#endif`,QI=`#ifdef USE_ENVMAP +#endif`,uL=`#ifdef USE_ENVMAP uniform float reflectivity; #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS @@ -590,7 +590,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #else varying vec3 vReflect; #endif -#endif`,eL=`#ifdef USE_ENVMAP +#endif`,dL=`#ifdef USE_ENVMAP #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS #endif @@ -601,7 +601,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { varying vec3 vReflect; uniform float refractionRatio; #endif -#endif`,tL=`#ifdef USE_ENVMAP +#endif`,hL=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vWorldPosition = worldPosition.xyz; #else @@ -618,18 +618,18 @@ vec4 sRGBTransferOETF( in vec4 value ) { vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); #endif #endif -#endif`,nL=`#ifdef USE_FOG +#endif`,fL=`#ifdef USE_FOG vFogDepth = - mvPosition.z; -#endif`,iL=`#ifdef USE_FOG +#endif`,pL=`#ifdef USE_FOG varying float vFogDepth; -#endif`,sL=`#ifdef USE_FOG +#endif`,mL=`#ifdef USE_FOG #ifdef FOG_EXP2 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); #else float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); #endif gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,aL=`#ifdef USE_FOG +#endif`,_L=`#ifdef USE_FOG uniform vec3 fogColor; varying float vFogDepth; #ifdef FOG_EXP2 @@ -638,7 +638,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform float fogNear; uniform float fogFar; #endif -#endif`,rL=`#ifdef USE_GRADIENTMAP +#endif`,gL=`#ifdef USE_GRADIENTMAP uniform sampler2D gradientMap; #endif vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { @@ -650,12 +650,12 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { vec2 fw = fwidth( coord ) * 0.5; return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); #endif -}`,oL=`#ifdef USE_LIGHTMAP +}`,yL=`#ifdef USE_LIGHTMAP uniform sampler2D lightMap; uniform float lightMapIntensity; -#endif`,lL=`LambertMaterial material; +#endif`,vL=`LambertMaterial material; material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,cL=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,bL=`varying vec3 vViewPosition; struct LambertMaterial { vec3 diffuseColor; float specularStrength; @@ -669,7 +669,7 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometr reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,uL=`uniform bool receiveShadow; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,xL=`uniform bool receiveShadow; uniform vec3 ambientLightColor; #if defined( USE_LIGHT_PROBES ) uniform vec3 lightProbe[ 9 ]; @@ -785,7 +785,7 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); return irradiance; } -#endif`,dL=`#ifdef USE_ENVMAP +#endif`,wL=`#ifdef USE_ENVMAP vec3 getIBLIrradiance( const in vec3 normal ) { #ifdef ENVMAP_TYPE_CUBE_UV vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); @@ -818,8 +818,8 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi #endif } #endif -#endif`,hL=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,fL=`varying vec3 vViewPosition; +#endif`,SL=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,TL=`varying vec3 vViewPosition; struct ToonMaterial { vec3 diffuseColor; }; @@ -831,11 +831,11 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPo reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,pL=`BlinnPhongMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,ML=`BlinnPhongMaterial material; material.diffuseColor = diffuseColor.rgb; material.specularColor = specular; material.specularShininess = shininess; -material.specularStrength = specularStrength;`,mL=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,EL=`varying vec3 vViewPosition; struct BlinnPhongMaterial { vec3 diffuseColor; vec3 specularColor; @@ -852,7 +852,7 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geom reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,_L=`PhysicalMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,CL=`PhysicalMaterial material; material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); @@ -938,7 +938,7 @@ material.roughness = min( material.roughness, 1.0 ); material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,gL=`struct PhysicalMaterial { +#endif`,AL=`struct PhysicalMaterial { vec3 diffuseColor; float roughness; vec3 specularColor; @@ -1239,7 +1239,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia #define RE_IndirectSpecular RE_IndirectSpecular_Physical float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,yL=` +}`,RL=` vec3 geometryPosition = - vViewPosition; vec3 geometryNormal = normal; vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); @@ -1354,7 +1354,7 @@ IncidentLight directLight; #if defined( RE_IndirectSpecular ) vec3 radiance = vec3( 0.0 ); vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,vL=`#if defined( RE_IndirectDiffuse ) +#endif`,PL=`#if defined( RE_IndirectDiffuse ) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; @@ -1373,32 +1373,32 @@ IncidentLight directLight; #ifdef USE_CLEARCOAT clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); #endif -#endif`,bL=`#if defined( RE_IndirectDiffuse ) +#endif`,IL=`#if defined( RE_IndirectDiffuse ) RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); #endif #if defined( RE_IndirectSpecular ) RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,xL=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,LL=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,wL=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) +#endif`,kL=`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) uniform float logDepthBufFC; varying float vFragDepth; varying float vIsPerspective; -#endif`,SL=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,DL=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER varying float vFragDepth; varying float vIsPerspective; -#endif`,TL=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER +#endif`,OL=`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER vFragDepth = 1.0 + gl_Position.w; vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,ML=`#ifdef USE_MAP +#endif`,FL=`#ifdef USE_MAP vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); #endif diffuseColor *= sampledDiffuseColor; -#endif`,EL=`#ifdef USE_MAP +#endif`,NL=`#ifdef USE_MAP uniform sampler2D map; -#endif`,CL=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) +#endif`,UL=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) #if defined( USE_POINTS_UV ) vec2 uv = vUv; #else @@ -1410,7 +1410,7 @@ IncidentLight directLight; #endif #ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,AL=`#if defined( USE_POINTS_UV ) +#endif`,BL=`#if defined( USE_POINTS_UV ) varying vec2 vUv; #else #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) @@ -1422,19 +1422,19 @@ IncidentLight directLight; #endif #ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,RL=`float metalnessFactor = metalness; +#endif`,zL=`float metalnessFactor = metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); metalnessFactor *= texelMetalness.b; -#endif`,PL=`#ifdef USE_METALNESSMAP +#endif`,HL=`#ifdef USE_METALNESSMAP uniform sampler2D metalnessMap; -#endif`,IL=`#ifdef USE_INSTANCING_MORPH +#endif`,VL=`#ifdef USE_INSTANCING_MORPH float morphTargetInfluences[ MORPHTARGETS_COUNT ]; float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; } -#endif`,LL=`#if defined( USE_MORPHCOLORS ) +#endif`,GL=`#if defined( USE_MORPHCOLORS ) vColor *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { #if defined( USE_COLOR_ALPHA ) @@ -1443,12 +1443,12 @@ IncidentLight directLight; if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; #endif } -#endif`,kL=`#ifdef USE_MORPHNORMALS +#endif`,$L=`#ifdef USE_MORPHNORMALS objectNormal *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; } -#endif`,DL=`#ifdef USE_MORPHTARGETS +#endif`,WL=`#ifdef USE_MORPHTARGETS #ifndef USE_INSTANCING_MORPH uniform float morphTargetBaseInfluence; uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; @@ -1462,12 +1462,12 @@ IncidentLight directLight; ivec3 morphUV = ivec3( x, y, morphTargetIndex ); return texelFetch( morphTargetsTexture, morphUV, 0 ); } -#endif`,OL=`#ifdef USE_MORPHTARGETS +#endif`,XL=`#ifdef USE_MORPHTARGETS transformed *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; } -#endif`,FL=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#endif`,KL=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #ifdef FLAT_SHADED vec3 fdx = dFdx( vViewPosition ); vec3 fdy = dFdy( vViewPosition ); @@ -1508,7 +1508,7 @@ IncidentLight directLight; tbn2[1] *= faceDirection; #endif #endif -vec3 nonPerturbedNormal = normal;`,NL=`#ifdef USE_NORMALMAP_OBJECTSPACE +vec3 nonPerturbedNormal = normal;`,qL=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; #ifdef FLIP_SIDED normal = - normal; @@ -1523,25 +1523,25 @@ vec3 nonPerturbedNormal = normal;`,NL=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = normalize( tbn * mapN ); #elif defined( USE_BUMPMAP ) normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,UL=`#ifndef FLAT_SHADED +#endif`,YL=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,BL=`#ifndef FLAT_SHADED +#endif`,jL=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,zL=`#ifndef FLAT_SHADED +#endif`,ZL=`#ifndef FLAT_SHADED vNormal = normalize( transformedNormal ); #ifdef USE_TANGENT vTangent = normalize( transformedTangent ); vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); #endif -#endif`,HL=`#ifdef USE_NORMALMAP +#endif`,JL=`#ifdef USE_NORMALMAP uniform sampler2D normalMap; uniform vec2 normalScale; #endif @@ -1563,13 +1563,13 @@ vec3 nonPerturbedNormal = normal;`,NL=`#ifdef USE_NORMALMAP_OBJECTSPACE float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); return mat3( T * scale, B * scale, N ); } -#endif`,VL=`#ifdef USE_CLEARCOAT +#endif`,QL=`#ifdef USE_CLEARCOAT vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,GL=`#ifdef USE_CLEARCOAT_NORMALMAP +#endif`,e2=`#ifdef USE_CLEARCOAT_NORMALMAP vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,$L=`#ifdef USE_CLEARCOATMAP +#endif`,t2=`#ifdef USE_CLEARCOATMAP uniform sampler2D clearcoatMap; #endif #ifdef USE_CLEARCOAT_NORMALMAP @@ -1578,18 +1578,18 @@ vec3 nonPerturbedNormal = normal;`,NL=`#ifdef USE_NORMALMAP_OBJECTSPACE #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP uniform sampler2D clearcoatRoughnessMap; -#endif`,WL=`#ifdef USE_IRIDESCENCEMAP +#endif`,n2=`#ifdef USE_IRIDESCENCEMAP uniform sampler2D iridescenceMap; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP uniform sampler2D iridescenceThicknessMap; -#endif`,XL=`#ifdef OPAQUE +#endif`,i2=`#ifdef OPAQUE diffuseColor.a = 1.0; #endif #ifdef USE_TRANSMISSION diffuseColor.a *= material.transmissionAlpha; #endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,KL=`vec3 packNormalToRGB( const in vec3 normal ) { +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,s2=`vec3 packNormalToRGB( const in vec3 normal ) { return normalize( normal ) * 0.5 + 0.5; } vec3 unpackRGBToNormal( const in vec3 rgb ) { @@ -1658,9 +1658,9 @@ float viewZToPerspectiveDepth( const in float viewZ, const in float near, const } float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { return ( near * far ) / ( ( far - near ) * depth - far ); -}`,qL=`#ifdef PREMULTIPLIED_ALPHA +}`,a2=`#ifdef PREMULTIPLIED_ALPHA gl_FragColor.rgb *= gl_FragColor.a; -#endif`,YL=`vec4 mvPosition = vec4( transformed, 1.0 ); +#endif`,r2=`vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING mvPosition = batchingMatrix * mvPosition; #endif @@ -1668,22 +1668,22 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const mvPosition = instanceMatrix * mvPosition; #endif mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING +gl_Position = projectionMatrix * mvPosition;`,o2=`#ifdef DITHERING gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,ZL=`#ifdef DITHERING +#endif`,l2=`#ifdef DITHERING vec3 dithering( vec3 color ) { float grid_position = rand( gl_FragCoord.xy ); vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); return color + dither_shift_RGB; } -#endif`,JL=`float roughnessFactor = roughness; +#endif`,c2=`float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); roughnessFactor *= texelRoughness.g; -#endif`,QL=`#ifdef USE_ROUGHNESSMAP +#endif`,u2=`#ifdef USE_ROUGHNESSMAP uniform sampler2D roughnessMap; -#endif`,e2=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,d2=`#if NUM_SPOT_LIGHT_COORDS > 0 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif #if NUM_SPOT_LIGHT_MAPS > 0 @@ -1878,7 +1878,7 @@ gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING } return mix( 1.0, shadow, shadowIntensity ); } -#endif`,t2=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,h2=`#if NUM_SPOT_LIGHT_COORDS > 0 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif @@ -1919,7 +1919,7 @@ gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING }; uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; #endif -#endif`,n2=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) +#endif`,f2=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); vec4 shadowWorldPosition; #endif @@ -1951,7 +1951,7 @@ gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end -#endif`,i2=`float getShadowMask() { +#endif`,p2=`float getShadowMask() { float shadow = 1.0; #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 @@ -1983,12 +1983,12 @@ gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING #endif #endif return shadow; -}`,s2=`#ifdef USE_SKINNING +}`,m2=`#ifdef USE_SKINNING mat4 boneMatX = getBoneMatrix( skinIndex.x ); mat4 boneMatY = getBoneMatrix( skinIndex.y ); mat4 boneMatZ = getBoneMatrix( skinIndex.z ); mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,a2=`#ifdef USE_SKINNING +#endif`,_2=`#ifdef USE_SKINNING uniform mat4 bindMatrix; uniform mat4 bindMatrixInverse; uniform highp sampler2D boneTexture; @@ -2003,7 +2003,7 @@ gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); return mat4( v1, v2, v3, v4 ); } -#endif`,r2=`#ifdef USE_SKINNING +#endif`,g2=`#ifdef USE_SKINNING vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); vec4 skinned = vec4( 0.0 ); skinned += boneMatX * skinVertex * skinWeight.x; @@ -2011,7 +2011,7 @@ gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING skinned += boneMatZ * skinVertex * skinWeight.z; skinned += boneMatW * skinVertex * skinWeight.w; transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,o2=`#ifdef USE_SKINNING +#endif`,y2=`#ifdef USE_SKINNING mat4 skinMatrix = mat4( 0.0 ); skinMatrix += skinWeight.x * boneMatX; skinMatrix += skinWeight.y * boneMatY; @@ -2022,17 +2022,17 @@ gl_Position = projectionMatrix * mvPosition;`,jL=`#ifdef DITHERING #ifdef USE_TANGENT objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif -#endif`,l2=`float specularStrength; +#endif`,v2=`float specularStrength; #ifdef USE_SPECULARMAP vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else specularStrength = 1.0; -#endif`,c2=`#ifdef USE_SPECULARMAP +#endif`,b2=`#ifdef USE_SPECULARMAP uniform sampler2D specularMap; -#endif`,u2=`#if defined( TONE_MAPPING ) +#endif`,x2=`#if defined( TONE_MAPPING ) gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,d2=`#ifndef saturate +#endif`,w2=`#ifndef saturate #define saturate( a ) clamp( a, 0.0, 1.0 ) #endif uniform float toneMappingExposure; @@ -2129,7 +2129,7 @@ vec3 NeutralToneMapping( vec3 color ) { float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); return mix( color, vec3( newPeak ), g ); } -vec3 CustomToneMapping( vec3 color ) { return color; }`,h2=`#ifdef USE_TRANSMISSION +vec3 CustomToneMapping( vec3 color ) { return color; }`,S2=`#ifdef USE_TRANSMISSION material.transmission = transmission; material.transmissionAlpha = 1.0; material.thickness = thickness; @@ -2150,7 +2150,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,h2=`#ifdef USE_TRANSMISS material.attenuationColor, material.attenuationDistance ); material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,f2=`#ifdef USE_TRANSMISSION +#endif`,T2=`#ifdef USE_TRANSMISSION uniform float transmission; uniform float thickness; uniform float attenuationDistance; @@ -2276,7 +2276,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,h2=`#ifdef USE_TRANSMISS float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); } -#endif`,p2=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,M2=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2346,7 +2346,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,h2=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,m2=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,E2=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2440,7 +2440,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,h2=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,_2=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,C2=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) vUv = vec3( uv, 1 ).xy; #endif #ifdef USE_MAP @@ -2511,7 +2511,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,h2=`#ifdef USE_TRANSMISS #endif #ifdef USE_THICKNESSMAP vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,g2=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 +#endif`,A2=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 vec4 worldPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING worldPosition = batchingMatrix * worldPosition; @@ -2520,12 +2520,12 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,h2=`#ifdef USE_TRANSMISS worldPosition = instanceMatrix * worldPosition; #endif worldPosition = modelMatrix * worldPosition; -#endif`;const y2=`varying vec2 vUv; +#endif`;const R2=`varying vec2 vUv; uniform mat3 uvTransform; void main() { vUv = ( uvTransform * vec3( uv, 1 ) ).xy; gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,v2=`uniform sampler2D t2D; +}`,P2=`uniform sampler2D t2D; uniform float backgroundIntensity; varying vec2 vUv; void main() { @@ -2537,14 +2537,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,b2=`varying vec3 vWorldDirection; +}`,I2=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,x2=`#ifdef ENVMAP_TYPE_CUBE +}`,L2=`#ifdef ENVMAP_TYPE_CUBE uniform samplerCube envMap; #elif defined( ENVMAP_TYPE_CUBE_UV ) uniform sampler2D envMap; @@ -2567,14 +2567,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,w2=`varying vec3 vWorldDirection; +}`,k2=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,S2=`uniform samplerCube tCube; +}`,D2=`uniform samplerCube tCube; uniform float tFlip; uniform float opacity; varying vec3 vWorldDirection; @@ -2584,7 +2584,7 @@ void main() { gl_FragColor.a *= opacity; #include #include -}`,T2=`#include +}`,O2=`#include #include #include #include @@ -2611,7 +2611,7 @@ void main() { #include #include vHighPrecisionZW = gl_Position.zw; -}`,M2=`#if DEPTH_PACKING == 3200 +}`,F2=`#if DEPTH_PACKING == 3200 uniform float opacity; #endif #include @@ -2649,7 +2649,7 @@ void main() { #elif DEPTH_PACKING == 3203 gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); #endif -}`,E2=`#define DISTANCE +}`,N2=`#define DISTANCE varying vec3 vWorldPosition; #include #include @@ -2676,7 +2676,7 @@ void main() { #include #include vWorldPosition = worldPosition.xyz; -}`,C2=`#define DISTANCE +}`,U2=`#define DISTANCE uniform vec3 referencePosition; uniform float nearDistance; uniform float farDistance; @@ -2700,13 +2700,13 @@ void main () { dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); dist = saturate( dist ); gl_FragColor = packDepthToRGBA( dist ); -}`,A2=`varying vec3 vWorldDirection; +}`,B2=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include -}`,R2=`uniform sampler2D tEquirect; +}`,z2=`uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { @@ -2715,7 +2715,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); #include #include -}`,P2=`uniform float scale; +}`,H2=`uniform float scale; attribute float lineDistance; varying float vLineDistance; #include @@ -2737,7 +2737,7 @@ void main() { #include #include #include -}`,I2=`uniform vec3 diffuse; +}`,V2=`uniform vec3 diffuse; uniform float opacity; uniform float dashSize; uniform float totalSize; @@ -2765,7 +2765,7 @@ void main() { #include #include #include -}`,L2=`#include +}`,G2=`#include #include #include #include @@ -2797,7 +2797,7 @@ void main() { #include #include #include -}`,k2=`uniform vec3 diffuse; +}`,$2=`uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; @@ -2845,7 +2845,7 @@ void main() { #include #include #include -}`,D2=`#define LAMBERT +}`,W2=`#define LAMBERT varying vec3 vViewPosition; #include #include @@ -2884,7 +2884,7 @@ void main() { #include #include #include -}`,O2=`#define LAMBERT +}`,X2=`#define LAMBERT uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -2941,7 +2941,7 @@ void main() { #include #include #include -}`,F2=`#define MATCAP +}`,K2=`#define MATCAP varying vec3 vViewPosition; #include #include @@ -2975,7 +2975,7 @@ void main() { #include #include vViewPosition = - mvPosition.xyz; -}`,N2=`#define MATCAP +}`,q2=`#define MATCAP uniform vec3 diffuse; uniform float opacity; uniform sampler2D matcap; @@ -3021,7 +3021,7 @@ void main() { #include #include #include -}`,U2=`#define NORMAL +}`,Y2=`#define NORMAL #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; #endif @@ -3054,7 +3054,7 @@ void main() { #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) vViewPosition = - mvPosition.xyz; #endif -}`,B2=`#define NORMAL +}`,j2=`#define NORMAL uniform float opacity; #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; @@ -3076,7 +3076,7 @@ void main() { #ifdef OPAQUE gl_FragColor.a = 1.0; #endif -}`,z2=`#define PHONG +}`,Z2=`#define PHONG varying vec3 vViewPosition; #include #include @@ -3115,7 +3115,7 @@ void main() { #include #include #include -}`,H2=`#define PHONG +}`,J2=`#define PHONG uniform vec3 diffuse; uniform vec3 emissive; uniform vec3 specular; @@ -3174,7 +3174,7 @@ void main() { #include #include #include -}`,V2=`#define STANDARD +}`,Q2=`#define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; @@ -3217,7 +3217,7 @@ void main() { #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif -}`,G2=`#define STANDARD +}`,ek=`#define STANDARD #ifdef PHYSICAL #define IOR #define USE_SPECULAR @@ -3342,7 +3342,7 @@ void main() { #include #include #include -}`,$2=`#define TOON +}`,tk=`#define TOON varying vec3 vViewPosition; #include #include @@ -3379,7 +3379,7 @@ void main() { #include #include #include -}`,W2=`#define TOON +}`,nk=`#define TOON uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3432,7 +3432,7 @@ void main() { #include #include #include -}`,X2=`uniform float size; +}`,ik=`uniform float size; uniform float scale; #include #include @@ -3463,7 +3463,7 @@ void main() { #include #include #include -}`,K2=`uniform vec3 diffuse; +}`,sk=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3488,7 +3488,7 @@ void main() { #include #include #include -}`,q2=`#include +}`,ak=`#include #include #include #include @@ -3511,7 +3511,7 @@ void main() { #include #include #include -}`,Y2=`uniform vec3 color; +}`,rk=`uniform vec3 color; uniform float opacity; #include #include @@ -3527,7 +3527,7 @@ void main() { #include #include #include -}`,j2=`uniform float rotation; +}`,ok=`uniform float rotation; uniform vec2 center; #include #include @@ -3551,7 +3551,7 @@ void main() { #include #include #include -}`,Z2=`uniform vec3 diffuse; +}`,lk=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3576,7 +3576,7 @@ void main() { #include #include #include -}`,_t={alphahash_fragment:vI,alphahash_pars_fragment:bI,alphamap_fragment:xI,alphamap_pars_fragment:wI,alphatest_fragment:SI,alphatest_pars_fragment:TI,aomap_fragment:MI,aomap_pars_fragment:EI,batching_pars_vertex:CI,batching_vertex:AI,begin_vertex:RI,beginnormal_vertex:PI,bsdfs:II,iridescence_fragment:LI,bumpmap_pars_fragment:kI,clipping_planes_fragment:DI,clipping_planes_pars_fragment:OI,clipping_planes_pars_vertex:FI,clipping_planes_vertex:NI,color_fragment:UI,color_pars_fragment:BI,color_pars_vertex:zI,color_vertex:HI,common:VI,cube_uv_reflection_fragment:GI,defaultnormal_vertex:$I,displacementmap_pars_vertex:WI,displacementmap_vertex:XI,emissivemap_fragment:KI,emissivemap_pars_fragment:qI,colorspace_fragment:YI,colorspace_pars_fragment:jI,envmap_fragment:ZI,envmap_common_pars_fragment:JI,envmap_pars_fragment:QI,envmap_pars_vertex:eL,envmap_physical_pars_fragment:dL,envmap_vertex:tL,fog_vertex:nL,fog_pars_vertex:iL,fog_fragment:sL,fog_pars_fragment:aL,gradientmap_pars_fragment:rL,lightmap_pars_fragment:oL,lights_lambert_fragment:lL,lights_lambert_pars_fragment:cL,lights_pars_begin:uL,lights_toon_fragment:hL,lights_toon_pars_fragment:fL,lights_phong_fragment:pL,lights_phong_pars_fragment:mL,lights_physical_fragment:_L,lights_physical_pars_fragment:gL,lights_fragment_begin:yL,lights_fragment_maps:vL,lights_fragment_end:bL,logdepthbuf_fragment:xL,logdepthbuf_pars_fragment:wL,logdepthbuf_pars_vertex:SL,logdepthbuf_vertex:TL,map_fragment:ML,map_pars_fragment:EL,map_particle_fragment:CL,map_particle_pars_fragment:AL,metalnessmap_fragment:RL,metalnessmap_pars_fragment:PL,morphinstance_vertex:IL,morphcolor_vertex:LL,morphnormal_vertex:kL,morphtarget_pars_vertex:DL,morphtarget_vertex:OL,normal_fragment_begin:FL,normal_fragment_maps:NL,normal_pars_fragment:UL,normal_pars_vertex:BL,normal_vertex:zL,normalmap_pars_fragment:HL,clearcoat_normal_fragment_begin:VL,clearcoat_normal_fragment_maps:GL,clearcoat_pars_fragment:$L,iridescence_pars_fragment:WL,opaque_fragment:XL,packing:KL,premultiplied_alpha_fragment:qL,project_vertex:YL,dithering_fragment:jL,dithering_pars_fragment:ZL,roughnessmap_fragment:JL,roughnessmap_pars_fragment:QL,shadowmap_pars_fragment:e2,shadowmap_pars_vertex:t2,shadowmap_vertex:n2,shadowmask_pars_fragment:i2,skinbase_vertex:s2,skinning_pars_vertex:a2,skinning_vertex:r2,skinnormal_vertex:o2,specularmap_fragment:l2,specularmap_pars_fragment:c2,tonemapping_fragment:u2,tonemapping_pars_fragment:d2,transmission_fragment:h2,transmission_pars_fragment:f2,uv_pars_fragment:p2,uv_pars_vertex:m2,uv_vertex:_2,worldpos_vertex:g2,background_vert:y2,background_frag:v2,backgroundCube_vert:b2,backgroundCube_frag:x2,cube_vert:w2,cube_frag:S2,depth_vert:T2,depth_frag:M2,distanceRGBA_vert:E2,distanceRGBA_frag:C2,equirect_vert:A2,equirect_frag:R2,linedashed_vert:P2,linedashed_frag:I2,meshbasic_vert:L2,meshbasic_frag:k2,meshlambert_vert:D2,meshlambert_frag:O2,meshmatcap_vert:F2,meshmatcap_frag:N2,meshnormal_vert:U2,meshnormal_frag:B2,meshphong_vert:z2,meshphong_frag:H2,meshphysical_vert:V2,meshphysical_frag:G2,meshtoon_vert:$2,meshtoon_frag:W2,points_vert:X2,points_frag:K2,shadow_vert:q2,shadow_frag:Y2,sprite_vert:j2,sprite_frag:Z2},Me={common:{diffuse:{value:new de(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new at},alphaMap:{value:null},alphaMapTransform:{value:new at},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new at}},envmap:{envMap:{value:null},envMapRotation:{value:new at},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new at}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new at}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new at},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new at},normalScale:{value:new ne(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new at},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new at}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new at}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new at}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new de(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new de(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new at},alphaTest:{value:0},uvTransform:{value:new at}},sprite:{diffuse:{value:new de(16777215)},opacity:{value:1},center:{value:new ne(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new at},alphaMap:{value:null},alphaMapTransform:{value:new at},alphaTest:{value:0}}},Zi={basic:{uniforms:Hn([Me.common,Me.specularmap,Me.envmap,Me.aomap,Me.lightmap,Me.fog]),vertexShader:_t.meshbasic_vert,fragmentShader:_t.meshbasic_frag},lambert:{uniforms:Hn([Me.common,Me.specularmap,Me.envmap,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.fog,Me.lights,{emissive:{value:new de(0)}}]),vertexShader:_t.meshlambert_vert,fragmentShader:_t.meshlambert_frag},phong:{uniforms:Hn([Me.common,Me.specularmap,Me.envmap,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.fog,Me.lights,{emissive:{value:new de(0)},specular:{value:new de(1118481)},shininess:{value:30}}]),vertexShader:_t.meshphong_vert,fragmentShader:_t.meshphong_frag},standard:{uniforms:Hn([Me.common,Me.envmap,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.roughnessmap,Me.metalnessmap,Me.fog,Me.lights,{emissive:{value:new de(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:_t.meshphysical_vert,fragmentShader:_t.meshphysical_frag},toon:{uniforms:Hn([Me.common,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.gradientmap,Me.fog,Me.lights,{emissive:{value:new de(0)}}]),vertexShader:_t.meshtoon_vert,fragmentShader:_t.meshtoon_frag},matcap:{uniforms:Hn([Me.common,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.fog,{matcap:{value:null}}]),vertexShader:_t.meshmatcap_vert,fragmentShader:_t.meshmatcap_frag},points:{uniforms:Hn([Me.points,Me.fog]),vertexShader:_t.points_vert,fragmentShader:_t.points_frag},dashed:{uniforms:Hn([Me.common,Me.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:_t.linedashed_vert,fragmentShader:_t.linedashed_frag},depth:{uniforms:Hn([Me.common,Me.displacementmap]),vertexShader:_t.depth_vert,fragmentShader:_t.depth_frag},normal:{uniforms:Hn([Me.common,Me.bumpmap,Me.normalmap,Me.displacementmap,{opacity:{value:1}}]),vertexShader:_t.meshnormal_vert,fragmentShader:_t.meshnormal_frag},sprite:{uniforms:Hn([Me.sprite,Me.fog]),vertexShader:_t.sprite_vert,fragmentShader:_t.sprite_frag},background:{uniforms:{uvTransform:{value:new at},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:_t.background_vert,fragmentShader:_t.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new at}},vertexShader:_t.backgroundCube_vert,fragmentShader:_t.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:_t.cube_vert,fragmentShader:_t.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:_t.equirect_vert,fragmentShader:_t.equirect_frag},distanceRGBA:{uniforms:Hn([Me.common,Me.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:_t.distanceRGBA_vert,fragmentShader:_t.distanceRGBA_frag},shadow:{uniforms:Hn([Me.lights,Me.fog,{color:{value:new de(0)},opacity:{value:1}}]),vertexShader:_t.shadow_vert,fragmentShader:_t.shadow_frag}};Zi.physical={uniforms:Hn([Zi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new at},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new at},clearcoatNormalScale:{value:new ne(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new at},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new at},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new at},sheen:{value:0},sheenColor:{value:new de(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new at},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new at},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new at},transmissionSamplerSize:{value:new ne},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new at},attenuationDistance:{value:0},attenuationColor:{value:new de(0)},specularColor:{value:new de(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new at},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new at},anisotropyVector:{value:new ne},anisotropyMap:{value:null},anisotropyMapTransform:{value:new at}}]),vertexShader:_t.meshphysical_vert,fragmentShader:_t.meshphysical_frag};const Tu={r:0,b:0,g:0},Na=new rn,J2=new Ee;function Q2(n,e,t,i,s,a,r){const o=new de(0);let l=a===!0?0:1,c,u,d=null,h=0,f=null;function p(y){let b=y.isScene===!0?y.background:null;return b&&b.isTexture&&(b=(y.backgroundBlurriness>0?t:e).get(b)),b}function g(y){let b=!1;const S=p(y);S===null?m(o,l):S&&S.isColor&&(m(S,1),b=!0);const x=n.xr.getEnvironmentBlendMode();x==="additive"?i.buffers.color.setClear(0,0,0,1,r):x==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,r),(n.autoClear||b)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function _(y,b){const S=p(b);S&&(S.isCubeTexture||S.mapping===Vo)?(u===void 0&&(u=new Se(new ki(1,1,1),new ri({name:"BackgroundCubeMaterial",uniforms:Fo(Zi.backgroundCube.uniforms),vertexShader:Zi.backgroundCube.vertexShader,fragmentShader:Zi.backgroundCube.fragmentShader,side:dn,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(x,M,C){this.matrixWorld.copyPosition(C.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(u)),Na.copy(b.backgroundRotation),Na.x*=-1,Na.y*=-1,Na.z*=-1,S.isCubeTexture&&S.isRenderTargetTexture===!1&&(Na.y*=-1,Na.z*=-1),u.material.uniforms.envMap.value=S,u.material.uniforms.flipEnvMap.value=S.isCubeTexture&&S.isRenderTargetTexture===!1?-1:1,u.material.uniforms.backgroundBlurriness.value=b.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,u.material.uniforms.backgroundRotation.value.setFromMatrix4(J2.makeRotationFromEuler(Na)),u.material.toneMapped=rt.getTransfer(S.colorSpace)!==It,(d!==S||h!==S.version||f!==n.toneMapping)&&(u.material.needsUpdate=!0,d=S,h=S.version,f=n.toneMapping),u.layers.enableAll(),y.unshift(u,u.geometry,u.material,0,0,null)):S&&S.isTexture&&(c===void 0&&(c=new Se(new Nn(2,2),new ri({name:"BackgroundMaterial",uniforms:Fo(Zi.background.uniforms),vertexShader:Zi.background.vertexShader,fragmentShader:Zi.background.fragmentShader,side:bs,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=S,c.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,c.material.toneMapped=rt.getTransfer(S.colorSpace)!==It,S.matrixAutoUpdate===!0&&S.updateMatrix(),c.material.uniforms.uvTransform.value.copy(S.matrix),(d!==S||h!==S.version||f!==n.toneMapping)&&(c.material.needsUpdate=!0,d=S,h=S.version,f=n.toneMapping),c.layers.enableAll(),y.unshift(c,c.geometry,c.material,0,0,null))}function m(y,b){y.getRGB(Tu,qS(n)),i.buffers.color.setClear(Tu.r,Tu.g,Tu.b,b,r)}function v(){u!==void 0&&(u.geometry.dispose(),u.material.dispose(),u=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(y,b=1){o.set(y),l=b,m(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(y){l=y,m(o,l)},render:g,addToRenderList:_,dispose:v}}function ek(n,e){const t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},s=h(null);let a=s,r=!1;function o(E,R,L,O,D){let U=!1;const F=d(O,L,R);a!==F&&(a=F,c(a.object)),U=f(E,O,L,D),U&&p(E,O,L,D),D!==null&&e.update(D,n.ELEMENT_ARRAY_BUFFER),(U||r)&&(r=!1,b(E,R,L,O),D!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(D).buffer))}function l(){return n.createVertexArray()}function c(E){return n.bindVertexArray(E)}function u(E){return n.deleteVertexArray(E)}function d(E,R,L){const O=L.wireframe===!0;let D=i[E.id];D===void 0&&(D={},i[E.id]=D);let U=D[R.id];U===void 0&&(U={},D[R.id]=U);let F=U[O];return F===void 0&&(F=h(l()),U[O]=F),F}function h(E){const R=[],L=[],O=[];for(let D=0;D=0){const le=D[H];let me=U[H];if(me===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(me=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(me=E.instanceColor)),le===void 0||le.attribute!==me||me&&le.data!==me.data)return!0;F++}return a.attributesNum!==F||a.index!==O}function p(E,R,L,O){const D={},U=R.attributes;let F=0;const W=L.getAttributes();for(const H in W)if(W[H].location>=0){let le=U[H];le===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(le=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(le=E.instanceColor));const me={};me.attribute=le,le&&le.data&&(me.data=le.data),D[H]=me,F++}a.attributes=D,a.attributesNum=F,a.index=O}function g(){const E=a.newAttributes;for(let R=0,L=E.length;R=0){let ie=D[W];if(ie===void 0&&(W==="instanceMatrix"&&E.instanceMatrix&&(ie=E.instanceMatrix),W==="instanceColor"&&E.instanceColor&&(ie=E.instanceColor)),ie!==void 0){const le=ie.normalized,me=ie.itemSize,Le=e.get(ie);if(Le===void 0)continue;const De=Le.buffer,Ke=Le.type,Oe=Le.bytesPerElement,Z=Ke===n.INT||Ke===n.UNSIGNED_INT||ie.gpuType===Gh;if(ie.isInterleavedBufferAttribute){const ae=ie.data,Te=ae.stride,X=ie.offset;if(ae.isInstancedInterleavedBuffer){for(let se=0;se0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";M="mediump"}return M==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp";const u=l(c);u!==c&&(console.warn("THREE.WebGLRenderer:",c,"not supported, using",u,"instead."),c=u);const d=t.logarithmicDepthBuffer===!0,h=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control"),f=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),p=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),g=n.getParameter(n.MAX_TEXTURE_SIZE),_=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),m=n.getParameter(n.MAX_VERTEX_ATTRIBS),v=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),y=n.getParameter(n.MAX_VARYING_VECTORS),b=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),S=p>0,x=n.getParameter(n.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:l,textureFormatReadable:r,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:d,reversedDepthBuffer:h,maxTextures:f,maxVertexTextures:p,maxTextureSize:g,maxCubemapSize:_,maxAttributes:m,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,vertexTextures:S,maxSamples:x}}function ik(n){const e=this;let t=null,i=0,s=!1,a=!1;const r=new Ns,o=new at,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(d,h){const f=d.length!==0||h||i!==0||s;return s=h,i=d.length,f},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(d,h){t=u(d,h,0)},this.setState=function(d,h,f){const p=d.clippingPlanes,g=d.clipIntersection,_=d.clipShadows,m=n.get(d);if(!s||p===null||p.length===0||a&&!_)a?u(null):c();else{const v=a?0:i,y=v*4;let b=m.clippingState||null;l.value=b,b=u(p,h,y,f);for(let S=0;S!==y;++S)b[S]=t[S];m.clippingState=b,this.numIntersection=g?this.numPlanes:0,this.numPlanes+=v}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(d,h,f,p){const g=d!==null?d.length:0;let _=null;if(g!==0){if(_=l.value,p!==!0||_===null){const m=f+g*4,v=h.matrixWorldInverse;o.getNormalMatrix(v),(_===null||_.length0){const c=new ZS(l.height);return c.fromEquirectangularTexture(n,r),e.set(r,c),r.addEventListener("dispose",s),t(c.texture,r.mapping)}else return null}}return r}function s(r){const o=r.target;o.removeEventListener("dispose",s);const l=e.get(o);l!==void 0&&(e.delete(o),l.dispose())}function a(){e=new WeakMap}return{get:i,dispose:a}}const oo=4,q0=[.125,.215,.35,.446,.526,.582],Ya=20,Tp=new Rc,Y0=new de;let Mp=null,Ep=0,Cp=0,Ap=!1;const Ka=(1+Math.sqrt(5))/2,qr=1/Ka,j0=[new T(-Ka,qr,0),new T(Ka,qr,0),new T(-qr,0,Ka),new T(qr,0,Ka),new T(0,Ka,-qr),new T(0,Ka,qr),new T(-1,1,-1),new T(1,1,-1),new T(-1,1,1),new T(1,1,1)],ak=new T;class bh{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,s=100,a={}){const{size:r=256,position:o=ak}=a;Mp=this._renderer.getRenderTarget(),Ep=this._renderer.getActiveCubeFace(),Cp=this._renderer.getActiveMipmapLevel(),Ap=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(r);const l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(e,i,s,l,o),t>0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=Q0(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=J0(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?S:0,S,S),d.setRenderTarget(s),m&&d.render(_,l),d.render(e,l)}_.geometry.dispose(),_.material.dispose(),d.toneMapping=f,d.autoClear=h,e.background=v}_textureToCubeUV(e,t){const i=this._renderer,s=e.mapping===Xs||e.mapping===ma;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=Q0()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=J0());const a=s?this._cubemapMaterial:this._equirectMaterial,r=new Se(this._lodPlanes[0],a),o=a.uniforms;o.envMap.value=e;const l=this._cubeSize;Mu(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(r,Tp)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;const s=this._lodPlanes.length;for(let a=1;aYa&&console.warn(`sigmaRadians, ${a}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${Ya}`);const m=[];let v=0;for(let M=0;My-oo?s-y+oo:0),x=4*(this._cubeSize-b);Mu(t,S,x,3*b,2*b),l.setRenderTarget(t),l.render(d,Tp)}}function rk(n){const e=[],t=[],i=[];let s=n;const a=n-oo+1+q0.length;for(let r=0;rn-oo?l=q0[r-n+oo-1]:r===0&&(l=0),i.push(l);const c=1/(o-2),u=-c,d=1+c,h=[u,u,d,u,d,d,u,u,d,d,u,d],f=6,p=6,g=3,_=2,m=1,v=new Float32Array(g*p*f),y=new Float32Array(_*p*f),b=new Float32Array(m*p*f);for(let x=0;x2?0:-1,w=[M,C,0,M+2/3,C,0,M+2/3,C+1,0,M,C,0,M+2/3,C+1,0,M,C+1,0];v.set(w,g*p*x),y.set(h,_*p*x);const E=[x,x,x,x,x,x];b.set(E,m*p*x)}const S=new $e;S.setAttribute("position",new ot(v,g)),S.setAttribute("uv",new ot(y,_)),S.setAttribute("faceIndex",new ot(b,m)),e.push(S),s>oo&&s--}return{lodPlanes:e,sizeLods:t,sigmas:i}}function Z0(n,e,t){const i=new ws(n,e,t);return i.texture.mapping=Vo,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Mu(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function ok(n,e,t){const i=new Float32Array(Ya),s=new T(0,1,0);return new ri({name:"SphericalGaussianBlur",defines:{n:Ya,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:Zg(),fragmentShader:` +}`,_t={alphahash_fragment:PI,alphahash_pars_fragment:II,alphamap_fragment:LI,alphamap_pars_fragment:kI,alphatest_fragment:DI,alphatest_pars_fragment:OI,aomap_fragment:FI,aomap_pars_fragment:NI,batching_pars_vertex:UI,batching_vertex:BI,begin_vertex:zI,beginnormal_vertex:HI,bsdfs:VI,iridescence_fragment:GI,bumpmap_pars_fragment:$I,clipping_planes_fragment:WI,clipping_planes_pars_fragment:XI,clipping_planes_pars_vertex:KI,clipping_planes_vertex:qI,color_fragment:YI,color_pars_fragment:jI,color_pars_vertex:ZI,color_vertex:JI,common:QI,cube_uv_reflection_fragment:eL,defaultnormal_vertex:tL,displacementmap_pars_vertex:nL,displacementmap_vertex:iL,emissivemap_fragment:sL,emissivemap_pars_fragment:aL,colorspace_fragment:rL,colorspace_pars_fragment:oL,envmap_fragment:lL,envmap_common_pars_fragment:cL,envmap_pars_fragment:uL,envmap_pars_vertex:dL,envmap_physical_pars_fragment:wL,envmap_vertex:hL,fog_vertex:fL,fog_pars_vertex:pL,fog_fragment:mL,fog_pars_fragment:_L,gradientmap_pars_fragment:gL,lightmap_pars_fragment:yL,lights_lambert_fragment:vL,lights_lambert_pars_fragment:bL,lights_pars_begin:xL,lights_toon_fragment:SL,lights_toon_pars_fragment:TL,lights_phong_fragment:ML,lights_phong_pars_fragment:EL,lights_physical_fragment:CL,lights_physical_pars_fragment:AL,lights_fragment_begin:RL,lights_fragment_maps:PL,lights_fragment_end:IL,logdepthbuf_fragment:LL,logdepthbuf_pars_fragment:kL,logdepthbuf_pars_vertex:DL,logdepthbuf_vertex:OL,map_fragment:FL,map_pars_fragment:NL,map_particle_fragment:UL,map_particle_pars_fragment:BL,metalnessmap_fragment:zL,metalnessmap_pars_fragment:HL,morphinstance_vertex:VL,morphcolor_vertex:GL,morphnormal_vertex:$L,morphtarget_pars_vertex:WL,morphtarget_vertex:XL,normal_fragment_begin:KL,normal_fragment_maps:qL,normal_pars_fragment:YL,normal_pars_vertex:jL,normal_vertex:ZL,normalmap_pars_fragment:JL,clearcoat_normal_fragment_begin:QL,clearcoat_normal_fragment_maps:e2,clearcoat_pars_fragment:t2,iridescence_pars_fragment:n2,opaque_fragment:i2,packing:s2,premultiplied_alpha_fragment:a2,project_vertex:r2,dithering_fragment:o2,dithering_pars_fragment:l2,roughnessmap_fragment:c2,roughnessmap_pars_fragment:u2,shadowmap_pars_fragment:d2,shadowmap_pars_vertex:h2,shadowmap_vertex:f2,shadowmask_pars_fragment:p2,skinbase_vertex:m2,skinning_pars_vertex:_2,skinning_vertex:g2,skinnormal_vertex:y2,specularmap_fragment:v2,specularmap_pars_fragment:b2,tonemapping_fragment:x2,tonemapping_pars_fragment:w2,transmission_fragment:S2,transmission_pars_fragment:T2,uv_pars_fragment:M2,uv_pars_vertex:E2,uv_vertex:C2,worldpos_vertex:A2,background_vert:R2,background_frag:P2,backgroundCube_vert:I2,backgroundCube_frag:L2,cube_vert:k2,cube_frag:D2,depth_vert:O2,depth_frag:F2,distanceRGBA_vert:N2,distanceRGBA_frag:U2,equirect_vert:B2,equirect_frag:z2,linedashed_vert:H2,linedashed_frag:V2,meshbasic_vert:G2,meshbasic_frag:$2,meshlambert_vert:W2,meshlambert_frag:X2,meshmatcap_vert:K2,meshmatcap_frag:q2,meshnormal_vert:Y2,meshnormal_frag:j2,meshphong_vert:Z2,meshphong_frag:J2,meshphysical_vert:Q2,meshphysical_frag:ek,meshtoon_vert:tk,meshtoon_frag:nk,points_vert:ik,points_frag:sk,shadow_vert:ak,shadow_frag:rk,sprite_vert:ok,sprite_frag:lk},Me={common:{diffuse:{value:new de(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new rt},alphaMap:{value:null},alphaMapTransform:{value:new rt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new rt}},envmap:{envMap:{value:null},envMapRotation:{value:new rt},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new rt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new rt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new rt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new rt},normalScale:{value:new ne(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new rt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new rt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new rt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new rt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new de(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new de(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new rt},alphaTest:{value:0},uvTransform:{value:new rt}},sprite:{diffuse:{value:new de(16777215)},opacity:{value:1},center:{value:new ne(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new rt},alphaMap:{value:null},alphaMapTransform:{value:new rt},alphaTest:{value:0}}},Ji={basic:{uniforms:Hn([Me.common,Me.specularmap,Me.envmap,Me.aomap,Me.lightmap,Me.fog]),vertexShader:_t.meshbasic_vert,fragmentShader:_t.meshbasic_frag},lambert:{uniforms:Hn([Me.common,Me.specularmap,Me.envmap,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.fog,Me.lights,{emissive:{value:new de(0)}}]),vertexShader:_t.meshlambert_vert,fragmentShader:_t.meshlambert_frag},phong:{uniforms:Hn([Me.common,Me.specularmap,Me.envmap,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.fog,Me.lights,{emissive:{value:new de(0)},specular:{value:new de(1118481)},shininess:{value:30}}]),vertexShader:_t.meshphong_vert,fragmentShader:_t.meshphong_frag},standard:{uniforms:Hn([Me.common,Me.envmap,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.roughnessmap,Me.metalnessmap,Me.fog,Me.lights,{emissive:{value:new de(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:_t.meshphysical_vert,fragmentShader:_t.meshphysical_frag},toon:{uniforms:Hn([Me.common,Me.aomap,Me.lightmap,Me.emissivemap,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.gradientmap,Me.fog,Me.lights,{emissive:{value:new de(0)}}]),vertexShader:_t.meshtoon_vert,fragmentShader:_t.meshtoon_frag},matcap:{uniforms:Hn([Me.common,Me.bumpmap,Me.normalmap,Me.displacementmap,Me.fog,{matcap:{value:null}}]),vertexShader:_t.meshmatcap_vert,fragmentShader:_t.meshmatcap_frag},points:{uniforms:Hn([Me.points,Me.fog]),vertexShader:_t.points_vert,fragmentShader:_t.points_frag},dashed:{uniforms:Hn([Me.common,Me.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:_t.linedashed_vert,fragmentShader:_t.linedashed_frag},depth:{uniforms:Hn([Me.common,Me.displacementmap]),vertexShader:_t.depth_vert,fragmentShader:_t.depth_frag},normal:{uniforms:Hn([Me.common,Me.bumpmap,Me.normalmap,Me.displacementmap,{opacity:{value:1}}]),vertexShader:_t.meshnormal_vert,fragmentShader:_t.meshnormal_frag},sprite:{uniforms:Hn([Me.sprite,Me.fog]),vertexShader:_t.sprite_vert,fragmentShader:_t.sprite_frag},background:{uniforms:{uvTransform:{value:new rt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:_t.background_vert,fragmentShader:_t.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new rt}},vertexShader:_t.backgroundCube_vert,fragmentShader:_t.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:_t.cube_vert,fragmentShader:_t.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:_t.equirect_vert,fragmentShader:_t.equirect_frag},distanceRGBA:{uniforms:Hn([Me.common,Me.displacementmap,{referencePosition:{value:new T},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:_t.distanceRGBA_vert,fragmentShader:_t.distanceRGBA_frag},shadow:{uniforms:Hn([Me.lights,Me.fog,{color:{value:new de(0)},opacity:{value:1}}]),vertexShader:_t.shadow_vert,fragmentShader:_t.shadow_frag}};Ji.physical={uniforms:Hn([Ji.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new rt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new rt},clearcoatNormalScale:{value:new ne(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new rt},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new rt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new rt},sheen:{value:0},sheenColor:{value:new de(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new rt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new rt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new rt},transmissionSamplerSize:{value:new ne},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new rt},attenuationDistance:{value:0},attenuationColor:{value:new de(0)},specularColor:{value:new de(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new rt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new rt},anisotropyVector:{value:new ne},anisotropyMap:{value:null},anisotropyMapTransform:{value:new rt}}]),vertexShader:_t.meshphysical_vert,fragmentShader:_t.meshphysical_frag};const Au={r:0,b:0,g:0},Ua=new rn,ck=new Ee;function uk(n,e,t,i,s,a,r){const o=new de(0);let l=a===!0?0:1,c,u,d=null,h=0,f=null;function p(y){let b=y.isScene===!0?y.background:null;return b&&b.isTexture&&(b=(y.backgroundBlurriness>0?t:e).get(b)),b}function g(y){let b=!1;const S=p(y);S===null?m(o,l):S&&S.isColor&&(m(S,1),b=!0);const x=n.xr.getEnvironmentBlendMode();x==="additive"?i.buffers.color.setClear(0,0,0,1,r):x==="alpha-blend"&&i.buffers.color.setClear(0,0,0,0,r),(n.autoClear||b)&&(i.buffers.depth.setTest(!0),i.buffers.depth.setMask(!0),i.buffers.color.setMask(!0),n.clear(n.autoClearColor,n.autoClearDepth,n.autoClearStencil))}function _(y,b){const S=p(b);S&&(S.isCubeTexture||S.mapping===Wo)?(u===void 0&&(u=new Se(new Di(1,1,1),new ri({name:"BackgroundCubeMaterial",uniforms:Bo(Ji.backgroundCube.uniforms),vertexShader:Ji.backgroundCube.vertexShader,fragmentShader:Ji.backgroundCube.fragmentShader,side:dn,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),u.geometry.deleteAttribute("normal"),u.geometry.deleteAttribute("uv"),u.onBeforeRender=function(x,M,C){this.matrixWorld.copyPosition(C.matrixWorld)},Object.defineProperty(u.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(u)),Ua.copy(b.backgroundRotation),Ua.x*=-1,Ua.y*=-1,Ua.z*=-1,S.isCubeTexture&&S.isRenderTargetTexture===!1&&(Ua.y*=-1,Ua.z*=-1),u.material.uniforms.envMap.value=S,u.material.uniforms.flipEnvMap.value=S.isCubeTexture&&S.isRenderTargetTexture===!1?-1:1,u.material.uniforms.backgroundBlurriness.value=b.backgroundBlurriness,u.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,u.material.uniforms.backgroundRotation.value.setFromMatrix4(ck.makeRotationFromEuler(Ua)),u.material.toneMapped=ot.getTransfer(S.colorSpace)!==It,(d!==S||h!==S.version||f!==n.toneMapping)&&(u.material.needsUpdate=!0,d=S,h=S.version,f=n.toneMapping),u.layers.enableAll(),y.unshift(u,u.geometry,u.material,0,0,null)):S&&S.isTexture&&(c===void 0&&(c=new Se(new Nn(2,2),new ri({name:"BackgroundMaterial",uniforms:Bo(Ji.background.uniforms),vertexShader:Ji.background.vertexShader,fragmentShader:Ji.background.fragmentShader,side:bs,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=S,c.material.uniforms.backgroundIntensity.value=b.backgroundIntensity,c.material.toneMapped=ot.getTransfer(S.colorSpace)!==It,S.matrixAutoUpdate===!0&&S.updateMatrix(),c.material.uniforms.uvTransform.value.copy(S.matrix),(d!==S||h!==S.version||f!==n.toneMapping)&&(c.material.needsUpdate=!0,d=S,h=S.version,f=n.toneMapping),c.layers.enableAll(),y.unshift(c,c.geometry,c.material,0,0,null))}function m(y,b){y.getRGB(Au,iT(n)),i.buffers.color.setClear(Au.r,Au.g,Au.b,b,r)}function v(){u!==void 0&&(u.geometry.dispose(),u.material.dispose(),u=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(y,b=1){o.set(y),l=b,m(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(y){l=y,m(o,l)},render:g,addToRenderList:_,dispose:v}}function dk(n,e){const t=n.getParameter(n.MAX_VERTEX_ATTRIBS),i={},s=h(null);let a=s,r=!1;function o(E,R,L,O,D){let U=!1;const F=d(O,L,R);a!==F&&(a=F,c(a.object)),U=f(E,O,L,D),U&&p(E,O,L,D),D!==null&&e.update(D,n.ELEMENT_ARRAY_BUFFER),(U||r)&&(r=!1,b(E,R,L,O),D!==null&&n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,e.get(D).buffer))}function l(){return n.createVertexArray()}function c(E){return n.bindVertexArray(E)}function u(E){return n.deleteVertexArray(E)}function d(E,R,L){const O=L.wireframe===!0;let D=i[E.id];D===void 0&&(D={},i[E.id]=D);let U=D[R.id];U===void 0&&(U={},D[R.id]=U);let F=U[O];return F===void 0&&(F=h(l()),U[O]=F),F}function h(E){const R=[],L=[],O=[];for(let D=0;D=0){const le=D[H];let me=U[H];if(me===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(me=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(me=E.instanceColor)),le===void 0||le.attribute!==me||me&&le.data!==me.data)return!0;F++}return a.attributesNum!==F||a.index!==O}function p(E,R,L,O){const D={},U=R.attributes;let F=0;const W=L.getAttributes();for(const H in W)if(W[H].location>=0){let le=U[H];le===void 0&&(H==="instanceMatrix"&&E.instanceMatrix&&(le=E.instanceMatrix),H==="instanceColor"&&E.instanceColor&&(le=E.instanceColor));const me={};me.attribute=le,le&&le.data&&(me.data=le.data),D[H]=me,F++}a.attributes=D,a.attributesNum=F,a.index=O}function g(){const E=a.newAttributes;for(let R=0,L=E.length;R=0){let ie=D[W];if(ie===void 0&&(W==="instanceMatrix"&&E.instanceMatrix&&(ie=E.instanceMatrix),W==="instanceColor"&&E.instanceColor&&(ie=E.instanceColor)),ie!==void 0){const le=ie.normalized,me=ie.itemSize,Le=e.get(ie);if(Le===void 0)continue;const De=Le.buffer,Ke=Le.type,Oe=Le.bytesPerElement,Z=Ke===n.INT||Ke===n.UNSIGNED_INT||ie.gpuType===Yh;if(ie.isInterleavedBufferAttribute){const re=ie.data,Te=re.stride,X=ie.offset;if(re.isInstancedInterleavedBuffer){for(let se=0;se0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.HIGH_FLOAT).precision>0)return"highp";M="mediump"}return M==="mediump"&&n.getShaderPrecisionFormat(n.VERTEX_SHADER,n.MEDIUM_FLOAT).precision>0&&n.getShaderPrecisionFormat(n.FRAGMENT_SHADER,n.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=t.precision!==void 0?t.precision:"highp";const u=l(c);u!==c&&(console.warn("THREE.WebGLRenderer:",c,"not supported, using",u,"instead."),c=u);const d=t.logarithmicDepthBuffer===!0,h=t.reversedDepthBuffer===!0&&e.has("EXT_clip_control"),f=n.getParameter(n.MAX_TEXTURE_IMAGE_UNITS),p=n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS),g=n.getParameter(n.MAX_TEXTURE_SIZE),_=n.getParameter(n.MAX_CUBE_MAP_TEXTURE_SIZE),m=n.getParameter(n.MAX_VERTEX_ATTRIBS),v=n.getParameter(n.MAX_VERTEX_UNIFORM_VECTORS),y=n.getParameter(n.MAX_VARYING_VECTORS),b=n.getParameter(n.MAX_FRAGMENT_UNIFORM_VECTORS),S=p>0,x=n.getParameter(n.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:l,textureFormatReadable:r,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:d,reversedDepthBuffer:h,maxTextures:f,maxVertexTextures:p,maxTextureSize:g,maxCubemapSize:_,maxAttributes:m,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,vertexTextures:S,maxSamples:x}}function pk(n){const e=this;let t=null,i=0,s=!1,a=!1;const r=new Ns,o=new rt,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(d,h){const f=d.length!==0||h||i!==0||s;return s=h,i=d.length,f},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(d,h){t=u(d,h,0)},this.setState=function(d,h,f){const p=d.clippingPlanes,g=d.clipIntersection,_=d.clipShadows,m=n.get(d);if(!s||p===null||p.length===0||a&&!_)a?u(null):c();else{const v=a?0:i,y=v*4;let b=m.clippingState||null;l.value=b,b=u(p,h,y,f);for(let S=0;S!==y;++S)b[S]=t[S];m.clippingState=b,this.numIntersection=g?this.numPlanes:0,this.numPlanes+=v}};function c(){l.value!==t&&(l.value=t,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(d,h,f,p){const g=d!==null?d.length:0;let _=null;if(g!==0){if(_=l.value,p!==!0||_===null){const m=f+g*4,v=h.matrixWorldInverse;o.getNormalMatrix(v),(_===null||_.length0){const c=new rT(l.height);return c.fromEquirectangularTexture(n,r),e.set(r,c),r.addEventListener("dispose",s),t(c.texture,r.mapping)}else return null}}return r}function s(r){const o=r.target;o.removeEventListener("dispose",s);const l=e.get(o);l!==void 0&&(e.delete(o),l.dispose())}function a(){e=new WeakMap}return{get:i,dispose:a}}const co=4,tv=[.125,.215,.35,.446,.526,.582],ja=20,Pp=new kc,nv=new de;let Ip=null,Lp=0,kp=0,Dp=!1;const qa=(1+Math.sqrt(5))/2,Yr=1/qa,iv=[new T(-qa,Yr,0),new T(qa,Yr,0),new T(-Yr,0,qa),new T(Yr,0,qa),new T(0,qa,-Yr),new T(0,qa,Yr),new T(-1,1,-1),new T(1,1,-1),new T(-1,1,1),new T(1,1,1)],_k=new T;class Eh{constructor(e){this._renderer=e,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(e,t=0,i=.1,s=100,a={}){const{size:r=256,position:o=_k}=a;Ip=this._renderer.getRenderTarget(),Lp=this._renderer.getActiveCubeFace(),kp=this._renderer.getActiveMipmapLevel(),Dp=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(r);const l=this._allocateTargets();return l.depthBuffer=!0,this._sceneToCubeUV(e,i,s,l,o),t>0&&this._blur(l,0,0,t),this._applyPMREM(l),this._cleanup(l),l}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=rv(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=av(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?S:0,S,S),d.setRenderTarget(s),m&&d.render(_,l),d.render(e,l)}_.geometry.dispose(),_.material.dispose(),d.toneMapping=f,d.autoClear=h,e.background=v}_textureToCubeUV(e,t){const i=this._renderer,s=e.mapping===Xs||e.mapping===_a;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=rv()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=av());const a=s?this._cubemapMaterial:this._equirectMaterial,r=new Se(this._lodPlanes[0],a),o=a.uniforms;o.envMap.value=e;const l=this._cubeSize;Ru(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(r,Pp)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;const s=this._lodPlanes.length;for(let a=1;aja&&console.warn(`sigmaRadians, ${a}, is too large and will clip, as it requested ${_} samples when the maximum is set to ${ja}`);const m=[];let v=0;for(let M=0;My-co?s-y+co:0),x=4*(this._cubeSize-b);Ru(t,S,x,3*b,2*b),l.setRenderTarget(t),l.render(d,Pp)}}function gk(n){const e=[],t=[],i=[];let s=n;const a=n-co+1+tv.length;for(let r=0;rn-co?l=tv[r-n+co-1]:r===0&&(l=0),i.push(l);const c=1/(o-2),u=-c,d=1+c,h=[u,u,d,u,d,d,u,u,d,d,u,d],f=6,p=6,g=3,_=2,m=1,v=new Float32Array(g*p*f),y=new Float32Array(_*p*f),b=new Float32Array(m*p*f);for(let x=0;x2?0:-1,w=[M,C,0,M+2/3,C,0,M+2/3,C+1,0,M,C,0,M+2/3,C+1,0,M,C+1,0];v.set(w,g*p*x),y.set(h,_*p*x);const E=[x,x,x,x,x,x];b.set(E,m*p*x)}const S=new $e;S.setAttribute("position",new lt(v,g)),S.setAttribute("uv",new lt(y,_)),S.setAttribute("faceIndex",new lt(b,m)),e.push(S),s>co&&s--}return{lodPlanes:e,sizeLods:t,sigmas:i}}function sv(n,e,t){const i=new ws(n,e,t);return i.texture.mapping=Wo,i.texture.name="PMREM.cubeUv",i.scissorTest=!0,i}function Ru(n,e,t,i,s){n.viewport.set(e,t,i,s),n.scissor.set(e,t,i,s)}function yk(n,e,t){const i=new Float32Array(ja),s=new T(0,1,0);return new ri({name:"SphericalGaussianBlur",defines:{n:ja,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${n}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:sy(),fragmentShader:` precision mediump float; precision mediump int; @@ -3636,7 +3636,7 @@ void main() { } } - `,blending:Hs,depthTest:!1,depthWrite:!1})}function J0(){return new ri({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:Zg(),fragmentShader:` + `,blending:Hs,depthTest:!1,depthWrite:!1})}function av(){return new ri({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:sy(),fragmentShader:` precision mediump float; precision mediump int; @@ -3655,7 +3655,7 @@ void main() { gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:Hs,depthTest:!1,depthWrite:!1})}function Q0(){return new ri({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Zg(),fragmentShader:` + `,blending:Hs,depthTest:!1,depthWrite:!1})}function rv(){return new ri({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:sy(),fragmentShader:` precision mediump float; precision mediump int; @@ -3671,7 +3671,7 @@ void main() { gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:Hs,depthTest:!1,depthWrite:!1})}function Zg(){return` + `,blending:Hs,depthTest:!1,depthWrite:!1})}function sy(){return` precision mediump float; precision mediump int; @@ -3726,17 +3726,17 @@ void main() { gl_Position = vec4( position, 1.0 ); } - `}function lk(n){let e=new WeakMap,t=null;function i(o){if(o&&o.isTexture){const l=o.mapping,c=l===pr||l===nc,u=l===Xs||l===ma;if(c||u){let d=e.get(o);const h=d!==void 0?d.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==h)return t===null&&(t=new bh(n)),d=c?t.fromEquirectangular(o,d):t.fromCubemap(o,d),d.texture.pmremVersion=o.pmremVersion,e.set(o,d),d.texture;if(d!==void 0)return d.texture;{const f=o.image;return c&&f&&f.height>0||u&&f&&s(f)?(t===null&&(t=new bh(n)),d=c?t.fromEquirectangular(o):t.fromCubemap(o),d.texture.pmremVersion=o.pmremVersion,e.set(o,d),o.addEventListener("dispose",a),d.texture):null}}}return o}function s(o){let l=0;const c=6;for(let u=0;ue.maxTextureSize&&(S=Math.ceil(b/e.maxTextureSize),b=e.maxTextureSize);const x=new Float32Array(b*S*4*d),M=new jh(x,b,S,d);M.type=Mn,M.needsUpdate=!0;const C=y*4;for(let E=0;E0)return n;const s=e*t;let a=tv[s];if(a===void 0&&(a=new Float32Array(s),tv[s]=a),e!==0){i.toArray(a,0);for(let r=1,o=0;r!==e;++r)o+=t,n[r].toArray(a,o)}return a}function fn(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t0||u&&f&&s(f)?(t===null&&(t=new Eh(n)),d=c?t.fromEquirectangular(o):t.fromCubemap(o),d.texture.pmremVersion=o.pmremVersion,e.set(o,d),o.addEventListener("dispose",a),d.texture):null}}}return o}function s(o){let l=0;const c=6;for(let u=0;ue.maxTextureSize&&(S=Math.ceil(b/e.maxTextureSize),b=e.maxTextureSize);const x=new Float32Array(b*S*4*d),M=new nf(x,b,S,d);M.type=Mn,M.needsUpdate=!0;const C=y*4;for(let E=0;E0)return n;const s=e*t;let a=lv[s];if(a===void 0&&(a=new Float32Array(s),lv[s]=a),e!==0){i.toArray(a,0);for(let r=1,o=0;r!==e;++r)o+=t,n[r].toArray(a,o)}return a}function fn(n,e){if(n.length!==e.length)return!1;for(let t=0,i=n.length;t":" "} ${o}: ${t[r]}`)}return i.join(` -`)}const lv=new at;function lD(n){rt._getMatrix(lv,rt.workingColorSpace,n);const e=`mat3( ${lv.elements.map(t=>t.toFixed(4))} )`;switch(rt.getTransfer(n)){case sc:return[e,"LinearTransferOETF"];case It:return[e,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function cv(n,e,t){const i=n.getShaderParameter(e,n.COMPILE_STATUS),a=(n.getShaderInfoLog(e)||"").trim();if(i&&a==="")return"";const r=/ERROR: 0:(\d+)/.exec(a);if(r){const o=parseInt(r[1]);return t.toUpperCase()+` +`)}const mv=new rt;function vD(n){ot._getMatrix(mv,ot.workingColorSpace,n);const e=`mat3( ${mv.elements.map(t=>t.toFixed(4))} )`;switch(ot.getTransfer(n)){case lc:return[e,"LinearTransferOETF"];case It:return[e,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",n),[e,"LinearTransferOETF"]}}function _v(n,e,t){const i=n.getShaderParameter(e,n.COMPILE_STATUS),a=(n.getShaderInfoLog(e)||"").trim();if(i&&a==="")return"";const r=/ERROR: 0:(\d+)/.exec(a);if(r){const o=parseInt(r[1]);return t.toUpperCase()+` `+a+` -`+oD(n.getShaderSource(e),o)}else return a}function cD(n,e){const t=lD(e);return[`vec4 ${n}( vec4 value ) {`,` return ${t[1]}( vec4( value.rgb * ${t[0]}, value.a ) );`,"}"].join(` -`)}function uD(n,e){let t;switch(e){case TS:t="Linear";break;case MS:t="Reinhard";break;case ES:t="Cineon";break;case hg:t="ACESFilmic";break;case AS:t="AgX";break;case RS:t="Neutral";break;case CS:t="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",e),t="Linear"}return"vec3 "+n+"( vec3 color ) { return "+t+"ToneMapping( color ); }"}const Eu=new T;function dD(){rt.getLuminanceCoefficients(Eu);const n=Eu.x.toFixed(4),e=Eu.y.toFixed(4),t=Eu.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${n}, ${e}, ${t} );`," return dot( weights, rgb );","}"].join(` -`)}function hD(n){return[n.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",n.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(Pl).join(` -`)}function fD(n){const e=[];for(const t in n){const i=n[t];i!==!1&&e.push("#define "+t+" "+i)}return e.join(` -`)}function pD(n,e){const t={},i=n.getProgramParameter(e,n.ACTIVE_ATTRIBUTES);for(let s=0;s/gm;function n_(n){return n.replace(mD,gD)}const _D=new Map;function gD(n,e){let t=_t[e];if(t===void 0){const i=_D.get(e);if(i!==void 0)t=_t[i],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',e,i);else throw new Error("Can not resolve #include <"+e+">")}return n_(t)}const yD=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function hv(n){return n.replace(yD,vD)}function vD(n,e,t,i){let s="";for(let a=parseInt(e);a/gm;function c_(n){return n.replace(ED,AD)}const CD=new Map;function AD(n,e){let t=_t[e];if(t===void 0){const i=CD.get(e);if(i!==void 0)t=_t[i],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',e,i);else throw new Error("Can not resolve #include <"+e+">")}return c_(t)}const RD=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function vv(n){return n.replace(RD,PD)}function PD(n,e,t,i){let s="";for(let a=parseInt(e);a0&&(_+=` -`),m=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p].filter(Pl).join(` +`),m=["#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p].filter(kl).join(` `),m.length>0&&(m+=` -`)):(_=[fv(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` -`].filter(Pl).join(` -`),m=[fv(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+u:"",t.envMap?"#define "+d:"",h?"#define CUBEUV_TEXEL_WIDTH "+h.texelWidth:"",h?"#define CUBEUV_TEXEL_HEIGHT "+h.texelHeight:"",h?"#define CUBEUV_MAX_MIP "+h.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor||t.batchingColor?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Vs?"#define TONE_MAPPING":"",t.toneMapping!==Vs?_t.tonemapping_pars_fragment:"",t.toneMapping!==Vs?uD("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",_t.colorspace_pars_fragment,cD("linearToOutputTexel",t.outputColorSpace),dD(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` -`].filter(Pl).join(` -`)),r=n_(r),r=uv(r,t),r=dv(r,t),o=n_(o),o=uv(o,t),o=dv(o,t),r=hv(r),o=hv(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es +`)):(_=[bv(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",t.batching?"#define USE_BATCHING":"",t.batchingColor?"#define USE_BATCHING_COLOR":"",t.instancing?"#define USE_INSTANCING":"",t.instancingColor?"#define USE_INSTANCING_COLOR":"",t.instancingMorph?"#define USE_INSTANCING_MORPH":"",t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.map?"#define USE_MAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+u:"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.displacementMap?"#define USE_DISPLACEMENTMAP":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.mapUv?"#define MAP_UV "+t.mapUv:"",t.alphaMapUv?"#define ALPHAMAP_UV "+t.alphaMapUv:"",t.lightMapUv?"#define LIGHTMAP_UV "+t.lightMapUv:"",t.aoMapUv?"#define AOMAP_UV "+t.aoMapUv:"",t.emissiveMapUv?"#define EMISSIVEMAP_UV "+t.emissiveMapUv:"",t.bumpMapUv?"#define BUMPMAP_UV "+t.bumpMapUv:"",t.normalMapUv?"#define NORMALMAP_UV "+t.normalMapUv:"",t.displacementMapUv?"#define DISPLACEMENTMAP_UV "+t.displacementMapUv:"",t.metalnessMapUv?"#define METALNESSMAP_UV "+t.metalnessMapUv:"",t.roughnessMapUv?"#define ROUGHNESSMAP_UV "+t.roughnessMapUv:"",t.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+t.anisotropyMapUv:"",t.clearcoatMapUv?"#define CLEARCOATMAP_UV "+t.clearcoatMapUv:"",t.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+t.clearcoatNormalMapUv:"",t.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+t.clearcoatRoughnessMapUv:"",t.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+t.iridescenceMapUv:"",t.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+t.iridescenceThicknessMapUv:"",t.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+t.sheenColorMapUv:"",t.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+t.sheenRoughnessMapUv:"",t.specularMapUv?"#define SPECULARMAP_UV "+t.specularMapUv:"",t.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+t.specularColorMapUv:"",t.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+t.specularIntensityMapUv:"",t.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+t.transmissionMapUv:"",t.thicknessMapUv?"#define THICKNESSMAP_UV "+t.thicknessMapUv:"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.flatShading?"#define FLAT_SHADED":"",t.skinning?"#define USE_SKINNING":"",t.morphTargets?"#define USE_MORPHTARGETS":"",t.morphNormals&&t.flatShading===!1?"#define USE_MORPHNORMALS":"",t.morphColors?"#define USE_MORPHCOLORS":"",t.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+t.morphTextureStride:"",t.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+t.morphTargetsCount:"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.sizeAttenuation?"#define USE_SIZEATTENUATION":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` +`].filter(kl).join(` +`),m=[bv(t),"#define SHADER_TYPE "+t.shaderType,"#define SHADER_NAME "+t.shaderName,p,t.useFog&&t.fog?"#define USE_FOG":"",t.useFog&&t.fogExp2?"#define FOG_EXP2":"",t.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",t.map?"#define USE_MAP":"",t.matcap?"#define USE_MATCAP":"",t.envMap?"#define USE_ENVMAP":"",t.envMap?"#define "+c:"",t.envMap?"#define "+u:"",t.envMap?"#define "+d:"",h?"#define CUBEUV_TEXEL_WIDTH "+h.texelWidth:"",h?"#define CUBEUV_TEXEL_HEIGHT "+h.texelHeight:"",h?"#define CUBEUV_MAX_MIP "+h.maxMip+".0":"",t.lightMap?"#define USE_LIGHTMAP":"",t.aoMap?"#define USE_AOMAP":"",t.bumpMap?"#define USE_BUMPMAP":"",t.normalMap?"#define USE_NORMALMAP":"",t.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",t.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",t.emissiveMap?"#define USE_EMISSIVEMAP":"",t.anisotropy?"#define USE_ANISOTROPY":"",t.anisotropyMap?"#define USE_ANISOTROPYMAP":"",t.clearcoat?"#define USE_CLEARCOAT":"",t.clearcoatMap?"#define USE_CLEARCOATMAP":"",t.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",t.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",t.dispersion?"#define USE_DISPERSION":"",t.iridescence?"#define USE_IRIDESCENCE":"",t.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",t.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",t.specularMap?"#define USE_SPECULARMAP":"",t.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",t.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",t.roughnessMap?"#define USE_ROUGHNESSMAP":"",t.metalnessMap?"#define USE_METALNESSMAP":"",t.alphaMap?"#define USE_ALPHAMAP":"",t.alphaTest?"#define USE_ALPHATEST":"",t.alphaHash?"#define USE_ALPHAHASH":"",t.sheen?"#define USE_SHEEN":"",t.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",t.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",t.transmission?"#define USE_TRANSMISSION":"",t.transmissionMap?"#define USE_TRANSMISSIONMAP":"",t.thicknessMap?"#define USE_THICKNESSMAP":"",t.vertexTangents&&t.flatShading===!1?"#define USE_TANGENT":"",t.vertexColors||t.instancingColor||t.batchingColor?"#define USE_COLOR":"",t.vertexAlphas?"#define USE_COLOR_ALPHA":"",t.vertexUv1s?"#define USE_UV1":"",t.vertexUv2s?"#define USE_UV2":"",t.vertexUv3s?"#define USE_UV3":"",t.pointsUvs?"#define USE_POINTS_UV":"",t.gradientMap?"#define USE_GRADIENTMAP":"",t.flatShading?"#define FLAT_SHADED":"",t.doubleSided?"#define DOUBLE_SIDED":"",t.flipSided?"#define FLIP_SIDED":"",t.shadowMapEnabled?"#define USE_SHADOWMAP":"",t.shadowMapEnabled?"#define "+l:"",t.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",t.numLightProbes>0?"#define USE_LIGHT_PROBES":"",t.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",t.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",t.logarithmicDepthBuffer?"#define USE_LOGARITHMIC_DEPTH_BUFFER":"",t.reversedDepthBuffer?"#define USE_REVERSED_DEPTH_BUFFER":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",t.toneMapping!==Vs?"#define TONE_MAPPING":"",t.toneMapping!==Vs?_t.tonemapping_pars_fragment:"",t.toneMapping!==Vs?xD("toneMapping",t.toneMapping):"",t.dithering?"#define DITHERING":"",t.opaque?"#define OPAQUE":"",_t.colorspace_pars_fragment,bD("linearToOutputTexel",t.outputColorSpace),wD(),t.useDepthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",` +`].filter(kl).join(` +`)),r=c_(r),r=gv(r,t),r=yv(r,t),o=c_(o),o=gv(o,t),o=yv(o,t),r=vv(r),o=vv(o),t.isRawShaderMaterial!==!0&&(v=`#version 300 es `,_=[f,"#define attribute in","#define varying out","#define texture2D texture"].join(` `)+` -`+_,m=["#define varying in",t.glslVersion===qm?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===qm?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` +`+_,m=["#define varying in",t.glslVersion===t_?"":"layout(location = 0) out highp vec4 pc_fragColor;",t.glslVersion===t_?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` `)+` -`+m);const y=v+_+r,b=v+m+o,S=ov(s,s.VERTEX_SHADER,y),x=ov(s,s.FRAGMENT_SHADER,b);s.attachShader(g,S),s.attachShader(g,x),t.index0AttributeName!==void 0?s.bindAttribLocation(g,0,t.index0AttributeName):t.morphTargets===!0&&s.bindAttribLocation(g,0,"position"),s.linkProgram(g);function M(R){if(n.debug.checkShaderErrors){const L=s.getProgramInfoLog(g)||"",O=s.getShaderInfoLog(S)||"",D=s.getShaderInfoLog(x)||"",U=L.trim(),F=O.trim(),W=D.trim();let H=!0,ie=!0;if(s.getProgramParameter(g,s.LINK_STATUS)===!1)if(H=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(s,g,S,x);else{const le=cv(s,S,"vertex"),me=cv(s,x,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(g,s.VALIDATE_STATUS)+` +`+m);const y=v+_+r,b=v+m+o,S=pv(s,s.VERTEX_SHADER,y),x=pv(s,s.FRAGMENT_SHADER,b);s.attachShader(g,S),s.attachShader(g,x),t.index0AttributeName!==void 0?s.bindAttribLocation(g,0,t.index0AttributeName):t.morphTargets===!0&&s.bindAttribLocation(g,0,"position"),s.linkProgram(g);function M(R){if(n.debug.checkShaderErrors){const L=s.getProgramInfoLog(g)||"",O=s.getShaderInfoLog(S)||"",D=s.getShaderInfoLog(x)||"",U=L.trim(),F=O.trim(),W=D.trim();let H=!0,ie=!0;if(s.getProgramParameter(g,s.LINK_STATUS)===!1)if(H=!1,typeof n.debug.onShaderError=="function")n.debug.onShaderError(s,g,S,x);else{const le=_v(s,S,"vertex"),me=_v(s,x,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(g,s.VALIDATE_STATUS)+` Material Name: `+R.name+` Material Type: `+R.type+` Program Info Log: `+U+` `+le+` -`+me)}else U!==""?console.warn("THREE.WebGLProgram: Program Info Log:",U):(F===""||W==="")&&(ie=!1);ie&&(R.diagnostics={runnable:H,programLog:U,vertexShader:{log:F,prefix:_},fragmentShader:{log:W,prefix:m}})}s.deleteShader(S),s.deleteShader(x),C=new ud(s,g),w=pD(s,g)}let C;this.getUniforms=function(){return C===void 0&&M(this),C};let w;this.getAttributes=function(){return w===void 0&&M(this),w};let E=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=s.getProgramParameter(g,aD)),E},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(g),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=rD++,this.cacheKey=e,this.usedTimes=1,this.program=g,this.vertexShader=S,this.fragmentShader=x,this}let ED=0;class CD{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){const t=e.vertexShader,i=e.fragmentShader,s=this._getShaderStage(t),a=this._getShaderStage(i),r=this._getShaderCacheForMaterial(e);return r.has(s)===!1&&(r.add(s),s.usedTimes++),r.has(a)===!1&&(r.add(a),a.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;let i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){const t=this.shaderCache;let i=t.get(e);return i===void 0&&(i=new AD(e),t.set(e,i)),i}}class AD{constructor(e){this.id=ED++,this.code=e,this.usedTimes=0}}function RD(n,e,t,i,s,a,r){const o=new Jh,l=new CD,c=new Set,u=[],d=s.logarithmicDepthBuffer,h=s.vertexTextures;let f=s.precision;const p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function g(w){return c.add(w),w===0?"uv":`uv${w}`}function _(w,E,R,L,O){const D=L.fog,U=O.geometry,F=w.isMeshStandardMaterial?L.environment:null,W=(w.isMeshStandardMaterial?t:e).get(w.envMap||F),H=W&&W.mapping===Vo?W.image.height:null,ie=p[w.type];w.precision!==null&&(f=s.getMaxPrecision(w.precision),f!==w.precision&&console.warn("THREE.WebGLProgram.getParameters:",w.precision,"not supported, using",f,"instead."));const le=U.morphAttributes.position||U.morphAttributes.normal||U.morphAttributes.color,me=le!==void 0?le.length:0;let Le=0;U.morphAttributes.position!==void 0&&(Le=1),U.morphAttributes.normal!==void 0&&(Le=2),U.morphAttributes.color!==void 0&&(Le=3);let De,Ke,Oe,Z;if(ie){const At=Zi[ie];De=At.vertexShader,Ke=At.fragmentShader}else De=w.vertexShader,Ke=w.fragmentShader,l.update(w),Oe=l.getVertexShaderID(w),Z=l.getFragmentShaderID(w);const ae=n.getRenderTarget(),Te=n.state.buffers.depth.getReversed(),X=O.isInstancedMesh===!0,se=O.isBatchedMesh===!0,we=!!w.map,Re=!!w.matcap,k=!!W,G=!!w.aoMap,j=!!w.lightMap,Y=!!w.bumpMap,Q=!!w.normalMap,ge=!!w.displacementMap,ue=!!w.emissiveMap,ye=!!w.metalnessMap,We=!!w.roughnessMap,st=w.anisotropy>0,I=w.clearcoat>0,A=w.dispersion>0,V=w.iridescence>0,J=w.sheen>0,ce=w.transmission>0,ee=st&&!!w.anisotropyMap,Ve=I&&!!w.clearcoatMap,ve=I&&!!w.clearcoatNormalMap,Be=I&&!!w.clearcoatRoughnessMap,ze=V&&!!w.iridescenceMap,he=V&&!!w.iridescenceThicknessMap,Ie=J&&!!w.sheenColorMap,Qe=J&&!!w.sheenRoughnessMap,Ge=!!w.specularMap,Ae=!!w.specularColorMap,ft=!!w.specularIntensityMap,N=ce&&!!w.transmissionMap,_e=ce&&!!w.thicknessMap,xe=!!w.gradientMap,Ne=!!w.alphaMap,fe=w.alphaTest>0,oe=!!w.alphaHash,He=!!w.extensions;let ct=Vs;w.toneMapped&&(ae===null||ae.isXRRenderTarget===!0)&&(ct=n.toneMapping);const Ot={shaderID:ie,shaderType:w.type,shaderName:w.name,vertexShader:De,fragmentShader:Ke,defines:w.defines,customVertexShaderID:Oe,customFragmentShaderID:Z,isRawShaderMaterial:w.isRawShaderMaterial===!0,glslVersion:w.glslVersion,precision:f,batching:se,batchingColor:se&&O._colorsTexture!==null,instancing:X,instancingColor:X&&O.instanceColor!==null,instancingMorph:X&&O.morphTexture!==null,supportsVertexTextures:h,outputColorSpace:ae===null?n.outputColorSpace:ae.isXRRenderTarget===!0?ae.texture.colorSpace:wn,alphaToCoverage:!!w.alphaToCoverage,map:we,matcap:Re,envMap:k,envMapMode:k&&W.mapping,envMapCubeUVHeight:H,aoMap:G,lightMap:j,bumpMap:Y,normalMap:Q,displacementMap:h&&ge,emissiveMap:ue,normalMapObjectSpace:Q&&w.normalMapType===FS,normalMapTangentSpace:Q&&w.normalMapType===ba,metalnessMap:ye,roughnessMap:We,anisotropy:st,anisotropyMap:ee,clearcoat:I,clearcoatMap:Ve,clearcoatNormalMap:ve,clearcoatRoughnessMap:Be,dispersion:A,iridescence:V,iridescenceMap:ze,iridescenceThicknessMap:he,sheen:J,sheenColorMap:Ie,sheenRoughnessMap:Qe,specularMap:Ge,specularColorMap:Ae,specularIntensityMap:ft,transmission:ce,transmissionMap:N,thicknessMap:_e,gradientMap:xe,opaque:w.transparent===!1&&w.blending===ur&&w.alphaToCoverage===!1,alphaMap:Ne,alphaTest:fe,alphaHash:oe,combine:w.combine,mapUv:we&&g(w.map.channel),aoMapUv:G&&g(w.aoMap.channel),lightMapUv:j&&g(w.lightMap.channel),bumpMapUv:Y&&g(w.bumpMap.channel),normalMapUv:Q&&g(w.normalMap.channel),displacementMapUv:ge&&g(w.displacementMap.channel),emissiveMapUv:ue&&g(w.emissiveMap.channel),metalnessMapUv:ye&&g(w.metalnessMap.channel),roughnessMapUv:We&&g(w.roughnessMap.channel),anisotropyMapUv:ee&&g(w.anisotropyMap.channel),clearcoatMapUv:Ve&&g(w.clearcoatMap.channel),clearcoatNormalMapUv:ve&&g(w.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Be&&g(w.clearcoatRoughnessMap.channel),iridescenceMapUv:ze&&g(w.iridescenceMap.channel),iridescenceThicknessMapUv:he&&g(w.iridescenceThicknessMap.channel),sheenColorMapUv:Ie&&g(w.sheenColorMap.channel),sheenRoughnessMapUv:Qe&&g(w.sheenRoughnessMap.channel),specularMapUv:Ge&&g(w.specularMap.channel),specularColorMapUv:Ae&&g(w.specularColorMap.channel),specularIntensityMapUv:ft&&g(w.specularIntensityMap.channel),transmissionMapUv:N&&g(w.transmissionMap.channel),thicknessMapUv:_e&&g(w.thicknessMap.channel),alphaMapUv:Ne&&g(w.alphaMap.channel),vertexTangents:!!U.attributes.tangent&&(Q||st),vertexColors:w.vertexColors,vertexAlphas:w.vertexColors===!0&&!!U.attributes.color&&U.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!U.attributes.uv&&(we||Ne),fog:!!D,useFog:w.fog===!0,fogExp2:!!D&&D.isFogExp2,flatShading:w.flatShading===!0&&w.wireframe===!1,sizeAttenuation:w.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:Te,skinning:O.isSkinnedMesh===!0,morphTargets:U.morphAttributes.position!==void 0,morphNormals:U.morphAttributes.normal!==void 0,morphColors:U.morphAttributes.color!==void 0,morphTargetsCount:me,morphTextureStride:Le,numDirLights:E.directional.length,numPointLights:E.point.length,numSpotLights:E.spot.length,numSpotLightMaps:E.spotLightMap.length,numRectAreaLights:E.rectArea.length,numHemiLights:E.hemi.length,numDirLightShadows:E.directionalShadowMap.length,numPointLightShadows:E.pointShadowMap.length,numSpotLightShadows:E.spotShadowMap.length,numSpotLightShadowsWithMaps:E.numSpotLightShadowsWithMaps,numLightProbes:E.numLightProbes,numClippingPlanes:r.numPlanes,numClipIntersection:r.numIntersection,dithering:w.dithering,shadowMapEnabled:n.shadowMap.enabled&&R.length>0,shadowMapType:n.shadowMap.type,toneMapping:ct,decodeVideoTexture:we&&w.map.isVideoTexture===!0&&rt.getTransfer(w.map.colorSpace)===It,decodeVideoTextureEmissive:ue&&w.emissiveMap.isVideoTexture===!0&&rt.getTransfer(w.emissiveMap.colorSpace)===It,premultipliedAlpha:w.premultipliedAlpha,doubleSided:w.side===ut,flipSided:w.side===dn,useDepthPacking:w.depthPacking>=0,depthPacking:w.depthPacking||0,index0AttributeName:w.index0AttributeName,extensionClipCullDistance:He&&w.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(He&&w.extensions.multiDraw===!0||se)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:w.customProgramCacheKey()};return Ot.vertexUv1s=c.has(1),Ot.vertexUv2s=c.has(2),Ot.vertexUv3s=c.has(3),c.clear(),Ot}function m(w){const E=[];if(w.shaderID?E.push(w.shaderID):(E.push(w.customVertexShaderID),E.push(w.customFragmentShaderID)),w.defines!==void 0)for(const R in w.defines)E.push(R),E.push(w.defines[R]);return w.isRawShaderMaterial===!1&&(v(E,w),y(E,w),E.push(n.outputColorSpace)),E.push(w.customProgramCacheKey),E.join()}function v(w,E){w.push(E.precision),w.push(E.outputColorSpace),w.push(E.envMapMode),w.push(E.envMapCubeUVHeight),w.push(E.mapUv),w.push(E.alphaMapUv),w.push(E.lightMapUv),w.push(E.aoMapUv),w.push(E.bumpMapUv),w.push(E.normalMapUv),w.push(E.displacementMapUv),w.push(E.emissiveMapUv),w.push(E.metalnessMapUv),w.push(E.roughnessMapUv),w.push(E.anisotropyMapUv),w.push(E.clearcoatMapUv),w.push(E.clearcoatNormalMapUv),w.push(E.clearcoatRoughnessMapUv),w.push(E.iridescenceMapUv),w.push(E.iridescenceThicknessMapUv),w.push(E.sheenColorMapUv),w.push(E.sheenRoughnessMapUv),w.push(E.specularMapUv),w.push(E.specularColorMapUv),w.push(E.specularIntensityMapUv),w.push(E.transmissionMapUv),w.push(E.thicknessMapUv),w.push(E.combine),w.push(E.fogExp2),w.push(E.sizeAttenuation),w.push(E.morphTargetsCount),w.push(E.morphAttributeCount),w.push(E.numDirLights),w.push(E.numPointLights),w.push(E.numSpotLights),w.push(E.numSpotLightMaps),w.push(E.numHemiLights),w.push(E.numRectAreaLights),w.push(E.numDirLightShadows),w.push(E.numPointLightShadows),w.push(E.numSpotLightShadows),w.push(E.numSpotLightShadowsWithMaps),w.push(E.numLightProbes),w.push(E.shadowMapType),w.push(E.toneMapping),w.push(E.numClippingPlanes),w.push(E.numClipIntersection),w.push(E.depthPacking)}function y(w,E){o.disableAll(),E.supportsVertexTextures&&o.enable(0),E.instancing&&o.enable(1),E.instancingColor&&o.enable(2),E.instancingMorph&&o.enable(3),E.matcap&&o.enable(4),E.envMap&&o.enable(5),E.normalMapObjectSpace&&o.enable(6),E.normalMapTangentSpace&&o.enable(7),E.clearcoat&&o.enable(8),E.iridescence&&o.enable(9),E.alphaTest&&o.enable(10),E.vertexColors&&o.enable(11),E.vertexAlphas&&o.enable(12),E.vertexUv1s&&o.enable(13),E.vertexUv2s&&o.enable(14),E.vertexUv3s&&o.enable(15),E.vertexTangents&&o.enable(16),E.anisotropy&&o.enable(17),E.alphaHash&&o.enable(18),E.batching&&o.enable(19),E.dispersion&&o.enable(20),E.batchingColor&&o.enable(21),E.gradientMap&&o.enable(22),w.push(o.mask),o.disableAll(),E.fog&&o.enable(0),E.useFog&&o.enable(1),E.flatShading&&o.enable(2),E.logarithmicDepthBuffer&&o.enable(3),E.reversedDepthBuffer&&o.enable(4),E.skinning&&o.enable(5),E.morphTargets&&o.enable(6),E.morphNormals&&o.enable(7),E.morphColors&&o.enable(8),E.premultipliedAlpha&&o.enable(9),E.shadowMapEnabled&&o.enable(10),E.doubleSided&&o.enable(11),E.flipSided&&o.enable(12),E.useDepthPacking&&o.enable(13),E.dithering&&o.enable(14),E.transmission&&o.enable(15),E.sheen&&o.enable(16),E.opaque&&o.enable(17),E.pointsUvs&&o.enable(18),E.decodeVideoTexture&&o.enable(19),E.decodeVideoTextureEmissive&&o.enable(20),E.alphaToCoverage&&o.enable(21),w.push(o.mask)}function b(w){const E=p[w.type];let R;if(E){const L=Zi[E];R=YS.clone(L.uniforms)}else R=w.uniforms;return R}function S(w,E){let R;for(let L=0,O=u.length;L0?i.push(m):f.transparent===!0?s.push(m):t.push(m)}function l(d,h,f,p,g,_){const m=r(d,h,f,p,g,_);f.transmission>0?i.unshift(m):f.transparent===!0?s.unshift(m):t.unshift(m)}function c(d,h){t.length>1&&t.sort(d||ID),i.length>1&&i.sort(h||pv),s.length>1&&s.sort(h||pv)}function u(){for(let d=e,h=n.length;d=a.length?(r=new mv,a.push(r)):r=a[s],r}function t(){n=new WeakMap}return{get:e,dispose:t}}function kD(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new T,color:new de};break;case"SpotLight":t={position:new T,direction:new T,color:new de,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new T,color:new de,distance:0,decay:0};break;case"HemisphereLight":t={direction:new T,skyColor:new de,groundColor:new de};break;case"RectAreaLight":t={color:new de,position:new T,halfWidth:new T,halfHeight:new T};break}return n[e.id]=t,t}}}function DD(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}let OD=0;function FD(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function ND(n){const e=new kD,t=DD(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new T);const s=new T,a=new Ee,r=new Ee;function o(c){let u=0,d=0,h=0;for(let w=0;w<9;w++)i.probe[w].set(0,0,0);let f=0,p=0,g=0,_=0,m=0,v=0,y=0,b=0,S=0,x=0,M=0;c.sort(FD);for(let w=0,E=c.length;w0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=Me.LTC_FLOAT_1,i.rectAreaLTC2=Me.LTC_FLOAT_2):(i.rectAreaLTC1=Me.LTC_HALF_1,i.rectAreaLTC2=Me.LTC_HALF_2)),i.ambient[0]=u,i.ambient[1]=d,i.ambient[2]=h;const C=i.hash;(C.directionalLength!==f||C.pointLength!==p||C.spotLength!==g||C.rectAreaLength!==_||C.hemiLength!==m||C.numDirectionalShadows!==v||C.numPointShadows!==y||C.numSpotShadows!==b||C.numSpotMaps!==S||C.numLightProbes!==M)&&(i.directional.length=f,i.spot.length=g,i.rectArea.length=_,i.point.length=p,i.hemi.length=m,i.directionalShadow.length=v,i.directionalShadowMap.length=v,i.pointShadow.length=y,i.pointShadowMap.length=y,i.spotShadow.length=b,i.spotShadowMap.length=b,i.directionalShadowMatrix.length=v,i.pointShadowMatrix.length=y,i.spotLightMatrix.length=b+S-x,i.spotLightMap.length=S,i.numSpotLightShadowsWithMaps=x,i.numLightProbes=M,C.directionalLength=f,C.pointLength=p,C.spotLength=g,C.rectAreaLength=_,C.hemiLength=m,C.numDirectionalShadows=v,C.numPointShadows=y,C.numSpotShadows=b,C.numSpotMaps=S,C.numLightProbes=M,i.version=OD++)}function l(c,u){let d=0,h=0,f=0,p=0,g=0;const _=u.matrixWorldInverse;for(let m=0,v=c.length;m=r.length?(o=new _v(n),r.push(o)):o=r[a],o}function i(){e=new WeakMap}return{get:t,dispose:i}}const BD=`void main() { +`+me)}else U!==""?console.warn("THREE.WebGLProgram: Program Info Log:",U):(F===""||W==="")&&(ie=!1);ie&&(R.diagnostics={runnable:H,programLog:U,vertexShader:{log:F,prefix:_},fragmentShader:{log:W,prefix:m}})}s.deleteShader(S),s.deleteShader(x),C=new pd(s,g),w=MD(s,g)}let C;this.getUniforms=function(){return C===void 0&&M(this),C};let w;this.getAttributes=function(){return w===void 0&&M(this),w};let E=t.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=s.getProgramParameter(g,_D)),E},this.destroy=function(){i.releaseStatesOfProgram(this),s.deleteProgram(g),this.program=void 0},this.type=t.shaderType,this.name=t.shaderName,this.id=gD++,this.cacheKey=e,this.usedTimes=1,this.program=g,this.vertexShader=S,this.fragmentShader=x,this}let ND=0;class UD{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){const t=e.vertexShader,i=e.fragmentShader,s=this._getShaderStage(t),a=this._getShaderStage(i),r=this._getShaderCacheForMaterial(e);return r.has(s)===!1&&(r.add(s),s.usedTimes++),r.has(a)===!1&&(r.add(a),a.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0&&this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;let i=t.get(e);return i===void 0&&(i=new Set,t.set(e,i)),i}_getShaderStage(e){const t=this.shaderCache;let i=t.get(e);return i===void 0&&(i=new BD(e),t.set(e,i)),i}}class BD{constructor(e){this.id=ND++,this.code=e,this.usedTimes=0}}function zD(n,e,t,i,s,a,r){const o=new af,l=new UD,c=new Set,u=[],d=s.logarithmicDepthBuffer,h=s.vertexTextures;let f=s.precision;const p={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function g(w){return c.add(w),w===0?"uv":`uv${w}`}function _(w,E,R,L,O){const D=L.fog,U=O.geometry,F=w.isMeshStandardMaterial?L.environment:null,W=(w.isMeshStandardMaterial?t:e).get(w.envMap||F),H=W&&W.mapping===Wo?W.image.height:null,ie=p[w.type];w.precision!==null&&(f=s.getMaxPrecision(w.precision),f!==w.precision&&console.warn("THREE.WebGLProgram.getParameters:",w.precision,"not supported, using",f,"instead."));const le=U.morphAttributes.position||U.morphAttributes.normal||U.morphAttributes.color,me=le!==void 0?le.length:0;let Le=0;U.morphAttributes.position!==void 0&&(Le=1),U.morphAttributes.normal!==void 0&&(Le=2),U.morphAttributes.color!==void 0&&(Le=3);let De,Ke,Oe,Z;if(ie){const At=Ji[ie];De=At.vertexShader,Ke=At.fragmentShader}else De=w.vertexShader,Ke=w.fragmentShader,l.update(w),Oe=l.getVertexShaderID(w),Z=l.getFragmentShaderID(w);const re=n.getRenderTarget(),Te=n.state.buffers.depth.getReversed(),X=O.isInstancedMesh===!0,se=O.isBatchedMesh===!0,we=!!w.map,Re=!!w.matcap,k=!!W,G=!!w.aoMap,j=!!w.lightMap,Y=!!w.bumpMap,Q=!!w.normalMap,ge=!!w.displacementMap,ue=!!w.emissiveMap,ye=!!w.metalnessMap,We=!!w.roughnessMap,st=w.anisotropy>0,I=w.clearcoat>0,A=w.dispersion>0,V=w.iridescence>0,J=w.sheen>0,ce=w.transmission>0,ee=st&&!!w.anisotropyMap,Ve=I&&!!w.clearcoatMap,ve=I&&!!w.clearcoatNormalMap,Be=I&&!!w.clearcoatRoughnessMap,ze=V&&!!w.iridescenceMap,he=V&&!!w.iridescenceThicknessMap,Ie=J&&!!w.sheenColorMap,Qe=J&&!!w.sheenRoughnessMap,Ge=!!w.specularMap,Ae=!!w.specularColorMap,ft=!!w.specularIntensityMap,N=ce&&!!w.transmissionMap,_e=ce&&!!w.thicknessMap,xe=!!w.gradientMap,Ne=!!w.alphaMap,fe=w.alphaTest>0,oe=!!w.alphaHash,He=!!w.extensions;let ct=Vs;w.toneMapped&&(re===null||re.isXRRenderTarget===!0)&&(ct=n.toneMapping);const Ot={shaderID:ie,shaderType:w.type,shaderName:w.name,vertexShader:De,fragmentShader:Ke,defines:w.defines,customVertexShaderID:Oe,customFragmentShaderID:Z,isRawShaderMaterial:w.isRawShaderMaterial===!0,glslVersion:w.glslVersion,precision:f,batching:se,batchingColor:se&&O._colorsTexture!==null,instancing:X,instancingColor:X&&O.instanceColor!==null,instancingMorph:X&&O.morphTexture!==null,supportsVertexTextures:h,outputColorSpace:re===null?n.outputColorSpace:re.isXRRenderTarget===!0?re.texture.colorSpace:wn,alphaToCoverage:!!w.alphaToCoverage,map:we,matcap:Re,envMap:k,envMapMode:k&&W.mapping,envMapCubeUVHeight:H,aoMap:G,lightMap:j,bumpMap:Y,normalMap:Q,displacementMap:h&&ge,emissiveMap:ue,normalMapObjectSpace:Q&&w.normalMapType===WS,normalMapTangentSpace:Q&&w.normalMapType===xa,metalnessMap:ye,roughnessMap:We,anisotropy:st,anisotropyMap:ee,clearcoat:I,clearcoatMap:Ve,clearcoatNormalMap:ve,clearcoatRoughnessMap:Be,dispersion:A,iridescence:V,iridescenceMap:ze,iridescenceThicknessMap:he,sheen:J,sheenColorMap:Ie,sheenRoughnessMap:Qe,specularMap:Ge,specularColorMap:Ae,specularIntensityMap:ft,transmission:ce,transmissionMap:N,thicknessMap:_e,gradientMap:xe,opaque:w.transparent===!1&&w.blending===dr&&w.alphaToCoverage===!1,alphaMap:Ne,alphaTest:fe,alphaHash:oe,combine:w.combine,mapUv:we&&g(w.map.channel),aoMapUv:G&&g(w.aoMap.channel),lightMapUv:j&&g(w.lightMap.channel),bumpMapUv:Y&&g(w.bumpMap.channel),normalMapUv:Q&&g(w.normalMap.channel),displacementMapUv:ge&&g(w.displacementMap.channel),emissiveMapUv:ue&&g(w.emissiveMap.channel),metalnessMapUv:ye&&g(w.metalnessMap.channel),roughnessMapUv:We&&g(w.roughnessMap.channel),anisotropyMapUv:ee&&g(w.anisotropyMap.channel),clearcoatMapUv:Ve&&g(w.clearcoatMap.channel),clearcoatNormalMapUv:ve&&g(w.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:Be&&g(w.clearcoatRoughnessMap.channel),iridescenceMapUv:ze&&g(w.iridescenceMap.channel),iridescenceThicknessMapUv:he&&g(w.iridescenceThicknessMap.channel),sheenColorMapUv:Ie&&g(w.sheenColorMap.channel),sheenRoughnessMapUv:Qe&&g(w.sheenRoughnessMap.channel),specularMapUv:Ge&&g(w.specularMap.channel),specularColorMapUv:Ae&&g(w.specularColorMap.channel),specularIntensityMapUv:ft&&g(w.specularIntensityMap.channel),transmissionMapUv:N&&g(w.transmissionMap.channel),thicknessMapUv:_e&&g(w.thicknessMap.channel),alphaMapUv:Ne&&g(w.alphaMap.channel),vertexTangents:!!U.attributes.tangent&&(Q||st),vertexColors:w.vertexColors,vertexAlphas:w.vertexColors===!0&&!!U.attributes.color&&U.attributes.color.itemSize===4,pointsUvs:O.isPoints===!0&&!!U.attributes.uv&&(we||Ne),fog:!!D,useFog:w.fog===!0,fogExp2:!!D&&D.isFogExp2,flatShading:w.flatShading===!0&&w.wireframe===!1,sizeAttenuation:w.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:Te,skinning:O.isSkinnedMesh===!0,morphTargets:U.morphAttributes.position!==void 0,morphNormals:U.morphAttributes.normal!==void 0,morphColors:U.morphAttributes.color!==void 0,morphTargetsCount:me,morphTextureStride:Le,numDirLights:E.directional.length,numPointLights:E.point.length,numSpotLights:E.spot.length,numSpotLightMaps:E.spotLightMap.length,numRectAreaLights:E.rectArea.length,numHemiLights:E.hemi.length,numDirLightShadows:E.directionalShadowMap.length,numPointLightShadows:E.pointShadowMap.length,numSpotLightShadows:E.spotShadowMap.length,numSpotLightShadowsWithMaps:E.numSpotLightShadowsWithMaps,numLightProbes:E.numLightProbes,numClippingPlanes:r.numPlanes,numClipIntersection:r.numIntersection,dithering:w.dithering,shadowMapEnabled:n.shadowMap.enabled&&R.length>0,shadowMapType:n.shadowMap.type,toneMapping:ct,decodeVideoTexture:we&&w.map.isVideoTexture===!0&&ot.getTransfer(w.map.colorSpace)===It,decodeVideoTextureEmissive:ue&&w.emissiveMap.isVideoTexture===!0&&ot.getTransfer(w.emissiveMap.colorSpace)===It,premultipliedAlpha:w.premultipliedAlpha,doubleSided:w.side===ut,flipSided:w.side===dn,useDepthPacking:w.depthPacking>=0,depthPacking:w.depthPacking||0,index0AttributeName:w.index0AttributeName,extensionClipCullDistance:He&&w.extensions.clipCullDistance===!0&&i.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(He&&w.extensions.multiDraw===!0||se)&&i.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:i.has("KHR_parallel_shader_compile"),customProgramCacheKey:w.customProgramCacheKey()};return Ot.vertexUv1s=c.has(1),Ot.vertexUv2s=c.has(2),Ot.vertexUv3s=c.has(3),c.clear(),Ot}function m(w){const E=[];if(w.shaderID?E.push(w.shaderID):(E.push(w.customVertexShaderID),E.push(w.customFragmentShaderID)),w.defines!==void 0)for(const R in w.defines)E.push(R),E.push(w.defines[R]);return w.isRawShaderMaterial===!1&&(v(E,w),y(E,w),E.push(n.outputColorSpace)),E.push(w.customProgramCacheKey),E.join()}function v(w,E){w.push(E.precision),w.push(E.outputColorSpace),w.push(E.envMapMode),w.push(E.envMapCubeUVHeight),w.push(E.mapUv),w.push(E.alphaMapUv),w.push(E.lightMapUv),w.push(E.aoMapUv),w.push(E.bumpMapUv),w.push(E.normalMapUv),w.push(E.displacementMapUv),w.push(E.emissiveMapUv),w.push(E.metalnessMapUv),w.push(E.roughnessMapUv),w.push(E.anisotropyMapUv),w.push(E.clearcoatMapUv),w.push(E.clearcoatNormalMapUv),w.push(E.clearcoatRoughnessMapUv),w.push(E.iridescenceMapUv),w.push(E.iridescenceThicknessMapUv),w.push(E.sheenColorMapUv),w.push(E.sheenRoughnessMapUv),w.push(E.specularMapUv),w.push(E.specularColorMapUv),w.push(E.specularIntensityMapUv),w.push(E.transmissionMapUv),w.push(E.thicknessMapUv),w.push(E.combine),w.push(E.fogExp2),w.push(E.sizeAttenuation),w.push(E.morphTargetsCount),w.push(E.morphAttributeCount),w.push(E.numDirLights),w.push(E.numPointLights),w.push(E.numSpotLights),w.push(E.numSpotLightMaps),w.push(E.numHemiLights),w.push(E.numRectAreaLights),w.push(E.numDirLightShadows),w.push(E.numPointLightShadows),w.push(E.numSpotLightShadows),w.push(E.numSpotLightShadowsWithMaps),w.push(E.numLightProbes),w.push(E.shadowMapType),w.push(E.toneMapping),w.push(E.numClippingPlanes),w.push(E.numClipIntersection),w.push(E.depthPacking)}function y(w,E){o.disableAll(),E.supportsVertexTextures&&o.enable(0),E.instancing&&o.enable(1),E.instancingColor&&o.enable(2),E.instancingMorph&&o.enable(3),E.matcap&&o.enable(4),E.envMap&&o.enable(5),E.normalMapObjectSpace&&o.enable(6),E.normalMapTangentSpace&&o.enable(7),E.clearcoat&&o.enable(8),E.iridescence&&o.enable(9),E.alphaTest&&o.enable(10),E.vertexColors&&o.enable(11),E.vertexAlphas&&o.enable(12),E.vertexUv1s&&o.enable(13),E.vertexUv2s&&o.enable(14),E.vertexUv3s&&o.enable(15),E.vertexTangents&&o.enable(16),E.anisotropy&&o.enable(17),E.alphaHash&&o.enable(18),E.batching&&o.enable(19),E.dispersion&&o.enable(20),E.batchingColor&&o.enable(21),E.gradientMap&&o.enable(22),w.push(o.mask),o.disableAll(),E.fog&&o.enable(0),E.useFog&&o.enable(1),E.flatShading&&o.enable(2),E.logarithmicDepthBuffer&&o.enable(3),E.reversedDepthBuffer&&o.enable(4),E.skinning&&o.enable(5),E.morphTargets&&o.enable(6),E.morphNormals&&o.enable(7),E.morphColors&&o.enable(8),E.premultipliedAlpha&&o.enable(9),E.shadowMapEnabled&&o.enable(10),E.doubleSided&&o.enable(11),E.flipSided&&o.enable(12),E.useDepthPacking&&o.enable(13),E.dithering&&o.enable(14),E.transmission&&o.enable(15),E.sheen&&o.enable(16),E.opaque&&o.enable(17),E.pointsUvs&&o.enable(18),E.decodeVideoTexture&&o.enable(19),E.decodeVideoTextureEmissive&&o.enable(20),E.alphaToCoverage&&o.enable(21),w.push(o.mask)}function b(w){const E=p[w.type];let R;if(E){const L=Ji[E];R=sT.clone(L.uniforms)}else R=w.uniforms;return R}function S(w,E){let R;for(let L=0,O=u.length;L0?i.push(m):f.transparent===!0?s.push(m):t.push(m)}function l(d,h,f,p,g,_){const m=r(d,h,f,p,g,_);f.transmission>0?i.unshift(m):f.transparent===!0?s.unshift(m):t.unshift(m)}function c(d,h){t.length>1&&t.sort(d||VD),i.length>1&&i.sort(h||xv),s.length>1&&s.sort(h||xv)}function u(){for(let d=e,h=n.length;d=a.length?(r=new wv,a.push(r)):r=a[s],r}function t(){n=new WeakMap}return{get:e,dispose:t}}function $D(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={direction:new T,color:new de};break;case"SpotLight":t={position:new T,direction:new T,color:new de,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":t={position:new T,color:new de,distance:0,decay:0};break;case"HemisphereLight":t={direction:new T,skyColor:new de,groundColor:new de};break;case"RectAreaLight":t={color:new de,position:new T,halfWidth:new T,halfHeight:new T};break}return n[e.id]=t,t}}}function WD(){const n={};return{get:function(e){if(n[e.id]!==void 0)return n[e.id];let t;switch(e.type){case"DirectionalLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne};break;case"SpotLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne};break;case"PointLight":t={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new ne,shadowCameraNear:1,shadowCameraFar:1e3};break}return n[e.id]=t,t}}}let XD=0;function KD(n,e){return(e.castShadow?2:0)-(n.castShadow?2:0)+(e.map?1:0)-(n.map?1:0)}function qD(n){const e=new $D,t=WD(),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)i.probe.push(new T);const s=new T,a=new Ee,r=new Ee;function o(c){let u=0,d=0,h=0;for(let w=0;w<9;w++)i.probe[w].set(0,0,0);let f=0,p=0,g=0,_=0,m=0,v=0,y=0,b=0,S=0,x=0,M=0;c.sort(KD);for(let w=0,E=c.length;w0&&(n.has("OES_texture_float_linear")===!0?(i.rectAreaLTC1=Me.LTC_FLOAT_1,i.rectAreaLTC2=Me.LTC_FLOAT_2):(i.rectAreaLTC1=Me.LTC_HALF_1,i.rectAreaLTC2=Me.LTC_HALF_2)),i.ambient[0]=u,i.ambient[1]=d,i.ambient[2]=h;const C=i.hash;(C.directionalLength!==f||C.pointLength!==p||C.spotLength!==g||C.rectAreaLength!==_||C.hemiLength!==m||C.numDirectionalShadows!==v||C.numPointShadows!==y||C.numSpotShadows!==b||C.numSpotMaps!==S||C.numLightProbes!==M)&&(i.directional.length=f,i.spot.length=g,i.rectArea.length=_,i.point.length=p,i.hemi.length=m,i.directionalShadow.length=v,i.directionalShadowMap.length=v,i.pointShadow.length=y,i.pointShadowMap.length=y,i.spotShadow.length=b,i.spotShadowMap.length=b,i.directionalShadowMatrix.length=v,i.pointShadowMatrix.length=y,i.spotLightMatrix.length=b+S-x,i.spotLightMap.length=S,i.numSpotLightShadowsWithMaps=x,i.numLightProbes=M,C.directionalLength=f,C.pointLength=p,C.spotLength=g,C.rectAreaLength=_,C.hemiLength=m,C.numDirectionalShadows=v,C.numPointShadows=y,C.numSpotShadows=b,C.numSpotMaps=S,C.numLightProbes=M,i.version=XD++)}function l(c,u){let d=0,h=0,f=0,p=0,g=0;const _=u.matrixWorldInverse;for(let m=0,v=c.length;m=r.length?(o=new Sv(n),r.push(o)):o=r[a],o}function i(){e=new WeakMap}return{get:t,dispose:i}}const jD=`void main() { gl_Position = vec4( position, 1.0 ); -}`,zD=`uniform sampler2D shadow_pass; +}`,ZD=`uniform sampler2D shadow_pass; uniform vec2 resolution; uniform float radius; #include @@ -3805,12 +3805,12 @@ void main() { squared_mean = squared_mean / samples; float std_dev = sqrt( squared_mean - mean * mean ); gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); -}`;function HD(n,e,t){let i=new $o;const s=new ne,a=new ne,r=new Ye,o=new Ng({depthPacking:OS}),l=new Ug,c={},u=t.maxTextureSize,d={[bs]:dn,[dn]:bs,[ut]:ut},h=new ri({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ne},radius:{value:4}},vertexShader:BD,fragmentShader:zD}),f=h.clone();f.defines.HORIZONTAL_PASS=1;const p=new $e;p.setAttribute("position",new ot(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new Se(p,h),_=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=cg;let m=this.type;this.render=function(x,M,C){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||x.length===0)return;const w=n.getRenderTarget(),E=n.getActiveCubeFace(),R=n.getActiveMipmapLevel(),L=n.state;L.setBlending(Hs),L.buffers.depth.getReversed()===!0?L.buffers.color.setClear(0,0,0,0):L.buffers.color.setClear(1,1,1,1),L.buffers.depth.setTest(!0),L.setScissorTest(!1);const O=m!==hs&&this.type===hs,D=m===hs&&this.type!==hs;for(let U=0,F=x.length;Uu||s.y>u)&&(s.x>u&&(a.x=Math.floor(u/ie.x),s.x=a.x*ie.x,H.mapSize.x=a.x),s.y>u&&(a.y=Math.floor(u/ie.y),s.y=a.y*ie.y,H.mapSize.y=a.y)),H.map===null||O===!0||D===!0){const me=this.type!==hs?{minFilter:hn,magFilter:hn}:{};H.map!==null&&H.map.dispose(),H.map=new ws(s.x,s.y,me),H.map.texture.name=W.name+".shadowMap",H.camera.updateProjectionMatrix()}n.setRenderTarget(H.map),n.clear();const le=H.getViewportCount();for(let me=0;me0||M.map&&M.alphaTest>0||M.alphaToCoverage===!0){const L=E.uuid,O=M.uuid;let D=c[L];D===void 0&&(D={},c[L]=D);let U=D[O];U===void 0&&(U=E.clone(),D[O]=U,M.addEventListener("dispose",S)),E=U}if(E.visible=M.visible,E.wireframe=M.wireframe,w===hs?E.side=M.shadowSide!==null?M.shadowSide:M.side:E.side=M.shadowSide!==null?M.shadowSide:d[M.side],E.alphaMap=M.alphaMap,E.alphaTest=M.alphaToCoverage===!0?.5:M.alphaTest,E.map=M.map,E.clipShadows=M.clipShadows,E.clippingPlanes=M.clippingPlanes,E.clipIntersection=M.clipIntersection,E.displacementMap=M.displacementMap,E.displacementScale=M.displacementScale,E.displacementBias=M.displacementBias,E.wireframeLinewidth=M.wireframeLinewidth,E.linewidth=M.linewidth,C.isPointLight===!0&&E.isMeshDistanceMaterial===!0){const L=n.properties.get(E);L.light=C}return E}function b(x,M,C,w,E){if(x.visible===!1)return;if(x.layers.test(M.layers)&&(x.isMesh||x.isLine||x.isPoints)&&(x.castShadow||x.receiveShadow&&E===hs)&&(!x.frustumCulled||i.intersectsObject(x))){x.modelViewMatrix.multiplyMatrices(C.matrixWorldInverse,x.matrixWorld);const O=e.update(x),D=x.material;if(Array.isArray(D)){const U=O.groups;for(let F=0,W=U.length;F=1):H.indexOf("OpenGL ES")!==-1&&(W=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),F=W>=2);let ie=null,le={};const me=n.getParameter(n.SCISSOR_BOX),Le=n.getParameter(n.VIEWPORT),De=new Ye().fromArray(me),Ke=new Ye().fromArray(Le);function Oe(N,_e,xe,Ne){const fe=new Uint8Array(4),oe=n.createTexture();n.bindTexture(N,oe),n.texParameteri(N,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(N,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let He=0;He"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new ne,u=new WeakMap;let d;const h=new WeakMap;let f=!1;try{f=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function p(I,A){return f?new OffscreenCanvas(I,A):rc("canvas")}function g(I,A,V){let J=1;const ce=st(I);if((ce.width>V||ce.height>V)&&(J=V/Math.max(ce.width,ce.height)),J<1)if(typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&I instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&I instanceof ImageBitmap||typeof VideoFrame<"u"&&I instanceof VideoFrame){const ee=Math.floor(J*ce.width),Ve=Math.floor(J*ce.height);d===void 0&&(d=p(ee,Ve));const ve=A?p(ee,Ve):d;return ve.width=ee,ve.height=Ve,ve.getContext("2d").drawImage(I,0,0,ee,Ve),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+ce.width+"x"+ce.height+") to ("+ee+"x"+Ve+")."),ve}else return"data"in I&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+ce.width+"x"+ce.height+")."),I;return I}function _(I){return I.generateMipmaps}function m(I){n.generateMipmap(I)}function v(I){return I.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:I.isWebGL3DRenderTarget?n.TEXTURE_3D:I.isWebGLArrayRenderTarget||I.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function y(I,A,V,J,ce=!1){if(I!==null){if(n[I]!==void 0)return n[I];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+I+"'")}let ee=A;if(A===n.RED&&(V===n.FLOAT&&(ee=n.R32F),V===n.HALF_FLOAT&&(ee=n.R16F),V===n.UNSIGNED_BYTE&&(ee=n.R8)),A===n.RED_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.R8UI),V===n.UNSIGNED_SHORT&&(ee=n.R16UI),V===n.UNSIGNED_INT&&(ee=n.R32UI),V===n.BYTE&&(ee=n.R8I),V===n.SHORT&&(ee=n.R16I),V===n.INT&&(ee=n.R32I)),A===n.RG&&(V===n.FLOAT&&(ee=n.RG32F),V===n.HALF_FLOAT&&(ee=n.RG16F),V===n.UNSIGNED_BYTE&&(ee=n.RG8)),A===n.RG_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RG8UI),V===n.UNSIGNED_SHORT&&(ee=n.RG16UI),V===n.UNSIGNED_INT&&(ee=n.RG32UI),V===n.BYTE&&(ee=n.RG8I),V===n.SHORT&&(ee=n.RG16I),V===n.INT&&(ee=n.RG32I)),A===n.RGB_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGB8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGB16UI),V===n.UNSIGNED_INT&&(ee=n.RGB32UI),V===n.BYTE&&(ee=n.RGB8I),V===n.SHORT&&(ee=n.RGB16I),V===n.INT&&(ee=n.RGB32I)),A===n.RGBA_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGBA8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGBA16UI),V===n.UNSIGNED_INT&&(ee=n.RGBA32UI),V===n.BYTE&&(ee=n.RGBA8I),V===n.SHORT&&(ee=n.RGBA16I),V===n.INT&&(ee=n.RGBA32I)),A===n.RGB&&(V===n.UNSIGNED_INT_5_9_9_9_REV&&(ee=n.RGB9_E5),V===n.UNSIGNED_INT_10F_11F_11F_REV&&(ee=n.R11F_G11F_B10F)),A===n.RGBA){const Ve=ce?sc:rt.getTransfer(J);V===n.FLOAT&&(ee=n.RGBA32F),V===n.HALF_FLOAT&&(ee=n.RGBA16F),V===n.UNSIGNED_BYTE&&(ee=Ve===It?n.SRGB8_ALPHA8:n.RGBA8),V===n.UNSIGNED_SHORT_4_4_4_4&&(ee=n.RGBA4),V===n.UNSIGNED_SHORT_5_5_5_1&&(ee=n.RGB5_A1)}return(ee===n.R16F||ee===n.R32F||ee===n.RG16F||ee===n.RG32F||ee===n.RGBA16F||ee===n.RGBA32F)&&e.get("EXT_color_buffer_float"),ee}function b(I,A){let V;return I?A===null||A===Ks||A===Po?V=n.DEPTH24_STENCIL8:A===Mn?V=n.DEPTH32F_STENCIL8:A===Ro&&(V=n.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):A===null||A===Ks||A===Po?V=n.DEPTH_COMPONENT24:A===Mn?V=n.DEPTH_COMPONENT32F:A===Ro&&(V=n.DEPTH_COMPONENT16),V}function S(I,A){return _(I)===!0||I.isFramebufferTexture&&I.minFilter!==hn&&I.minFilter!==Gt?Math.log2(Math.max(A.width,A.height))+1:I.mipmaps!==void 0&&I.mipmaps.length>0?I.mipmaps.length:I.isCompressedTexture&&Array.isArray(I.image)?A.mipmaps.length:1}function x(I){const A=I.target;A.removeEventListener("dispose",x),C(A),A.isVideoTexture&&u.delete(A)}function M(I){const A=I.target;A.removeEventListener("dispose",M),E(A)}function C(I){const A=i.get(I);if(A.__webglInit===void 0)return;const V=I.source,J=h.get(V);if(J){const ce=J[A.__cacheKey];ce.usedTimes--,ce.usedTimes===0&&w(I),Object.keys(J).length===0&&h.delete(V)}i.remove(I)}function w(I){const A=i.get(I);n.deleteTexture(A.__webglTexture);const V=I.source,J=h.get(V);delete J[A.__cacheKey],r.memory.textures--}function E(I){const A=i.get(I);if(I.depthTexture&&(I.depthTexture.dispose(),i.remove(I.depthTexture)),I.isWebGLCubeRenderTarget)for(let J=0;J<6;J++){if(Array.isArray(A.__webglFramebuffer[J]))for(let ce=0;ce=s.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+I+" texture units while this GPU supports only "+s.maxTextures),R+=1,I}function D(I){const A=[];return A.push(I.wrapS),A.push(I.wrapT),A.push(I.wrapR||0),A.push(I.magFilter),A.push(I.minFilter),A.push(I.anisotropy),A.push(I.internalFormat),A.push(I.format),A.push(I.type),A.push(I.generateMipmaps),A.push(I.premultiplyAlpha),A.push(I.flipY),A.push(I.unpackAlignment),A.push(I.colorSpace),A.join()}function U(I,A){const V=i.get(I);if(I.isVideoTexture&&ye(I),I.isRenderTargetTexture===!1&&I.isExternalTexture!==!0&&I.version>0&&V.__version!==I.version){const J=I.image;if(J===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(J.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{Z(V,I,A);return}}else I.isExternalTexture&&(V.__webglTexture=I.sourceTexture?I.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,V.__webglTexture,n.TEXTURE0+A)}function F(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_2D_ARRAY,V.__webglTexture,n.TEXTURE0+A)}function W(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_3D,V.__webglTexture,n.TEXTURE0+A)}function H(I,A){const V=i.get(I);if(I.version>0&&V.__version!==I.version){ae(V,I,A);return}t.bindTexture(n.TEXTURE_CUBE_MAP,V.__webglTexture,n.TEXTURE0+A)}const ie={[xs]:n.REPEAT,[Wn]:n.CLAMP_TO_EDGE,[Ao]:n.MIRRORED_REPEAT},le={[hn]:n.NEAREST,[Vh]:n.NEAREST_MIPMAP_NEAREST,[er]:n.NEAREST_MIPMAP_LINEAR,[Gt]:n.LINEAR,[ho]:n.LINEAR_MIPMAP_NEAREST,[Ii]:n.LINEAR_MIPMAP_LINEAR},me={[NS]:n.NEVER,[GS]:n.ALWAYS,[US]:n.LESS,[wg]:n.LEQUAL,[BS]:n.EQUAL,[VS]:n.GEQUAL,[zS]:n.GREATER,[HS]:n.NOTEQUAL};function Le(I,A){if(A.type===Mn&&e.has("OES_texture_float_linear")===!1&&(A.magFilter===Gt||A.magFilter===ho||A.magFilter===er||A.magFilter===Ii||A.minFilter===Gt||A.minFilter===ho||A.minFilter===er||A.minFilter===Ii)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(I,n.TEXTURE_WRAP_S,ie[A.wrapS]),n.texParameteri(I,n.TEXTURE_WRAP_T,ie[A.wrapT]),(I===n.TEXTURE_3D||I===n.TEXTURE_2D_ARRAY)&&n.texParameteri(I,n.TEXTURE_WRAP_R,ie[A.wrapR]),n.texParameteri(I,n.TEXTURE_MAG_FILTER,le[A.magFilter]),n.texParameteri(I,n.TEXTURE_MIN_FILTER,le[A.minFilter]),A.compareFunction&&(n.texParameteri(I,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(I,n.TEXTURE_COMPARE_FUNC,me[A.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(A.magFilter===hn||A.minFilter!==er&&A.minFilter!==Ii||A.type===Mn&&e.has("OES_texture_float_linear")===!1)return;if(A.anisotropy>1||i.get(A).__currentAnisotropy){const V=e.get("EXT_texture_filter_anisotropic");n.texParameterf(I,V.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(A.anisotropy,s.getMaxAnisotropy())),i.get(A).__currentAnisotropy=A.anisotropy}}}function De(I,A){let V=!1;I.__webglInit===void 0&&(I.__webglInit=!0,A.addEventListener("dispose",x));const J=A.source;let ce=h.get(J);ce===void 0&&(ce={},h.set(J,ce));const ee=D(A);if(ee!==I.__cacheKey){ce[ee]===void 0&&(ce[ee]={texture:n.createTexture(),usedTimes:0},r.memory.textures++,V=!0),ce[ee].usedTimes++;const Ve=ce[I.__cacheKey];Ve!==void 0&&(ce[I.__cacheKey].usedTimes--,Ve.usedTimes===0&&w(A)),I.__cacheKey=ee,I.__webglTexture=ce[ee].texture}return V}function Ke(I,A,V){return Math.floor(Math.floor(I/V)/A)}function Oe(I,A,V,J){const ee=I.updateRanges;if(ee.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,A.width,A.height,V,J,A.data);else{ee.sort((he,Ie)=>he.start-Ie.start);let Ve=0;for(let he=1;he0){N&&_e&&t.texStorage2D(n.TEXTURE_2D,Ne,Ge,ft[0].width,ft[0].height);for(let fe=0,oe=ft.length;fe0){const He=t_(Ae.width,Ae.height,A.format,A.type);for(const ct of A.layerUpdates){const Ot=Ae.data.subarray(ct*He/Ae.data.BYTES_PER_ELEMENT,(ct+1)*He/Ae.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,fe,0,0,ct,Ae.width,Ae.height,1,Ie,Ot)}A.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,fe,0,0,0,Ae.width,Ae.height,he.depth,Ie,Ae.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,fe,Ge,Ae.width,Ae.height,he.depth,0,Ae.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else N?xe&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,fe,0,0,0,Ae.width,Ae.height,he.depth,Ie,Qe,Ae.data):t.texImage3D(n.TEXTURE_2D_ARRAY,fe,Ge,Ae.width,Ae.height,he.depth,0,Ie,Qe,Ae.data)}else{N&&_e&&t.texStorage2D(n.TEXTURE_2D,Ne,Ge,ft[0].width,ft[0].height);for(let fe=0,oe=ft.length;fe0){const fe=t_(he.width,he.height,A.format,A.type);for(const oe of A.layerUpdates){const He=he.data.subarray(oe*fe/he.data.BYTES_PER_ELEMENT,(oe+1)*fe/he.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,oe,he.width,he.height,1,Ie,Qe,He)}A.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,he.width,he.height,he.depth,Ie,Qe,he.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,Ge,he.width,he.height,he.depth,0,Ie,Qe,he.data);else if(A.isData3DTexture)N?(_e&&t.texStorage3D(n.TEXTURE_3D,Ne,Ge,he.width,he.height,he.depth),xe&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,he.width,he.height,he.depth,Ie,Qe,he.data)):t.texImage3D(n.TEXTURE_3D,0,Ge,he.width,he.height,he.depth,0,Ie,Qe,he.data);else if(A.isFramebufferTexture){if(_e)if(N)t.texStorage2D(n.TEXTURE_2D,Ne,Ge,he.width,he.height);else{let fe=he.width,oe=he.height;for(let He=0;He>=1,oe>>=1}}else if(ft.length>0){if(N&&_e){const fe=st(ft[0]);t.texStorage2D(n.TEXTURE_2D,Ne,Ge,fe.width,fe.height)}for(let fe=0,oe=ft.length;fe0&&Ne++;const oe=st(Ie[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,Ne,ft,oe.width,oe.height)}for(let oe=0;oe<6;oe++)if(he){N?xe&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+oe,0,0,0,Ie[oe].width,Ie[oe].height,Ge,Ae,Ie[oe].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+oe,0,ft,Ie[oe].width,Ie[oe].height,0,Ge,Ae,Ie[oe].data);for(let He=0;He>ee),Qe=Math.max(1,A.height>>ee);ce===n.TEXTURE_3D||ce===n.TEXTURE_2D_ARRAY?t.texImage3D(ce,ee,Be,Ie,Qe,A.depth,0,Ve,ve,null):t.texImage2D(ce,ee,Be,Ie,Qe,0,Ve,ve,null)}t.bindFramebuffer(n.FRAMEBUFFER,I),ue(A)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,J,ce,he.__webglTexture,0,ge(A)):(ce===n.TEXTURE_2D||ce>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&ce<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,J,ce,he.__webglTexture,ee),t.bindFramebuffer(n.FRAMEBUFFER,null)}function X(I,A,V){if(n.bindRenderbuffer(n.RENDERBUFFER,I),A.depthBuffer){const J=A.depthTexture,ce=J&&J.isDepthTexture?J.type:null,ee=b(A.stencilBuffer,ce),Ve=A.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ve=ge(A);ue(A)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,ve,ee,A.width,A.height):V?n.renderbufferStorageMultisample(n.RENDERBUFFER,ve,ee,A.width,A.height):n.renderbufferStorage(n.RENDERBUFFER,ee,A.width,A.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ve,n.RENDERBUFFER,I)}else{const J=A.textures;for(let ce=0;ce{delete A.__boundDepthTexture,delete A.__depthDisposeCallback,J.removeEventListener("dispose",ce)};J.addEventListener("dispose",ce),A.__depthDisposeCallback=ce}A.__boundDepthTexture=J}if(I.depthTexture&&!A.__autoAllocateDepthBuffer){if(V)throw new Error("target.depthTexture not supported in Cube render targets");const J=I.texture.mipmaps;J&&J.length>0?se(A.__webglFramebuffer[0],I):se(A.__webglFramebuffer,I)}else if(V){A.__webglDepthbuffer=[];for(let J=0;J<6;J++)if(t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[J]),A.__webglDepthbuffer[J]===void 0)A.__webglDepthbuffer[J]=n.createRenderbuffer(),X(A.__webglDepthbuffer[J],I,!1);else{const ce=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer[J];n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,ce,n.RENDERBUFFER,ee)}}else{const J=I.texture.mipmaps;if(J&&J.length>0?t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer),A.__webglDepthbuffer===void 0)A.__webglDepthbuffer=n.createRenderbuffer(),X(A.__webglDepthbuffer,I,!1);else{const ce=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,ce,n.RENDERBUFFER,ee)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Re(I,A,V){const J=i.get(I);A!==void 0&&Te(J.__webglFramebuffer,I,I.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),V!==void 0&&we(I)}function k(I){const A=I.texture,V=i.get(I),J=i.get(A);I.addEventListener("dispose",M);const ce=I.textures,ee=I.isWebGLCubeRenderTarget===!0,Ve=ce.length>1;if(Ve||(J.__webglTexture===void 0&&(J.__webglTexture=n.createTexture()),J.__version=A.version,r.memory.textures++),ee){V.__webglFramebuffer=[];for(let ve=0;ve<6;ve++)if(A.mipmaps&&A.mipmaps.length>0){V.__webglFramebuffer[ve]=[];for(let Be=0;Be0){V.__webglFramebuffer=[];for(let ve=0;ve0&&ue(I)===!1){V.__webglMultisampledFramebuffer=n.createFramebuffer(),V.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,V.__webglMultisampledFramebuffer);for(let ve=0;ve0)for(let Be=0;Be0)for(let Be=0;Be0){if(ue(I)===!1){const A=I.textures,V=I.width,J=I.height;let ce=n.COLOR_BUFFER_BIT;const ee=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Ve=i.get(I),ve=A.length>1;if(ve)for(let ze=0;ze0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,Ve.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,Ve.__webglFramebuffer);for(let ze=0;ze0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&A.__useRenderToTexture!==!1}function ye(I){const A=r.render.frame;u.get(I)!==A&&(u.set(I,A),I.update())}function We(I,A){const V=I.colorSpace,J=I.format,ce=I.type;return I.isCompressedTexture===!0||I.isVideoTexture===!0||V!==wn&&V!==Bs&&(rt.getTransfer(V)===It?(J!==Xn||ce!==ns)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",V)),A}function st(I){return typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement?(c.width=I.naturalWidth||I.width,c.height=I.naturalHeight||I.height):typeof VideoFrame<"u"&&I instanceof VideoFrame?(c.width=I.displayWidth,c.height=I.displayHeight):(c.width=I.width,c.height=I.height),c}this.allocateTextureUnit=O,this.resetTextureUnits=L,this.setTexture2D=U,this.setTexture2DArray=F,this.setTexture3D=W,this.setTextureCube=H,this.rebindTextures=Re,this.setupRenderTarget=k,this.updateRenderTargetMipmap=G,this.updateMultisampleRenderTarget=Q,this.setupDepthRenderbuffer=we,this.setupFrameBufferTexture=Te,this.useMultisampledRTT=ue}function VT(n,e){function t(i,s=Bs){let a;const r=rt.getTransfer(s);if(i===ns)return n.UNSIGNED_BYTE;if(i===$h)return n.UNSIGNED_SHORT_4_4_4_4;if(i===Wh)return n.UNSIGNED_SHORT_5_5_5_1;if(i===mg)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===_g)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===fg)return n.BYTE;if(i===pg)return n.SHORT;if(i===Ro)return n.UNSIGNED_SHORT;if(i===Gh)return n.INT;if(i===Ks)return n.UNSIGNED_INT;if(i===Mn)return n.FLOAT;if(i===ms)return n.HALF_FLOAT;if(i===gg)return n.ALPHA;if(i===yg)return n.RGB;if(i===Xn)return n.RGBA;if(i===Io)return n.DEPTH_COMPONENT;if(i===Lo)return n.DEPTH_STENCIL;if(i===Xh)return n.RED;if(i===wc)return n.RED_INTEGER;if(i===vg)return n.RG;if(i===Kh)return n.RG_INTEGER;if(i===qh)return n.RGBA_INTEGER;if(i===Hl||i===Vl||i===Gl||i===$l)if(r===It)if(a=e.get("WEBGL_compressed_texture_s3tc_srgb"),a!==null){if(i===Hl)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Vl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Gl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===$l)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(a=e.get("WEBGL_compressed_texture_s3tc"),a!==null){if(i===Hl)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Vl)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Gl)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===$l)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===zd||i===Hd||i===Vd||i===Gd)if(a=e.get("WEBGL_compressed_texture_pvrtc"),a!==null){if(i===zd)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===Hd)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===Vd)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===Gd)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===$d||i===Wd||i===Xd)if(a=e.get("WEBGL_compressed_texture_etc"),a!==null){if(i===$d||i===Wd)return r===It?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(i===Xd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===Kd||i===qd||i===Yd||i===jd||i===Zd||i===Jd||i===Qd||i===eh||i===th||i===nh||i===ih||i===sh||i===ah||i===rh)if(a=e.get("WEBGL_compressed_texture_astc"),a!==null){if(i===Kd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===qd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===Yd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===jd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===Zd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===Jd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===Qd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===eh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===th)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===nh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===ih)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===sh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===ah)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===rh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===oh||i===lh||i===ch)if(a=e.get("EXT_texture_compression_bptc"),a!==null){if(i===oh)return r===It?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===lh)return a.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===ch)return a.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===uh||i===dh||i===hh||i===fh)if(a=e.get("EXT_texture_compression_rgtc"),a!==null){if(i===uh)return a.COMPRESSED_RED_RGTC1_EXT;if(i===dh)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===hh)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===fh)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===Po?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}const WD=` +}`;function JD(n,e,t){let i=new Ko;const s=new ne,a=new ne,r=new Ye,o=new $g({depthPacking:$S}),l=new Wg,c={},u=t.maxTextureSize,d={[bs]:dn,[dn]:bs,[ut]:ut},h=new ri({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new ne},radius:{value:4}},vertexShader:jD,fragmentShader:ZD}),f=h.clone();f.defines.HORIZONTAL_PASS=1;const p=new $e;p.setAttribute("position",new lt(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new Se(p,h),_=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=_g;let m=this.type;this.render=function(x,M,C){if(_.enabled===!1||_.autoUpdate===!1&&_.needsUpdate===!1||x.length===0)return;const w=n.getRenderTarget(),E=n.getActiveCubeFace(),R=n.getActiveMipmapLevel(),L=n.state;L.setBlending(Hs),L.buffers.depth.getReversed()===!0?L.buffers.color.setClear(0,0,0,0):L.buffers.color.setClear(1,1,1,1),L.buffers.depth.setTest(!0),L.setScissorTest(!1);const O=m!==hs&&this.type===hs,D=m===hs&&this.type!==hs;for(let U=0,F=x.length;Uu||s.y>u)&&(s.x>u&&(a.x=Math.floor(u/ie.x),s.x=a.x*ie.x,H.mapSize.x=a.x),s.y>u&&(a.y=Math.floor(u/ie.y),s.y=a.y*ie.y,H.mapSize.y=a.y)),H.map===null||O===!0||D===!0){const me=this.type!==hs?{minFilter:hn,magFilter:hn}:{};H.map!==null&&H.map.dispose(),H.map=new ws(s.x,s.y,me),H.map.texture.name=W.name+".shadowMap",H.camera.updateProjectionMatrix()}n.setRenderTarget(H.map),n.clear();const le=H.getViewportCount();for(let me=0;me0||M.map&&M.alphaTest>0||M.alphaToCoverage===!0){const L=E.uuid,O=M.uuid;let D=c[L];D===void 0&&(D={},c[L]=D);let U=D[O];U===void 0&&(U=E.clone(),D[O]=U,M.addEventListener("dispose",S)),E=U}if(E.visible=M.visible,E.wireframe=M.wireframe,w===hs?E.side=M.shadowSide!==null?M.shadowSide:M.side:E.side=M.shadowSide!==null?M.shadowSide:d[M.side],E.alphaMap=M.alphaMap,E.alphaTest=M.alphaToCoverage===!0?.5:M.alphaTest,E.map=M.map,E.clipShadows=M.clipShadows,E.clippingPlanes=M.clippingPlanes,E.clipIntersection=M.clipIntersection,E.displacementMap=M.displacementMap,E.displacementScale=M.displacementScale,E.displacementBias=M.displacementBias,E.wireframeLinewidth=M.wireframeLinewidth,E.linewidth=M.linewidth,C.isPointLight===!0&&E.isMeshDistanceMaterial===!0){const L=n.properties.get(E);L.light=C}return E}function b(x,M,C,w,E){if(x.visible===!1)return;if(x.layers.test(M.layers)&&(x.isMesh||x.isLine||x.isPoints)&&(x.castShadow||x.receiveShadow&&E===hs)&&(!x.frustumCulled||i.intersectsObject(x))){x.modelViewMatrix.multiplyMatrices(C.matrixWorldInverse,x.matrixWorld);const O=e.update(x),D=x.material;if(Array.isArray(D)){const U=O.groups;for(let F=0,W=U.length;F=1):H.indexOf("OpenGL ES")!==-1&&(W=parseFloat(/^OpenGL ES (\d)/.exec(H)[1]),F=W>=2);let ie=null,le={};const me=n.getParameter(n.SCISSOR_BOX),Le=n.getParameter(n.VIEWPORT),De=new Ye().fromArray(me),Ke=new Ye().fromArray(Le);function Oe(N,_e,xe,Ne){const fe=new Uint8Array(4),oe=n.createTexture();n.bindTexture(N,oe),n.texParameteri(N,n.TEXTURE_MIN_FILTER,n.NEAREST),n.texParameteri(N,n.TEXTURE_MAG_FILTER,n.NEAREST);for(let He=0;He"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new ne,u=new WeakMap;let d;const h=new WeakMap;let f=!1;try{f=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function p(I,A){return f?new OffscreenCanvas(I,A):uc("canvas")}function g(I,A,V){let J=1;const ce=st(I);if((ce.width>V||ce.height>V)&&(J=V/Math.max(ce.width,ce.height)),J<1)if(typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&I instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&I instanceof ImageBitmap||typeof VideoFrame<"u"&&I instanceof VideoFrame){const ee=Math.floor(J*ce.width),Ve=Math.floor(J*ce.height);d===void 0&&(d=p(ee,Ve));const ve=A?p(ee,Ve):d;return ve.width=ee,ve.height=Ve,ve.getContext("2d").drawImage(I,0,0,ee,Ve),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+ce.width+"x"+ce.height+") to ("+ee+"x"+Ve+")."),ve}else return"data"in I&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+ce.width+"x"+ce.height+")."),I;return I}function _(I){return I.generateMipmaps}function m(I){n.generateMipmap(I)}function v(I){return I.isWebGLCubeRenderTarget?n.TEXTURE_CUBE_MAP:I.isWebGL3DRenderTarget?n.TEXTURE_3D:I.isWebGLArrayRenderTarget||I.isCompressedArrayTexture?n.TEXTURE_2D_ARRAY:n.TEXTURE_2D}function y(I,A,V,J,ce=!1){if(I!==null){if(n[I]!==void 0)return n[I];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+I+"'")}let ee=A;if(A===n.RED&&(V===n.FLOAT&&(ee=n.R32F),V===n.HALF_FLOAT&&(ee=n.R16F),V===n.UNSIGNED_BYTE&&(ee=n.R8)),A===n.RED_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.R8UI),V===n.UNSIGNED_SHORT&&(ee=n.R16UI),V===n.UNSIGNED_INT&&(ee=n.R32UI),V===n.BYTE&&(ee=n.R8I),V===n.SHORT&&(ee=n.R16I),V===n.INT&&(ee=n.R32I)),A===n.RG&&(V===n.FLOAT&&(ee=n.RG32F),V===n.HALF_FLOAT&&(ee=n.RG16F),V===n.UNSIGNED_BYTE&&(ee=n.RG8)),A===n.RG_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RG8UI),V===n.UNSIGNED_SHORT&&(ee=n.RG16UI),V===n.UNSIGNED_INT&&(ee=n.RG32UI),V===n.BYTE&&(ee=n.RG8I),V===n.SHORT&&(ee=n.RG16I),V===n.INT&&(ee=n.RG32I)),A===n.RGB_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGB8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGB16UI),V===n.UNSIGNED_INT&&(ee=n.RGB32UI),V===n.BYTE&&(ee=n.RGB8I),V===n.SHORT&&(ee=n.RGB16I),V===n.INT&&(ee=n.RGB32I)),A===n.RGBA_INTEGER&&(V===n.UNSIGNED_BYTE&&(ee=n.RGBA8UI),V===n.UNSIGNED_SHORT&&(ee=n.RGBA16UI),V===n.UNSIGNED_INT&&(ee=n.RGBA32UI),V===n.BYTE&&(ee=n.RGBA8I),V===n.SHORT&&(ee=n.RGBA16I),V===n.INT&&(ee=n.RGBA32I)),A===n.RGB&&(V===n.UNSIGNED_INT_5_9_9_9_REV&&(ee=n.RGB9_E5),V===n.UNSIGNED_INT_10F_11F_11F_REV&&(ee=n.R11F_G11F_B10F)),A===n.RGBA){const Ve=ce?lc:ot.getTransfer(J);V===n.FLOAT&&(ee=n.RGBA32F),V===n.HALF_FLOAT&&(ee=n.RGBA16F),V===n.UNSIGNED_BYTE&&(ee=Ve===It?n.SRGB8_ALPHA8:n.RGBA8),V===n.UNSIGNED_SHORT_4_4_4_4&&(ee=n.RGBA4),V===n.UNSIGNED_SHORT_5_5_5_1&&(ee=n.RGB5_A1)}return(ee===n.R16F||ee===n.R32F||ee===n.RG16F||ee===n.RG32F||ee===n.RGBA16F||ee===n.RGBA32F)&&e.get("EXT_color_buffer_float"),ee}function b(I,A){let V;return I?A===null||A===Ks||A===ko?V=n.DEPTH24_STENCIL8:A===Mn?V=n.DEPTH32F_STENCIL8:A===Lo&&(V=n.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):A===null||A===Ks||A===ko?V=n.DEPTH_COMPONENT24:A===Mn?V=n.DEPTH_COMPONENT32F:A===Lo&&(V=n.DEPTH_COMPONENT16),V}function S(I,A){return _(I)===!0||I.isFramebufferTexture&&I.minFilter!==hn&&I.minFilter!==Gt?Math.log2(Math.max(A.width,A.height))+1:I.mipmaps!==void 0&&I.mipmaps.length>0?I.mipmaps.length:I.isCompressedTexture&&Array.isArray(I.image)?A.mipmaps.length:1}function x(I){const A=I.target;A.removeEventListener("dispose",x),C(A),A.isVideoTexture&&u.delete(A)}function M(I){const A=I.target;A.removeEventListener("dispose",M),E(A)}function C(I){const A=i.get(I);if(A.__webglInit===void 0)return;const V=I.source,J=h.get(V);if(J){const ce=J[A.__cacheKey];ce.usedTimes--,ce.usedTimes===0&&w(I),Object.keys(J).length===0&&h.delete(V)}i.remove(I)}function w(I){const A=i.get(I);n.deleteTexture(A.__webglTexture);const V=I.source,J=h.get(V);delete J[A.__cacheKey],r.memory.textures--}function E(I){const A=i.get(I);if(I.depthTexture&&(I.depthTexture.dispose(),i.remove(I.depthTexture)),I.isWebGLCubeRenderTarget)for(let J=0;J<6;J++){if(Array.isArray(A.__webglFramebuffer[J]))for(let ce=0;ce=s.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+I+" texture units while this GPU supports only "+s.maxTextures),R+=1,I}function D(I){const A=[];return A.push(I.wrapS),A.push(I.wrapT),A.push(I.wrapR||0),A.push(I.magFilter),A.push(I.minFilter),A.push(I.anisotropy),A.push(I.internalFormat),A.push(I.format),A.push(I.type),A.push(I.generateMipmaps),A.push(I.premultiplyAlpha),A.push(I.flipY),A.push(I.unpackAlignment),A.push(I.colorSpace),A.join()}function U(I,A){const V=i.get(I);if(I.isVideoTexture&&ye(I),I.isRenderTargetTexture===!1&&I.isExternalTexture!==!0&&I.version>0&&V.__version!==I.version){const J=I.image;if(J===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(J.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{Z(V,I,A);return}}else I.isExternalTexture&&(V.__webglTexture=I.sourceTexture?I.sourceTexture:null);t.bindTexture(n.TEXTURE_2D,V.__webglTexture,n.TEXTURE0+A)}function F(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_2D_ARRAY,V.__webglTexture,n.TEXTURE0+A)}function W(I,A){const V=i.get(I);if(I.isRenderTargetTexture===!1&&I.version>0&&V.__version!==I.version){Z(V,I,A);return}t.bindTexture(n.TEXTURE_3D,V.__webglTexture,n.TEXTURE0+A)}function H(I,A){const V=i.get(I);if(I.version>0&&V.__version!==I.version){re(V,I,A);return}t.bindTexture(n.TEXTURE_CUBE_MAP,V.__webglTexture,n.TEXTURE0+A)}const ie={[xs]:n.REPEAT,[Wn]:n.CLAMP_TO_EDGE,[Io]:n.MIRRORED_REPEAT},le={[hn]:n.NEAREST,[qh]:n.NEAREST_MIPMAP_NEAREST,[tr]:n.NEAREST_MIPMAP_LINEAR,[Gt]:n.LINEAR,[po]:n.LINEAR_MIPMAP_NEAREST,[Li]:n.LINEAR_MIPMAP_LINEAR},me={[XS]:n.NEVER,[JS]:n.ALWAYS,[KS]:n.LESS,[Rg]:n.LEQUAL,[qS]:n.EQUAL,[ZS]:n.GEQUAL,[YS]:n.GREATER,[jS]:n.NOTEQUAL};function Le(I,A){if(A.type===Mn&&e.has("OES_texture_float_linear")===!1&&(A.magFilter===Gt||A.magFilter===po||A.magFilter===tr||A.magFilter===Li||A.minFilter===Gt||A.minFilter===po||A.minFilter===tr||A.minFilter===Li)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),n.texParameteri(I,n.TEXTURE_WRAP_S,ie[A.wrapS]),n.texParameteri(I,n.TEXTURE_WRAP_T,ie[A.wrapT]),(I===n.TEXTURE_3D||I===n.TEXTURE_2D_ARRAY)&&n.texParameteri(I,n.TEXTURE_WRAP_R,ie[A.wrapR]),n.texParameteri(I,n.TEXTURE_MAG_FILTER,le[A.magFilter]),n.texParameteri(I,n.TEXTURE_MIN_FILTER,le[A.minFilter]),A.compareFunction&&(n.texParameteri(I,n.TEXTURE_COMPARE_MODE,n.COMPARE_REF_TO_TEXTURE),n.texParameteri(I,n.TEXTURE_COMPARE_FUNC,me[A.compareFunction])),e.has("EXT_texture_filter_anisotropic")===!0){if(A.magFilter===hn||A.minFilter!==tr&&A.minFilter!==Li||A.type===Mn&&e.has("OES_texture_float_linear")===!1)return;if(A.anisotropy>1||i.get(A).__currentAnisotropy){const V=e.get("EXT_texture_filter_anisotropic");n.texParameterf(I,V.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(A.anisotropy,s.getMaxAnisotropy())),i.get(A).__currentAnisotropy=A.anisotropy}}}function De(I,A){let V=!1;I.__webglInit===void 0&&(I.__webglInit=!0,A.addEventListener("dispose",x));const J=A.source;let ce=h.get(J);ce===void 0&&(ce={},h.set(J,ce));const ee=D(A);if(ee!==I.__cacheKey){ce[ee]===void 0&&(ce[ee]={texture:n.createTexture(),usedTimes:0},r.memory.textures++,V=!0),ce[ee].usedTimes++;const Ve=ce[I.__cacheKey];Ve!==void 0&&(ce[I.__cacheKey].usedTimes--,Ve.usedTimes===0&&w(A)),I.__cacheKey=ee,I.__webglTexture=ce[ee].texture}return V}function Ke(I,A,V){return Math.floor(Math.floor(I/V)/A)}function Oe(I,A,V,J){const ee=I.updateRanges;if(ee.length===0)t.texSubImage2D(n.TEXTURE_2D,0,0,0,A.width,A.height,V,J,A.data);else{ee.sort((he,Ie)=>he.start-Ie.start);let Ve=0;for(let he=1;he0){N&&_e&&t.texStorage2D(n.TEXTURE_2D,Ne,Ge,ft[0].width,ft[0].height);for(let fe=0,oe=ft.length;fe0){const He=l_(Ae.width,Ae.height,A.format,A.type);for(const ct of A.layerUpdates){const Ot=Ae.data.subarray(ct*He/Ae.data.BYTES_PER_ELEMENT,(ct+1)*He/Ae.data.BYTES_PER_ELEMENT);t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,fe,0,0,ct,Ae.width,Ae.height,1,Ie,Ot)}A.clearLayerUpdates()}else t.compressedTexSubImage3D(n.TEXTURE_2D_ARRAY,fe,0,0,0,Ae.width,Ae.height,he.depth,Ie,Ae.data)}else t.compressedTexImage3D(n.TEXTURE_2D_ARRAY,fe,Ge,Ae.width,Ae.height,he.depth,0,Ae.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else N?xe&&t.texSubImage3D(n.TEXTURE_2D_ARRAY,fe,0,0,0,Ae.width,Ae.height,he.depth,Ie,Qe,Ae.data):t.texImage3D(n.TEXTURE_2D_ARRAY,fe,Ge,Ae.width,Ae.height,he.depth,0,Ie,Qe,Ae.data)}else{N&&_e&&t.texStorage2D(n.TEXTURE_2D,Ne,Ge,ft[0].width,ft[0].height);for(let fe=0,oe=ft.length;fe0){const fe=l_(he.width,he.height,A.format,A.type);for(const oe of A.layerUpdates){const He=he.data.subarray(oe*fe/he.data.BYTES_PER_ELEMENT,(oe+1)*fe/he.data.BYTES_PER_ELEMENT);t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,oe,he.width,he.height,1,Ie,Qe,He)}A.clearLayerUpdates()}else t.texSubImage3D(n.TEXTURE_2D_ARRAY,0,0,0,0,he.width,he.height,he.depth,Ie,Qe,he.data)}else t.texImage3D(n.TEXTURE_2D_ARRAY,0,Ge,he.width,he.height,he.depth,0,Ie,Qe,he.data);else if(A.isData3DTexture)N?(_e&&t.texStorage3D(n.TEXTURE_3D,Ne,Ge,he.width,he.height,he.depth),xe&&t.texSubImage3D(n.TEXTURE_3D,0,0,0,0,he.width,he.height,he.depth,Ie,Qe,he.data)):t.texImage3D(n.TEXTURE_3D,0,Ge,he.width,he.height,he.depth,0,Ie,Qe,he.data);else if(A.isFramebufferTexture){if(_e)if(N)t.texStorage2D(n.TEXTURE_2D,Ne,Ge,he.width,he.height);else{let fe=he.width,oe=he.height;for(let He=0;He>=1,oe>>=1}}else if(ft.length>0){if(N&&_e){const fe=st(ft[0]);t.texStorage2D(n.TEXTURE_2D,Ne,Ge,fe.width,fe.height)}for(let fe=0,oe=ft.length;fe0&&Ne++;const oe=st(Ie[0]);t.texStorage2D(n.TEXTURE_CUBE_MAP,Ne,ft,oe.width,oe.height)}for(let oe=0;oe<6;oe++)if(he){N?xe&&t.texSubImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+oe,0,0,0,Ie[oe].width,Ie[oe].height,Ge,Ae,Ie[oe].data):t.texImage2D(n.TEXTURE_CUBE_MAP_POSITIVE_X+oe,0,ft,Ie[oe].width,Ie[oe].height,0,Ge,Ae,Ie[oe].data);for(let He=0;He>ee),Qe=Math.max(1,A.height>>ee);ce===n.TEXTURE_3D||ce===n.TEXTURE_2D_ARRAY?t.texImage3D(ce,ee,Be,Ie,Qe,A.depth,0,Ve,ve,null):t.texImage2D(ce,ee,Be,Ie,Qe,0,Ve,ve,null)}t.bindFramebuffer(n.FRAMEBUFFER,I),ue(A)?o.framebufferTexture2DMultisampleEXT(n.FRAMEBUFFER,J,ce,he.__webglTexture,0,ge(A)):(ce===n.TEXTURE_2D||ce>=n.TEXTURE_CUBE_MAP_POSITIVE_X&&ce<=n.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&n.framebufferTexture2D(n.FRAMEBUFFER,J,ce,he.__webglTexture,ee),t.bindFramebuffer(n.FRAMEBUFFER,null)}function X(I,A,V){if(n.bindRenderbuffer(n.RENDERBUFFER,I),A.depthBuffer){const J=A.depthTexture,ce=J&&J.isDepthTexture?J.type:null,ee=b(A.stencilBuffer,ce),Ve=A.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ve=ge(A);ue(A)?o.renderbufferStorageMultisampleEXT(n.RENDERBUFFER,ve,ee,A.width,A.height):V?n.renderbufferStorageMultisample(n.RENDERBUFFER,ve,ee,A.width,A.height):n.renderbufferStorage(n.RENDERBUFFER,ee,A.width,A.height),n.framebufferRenderbuffer(n.FRAMEBUFFER,Ve,n.RENDERBUFFER,I)}else{const J=A.textures;for(let ce=0;ce{delete A.__boundDepthTexture,delete A.__depthDisposeCallback,J.removeEventListener("dispose",ce)};J.addEventListener("dispose",ce),A.__depthDisposeCallback=ce}A.__boundDepthTexture=J}if(I.depthTexture&&!A.__autoAllocateDepthBuffer){if(V)throw new Error("target.depthTexture not supported in Cube render targets");const J=I.texture.mipmaps;J&&J.length>0?se(A.__webglFramebuffer[0],I):se(A.__webglFramebuffer,I)}else if(V){A.__webglDepthbuffer=[];for(let J=0;J<6;J++)if(t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[J]),A.__webglDepthbuffer[J]===void 0)A.__webglDepthbuffer[J]=n.createRenderbuffer(),X(A.__webglDepthbuffer[J],I,!1);else{const ce=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer[J];n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,ce,n.RENDERBUFFER,ee)}}else{const J=I.texture.mipmaps;if(J&&J.length>0?t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer[0]):t.bindFramebuffer(n.FRAMEBUFFER,A.__webglFramebuffer),A.__webglDepthbuffer===void 0)A.__webglDepthbuffer=n.createRenderbuffer(),X(A.__webglDepthbuffer,I,!1);else{const ce=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,ee=A.__webglDepthbuffer;n.bindRenderbuffer(n.RENDERBUFFER,ee),n.framebufferRenderbuffer(n.FRAMEBUFFER,ce,n.RENDERBUFFER,ee)}}t.bindFramebuffer(n.FRAMEBUFFER,null)}function Re(I,A,V){const J=i.get(I);A!==void 0&&Te(J.__webglFramebuffer,I,I.texture,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,0),V!==void 0&&we(I)}function k(I){const A=I.texture,V=i.get(I),J=i.get(A);I.addEventListener("dispose",M);const ce=I.textures,ee=I.isWebGLCubeRenderTarget===!0,Ve=ce.length>1;if(Ve||(J.__webglTexture===void 0&&(J.__webglTexture=n.createTexture()),J.__version=A.version,r.memory.textures++),ee){V.__webglFramebuffer=[];for(let ve=0;ve<6;ve++)if(A.mipmaps&&A.mipmaps.length>0){V.__webglFramebuffer[ve]=[];for(let Be=0;Be0){V.__webglFramebuffer=[];for(let ve=0;ve0&&ue(I)===!1){V.__webglMultisampledFramebuffer=n.createFramebuffer(),V.__webglColorRenderbuffer=[],t.bindFramebuffer(n.FRAMEBUFFER,V.__webglMultisampledFramebuffer);for(let ve=0;ve0)for(let Be=0;Be0)for(let Be=0;Be0){if(ue(I)===!1){const A=I.textures,V=I.width,J=I.height;let ce=n.COLOR_BUFFER_BIT;const ee=I.stencilBuffer?n.DEPTH_STENCIL_ATTACHMENT:n.DEPTH_ATTACHMENT,Ve=i.get(I),ve=A.length>1;if(ve)for(let ze=0;ze0?t.bindFramebuffer(n.DRAW_FRAMEBUFFER,Ve.__webglFramebuffer[0]):t.bindFramebuffer(n.DRAW_FRAMEBUFFER,Ve.__webglFramebuffer);for(let ze=0;ze0&&e.has("WEBGL_multisampled_render_to_texture")===!0&&A.__useRenderToTexture!==!1}function ye(I){const A=r.render.frame;u.get(I)!==A&&(u.set(I,A),I.update())}function We(I,A){const V=I.colorSpace,J=I.format,ce=I.type;return I.isCompressedTexture===!0||I.isVideoTexture===!0||V!==wn&&V!==Bs&&(ot.getTransfer(V)===It?(J!==Xn||ce!==is)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",V)),A}function st(I){return typeof HTMLImageElement<"u"&&I instanceof HTMLImageElement?(c.width=I.naturalWidth||I.width,c.height=I.naturalHeight||I.height):typeof VideoFrame<"u"&&I instanceof VideoFrame?(c.width=I.displayWidth,c.height=I.displayHeight):(c.width=I.width,c.height=I.height),c}this.allocateTextureUnit=O,this.resetTextureUnits=L,this.setTexture2D=U,this.setTexture2DArray=F,this.setTexture3D=W,this.setTextureCube=H,this.rebindTextures=Re,this.setupRenderTarget=k,this.updateRenderTargetMipmap=G,this.updateMultisampleRenderTarget=Q,this.setupDepthRenderbuffer=we,this.setupFrameBufferTexture=Te,this.useMultisampledRTT=ue}function ZT(n,e){function t(i,s=Bs){let a;const r=ot.getTransfer(s);if(i===is)return n.UNSIGNED_BYTE;if(i===jh)return n.UNSIGNED_SHORT_4_4_4_4;if(i===Zh)return n.UNSIGNED_SHORT_5_5_5_1;if(i===wg)return n.UNSIGNED_INT_5_9_9_9_REV;if(i===Sg)return n.UNSIGNED_INT_10F_11F_11F_REV;if(i===bg)return n.BYTE;if(i===xg)return n.SHORT;if(i===Lo)return n.UNSIGNED_SHORT;if(i===Yh)return n.INT;if(i===Ks)return n.UNSIGNED_INT;if(i===Mn)return n.FLOAT;if(i===ms)return n.HALF_FLOAT;if(i===Tg)return n.ALPHA;if(i===Mg)return n.RGB;if(i===Xn)return n.RGBA;if(i===Do)return n.DEPTH_COMPONENT;if(i===Oo)return n.DEPTH_STENCIL;if(i===Jh)return n.RED;if(i===Ec)return n.RED_INTEGER;if(i===Eg)return n.RG;if(i===Qh)return n.RG_INTEGER;if(i===ef)return n.RGBA_INTEGER;if(i===$l||i===Wl||i===Xl||i===Kl)if(r===It)if(a=e.get("WEBGL_compressed_texture_s3tc_srgb"),a!==null){if(i===$l)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(i===Wl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(i===Xl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(i===Kl)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(a=e.get("WEBGL_compressed_texture_s3tc"),a!==null){if(i===$l)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(i===Wl)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(i===Xl)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(i===Kl)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(i===Xd||i===Kd||i===qd||i===Yd)if(a=e.get("WEBGL_compressed_texture_pvrtc"),a!==null){if(i===Xd)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(i===Kd)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(i===qd)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(i===Yd)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(i===jd||i===Zd||i===Jd)if(a=e.get("WEBGL_compressed_texture_etc"),a!==null){if(i===jd||i===Zd)return r===It?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(i===Jd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(i===Qd||i===eh||i===th||i===nh||i===ih||i===sh||i===ah||i===rh||i===oh||i===lh||i===ch||i===uh||i===dh||i===hh)if(a=e.get("WEBGL_compressed_texture_astc"),a!==null){if(i===Qd)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(i===eh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(i===th)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(i===nh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(i===ih)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(i===sh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(i===ah)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(i===rh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(i===oh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(i===lh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(i===ch)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(i===uh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(i===dh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(i===hh)return r===It?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(i===fh||i===ph||i===mh)if(a=e.get("EXT_texture_compression_bptc"),a!==null){if(i===fh)return r===It?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(i===ph)return a.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(i===mh)return a.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(i===_h||i===gh||i===yh||i===vh)if(a=e.get("EXT_texture_compression_rgtc"),a!==null){if(i===_h)return a.COMPRESSED_RED_RGTC1_EXT;if(i===gh)return a.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(i===yh)return a.COMPRESSED_RED_GREEN_RGTC2_EXT;if(i===vh)return a.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return i===ko?n.UNSIGNED_INT_24_8:n[i]!==void 0?n[i]:null}return{convert:t}}const nO=` void main() { gl_Position = vec4( position, 1.0 ); -}`,XD=` +}`,iO=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -3829,16 +3829,16 @@ void main() { } -}`;class KD{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){const i=new Ag(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){const t=e.cameras[0].viewport,i=new ri({vertexShader:WD,fragmentShader:XD,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Se(new Nn(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class qD extends Ts{constructor(e,t){super();const i=this;let s=null,a=1,r=null,o="local-floor",l=1,c=null,u=null,d=null,h=null,f=null,p=null;const g=typeof XRWebGLBinding<"u",_=new KD,m={},v=t.getContextAttributes();let y=null,b=null;const S=[],x=[],M=new ne;let C=null;const w=new Qt;w.viewport=new Ye;const E=new Qt;E.viewport=new Ye;const R=[w,E],L=new PT;let O=null,D=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(Z){let ae=S[Z];return ae===void 0&&(ae=new cd,S[Z]=ae),ae.getTargetRaySpace()},this.getControllerGrip=function(Z){let ae=S[Z];return ae===void 0&&(ae=new cd,S[Z]=ae),ae.getGripSpace()},this.getHand=function(Z){let ae=S[Z];return ae===void 0&&(ae=new cd,S[Z]=ae),ae.getHandSpace()};function U(Z){const ae=x.indexOf(Z.inputSource);if(ae===-1)return;const Te=S[ae];Te!==void 0&&(Te.update(Z.inputSource,Z.frame,c||r),Te.dispatchEvent({type:Z.type,data:Z.inputSource}))}function F(){s.removeEventListener("select",U),s.removeEventListener("selectstart",U),s.removeEventListener("selectend",U),s.removeEventListener("squeeze",U),s.removeEventListener("squeezestart",U),s.removeEventListener("squeezeend",U),s.removeEventListener("end",F),s.removeEventListener("inputsourceschange",W);for(let Z=0;Z=0&&(x[X]=null,S[X].disconnect(Te))}for(let ae=0;ae=x.length){x.push(Te),X=we;break}else if(x[we]===null){x[we]=Te,X=we;break}if(X===-1)break}const se=S[X];se&&se.connect(Te)}}const H=new T,ie=new T;function le(Z,ae,Te){H.setFromMatrixPosition(ae.matrixWorld),ie.setFromMatrixPosition(Te.matrixWorld);const X=H.distanceTo(ie),se=ae.projectionMatrix.elements,we=Te.projectionMatrix.elements,Re=se[14]/(se[10]-1),k=se[14]/(se[10]+1),G=(se[9]+1)/se[5],j=(se[9]-1)/se[5],Y=(se[8]-1)/se[0],Q=(we[8]+1)/we[0],ge=Re*Y,ue=Re*Q,ye=X/(-Y+Q),We=ye*-Y;if(ae.matrixWorld.decompose(Z.position,Z.quaternion,Z.scale),Z.translateX(We),Z.translateZ(ye),Z.matrixWorld.compose(Z.position,Z.quaternion,Z.scale),Z.matrixWorldInverse.copy(Z.matrixWorld).invert(),se[10]===-1)Z.projectionMatrix.copy(ae.projectionMatrix),Z.projectionMatrixInverse.copy(ae.projectionMatrixInverse);else{const st=Re+ye,I=k+ye,A=ge-We,V=ue+(X-We),J=G*k/I*st,ce=j*k/I*st;Z.projectionMatrix.makePerspective(A,V,J,ce,st,I),Z.projectionMatrixInverse.copy(Z.projectionMatrix).invert()}}function me(Z,ae){ae===null?Z.matrixWorld.copy(Z.matrix):Z.matrixWorld.multiplyMatrices(ae.matrixWorld,Z.matrix),Z.matrixWorldInverse.copy(Z.matrixWorld).invert()}this.updateCamera=function(Z){if(s===null)return;let ae=Z.near,Te=Z.far;_.texture!==null&&(_.depthNear>0&&(ae=_.depthNear),_.depthFar>0&&(Te=_.depthFar)),L.near=E.near=w.near=ae,L.far=E.far=w.far=Te,(O!==L.near||D!==L.far)&&(s.updateRenderState({depthNear:L.near,depthFar:L.far}),O=L.near,D=L.far),L.layers.mask=Z.layers.mask|6,w.layers.mask=L.layers.mask&3,E.layers.mask=L.layers.mask&5;const X=Z.parent,se=L.cameras;me(L,X);for(let we=0;we0&&(_.alphaTest.value=m.alphaTest);const v=e.get(m),y=v.envMap,b=v.envMapRotation;y&&(_.envMap.value=y,Ua.copy(b),Ua.x*=-1,Ua.y*=-1,Ua.z*=-1,y.isCubeTexture&&y.isRenderTargetTexture===!1&&(Ua.y*=-1,Ua.z*=-1),_.envMapRotation.value.setFromMatrix4(YD.makeRotationFromEuler(Ua)),_.flipEnvMap.value=y.isCubeTexture&&y.isRenderTargetTexture===!1?-1:1,_.reflectivity.value=m.reflectivity,_.ior.value=m.ior,_.refractionRatio.value=m.refractionRatio),m.lightMap&&(_.lightMap.value=m.lightMap,_.lightMapIntensity.value=m.lightMapIntensity,t(m.lightMap,_.lightMapTransform)),m.aoMap&&(_.aoMap.value=m.aoMap,_.aoMapIntensity.value=m.aoMapIntensity,t(m.aoMap,_.aoMapTransform))}function r(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform))}function o(_,m){_.dashSize.value=m.dashSize,_.totalSize.value=m.dashSize+m.gapSize,_.scale.value=m.scale}function l(_,m,v,y){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.size.value=m.size*v,_.scale.value=y*.5,m.map&&(_.map.value=m.map,t(m.map,_.uvTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function c(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.rotation.value=m.rotation,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function u(_,m){_.specular.value.copy(m.specular),_.shininess.value=Math.max(m.shininess,1e-4)}function d(_,m){m.gradientMap&&(_.gradientMap.value=m.gradientMap)}function h(_,m){_.metalness.value=m.metalness,m.metalnessMap&&(_.metalnessMap.value=m.metalnessMap,t(m.metalnessMap,_.metalnessMapTransform)),_.roughness.value=m.roughness,m.roughnessMap&&(_.roughnessMap.value=m.roughnessMap,t(m.roughnessMap,_.roughnessMapTransform)),m.envMap&&(_.envMapIntensity.value=m.envMapIntensity)}function f(_,m,v){_.ior.value=m.ior,m.sheen>0&&(_.sheenColor.value.copy(m.sheenColor).multiplyScalar(m.sheen),_.sheenRoughness.value=m.sheenRoughness,m.sheenColorMap&&(_.sheenColorMap.value=m.sheenColorMap,t(m.sheenColorMap,_.sheenColorMapTransform)),m.sheenRoughnessMap&&(_.sheenRoughnessMap.value=m.sheenRoughnessMap,t(m.sheenRoughnessMap,_.sheenRoughnessMapTransform))),m.clearcoat>0&&(_.clearcoat.value=m.clearcoat,_.clearcoatRoughness.value=m.clearcoatRoughness,m.clearcoatMap&&(_.clearcoatMap.value=m.clearcoatMap,t(m.clearcoatMap,_.clearcoatMapTransform)),m.clearcoatRoughnessMap&&(_.clearcoatRoughnessMap.value=m.clearcoatRoughnessMap,t(m.clearcoatRoughnessMap,_.clearcoatRoughnessMapTransform)),m.clearcoatNormalMap&&(_.clearcoatNormalMap.value=m.clearcoatNormalMap,t(m.clearcoatNormalMap,_.clearcoatNormalMapTransform),_.clearcoatNormalScale.value.copy(m.clearcoatNormalScale),m.side===dn&&_.clearcoatNormalScale.value.negate())),m.dispersion>0&&(_.dispersion.value=m.dispersion),m.iridescence>0&&(_.iridescence.value=m.iridescence,_.iridescenceIOR.value=m.iridescenceIOR,_.iridescenceThicknessMinimum.value=m.iridescenceThicknessRange[0],_.iridescenceThicknessMaximum.value=m.iridescenceThicknessRange[1],m.iridescenceMap&&(_.iridescenceMap.value=m.iridescenceMap,t(m.iridescenceMap,_.iridescenceMapTransform)),m.iridescenceThicknessMap&&(_.iridescenceThicknessMap.value=m.iridescenceThicknessMap,t(m.iridescenceThicknessMap,_.iridescenceThicknessMapTransform))),m.transmission>0&&(_.transmission.value=m.transmission,_.transmissionSamplerMap.value=v.texture,_.transmissionSamplerSize.value.set(v.width,v.height),m.transmissionMap&&(_.transmissionMap.value=m.transmissionMap,t(m.transmissionMap,_.transmissionMapTransform)),_.thickness.value=m.thickness,m.thicknessMap&&(_.thicknessMap.value=m.thicknessMap,t(m.thicknessMap,_.thicknessMapTransform)),_.attenuationDistance.value=m.attenuationDistance,_.attenuationColor.value.copy(m.attenuationColor)),m.anisotropy>0&&(_.anisotropyVector.value.set(m.anisotropy*Math.cos(m.anisotropyRotation),m.anisotropy*Math.sin(m.anisotropyRotation)),m.anisotropyMap&&(_.anisotropyMap.value=m.anisotropyMap,t(m.anisotropyMap,_.anisotropyMapTransform))),_.specularIntensity.value=m.specularIntensity,_.specularColor.value.copy(m.specularColor),m.specularColorMap&&(_.specularColorMap.value=m.specularColorMap,t(m.specularColorMap,_.specularColorMapTransform)),m.specularIntensityMap&&(_.specularIntensityMap.value=m.specularIntensityMap,t(m.specularIntensityMap,_.specularIntensityMapTransform))}function p(_,m){m.matcap&&(_.matcap.value=m.matcap)}function g(_,m){const v=e.get(m).light;_.referencePosition.value.setFromMatrixPosition(v.matrixWorld),_.nearDistance.value=v.shadow.camera.near,_.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function ZD(n,e,t,i){let s={},a={},r=[];const o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(v,y){const b=y.program;i.uniformBlockBinding(v,b)}function c(v,y){let b=s[v.id];b===void 0&&(p(v),b=u(v),s[v.id]=b,v.addEventListener("dispose",_));const S=y.program;i.updateUBOMapping(v,S);const x=e.render.frame;a[v.id]!==x&&(h(v),a[v.id]=x)}function u(v){const y=d();v.__bindingPointIndex=y;const b=n.createBuffer(),S=v.__size,x=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,b),n.bufferData(n.UNIFORM_BUFFER,S,x),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,y,b),b}function d(){for(let v=0;v0&&(b+=S-x),v.__size=b,v.__cache={},this}function g(v){const y={boundary:0,storage:0};return typeof v=="number"||typeof v=="boolean"?(y.boundary=4,y.storage=4):v.isVector2?(y.boundary=8,y.storage=8):v.isVector3||v.isColor?(y.boundary=16,y.storage=12):v.isVector4?(y.boundary=16,y.storage=16):v.isMatrix3?(y.boundary=48,y.storage=48):v.isMatrix4?(y.boundary=64,y.storage=64):v.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",v),y}function _(v){const y=v.target;y.removeEventListener("dispose",_);const b=r.indexOf(y.__bindingPointIndex);r.splice(b,1),n.deleteBuffer(s[y.id]),delete s[y.id],delete a[y.id]}function m(){for(const v in s)n.deleteBuffer(s[v]);r=[],s={},a={}}return{bind:l,update:c,dispose:m}}class Jg{constructor(e={}){const{canvas:t=WS(),context:i=null,depth:s=!0,stencil:a=!1,alpha:r=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:u="default",failIfMajorPerformanceCaveat:d=!1,reversedDepthBuffer:h=!1}=e;this.isWebGLRenderer=!0;let f;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");f=i.getContextAttributes().alpha}else f=r;const p=new Uint32Array(4),g=new Int32Array(4);let _=null,m=null;const v=[],y=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=Vs,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const b=this;let S=!1;this._outputColorSpace=yt;let x=0,M=0,C=null,w=-1,E=null;const R=new Ye,L=new Ye;let O=null;const D=new de(0);let U=0,F=t.width,W=t.height,H=1,ie=null,le=null;const me=new Ye(0,0,F,W),Le=new Ye(0,0,F,W);let De=!1;const Ke=new $o;let Oe=!1,Z=!1;const ae=new Ee,Te=new T,X=new Ye,se={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let we=!1;function Re(){return C===null?H:1}let k=i;function G(P,B){return t.getContext(P,B)}try{const P={alpha:!0,depth:s,stencil:a,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:u,failIfMajorPerformanceCaveat:d};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${zh}`),t.addEventListener("webglcontextlost",xe,!1),t.addEventListener("webglcontextrestored",Ne,!1),t.addEventListener("webglcontextcreationerror",fe,!1),k===null){const B="webgl2";if(k=G(B,P),k===null)throw G(B)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(P){throw console.error("THREE.WebGLRenderer: "+P.message),P}let j,Y,Q,ge,ue,ye,We,st,I,A,V,J,ce,ee,Ve,ve,Be,ze,he,Ie,Qe,Ge,Ae,ft;function N(){j=new ck(k),j.init(),Ge=new VT(k,j),Y=new nk(k,j,e,Ge),Q=new GD(k,j),Y.reversedDepthBuffer&&h&&Q.buffers.depth.setReversed(!0),ge=new hk(k),ue=new PD,ye=new $D(k,j,Q,ue,Y,Ge,ge),We=new sk(b),st=new lk(b),I=new yI(k),Ae=new ek(k,I),A=new uk(k,I,ge,Ae),V=new pk(k,A,I,ge),he=new fk(k,Y,ye),ve=new ik(ue),J=new RD(b,We,st,j,Y,Ae,ve),ce=new jD(b,ue),ee=new LD,Ve=new UD(j),ze=new Q2(b,We,st,Q,V,f,l),Be=new HD(b,V,Y),ft=new ZD(k,ge,Y,Q),Ie=new tk(k,j,ge),Qe=new dk(k,j,ge),ge.programs=J.programs,b.capabilities=Y,b.extensions=j,b.properties=ue,b.renderLists=ee,b.shadowMap=Be,b.state=Q,b.info=ge}N();const _e=new qD(b,k);this.xr=_e,this.getContext=function(){return k},this.getContextAttributes=function(){return k.getContextAttributes()},this.forceContextLoss=function(){const P=j.get("WEBGL_lose_context");P&&P.loseContext()},this.forceContextRestore=function(){const P=j.get("WEBGL_lose_context");P&&P.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(P){P!==void 0&&(H=P,this.setSize(F,W,!1))},this.getSize=function(P){return P.set(F,W)},this.setSize=function(P,B,K=!0){if(_e.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}F=P,W=B,t.width=Math.floor(P*H),t.height=Math.floor(B*H),K===!0&&(t.style.width=P+"px",t.style.height=B+"px"),this.setViewport(0,0,P,B)},this.getDrawingBufferSize=function(P){return P.set(F*H,W*H).floor()},this.setDrawingBufferSize=function(P,B,K){F=P,W=B,H=K,t.width=Math.floor(P*K),t.height=Math.floor(B*K),this.setViewport(0,0,P,B)},this.getCurrentViewport=function(P){return P.copy(R)},this.getViewport=function(P){return P.copy(me)},this.setViewport=function(P,B,K,q){P.isVector4?me.set(P.x,P.y,P.z,P.w):me.set(P,B,K,q),Q.viewport(R.copy(me).multiplyScalar(H).round())},this.getScissor=function(P){return P.copy(Le)},this.setScissor=function(P,B,K,q){P.isVector4?Le.set(P.x,P.y,P.z,P.w):Le.set(P,B,K,q),Q.scissor(L.copy(Le).multiplyScalar(H).round())},this.getScissorTest=function(){return De},this.setScissorTest=function(P){Q.setScissorTest(De=P)},this.setOpaqueSort=function(P){ie=P},this.setTransparentSort=function(P){le=P},this.getClearColor=function(P){return P.copy(ze.getClearColor())},this.setClearColor=function(){ze.setClearColor(...arguments)},this.getClearAlpha=function(){return ze.getClearAlpha()},this.setClearAlpha=function(){ze.setClearAlpha(...arguments)},this.clear=function(P=!0,B=!0,K=!0){let q=0;if(P){let z=!1;if(C!==null){const pe=C.texture.format;z=pe===qh||pe===Kh||pe===wc}if(z){const pe=C.texture.type,Pe=pe===ns||pe===Ks||pe===Ro||pe===Po||pe===$h||pe===Wh,Ue=ze.getClearColor(),Fe=ze.getClearAlpha(),Ze=Ue.r,tt=Ue.g,Xe=Ue.b;Pe?(p[0]=Ze,p[1]=tt,p[2]=Xe,p[3]=Fe,k.clearBufferuiv(k.COLOR,0,p)):(g[0]=Ze,g[1]=tt,g[2]=Xe,g[3]=Fe,k.clearBufferiv(k.COLOR,0,g))}else q|=k.COLOR_BUFFER_BIT}B&&(q|=k.DEPTH_BUFFER_BIT),K&&(q|=k.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),k.clear(q)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",xe,!1),t.removeEventListener("webglcontextrestored",Ne,!1),t.removeEventListener("webglcontextcreationerror",fe,!1),ze.dispose(),ee.dispose(),Ve.dispose(),ue.dispose(),We.dispose(),st.dispose(),V.dispose(),Ae.dispose(),ft.dispose(),J.dispose(),_e.dispose(),_e.removeEventListener("sessionstart",ss),_e.removeEventListener("sessionend",Iy),Sa.stop()};function xe(P){P.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),S=!0}function Ne(){console.log("THREE.WebGLRenderer: Context Restored."),S=!1;const P=ge.autoReset,B=Be.enabled,K=Be.autoUpdate,q=Be.needsUpdate,z=Be.type;N(),ge.autoReset=P,Be.enabled=B,Be.autoUpdate=K,Be.needsUpdate=q,Be.type=z}function fe(P){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",P.statusMessage)}function oe(P){const B=P.target;B.removeEventListener("dispose",oe),He(B)}function He(P){ct(P),ue.remove(P)}function ct(P){const B=ue.get(P).programs;B!==void 0&&(B.forEach(function(K){J.releaseProgram(K)}),P.isShaderMaterial&&J.releaseShaderCache(P))}this.renderBufferDirect=function(P,B,K,q,z,pe){B===null&&(B=se);const Pe=z.isMesh&&z.matrixWorld.determinant()<0,Ue=xC(P,B,K,q,z);Q.setMaterial(q,Pe);let Fe=K.index,Ze=1;if(q.wireframe===!0){if(Fe=A.getWireframeAttribute(K),Fe===void 0)return;Ze=2}const tt=K.drawRange,Xe=K.attributes.position;let St=tt.start*Ze,Lt=(tt.start+tt.count)*Ze;pe!==null&&(St=Math.max(St,pe.start*Ze),Lt=Math.min(Lt,(pe.start+pe.count)*Ze)),Fe!==null?(St=Math.max(St,0),Lt=Math.min(Lt,Fe.count)):Xe!=null&&(St=Math.max(St,0),Lt=Math.min(Lt,Xe.count));const Yt=Lt-St;if(Yt<0||Yt===1/0)return;Ae.setup(z,q,Ue,K,Fe);let Nt,Dt=Ie;if(Fe!==null&&(Nt=I.get(Fe),Dt=Qe,Dt.setIndex(Nt)),z.isMesh)q.wireframe===!0?(Q.setLineWidth(q.wireframeLinewidth*Re()),Dt.setMode(k.LINES)):Dt.setMode(k.TRIANGLES);else if(z.isLine){let qe=q.linewidth;qe===void 0&&(qe=1),Q.setLineWidth(qe*Re()),z.isLineSegments?Dt.setMode(k.LINES):z.isLineLoop?Dt.setMode(k.LINE_LOOP):Dt.setMode(k.LINE_STRIP)}else z.isPoints?Dt.setMode(k.POINTS):z.isSprite&&Dt.setMode(k.TRIANGLES);if(z.isBatchedMesh)if(z._multiDrawInstances!==null)oc("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),Dt.renderMultiDrawInstances(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount,z._multiDrawInstances);else if(j.get("WEBGL_multi_draw"))Dt.renderMultiDraw(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount);else{const qe=z._multiDrawStarts,$t=z._multiDrawCounts,Tt=z._multiDrawCount,di=Fe?I.get(Fe).bytesPerElement:1,Cr=ue.get(q).currentProgram.getUniforms();for(let hi=0;hi{function pe(){if(q.forEach(function(Pe){ue.get(Pe).currentProgram.isReady()&&q.delete(Pe)}),q.size===0){z(P);return}setTimeout(pe,10)}j.get("KHR_parallel_shader_compile")!==null?pe():setTimeout(pe,10)})};let At=null;function Ms(P){At&&At(P)}function ss(){Sa.stop()}function Iy(){Sa.start()}const Sa=new NT;Sa.setAnimationLoop(Ms),typeof self<"u"&&Sa.setContext(self),this.setAnimationLoop=function(P){At=P,_e.setAnimationLoop(P),P===null?Sa.stop():Sa.start()},_e.addEventListener("sessionstart",ss),_e.addEventListener("sessionend",Iy),this.render=function(P,B){if(B!==void 0&&B.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(S===!0)return;if(P.matrixWorldAutoUpdate===!0&&P.updateMatrixWorld(),B.parent===null&&B.matrixWorldAutoUpdate===!0&&B.updateMatrixWorld(),_e.enabled===!0&&_e.isPresenting===!0&&(_e.cameraAutoUpdate===!0&&_e.updateCamera(B),B=_e.getCamera()),P.isScene===!0&&P.onBeforeRender(b,P,B,C),m=Ve.get(P,y.length),m.init(B),y.push(m),ae.multiplyMatrices(B.projectionMatrix,B.matrixWorldInverse),Ke.setFromProjectionMatrix(ae,yi,B.reversedDepth),Z=this.localClippingEnabled,Oe=ve.init(this.clippingPlanes,Z),_=ee.get(P,v.length),_.init(),v.push(_),_e.enabled===!0&&_e.isPresenting===!0){const pe=b.xr.getDepthSensingMesh();pe!==null&&Nf(pe,B,-1/0,b.sortObjects)}Nf(P,B,0,b.sortObjects),_.finish(),b.sortObjects===!0&&_.sort(ie,le),we=_e.enabled===!1||_e.isPresenting===!1||_e.hasDepthSensing()===!1,we&&ze.addToRenderList(_,P),this.info.render.frame++,Oe===!0&&ve.beginShadows();const K=m.state.shadowsArray;Be.render(K,P,B),Oe===!0&&ve.endShadows(),this.info.autoReset===!0&&this.info.reset();const q=_.opaque,z=_.transmissive;if(m.setupLights(),B.isArrayCamera){const pe=B.cameras;if(z.length>0)for(let Pe=0,Ue=pe.length;Pe0&&ky(q,z,P,B),we&&ze.render(P),Ly(_,P,B);C!==null&&M===0&&(ye.updateMultisampleRenderTarget(C),ye.updateRenderTargetMipmap(C)),P.isScene===!0&&P.onAfterRender(b,P,B),Ae.resetDefaultState(),w=-1,E=null,y.pop(),y.length>0?(m=y[y.length-1],Oe===!0&&ve.setGlobalState(b.clippingPlanes,m.state.camera)):m=null,v.pop(),v.length>0?_=v[v.length-1]:_=null};function Nf(P,B,K,q){if(P.visible===!1)return;if(P.layers.test(B.layers)){if(P.isGroup)K=P.renderOrder;else if(P.isLOD)P.autoUpdate===!0&&P.update(B);else if(P.isLight)m.pushLight(P),P.castShadow&&m.pushShadow(P);else if(P.isSprite){if(!P.frustumCulled||Ke.intersectsSprite(P)){q&&X.setFromMatrixPosition(P.matrixWorld).applyMatrix4(ae);const Pe=V.update(P),Ue=P.material;Ue.visible&&_.push(P,Pe,Ue,K,X.z,null)}}else if((P.isMesh||P.isLine||P.isPoints)&&(!P.frustumCulled||Ke.intersectsObject(P))){const Pe=V.update(P),Ue=P.material;if(q&&(P.boundingSphere!==void 0?(P.boundingSphere===null&&P.computeBoundingSphere(),X.copy(P.boundingSphere.center)):(Pe.boundingSphere===null&&Pe.computeBoundingSphere(),X.copy(Pe.boundingSphere.center)),X.applyMatrix4(P.matrixWorld).applyMatrix4(ae)),Array.isArray(Ue)){const Fe=Pe.groups;for(let Ze=0,tt=Fe.length;Ze0&&Dc(z,B,K),pe.length>0&&Dc(pe,B,K),Pe.length>0&&Dc(Pe,B,K),Q.buffers.depth.setTest(!0),Q.buffers.depth.setMask(!0),Q.buffers.color.setMask(!0),Q.setPolygonOffset(!1)}function ky(P,B,K,q){if((K.isScene===!0?K.overrideMaterial:null)!==null)return;m.state.transmissionRenderTarget[q.id]===void 0&&(m.state.transmissionRenderTarget[q.id]=new ws(1,1,{generateMipmaps:!0,type:j.has("EXT_color_buffer_half_float")||j.has("EXT_color_buffer_float")?ms:ns,minFilter:Ii,samples:4,stencilBuffer:a,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:rt.workingColorSpace}));const pe=m.state.transmissionRenderTarget[q.id],Pe=q.viewport||R;pe.setSize(Pe.z*b.transmissionResolutionScale,Pe.w*b.transmissionResolutionScale);const Ue=b.getRenderTarget(),Fe=b.getActiveCubeFace(),Ze=b.getActiveMipmapLevel();b.setRenderTarget(pe),b.getClearColor(D),U=b.getClearAlpha(),U<1&&b.setClearColor(16777215,.5),b.clear(),we&&ze.render(K);const tt=b.toneMapping;b.toneMapping=Vs;const Xe=q.viewport;if(q.viewport!==void 0&&(q.viewport=void 0),m.setupLightsView(q),Oe===!0&&ve.setGlobalState(b.clippingPlanes,q),Dc(P,K,q),ye.updateMultisampleRenderTarget(pe),ye.updateRenderTargetMipmap(pe),j.has("WEBGL_multisampled_render_to_texture")===!1){let St=!1;for(let Lt=0,Yt=B.length;Lt0),Xe=!!K.morphAttributes.position,St=!!K.morphAttributes.normal,Lt=!!K.morphAttributes.color;let Yt=Vs;q.toneMapped&&(C===null||C.isXRRenderTarget===!0)&&(Yt=b.toneMapping);const Nt=K.morphAttributes.position||K.morphAttributes.normal||K.morphAttributes.color,Dt=Nt!==void 0?Nt.length:0,qe=ue.get(q),$t=m.state.lights;if(Oe===!0&&(Z===!0||P!==E)){const Bn=P===E&&q.id===w;ve.setState(q,P,Bn)}let Tt=!1;q.version===qe.__version?(qe.needsLights&&qe.lightsStateVersion!==$t.state.version||qe.outputColorSpace!==Ue||z.isBatchedMesh&&qe.batching===!1||!z.isBatchedMesh&&qe.batching===!0||z.isBatchedMesh&&qe.batchingColor===!0&&z.colorTexture===null||z.isBatchedMesh&&qe.batchingColor===!1&&z.colorTexture!==null||z.isInstancedMesh&&qe.instancing===!1||!z.isInstancedMesh&&qe.instancing===!0||z.isSkinnedMesh&&qe.skinning===!1||!z.isSkinnedMesh&&qe.skinning===!0||z.isInstancedMesh&&qe.instancingColor===!0&&z.instanceColor===null||z.isInstancedMesh&&qe.instancingColor===!1&&z.instanceColor!==null||z.isInstancedMesh&&qe.instancingMorph===!0&&z.morphTexture===null||z.isInstancedMesh&&qe.instancingMorph===!1&&z.morphTexture!==null||qe.envMap!==Fe||q.fog===!0&&qe.fog!==pe||qe.numClippingPlanes!==void 0&&(qe.numClippingPlanes!==ve.numPlanes||qe.numIntersection!==ve.numIntersection)||qe.vertexAlphas!==Ze||qe.vertexTangents!==tt||qe.morphTargets!==Xe||qe.morphNormals!==St||qe.morphColors!==Lt||qe.toneMapping!==Yt||qe.morphTargetsCount!==Dt)&&(Tt=!0):(Tt=!0,qe.__version=q.version);let di=qe.currentProgram;Tt===!0&&(di=Oc(q,B,z));let Cr=!1,hi=!1,Qo=!1;const Wt=di.getUniforms(),xi=qe.uniforms;if(Q.useProgram(di.program)&&(Cr=!0,hi=!0,Qo=!0),q.id!==w&&(w=q.id,hi=!0),Cr||E!==P){Q.buffers.depth.getReversed()&&P.reversedDepth!==!0&&(P._reversedDepth=!0,P.updateProjectionMatrix()),Wt.setValue(k,"projectionMatrix",P.projectionMatrix),Wt.setValue(k,"viewMatrix",P.matrixWorldInverse);const qn=Wt.map.cameraPosition;qn!==void 0&&qn.setValue(k,Te.setFromMatrixPosition(P.matrixWorld)),Y.logarithmicDepthBuffer&&Wt.setValue(k,"logDepthBufFC",2/(Math.log(P.far+1)/Math.LN2)),(q.isMeshPhongMaterial||q.isMeshToonMaterial||q.isMeshLambertMaterial||q.isMeshBasicMaterial||q.isMeshStandardMaterial||q.isShaderMaterial)&&Wt.setValue(k,"isOrthographic",P.isOrthographicCamera===!0),E!==P&&(E=P,hi=!0,Qo=!0)}if(z.isSkinnedMesh){Wt.setOptional(k,z,"bindMatrix"),Wt.setOptional(k,z,"bindMatrixInverse");const Bn=z.skeleton;Bn&&(Bn.boneTexture===null&&Bn.computeBoneTexture(),Wt.setValue(k,"boneTexture",Bn.boneTexture,ye))}z.isBatchedMesh&&(Wt.setOptional(k,z,"batchingTexture"),Wt.setValue(k,"batchingTexture",z._matricesTexture,ye),Wt.setOptional(k,z,"batchingIdTexture"),Wt.setValue(k,"batchingIdTexture",z._indirectTexture,ye),Wt.setOptional(k,z,"batchingColorTexture"),z._colorsTexture!==null&&Wt.setValue(k,"batchingColorTexture",z._colorsTexture,ye));const wi=K.morphAttributes;if((wi.position!==void 0||wi.normal!==void 0||wi.color!==void 0)&&he.update(z,K,di),(hi||qe.receiveShadow!==z.receiveShadow)&&(qe.receiveShadow=z.receiveShadow,Wt.setValue(k,"receiveShadow",z.receiveShadow)),q.isMeshGouraudMaterial&&q.envMap!==null&&(xi.envMap.value=Fe,xi.flipEnvMap.value=Fe.isCubeTexture&&Fe.isRenderTargetTexture===!1?-1:1),q.isMeshStandardMaterial&&q.envMap===null&&B.environment!==null&&(xi.envMapIntensity.value=B.environmentIntensity),hi&&(Wt.setValue(k,"toneMappingExposure",b.toneMappingExposure),qe.needsLights&&wC(xi,Qo),pe&&q.fog===!0&&ce.refreshFogUniforms(xi,pe),ce.refreshMaterialUniforms(xi,q,H,W,m.state.transmissionRenderTarget[P.id]),ud.upload(k,Oy(qe),xi,ye)),q.isShaderMaterial&&q.uniformsNeedUpdate===!0&&(ud.upload(k,Oy(qe),xi,ye),q.uniformsNeedUpdate=!1),q.isSpriteMaterial&&Wt.setValue(k,"center",z.center),Wt.setValue(k,"modelViewMatrix",z.modelViewMatrix),Wt.setValue(k,"normalMatrix",z.normalMatrix),Wt.setValue(k,"modelMatrix",z.matrixWorld),q.isShaderMaterial||q.isRawShaderMaterial){const Bn=q.uniformsGroups;for(let qn=0,Uf=Bn.length;qn0&&ye.useMultisampledRTT(P)===!1?z=ue.get(P).__webglMultisampledFramebuffer:Array.isArray(tt)?z=tt[K]:z=tt,R.copy(P.viewport),L.copy(P.scissor),O=P.scissorTest}else R.copy(me).multiplyScalar(H).floor(),L.copy(Le).multiplyScalar(H).floor(),O=De;if(K!==0&&(z=TC),Q.bindFramebuffer(k.FRAMEBUFFER,z)&&q&&Q.drawBuffers(P,z),Q.viewport(R),Q.scissor(L),Q.setScissorTest(O),pe){const Fe=ue.get(P.texture);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,k.TEXTURE_CUBE_MAP_POSITIVE_X+B,Fe.__webglTexture,K)}else if(Pe){const Fe=B;for(let Ze=0;Ze=0&&B<=P.width-q&&K>=0&&K<=P.height-z&&(P.textures.length>1&&k.readBuffer(k.COLOR_ATTACHMENT0+Ue),k.readPixels(B,K,q,z,Ge.convert(tt),Ge.convert(Xe),pe))}finally{const Ze=C!==null?ue.get(C).__webglFramebuffer:null;Q.bindFramebuffer(k.FRAMEBUFFER,Ze)}}},this.readRenderTargetPixelsAsync=async function(P,B,K,q,z,pe,Pe,Ue=0){if(!(P&&P.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Fe=ue.get(P).__webglFramebuffer;if(P.isWebGLCubeRenderTarget&&Pe!==void 0&&(Fe=Fe[Pe]),Fe)if(B>=0&&B<=P.width-q&&K>=0&&K<=P.height-z){Q.bindFramebuffer(k.FRAMEBUFFER,Fe);const Ze=P.textures[Ue],tt=Ze.format,Xe=Ze.type;if(!Y.textureFormatReadable(tt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Y.textureTypeReadable(Xe))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const St=k.createBuffer();k.bindBuffer(k.PIXEL_PACK_BUFFER,St),k.bufferData(k.PIXEL_PACK_BUFFER,pe.byteLength,k.STREAM_READ),P.textures.length>1&&k.readBuffer(k.COLOR_ATTACHMENT0+Ue),k.readPixels(B,K,q,z,Ge.convert(tt),Ge.convert(Xe),0);const Lt=C!==null?ue.get(C).__webglFramebuffer:null;Q.bindFramebuffer(k.FRAMEBUFFER,Lt);const Yt=k.fenceSync(k.SYNC_GPU_COMMANDS_COMPLETE,0);return k.flush(),await GA(k,Yt,4),k.bindBuffer(k.PIXEL_PACK_BUFFER,St),k.getBufferSubData(k.PIXEL_PACK_BUFFER,0,pe),k.deleteBuffer(St),k.deleteSync(Yt),pe}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(P,B=null,K=0){const q=Math.pow(2,-K),z=Math.floor(P.image.width*q),pe=Math.floor(P.image.height*q),Pe=B!==null?B.x:0,Ue=B!==null?B.y:0;ye.setTexture2D(P,0),k.copyTexSubImage2D(k.TEXTURE_2D,K,0,0,Pe,Ue,z,pe),Q.unbindTexture()};const MC=k.createFramebuffer(),EC=k.createFramebuffer();this.copyTextureToTexture=function(P,B,K=null,q=null,z=0,pe=null){pe===null&&(z!==0?(oc("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),pe=z,z=0):pe=0);let Pe,Ue,Fe,Ze,tt,Xe,St,Lt,Yt;const Nt=P.isCompressedTexture?P.mipmaps[pe]:P.image;if(K!==null)Pe=K.max.x-K.min.x,Ue=K.max.y-K.min.y,Fe=K.isBox3?K.max.z-K.min.z:1,Ze=K.min.x,tt=K.min.y,Xe=K.isBox3?K.min.z:0;else{const wi=Math.pow(2,-z);Pe=Math.floor(Nt.width*wi),Ue=Math.floor(Nt.height*wi),P.isDataArrayTexture?Fe=Nt.depth:P.isData3DTexture?Fe=Math.floor(Nt.depth*wi):Fe=1,Ze=0,tt=0,Xe=0}q!==null?(St=q.x,Lt=q.y,Yt=q.z):(St=0,Lt=0,Yt=0);const Dt=Ge.convert(B.format),qe=Ge.convert(B.type);let $t;B.isData3DTexture?(ye.setTexture3D(B,0),$t=k.TEXTURE_3D):B.isDataArrayTexture||B.isCompressedArrayTexture?(ye.setTexture2DArray(B,0),$t=k.TEXTURE_2D_ARRAY):(ye.setTexture2D(B,0),$t=k.TEXTURE_2D),k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,B.flipY),k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,B.premultiplyAlpha),k.pixelStorei(k.UNPACK_ALIGNMENT,B.unpackAlignment);const Tt=k.getParameter(k.UNPACK_ROW_LENGTH),di=k.getParameter(k.UNPACK_IMAGE_HEIGHT),Cr=k.getParameter(k.UNPACK_SKIP_PIXELS),hi=k.getParameter(k.UNPACK_SKIP_ROWS),Qo=k.getParameter(k.UNPACK_SKIP_IMAGES);k.pixelStorei(k.UNPACK_ROW_LENGTH,Nt.width),k.pixelStorei(k.UNPACK_IMAGE_HEIGHT,Nt.height),k.pixelStorei(k.UNPACK_SKIP_PIXELS,Ze),k.pixelStorei(k.UNPACK_SKIP_ROWS,tt),k.pixelStorei(k.UNPACK_SKIP_IMAGES,Xe);const Wt=P.isDataArrayTexture||P.isData3DTexture,xi=B.isDataArrayTexture||B.isData3DTexture;if(P.isDepthTexture){const wi=ue.get(P),Bn=ue.get(B),qn=ue.get(wi.__renderTarget),Uf=ue.get(Bn.__renderTarget);Q.bindFramebuffer(k.READ_FRAMEBUFFER,qn.__webglFramebuffer),Q.bindFramebuffer(k.DRAW_FRAMEBUFFER,Uf.__webglFramebuffer);for(let Ta=0;TaMath.PI&&(i-=jn),s<-Math.PI?s+=jn:s>Math.PI&&(s-=jn),i<=s?this._spherical.theta=Math.max(i,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+s)/2?Math.max(i,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const r=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),a=r!=this._spherical.radius}if(cn.setFromSpherical(this._spherical),cn.applyQuaternion(this._quatInverse),t.copy(this.target).add(cn),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let r=null;if(this.object.isPerspectiveCamera){const o=cn.length();r=this._clampDistance(o*this._scale);const l=o-r;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),a=!!l}else if(this.object.isOrthographicCamera){const o=new T(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),a=l!==this.object.zoom;const c=new T(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),r=cn.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;r!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(r).add(this.object.position):(Cu.origin.copy(this.object.position),Cu.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Cu.direction))Pp||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Pp||this._lastTargetPosition.distanceToSquared(this.target)>Pp?(this.dispatchEvent(gv),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?jn/60*this.autoRotateSpeed*e:jn/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){cn.setFromMatrixColumn(t,0),cn.multiplyScalar(-e),this._panOffset.add(cn)}_panUp(e,t){this.screenSpacePanning===!0?cn.setFromMatrixColumn(t,1):(cn.setFromMatrixColumn(t,0),cn.crossVectors(this.object.up,cn)),cn.multiplyScalar(e),this._panOffset.add(cn)}_pan(e,t){const i=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;cn.copy(s).sub(this.target);let a=cn.length();a*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*a/i.clientHeight,this.object.matrix),this._panUp(2*t*a/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),s=e-i.left,a=t-i.top,r=i.width,o=i.height;this._mouse.x=s/r*2-1,this._mouse.y=-(a/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(jn*this._rotateDelta.x/t.clientHeight),this._rotateUp(jn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(i,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(i,s)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyStart.set(0,a)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),s=.5*(e.pageX+i.x),a=.5*(e.pageY+i.y);this._rotateEnd.set(s,a)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(jn*this._rotateDelta.x/t.clientHeight),this._rotateUp(jn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(i,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyEnd.set(0,a),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const r=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(r,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t(O=F.indexOf(` +}`;class sO{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){const i=new Og(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=i}}getMesh(e){if(this.texture!==null&&this.mesh===null){const t=e.cameras[0].viewport,i=new ri({vertexShader:nO,fragmentShader:iO,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new Se(new Nn(20,20),i)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class aO extends Ts{constructor(e,t){super();const i=this;let s=null,a=1,r=null,o="local-floor",l=1,c=null,u=null,d=null,h=null,f=null,p=null;const g=typeof XRWebGLBinding<"u",_=new sO,m={},v=t.getContextAttributes();let y=null,b=null;const S=[],x=[],M=new ne;let C=null;const w=new Qt;w.viewport=new Ye;const E=new Qt;E.viewport=new Ye;const R=[w,E],L=new BT;let O=null,D=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(Z){let re=S[Z];return re===void 0&&(re=new fd,S[Z]=re),re.getTargetRaySpace()},this.getControllerGrip=function(Z){let re=S[Z];return re===void 0&&(re=new fd,S[Z]=re),re.getGripSpace()},this.getHand=function(Z){let re=S[Z];return re===void 0&&(re=new fd,S[Z]=re),re.getHandSpace()};function U(Z){const re=x.indexOf(Z.inputSource);if(re===-1)return;const Te=S[re];Te!==void 0&&(Te.update(Z.inputSource,Z.frame,c||r),Te.dispatchEvent({type:Z.type,data:Z.inputSource}))}function F(){s.removeEventListener("select",U),s.removeEventListener("selectstart",U),s.removeEventListener("selectend",U),s.removeEventListener("squeeze",U),s.removeEventListener("squeezestart",U),s.removeEventListener("squeezeend",U),s.removeEventListener("end",F),s.removeEventListener("inputsourceschange",W);for(let Z=0;Z=0&&(x[X]=null,S[X].disconnect(Te))}for(let re=0;re=x.length){x.push(Te),X=we;break}else if(x[we]===null){x[we]=Te,X=we;break}if(X===-1)break}const se=S[X];se&&se.connect(Te)}}const H=new T,ie=new T;function le(Z,re,Te){H.setFromMatrixPosition(re.matrixWorld),ie.setFromMatrixPosition(Te.matrixWorld);const X=H.distanceTo(ie),se=re.projectionMatrix.elements,we=Te.projectionMatrix.elements,Re=se[14]/(se[10]-1),k=se[14]/(se[10]+1),G=(se[9]+1)/se[5],j=(se[9]-1)/se[5],Y=(se[8]-1)/se[0],Q=(we[8]+1)/we[0],ge=Re*Y,ue=Re*Q,ye=X/(-Y+Q),We=ye*-Y;if(re.matrixWorld.decompose(Z.position,Z.quaternion,Z.scale),Z.translateX(We),Z.translateZ(ye),Z.matrixWorld.compose(Z.position,Z.quaternion,Z.scale),Z.matrixWorldInverse.copy(Z.matrixWorld).invert(),se[10]===-1)Z.projectionMatrix.copy(re.projectionMatrix),Z.projectionMatrixInverse.copy(re.projectionMatrixInverse);else{const st=Re+ye,I=k+ye,A=ge-We,V=ue+(X-We),J=G*k/I*st,ce=j*k/I*st;Z.projectionMatrix.makePerspective(A,V,J,ce,st,I),Z.projectionMatrixInverse.copy(Z.projectionMatrix).invert()}}function me(Z,re){re===null?Z.matrixWorld.copy(Z.matrix):Z.matrixWorld.multiplyMatrices(re.matrixWorld,Z.matrix),Z.matrixWorldInverse.copy(Z.matrixWorld).invert()}this.updateCamera=function(Z){if(s===null)return;let re=Z.near,Te=Z.far;_.texture!==null&&(_.depthNear>0&&(re=_.depthNear),_.depthFar>0&&(Te=_.depthFar)),L.near=E.near=w.near=re,L.far=E.far=w.far=Te,(O!==L.near||D!==L.far)&&(s.updateRenderState({depthNear:L.near,depthFar:L.far}),O=L.near,D=L.far),L.layers.mask=Z.layers.mask|6,w.layers.mask=L.layers.mask&3,E.layers.mask=L.layers.mask&5;const X=Z.parent,se=L.cameras;me(L,X);for(let we=0;we0&&(_.alphaTest.value=m.alphaTest);const v=e.get(m),y=v.envMap,b=v.envMapRotation;y&&(_.envMap.value=y,Ba.copy(b),Ba.x*=-1,Ba.y*=-1,Ba.z*=-1,y.isCubeTexture&&y.isRenderTargetTexture===!1&&(Ba.y*=-1,Ba.z*=-1),_.envMapRotation.value.setFromMatrix4(rO.makeRotationFromEuler(Ba)),_.flipEnvMap.value=y.isCubeTexture&&y.isRenderTargetTexture===!1?-1:1,_.reflectivity.value=m.reflectivity,_.ior.value=m.ior,_.refractionRatio.value=m.refractionRatio),m.lightMap&&(_.lightMap.value=m.lightMap,_.lightMapIntensity.value=m.lightMapIntensity,t(m.lightMap,_.lightMapTransform)),m.aoMap&&(_.aoMap.value=m.aoMap,_.aoMapIntensity.value=m.aoMapIntensity,t(m.aoMap,_.aoMapTransform))}function r(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform))}function o(_,m){_.dashSize.value=m.dashSize,_.totalSize.value=m.dashSize+m.gapSize,_.scale.value=m.scale}function l(_,m,v,y){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.size.value=m.size*v,_.scale.value=y*.5,m.map&&(_.map.value=m.map,t(m.map,_.uvTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function c(_,m){_.diffuse.value.copy(m.color),_.opacity.value=m.opacity,_.rotation.value=m.rotation,m.map&&(_.map.value=m.map,t(m.map,_.mapTransform)),m.alphaMap&&(_.alphaMap.value=m.alphaMap,t(m.alphaMap,_.alphaMapTransform)),m.alphaTest>0&&(_.alphaTest.value=m.alphaTest)}function u(_,m){_.specular.value.copy(m.specular),_.shininess.value=Math.max(m.shininess,1e-4)}function d(_,m){m.gradientMap&&(_.gradientMap.value=m.gradientMap)}function h(_,m){_.metalness.value=m.metalness,m.metalnessMap&&(_.metalnessMap.value=m.metalnessMap,t(m.metalnessMap,_.metalnessMapTransform)),_.roughness.value=m.roughness,m.roughnessMap&&(_.roughnessMap.value=m.roughnessMap,t(m.roughnessMap,_.roughnessMapTransform)),m.envMap&&(_.envMapIntensity.value=m.envMapIntensity)}function f(_,m,v){_.ior.value=m.ior,m.sheen>0&&(_.sheenColor.value.copy(m.sheenColor).multiplyScalar(m.sheen),_.sheenRoughness.value=m.sheenRoughness,m.sheenColorMap&&(_.sheenColorMap.value=m.sheenColorMap,t(m.sheenColorMap,_.sheenColorMapTransform)),m.sheenRoughnessMap&&(_.sheenRoughnessMap.value=m.sheenRoughnessMap,t(m.sheenRoughnessMap,_.sheenRoughnessMapTransform))),m.clearcoat>0&&(_.clearcoat.value=m.clearcoat,_.clearcoatRoughness.value=m.clearcoatRoughness,m.clearcoatMap&&(_.clearcoatMap.value=m.clearcoatMap,t(m.clearcoatMap,_.clearcoatMapTransform)),m.clearcoatRoughnessMap&&(_.clearcoatRoughnessMap.value=m.clearcoatRoughnessMap,t(m.clearcoatRoughnessMap,_.clearcoatRoughnessMapTransform)),m.clearcoatNormalMap&&(_.clearcoatNormalMap.value=m.clearcoatNormalMap,t(m.clearcoatNormalMap,_.clearcoatNormalMapTransform),_.clearcoatNormalScale.value.copy(m.clearcoatNormalScale),m.side===dn&&_.clearcoatNormalScale.value.negate())),m.dispersion>0&&(_.dispersion.value=m.dispersion),m.iridescence>0&&(_.iridescence.value=m.iridescence,_.iridescenceIOR.value=m.iridescenceIOR,_.iridescenceThicknessMinimum.value=m.iridescenceThicknessRange[0],_.iridescenceThicknessMaximum.value=m.iridescenceThicknessRange[1],m.iridescenceMap&&(_.iridescenceMap.value=m.iridescenceMap,t(m.iridescenceMap,_.iridescenceMapTransform)),m.iridescenceThicknessMap&&(_.iridescenceThicknessMap.value=m.iridescenceThicknessMap,t(m.iridescenceThicknessMap,_.iridescenceThicknessMapTransform))),m.transmission>0&&(_.transmission.value=m.transmission,_.transmissionSamplerMap.value=v.texture,_.transmissionSamplerSize.value.set(v.width,v.height),m.transmissionMap&&(_.transmissionMap.value=m.transmissionMap,t(m.transmissionMap,_.transmissionMapTransform)),_.thickness.value=m.thickness,m.thicknessMap&&(_.thicknessMap.value=m.thicknessMap,t(m.thicknessMap,_.thicknessMapTransform)),_.attenuationDistance.value=m.attenuationDistance,_.attenuationColor.value.copy(m.attenuationColor)),m.anisotropy>0&&(_.anisotropyVector.value.set(m.anisotropy*Math.cos(m.anisotropyRotation),m.anisotropy*Math.sin(m.anisotropyRotation)),m.anisotropyMap&&(_.anisotropyMap.value=m.anisotropyMap,t(m.anisotropyMap,_.anisotropyMapTransform))),_.specularIntensity.value=m.specularIntensity,_.specularColor.value.copy(m.specularColor),m.specularColorMap&&(_.specularColorMap.value=m.specularColorMap,t(m.specularColorMap,_.specularColorMapTransform)),m.specularIntensityMap&&(_.specularIntensityMap.value=m.specularIntensityMap,t(m.specularIntensityMap,_.specularIntensityMapTransform))}function p(_,m){m.matcap&&(_.matcap.value=m.matcap)}function g(_,m){const v=e.get(m).light;_.referencePosition.value.setFromMatrixPosition(v.matrixWorld),_.nearDistance.value=v.shadow.camera.near,_.farDistance.value=v.shadow.camera.far}return{refreshFogUniforms:i,refreshMaterialUniforms:s}}function lO(n,e,t,i){let s={},a={},r=[];const o=n.getParameter(n.MAX_UNIFORM_BUFFER_BINDINGS);function l(v,y){const b=y.program;i.uniformBlockBinding(v,b)}function c(v,y){let b=s[v.id];b===void 0&&(p(v),b=u(v),s[v.id]=b,v.addEventListener("dispose",_));const S=y.program;i.updateUBOMapping(v,S);const x=e.render.frame;a[v.id]!==x&&(h(v),a[v.id]=x)}function u(v){const y=d();v.__bindingPointIndex=y;const b=n.createBuffer(),S=v.__size,x=v.usage;return n.bindBuffer(n.UNIFORM_BUFFER,b),n.bufferData(n.UNIFORM_BUFFER,S,x),n.bindBuffer(n.UNIFORM_BUFFER,null),n.bindBufferBase(n.UNIFORM_BUFFER,y,b),b}function d(){for(let v=0;v0&&(b+=S-x),v.__size=b,v.__cache={},this}function g(v){const y={boundary:0,storage:0};return typeof v=="number"||typeof v=="boolean"?(y.boundary=4,y.storage=4):v.isVector2?(y.boundary=8,y.storage=8):v.isVector3||v.isColor?(y.boundary=16,y.storage=12):v.isVector4?(y.boundary=16,y.storage=16):v.isMatrix3?(y.boundary=48,y.storage=48):v.isMatrix4?(y.boundary=64,y.storage=64):v.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",v),y}function _(v){const y=v.target;y.removeEventListener("dispose",_);const b=r.indexOf(y.__bindingPointIndex);r.splice(b,1),n.deleteBuffer(s[y.id]),delete s[y.id],delete a[y.id]}function m(){for(const v in s)n.deleteBuffer(s[v]);r=[],s={},a={}}return{bind:l,update:c,dispose:m}}class ay{constructor(e={}){const{canvas:t=eT(),context:i=null,depth:s=!0,stencil:a=!1,alpha:r=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:u="default",failIfMajorPerformanceCaveat:d=!1,reversedDepthBuffer:h=!1}=e;this.isWebGLRenderer=!0;let f;if(i!==null){if(typeof WebGLRenderingContext<"u"&&i instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");f=i.getContextAttributes().alpha}else f=r;const p=new Uint32Array(4),g=new Int32Array(4);let _=null,m=null;const v=[],y=[];this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=Vs,this.toneMappingExposure=1,this.transmissionResolutionScale=1;const b=this;let S=!1;this._outputColorSpace=yt;let x=0,M=0,C=null,w=-1,E=null;const R=new Ye,L=new Ye;let O=null;const D=new de(0);let U=0,F=t.width,W=t.height,H=1,ie=null,le=null;const me=new Ye(0,0,F,W),Le=new Ye(0,0,F,W);let De=!1;const Ke=new Ko;let Oe=!1,Z=!1;const re=new Ee,Te=new T,X=new Ye,se={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let we=!1;function Re(){return C===null?H:1}let k=i;function G(P,B){return t.getContext(P,B)}try{const P={alpha:!0,depth:s,stencil:a,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:u,failIfMajorPerformanceCaveat:d};if("setAttribute"in t&&t.setAttribute("data-engine",`three.js r${Xh}`),t.addEventListener("webglcontextlost",xe,!1),t.addEventListener("webglcontextrestored",Ne,!1),t.addEventListener("webglcontextcreationerror",fe,!1),k===null){const B="webgl2";if(k=G(B,P),k===null)throw G(B)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(P){throw console.error("THREE.WebGLRenderer: "+P.message),P}let j,Y,Q,ge,ue,ye,We,st,I,A,V,J,ce,ee,Ve,ve,Be,ze,he,Ie,Qe,Ge,Ae,ft;function N(){j=new bk(k),j.init(),Ge=new ZT(k,j),Y=new fk(k,j,e,Ge),Q=new eO(k,j),Y.reversedDepthBuffer&&h&&Q.buffers.depth.setReversed(!0),ge=new Sk(k),ue=new HD,ye=new tO(k,j,Q,ue,Y,Ge,ge),We=new mk(b),st=new vk(b),I=new RI(k),Ae=new dk(k,I),A=new xk(k,I,ge,Ae),V=new Mk(k,A,I,ge),he=new Tk(k,Y,ye),ve=new pk(ue),J=new zD(b,We,st,j,Y,Ae,ve),ce=new oO(b,ue),ee=new GD,Ve=new YD(j),ze=new uk(b,We,st,Q,V,f,l),Be=new JD(b,V,Y),ft=new lO(k,ge,Y,Q),Ie=new hk(k,j,ge),Qe=new wk(k,j,ge),ge.programs=J.programs,b.capabilities=Y,b.extensions=j,b.properties=ue,b.renderLists=ee,b.shadowMap=Be,b.state=Q,b.info=ge}N();const _e=new aO(b,k);this.xr=_e,this.getContext=function(){return k},this.getContextAttributes=function(){return k.getContextAttributes()},this.forceContextLoss=function(){const P=j.get("WEBGL_lose_context");P&&P.loseContext()},this.forceContextRestore=function(){const P=j.get("WEBGL_lose_context");P&&P.restoreContext()},this.getPixelRatio=function(){return H},this.setPixelRatio=function(P){P!==void 0&&(H=P,this.setSize(F,W,!1))},this.getSize=function(P){return P.set(F,W)},this.setSize=function(P,B,K=!0){if(_e.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}F=P,W=B,t.width=Math.floor(P*H),t.height=Math.floor(B*H),K===!0&&(t.style.width=P+"px",t.style.height=B+"px"),this.setViewport(0,0,P,B)},this.getDrawingBufferSize=function(P){return P.set(F*H,W*H).floor()},this.setDrawingBufferSize=function(P,B,K){F=P,W=B,H=K,t.width=Math.floor(P*K),t.height=Math.floor(B*K),this.setViewport(0,0,P,B)},this.getCurrentViewport=function(P){return P.copy(R)},this.getViewport=function(P){return P.copy(me)},this.setViewport=function(P,B,K,q){P.isVector4?me.set(P.x,P.y,P.z,P.w):me.set(P,B,K,q),Q.viewport(R.copy(me).multiplyScalar(H).round())},this.getScissor=function(P){return P.copy(Le)},this.setScissor=function(P,B,K,q){P.isVector4?Le.set(P.x,P.y,P.z,P.w):Le.set(P,B,K,q),Q.scissor(L.copy(Le).multiplyScalar(H).round())},this.getScissorTest=function(){return De},this.setScissorTest=function(P){Q.setScissorTest(De=P)},this.setOpaqueSort=function(P){ie=P},this.setTransparentSort=function(P){le=P},this.getClearColor=function(P){return P.copy(ze.getClearColor())},this.setClearColor=function(){ze.setClearColor(...arguments)},this.getClearAlpha=function(){return ze.getClearAlpha()},this.setClearAlpha=function(){ze.setClearAlpha(...arguments)},this.clear=function(P=!0,B=!0,K=!0){let q=0;if(P){let z=!1;if(C!==null){const pe=C.texture.format;z=pe===ef||pe===Qh||pe===Ec}if(z){const pe=C.texture.type,Pe=pe===is||pe===Ks||pe===Lo||pe===ko||pe===jh||pe===Zh,Ue=ze.getClearColor(),Fe=ze.getClearAlpha(),Ze=Ue.r,tt=Ue.g,Xe=Ue.b;Pe?(p[0]=Ze,p[1]=tt,p[2]=Xe,p[3]=Fe,k.clearBufferuiv(k.COLOR,0,p)):(g[0]=Ze,g[1]=tt,g[2]=Xe,g[3]=Fe,k.clearBufferiv(k.COLOR,0,g))}else q|=k.COLOR_BUFFER_BIT}B&&(q|=k.DEPTH_BUFFER_BIT),K&&(q|=k.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),k.clear(q)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener("webglcontextlost",xe,!1),t.removeEventListener("webglcontextrestored",Ne,!1),t.removeEventListener("webglcontextcreationerror",fe,!1),ze.dispose(),ee.dispose(),Ve.dispose(),ue.dispose(),We.dispose(),st.dispose(),V.dispose(),Ae.dispose(),ft.dispose(),J.dispose(),_e.dispose(),_e.removeEventListener("sessionstart",as),_e.removeEventListener("sessionend",Uy),Ta.stop()};function xe(P){P.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),S=!0}function Ne(){console.log("THREE.WebGLRenderer: Context Restored."),S=!1;const P=ge.autoReset,B=Be.enabled,K=Be.autoUpdate,q=Be.needsUpdate,z=Be.type;N(),ge.autoReset=P,Be.enabled=B,Be.autoUpdate=K,Be.needsUpdate=q,Be.type=z}function fe(P){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",P.statusMessage)}function oe(P){const B=P.target;B.removeEventListener("dispose",oe),He(B)}function He(P){ct(P),ue.remove(P)}function ct(P){const B=ue.get(P).programs;B!==void 0&&(B.forEach(function(K){J.releaseProgram(K)}),P.isShaderMaterial&&J.releaseShaderCache(P))}this.renderBufferDirect=function(P,B,K,q,z,pe){B===null&&(B=se);const Pe=z.isMesh&&z.matrixWorld.determinant()<0,Ue=LC(P,B,K,q,z);Q.setMaterial(q,Pe);let Fe=K.index,Ze=1;if(q.wireframe===!0){if(Fe=A.getWireframeAttribute(K),Fe===void 0)return;Ze=2}const tt=K.drawRange,Xe=K.attributes.position;let St=tt.start*Ze,Lt=(tt.start+tt.count)*Ze;pe!==null&&(St=Math.max(St,pe.start*Ze),Lt=Math.min(Lt,(pe.start+pe.count)*Ze)),Fe!==null?(St=Math.max(St,0),Lt=Math.min(Lt,Fe.count)):Xe!=null&&(St=Math.max(St,0),Lt=Math.min(Lt,Xe.count));const Yt=Lt-St;if(Yt<0||Yt===1/0)return;Ae.setup(z,q,Ue,K,Fe);let Nt,Dt=Ie;if(Fe!==null&&(Nt=I.get(Fe),Dt=Qe,Dt.setIndex(Nt)),z.isMesh)q.wireframe===!0?(Q.setLineWidth(q.wireframeLinewidth*Re()),Dt.setMode(k.LINES)):Dt.setMode(k.TRIANGLES);else if(z.isLine){let qe=q.linewidth;qe===void 0&&(qe=1),Q.setLineWidth(qe*Re()),z.isLineSegments?Dt.setMode(k.LINES):z.isLineLoop?Dt.setMode(k.LINE_LOOP):Dt.setMode(k.LINE_STRIP)}else z.isPoints?Dt.setMode(k.POINTS):z.isSprite&&Dt.setMode(k.TRIANGLES);if(z.isBatchedMesh)if(z._multiDrawInstances!==null)dc("THREE.WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection."),Dt.renderMultiDrawInstances(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount,z._multiDrawInstances);else if(j.get("WEBGL_multi_draw"))Dt.renderMultiDraw(z._multiDrawStarts,z._multiDrawCounts,z._multiDrawCount);else{const qe=z._multiDrawStarts,$t=z._multiDrawCounts,Tt=z._multiDrawCount,di=Fe?I.get(Fe).bytesPerElement:1,Ar=ue.get(q).currentProgram.getUniforms();for(let hi=0;hi{function pe(){if(q.forEach(function(Pe){ue.get(Pe).currentProgram.isReady()&&q.delete(Pe)}),q.size===0){z(P);return}setTimeout(pe,10)}j.get("KHR_parallel_shader_compile")!==null?pe():setTimeout(pe,10)})};let At=null;function Ms(P){At&&At(P)}function as(){Ta.stop()}function Uy(){Ta.start()}const Ta=new XT;Ta.setAnimationLoop(Ms),typeof self<"u"&&Ta.setContext(self),this.setAnimationLoop=function(P){At=P,_e.setAnimationLoop(P),P===null?Ta.stop():Ta.start()},_e.addEventListener("sessionstart",as),_e.addEventListener("sessionend",Uy),this.render=function(P,B){if(B!==void 0&&B.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(S===!0)return;if(P.matrixWorldAutoUpdate===!0&&P.updateMatrixWorld(),B.parent===null&&B.matrixWorldAutoUpdate===!0&&B.updateMatrixWorld(),_e.enabled===!0&&_e.isPresenting===!0&&(_e.cameraAutoUpdate===!0&&_e.updateCamera(B),B=_e.getCamera()),P.isScene===!0&&P.onBeforeRender(b,P,B,C),m=Ve.get(P,y.length),m.init(B),y.push(m),re.multiplyMatrices(B.projectionMatrix,B.matrixWorldInverse),Ke.setFromProjectionMatrix(re,yi,B.reversedDepth),Z=this.localClippingEnabled,Oe=ve.init(this.clippingPlanes,Z),_=ee.get(P,v.length),_.init(),v.push(_),_e.enabled===!0&&_e.isPresenting===!0){const pe=b.xr.getDepthSensingMesh();pe!==null&&Gf(pe,B,-1/0,b.sortObjects)}Gf(P,B,0,b.sortObjects),_.finish(),b.sortObjects===!0&&_.sort(ie,le),we=_e.enabled===!1||_e.isPresenting===!1||_e.hasDepthSensing()===!1,we&&ze.addToRenderList(_,P),this.info.render.frame++,Oe===!0&&ve.beginShadows();const K=m.state.shadowsArray;Be.render(K,P,B),Oe===!0&&ve.endShadows(),this.info.autoReset===!0&&this.info.reset();const q=_.opaque,z=_.transmissive;if(m.setupLights(),B.isArrayCamera){const pe=B.cameras;if(z.length>0)for(let Pe=0,Ue=pe.length;Pe0&&zy(q,z,P,B),we&&ze.render(P),By(_,P,B);C!==null&&M===0&&(ye.updateMultisampleRenderTarget(C),ye.updateRenderTargetMipmap(C)),P.isScene===!0&&P.onAfterRender(b,P,B),Ae.resetDefaultState(),w=-1,E=null,y.pop(),y.length>0?(m=y[y.length-1],Oe===!0&&ve.setGlobalState(b.clippingPlanes,m.state.camera)):m=null,v.pop(),v.length>0?_=v[v.length-1]:_=null};function Gf(P,B,K,q){if(P.visible===!1)return;if(P.layers.test(B.layers)){if(P.isGroup)K=P.renderOrder;else if(P.isLOD)P.autoUpdate===!0&&P.update(B);else if(P.isLight)m.pushLight(P),P.castShadow&&m.pushShadow(P);else if(P.isSprite){if(!P.frustumCulled||Ke.intersectsSprite(P)){q&&X.setFromMatrixPosition(P.matrixWorld).applyMatrix4(re);const Pe=V.update(P),Ue=P.material;Ue.visible&&_.push(P,Pe,Ue,K,X.z,null)}}else if((P.isMesh||P.isLine||P.isPoints)&&(!P.frustumCulled||Ke.intersectsObject(P))){const Pe=V.update(P),Ue=P.material;if(q&&(P.boundingSphere!==void 0?(P.boundingSphere===null&&P.computeBoundingSphere(),X.copy(P.boundingSphere.center)):(Pe.boundingSphere===null&&Pe.computeBoundingSphere(),X.copy(Pe.boundingSphere.center)),X.applyMatrix4(P.matrixWorld).applyMatrix4(re)),Array.isArray(Ue)){const Fe=Pe.groups;for(let Ze=0,tt=Fe.length;Ze0&&Uc(z,B,K),pe.length>0&&Uc(pe,B,K),Pe.length>0&&Uc(Pe,B,K),Q.buffers.depth.setTest(!0),Q.buffers.depth.setMask(!0),Q.buffers.color.setMask(!0),Q.setPolygonOffset(!1)}function zy(P,B,K,q){if((K.isScene===!0?K.overrideMaterial:null)!==null)return;m.state.transmissionRenderTarget[q.id]===void 0&&(m.state.transmissionRenderTarget[q.id]=new ws(1,1,{generateMipmaps:!0,type:j.has("EXT_color_buffer_half_float")||j.has("EXT_color_buffer_float")?ms:is,minFilter:Li,samples:4,stencilBuffer:a,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:ot.workingColorSpace}));const pe=m.state.transmissionRenderTarget[q.id],Pe=q.viewport||R;pe.setSize(Pe.z*b.transmissionResolutionScale,Pe.w*b.transmissionResolutionScale);const Ue=b.getRenderTarget(),Fe=b.getActiveCubeFace(),Ze=b.getActiveMipmapLevel();b.setRenderTarget(pe),b.getClearColor(D),U=b.getClearAlpha(),U<1&&b.setClearColor(16777215,.5),b.clear(),we&&ze.render(K);const tt=b.toneMapping;b.toneMapping=Vs;const Xe=q.viewport;if(q.viewport!==void 0&&(q.viewport=void 0),m.setupLightsView(q),Oe===!0&&ve.setGlobalState(b.clippingPlanes,q),Uc(P,K,q),ye.updateMultisampleRenderTarget(pe),ye.updateRenderTargetMipmap(pe),j.has("WEBGL_multisampled_render_to_texture")===!1){let St=!1;for(let Lt=0,Yt=B.length;Lt0),Xe=!!K.morphAttributes.position,St=!!K.morphAttributes.normal,Lt=!!K.morphAttributes.color;let Yt=Vs;q.toneMapped&&(C===null||C.isXRRenderTarget===!0)&&(Yt=b.toneMapping);const Nt=K.morphAttributes.position||K.morphAttributes.normal||K.morphAttributes.color,Dt=Nt!==void 0?Nt.length:0,qe=ue.get(q),$t=m.state.lights;if(Oe===!0&&(Z===!0||P!==E)){const Bn=P===E&&q.id===w;ve.setState(q,P,Bn)}let Tt=!1;q.version===qe.__version?(qe.needsLights&&qe.lightsStateVersion!==$t.state.version||qe.outputColorSpace!==Ue||z.isBatchedMesh&&qe.batching===!1||!z.isBatchedMesh&&qe.batching===!0||z.isBatchedMesh&&qe.batchingColor===!0&&z.colorTexture===null||z.isBatchedMesh&&qe.batchingColor===!1&&z.colorTexture!==null||z.isInstancedMesh&&qe.instancing===!1||!z.isInstancedMesh&&qe.instancing===!0||z.isSkinnedMesh&&qe.skinning===!1||!z.isSkinnedMesh&&qe.skinning===!0||z.isInstancedMesh&&qe.instancingColor===!0&&z.instanceColor===null||z.isInstancedMesh&&qe.instancingColor===!1&&z.instanceColor!==null||z.isInstancedMesh&&qe.instancingMorph===!0&&z.morphTexture===null||z.isInstancedMesh&&qe.instancingMorph===!1&&z.morphTexture!==null||qe.envMap!==Fe||q.fog===!0&&qe.fog!==pe||qe.numClippingPlanes!==void 0&&(qe.numClippingPlanes!==ve.numPlanes||qe.numIntersection!==ve.numIntersection)||qe.vertexAlphas!==Ze||qe.vertexTangents!==tt||qe.morphTargets!==Xe||qe.morphNormals!==St||qe.morphColors!==Lt||qe.toneMapping!==Yt||qe.morphTargetsCount!==Dt)&&(Tt=!0):(Tt=!0,qe.__version=q.version);let di=qe.currentProgram;Tt===!0&&(di=Bc(q,B,z));let Ar=!1,hi=!1,nl=!1;const Wt=di.getUniforms(),xi=qe.uniforms;if(Q.useProgram(di.program)&&(Ar=!0,hi=!0,nl=!0),q.id!==w&&(w=q.id,hi=!0),Ar||E!==P){Q.buffers.depth.getReversed()&&P.reversedDepth!==!0&&(P._reversedDepth=!0,P.updateProjectionMatrix()),Wt.setValue(k,"projectionMatrix",P.projectionMatrix),Wt.setValue(k,"viewMatrix",P.matrixWorldInverse);const qn=Wt.map.cameraPosition;qn!==void 0&&qn.setValue(k,Te.setFromMatrixPosition(P.matrixWorld)),Y.logarithmicDepthBuffer&&Wt.setValue(k,"logDepthBufFC",2/(Math.log(P.far+1)/Math.LN2)),(q.isMeshPhongMaterial||q.isMeshToonMaterial||q.isMeshLambertMaterial||q.isMeshBasicMaterial||q.isMeshStandardMaterial||q.isShaderMaterial)&&Wt.setValue(k,"isOrthographic",P.isOrthographicCamera===!0),E!==P&&(E=P,hi=!0,nl=!0)}if(z.isSkinnedMesh){Wt.setOptional(k,z,"bindMatrix"),Wt.setOptional(k,z,"bindMatrixInverse");const Bn=z.skeleton;Bn&&(Bn.boneTexture===null&&Bn.computeBoneTexture(),Wt.setValue(k,"boneTexture",Bn.boneTexture,ye))}z.isBatchedMesh&&(Wt.setOptional(k,z,"batchingTexture"),Wt.setValue(k,"batchingTexture",z._matricesTexture,ye),Wt.setOptional(k,z,"batchingIdTexture"),Wt.setValue(k,"batchingIdTexture",z._indirectTexture,ye),Wt.setOptional(k,z,"batchingColorTexture"),z._colorsTexture!==null&&Wt.setValue(k,"batchingColorTexture",z._colorsTexture,ye));const wi=K.morphAttributes;if((wi.position!==void 0||wi.normal!==void 0||wi.color!==void 0)&&he.update(z,K,di),(hi||qe.receiveShadow!==z.receiveShadow)&&(qe.receiveShadow=z.receiveShadow,Wt.setValue(k,"receiveShadow",z.receiveShadow)),q.isMeshGouraudMaterial&&q.envMap!==null&&(xi.envMap.value=Fe,xi.flipEnvMap.value=Fe.isCubeTexture&&Fe.isRenderTargetTexture===!1?-1:1),q.isMeshStandardMaterial&&q.envMap===null&&B.environment!==null&&(xi.envMapIntensity.value=B.environmentIntensity),hi&&(Wt.setValue(k,"toneMappingExposure",b.toneMappingExposure),qe.needsLights&&kC(xi,nl),pe&&q.fog===!0&&ce.refreshFogUniforms(xi,pe),ce.refreshMaterialUniforms(xi,q,H,W,m.state.transmissionRenderTarget[P.id]),pd.upload(k,Vy(qe),xi,ye)),q.isShaderMaterial&&q.uniformsNeedUpdate===!0&&(pd.upload(k,Vy(qe),xi,ye),q.uniformsNeedUpdate=!1),q.isSpriteMaterial&&Wt.setValue(k,"center",z.center),Wt.setValue(k,"modelViewMatrix",z.modelViewMatrix),Wt.setValue(k,"normalMatrix",z.normalMatrix),Wt.setValue(k,"modelMatrix",z.matrixWorld),q.isShaderMaterial||q.isRawShaderMaterial){const Bn=q.uniformsGroups;for(let qn=0,$f=Bn.length;qn<$f;qn++){const Ma=Bn[qn];ft.update(Ma,di),ft.bind(Ma,di)}}return di}function kC(P,B){P.ambientLightColor.needsUpdate=B,P.lightProbe.needsUpdate=B,P.directionalLights.needsUpdate=B,P.directionalLightShadows.needsUpdate=B,P.pointLights.needsUpdate=B,P.pointLightShadows.needsUpdate=B,P.spotLights.needsUpdate=B,P.spotLightShadows.needsUpdate=B,P.rectAreaLights.needsUpdate=B,P.hemisphereLights.needsUpdate=B}function DC(P){return P.isMeshLambertMaterial||P.isMeshToonMaterial||P.isMeshPhongMaterial||P.isMeshStandardMaterial||P.isShadowMaterial||P.isShaderMaterial&&P.lights===!0}this.getActiveCubeFace=function(){return x},this.getActiveMipmapLevel=function(){return M},this.getRenderTarget=function(){return C},this.setRenderTargetTextures=function(P,B,K){const q=ue.get(P);q.__autoAllocateDepthBuffer=P.resolveDepthBuffer===!1,q.__autoAllocateDepthBuffer===!1&&(q.__useRenderToTexture=!1),ue.get(P.texture).__webglTexture=B,ue.get(P.depthTexture).__webglTexture=q.__autoAllocateDepthBuffer?void 0:K,q.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(P,B){const K=ue.get(P);K.__webglFramebuffer=B,K.__useDefaultFramebuffer=B===void 0};const OC=k.createFramebuffer();this.setRenderTarget=function(P,B=0,K=0){C=P,x=B,M=K;let q=!0,z=null,pe=!1,Pe=!1;if(P){const Fe=ue.get(P);if(Fe.__useDefaultFramebuffer!==void 0)Q.bindFramebuffer(k.FRAMEBUFFER,null),q=!1;else if(Fe.__webglFramebuffer===void 0)ye.setupRenderTarget(P);else if(Fe.__hasExternalTextures)ye.rebindTextures(P,ue.get(P.texture).__webglTexture,ue.get(P.depthTexture).__webglTexture);else if(P.depthBuffer){const Xe=P.depthTexture;if(Fe.__boundDepthTexture!==Xe){if(Xe!==null&&ue.has(Xe)&&(P.width!==Xe.image.width||P.height!==Xe.image.height))throw new Error("WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.");ye.setupDepthRenderbuffer(P)}}const Ze=P.texture;(Ze.isData3DTexture||Ze.isDataArrayTexture||Ze.isCompressedArrayTexture)&&(Pe=!0);const tt=ue.get(P).__webglFramebuffer;P.isWebGLCubeRenderTarget?(Array.isArray(tt[B])?z=tt[B][K]:z=tt[B],pe=!0):P.samples>0&&ye.useMultisampledRTT(P)===!1?z=ue.get(P).__webglMultisampledFramebuffer:Array.isArray(tt)?z=tt[K]:z=tt,R.copy(P.viewport),L.copy(P.scissor),O=P.scissorTest}else R.copy(me).multiplyScalar(H).floor(),L.copy(Le).multiplyScalar(H).floor(),O=De;if(K!==0&&(z=OC),Q.bindFramebuffer(k.FRAMEBUFFER,z)&&q&&Q.drawBuffers(P,z),Q.viewport(R),Q.scissor(L),Q.setScissorTest(O),pe){const Fe=ue.get(P.texture);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,k.TEXTURE_CUBE_MAP_POSITIVE_X+B,Fe.__webglTexture,K)}else if(Pe){const Fe=B;for(let Ze=0;Ze=0&&B<=P.width-q&&K>=0&&K<=P.height-z&&(P.textures.length>1&&k.readBuffer(k.COLOR_ATTACHMENT0+Ue),k.readPixels(B,K,q,z,Ge.convert(tt),Ge.convert(Xe),pe))}finally{const Ze=C!==null?ue.get(C).__webglFramebuffer:null;Q.bindFramebuffer(k.FRAMEBUFFER,Ze)}}},this.readRenderTargetPixelsAsync=async function(P,B,K,q,z,pe,Pe,Ue=0){if(!(P&&P.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let Fe=ue.get(P).__webglFramebuffer;if(P.isWebGLCubeRenderTarget&&Pe!==void 0&&(Fe=Fe[Pe]),Fe)if(B>=0&&B<=P.width-q&&K>=0&&K<=P.height-z){Q.bindFramebuffer(k.FRAMEBUFFER,Fe);const Ze=P.textures[Ue],tt=Ze.format,Xe=Ze.type;if(!Y.textureFormatReadable(tt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!Y.textureTypeReadable(Xe))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");const St=k.createBuffer();k.bindBuffer(k.PIXEL_PACK_BUFFER,St),k.bufferData(k.PIXEL_PACK_BUFFER,pe.byteLength,k.STREAM_READ),P.textures.length>1&&k.readBuffer(k.COLOR_ATTACHMENT0+Ue),k.readPixels(B,K,q,z,Ge.convert(tt),Ge.convert(Xe),0);const Lt=C!==null?ue.get(C).__webglFramebuffer:null;Q.bindFramebuffer(k.FRAMEBUFFER,Lt);const Yt=k.fenceSync(k.SYNC_GPU_COMMANDS_COMPLETE,0);return k.flush(),await eR(k,Yt,4),k.bindBuffer(k.PIXEL_PACK_BUFFER,St),k.getBufferSubData(k.PIXEL_PACK_BUFFER,0,pe),k.deleteBuffer(St),k.deleteSync(Yt),pe}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")},this.copyFramebufferToTexture=function(P,B=null,K=0){const q=Math.pow(2,-K),z=Math.floor(P.image.width*q),pe=Math.floor(P.image.height*q),Pe=B!==null?B.x:0,Ue=B!==null?B.y:0;ye.setTexture2D(P,0),k.copyTexSubImage2D(k.TEXTURE_2D,K,0,0,Pe,Ue,z,pe),Q.unbindTexture()};const FC=k.createFramebuffer(),NC=k.createFramebuffer();this.copyTextureToTexture=function(P,B,K=null,q=null,z=0,pe=null){pe===null&&(z!==0?(dc("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),pe=z,z=0):pe=0);let Pe,Ue,Fe,Ze,tt,Xe,St,Lt,Yt;const Nt=P.isCompressedTexture?P.mipmaps[pe]:P.image;if(K!==null)Pe=K.max.x-K.min.x,Ue=K.max.y-K.min.y,Fe=K.isBox3?K.max.z-K.min.z:1,Ze=K.min.x,tt=K.min.y,Xe=K.isBox3?K.min.z:0;else{const wi=Math.pow(2,-z);Pe=Math.floor(Nt.width*wi),Ue=Math.floor(Nt.height*wi),P.isDataArrayTexture?Fe=Nt.depth:P.isData3DTexture?Fe=Math.floor(Nt.depth*wi):Fe=1,Ze=0,tt=0,Xe=0}q!==null?(St=q.x,Lt=q.y,Yt=q.z):(St=0,Lt=0,Yt=0);const Dt=Ge.convert(B.format),qe=Ge.convert(B.type);let $t;B.isData3DTexture?(ye.setTexture3D(B,0),$t=k.TEXTURE_3D):B.isDataArrayTexture||B.isCompressedArrayTexture?(ye.setTexture2DArray(B,0),$t=k.TEXTURE_2D_ARRAY):(ye.setTexture2D(B,0),$t=k.TEXTURE_2D),k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,B.flipY),k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,B.premultiplyAlpha),k.pixelStorei(k.UNPACK_ALIGNMENT,B.unpackAlignment);const Tt=k.getParameter(k.UNPACK_ROW_LENGTH),di=k.getParameter(k.UNPACK_IMAGE_HEIGHT),Ar=k.getParameter(k.UNPACK_SKIP_PIXELS),hi=k.getParameter(k.UNPACK_SKIP_ROWS),nl=k.getParameter(k.UNPACK_SKIP_IMAGES);k.pixelStorei(k.UNPACK_ROW_LENGTH,Nt.width),k.pixelStorei(k.UNPACK_IMAGE_HEIGHT,Nt.height),k.pixelStorei(k.UNPACK_SKIP_PIXELS,Ze),k.pixelStorei(k.UNPACK_SKIP_ROWS,tt),k.pixelStorei(k.UNPACK_SKIP_IMAGES,Xe);const Wt=P.isDataArrayTexture||P.isData3DTexture,xi=B.isDataArrayTexture||B.isData3DTexture;if(P.isDepthTexture){const wi=ue.get(P),Bn=ue.get(B),qn=ue.get(wi.__renderTarget),$f=ue.get(Bn.__renderTarget);Q.bindFramebuffer(k.READ_FRAMEBUFFER,qn.__webglFramebuffer),Q.bindFramebuffer(k.DRAW_FRAMEBUFFER,$f.__webglFramebuffer);for(let Ma=0;MaMath.PI&&(i-=jn),s<-Math.PI?s+=jn:s>Math.PI&&(s-=jn),i<=s?this._spherical.theta=Math.max(i,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+s)/2?Math.max(i,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let a=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const r=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),a=r!=this._spherical.radius}if(cn.setFromSpherical(this._spherical),cn.applyQuaternion(this._quatInverse),t.copy(this.target).add(cn),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let r=null;if(this.object.isPerspectiveCamera){const o=cn.length();r=this._clampDistance(o*this._scale);const l=o-r;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),a=!!l}else if(this.object.isOrthographicCamera){const o=new T(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),a=l!==this.object.zoom;const c=new T(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),r=cn.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;r!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(r).add(this.object.position):(Iu.origin.copy(this.object.position),Iu.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Iu.direction))Fp||8*(1-this._lastQuaternion.dot(this.object.quaternion))>Fp||this._lastTargetPosition.distanceToSquared(this.target)>Fp?(this.dispatchEvent(Tv),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e!==null?jn/60*this.autoRotateSpeed*e:jn/60/60*this.autoRotateSpeed}_getZoomScale(e){const t=Math.abs(e*.01);return Math.pow(.95,this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){cn.setFromMatrixColumn(t,0),cn.multiplyScalar(-e),this._panOffset.add(cn)}_panUp(e,t){this.screenSpacePanning===!0?cn.setFromMatrixColumn(t,1):(cn.setFromMatrixColumn(t,0),cn.crossVectors(this.object.up,cn)),cn.multiplyScalar(e),this._panOffset.add(cn)}_pan(e,t){const i=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;cn.copy(s).sub(this.target);let a=cn.length();a*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*a/i.clientHeight,this.object.matrix),this._panUp(2*t*a/i.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/i.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/i.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const i=this.domElement.getBoundingClientRect(),s=e-i.left,a=t-i.top,r=i.width,o=i.height;this._mouse.x=s/r*2-1,this._mouse.y=-(a/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(jn*this._rotateDelta.x/t.clientHeight),this._rotateUp(jn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-jn*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._rotateStart.set(i,s)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panStart.set(i,s)}}_handleTouchStartDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyStart.set(0,a)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{const i=this._getSecondPointerPosition(e),s=.5*(e.pageX+i.x),a=.5*(e.pageY+i.y);this._rotateEnd.set(s,a)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const t=this.domElement;this._rotateLeft(jn*this._rotateDelta.x/t.clientHeight),this._rotateUp(jn*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{const t=this._getSecondPointerPosition(e),i=.5*(e.pageX+t.x),s=.5*(e.pageY+t.y);this._panEnd.set(i,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){const t=this._getSecondPointerPosition(e),i=e.pageX-t.x,s=e.pageY-t.y,a=Math.sqrt(i*i+s*s);this._dollyEnd.set(0,a),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const r=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(r,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t(O=F.indexOf(` `))&&D=C.byteLength||!(U=d(C)))&&r(1,"no header found"),(F=U.match(w))||r(3,"bad initial token"),D.valid|=1,D.programtype=F[1],D.string+=U+` `;U=d(C),U!==!1;){if(D.string+=U+` `,U.charAt(0)==="#"){D.comments+=U+` -`;continue}if((F=U.match(E))&&(D.gamma=parseFloat(F[1])),(F=U.match(R))&&(D.exposure=parseFloat(F[1])),(F=U.match(L))&&(D.valid|=2,D.format=F[1]),(F=U.match(O))&&(D.valid|=4,D.height=parseInt(F[1],10),D.width=parseInt(F[2],10)),D.valid&2&&D.valid&4)break}return D.valid&2||r(3,"missing format specifier"),D.valid&4||r(3,"missing image size specifier"),D},f=function(C,w,E){const R=w;if(R<8||R>32767||C[0]!==2||C[1]!==2||C[2]&128)return new Uint8Array(C);R!==(C[2]<<8|C[3])&&r(3,"wrong scanline width");const L=new Uint8Array(4*w*E);L.length||r(4,"unable to allocate buffer space");let O=0,D=0;const U=4*R,F=new Uint8Array(4),W=new Uint8Array(U);let H=E;for(;H>0&&DC.byteLength&&r(1),F[0]=C[D++],F[1]=C[D++],F[2]=C[D++],F[3]=C[D++],(F[0]!=2||F[1]!=2||(F[2]<<8|F[3])!=R)&&r(3,"bad rgbe scanline format");let ie=0,le;for(;ie128;if(Le&&(le-=128),(le===0||ie+le>U)&&r(3,"bad scanline data"),Le){const De=C[D++];for(let Ke=0;Ke{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(const t of e)t.dispose()}}function Yr(n){return new xf({color:0,emissive:16777215,emissiveIntensity:n})}let $T=null;function mO(){return typeof document<"u"&&document.baseURI?document.baseURI:typeof window<"u"&&window.location?.href?window.location.href:import.meta.url}function _O(){return"./"}function gO(n){return/^[a-z][a-z\d+\-.]*:/i.test(n)||n.startsWith("//")}function yO(n=$T){const e=n==null||n===""?_O():String(n);return new URL(e,mO()).href}function Ri(n,e=$T){const t=String(n);return gO(t)?t:new URL(t.replace(/^\/+/,""),yO(e)).href}class vO{constructor(e,t={}){if(this.container=typeof e=="string"?document.getElementById(e):e,this.assetBase=t.assetBase,!this.container){console.error("Invalid container passed to SceneManager");return}this.scene=new Tc,this.scene.background=new de(8900331);const i=this.container.clientWidth,s=this.container.clientHeight;this.camera=new Qt(75,i/s,10,5e4),this.camera.position.set(0,2e3,5e3),this.renderer=new Jg({antialias:!0,preserveDrawingBuffer:t.preserveDrawingBuffer===!0}),this.renderer.setSize(i,s),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=ug,this.renderer.toneMapping=hg,this.renderer.toneMappingExposure=1,this.renderer.outputColorSpace=yt,this.container.appendChild(this.renderer.domElement),window.addEventListener("resize",()=>this.onWindowResize())}initDefaultEnvironment(){if(!this._neutralEnvTexture){const e=new bh(this.renderer);this._neutralEnvTexture=e.fromScene(new pO,.04).texture,e.dispose()}if(this.scene.environment=this._neutralEnvTexture,!this._defaultLightsAdded){const e=new Ko(16777215,1.5);e.position.set(3e3,8e3,4e3),this.scene.add(e);const t=new Pc(16777215,.4);this.scene.add(t),this._defaultLightsAdded=!0}}applyEnvironment(e){return new Promise(t=>{const i=new fO,s=Ri(e.skyboxUrl,this.assetBase);i.load(s,a=>{this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),a.mapping=pr,this.scene.background=a,this.scene.environment=a,this.currentEnvironmentId=e.id;const r=e.rotation??{};this._skyboxBaseRotation={x:bt.degToRad(r.x??0),y:bt.degToRad(r.y??0),z:bt.degToRad(r.z??0)},this._skyboxAnimatedY=0,this._skyboxAnimation=e.animation??null,this._applySkyboxRotation(),typeof e.exposure=="number"&&(this.renderer.toneMappingExposure=e.exposure),console.log(`[SceneManager] environment applied: ${e.id}`),t(!0)},void 0,a=>{console.error(`[SceneManager] Failed to load environment "${e.id}":`,a),t(!1)})})}_applySkyboxRotation(){const e=this._skyboxBaseRotation;if(!e)return;const t=e.y+(this._skyboxAnimatedY??0);this.scene.backgroundRotation&&this.scene.backgroundRotation.set(e.x,t,e.z),this.scene.environmentRotation&&this.scene.environmentRotation.set(e.x,t,e.z)}updateSkyboxAnimation(e){const t=this._skyboxAnimation;!t||!t.enabled||!e||(this._skyboxAnimatedY=(this._skyboxAnimatedY??0)+bt.degToRad(t.speed*e),this._applySkyboxRotation())}setDefaultBackground(){this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),this.scene.background=new de(1710638),this.initDefaultEnvironment(),this.renderer.toneMappingExposure=1,this._skyboxAnimation=null,this._skyboxBaseRotation=null,this.currentEnvironmentId=null,console.log("[SceneManager] Using neutral default environment (no skybox)")}setExposure(e){this.renderer&&(this.renderer.toneMappingExposure=e)}onWindowResize(){if(!this.container||!this.renderer)return;const e=this.container.clientWidth,t=this.container.clientHeight;this.camera.aspect=e/t,this.camera.updateProjectionMatrix(),this.renderer.setSize(e,t)}render(){this.renderer&&this.renderer.render(this.scene,this.camera)}dispose(){this.renderer&&(this.renderer.dispose(),this.renderer.domElement&&this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement),this.renderer=null)}}function vv(n,e){if(e===kS)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),n;if(e===mh||e===xg){let t=n.getIndex();if(t===null){const r=[],o=n.getAttribute("position");if(o!==void 0){for(let l=0;l=2.0 are supported."));return}const c=new JO(a,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let u=0;u=0&&o[d]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+d+'".')}}c.setExtensions(r),c.setPlugins(o),c.parse(i,s)}parseAsync(e,t){const i=this;return new Promise(function(s,a){i.parse(e,t,s,a)})}}function bO(){let n={};return{get:function(e){return n[e]},add:function(e,t){n[e]=t},remove:function(e){delete n[e]},removeAll:function(){n={}}}}const wt={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class xO{constructor(e){this.parser=e,this.name=wt.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,a.source,r)}}class OO{constructor(e){this.parser=e,this.name=wt.EXT_TEXTURE_WEBP}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class FO{constructor(e){this.parser=e,this.name=wt.EXT_TEXTURE_AVIF}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class NO{constructor(e){this.name=wt.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const s=i.extensions[this.name],a=this.parser.getDependency("buffer",s.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return a.then(function(o){const l=s.byteOffset||0,c=s.byteLength||0,u=s.count,d=s.byteStride,h=new Uint8Array(o,l,c);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(u,d,h,s.mode,s.filter).then(function(f){return f.buffer}):r.ready.then(function(){const f=new ArrayBuffer(u*d);return r.decodeGltfBuffer(new Uint8Array(f),u,d,h,s.mode,s.filter),f})})}else return null}}class UO{constructor(e){this.name=wt.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;const s=t.meshes[i.mesh];for(const c of s.primitives)if(c.mode!==Ci.TRIANGLES&&c.mode!==Ci.TRIANGLE_STRIP&&c.mode!==Ci.TRIANGLE_FAN&&c.mode!==void 0)return null;const r=i.extensions[this.name].attributes,o=[],l={};for(const c in r)o.push(this.parser.getDependency("accessor",r[c]).then(u=>(l[c]=u,l[c])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(c=>{const u=c.pop(),d=u.isGroup?u.children:[u],h=c[0].count,f=[];for(const p of d){const g=new Ee,_=new T,m=new ht,v=new T(1,1,1),y=new of(p.geometry,p.material,h);for(let b=0;b0||n.search(/^data\:image\/jpeg/)===0?"image/jpeg":n.search(/\.webp($|\?)/i)>0||n.search(/^data\:image\/webp/)===0?"image/webp":n.search(/\.ktx2($|\?)/i)>0||n.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const ZO=new Ee;class JO{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new bO,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,s=-1,a=!1,r=-1;if(typeof navigator<"u"){const o=navigator.userAgent;i=/^((?!chrome|android).)*safari/i.test(o)===!0;const l=o.match(/Version\/(\d+)/);s=i&&l?parseInt(l[1],10):-1,a=o.indexOf("Firefox")>-1,r=a?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||i&&s<17||a&&r<98?this.textureLoader=new wf(this.options.manager):this.textureLoader=new RT(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Kn(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,s=this.json,a=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(r){return r._markDefs&&r._markDefs()}),Promise.all(this._invokeAll(function(r){return r.beforeRoot&&r.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(r){const o={scene:r[0][s.scene||0],scenes:r[0],animations:r[1],cameras:r[2],asset:s.asset,parser:i,userData:{}};return Ba(a,o,s),fs(o,s),Promise.all(i._invokeAll(function(l){return l.afterRoot&&l.afterRoot(o)})).then(function(){for(const l of o.scenes)l.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let s=0,a=t.length;s{const l=this.associations.get(r);l!=null&&this.associations.set(o,l);for(const[c,u]of r.children.entries())a(u,o.children[c])};return a(i,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i=2&&_.setY(w,x[M*l+1]),l>=3&&_.setZ(w,x[M*l+2]),l>=4&&_.setW(w,x[M*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}_.normalized=p}return _})}loadTexture(e){const t=this.json,i=this.options,a=t.textures[e].source,r=t.images[a];let o=this.textureLoader;if(r.uri){const l=i.manager.getHandler(r.uri);l!==null&&(o=l)}return this.loadTextureImage(e,a,o)}loadTextureImage(e,t,i){const s=this,a=this.json,r=a.textures[e],o=a.images[t],l=(o.uri||o.bufferView)+":"+r.sampler;if(this.textureCache[l])return this.textureCache[l];const c=this.loadImageSource(t,i).then(function(u){u.flipY=!1,u.name=r.name||o.name||"",u.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(u.name=o.uri);const h=(a.samplers||{})[r.sampler]||{};return u.magFilter=xv[h.magFilter]||Gt,u.minFilter=xv[h.minFilter]||Ii,u.wrapS=wv[h.wrapS]||xs,u.wrapT=wv[h.wrapT]||xs,u.generateMipmaps=!u.isCompressedTexture&&u.minFilter!==hn&&u.minFilter!==Gt,s.associations.set(u,{textures:e}),u}).catch(function(){return null});return this.textureCache[l]=c,c}loadImageSource(e,t){const i=this,s=this.json,a=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(d=>d.clone());const r=s.images[e],o=self.URL||self.webkitURL;let l=r.uri||"",c=!1;if(r.bufferView!==void 0)l=i.getDependency("bufferView",r.bufferView).then(function(d){c=!0;const h=new Blob([d],{type:r.mimeType});return l=o.createObjectURL(h),l});else if(r.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const u=Promise.resolve(l).then(function(d){return new Promise(function(h,f){let p=h;t.isImageBitmapLoader===!0&&(p=function(g){const _=new zt(g);_.needsUpdate=!0,h(_)}),t.load(Ws.resolveURL(d,a.path),p,void 0,f)})}).then(function(d){return c===!0&&o.revokeObjectURL(l),fs(d,r),d.userData.mimeType=r.mimeType||jO(r.uri),d}).catch(function(d){throw console.error("THREE.GLTFLoader: Couldn't load texture",l),d});return this.sourceCache[e]=u,u}assignTexture(e,t,i,s){const a=this;return this.getDependency("texture",i.index).then(function(r){if(!r)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(r=r.clone(),r.channel=i.texCoord),a.extensions[wt.KHR_TEXTURE_TRANSFORM]){const o=i.extensions!==void 0?i.extensions[wt.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const l=a.associations.get(r);r=a.extensions[wt.KHR_TEXTURE_TRANSFORM].extendTexture(r,o),a.associations.set(r,l)}}return s!==void 0&&(r.colorSpace=s),e[t]=r,r})}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const s=t.attributes.tangent===void 0,a=t.attributes.color!==void 0,r=t.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new ha,en.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,l.sizeAttenuation=!1,this.cache.add(o,l)),i=l}else if(e.isLine){const o="LineBasicMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new Pt,en.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,this.cache.add(o,l)),i=l}if(s||a||r){let o="ClonedMaterial:"+i.uuid+":";s&&(o+="derivative-tangents:"),a&&(o+="vertex-colors:"),r&&(o+="flat-shading:");let l=this.cache.get(o);l||(l=i.clone(),a&&(l.vertexColors=!0),r&&(l.flatShading=!0),s&&(l.normalScale&&(l.normalScale.y*=-1),l.clearcoatNormalScale&&(l.clearcoatNormalScale.y*=-1)),this.cache.add(o,l),this.associations.set(l,this.associations.get(i))),i=l}e.material=i}getMaterialType(){return kn}loadMaterial(e){const t=this,i=this.json,s=this.extensions,a=i.materials[e];let r;const o={},l=a.extensions||{},c=[];if(l[wt.KHR_MATERIALS_UNLIT]){const d=s[wt.KHR_MATERIALS_UNLIT];r=d.getMaterialType(),c.push(d.extendParams(o,a,t))}else{const d=a.pbrMetallicRoughness||{};if(o.color=new de(1,1,1),o.opacity=1,Array.isArray(d.baseColorFactor)){const h=d.baseColorFactor;o.color.setRGB(h[0],h[1],h[2],wn),o.opacity=h[3]}d.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",d.baseColorTexture,yt)),o.metalness=d.metallicFactor!==void 0?d.metallicFactor:1,o.roughness=d.roughnessFactor!==void 0?d.roughnessFactor:1,d.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,"metalnessMap",d.metallicRoughnessTexture)),c.push(t.assignTexture(o,"roughnessMap",d.metallicRoughnessTexture))),r=this._invokeOne(function(h){return h.getMaterialType&&h.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(h){return h.extendMaterialParams&&h.extendMaterialParams(e,o)})))}a.doubleSided===!0&&(o.side=ut);const u=a.alphaMode||Lp.OPAQUE;if(u===Lp.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,u===Lp.MASK&&(o.alphaTest=a.alphaCutoff!==void 0?a.alphaCutoff:.5)),a.normalTexture!==void 0&&r!==je&&(c.push(t.assignTexture(o,"normalMap",a.normalTexture)),o.normalScale=new ne(1,1),a.normalTexture.scale!==void 0)){const d=a.normalTexture.scale;o.normalScale.set(d,d)}if(a.occlusionTexture!==void 0&&r!==je&&(c.push(t.assignTexture(o,"aoMap",a.occlusionTexture)),a.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=a.occlusionTexture.strength)),a.emissiveFactor!==void 0&&r!==je){const d=a.emissiveFactor;o.emissive=new de().setRGB(d[0],d[1],d[2],wn)}return a.emissiveTexture!==void 0&&r!==je&&c.push(t.assignTexture(o,"emissiveMap",a.emissiveTexture,yt)),Promise.all(c).then(function(){const d=new r(o);return a.name&&(d.name=a.name),fs(d,a),t.associations.set(d,{materials:e}),a.extensions&&Ba(s,d,a),d})}createUniqueName(e){const t=vt.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,s=this.primitiveCache;function a(o){return i[wt.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return Sv(l,o,t)})}const r=[];for(let o=0,l=e.length;o0&&qO(m,a),m.name=t.createUniqueName(a.name||"mesh_"+e),fs(m,a),_.extensions&&Ba(s,m,_),t.assignFinalMaterial(m),d.push(m)}for(let f=0,p=d.length;f1?u=new Et:c.length===1?u=c[0]:u=new et,u!==c[0])for(let d=0,h=c.length;d1){const d=s.associations.get(u);s.associations.set(u,{...d})}return s.associations.get(u).nodes=e,u}),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],s=this,a=new Et;i.name&&(a.name=s.createUniqueName(i.name)),fs(a,i),i.extensions&&Ba(t,a,i);const r=i.nodes||[],o=[];for(let l=0,c=r.length;l{const d=new Map;for(const[h,f]of s.associations)(h instanceof en||h instanceof zt)&&d.set(h,f);return u.traverse(h=>{const f=s.associations.get(h);f!=null&&d.set(h,f)}),d};return s.associations=c(a),a})}_createAnimationTracks(e,t,i,s,a){const r=[],o=e.name?e.name:e.uuid,l=[];ia[a.path]===ia.weights?e.traverse(function(h){h.morphTargetInfluences&&l.push(h.name?h.name:h.uuid)}):l.push(o);let c;switch(ia[a.path]){case ia.weights:c=ga;break;case ia.rotation:c=Ss;break;case ia.translation:case ia.scale:c=qs;break;default:i.itemSize===1?c=ga:c=qs;break}const u=s.interpolation!==void 0?WO[s.interpolation]:mr,d=this._getArrayFromAccessor(i);for(let h=0,f=l.length;h{this.parse(r,t,s)},i,s)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,yt,i).catch(i)}decodeDracoFile(e,t,i,s,a=wn,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:a};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(Dp.has(e)){const l=Dp.get(e);if(l.key===i)return l.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let s;const a=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(a,r).then(l=>(s=l,new Promise((c,u)=>{s._callbacks[a]={resolve:c,reject:u},s.postMessage({type:"decode",id:a,taskConfig:t,buffer:e},[e])}))).then(l=>this._createGeometry(l.geometry));return o.catch(()=>!0).then(()=>{s&&a&&this._releaseTask(s,a)}),Dp.set(e,{key:i,promise:o}),o}_createGeometry(e){const t=new $e;e.index&&t.setIndex(new ot(e.index.array,1));for(let i=0;i{i.load(e,s,void 0,a)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(i=>{const s=i[0];e||(this.decoderConfig.wasmBinary=i[1]);const a=eF.toString(),r=["/* draco decoder */",s,"","/* worker */",a.substring(a.indexOf("{")+1,a.lastIndexOf("}"))].join(` -`);this.workerSourceURL=URL.createObjectURL(new Blob([r]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtha._taskLoad?-1:1});const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{const d=u.draco,h=new d.Decoder;try{const f=t(d,h,new Int8Array(l),c),p=f.attributes.map(g=>g.array.buffer);f.index&&p.push(f.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:f},p)}catch(f){console.error(f),self.postMessage({type:"error",id:o.id,error:f.message})}finally{d.destroy(h)}});break}};function t(r,o,l,c){const u=c.attributeIDs,d=c.attributeTypes;let h,f;const p=o.GetEncodedGeometryType(l);if(p===r.TRIANGULAR_MESH)h=new r.Mesh,f=o.DecodeArrayToMesh(l,l.byteLength,h);else if(p===r.POINT_CLOUD)h=new r.PointCloud,f=o.DecodeArrayToPointCloud(l,l.byteLength,h);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!f.ok()||h.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+f.error_msg());const g={index:null,attributes:[]};for(const _ in u){const m=self[d[_]];let v,y;if(c.useUniqueIDs)y=u[_],v=o.GetAttributeByUniqueId(h,y);else{if(y=o.GetAttributeId(h,r[u[_]]),y===-1)continue;v=o.GetAttribute(h,y)}const b=s(r,o,h,_,m,v);_==="color"&&(b.vertexColorSpace=c.vertexColorSpace),g.attributes.push(b)}return p===r.TRIANGULAR_MESH&&(g.index=i(r,o,h)),r.destroy(h),g}function i(r,o,l){const u=l.num_faces()*3,d=u*4,h=r._malloc(d);o.GetTrianglesUInt32Array(l,d,h);const f=new Uint32Array(r.HEAPF32.buffer,h,u).slice();return r._free(h),{array:f,itemSize:1}}function s(r,o,l,c,u,d){const h=d.num_components(),p=l.num_points()*h,g=p*u.BYTES_PER_ELEMENT,_=a(r,u),m=r._malloc(g);o.GetAttributeDataArrayForAllPoints(l,d,_,g,m);const v=new u(r.HEAPF32.buffer,m,p).slice();return r._free(m),{name:c,array:v,itemSize:h}}function a(r,o){switch(o){case Float32Array:return r.DT_FLOAT32;case Int8Array:return r.DT_INT8;case Int16Array:return r.DT_INT16;case Int32Array:return r.DT_INT32;case Uint8Array:return r.DT_UINT8;case Uint16Array:return r.DT_UINT16;case Uint32Array:return r.DT_UINT32}}}const tF=/^[og]\s*(.+)?/,nF=/^mtllib /,iF=/^usemtl /,sF=/^usemap /,Tv=/\s+/,Mv=new T,Op=new T,Ev=new T,Cv=new T,Ti=new T,Au=new de;function aF(){const n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(s,a){const r=this._finalize(!1);r&&(r.inherited||r.groupCount<=0)&&this.materials.splice(r.index,1);const o={index:this.materials.length,name:s||"",mtllib:Array.isArray(a)&&a.length>0?a[a.length-1]:"",smooth:r!==void 0?r.smooth:this.smooth,groupStart:r!==void 0?r.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(l){const c={index:typeof l=="number"?l:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(o),o},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(s){const a=this.currentMaterial();if(a&&a.groupEnd===-1&&(a.groupEnd=this.geometry.vertices.length/3,a.groupCount=a.groupEnd-a.groupStart,a.inherited=!1),s&&this.materials.length>1)for(let r=this.materials.length-1;r>=0;r--)this.materials[r].groupCount<=0&&this.materials.splice(r,1);return s&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),a}},i&&i.name&&typeof i.clone=="function"){const s=i.clone(0);s.inherited=!0,this.object.materials.push(s)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){const s=this.vertices,a=this.object.geometry.vertices;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){const s=this.normals,a=this.object.geometry.normals;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addFaceNormal:function(e,t,i){const s=this.vertices,a=this.object.geometry.normals;Mv.fromArray(s,e),Op.fromArray(s,t),Ev.fromArray(s,i),Ti.subVectors(Ev,Op),Cv.subVectors(Mv,Op),Ti.cross(Cv),Ti.normalize(),a.push(Ti.x,Ti.y,Ti.z),a.push(Ti.x,Ti.y,Ti.z),a.push(Ti.x,Ti.y,Ti.z)},addColor:function(e,t,i){const s=this.colors,a=this.object.geometry.colors;s[e]!==void 0&&a.push(s[e+0],s[e+1],s[e+2]),s[t]!==void 0&&a.push(s[t+0],s[t+1],s[t+2]),s[i]!==void 0&&a.push(s[i+0],s[i+1],s[i+2])},addUV:function(e,t,i){const s=this.uvs,a=this.object.geometry.uvs;a.push(s[e+0],s[e+1]),a.push(s[t+0],s[t+1]),a.push(s[i+0],s[i+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,s,a,r,o,l,c){const u=this.vertices.length;let d=this.parseVertexIndex(e,u),h=this.parseVertexIndex(t,u),f=this.parseVertexIndex(i,u);if(this.addVertex(d,h,f),this.addColor(d,h,f),o!==void 0&&o!==""){const p=this.normals.length;d=this.parseNormalIndex(o,p),h=this.parseNormalIndex(l,p),f=this.parseNormalIndex(c,p),this.addNormal(d,h,f)}else this.addFaceNormal(d,h,f);if(s!==void 0&&s!==""){const p=this.uvs.length;d=this.parseUVIndex(s,p),h=this.parseUVIndex(a,p),f=this.parseUVIndex(r,p),this.addUV(d,h,f),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let i=0,s=e.length;i32767||C[0]!==2||C[1]!==2||C[2]&128)return new Uint8Array(C);R!==(C[2]<<8|C[3])&&r(3,"wrong scanline width");const L=new Uint8Array(4*w*E);L.length||r(4,"unable to allocate buffer space");let O=0,D=0;const U=4*R,F=new Uint8Array(4),W=new Uint8Array(U);let H=E;for(;H>0&&DC.byteLength&&r(1),F[0]=C[D++],F[1]=C[D++],F[2]=C[D++],F[3]=C[D++],(F[0]!=2||F[1]!=2||(F[2]<<8|F[3])!=R)&&r(3,"bad rgbe scanline format");let ie=0,le;for(;ie128;if(Le&&(le-=128),(le===0||ie+le>U)&&r(3,"bad scanline data"),Le){const De=C[D++];for(let Ke=0;Ke{t.isMesh&&(e.add(t.geometry),e.add(t.material))});for(const t of e)t.dispose()}}function jr(n){return new Cf({color:0,emissive:16777215,emissiveIntensity:n})}let QT=null;function EO(){return typeof document<"u"&&document.baseURI?document.baseURI:typeof window<"u"&&window.location?.href?window.location.href:import.meta.url}function CO(){return"./"}function AO(n){return/^[a-z][a-z\d+\-.]*:/i.test(n)||n.startsWith("//")}function RO(n=QT){const e=n==null||n===""?CO():String(n);return new URL(e,EO()).href}function Pi(n,e=QT){const t=String(n);return AO(t)?t:new URL(t.replace(/^\/+/,""),RO(e)).href}class PO{constructor(e,t={}){if(this.container=typeof e=="string"?document.getElementById(e):e,this.assetBase=t.assetBase,!this.container){console.error("Invalid container passed to SceneManager");return}this.scene=new Ac,this.scene.background=new de(8900331);const i=this.container.clientWidth,s=this.container.clientHeight;this.camera=new Qt(75,i/s,10,5e4),this.camera.position.set(0,2e3,5e3),this.renderer=new ay({antialias:!0,preserveDrawingBuffer:t.preserveDrawingBuffer===!0}),this.renderer.setSize(i,s),this.renderer.shadowMap.enabled=!0,this.renderer.shadowMap.type=gg,this.renderer.toneMapping=vg,this.renderer.toneMappingExposure=1,this.renderer.outputColorSpace=yt,this.container.appendChild(this.renderer.domElement),window.addEventListener("resize",()=>this.onWindowResize())}initDefaultEnvironment(){if(!this._neutralEnvTexture){const e=new Eh(this.renderer);this._neutralEnvTexture=e.fromScene(new MO,.04).texture,e.dispose()}if(this.scene.environment=this._neutralEnvTexture,!this._defaultLightsAdded){const e=new jo(16777215,1.5);e.position.set(3e3,8e3,4e3),this.scene.add(e);const t=new Dc(16777215,.4);this.scene.add(t),this._defaultLightsAdded=!0}}applyEnvironment(e){return new Promise(t=>{const i=new TO,s=Pi(e.skyboxUrl,this.assetBase);i.load(s,a=>{this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),a.mapping=mr,this.scene.background=a,this.scene.environment=a,this.currentEnvironmentId=e.id;const r=e.rotation??{};this._skyboxBaseRotation={x:bt.degToRad(r.x??0),y:bt.degToRad(r.y??0),z:bt.degToRad(r.z??0)},this._skyboxAnimatedY=0,this._skyboxAnimation=e.animation??null,this._applySkyboxRotation(),typeof e.exposure=="number"&&(this.renderer.toneMappingExposure=e.exposure),console.log(`[SceneManager] environment applied: ${e.id}`),t(!0)},void 0,a=>{console.error(`[SceneManager] Failed to load environment "${e.id}":`,a),t(!1)})})}_applySkyboxRotation(){const e=this._skyboxBaseRotation;if(!e)return;const t=e.y+(this._skyboxAnimatedY??0);this.scene.backgroundRotation&&this.scene.backgroundRotation.set(e.x,t,e.z),this.scene.environmentRotation&&this.scene.environmentRotation.set(e.x,t,e.z)}updateSkyboxAnimation(e){const t=this._skyboxAnimation;!t||!t.enabled||!e||(this._skyboxAnimatedY=(this._skyboxAnimatedY??0)+bt.degToRad(t.speed*e),this._applySkyboxRotation())}setDefaultBackground(){this.scene.background&&this.scene.background.dispose&&this.scene.background.dispose(),this.scene.background=new de(1710638),this.initDefaultEnvironment(),this.renderer.toneMappingExposure=1,this._skyboxAnimation=null,this._skyboxBaseRotation=null,this.currentEnvironmentId=null,console.log("[SceneManager] Using neutral default environment (no skybox)")}setExposure(e){this.renderer&&(this.renderer.toneMappingExposure=e)}onWindowResize(){if(!this.container||!this.renderer)return;const e=this.container.clientWidth,t=this.container.clientHeight;this.camera.aspect=e/t,this.camera.updateProjectionMatrix(),this.renderer.setSize(e,t)}render(){this.renderer&&this.renderer.render(this.scene,this.camera)}dispose(){this.renderer&&(this.renderer.dispose(),this.renderer.domElement&&this.renderer.domElement.parentNode&&this.renderer.domElement.parentNode.removeChild(this.renderer.domElement),this.renderer=null)}}function Ev(n,e){if(e===VS)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),n;if(e===xh||e===Ag){let t=n.getIndex();if(t===null){const r=[],o=n.getAttribute("position");if(o!==void 0){for(let l=0;l=2.0 are supported."));return}const c=new cF(a,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});c.fileLoader.setRequestHeader(this.requestHeader);for(let u=0;u=0&&o[d]===void 0&&console.warn('THREE.GLTFLoader: Unknown extension "'+d+'".')}}c.setExtensions(r),c.setPlugins(o),c.parse(i,s)}parseAsync(e,t){const i=this;return new Promise(function(s,a){i.parse(e,t,s,a)})}}function IO(){let n={};return{get:function(e){return n[e]},add:function(e,t){n[e]=t},remove:function(e){delete n[e]},removeAll:function(){n={}}}}const wt={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class LO{constructor(e){this.parser=e,this.name=wt.KHR_LIGHTS_PUNCTUAL,this.cache={refs:{},uses:{}}}_markDefs(){const e=this.parser,t=this.parser.json.nodes||[];for(let i=0,s=t.length;i=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,a.source,r)}}class XO{constructor(e){this.parser=e,this.name=wt.EXT_TEXTURE_WEBP}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class KO{constructor(e){this.parser=e,this.name=wt.EXT_TEXTURE_AVIF}loadTexture(e){const t=this.name,i=this.parser,s=i.json,a=s.textures[e];if(!a.extensions||!a.extensions[t])return null;const r=a.extensions[t],o=s.images[r.source];let l=i.textureLoader;if(o.uri){const c=i.options.manager.getHandler(o.uri);c!==null&&(l=c)}return i.loadTextureImage(e,r.source,l)}}class qO{constructor(e){this.name=wt.EXT_MESHOPT_COMPRESSION,this.parser=e}loadBufferView(e){const t=this.parser.json,i=t.bufferViews[e];if(i.extensions&&i.extensions[this.name]){const s=i.extensions[this.name],a=this.parser.getDependency("buffer",s.buffer),r=this.parser.options.meshoptDecoder;if(!r||!r.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return a.then(function(o){const l=s.byteOffset||0,c=s.byteLength||0,u=s.count,d=s.byteStride,h=new Uint8Array(o,l,c);return r.decodeGltfBufferAsync?r.decodeGltfBufferAsync(u,d,h,s.mode,s.filter).then(function(f){return f.buffer}):r.ready.then(function(){const f=new ArrayBuffer(u*d);return r.decodeGltfBuffer(new Uint8Array(f),u,d,h,s.mode,s.filter),f})})}else return null}}class YO{constructor(e){this.name=wt.EXT_MESH_GPU_INSTANCING,this.parser=e}createNodeMesh(e){const t=this.parser.json,i=t.nodes[e];if(!i.extensions||!i.extensions[this.name]||i.mesh===void 0)return null;const s=t.meshes[i.mesh];for(const c of s.primitives)if(c.mode!==Ci.TRIANGLES&&c.mode!==Ci.TRIANGLE_STRIP&&c.mode!==Ci.TRIANGLE_FAN&&c.mode!==void 0)return null;const r=i.extensions[this.name].attributes,o=[],l={};for(const c in r)o.push(this.parser.getDependency("accessor",r[c]).then(u=>(l[c]=u,l[c])));return o.length<1?null:(o.push(this.parser.createNodeMesh(e)),Promise.all(o).then(c=>{const u=c.pop(),d=u.isGroup?u.children:[u],h=c[0].count,f=[];for(const p of d){const g=new Ee,_=new T,m=new ht,v=new T(1,1,1),y=new ff(p.geometry,p.material,h);for(let b=0;b0||n.search(/^data\:image\/jpeg/)===0?"image/jpeg":n.search(/\.webp($|\?)/i)>0||n.search(/^data\:image\/webp/)===0?"image/webp":n.search(/\.ktx2($|\?)/i)>0||n.search(/^data\:image\/ktx2/)===0?"image/ktx2":"image/png"}const lF=new Ee;class cF{constructor(e={},t={}){this.json=e,this.extensions={},this.plugins={},this.options=t,this.cache=new IO,this.associations=new Map,this.primitiveCache={},this.nodeCache={},this.meshCache={refs:{},uses:{}},this.cameraCache={refs:{},uses:{}},this.lightCache={refs:{},uses:{}},this.sourceCache={},this.textureCache={},this.nodeNamesUsed={};let i=!1,s=-1,a=!1,r=-1;if(typeof navigator<"u"){const o=navigator.userAgent;i=/^((?!chrome|android).)*safari/i.test(o)===!0;const l=o.match(/Version\/(\d+)/);s=i&&l?parseInt(l[1],10):-1,a=o.indexOf("Firefox")>-1,r=a?o.match(/Firefox\/([0-9]+)\./)[1]:-1}typeof createImageBitmap>"u"||i&&s<17||a&&r<98?this.textureLoader=new Af(this.options.manager):this.textureLoader=new UT(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new Kn(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),this.options.crossOrigin==="use-credentials"&&this.fileLoader.setWithCredentials(!0)}setExtensions(e){this.extensions=e}setPlugins(e){this.plugins=e}parse(e,t){const i=this,s=this.json,a=this.extensions;this.cache.removeAll(),this.nodeCache={},this._invokeAll(function(r){return r._markDefs&&r._markDefs()}),Promise.all(this._invokeAll(function(r){return r.beforeRoot&&r.beforeRoot()})).then(function(){return Promise.all([i.getDependencies("scene"),i.getDependencies("animation"),i.getDependencies("camera")])}).then(function(r){const o={scene:r[0][s.scene||0],scenes:r[0],animations:r[1],cameras:r[2],asset:s.asset,parser:i,userData:{}};return za(a,o,s),fs(o,s),Promise.all(i._invokeAll(function(l){return l.afterRoot&&l.afterRoot(o)})).then(function(){for(const l of o.scenes)l.updateMatrixWorld();e(o)})}).catch(t)}_markDefs(){const e=this.json.nodes||[],t=this.json.skins||[],i=this.json.meshes||[];for(let s=0,a=t.length;s{const l=this.associations.get(r);l!=null&&this.associations.set(o,l);for(const[c,u]of r.children.entries())a(u,o.children[c])};return a(i,s),s.name+="_instance_"+e.uses[t]++,s}_invokeOne(e){const t=Object.values(this.plugins);t.push(this);for(let i=0;i=2&&_.setY(w,x[M*l+1]),l>=3&&_.setZ(w,x[M*l+2]),l>=4&&_.setW(w,x[M*l+3]),l>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}_.normalized=p}return _})}loadTexture(e){const t=this.json,i=this.options,a=t.textures[e].source,r=t.images[a];let o=this.textureLoader;if(r.uri){const l=i.manager.getHandler(r.uri);l!==null&&(o=l)}return this.loadTextureImage(e,a,o)}loadTextureImage(e,t,i){const s=this,a=this.json,r=a.textures[e],o=a.images[t],l=(o.uri||o.bufferView)+":"+r.sampler;if(this.textureCache[l])return this.textureCache[l];const c=this.loadImageSource(t,i).then(function(u){u.flipY=!1,u.name=r.name||o.name||"",u.name===""&&typeof o.uri=="string"&&o.uri.startsWith("data:image/")===!1&&(u.name=o.uri);const h=(a.samplers||{})[r.sampler]||{};return u.magFilter=Av[h.magFilter]||Gt,u.minFilter=Av[h.minFilter]||Li,u.wrapS=Rv[h.wrapS]||xs,u.wrapT=Rv[h.wrapT]||xs,u.generateMipmaps=!u.isCompressedTexture&&u.minFilter!==hn&&u.minFilter!==Gt,s.associations.set(u,{textures:e}),u}).catch(function(){return null});return this.textureCache[l]=c,c}loadImageSource(e,t){const i=this,s=this.json,a=this.options;if(this.sourceCache[e]!==void 0)return this.sourceCache[e].then(d=>d.clone());const r=s.images[e],o=self.URL||self.webkitURL;let l=r.uri||"",c=!1;if(r.bufferView!==void 0)l=i.getDependency("bufferView",r.bufferView).then(function(d){c=!0;const h=new Blob([d],{type:r.mimeType});return l=o.createObjectURL(h),l});else if(r.uri===void 0)throw new Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");const u=Promise.resolve(l).then(function(d){return new Promise(function(h,f){let p=h;t.isImageBitmapLoader===!0&&(p=function(g){const _=new zt(g);_.needsUpdate=!0,h(_)}),t.load(Ws.resolveURL(d,a.path),p,void 0,f)})}).then(function(d){return c===!0&&o.revokeObjectURL(l),fs(d,r),d.userData.mimeType=r.mimeType||oF(r.uri),d}).catch(function(d){throw console.error("THREE.GLTFLoader: Couldn't load texture",l),d});return this.sourceCache[e]=u,u}assignTexture(e,t,i,s){const a=this;return this.getDependency("texture",i.index).then(function(r){if(!r)return null;if(i.texCoord!==void 0&&i.texCoord>0&&(r=r.clone(),r.channel=i.texCoord),a.extensions[wt.KHR_TEXTURE_TRANSFORM]){const o=i.extensions!==void 0?i.extensions[wt.KHR_TEXTURE_TRANSFORM]:void 0;if(o){const l=a.associations.get(r);r=a.extensions[wt.KHR_TEXTURE_TRANSFORM].extendTexture(r,o),a.associations.set(r,l)}}return s!==void 0&&(r.colorSpace=s),e[t]=r,r})}assignFinalMaterial(e){const t=e.geometry;let i=e.material;const s=t.attributes.tangent===void 0,a=t.attributes.color!==void 0,r=t.attributes.normal===void 0;if(e.isPoints){const o="PointsMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new fa,en.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,l.sizeAttenuation=!1,this.cache.add(o,l)),i=l}else if(e.isLine){const o="LineBasicMaterial:"+i.uuid;let l=this.cache.get(o);l||(l=new Pt,en.prototype.copy.call(l,i),l.color.copy(i.color),l.map=i.map,this.cache.add(o,l)),i=l}if(s||a||r){let o="ClonedMaterial:"+i.uuid+":";s&&(o+="derivative-tangents:"),a&&(o+="vertex-colors:"),r&&(o+="flat-shading:");let l=this.cache.get(o);l||(l=i.clone(),a&&(l.vertexColors=!0),r&&(l.flatShading=!0),s&&(l.normalScale&&(l.normalScale.y*=-1),l.clearcoatNormalScale&&(l.clearcoatNormalScale.y*=-1)),this.cache.add(o,l),this.associations.set(l,this.associations.get(i))),i=l}e.material=i}getMaterialType(){return kn}loadMaterial(e){const t=this,i=this.json,s=this.extensions,a=i.materials[e];let r;const o={},l=a.extensions||{},c=[];if(l[wt.KHR_MATERIALS_UNLIT]){const d=s[wt.KHR_MATERIALS_UNLIT];r=d.getMaterialType(),c.push(d.extendParams(o,a,t))}else{const d=a.pbrMetallicRoughness||{};if(o.color=new de(1,1,1),o.opacity=1,Array.isArray(d.baseColorFactor)){const h=d.baseColorFactor;o.color.setRGB(h[0],h[1],h[2],wn),o.opacity=h[3]}d.baseColorTexture!==void 0&&c.push(t.assignTexture(o,"map",d.baseColorTexture,yt)),o.metalness=d.metallicFactor!==void 0?d.metallicFactor:1,o.roughness=d.roughnessFactor!==void 0?d.roughnessFactor:1,d.metallicRoughnessTexture!==void 0&&(c.push(t.assignTexture(o,"metalnessMap",d.metallicRoughnessTexture)),c.push(t.assignTexture(o,"roughnessMap",d.metallicRoughnessTexture))),r=this._invokeOne(function(h){return h.getMaterialType&&h.getMaterialType(e)}),c.push(Promise.all(this._invokeAll(function(h){return h.extendMaterialParams&&h.extendMaterialParams(e,o)})))}a.doubleSided===!0&&(o.side=ut);const u=a.alphaMode||Up.OPAQUE;if(u===Up.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,u===Up.MASK&&(o.alphaTest=a.alphaCutoff!==void 0?a.alphaCutoff:.5)),a.normalTexture!==void 0&&r!==je&&(c.push(t.assignTexture(o,"normalMap",a.normalTexture)),o.normalScale=new ne(1,1),a.normalTexture.scale!==void 0)){const d=a.normalTexture.scale;o.normalScale.set(d,d)}if(a.occlusionTexture!==void 0&&r!==je&&(c.push(t.assignTexture(o,"aoMap",a.occlusionTexture)),a.occlusionTexture.strength!==void 0&&(o.aoMapIntensity=a.occlusionTexture.strength)),a.emissiveFactor!==void 0&&r!==je){const d=a.emissiveFactor;o.emissive=new de().setRGB(d[0],d[1],d[2],wn)}return a.emissiveTexture!==void 0&&r!==je&&c.push(t.assignTexture(o,"emissiveMap",a.emissiveTexture,yt)),Promise.all(c).then(function(){const d=new r(o);return a.name&&(d.name=a.name),fs(d,a),t.associations.set(d,{materials:e}),a.extensions&&za(s,d,a),d})}createUniqueName(e){const t=vt.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){const t=this,i=this.extensions,s=this.primitiveCache;function a(o){return i[wt.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(o,t).then(function(l){return Pv(l,o,t)})}const r=[];for(let o=0,l=e.length;o0&&aF(m,a),m.name=t.createUniqueName(a.name||"mesh_"+e),fs(m,a),_.extensions&&za(s,m,_),t.assignFinalMaterial(m),d.push(m)}for(let f=0,p=d.length;f1?u=new Et:c.length===1?u=c[0]:u=new et,u!==c[0])for(let d=0,h=c.length;d1){const d=s.associations.get(u);s.associations.set(u,{...d})}return s.associations.get(u).nodes=e,u}),this.nodeCache[e]}loadScene(e){const t=this.extensions,i=this.json.scenes[e],s=this,a=new Et;i.name&&(a.name=s.createUniqueName(i.name)),fs(a,i),i.extensions&&za(t,a,i);const r=i.nodes||[],o=[];for(let l=0,c=r.length;l{const d=new Map;for(const[h,f]of s.associations)(h instanceof en||h instanceof zt)&&d.set(h,f);return u.traverse(h=>{const f=s.associations.get(h);f!=null&&d.set(h,f)}),d};return s.associations=c(a),a})}_createAnimationTracks(e,t,i,s,a){const r=[],o=e.name?e.name:e.uuid,l=[];ia[a.path]===ia.weights?e.traverse(function(h){h.morphTargetInfluences&&l.push(h.name?h.name:h.uuid)}):l.push(o);let c;switch(ia[a.path]){case ia.weights:c=ya;break;case ia.rotation:c=Ss;break;case ia.translation:case ia.scale:c=qs;break;default:i.itemSize===1?c=ya:c=qs;break}const u=s.interpolation!==void 0?nF[s.interpolation]:_r,d=this._getArrayFromAccessor(i);for(let h=0,f=l.length;h{this.parse(r,t,s)},i,s)}parse(e,t,i=()=>{}){this.decodeDracoFile(e,t,null,null,yt,i).catch(i)}decodeDracoFile(e,t,i,s,a=wn,r=()=>{}){const o={attributeIDs:i||this.defaultAttributeIDs,attributeTypes:s||this.defaultAttributeTypes,useUniqueIDs:!!i,vertexColorSpace:a};return this.decodeGeometry(e,o).then(t).catch(r)}decodeGeometry(e,t){const i=JSON.stringify(t);if(zp.has(e)){const l=zp.get(e);if(l.key===i)return l.promise;if(e.byteLength===0)throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let s;const a=this.workerNextTaskID++,r=e.byteLength,o=this._getWorker(a,r).then(l=>(s=l,new Promise((c,u)=>{s._callbacks[a]={resolve:c,reject:u},s.postMessage({type:"decode",id:a,taskConfig:t,buffer:e},[e])}))).then(l=>this._createGeometry(l.geometry));return o.catch(()=>!0).then(()=>{s&&a&&this._releaseTask(s,a)}),zp.set(e,{key:i,promise:o}),o}_createGeometry(e){const t=new $e;e.index&&t.setIndex(new lt(e.index.array,1));for(let i=0;i{i.load(e,s,void 0,a)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;const e=typeof WebAssembly!="object"||this.decoderConfig.type==="js",t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(i=>{const s=i[0];e||(this.decoderConfig.wasmBinary=i[1]);const a=dF.toString(),r=["/* draco decoder */",s,"","/* worker */",a.substring(a.indexOf("{")+1,a.lastIndexOf("}"))].join(` +`);this.workerSourceURL=URL.createObjectURL(new Blob([r]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtha._taskLoad?-1:1});const i=this.workerPool[this.workerPool.length-1];return i._taskCosts[e]=t,i._taskLoad+=t,i})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{const d=u.draco,h=new d.Decoder;try{const f=t(d,h,new Int8Array(l),c),p=f.attributes.map(g=>g.array.buffer);f.index&&p.push(f.index.array.buffer),self.postMessage({type:"decode",id:o.id,geometry:f},p)}catch(f){console.error(f),self.postMessage({type:"error",id:o.id,error:f.message})}finally{d.destroy(h)}});break}};function t(r,o,l,c){const u=c.attributeIDs,d=c.attributeTypes;let h,f;const p=o.GetEncodedGeometryType(l);if(p===r.TRIANGULAR_MESH)h=new r.Mesh,f=o.DecodeArrayToMesh(l,l.byteLength,h);else if(p===r.POINT_CLOUD)h=new r.PointCloud,f=o.DecodeArrayToPointCloud(l,l.byteLength,h);else throw new Error("THREE.DRACOLoader: Unexpected geometry type.");if(!f.ok()||h.ptr===0)throw new Error("THREE.DRACOLoader: Decoding failed: "+f.error_msg());const g={index:null,attributes:[]};for(const _ in u){const m=self[d[_]];let v,y;if(c.useUniqueIDs)y=u[_],v=o.GetAttributeByUniqueId(h,y);else{if(y=o.GetAttributeId(h,r[u[_]]),y===-1)continue;v=o.GetAttribute(h,y)}const b=s(r,o,h,_,m,v);_==="color"&&(b.vertexColorSpace=c.vertexColorSpace),g.attributes.push(b)}return p===r.TRIANGULAR_MESH&&(g.index=i(r,o,h)),r.destroy(h),g}function i(r,o,l){const u=l.num_faces()*3,d=u*4,h=r._malloc(d);o.GetTrianglesUInt32Array(l,d,h);const f=new Uint32Array(r.HEAPF32.buffer,h,u).slice();return r._free(h),{array:f,itemSize:1}}function s(r,o,l,c,u,d){const h=d.num_components(),p=l.num_points()*h,g=p*u.BYTES_PER_ELEMENT,_=a(r,u),m=r._malloc(g);o.GetAttributeDataArrayForAllPoints(l,d,_,g,m);const v=new u(r.HEAPF32.buffer,m,p).slice();return r._free(m),{name:c,array:v,itemSize:h}}function a(r,o){switch(o){case Float32Array:return r.DT_FLOAT32;case Int8Array:return r.DT_INT8;case Int16Array:return r.DT_INT16;case Int32Array:return r.DT_INT32;case Uint8Array:return r.DT_UINT8;case Uint16Array:return r.DT_UINT16;case Uint32Array:return r.DT_UINT32}}}const hF=/^[og]\s*(.+)?/,fF=/^mtllib /,pF=/^usemtl /,mF=/^usemap /,Iv=/\s+/,Lv=new T,Hp=new T,kv=new T,Dv=new T,Ti=new T,Lu=new de;function _F(){const n={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materials:{},materialLibraries:[],startObject:function(e,t){if(this.object&&this.object.fromDeclaration===!1){this.object.name=e,this.object.fromDeclaration=t!==!1;return}const i=this.object&&typeof this.object.currentMaterial=="function"?this.object.currentMaterial():void 0;if(this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0),this.object={name:e||"",fromDeclaration:t!==!1,geometry:{vertices:[],normals:[],colors:[],uvs:[],hasUVIndices:!1},materials:[],smooth:!0,startMaterial:function(s,a){const r=this._finalize(!1);r&&(r.inherited||r.groupCount<=0)&&this.materials.splice(r.index,1);const o={index:this.materials.length,name:s||"",mtllib:Array.isArray(a)&&a.length>0?a[a.length-1]:"",smooth:r!==void 0?r.smooth:this.smooth,groupStart:r!==void 0?r.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(l){const c={index:typeof l=="number"?l:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return c.clone=this.clone.bind(c),c}};return this.materials.push(o),o},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(s){const a=this.currentMaterial();if(a&&a.groupEnd===-1&&(a.groupEnd=this.geometry.vertices.length/3,a.groupCount=a.groupEnd-a.groupStart,a.inherited=!1),s&&this.materials.length>1)for(let r=this.materials.length-1;r>=0;r--)this.materials[r].groupCount<=0&&this.materials.splice(r,1);return s&&this.materials.length===0&&this.materials.push({name:"",smooth:this.smooth}),a}},i&&i.name&&typeof i.clone=="function"){const s=i.clone(0);s.inherited=!0,this.object.materials.push(s)}this.objects.push(this.object)},finalize:function(){this.object&&typeof this.object._finalize=="function"&&this.object._finalize(!0)},parseVertexIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseNormalIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/3)*3},parseUVIndex:function(e,t){const i=parseInt(e,10);return(i>=0?i-1:i+t/2)*2},addVertex:function(e,t,i){const s=this.vertices,a=this.object.geometry.vertices;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addVertexPoint:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){const t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,i){const s=this.normals,a=this.object.geometry.normals;a.push(s[e+0],s[e+1],s[e+2]),a.push(s[t+0],s[t+1],s[t+2]),a.push(s[i+0],s[i+1],s[i+2])},addFaceNormal:function(e,t,i){const s=this.vertices,a=this.object.geometry.normals;Lv.fromArray(s,e),Hp.fromArray(s,t),kv.fromArray(s,i),Ti.subVectors(kv,Hp),Dv.subVectors(Lv,Hp),Ti.cross(Dv),Ti.normalize(),a.push(Ti.x,Ti.y,Ti.z),a.push(Ti.x,Ti.y,Ti.z),a.push(Ti.x,Ti.y,Ti.z)},addColor:function(e,t,i){const s=this.colors,a=this.object.geometry.colors;s[e]!==void 0&&a.push(s[e+0],s[e+1],s[e+2]),s[t]!==void 0&&a.push(s[t+0],s[t+1],s[t+2]),s[i]!==void 0&&a.push(s[i+0],s[i+1],s[i+2])},addUV:function(e,t,i){const s=this.uvs,a=this.object.geometry.uvs;a.push(s[e+0],s[e+1]),a.push(s[t+0],s[t+1]),a.push(s[i+0],s[i+1])},addDefaultUV:function(){const e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){const t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,i,s,a,r,o,l,c){const u=this.vertices.length;let d=this.parseVertexIndex(e,u),h=this.parseVertexIndex(t,u),f=this.parseVertexIndex(i,u);if(this.addVertex(d,h,f),this.addColor(d,h,f),o!==void 0&&o!==""){const p=this.normals.length;d=this.parseNormalIndex(o,p),h=this.parseNormalIndex(l,p),f=this.parseNormalIndex(c,p),this.addNormal(d,h,f)}else this.addFaceNormal(d,h,f);if(s!==void 0&&s!==""){const p=this.uvs.length;d=this.parseUVIndex(s,p),h=this.parseUVIndex(a,p),f=this.parseUVIndex(r,p),this.addUV(d,h,f),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";const t=this.vertices.length;for(let i=0,s=e.length;i=7?(Au.setRGB(parseFloat(d[4]),parseFloat(d[5]),parseFloat(d[6]),yt),t.colors.push(Au.r,Au.g,Au.b)):t.colors.push(void 0,void 0,void 0);break;case"vn":t.normals.push(parseFloat(d[1]),parseFloat(d[2]),parseFloat(d[3]));break;case"vt":t.uvs.push(parseFloat(d[1]),parseFloat(d[2]));break}}else if(u==="f"){const h=c.slice(1).trim().split(Tv),f=[];for(let g=0,_=h.length;g<_;g++){const m=h[g];if(m.length>0){const v=m.split("/");f.push(v)}}const p=f[0];for(let g=1,_=f.length-1;g<_;g++){const m=f[g],v=f[g+1];t.addFace(p[0],m[0],v[0],p[1],m[1],v[1],p[2],m[2],v[2])}}else if(u==="l"){const d=c.substring(1).trim().split(" ");let h=[];const f=[];if(c.indexOf("/")===-1)h=d;else for(let p=0,g=d.length;p1){const h=s[1].trim().toLowerCase();t.object.smooth=h!=="0"&&h!=="off"}else t.object.smooth=!0;const d=t.object.currentMaterial();d&&(d.smooth=t.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}t.finalize();const a=new Et;if(a.materialLibraries=[].concat(t.materialLibraries),!(t.objects.length===1&&t.objects[0].geometry.vertices.length===0)===!0)for(let o=0,l=t.objects.length;o0&&g.setAttribute("normal",new Ce(u.normals,3)),u.colors.length>0&&(p=!0,g.setAttribute("color",new Ce(u.colors,3))),u.hasUVIndices===!0&&g.setAttribute("uv",new Ce(u.uvs,2));const _=[];for(let v=0,y=d.length;v1){for(let v=0,y=d.length;v0){const o=new ha({size:1,sizeAttenuation:!1}),l=new $e;l.setAttribute("position",new Ce(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new Ce(t.colors,3)),o.vertexColors=!0);const c=new hr(l,o);a.add(c)}return a}}const Fp=new Map;async function oF(n,e){const t=Ri("models/stadium/stadium.glb",e);let i=Fp.get(t);return i||(i=n.loadAsync(t).then(s=>{const a=s.scene;return lF(a),a}).catch(s=>{throw Fp.delete(t),s}),Fp.set(t,i)),i}function lF(n){const e=["Sol_Trait_T0","Sol_Trait_T1","Milieu_Forme","Milieu_Forme.001","cage_T0","cage_T1","Couleur_Hexagone_T0","Couleur_Hexagone_T1","wall_gradient_color_2","wall_gradient_color_2.001","Fond_BackBoard_Transparent","dégradé_transparent_T0","dégradé_transparent_T1","grid_transperant","Detail_Milieu","Detail_Milieu.001"],t=["Glow","Glass"],i=["Plafond_Hexagone_T0","Plafond_Hexagone_T1","Plafond_Transparent"];n.traverse(s=>{if(!s.isMesh)return;s.receiveShadow=!0,s.castShadow=!i.includes(s.name),t.some(r=>s.name.includes(r))&&(console.log(`[ArenaManager] Disabling frustum culling for: ${s.name}`),s.frustumCulled=!1),s.material&&/^Hexagone_T[01]$/.test(s.material.name??"")&&(s.material=s.material.clone(),s.material.transparent=!0,s.material.opacity=.18,s.material.depthWrite=!1,s.renderOrder=1),s.material&&s.material.name==="bannière_pub"&&(s.visible=!1),s.material&&s.material.name==="Sol_Hexagone"&&(s.material=s.material.clone(),s.material.color.setScalar(.35),s.material.metalness=0,s.material.roughness=1),s.material&&s.material.name&&e.includes(s.material.name)&&(console.log(`[ArenaManager] Fixing visibility for: ${s.name} (material: ${s.material.name})`),s.material=s.material.clone(),s.material.side=ut,s.material.depthWrite=!1,s.renderOrder=1,s.frustumCulled=!1)})}class cF{constructor(e,t={}){this.scene=e,this.assetBase=t.assetBase,this.arenaMeshes=[],this.drawingCollider=null,this.drawingColliderMeshes=[],this.arenaDecorMesh=null,this.showArenaDecor=!0,this.dracoLoader=new KT,this.dracoLoader.setDecoderPath(Ri("draco/",this.assetBase)),this.gltfLoader=new ey,this.gltfLoader.setDRACOLoader(this.dracoLoader)}async loadArenaMeshes(){try{console.log("Loading arena mesh...");const t=(await oF(this.gltfLoader,this.assetBase)).clone(!0);t.traverse(i=>{i.isMesh&&this.arenaMeshes.push(i)}),console.log(`[ArenaManager] Collected ${this.arenaMeshes.length} meshes for raycasting`),this.scene.add(t),console.log("Arena mesh loaded successfully with correct orientation")}catch(e){console.error("Error loading arena mesh:",e);const t=new Nn(10240,8192),i=new kn({color:3355443,side:ut}),s=new Se(t,i);s.rotation.x=-Math.PI/2,s.receiveShadow=!0,this.scene.add(s),this.arenaMeshes.push(s)}}getArenaMeshes(){return this.arenaMeshes}getDrawingColliderMeshes(){return this.drawingColliderMeshes}async loadDrawingCollider(e=!1){try{console.log("[ArenaManager] Loading drawing collider...");const i=await new rF().loadAsync(Ri("models/stadium/DrawingArena.obj",this.assetBase));i.rotation.x=Math.PI/2,i.rotation.y=Math.PI,i.scale.setScalar(.99),i.position.y=20,i.traverse(s=>{s.isMesh&&(this.drawingColliderMeshes.push(s),s.castShadow=!1,s.receiveShadow=!1,e?s.material=new je({color:65280,transparent:!0,opacity:.7,side:ut}):s.material=new je({visible:!1}))}),this.drawingCollider=i,this.scene.add(i),console.log(`[ArenaManager] Drawing collider loaded with ${this.drawingColliderMeshes.length} meshes`)}catch(t){console.error("[ArenaManager] Failed to load drawing collider:",t)}}setDrawingColliderVisible(e){for(const t of this.drawingColliderMeshes)e?t.material=new je({color:65280,wireframe:!0,transparent:!0,opacity:.5}):t.material=new je({visible:!1})}async loadArenaDecor(e=!0){try{console.log("[ArenaManager] Loading arena decoration mesh...");const t=await this.gltfLoader.loadAsync(Ri("models/stadium/arene.glb",this.assetBase));this.arenaDecorMesh=t.scene,this.showArenaDecor=e,this.arenaDecorMesh.traverse(i=>{i.isMesh&&(i.receiveShadow=!0,i.castShadow=!0)}),this.arenaDecorMesh.visible=e,this.scene.add(this.arenaDecorMesh),console.log(`[ArenaManager] Arena decoration loaded, visible: ${e}`)}catch(t){console.error("[ArenaManager] Failed to load arena decoration:",t)}}setArenaDecorVisible(e){this.showArenaDecor=e,this.arenaDecorMesh&&(this.arenaDecorMesh.visible=e,console.log(`[ArenaManager] Arena decoration visibility set to: ${e}`))}isArenaDecorVisible(){return this.showArenaDecor}}var Pi=Uint8Array,lo=Uint16Array,uF=Int32Array,qT=new Pi([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),YT=new Pi([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),dF=new Pi([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),jT=function(n,e){for(var t=new lo(31),i=0;i<31;++i)t[i]=e+=1<>1|(Ut&21845)<<1;sa=(sa&52428)>>2|(sa&13107)<<2,sa=(sa&61680)>>4|(sa&3855)<<4,a_[Ut]=((sa&65280)>>8|(sa&255)<<8)>>1}var ql=(function(n,e,t){for(var i=n.length,s=0,a=new lo(e);s>l]=c}else for(o=new lo(i),s=0;s>15-n[s]);return o}),Ic=new Pi(288);for(var Ut=0;Ut<144;++Ut)Ic[Ut]=8;for(var Ut=144;Ut<256;++Ut)Ic[Ut]=9;for(var Ut=256;Ut<280;++Ut)Ic[Ut]=7;for(var Ut=280;Ut<288;++Ut)Ic[Ut]=8;var QT=new Pi(32);for(var Ut=0;Ut<32;++Ut)QT[Ut]=5;var mF=ql(Ic,9,1),_F=ql(QT,5,1),Np=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},zi=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},Up=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},gF=function(n){return(n+7)/8|0},yF=function(n,e,t){return(t==null||t>n.length)&&(t=n.length),new Pi(n.subarray(e,t))},vF=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],Ki=function(n,e,t){var i=new Error(e||vF[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,Ki),!t)throw i;return i},bF=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new Pi(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new Pi(s*3));var c=function(we){var Re=t.length;if(we>Re){var k=new Pi(Math.max(Re*2,we));k.set(t),t=k}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=zi(n,d,1);var v=zi(n,d+1,3);if(d+=3,v)if(v==1)f=mF,p=_F,g=9,_=5;else if(v==2){var x=zi(n,d,31)+257,M=zi(n,d+10,15)+4,C=x+zi(n,d+5,31)+1;d+=14;for(var w=new Pi(C),E=new Pi(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+zi(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+zi(n,d,7),d+=3):y==18&&(W=11+zi(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ie=w.subarray(x);g=Np(H),_=Np(ie),f=ql(H,g,1),p=ql(ie,_,1)}else Ki(1);else{var y=gF(d)+4,b=n[y-4]|n[y-3]<<8,S=y+b;if(S>s){l&&Ki(0);break}o&&c(h+b),t.set(n.subarray(y,S),h),e.b=h+=b,e.p=d=S*8,e.f=u;continue}if(d>m){l&&Ki(0);break}}o&&c(h+131072);for(var le=(1<>4;if(d+=F&15,d>m){l&&Ki(0);break}if(F||Ki(2),De<256)t[h++]=De;else if(De==256){Le=d,f=null;break}else{var Ke=De-254;if(De>264){var R=De-257,Oe=qT[R];Ke=zi(n,d,(1<>4;Z||Ki(3),d+=Z&15;var ie=pF[ae];if(ae>3){var Oe=YT[ae];ie+=Up(n,d)&(1<m){l&&Ki(0);break}o&&c(h+131072);var Te=h+Ke;if(h>4>7||(n[0]<<8|n[1])%31)&&Ki(6,"invalid zlib data"),(n[1]>>5&1)==1&&Ki(6,"invalid zlib data: "+(n[1]&32?"need":"unexpected")+" dictionary"),(n[1]>>3&4)+2};function SF(n,e){return bF(n.subarray(wF(n),-4),{i:2},e,e)}var TF=typeof TextDecoder<"u"&&new TextDecoder,MF=0;try{TF.decode(xF,{stream:!0}),MF=1}catch{}function eM(n,e,t){const i=t.length-n-1;if(e>=t[i])return i-1;if(e<=t[n])return n;let s=n,a=i,r=Math.floor((s+a)/2);for(;e=t[r+1];)e=g&&(p[f][0]=p[h][0]/o[v+1][m],_=p[f][0]*o[m][v]);const y=m>=-1?1:-m,b=d-1<=v?g-1:t-d;for(let x=y;x<=b;++x)p[f][x]=(p[h][x]-p[h][x-1])/o[v+1][m+x],_+=p[f][x]*o[m+x][v];d<=v&&(p[f][g]=-p[h][g-1]/o[v+1][d],_+=p[f][g]*o[d][v]),r[g][d]=_;const S=h;h=f,f=S}}let u=t;for(let d=1;d<=i;++d){for(let h=0;h<=t;++h)r[d][h]*=u;u*=t-d}return r}function RF(n,e,t,i,s){const a=st.toArray()),e.startKnot=this.startKnot,e.endKnot=this.endKnot,e}fromJSON(e){return super.fromJSON(e),this.degree=e.degree,this.knots=[...e.knots],this.controlPoints=e.controlPoints.map(t=>new Ye(t[0],t[1],t[2],t[3])),this.startKnot=e.startKnot,this.endKnot=e.endKnot,this}}let gt,Jt,Vn;class DF extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=a.path===""?Ws.extractUrlBase(e):a.path,o=new Kn(this.manager);o.setPath(a.path),o.setResponseType("arraybuffer"),o.setRequestHeader(a.requestHeader),o.setWithCredentials(a.withCredentials),o.load(e,function(l){try{t(a.parse(l,r))}catch(c){s?s(c):console.error(c),a.manager.itemError(e)}},i,s)}parse(e,t){if(zF(e))gt=new BF().parse(e);else{const s=iM(e);if(!HF(s))throw new Error("THREE.FBXLoader: Unknown format.");if(Rv(s)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+Rv(s));gt=new UF().parse(s)}const i=new wf(this.manager).setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);return new OF(i,this.manager).parse(gt)}}class OF{constructor(e,t){this.textureLoader=e,this.manager=t}parse(){Jt=this.parseConnections();const e=this.parseImages(),t=this.parseTextures(e),i=this.parseMaterials(t),s=this.parseDeformers(),a=new FF().parse(s);return this.parseScene(s,a,i),Vn}parseConnections(){const e=new Map;return"Connections"in gt&>.Connections.connections.forEach(function(i){const s=i[0],a=i[1],r=i[2];e.has(s)||e.set(s,{parents:[],children:[]});const o={ID:a,relationship:r};e.get(s).parents.push(o),e.has(a)||e.set(a,{parents:[],children:[]});const l={ID:s,relationship:r};e.get(a).children.push(l)}),e}parseImages(){const e={},t={};if("Video"in gt.Objects){const i=gt.Objects.Video;for(const s in i){const a=i[s],r=parseInt(s);if(e[r]=a.RelativeFilename||a.Filename,"Content"in a){const o=a.Content instanceof ArrayBuffer&&a.Content.byteLength>0,l=typeof a.Content=="string"&&a.Content!=="";if(o||l){const c=this.parseImage(i[s]);t[a.RelativeFilename||a.Filename]=c}}}}for(const i in e){const s=e[i];t[s]!==void 0?e[i]=t[s]:e[i]=e[i].split("\\").pop()}return e}parseImage(e){const t=e.Content,i=e.RelativeFilename||e.Filename,s=i.slice(i.lastIndexOf(".")+1).toLowerCase();let a;switch(s){case"bmp":a="image/bmp";break;case"jpg":case"jpeg":a="image/jpeg";break;case"png":a="image/png";break;case"tif":a="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",i),a="image/tga";break;case"webp":a="image/webp";break;default:console.warn('FBXLoader: Image type "'+s+'" is not supported.');return}if(typeof t=="string")return"data:"+a+";base64,"+t;{const r=new Uint8Array(t);return window.URL.createObjectURL(new Blob([r],{type:a}))}}parseTextures(e){const t=new Map;if("Texture"in gt.Objects){const i=gt.Objects.Texture;for(const s in i){const a=this.parseTexture(i[s],e);t.set(parseInt(s),a)}}return t}parseTexture(e,t){const i=this.loadTexture(e,t);i.ID=e.id,i.name=e.attrName;const s=e.WrapModeU,a=e.WrapModeV,r=s!==void 0?s.value:0,o=a!==void 0?a.value:0;if(i.wrapS=r===0?xs:Wn,i.wrapT=o===0?xs:Wn,"Scaling"in e){const l=e.Scaling.value;i.repeat.x=l[0],i.repeat.y=l[1]}if("Translation"in e){const l=e.Translation.value;i.offset.x=l[0],i.offset.y=l[1]}return i}loadTexture(e,t){const i=e.FileName.split(".").pop().toLowerCase();let s=this.manager.getHandler(`.${i}`);s===null&&(s=this.textureLoader);const a=s.path;a||s.setPath(this.textureLoader.path);const r=Jt.get(e.id).children;let o;if(r!==void 0&&r.length>0&&t[r[0].ID]!==void 0&&(o=t[r[0].ID],(o.indexOf("blob:")===0||o.indexOf("data:")===0)&&s.setPath(void 0)),o===void 0)return console.warn("FBXLoader: Undefined filename, creating placeholder texture."),new zt;const l=s.load(o);return s.setPath(a),l}parseMaterials(e){const t=new Map;if("Material"in gt.Objects){const i=gt.Objects.Material;for(const s in i){const a=this.parseMaterial(i[s],e);a!==null&&t.set(parseInt(s),a)}}return t}parseMaterial(e,t){const i=e.id,s=e.attrName;let a=e.ShadingModel;if(typeof a=="object"&&(a=a.value),!Jt.has(i))return null;const r=this.parseParameters(e,t,i);let o;switch(a.toLowerCase()){case"phong":o=new ir;break;case"lambert":o=new xf;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',a),o=new ir;break}return o.setValues(r),o.name=s,o}parseParameters(e,t,i){const s={};e.BumpFactor&&(s.bumpScale=e.BumpFactor.value),e.Diffuse?s.color=rt.colorSpaceToWorking(new de().fromArray(e.Diffuse.value),yt):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(s.color=rt.colorSpaceToWorking(new de().fromArray(e.DiffuseColor.value),yt)),e.DisplacementFactor&&(s.displacementScale=e.DisplacementFactor.value),e.Emissive?s.emissive=rt.colorSpaceToWorking(new de().fromArray(e.Emissive.value),yt):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(s.emissive=rt.colorSpaceToWorking(new de().fromArray(e.EmissiveColor.value),yt)),e.EmissiveFactor&&(s.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),s.opacity=1-(e.TransparencyFactor?parseFloat(e.TransparencyFactor.value):0),(s.opacity===1||s.opacity===0)&&(s.opacity=e.Opacity?parseFloat(e.Opacity.value):null,s.opacity===null&&(s.opacity=1-(e.TransparentColor?parseFloat(e.TransparentColor.value[0]):0))),s.opacity<1&&(s.transparent=!0),e.ReflectionFactor&&(s.reflectivity=e.ReflectionFactor.value),e.Shininess&&(s.shininess=e.Shininess.value),e.Specular?s.specular=rt.colorSpaceToWorking(new de().fromArray(e.Specular.value),yt):e.SpecularColor&&e.SpecularColor.type==="Color"&&(s.specular=rt.colorSpaceToWorking(new de().fromArray(e.SpecularColor.value),yt));const a=this;return Jt.get(i).children.forEach(function(r){const o=r.relationship;switch(o){case"Bump":s.bumpMap=a.getTexture(t,r.ID);break;case"Maya|TEX_ao_map":s.aoMap=a.getTexture(t,r.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":s.map=a.getTexture(t,r.ID),s.map!==void 0&&(s.map.colorSpace=yt);break;case"DisplacementColor":s.displacementMap=a.getTexture(t,r.ID);break;case"EmissiveColor":s.emissiveMap=a.getTexture(t,r.ID),s.emissiveMap!==void 0&&(s.emissiveMap.colorSpace=yt);break;case"NormalMap":case"Maya|TEX_normal_map":s.normalMap=a.getTexture(t,r.ID);break;case"ReflectionColor":s.envMap=a.getTexture(t,r.ID),s.envMap!==void 0&&(s.envMap.mapping=pr,s.envMap.colorSpace=yt);break;case"SpecularColor":s.specularMap=a.getTexture(t,r.ID),s.specularMap!==void 0&&(s.specularMap.colorSpace=yt);break;case"TransparentColor":case"TransparencyFactor":s.alphaMap=a.getTexture(t,r.ID),s.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",o);break}}),s}getTexture(e,t){return"LayeredTexture"in gt.Objects&&t in gt.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),t=Jt.get(t).children[0].ID),e.get(t)}parseDeformers(){const e={},t={};if("Deformer"in gt.Objects){const i=gt.Objects.Deformer;for(const s in i){const a=i[s],r=Jt.get(parseInt(s));if(a.attrType==="Skin"){const o=this.parseSkeleton(r,i);o.ID=s,r.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),o.geometryID=r.parents[0].ID,e[s]=o}else if(a.attrType==="BlendShape"){const o={id:s};o.rawTargets=this.parseMorphTargets(r,i),o.id=s,r.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),t[s]=o}}}return{skeletons:e,morphTargets:t}}parseSkeleton(e,t){const i=[];return e.children.forEach(function(s){const a=t[s.ID];if(a.attrType!=="Cluster")return;const r={ID:s.ID,indices:[],weights:[],transformLink:new Ee().fromArray(a.TransformLink.a)};"Indexes"in a&&(r.indices=a.Indexes.a,r.weights=a.Weights.a),i.push(r)}),{rawBones:i,bones:[]}}parseMorphTargets(e,t){const i=[];for(let s=0;s1?r=o:o.length>0?r=o[0]:(r=new ir({name:ln.DEFAULT_MATERIAL_NAME,color:13421772}),o.push(r)),"color"in a.attributes&&o.forEach(function(l){l.vertexColors=!0}),a.groups.length>0){let l=!1;for(let c=0,u=a.groups.length;c=o.length)&&(d.materialIndex=o.length,l=!0)}if(l){const c=new ir;o.push(c)}}return a.FBX_Deformer?(s=new rf(a,r),s.normalizeSkinWeights()):s=new Se(a,r),s}createCurve(e,t){const i=e.children.reduce(function(a,r){return t.has(r.ID)&&(a=t.get(r.ID)),a},null),s=new Pt({name:ln.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new On(i,s)}getTransformData(e,t){const i={};"InheritType"in t&&(i.inheritType=parseInt(t.InheritType.value)),"RotationOrder"in t?i.eulerOrder=hc(t.RotationOrder.value):i.eulerOrder=hc(0),"Lcl_Translation"in t&&(i.translation=t.Lcl_Translation.value),"PreRotation"in t&&(i.preRotation=t.PreRotation.value),"Lcl_Rotation"in t&&(i.rotation=t.Lcl_Rotation.value),"PostRotation"in t&&(i.postRotation=t.PostRotation.value),"Lcl_Scaling"in t&&(i.scale=t.Lcl_Scaling.value),"ScalingOffset"in t&&(i.scalingOffset=t.ScalingOffset.value),"ScalingPivot"in t&&(i.scalingPivot=t.ScalingPivot.value),"RotationOffset"in t&&(i.rotationOffset=t.RotationOffset.value),"RotationPivot"in t&&(i.rotationPivot=t.RotationPivot.value),e.userData.transformData=i}setLookAtProperties(e,t){"LookAtProperty"in t&&Jt.get(e.ID).children.forEach(function(s){if(s.relationship==="LookAtProperty"){const a=gt.Objects.Model[s.ID];if("Lcl_Translation"in a){const r=a.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(r),Vn.add(e.target)):e.lookAt(new T().fromArray(r))}}})}bindSkeleton(e,t,i){const s=this.parsePoseNodes();for(const a in e){const r=e[a];Jt.get(parseInt(r.ID)).parents.forEach(function(l){if(t.has(l.ID)){const c=l.ID;Jt.get(c).parents.forEach(function(d){i.has(d.ID)&&i.get(d.ID).bind(new Go(r.bones),s[d.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in gt.Objects){const t=gt.Objects.Pose;for(const i in t)if(t[i].attrType==="BindPose"&&t[i].NbPoseNodes>0){const s=t[i].PoseNode;Array.isArray(s)?s.forEach(function(a){e[a.Node]=new Ee().fromArray(a.Matrix.a)}):e[s.Node]=new Ee().fromArray(s.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in gt){if("AmbientColor"in gt.GlobalSettings){const e=gt.GlobalSettings.AmbientColor.value,t=e[0],i=e[1],s=e[2];if(t!==0||i!==0||s!==0){const a=new de().setRGB(t,i,s,yt);Vn.add(new Pc(a,1))}}"UnitScaleFactor"in gt.GlobalSettings&&(Vn.userData.unitScaleFactor=gt.GlobalSettings.UnitScaleFactor.value)}}}class FF{constructor(){this.negativeMaterialIndices=!1}parse(e){const t=new Map;if("Geometry"in gt.Objects){const i=gt.Objects.Geometry;for(const s in i){const a=Jt.get(parseInt(s)),r=this.parseGeometry(a,i[s],e);t.set(parseInt(s),r)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),t}parseGeometry(e,t,i){switch(t.attrType){case"Mesh":return this.parseMeshGeometry(e,t,i);case"NurbsCurve":return this.parseNurbsGeometry(t)}}parseMeshGeometry(e,t,i){const s=i.skeletons,a=[],r=e.parents.map(function(d){return gt.Objects.Model[d.ID]});if(r.length===0)return;const o=e.children.reduce(function(d,h){return s[h.ID]!==void 0&&(d=s[h.ID]),d},null);e.children.forEach(function(d){i.morphTargets[d.ID]!==void 0&&a.push(i.morphTargets[d.ID])});const l=r[0],c={};"RotationOrder"in l&&(c.eulerOrder=hc(l.RotationOrder.value)),"InheritType"in l&&(c.inheritType=parseInt(l.InheritType.value)),"GeometricTranslation"in l&&(c.translation=l.GeometricTranslation.value),"GeometricRotation"in l&&(c.rotation=l.GeometricRotation.value),"GeometricScaling"in l&&(c.scale=l.GeometricScaling.value);const u=nM(c);return this.genGeometry(t,o,a,u)}genGeometry(e,t,i,s){const a=new $e;e.attrName&&(a.name=e.attrName);const r=this.parseGeoNode(e,t),o=this.genBuffers(r),l=new Ce(o.vertex,3);if(l.applyMatrix4(s),a.setAttribute("position",l),o.colors.length>0&&a.setAttribute("color",new Ce(o.colors,3)),t&&(a.setAttribute("skinIndex",new Qh(o.weightsIndices,4)),a.setAttribute("skinWeight",new Ce(o.vertexWeights,4)),a.FBX_Deformer=t),o.normal.length>0){const c=new at().getNormalMatrix(s),u=new Ce(o.normal,3);u.applyNormalMatrix(c),a.setAttribute("normal",u)}if(o.uvs.forEach(function(c,u){const d=u===0?"uv":`uv${u}`;a.setAttribute(d,new Ce(o.uvs[u],2))}),r.material&&r.material.mappingType!=="AllSame"){let c=o.materialIndex[0],u=0;if(o.materialIndex.forEach(function(d,h){d!==c&&(a.addGroup(u,h-u,c),c=d,u=h)}),a.groups.length>0){const d=a.groups[a.groups.length-1],h=d.start+d.count;h!==o.materialIndex.length&&a.addGroup(h,o.materialIndex.length-h,c)}a.groups.length===0&&a.addGroup(0,o.materialIndex.length,o.materialIndex[0])}return this.addMorphTargets(a,e,i,s),a}parseGeoNode(e,t){const i={};if(i.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],i.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&e.LayerElementColor[0].Colors&&(i.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(i.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(i.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){i.uv=[];let s=0;for(;e.LayerElementUV[s];)e.LayerElementUV[s].UV&&i.uv.push(this.parseUVs(e.LayerElementUV[s])),s++}return i.weightTable={},t!==null&&(i.skeleton=t,t.rawBones.forEach(function(s,a){s.indices.forEach(function(r,o){i.weightTable[r]===void 0&&(i.weightTable[r]=[]),i.weightTable[r].push({id:a,weight:s.weights[o]})})})),i}genBuffers(e){const t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let i=0,s=0,a=!1,r=[],o=[],l=[],c=[],u=[],d=[];const h=this;return e.vertexIndices.forEach(function(f,p){let g,_=!1;f<0&&(f=f^-1,_=!0);let m=[],v=[];if(r.push(f*3,f*3+1,f*3+2),e.color){const y=Ru(p,i,f,e.color);l.push(y[0],y[1],y[2])}if(e.skeleton){if(e.weightTable[f]!==void 0&&e.weightTable[f].forEach(function(y){v.push(y.weight),m.push(y.id)}),v.length>4){a||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),a=!0);const y=[0,0,0,0],b=[0,0,0,0];v.forEach(function(S,x){let M=S,C=m[x];b.forEach(function(w,E,R){if(M>w){R[E]=M,M=w;const L=y[E];y[E]=C,C=L}})}),m=y,v=b}for(;v.length<4;)v.push(0),m.push(0);for(let y=0;y<4;++y)u.push(v[y]),d.push(m[y])}if(e.normal){const y=Ru(p,i,f,e.normal);o.push(y[0],y[1],y[2])}e.material&&e.material.mappingType!=="AllSame"&&(g=Ru(p,i,f,e.material)[0],g<0&&(h.negativeMaterialIndices=!0,g=0)),e.uv&&e.uv.forEach(function(y,b){const S=Ru(p,i,f,y);c[b]===void 0&&(c[b]=[]),c[b].push(S[0]),c[b].push(S[1])}),s++,_&&(h.genFace(t,e,r,g,o,l,c,u,d,s),i++,s=0,r=[],o=[],l=[],c=[],u=[],d=[])}),t}getNormalNewell(e){const t=new T(0,0,0);for(let i=0;i.5?new T(0,1,0):new T(0,0,1)).cross(t).normalize(),a=t.clone().cross(s).normalize();return{normal:t,tangent:s,bitangent:a}}flattenVertex(e,t,i){return new ne(e.dot(t),e.dot(i))}genFace(e,t,i,s,a,r,o,l,c,u){let d;if(u>3){const h=[],f=t.baseVertexPositions||t.vertexPositions;for(let m=0;m1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const r=e.get(a[0].ID);i[s]={name:t[s].attrName,layer:r}}return i}addClip(e){let t=[];const i=this;return e.layer.forEach(function(s){t=t.concat(i.generateTracks(s))}),new ya(e.name,-1,t)}generateTracks(e){const t=[];let i=new T,s=new T;if(e.transform&&e.transform.decompose(i,new ht,s),i=i.toArray(),s=s.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.T.curves,i,"position");a!==void 0&&t.push(a)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const a=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);a!==void 0&&t.push(a)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.S.curves,s,"scale");a!==void 0&&t.push(a)}if(e.DeformPercent!==void 0){const a=this.generateMorphTrack(e);a!==void 0&&t.push(a)}return t}generateVectorTrack(e,t,i,s){const a=this.getTimesForAllAxes(t),r=this.getKeyframeTrackValues(a,t,i);return new qs(e+"."+s,a,r)}generateRotationTrack(e,t,i,s,a){let r,o;if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){const h=this.interpolateRotations(t.x,t.y,t.z,a);r=h[0],o=h[1]}const l=hc(0);i!==void 0&&(i=i.map(bt.degToRad),i.push(l),i=new rn().fromArray(i),i=new ht().setFromEuler(i)),s!==void 0&&(s=s.map(bt.degToRad),s.push(l),s=new rn().fromArray(s),s=new ht().setFromEuler(s).invert());const c=new ht,u=new rn,d=[];if(!o||!r)return new Ss(e+".quaternion",[0],[0]);for(let h=0;h2&&new ht().fromArray(d,(h-3)/3*4).dot(c)<0&&c.set(-c.x,-c.y,-c.z,-c.w),c.toArray(d,h/3*4);return new Ss(e+".quaternion",r,d)}generateMorphTrack(e){const t=e.DeformPercent.curves.morph,i=t.values.map(function(a){return a/100}),s=Vn.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new ga(e.modelName+".morphTargetInfluences["+s+"]",t.times,i)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(i,s){return i-s}),t.length>1){let i=1,s=t[0];for(let a=1;a=180||f[1]>=180||f[2]>=180){const g=Math.max(...f)/180,_=new rn(...c,s),m=new rn(...d,s),v=new ht().setFromEuler(_),y=new ht().setFromEuler(m);v.dot(y)&&y.set(-y.x,-y.y,-y.z,-y.w);const b=e.times[o-1],S=e.times[o]-b,x=new ht,M=new rn;for(let C=0;C<1;C+=1/g)x.copy(v.clone().slerp(y.clone(),C)),a.push(b+C*S),M.setFromQuaternion(x,s),r.push(M.x),r.push(M.y),r.push(M.z)}else a.push(e.times[o]),r.push(bt.degToRad(e.values[o])),r.push(bt.degToRad(t.values[o])),r.push(bt.degToRad(i.values[o]))}return[a,r]}}class UF{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new tM,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const t=this,i=e.split(/[\r\n]+/);return i.forEach(function(s,a){const r=s.match(/^[\s\t]*;/),o=s.match(/^[\s\t]*$/);if(r||o)return;const l=s.match("^\\t{"+t.currentIndent+"}(\\w+):(.*){",""),c=s.match("^\\t{"+t.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),u=s.match("^\\t{"+(t.currentIndent-1)+"}}");l?t.parseNodeBegin(s,l):c?t.parseNodeProperty(s,c,i[++a]):u?t.popStack():s.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(s)}),this.allNodes}parseNodeBegin(e,t){const i=t[1].trim().replace(/^"/,"").replace(/"$/,""),s=t[2].split(",").map(function(l){return l.trim().replace(/^"/,"").replace(/"$/,"")}),a={name:i},r=this.parseNodeAttr(s),o=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(i,a):i in o?(i==="PoseNode"?o.PoseNode.push(a):o[i].id!==void 0&&(o[i]={},o[i][o[i].id]=o[i]),r.id!==""&&(o[i][r.id]=a)):typeof r.id=="number"?(o[i]={},o[i][r.id]=a):i!=="Properties70"&&(i==="PoseNode"?o[i]=[a]:o[i]=a),typeof r.id=="number"&&(a.id=r.id),r.name!==""&&(a.attrName=r.name),r.type!==""&&(a.attrType=r.type),this.pushStack(a)}parseNodeAttr(e){let t=e[0];e[0]!==""&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let i="",s="";return e.length>1&&(i=e[1].replace(/^(\w+)::/,""),s=e[2]),{id:t,name:i,type:s}}parseNodeProperty(e,t,i){let s=t[1].replace(/^"/,"").replace(/"$/,"").trim(),a=t[2].replace(/^"/,"").replace(/"$/,"").trim();s==="Content"&&a===","&&(a=i.replace(/"/g,"").replace(/,$/,"").trim());const r=this.getCurrentNode();if(r.name==="Properties70"){this.parseNodeSpecialProperty(e,s,a);return}if(s==="C"){const l=a.split(",").slice(1),c=parseInt(l[0]),u=parseInt(l[1]);let d=a.split(",").slice(3);d=d.map(function(h){return h.trim().replace(/^"/,"")}),s="connections",a=[c,u],$F(a,d),r[s]===void 0&&(r[s]=[])}s==="Node"&&(r.id=a),s in r&&Array.isArray(r[s])?r[s].push(a):s!=="a"?r[s]=a:r.a=a,this.setCurrentProp(r,s),s==="a"&&a.slice(-1)!==","&&(r.a=zp(a))}parseNodePropertyContinued(e){const t=this.getCurrentNode();t.a+=e,e.slice(-1)!==","&&(t.a=zp(t.a))}parseNodeSpecialProperty(e,t,i){const s=i.split('",').map(function(u){return u.trim().replace(/^\"/,"").replace(/\s/,"_")}),a=s[0],r=s[1],o=s[2],l=s[3];let c=s[4];switch(r){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":c=parseFloat(c);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":c=zp(c);break}this.getPrevNode()[a]={type:r,type2:o,flag:l,value:c},this.setCurrentProp(this.getPrevNode(),a)}}class BF{parse(e){const t=new Av(e);t.skip(23);const i=t.getUint32();if(i<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+i);const s=new tM;for(;!this.endOfContent(t);){const a=this.parseNode(t,i);a!==null&&s.add(a.name,a)}return s}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){const i={},s=t>=7500?e.getUint64():e.getUint32(),a=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();const r=e.getUint8(),o=e.getString(r);if(s===0)return null;const l=[];for(let h=0;h0?l[0]:"",u=l.length>1?l[1]:"",d=l.length>2?l[2]:"";for(i.singleProperty=a===1&&e.getOffset()===s;s>e.getOffset();){const h=this.parseNode(e,t);h!==null&&this.parseSubNode(o,i,h)}return i.propertyList=l,typeof c=="number"&&(i.id=c),u!==""&&(i.attrName=u),d!==""&&(i.attrType=d),o!==""&&(i.name=o),i}parseSubNode(e,t,i){if(i.singleProperty===!0){const s=i.propertyList[0];Array.isArray(s)?(t[i.name]=i,i.a=s):t[i.name]=s}else if(e==="Connections"&&i.name==="C"){const s=[];i.propertyList.forEach(function(a,r){r!==0&&s.push(a)}),t.connections===void 0&&(t.connections=[]),t.connections.push(s)}else if(i.name==="Properties70")Object.keys(i).forEach(function(a){t[a]=i[a]});else if(e==="Properties70"&&i.name==="P"){let s=i.propertyList[0],a=i.propertyList[1];const r=i.propertyList[2],o=i.propertyList[3];let l;s.indexOf("Lcl ")===0&&(s=s.replace("Lcl ","Lcl_")),a.indexOf("Lcl ")===0&&(a=a.replace("Lcl ","Lcl_")),a==="Color"||a==="ColorRGB"||a==="Vector"||a==="Vector3D"||a.indexOf("Lcl_")===0?l=[i.propertyList[4],i.propertyList[5],i.propertyList[6]]:l=i.propertyList[4],t[s]={type:a,type2:r,flag:o,value:l}}else t[i.name]===void 0?typeof i.id=="number"?(t[i.name]={},t[i.name][i.id]=i):t[i.name]=i:i.name==="PoseNode"?(Array.isArray(t[i.name])||(t[i.name]=[t[i.name]]),t[i.name].push(i)):t[i.name][i.id]===void 0&&(t[i.name][i.id]=i)}parseProperty(e){const t=e.getString(1);let i;switch(t){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return i=e.getUint32(),e.getArrayBuffer(i);case"S":return i=e.getUint32(),e.getString(i);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const s=e.getUint32(),a=e.getUint32(),r=e.getUint32();if(a===0)switch(t){case"b":case"c":return e.getBooleanArray(s);case"d":return e.getFloat64Array(s);case"f":return e.getFloat32Array(s);case"i":return e.getInt32Array(s);case"l":return e.getInt64Array(s)}const o=SF(new Uint8Array(e.getArrayBuffer(r))),l=new Av(o.buffer);switch(t){case"b":case"c":return l.getBooleanArray(s);case"d":return l.getFloat64Array(s);case"f":return l.getFloat32Array(s);case"i":return l.getInt32Array(s);case"l":return l.getInt64Array(s)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+t)}}}class Av{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t!==void 0?t:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const t=[];for(let i=0;i=0&&(i=new Uint8Array(this.dv.buffer,t,s)),this._textDecoder.decode(i)}}class tM{add(e,t){this[e]=t}}function zF(n){const e="Kaydara FBX Binary \0";return n.byteLength>=e.length&&e===iM(n,0,e.length)}function HF(n){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let t=0;function i(s){const a=n[s-1];return n=n.slice(t+s),t++,a}for(let s=0;s(console.warn(`⚠️ Could not load texture ${u}:`,d.message),null))])}this._processModelMaterials(s,a,e,i.format);const o=this._calculateModelScale(s,e,i.scale);if(s.userData.scaleInfo=o,s.userData.format=i.format,i.wheelSockets){s.userData.wheelSockets=!0,s.userData.wheelModelName=i.wheelModel;const l=this._findWheelSockets(s);s.userData.wheelSocketObjects=l,console.log(`🔌 Found ${Object.keys(l).length} wheel sockets`)}return{model:s,chassisTexture:a,wheelModel:r}}_findWheelSockets(e){const t={},i=["Wheel_BL","Wheel_BR","Wheel_FL","Wheel_FR"];console.log("🔍 Searching for wheel sockets..."),e.traverse(s=>{const a=s.name,r=a.toLowerCase();for(const o of i)(a===o||r===o.toLowerCase())&&(t[o]=s,console.log(` Found socket: "${a}" at position (${s.position.x.toFixed(2)}, ${s.position.y.toFixed(2)}, ${s.position.z.toFixed(2)})`))});for(const s of i)t[s]||console.warn(` ⚠️ Missing wheel socket: ${s}`);return Object.keys(t).length===0&&(console.warn("⚠️ No wheel sockets found! Listing all objects:"),e.traverse(s=>{console.log(` - "${s.name}" (${s.type})`)})),t}_calculateModelScale(e,t,i=null){const s=new bn().setFromObject(e),a=new T;s.getSize(a),console.log(`📐 ${t.toUpperCase()} model dimensions (raw):`),console.log(` Size: X=${a.x.toFixed(2)}, Y=${a.y.toFixed(2)}, Z=${a.z.toFixed(2)}`),console.log(` Min Y: ${s.min.y.toFixed(2)}, Max Y: ${s.max.y.toFixed(2)}`);const r=this.HITBOX_DIMENSIONS[t]||this.HITBOX_DIMENSIONS.octane;let o;if(i!==null)o=i,console.log(` Using override scale: ${o}`);else{const l=a.z,u=r.length*1/l;o=u*.55,console.log(` Target RL: ${r.length} x ${r.width} x ${r.height} uu`),console.log(` Scale to RL: ${u.toFixed(4)}, Final scale: ${o.toFixed(6)}`)}return{scale:o}}_loadFBX(e){return new Promise((t,i)=>{this.fbxLoader.load(e,s=>t(s),void 0,s=>i(new Error(`Failed to load FBX: ${e} - ${s.message}`)))})}_loadGLB(e){return new Promise((t,i)=>{this.gltfLoader.load(e,s=>{t(s.scene)},void 0,s=>i(new Error(`Failed to load GLB: ${e} - ${s.message}`)))})}async loadWheelModel(e){const t=Ri(`models/wheels/${e}`,this.assetBase);if(this.wheelModelCache.has(t))return this.wheelModelCache.get(t);if(this.wheelLoadingPromises.has(t))return this.wheelLoadingPromises.get(t);const i=this._loadGLB(t);this.wheelLoadingPromises.set(t,i);try{const s=await i;return console.log(`✓ Loaded wheel model: ${e}`),s.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.wheelModelCache.set(t,s),s}catch(s){throw console.error(`Failed to load wheel model ${e}:`,s),s}finally{this.wheelLoadingPromises.delete(t)}}_loadTexture(e){return new Promise((t,i)=>{this.textureLoader.load(e,s=>{s.flipY=!1,s.colorSpace=yt,t(s)},void 0,s=>i(new Error(`Failed to load texture: ${e}`)))})}_processModelMaterials(e,t,i,s="fbx"){console.log(`📦 Processing materials for ${i} (${s}):`);const a=["body","paint"],r=[];e.traverse(o=>{o.isLight&&(r.push(o),console.log(` 🔦 Removing imported light: "${o.name||o.type}"`))}),r.forEach(o=>{o.parent&&o.parent.remove(o)}),e.traverse(o=>{o.isMesh&&(console.log(` Mesh: "${o.name}"`),(Array.isArray(o.material)?o.material:[o.material]).forEach((c,u)=>{console.log(` [${u}] Material: "${c.name}" - Color: #${c.color?.getHexString()||"none"}`);const d=(c.name||"").toLowerCase(),h=(o.name||"").toLowerCase(),f=a.some(p=>d.includes(p)||h.includes(p));if(s==="glb")(c.isMeshStandardMaterial||c.isMeshPhysicalMaterial)&&(console.log(` → GLB material (keeping as-is): metalness=${c.metalness?.toFixed(2)}, roughness=${c.roughness?.toFixed(2)}`),c.userData.originalColor=c.color?.clone(),c.userData.isBodyMaterial=f);else if(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial){let p;f?(p=new kn({color:c.color,map:c.map,metalness:.8,roughness:.15}),console.log(" → Body material: shiny metallic")):(p=new kn({color:c.color,map:c.map,metalness:.1,roughness:.6}),console.log(" → Non-body material: matte")),p.name=c.name,Array.isArray(o.material)?o.material[u]=p:o.material=p}}))}),t?console.log(` ✓ Chassis texture loaded for ${i}`):s==="fbx"&&console.log(` ⚠️ No chassis texture for ${i}`)}getModelTypeForCar(e,t){return e&&this.carNameToModel[e]?this.carNameToModel[e]:this.hitboxToModel[t]||"octane"}getModelTypeForHitbox(e){return this.hitboxToModel[e]||"octane"}async createCarMesh(e,t=0){const i=this.getModelTypeForHitbox(e);try{const s=await this.loadModel(i);if(!s||!s.model)return console.warn(`No cached model for ${i}`),null;const a=s.model.userData.format||"fbx";let r;a==="glb"?(r=Hp(s.model),r.traverse(c=>{c.isMesh&&(Array.isArray(c.material)?c.material=c.material.map(u=>u.clone()):c.material&&(c.material=c.material.clone()))})):r=s.model.clone(),this.applyTeamColor(r,t);const o=new Et,l=s.model.userData.scaleInfo;return l&&r.scale.setScalar(l.scale),o.add(r),r.traverse(c=>{c.isMesh&&(c.castShadow=!0)}),o.userData.modelType=i,o.userData.hitboxType=e,o.userData.team=t,o.userData.isFBXModel=a==="fbx",o.userData.isGLBModel=a==="glb",o}catch(s){return console.error(`Failed to create car mesh for ${e}:`,s),null}}applyTeamColor(e,t){const i=t===0?this.TEAM_COLORS.blue:this.TEAM_COLORS.orange,s=["body","paint"];let a=!1;console.log("🔍 Analyzing car meshes for team coloring:"),e.traverse(r=>{if(r.isMesh){const o=Array.isArray(r.material)?r.material:[r.material];console.log(` Mesh: "${r.name}" with ${o.length} material(s)`),o.forEach((l,c)=>{console.log(` [${c}] Material: "${l.name}", isBodyMaterial: ${l.userData?.isBodyMaterial}`)})}}),e.traverse(r=>{r.isMesh&&(Array.isArray(r.material)?r.material:[r.material]).forEach((l,c)=>{const u=(l.name||"").toLowerCase(),d=(r.name||"").toLowerCase(),h=l.userData?.isBodyMaterial||s.some(f=>u.includes(f)||d.includes(f));if(console.log(` Checking "${l.name}" on "${r.name}": isBody=${h}`),h){a=!0;const f=l.clone();f.color=i.clone(),f.metalness=.39,f.roughness=.47,f.userData={...l.userData},Array.isArray(r.material)?r.material[c]=f:r.material=f,console.log(`🎨 Applied team color to: "${l.name}" on mesh "${r.name}" (index ${c})`)}})}),a||console.warn("⚠️ No body material found for team coloring! Check material names.")}updateTeamColor(e,t){this.applyTeamColor(e,t)}isModelReady(e,t){const i=this.getModelTypeForCar(e,t);return this.modelCache.has(this.modelCacheKey(i))}getCarMeshSync(e,t,i=0){const s=this.getModelTypeForCar(e,t),a=this.modelCache.get(this.modelCacheKey(s));if(!a||!a.model)return null;const r=a.model.userData.format||"fbx",o=a.model.userData.wheelSockets;let l;r==="glb"?(l=Hp(a.model),l.traverse(d=>{d.isMesh&&(Array.isArray(d.material)?d.material=d.material.map(h=>h.clone()):d.material&&(d.material=d.material.clone()))})):l=a.model.clone(),this.applyTeamColor(l,i);const c=new Et,u=a.model.userData.scaleInfo;return u&&l.scale.setScalar(u.scale),c.add(l),l.traverse(d=>{d.isMesh&&(d.castShadow=!0)}),c.userData.modelType=s,c.userData.carName=e,c.userData.hitboxType=t,c.userData.team=i,c.userData.isFBXModel=r==="fbx",c.userData.isGLBModel=r==="glb",c.userData.hasWheelSockets=o,o?c.userData.wheels=this._attachWheelsToSockets(l,a.wheelModel):c.userData.wheels=this._findWheelMeshes(l),c}_attachWheelsToSockets(e,t){const i=[],s={Wheel_FL:{side:"left",position:"front"},Wheel_FR:{side:"right",position:"front"},Wheel_BL:{side:"left",position:"rear"},Wheel_BR:{side:"right",position:"rear"}};if(!t)return console.warn("⚠️ No wheel model template available for socket attachment"),i;console.log("🔧 Attaching wheels to sockets...");const a={};e.traverse(r=>{const o=r.name;s[o]&&(a[o]=r)});for(const[r,o]of Object.entries(s)){const l=a[r];if(!l){console.warn(` ⚠️ Socket not found: ${r}`);continue}const c=Hp(t);c.traverse(u=>{u.isMesh&&(Array.isArray(u.material)?u.material=u.material.map(d=>d.clone()):u.material&&(u.material=u.material.clone()),u.castShadow=!0)}),c.position.set(0,0,0),c.rotation.set(0,0,0),l.add(c),console.log(` ✓ Attached wheel to ${r} (${o.position} ${o.side})`),i.push({mesh:c,steeringPivot:o.position==="front"?l:null,side:o.side,position:o.position,socket:l})}return console.log(`✓ Attached ${i.length} wheels to sockets`),i}_findWheelMeshes(e){const t=[],i={fl:{side:"left",position:"front"},fr:{side:"right",position:"front"},rl:{side:"left",position:"rear"},rr:{side:"right",position:"rear"}};console.log("🔍 Searching for wheels in model...");const s={};e.traverse(a=>{const o=a.name.toLowerCase().match(/^wheel_(fl|fr|rl|rr)_(y|z)$/);if(o){const l=o[1],c=o[2];s[l]||(s[l]={}),s[l][c]=a,console.log(` Found: "${a.name}" (${c==="y"?"wheel mesh":"steering pivot"})`)}});for(const[a,r]of Object.entries(s)){const o=i[a];if(!o)continue;const l=r.y,c=r.z;l&&(a==="fr"&&(l.rotation.z+=Math.PI,console.log(" Fixed FR wheel orientation (rotation.z += PI)")),t.push({mesh:l,steeringPivot:o.position==="front"?c:null,side:o.side,position:o.position}),console.log(`🛞 Wheel ${a.toUpperCase()}: mesh="${l.name}"${c&&o.position==="front"?`, steering="${c.name}"`:""}`))}return t.length===0?(console.warn("⚠️ No wheel meshes found. Expected: Wheel_FL_Y, Wheel_FR_Y, etc."),console.warn(" Listing all objects in model:"),e.traverse(a=>{console.log(` - "${a.name}" (${a.type})`)})):console.log(`✓ Found ${t.length} wheels`),t}dispose(){}}const ZF=2,Vp=new Map;function JF(n){const e=Ri("models/ball/scene.gltf",n);let t=Vp.get(e);if(!t){const i=new ey;t=new Promise(s=>{i.load(e,a=>{console.log("✓ Ball model loaded"),s(a.scene)},void 0,a=>{console.error("Failed to load ball model:",a),Vp.delete(e),s(null)})}),Vp.set(e,t)}return t}class QF{constructor(e,t,i={}){this.scene=e,this.effectsManager=t,this.assetBase=i.assetBase,this.actors={},this.ballActorId=null,this.ballIndicator=null,this.ballVerticalLine=null,this.playerNames=new Set,this.actorToPlayer={},this.actorLinks={},this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.carModelLoader=new jF({assetBase:this.assetBase}),this.pendingCarReplacements=new Map,this._lastGoalScanTime=null,this._firedGoalTimes=new Set,this._p0=new T,this._p1=new T,this._v0=new T,this._v1=new T,this._nextRot=new ht,this._q0=new ht,this._q1=new ht,this._qResult=new ht,this.onPlayerFound=null,this.lastBallTouchTeam=0,this.BALL_TOUCH_DISTANCE=200,this.ballTimeline=[],this.playerTimelineMap={},this.timelineIndices={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer=null,this.animationActions={},this.animationClock=new Wg(!1),this.replayDuration=0,this.useAnimationSystem=!1,this.SMOOTHING_WINDOW=5,this.positionBuffers={},this.rotationBuffers={},this.interpolationEnabled=!0,this.interpolationMethod="lerp",this.smoothingWindowSize=12,this.lastFrameInfo=null,this._lowPassState=new Map,this._lowPassAlpha=.3,this._predictState=new Map,this._predictCorrectionTime=.1,this._smoothingBuffers=new Map,this._adaptiveState=new Map,this.ballModel=null,this._ballModelReplaced=!1,this.ballModelReady=JF(this.assetBase).then(s=>(this.ballModel=s,s!==null))}async waitForBallModel(){const e=await this.ballModelReady;return e&&!this._ballModelReplaced&&this.ballActorId&&this.actors[this.ballActorId]&&(this.replaceBallWithModel(this.ballActorId),this._ballModelReplaced=!0),e}replaceBallWithModel(e){const t=this.actors[e];if(!t||!this.ballModel)return;const i=this.ballModel.clone();i.userData=t.userData,i.position.copy(t.position),i.quaternion.copy(t.quaternion),i.scale.copy(t.scale);const s=92.75;i.scale.set(s,s,s),i.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.scene.remove(t),this.scene.add(i),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),this.actors[e]=i,console.log("✓ Ball replaced with GLTF model")}reset(){Object.values(this.actors).forEach(e=>{this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.actors={},this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null),this.actorToPlayer={},this.actorLinks={},this.playerNames.clear(),this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.pendingCarReplacements.clear(),this._lastGoalScanTime=null,this._firedGoalTimes.clear(),this.ballTimeline=[],this.playerTimelineMap={},this.ballTimelineCorrected=[],this.playerTimelineMapCorrected={},this.ballTimelineFiltered=[],this.playerTimelineMapFiltered={},this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer?.stopAllAction?.(),this.animationMixer=null,this.animationActions={},this.replayDuration=0,this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear(),this._predictState.clear(),this._smoothingBuffers.clear(),this._adaptiveState.clear(),this._ballModelReplaced=!1}resetGoalExplosionPlaybackState(){this._lastGoalScanTime=null,this._firedGoalTimes.clear()}setPlayerTeams(e){this.playerTeams=e}initFromFramework(e){console.log("[ActorManager] Initializing actors from framework..."),this._createBallMesh();const t=e.playerList;t.forEach((i,s)=>{this._createCarMesh(i.name,i.team,s,i.carName,i.hitboxType);const a=this.playerNameToCarActorId[i.name];this.actors[a]}),console.log(`[ActorManager] Created ${t.length} car meshes + 1 ball`)}initInterpolants(e){console.log("[ActorManager] Initializing interpolation system..."),this.ballTimeline=e.ballTimeline||[],this.playerTimelineMap=e.playerTimelines||{},this.ballTimelineCorrected=this._correctTimeShiftedPositions(this.ballTimeline),this.playerTimelineMapCorrected={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapCorrected[s]=this._correctTimeShiftedPositions(a)}),this.ballTimelineFiltered=this._filterBadFrames(this.ballTimeline),this.playerTimelineMapFiltered={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapFiltered[s]=this._filterBadFrames(a)}),this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},Object.keys(this.playerTimelineMap).forEach(s=>{this.timelineIndices.players[s]=0,this.timelineIndicesFiltered.players[s]=0,this.timelineIndicesCorrected.players[s]=0}),this.ballTimeline.length>0&&(this.replayDuration=this.ballTimeline[this.ballTimeline.length-1].time),this.useAnimationSystem&&this._initAnimationSystem(),this.interpolantsInitialized=!0;const t=this.ballTimeline.length-this.ballTimelineFiltered.length,i=this.ballTimelineCorrected._correctedCount||0;console.log(` Ball: ${this.ballTimeline.length} keyframes (${i} corrected, ${t} filtered)`),Object.entries(this.playerTimelineMap).forEach(([s,a])=>{const r=this.playerTimelineMapCorrected[s]?._correctedCount||0;console.log(` ${s}: ${a.length} keyframes (${r} corrected)`)}),console.log(` Replay duration: ${this.replayDuration.toFixed(2)}s`),console.log("[ActorManager] Animation system ready")}_initAnimationSystem(){console.log("[ActorManager] Building Three.js animation clips..."),this.animationMixer=new DT(this.scene);const e=this.actors[this.ballActorId];if(e&&this.ballTimeline.length>0){const t=this._createAnimationClip("ball",this.ballTimeline,e);if(t){const i=this.animationMixer.clipAction(t,e);i.setLoop(ph),i.clampWhenFinished=!0,this.animationActions.ball=i,console.log(` ✓ Ball animation: ${t.duration.toFixed(2)}s`)}}Object.entries(this.playerTimelineMap).forEach(([t,i])=>{const s=this.playerNameToCarActorId[t],a=this.actors[s];if(a&&i.length>0){const r=this._createAnimationClip(t,i,a);if(r){const o=this.animationMixer.clipAction(r,a);o.setLoop(ph),o.clampWhenFinished=!0,this.animationActions[t]=o,console.log(` ✓ ${t} animation: ${r.duration.toFixed(2)}s`)}}}),console.log("[ActorManager] Animation clips ready")}_createAnimationClip(e,t,i){if(!t||t.length<2)return null;const s=[],a=[],r=[],o=t[0];o.time>0&&(s.push(0),o.position?a.push(o.position.x,o.position.y,o.position.z):a.push(0,0,0),o.rotation?r.push(o.rotation.x,o.rotation.y,o.rotation.z,o.rotation.w):r.push(0,0,0,1));for(const h of t){if(s.push(h.time),h.position)a.push(h.position.x,h.position.y,h.position.z);else{const f=a.length-3;f>=0?a.push(a[f],a[f+1],a[f+2]):a.push(0,0,0)}if(h.rotation)r.push(h.rotation.x,h.rotation.y,h.rotation.z,h.rotation.w);else{const f=r.length-4;f>=0?r.push(r[f],r[f+1],r[f+2],r[f+3]):r.push(0,0,0,1)}}const l=new qs(".position",s,a,mr),c=new Ss(".quaternion",s,r),u=s[s.length-1]-s[0];return new ya(e,u,[l,c])}startAnimations(){this.animationMixer&&(Object.values(this.animationActions).forEach(e=>{e.reset(),e.play()}),this.animationClock.start(),console.log("[ActorManager] Animations started"))}pauseAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!0})}resumeAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!1})}seekAnimations(e){this.animationMixer&&(Object.values(this.animationActions).forEach(t=>{t.time=e}),this.animationMixer.setTime(e))}updateAnimations(e){!this.animationMixer||!this.useAnimationSystem||this.animationMixer.update(e)}_subsampleTimeline(e){return!e||e.length<4?e:e.filter((t,i)=>i%2===0)}_getOrCreateSmoothingBuffer(e){return this.positionBuffers[e]||(this.positionBuffers[e]=[],this.rotationBuffers[e]=[]),{positions:this.positionBuffers[e],rotations:this.rotationBuffers[e]}}_smoothPosition(e,t){const i=this._getOrCreateSmoothingBuffer(e).positions;for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_smoothRotation(e,t){const i=this._getOrCreateSmoothingBuffer(e).rotations;for(i.push({x:t.x,y:t.y,z:t.z,w:t.w});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length<3)return t;const s=Math.floor(i.length/2);return i[s]}resetSmoothingBuffers(){this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear()}_findKeyframeIndex(e,t,i=0){if(!e||e.length===0)return-1;if(t<=e[0].time)return 0;if(t>=e[e.length-1].time)return e.length-2;let s=Math.max(0,Math.min(i,e.length-2));if(e[s].time<=t&&e[s+1].time>t)return s;if(s+2t)return s+1;let a=0,r=e.length-2;for(;a<=r;){const o=Math.floor((a+r)/2);if(e[o].time<=t&&e[o+1].time>t)return o;e[o].time>t?r=o-1:a=o+1}return Math.max(0,Math.min(a,e.length-2))}_applySmoothing(e,t){this._smoothingBuffers.has(e)||this._smoothingBuffers.set(e,[]);const i=this._smoothingBuffers.get(e);for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.smoothingWindowSize;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_applyEmaSmoothing(e,t){const i=`ema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{x:t.x,y:t.y,z:t.z}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.05,Math.min(.5,1/this.smoothingWindowSize)),r={x:a*t.x+(1-a)*s.x,y:a*t.y+(1-a)*s.y,z:a*t.z+(1-a)*s.z};return this._smoothingBuffers.set(i,r),r}_applyDoubleEmaSmoothing(e,t){const i=`dema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{level:{x:t.x,y:t.y,z:t.z},trend:{x:0,y:0,z:0}}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.1,Math.min(.6,2/this.smoothingWindowSize)),r=a*.5,o={x:a*t.x+(1-a)*(s.level.x+s.trend.x),y:a*t.y+(1-a)*(s.level.y+s.trend.y),z:a*t.z+(1-a)*(s.level.z+s.trend.z)},l={x:r*(o.x-s.level.x)+(1-r)*s.trend.x,y:r*(o.y-s.level.y)+(1-r)*s.trend.y,z:r*(o.z-s.level.z)+(1-r)*s.trend.z};return s.level=o,s.trend=l,{x:o.x+l.x,y:o.y+l.y,z:o.z+l.z}}_applyWeightedSmoothing(e,t){const i=`wma-${e}`;this._smoothingBuffers.has(i)||this._smoothingBuffers.set(i,[]);const s=this._smoothingBuffers.get(i);for(s.push({x:t.x,y:t.y,z:t.z});s.length>this.smoothingWindowSize;)s.shift();if(s.length===1)return t;let a=0,r=0,o=0,l=0;for(let c=0;cthis.smoothingWindowSize;)s.shift();if(s.length===1)return t;const a=s.length/3;let r=0,o=0,l=0,c=0;for(let u=0;u.001&&(s.derivedVel={x:(t.x-s.lastPos.x)/a,y:(t.y-s.lastPos.y)/a,z:(t.z-s.lastPos.z)/a});const r=Math.sqrt(s.derivedVel.x**2+s.derivedVel.y**2+s.derivedVel.z**2),o=2,l=this.smoothingWindowSize,c=300,u=1500;let d;if(ru)d=o;else{const _=(r-c)/(u-c);d=Math.round(l-_*(l-o))}if(s.buffer.length>=2){const _=s.buffer[s.buffer.length-1],m=s.buffer[s.buffer.length-2],v={x:_.x-m.x,y:_.y-m.y,z:_.z-m.z},y={x:t.x-_.x,y:t.y-_.y,z:t.z-_.z},b=Math.sqrt(v.x**2+v.y**2+v.z**2),S=Math.sqrt(y.x**2+y.y**2+y.z**2);if(b>.1&&S>.1&&(v.x*y.x+v.y*y.y+v.z*y.z)/(b*S)<.5)for(;s.buffer.length>Math.max(2,d/2);)s.buffer.shift()}for(s.buffer.push({x:t.x,y:t.y,z:t.z});s.buffer.length>d;)s.buffer.shift();if(s.lastPos={x:t.x,y:t.y,z:t.z},s.lastTime=i,s.buffer.length===1)return t;let h=0,f=0,p=0,g=0;for(let _=0;_u+10&&(h.z=t.position.z+t.velocity.z*r-.5*c*r*r,h.zu+10&&(p.z=t.position.z+t.velocity.z*o-.5*c*o*o,p.z0&&o>0){const b=d*o;m>b*2&&(v=b*2/m)}const y=_*v+(1-v)*l;return{x:h.x+g.x*y,y:h.y+g.y*y,z:h.z+g.z*y}}_physicsTickInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=a/s;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=(e.velocity.x+t.velocity.x)/2,l=(e.velocity.y+t.velocity.y)/2,c=(e.velocity.z+t.velocity.z)/2,u=e.position.x+o*a,d=e.position.y+l*a,h=e.position.z+c*a,f=e.position.x+o*s,p=e.position.y+l*s,g=e.position.z+c*s,_=t.position.x-f,m=t.position.y-p,v=t.position.z-g;return{x:u+_*r,y:d+m*r,z:h+v*r}}_velocityOnlyInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=s/a;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=e.velocity.x+(t.velocity.x-e.velocity.x)*r/2,l=e.velocity.y+(t.velocity.y-e.velocity.y)*r/2,c=e.velocity.z+(t.velocity.z-e.velocity.z)*r/2;return{x:e.position.x+o*s,y:e.position.y+l*s,z:e.position.z+c*s}}_smartHybridInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=Math.sqrt(e.velocity.x**2+e.velocity.y**2+e.velocity.z**2),l=Math.sqrt(t.velocity.x**2+t.velocity.y**2+t.velocity.z**2);let c=1;o>10&&l>10&&(c=(e.velocity.x*t.velocity.x+e.velocity.y*t.velocity.y+e.velocity.z*t.velocity.z)/(o*l));const u=o>10?Math.abs(l-o)/o:0;if(c<.95||u>.1){const h=r*r*(3-2*r);return{x:e.position.x+(t.position.x-e.position.x)*h,y:e.position.y+(t.position.y-e.position.y)*h,z:e.position.z+(t.position.z-e.position.z)*h}}else{const h=(e.velocity.x+t.velocity.x)/2,f=(e.velocity.y+t.velocity.y)/2,p=(e.velocity.z+t.velocity.z)/2,g=e.position.x+h*s,_=e.position.y+f*s,m=e.position.z+p*s,v=e.position.x+h*a,y=e.position.y+f*a,b=e.position.z+p*a,S=t.position.x-v,x=t.position.y-y,M=t.position.z-b;return{x:g+S*r,y:_+x*r,z:m+M*r}}}_isBadFrame(e,t){if(!e.velocity||!t.velocity||!e.position||!t.position)return!1;const i=t.time-e.time;if(i<.001)return!1;const s=(e.velocity.x+t.velocity.x)/2,a=(e.velocity.y+t.velocity.y)/2,r=(e.velocity.z+t.velocity.z)/2,o=Math.sqrt(s**2+a**2+r**2);if(o<200)return!1;const l=t.position.x-e.position.x,c=t.position.y-e.position.y,u=t.position.z-e.position.z,d=Math.sqrt(l*l+c*c+u*u),h=o*i,f=d/h;return f<.6||f>1.4}_filterBadFrames(e){if(!e||e.length<2)return e;const t=[e[0]];for(let i=1;i0&&a.position&&a.velocity){const o=e[s-1];if(o.position&&o.velocity){const l=a.time-o.time;if(l>.001){const c=(o.velocity.x+a.velocity.x)/2,u=(o.velocity.y+a.velocity.y)/2,d=(o.velocity.z+a.velocity.z)/2,h=Math.sqrt(c**2+u**2+d**2);if(h>100){const f=a.position.x-o.position.x,p=a.position.y-o.position.y,g=a.position.z-o.position.z,_=Math.sqrt(f*f+p*p+g*g),m=h*l,v=_/m;let y=0;v>.15&&v<.35?y=l*.75:v>.4&&v<.6?y=l*.5:v>.65&&v<.85&&(y=l*.25),y>0&&(r.position.x+=a.velocity.x*y,r.position.y+=a.velocity.y*y,r.position.z+=a.velocity.z*y,i++)}}}}t.push(r)}return t._correctedCount=i,t}_timeShiftedInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r}}_velocityAnchoredInterpolate(e,t,i,s,a,r){if(!t.velocity||!i.velocity){const m=(s-t.time)/(i.time-t.time);return{x:t.position.x+(i.position.x-t.position.x)*m,y:t.position.y+(i.position.y-t.position.y)*m,z:t.position.z+(i.position.z-t.position.z)*m}}this._velocityAnchorState||(this._velocityAnchorState=new Map);let o=this._velocityAnchorState.get(e);(!o||Math.abs(s-o.lastTime)>.5||r%10===0)&&(o={anchorPos:{...t.position},anchorTime:t.time,anchorIdx:r,lastTime:s},this._velocityAnchorState.set(e,o)),s-o.anchorTime;let u=o.anchorPos.x,d=o.anchorPos.y,h=o.anchorPos.z;const f=(t.velocity.x+i.velocity.x)/2,p=(t.velocity.y+i.velocity.y)/2,g=(t.velocity.z+i.velocity.z)/2,_=s-t.time;return o.anchorIdx===r?(u=o.anchorPos.x+f*_,d=o.anchorPos.y+p*_,h=o.anchorPos.z+g*_):(u=t.position.x+f*_,d=t.position.y+p*_,h=t.position.z+g*_),o.lastTime=s,{x:u,y:d,z:h}}_hermiteInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=Math.max(0,Math.min(1,a/s)),o={x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};if(!e.velocity||!t.velocity)return o;const l=r*r,c=l*r,u=2*c-3*l+1,d=c-2*l+r,h=-2*c+3*l,f=c-l,p={x:e.velocity.x*s,y:e.velocity.y*s,z:e.velocity.z*s},g={x:t.velocity.x*s,y:t.velocity.y*s,z:t.velocity.z*s},_={x:u*e.position.x+d*p.x+h*t.position.x+f*g.x,y:u*e.position.y+d*p.y+h*t.position.y+f*g.y,z:u*e.position.z+d*p.z+h*t.position.z+f*g.z},m=_.x-o.x,v=_.y-o.y,y=_.z-o.z,b=t.position.x-e.position.x,S=t.position.y-e.position.y,x=t.position.z-e.position.z;return m*m+v*v+y*y>b*b+S*S+x*x?o:_}_physicsSimInterpolate(e,t,i,s=!1){const a=t.time-e.time,r=i-e.time,o=Math.max(0,Math.min(1,r/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*o,y:e.position.y+(t.position.y-e.position.y)*o,z:e.position.z+(t.position.z-e.position.z)*o};const l=-650,c=o*o,u=c*o,d=2*u-3*c+1,h=u-2*c+o,f=-2*u+3*c,p=u-c;let g=e.velocity.y*a,_=t.velocity.y*a;if(s){const m=.5*l*a*a;g+=m*.5,_+=m*.5}return{x:d*e.position.x+h*(e.velocity.x*a)+f*t.position.x+p*(t.velocity.x*a),y:d*e.position.y+h*g+f*t.position.y+p*_,z:d*e.position.z+h*(e.velocity.z*a)+f*t.position.z+p*(t.velocity.z*a)}}getBallPositionAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return s.sleeping?null:{...s.position};if(s.sleeping)return{...s.position};const d=(e-s.time)/r;let h;switch(this.interpolationMethod){case"catmull-rom":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"lerp-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applySmoothing("ball",h);break}case"lerp-ema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyEmaSmoothing("ball",h);break}case"lerp-dema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyDoubleEmaSmoothing("ball",h);break}case"lerp-wma":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyWeightedSmoothing("ball",h);break}case"lerp-gauss":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyGaussianSmoothing("ball",h);break}case"one-euro":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyOneEuroFilter("ball",h);break}case"predict-correct":{h=this._predictCorrectInterpolate("ball",s,a,e);break}case"velocity-smooth":{h=this._velocitySmoothInterpolate("ball",s,a,e,!0);break}case"physics-tick":{h=this._physicsTickInterpolate(s,a,e);break}case"hermite":{h=this._hermiteInterpolate(s,a,e);break}case"physics-sim":{const f=this.ballTimelineCorrected;if(f&&f.length>=2){const p=this._findKeyframeIndex(f,e,this.timelineIndicesCorrected.ball);this.timelineIndicesCorrected.ball=p;const g=f[p],_=f[p+1];if(g?.position&&_?.position){h=this._physicsSimInterpolate(g,_,e,!0);break}}h=this._physicsSimInterpolate(s,a,e,!0);break}case"velocity-only":{h=this._velocityOnlyInterpolate(s,a,e);break}case"smart-hybrid":{h=this._smartHybridInterpolate(s,a,e);break}case"time-shifted":{const f=this.ballTimelineFiltered;if(!f||f.length<2){h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}const p=this._findKeyframeIndex(f,e,this.timelineIndicesFiltered.ball);this.timelineIndicesFiltered.ball=p;const g=f[p],_=f[p+1];if(!g?.position||!_?.position){h=g?.position?{...g.position}:{...s.position};break}const m=_.time-g.time,v=m>0?Math.max(0,Math.min(1,(e-g.time)/m)):0;h={x:g.position.x+(_.position.x-g.position.x)*v,y:g.position.y+(_.position.y-g.position.y)*v,z:g.position.z+(_.position.z-g.position.z)*v};break}case"position-lerp":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-catmull":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyLowPassFilter("ball",h);break}case"adaptive-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyAdaptiveSmoothing("ball",h,e);break}default:{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}}return h}getBallRotationAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return{...s.rotation}}if(s.sleeping)return{...s.rotation};const o=(e-s.time)/r;return this._q0.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w),this._q1.set(a.rotation.x,a.rotation.y,a.rotation.z,a.rotation.w),this._qResult.slerpQuaternions(this._q0,this._q1,o),{x:this._qResult.x,y:this._qResult.y,z:this._qResult.z,w:this._qResult.w}}getPlayerPositionAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const h=this._findKeyframeIndex(d,t,this.timelineIndicesCorrected.players[e]||0);this.timelineIndicesCorrected.players[e]=h;const f=d[h],p=d[h+1];if(f?.position&&p?.position){u=this._physicsSimInterpolate(f,p,t,!1);break}}u=this._physicsSimInterpolate(r,o,t,!1);break}case"velocity-only":{u=this._velocityOnlyInterpolate(r,o,t);break}case"smart-hybrid":{u=this._smartHybridInterpolate(r,o,t);break}case"time-shifted":{const d=this.playerTimelineMapFiltered[e];if(!d||d.length<2){u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}const h=this._findKeyframeIndex(d,t,this.timelineIndicesFiltered.players[e]||0);this.timelineIndicesFiltered.players[e]=h;const f=d[h],p=d[h+1];if(!f?.position||!p?.position){u=f?.position?{...f.position}:{...r.position};break}const g=p.time-f.time,_=g>0?Math.max(0,Math.min(1,(t-f.time)/g)):0;u={x:f.position.x+(p.position.x-f.position.x)*_,y:f.position.y+(p.position.y-f.position.y)*_,z:f.position.z+(p.position.z-f.position.z)*_};break}case"position-lerp":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-catmull":{const d=i[Math.max(0,a-1)],h=i[Math.min(i.length-1,a+2)];d?.position&&h?.position?u=this._catmullRomInterpolate(d.position,r.position,o.position,h.position,c):u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyLowPassFilter(`player-${e}`,u);break}case"adaptive-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyAdaptiveSmoothing(`player-${e}`,u,t);break}default:{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}}return u}getPlayerRotationAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const r=this.getBallPositionAt(t),o=this.getBallRotationAt(t);r?i.position.set(r.x,r.y,r.z):a=!1,o&&i.quaternion.set(o.x,o.y,o.z,o.w)}else i.position.set(s.position.x,s.position.y,s.position.z),i.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);if(i.userData.location.copy(i.position),i.userData.rotation.copy(i.quaternion),i.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),s.angularVelocity&&i.userData.angularVelocity.set(s.angularVelocity.x,s.angularVelocity.y,s.angularVelocity.z),i.userData.sleeping=s.sleeping,i.visible=a&&s.visible!==!1&&!i.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(i.position.x,2,i.position.z),this.ballIndicator.visible=i.visible),this.ballVerticalLine){const o=new Float32Array([i.position.x,2,i.position.z,i.position.x,i.position.y,i.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new ot(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=i.visible}if(i.userData.velocity&&i.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=i.position.distanceTo(c.position);u{const a=this.playerNameToCarActorId[s.name];if(!a)return;const r=this.actors[a];if(!r)return;const o=s.name;if(!this.useAnimationSystem||!this.animationMixer)if(this.interpolantsInitialized&&this.playerTimelineMap[o]){const c=this.getPlayerPositionAt(o,t),u=this.getPlayerRotationAt(o,t);c&&r.position.set(c.x,c.y,c.z),u&&r.quaternion.set(u.x,u.y,u.z,u.w)}else r.position.set(s.position.x,s.position.y,s.position.z),r.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);r.userData.location.copy(r.position),r.userData.rotation.copy(r.quaternion),r.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),r.userData.sleeping=s.sleeping,r.userData.steer=s.steer||0;const l=r.position.length()>.1;r.visible=s.isVisible&&l&&!r.userData.sleeping}),this._updateGoalExplosions(t)}_updateGoalExplosions(e){const t=this.effectsManager,i=t&&t.explosions?t.explosions.goalEvents:null;if(!(i instanceof Map)||i.size===0)return;const s=this._lastGoalScanTime;s!==null&&e=c&&e<=c+ZF&&(r=!0,o=!0),s!==null&&s=c&&!this._firedGoalTimes.has(c)){this._firedGoalTimes.add(c);const d=this.getBallPositionAt(c)||a&&a.position||null;d&&this.effectsManager.triggerGoalExplosion(d,l.team)}}a&&(a.userData.isHiddenByGoal=r,r&&(a.visible=!1)),o||this.effectsManager.clearGoalExplosions?.(),this._lastGoalScanTime=e}processFrame(e,t,i,s){if(e){if(e.new_actors&&e.new_actors.forEach(a=>{if(!this.actors[a.actor_id]){const r=t(a.object_id),o=r&&r.includes("Ball"),l=r&&r.includes("Car");if(o||l){let c;o?c=new vn(92.75,16,16):c=new ki(118,36,84);const u=new kn({color:o?16777215:Math.random()*16777215}),d=new Se(c,u);if(d.userData={location:new T,rotation:new ht,isCar:l,isBall:o,playerId:null,lastUpdateTime:e.time,bodyId:null,hasReceivedUpdate:!1},this.scene.add(d),this.actors[a.actor_id]=d,o){this.ballActorId=a.actor_id,this.ballModel&&this.replaceBallWithModel(a.actor_id);const h=92.75,f=new oi(h*.95,h,32),p=new je({color:16777215,side:ut});this.ballIndicator=new Se(f,p),this.ballIndicator.rotation.x=-Math.PI/2,this.ballIndicator.visible=!1,this.scene.add(this.ballIndicator);const g=new $e().setFromPoints([new T(0,0,0),new T(0,1,0)]),_=new Pt({color:16777215,opacity:.5,transparent:!0});this.ballVerticalLine=new On(g,_),this.ballVerticalLine.frustumCulled=!1,this.ballVerticalLine.visible=!1,this.scene.add(this.ballVerticalLine)}else l&&this.effectsManager.createBoostTrail(d,a.actor_id)}}}),e.deleted_actors&&e.deleted_actors.forEach(a=>{if(this.actors[a]){const r=this.actors[a];r.userData.isCar&&this.effectsManager.removeBoostTrail(a),this.scene.remove(r),r.geometry&&r.geometry.dispose(),r.material&&r.material.dispose(),delete this.actors[a],this.ballActorId===a&&(this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null))}}),e.updated_actors&&e.updated_actors.forEach(a=>{const r=this.actors[a.actor_id];a.attribute.TeamLoadout&&(this.actorLoadouts[a.actor_id]=a.attribute.TeamLoadout,r&&r.userData.isCar&&(r.userData.teamLoadout=a.attribute.TeamLoadout,this.resolveBodyId(r,a.actor_id)));const o=t(a.object_id),l=o&&(o.includes("PRI_TA")||o.includes("PlayerReplicationInfo"));if(a.attribute.String&&this.playerNames.has(a.attribute.String)){const c=a.attribute.String;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.Reservation&&this.playerNames.has(a.attribute.Reservation.name)){const c=a.attribute.Reservation.name;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.ActiveActor){const c=a.attribute.ActiveActor.actor;this.actorLinks[a.actor_id]||(this.actorLinks[a.actor_id]=new Set),this.actorLinks[a.actor_id].add(c),r&&r.userData.isCar&&this.checkCarPlayerLink(c,a.actor_id)}if(r&&a.attribute&&a.attribute.RigidBody){const c=a.attribute.RigidBody;if(c.location&&(r.userData.location.set(c.location.x,c.location.z,c.location.y),r.userData.lastUpdateTime=e.time,r.userData.hasReceivedUpdate=!0),c.linear_velocity&&(r.userData.velocity||(r.userData.velocity=new T),r.userData.velocity.set(c.linear_velocity.x,c.linear_velocity.z,c.linear_velocity.y)),c.rotation&&r.userData.rotation.set(c.rotation.x,c.rotation.z,c.rotation.y,-c.rotation.w),c.angular_velocity&&(r.userData.angularVelocity||(r.userData.angularVelocity=new T),r.userData.angularVelocity.set(c.angular_velocity.x,c.angular_velocity.z,c.angular_velocity.y)),c.sleeping!==void 0&&(r.userData.sleeping=c.sleeping,c.sleeping&&(r.userData.velocity&&r.userData.velocity.set(0,0,0),r.userData.angularVelocity&&r.userData.angularVelocity.set(0,0,0))),r.userData.isBall&&r.userData.isHiddenByGoal&&c.location){const u=c.location.x,d=c.location.y,h=c.location.z;Math.sqrt(u*u+d*d+h*h)<500&&(r.userData.isHiddenByGoal=!1)}}}),this.effectsManager.explosions.goalEvents.has(i)){const a=this.effectsManager.explosions.goalEvents.get(i),r=this.actors[this.ballActorId];r&&(s||(this.effectsManager.triggerGoalExplosion(r.position,a.team),console.log(`🎯 GOAL! Explosion at frame ${i} for team ${a.team} by ${a.playerName}`)),r.userData.isHiddenByGoal=!0)}if(this.effectsManager.explosions.demoEvents.has(i)){const a=this.effectsManager.explosions.demoEvents.get(i),r=this.actors[a.victimActorId];if(r){if(!s){const o=r.userData.playerId,l=o&&this.playerTeams&&this.playerTeams[o]||0;this.effectsManager.triggerDemoExplosion(r.position,l),console.log(`💥 DEMO! Explosion at frame ${i} for actor ${a.victimActorId}`)}r.userData.sleeping=!0}}}}resolveBodyId(e,t){if(!e||!e.userData.isCar||!e.userData.teamLoadout)return;let i=0;e.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,e.userData.playerId)&&(i=this.playerTeams[e.userData.playerId]);const s=e.userData.teamLoadout,a=i===1?s.orange?.body:s.blue?.body;a&&e.userData.bodyId!==a&&(e.userData.bodyId=a,this.updateCarHitbox(e,a,t))}updateCarHitbox(e,t,i){const s=tS(t),a=s?.name||"Octane",r=s?.hitboxType||"Octane";this.replaceCarWithModel(i,e,a,r)}async replaceCarWithModel(e,t,i,s){if(this.carModelLoader.isModelReady(i,s))this._doCarReplacement(e,t,i,s);else{this.pendingCarReplacements.set(e,{oldMesh:t,carName:i,hitboxType:s});try{const a=this.carModelLoader.getModelTypeForCar(i,s);await this.carModelLoader.loadModel(a);const r=this.pendingCarReplacements.get(e);r&&this.actors[e]===r.oldMesh&&this._doCarReplacement(e,r.oldMesh,r.carName,r.hitboxType),this.pendingCarReplacements.delete(e)}catch(a){console.warn(`Failed to load model for ${i} (${s}):`,a),this.pendingCarReplacements.delete(e),t&&(t.visible=!0)}}}_doCarReplacement(e,t,i,s){let a=0;t.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,t.userData.playerId)?a=this.playerTeams[t.userData.playerId]:t.userData.team!==void 0&&(a=t.userData.team);const r=this.carModelLoader.getCarMeshSync(i,s,a);if(!r){console.warn(`Could not get car mesh for ${i} (${s})`);return}const o=r.userData.wheels;r.userData={...t.userData},r.userData.isFBXModel=!0,r.userData.carName=i,r.userData.hitboxType=s,r.userData.wheels=o,r.position.copy(t.position),r.quaternion.copy(t.quaternion),this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material.forEach(c=>c.dispose()):t.material.dispose()),this.scene.add(r),this.actors[e]=r,this.effectsManager.removeBoostTrail(e),this.effectsManager.createBoostTrail(r,e);const l=this.carModelLoader.getModelTypeForCar(i,s);console.log(`🚗 Replaced car ${e} with ${l.toUpperCase()} model (${i}, ${s} hitbox, team ${a===0?"blue":"orange"})`)}checkCarPlayerLink(e,t){const i=this.actorToPlayer[e],s=this.actorLoadouts[e];if(!(!i&&!s))if(t){const a=this.actors[t];a&&a.userData.isCar&&(this.onPlayerFound&&this.onPlayerFound(i),a.userData.playerId=i,this.playerNameToCarActorId[i]=t,s&&(a.userData.teamLoadout=s),this.resolveBodyId(a,t))}else this.actorLinks[e]&&this.actorLinks[e].forEach(a=>{this.checkCarPlayerLink(e,a)})}updateInterpolation(e,t,i){const s=t[i];if(s&&Object.keys(this.actors).forEach(a=>{const r=this.actors[a],o=r.userData.location,l=r.userData.rotation;if(!o||!l||!r.userData.hasReceivedUpdate)return;let c=null,u=0;for(let d=i+1;dp.actor_id==a&&p.attribute&&p.attribute.RigidBody);if(f){c=f,u=h.time;break}}}if(c){const d=r.userData.lastUpdateTime||s.time,h=u;if(h>d){const f=(e-d)/(h-d),p=Math.max(0,Math.min(1,f)),g=h-d||.033,_=c.attribute.RigidBody;if(_.location)if(this._p0.copy(o),this._p1.set(_.location.x,_.location.z,_.location.y),r.userData.sleeping)r.position.copy(o);else{const m=c.attribute.RigidBody;if(r.userData.velocity&&m.linear_velocity){const v=p,y=v*v,b=y*v;if(g>.5)r.position.lerpVectors(o,this._p1,p);else{this._v0.copy(r.userData.velocity).multiplyScalar(g),this._v1.set(m.linear_velocity.x,m.linear_velocity.z,m.linear_velocity.y).multiplyScalar(g);const S=2*b-3*y+1,x=b-2*y+v,M=-2*b+3*y,C=b-y;r.position.set(S*this._p0.x+x*this._v0.x+M*this._p1.x+C*this._v1.x,S*this._p0.y+x*this._v0.y+M*this._p1.y+C*this._v1.y,S*this._p0.z+x*this._v0.z+M*this._p1.z+C*this._v1.z)}}else r.position.lerpVectors(o,this._p1,p)}else r.position.copy(o);_.rotation?(this._nextRot.set(_.rotation.x,_.rotation.z,_.rotation.y,-_.rotation.w),r.quaternion.slerpQuaternions(l,this._nextRot,p)):r.quaternion.copy(l);return}}r.position.copy(o),r.quaternion.copy(l)}),Object.keys(this.actors).forEach(a=>{const r=this.actors[a];if(r&&r.userData.isCar){const l=r.position.length()>.1,c=r.userData.sleeping===!0;r.visible=l&&!c}}),this.ballActorId&&this.actors[this.ballActorId]){const a=this.actors[this.ballActorId];if(a.visible=!a.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(a.position.x,2,a.position.z),this.ballIndicator.visible=a.visible),this.ballVerticalLine){const o=new Float32Array([a.position.x,2,a.position.z,a.position.x,a.position.y,a.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new ot(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=a.visible}if(a.userData.velocity&&a.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=a.position.distanceTo(c.position);if(u{const s=this.actors[i];if(!s||!s.userData.isCar||!s.userData.isFBXModel&&!s.userData.hasWheelSockets||!s.userData.wheels||s.userData.wheels.length===0)return;const a=s.position;let r=this._previousCarPositions.get(i);r||(r=a.clone(),this._previousCarPositions.set(i,r));const l=new T().subVectors(a,r).length();if(this._previousCarPositions.set(i,a.clone()),l<.01)return;const d=Math.min(l/e,.5)*1;let h=0;s.userData.steer!==void 0&&(h=-s.userData.steer*t),s.userData.wheels.forEach(f=>{if(f.socket){const p=f.side==="left"?1:-1;if(f.mesh.rotateZ(p*d),f.position==="front"&&f.steeringPivot){const g=f.side==="left"?-1:1;f.steeringPivot.rotation.y=g*h}}else{const p=f.side==="left"?-1:1;f.mesh.rotateY(p*d),f.position==="front"&&f.steeringPivot&&(f.steeringPivot.rotation.z=h)}})})}resetWheelTracking(){this._previousCarPositions&&this._previousCarPositions.clear()}updateSupersonicState(e,t,i){const s=this.playerNameToCarActorId[e];if(!s)return;const a=this.actors[s];if(!a||!a.userData.isCar)return;const r=a.userData.velocity||new T(0,0,0);this.effectsManager.updateSupersonicTrail(s,t,a.position,a.quaternion,r,i)}setInterpolationEnabled(e){this.interpolationEnabled=e,console.log(`[ActorManager] Interpolation ${e?"enabled":"disabled"}`)}setInterpolationMethod(e){if(!["lerp","hermite","catmull-rom","predict-correct","velocity-smooth","physics-tick","velocity-only","smart-hybrid","time-shifted","lerp-smooth","lerp-ema","lerp-dema","lerp-wma","lerp-gauss","one-euro","position-lerp","position-catmull","position-smooth","adaptive-smooth"].includes(e)){console.warn(`[ActorManager] Invalid interpolation method: ${e}`);return}this.interpolationMethod=e,this._smoothingBuffers.clear(),this._lowPassState.clear(),this._adaptiveState.clear(),this.resetSmoothingBuffers(),console.log(`[ActorManager] Interpolation method set to: ${e}`)}setSmoothingWindowSize(e){this.smoothingWindowSize=Math.max(1,Math.min(20,e)),this._smoothingBuffers.clear(),console.log(`[ActorManager] Smoothing window size set to: ${this.smoothingWindowSize}`)}getInterpolationSettings(){return{enabled:this.interpolationEnabled,method:this.interpolationMethod,smoothingWindowSize:this.smoothingWindowSize}}clearSmoothingBuffers(){this._smoothingBuffers.clear()}getFrameInfo(){return this.lastFrameInfo}createBallMeshForLive(){const e=new vn(92.75,16,16),t=new kn({color:16777215}),i=new Se(e,t);if(i.castShadow=!0,i.receiveShadow=!0,i.userData={location:new T,rotation:new ht,velocity:new T,angularVelocity:new T,isCar:!1,isBall:!0,playerId:null,sleeping:!1,isHiddenByGoal:!1},this.scene.add(i),this.ballModel){const s=this.ballModel.clone();s.position.copy(i.position),s.quaternion.copy(i.quaternion),s.userData={...i.userData};const a=92.75;return s.scale.set(a,a,a),s.traverse(r=>{r.isMesh&&(r.castShadow=!0,r.receiveShadow=!0)}),this.scene.remove(i),this.scene.add(s),i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose(),console.log("✓ Live ball created with GLTF model"),s}return i}createCarMeshForLive(e,t,i,s=null){const a=`live_car_${t}`,r=new ki(118,36,84),o=e===0?3381759:16737792,l=new kn({color:o}),c=new Se(r,l);return c.castShadow=!0,c.receiveShadow=!0,c.visible=!1,c.userData={location:new T,rotation:new ht,velocity:new T,angularVelocity:new T,isCar:!0,isBall:!1,playerId:i,team:e,sleeping:!1,steer:0,bodyId:s,liveActorId:a},this.scene.add(c),this.actors[a]=c,this.playerNameToCarActorId[i]=a,this.effectsManager.createBoostTrail(c,a),s&&s>0?this.updateCarHitbox(c,s,a):this.replaceCarWithModel(a,c,"Octane","Octane"),console.log(`[ActorManager] Created live car for ${i} (team ${e===0?"blue":"orange"}, bodyId: ${s})`),c}updateBoostParticlesLive(e,t,i,s){const a=t&&i>0,r=s.userData.velocity||new T(0,0,0);this.effectsManager.updateBoostTrail(e,a,s.position,s.quaternion,r)}updateSupersonicTrailLive(e,t,i,s){const a=s.userData.velocity||new T(0,0,0);this.effectsManager.updateSupersonicTrail(e,t,s.position,s.quaternion,a,i)}removeLiveCar(e){const t=this.actors[e];t&&(this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),delete this.actors[e],this.effectsManager.removeBoostTrail(e))}removeLiveBall(e){e&&(this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose())}}function Ls(n,e,t){t===-1?(n.clearUpdateRanges?.(),n.addUpdateRange?.(0,n.count*n.itemSize)):n.addUpdateRange?(n.clearUpdateRanges(),n.addUpdateRange(e,t)):(n.updateRange.offset=e,n.updateRange.count=t)}class mt extends et{constructor(e,t){super(),this.active=!1,this.orientToMovement=!1,t&&(this.orientToMovement=!0),this.scene=e,this.geometry=null,this.mesh=null,this.nodeCenters=null,this.lastNodeCenter=null,this.currentNodeCenter=null,this.lastOrientationDir=null,this.nodeIDs=null,this.currentLength=0,this.currentEnd=0,this.currentNodeID=0,this.advanceFrequency=60,this.advancePeriod=1/this.advanceFrequency,this.lastAdvanceTime=0,this.paused=!1,this.pauseAdvanceUpdateTimeDiff=0,this._internalTime=0,this._useInternalTime=!1}setAdvanceFrequency(e){this.advanceFrequency=e,this.advancePeriod=1/this.advanceFrequency}initialize(e,t,i,s,a,r){this.deactivate(),this.destroyMesh(),this.length=t>0?t+1:0,this.dragTexture=i?1:0,this.targetObject=r,this.initializeLocalHeadGeometry(s,a),this.nodeIDs=[],this.nodeCenters=[];for(let o=0;o=this.length?0:this.currentEnd+1;if(i?this.updateNodePositionsFromTransformMatrix(s,i):this.updateNodePositionsFromOrientationTangent(s,t.position,t.tangent),this.currentLength>=1&&(this.connectNodes(this.currentEnd,s),this.currentLength>=this.length)){const a=this.currentEnd+1>=this.length?0:this.currentEnd+1;this.disconnectNodes(a)}this.currentLength=this.length&&(this.currentEnd=0),this.currentLength>=1&&(this.currentLengththis.advancePeriod?(this.advance(),this.lastAdvanceTime=t):this.updateHead()}}updateHead=(function(){const e=new Ee;return function(){this.currentEnd<0||(this.targetObject.updateMatrixWorld(),e.copy(this.targetObject.matrixWorld),this.updateNodePositionsFromTransformMatrix(this.currentEnd,e))}})();updateNodeID(e,t){this.nodeIDs[e]=t;const i=this.geometry.getAttribute("nodeID"),s=this.geometry.getAttribute("nodeVertexID");for(let a=0;a1e-4)){this.lastOrientationDir||(this.lastOrientationDir=new T),t.setFromUnitVectors(a,r),s.copy(this.currentNodeCenter);for(let f=0;f=7?(Lu.setRGB(parseFloat(d[4]),parseFloat(d[5]),parseFloat(d[6]),yt),t.colors.push(Lu.r,Lu.g,Lu.b)):t.colors.push(void 0,void 0,void 0);break;case"vn":t.normals.push(parseFloat(d[1]),parseFloat(d[2]),parseFloat(d[3]));break;case"vt":t.uvs.push(parseFloat(d[1]),parseFloat(d[2]));break}}else if(u==="f"){const h=c.slice(1).trim().split(Iv),f=[];for(let g=0,_=h.length;g<_;g++){const m=h[g];if(m.length>0){const v=m.split("/");f.push(v)}}const p=f[0];for(let g=1,_=f.length-1;g<_;g++){const m=f[g],v=f[g+1];t.addFace(p[0],m[0],v[0],p[1],m[1],v[1],p[2],m[2],v[2])}}else if(u==="l"){const d=c.substring(1).trim().split(" ");let h=[];const f=[];if(c.indexOf("/")===-1)h=d;else for(let p=0,g=d.length;p1){const h=s[1].trim().toLowerCase();t.object.smooth=h!=="0"&&h!=="off"}else t.object.smooth=!0;const d=t.object.currentMaterial();d&&(d.smooth=t.object.smooth)}else{if(c==="\0")continue;console.warn('THREE.OBJLoader: Unexpected line: "'+c+'"')}}t.finalize();const a=new Et;if(a.materialLibraries=[].concat(t.materialLibraries),!(t.objects.length===1&&t.objects[0].geometry.vertices.length===0)===!0)for(let o=0,l=t.objects.length;o0&&g.setAttribute("normal",new Ce(u.normals,3)),u.colors.length>0&&(p=!0,g.setAttribute("color",new Ce(u.colors,3))),u.hasUVIndices===!0&&g.setAttribute("uv",new Ce(u.uvs,2));const _=[];for(let v=0,y=d.length;v1){for(let v=0,y=d.length;v0){const o=new fa({size:1,sizeAttenuation:!1}),l=new $e;l.setAttribute("position",new Ce(t.vertices,3)),t.colors.length>0&&t.colors[0]!==void 0&&(l.setAttribute("color",new Ce(t.colors,3)),o.vertexColors=!0);const c=new fr(l,o);a.add(c)}return a}}const Vp=new Map;async function yF(n,e){const t=Pi("models/stadium/stadium.glb",e);let i=Vp.get(t);return i||(i=n.loadAsync(t).then(s=>{const a=s.scene;return vF(a),a}).catch(s=>{throw Vp.delete(t),s}),Vp.set(t,i)),i}function vF(n){const e=["Sol_Trait_T0","Sol_Trait_T1","Milieu_Forme","Milieu_Forme.001","cage_T0","cage_T1","Couleur_Hexagone_T0","Couleur_Hexagone_T1","wall_gradient_color_2","wall_gradient_color_2.001","Fond_BackBoard_Transparent","dégradé_transparent_T0","dégradé_transparent_T1","grid_transperant","Detail_Milieu","Detail_Milieu.001"],t=["Glow","Glass"],i=["Plafond_Hexagone_T0","Plafond_Hexagone_T1","Plafond_Transparent"];n.traverse(s=>{if(!s.isMesh)return;s.receiveShadow=!0,s.castShadow=!i.includes(s.name),t.some(r=>s.name.includes(r))&&(console.log(`[ArenaManager] Disabling frustum culling for: ${s.name}`),s.frustumCulled=!1),s.material&&/^Hexagone_T[01]$/.test(s.material.name??"")&&(s.material=s.material.clone(),s.material.transparent=!0,s.material.opacity=.18,s.material.depthWrite=!1,s.renderOrder=1),s.material&&s.material.name==="bannière_pub"&&(s.visible=!1),s.material&&s.material.name==="Sol_Hexagone"&&(s.material=s.material.clone(),s.material.color.setScalar(.35),s.material.metalness=0,s.material.roughness=1),s.material&&s.material.name&&e.includes(s.material.name)&&(console.log(`[ArenaManager] Fixing visibility for: ${s.name} (material: ${s.material.name})`),s.material=s.material.clone(),s.material.side=ut,s.material.depthWrite=!1,s.renderOrder=1,s.frustumCulled=!1)})}class bF{constructor(e,t={}){this.scene=e,this.assetBase=t.assetBase,this.arenaMeshes=[],this.drawingCollider=null,this.drawingColliderMeshes=[],this.arenaDecorMesh=null,this.showArenaDecor=!0,this.dracoLoader=new nM,this.dracoLoader.setDecoderPath(Pi("draco/",this.assetBase)),this.gltfLoader=new oy,this.gltfLoader.setDRACOLoader(this.dracoLoader)}async loadArenaMeshes(){try{console.log("Loading arena mesh...");const t=(await yF(this.gltfLoader,this.assetBase)).clone(!0);t.traverse(i=>{i.isMesh&&this.arenaMeshes.push(i)}),console.log(`[ArenaManager] Collected ${this.arenaMeshes.length} meshes for raycasting`),this.scene.add(t),console.log("Arena mesh loaded successfully with correct orientation")}catch(e){console.error("Error loading arena mesh:",e);const t=new Nn(10240,8192),i=new kn({color:3355443,side:ut}),s=new Se(t,i);s.rotation.x=-Math.PI/2,s.receiveShadow=!0,this.scene.add(s),this.arenaMeshes.push(s)}}getArenaMeshes(){return this.arenaMeshes}getDrawingColliderMeshes(){return this.drawingColliderMeshes}async loadDrawingCollider(e=!1){try{console.log("[ArenaManager] Loading drawing collider...");const i=await new gF().loadAsync(Pi("models/stadium/DrawingArena.obj",this.assetBase));i.rotation.x=Math.PI/2,i.rotation.y=Math.PI,i.scale.setScalar(.99),i.position.y=20,i.traverse(s=>{s.isMesh&&(this.drawingColliderMeshes.push(s),s.castShadow=!1,s.receiveShadow=!1,e?s.material=new je({color:65280,transparent:!0,opacity:.7,side:ut}):s.material=new je({visible:!1}))}),this.drawingCollider=i,this.scene.add(i),console.log(`[ArenaManager] Drawing collider loaded with ${this.drawingColliderMeshes.length} meshes`)}catch(t){console.error("[ArenaManager] Failed to load drawing collider:",t)}}setDrawingColliderVisible(e){for(const t of this.drawingColliderMeshes)e?t.material=new je({color:65280,wireframe:!0,transparent:!0,opacity:.5}):t.material=new je({visible:!1})}async loadArenaDecor(e=!0){try{console.log("[ArenaManager] Loading arena decoration mesh...");const t=await this.gltfLoader.loadAsync(Pi("models/stadium/arene.glb",this.assetBase));this.arenaDecorMesh=t.scene,this.showArenaDecor=e,this.arenaDecorMesh.traverse(i=>{i.isMesh&&(i.receiveShadow=!0,i.castShadow=!0)}),this.arenaDecorMesh.visible=e,this.scene.add(this.arenaDecorMesh),console.log(`[ArenaManager] Arena decoration loaded, visible: ${e}`)}catch(t){console.error("[ArenaManager] Failed to load arena decoration:",t)}}setArenaDecorVisible(e){this.showArenaDecor=e,this.arenaDecorMesh&&(this.arenaDecorMesh.visible=e,console.log(`[ArenaManager] Arena decoration visibility set to: ${e}`))}isArenaDecorVisible(){return this.showArenaDecor}}var Ii=Uint8Array,uo=Uint16Array,xF=Int32Array,iM=new Ii([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),sM=new Ii([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),wF=new Ii([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),aM=function(n,e){for(var t=new uo(31),i=0;i<31;++i)t[i]=e+=1<>1|(Ut&21845)<<1;sa=(sa&52428)>>2|(sa&13107)<<2,sa=(sa&61680)>>4|(sa&3855)<<4,h_[Ut]=((sa&65280)>>8|(sa&255)<<8)>>1}var Zl=(function(n,e,t){for(var i=n.length,s=0,a=new uo(e);s>l]=c}else for(o=new uo(i),s=0;s>15-n[s]);return o}),Oc=new Ii(288);for(var Ut=0;Ut<144;++Ut)Oc[Ut]=8;for(var Ut=144;Ut<256;++Ut)Oc[Ut]=9;for(var Ut=256;Ut<280;++Ut)Oc[Ut]=7;for(var Ut=280;Ut<288;++Ut)Oc[Ut]=8;var lM=new Ii(32);for(var Ut=0;Ut<32;++Ut)lM[Ut]=5;var EF=Zl(Oc,9,1),CF=Zl(lM,5,1),Gp=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Hi=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},$p=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},AF=function(n){return(n+7)/8|0},RF=function(n,e,t){return(t==null||t>n.length)&&(t=n.length),new Ii(n.subarray(e,t))},PF=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],qi=function(n,e,t){var i=new Error(e||PF[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,qi),!t)throw i;return i},IF=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new Ii(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new Ii(s*3));var c=function(we){var Re=t.length;if(we>Re){var k=new Ii(Math.max(Re*2,we));k.set(t),t=k}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Hi(n,d,1);var v=Hi(n,d+1,3);if(d+=3,v)if(v==1)f=EF,p=CF,g=9,_=5;else if(v==2){var x=Hi(n,d,31)+257,M=Hi(n,d+10,15)+4,C=x+Hi(n,d+5,31)+1;d+=14;for(var w=new Ii(C),E=new Ii(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Hi(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Hi(n,d,7),d+=3):y==18&&(W=11+Hi(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ie=w.subarray(x);g=Gp(H),_=Gp(ie),f=Zl(H,g,1),p=Zl(ie,_,1)}else qi(1);else{var y=AF(d)+4,b=n[y-4]|n[y-3]<<8,S=y+b;if(S>s){l&&qi(0);break}o&&c(h+b),t.set(n.subarray(y,S),h),e.b=h+=b,e.p=d=S*8,e.f=u;continue}if(d>m){l&&qi(0);break}}o&&c(h+131072);for(var le=(1<>4;if(d+=F&15,d>m){l&&qi(0);break}if(F||qi(2),De<256)t[h++]=De;else if(De==256){Le=d,f=null;break}else{var Ke=De-254;if(De>264){var R=De-257,Oe=iM[R];Ke=Hi(n,d,(1<>4;Z||qi(3),d+=Z&15;var ie=MF[re];if(re>3){var Oe=sM[re];ie+=$p(n,d)&(1<m){l&&qi(0);break}o&&c(h+131072);var Te=h+Ke;if(h>4>7||(n[0]<<8|n[1])%31)&&qi(6,"invalid zlib data"),(n[1]>>5&1)==1&&qi(6,"invalid zlib data: "+(n[1]&32?"need":"unexpected")+" dictionary"),(n[1]>>3&4)+2};function DF(n,e){return IF(n.subarray(kF(n),-4),{i:2},e,e)}var OF=typeof TextDecoder<"u"&&new TextDecoder,FF=0;try{OF.decode(LF,{stream:!0}),FF=1}catch{}function cM(n,e,t){const i=t.length-n-1;if(e>=t[i])return i-1;if(e<=t[n])return n;let s=n,a=i,r=Math.floor((s+a)/2);for(;e=t[r+1];)e=g&&(p[f][0]=p[h][0]/o[v+1][m],_=p[f][0]*o[m][v]);const y=m>=-1?1:-m,b=d-1<=v?g-1:t-d;for(let x=y;x<=b;++x)p[f][x]=(p[h][x]-p[h][x-1])/o[v+1][m+x],_+=p[f][x]*o[m+x][v];d<=v&&(p[f][g]=-p[h][g-1]/o[v+1][d],_+=p[f][g]*o[d][v]),r[g][d]=_;const S=h;h=f,f=S}}let u=t;for(let d=1;d<=i;++d){for(let h=0;h<=t;++h)r[d][h]*=u;u*=t-d}return r}function zF(n,e,t,i,s){const a=st.toArray()),e.startKnot=this.startKnot,e.endKnot=this.endKnot,e}fromJSON(e){return super.fromJSON(e),this.degree=e.degree,this.knots=[...e.knots],this.controlPoints=e.controlPoints.map(t=>new Ye(t[0],t[1],t[2],t[3])),this.startKnot=e.startKnot,this.endKnot=e.endKnot,this}}let gt,Jt,Vn;class WF extends ln{constructor(e){super(e)}load(e,t,i,s){const a=this,r=a.path===""?Ws.extractUrlBase(e):a.path,o=new Kn(this.manager);o.setPath(a.path),o.setResponseType("arraybuffer"),o.setRequestHeader(a.requestHeader),o.setWithCredentials(a.withCredentials),o.load(e,function(l){try{t(a.parse(l,r))}catch(c){s?s(c):console.error(c),a.manager.itemError(e)}},i,s)}parse(e,t){if(ZF(e))gt=new jF().parse(e);else{const s=hM(e);if(!JF(s))throw new Error("THREE.FBXLoader: Unknown format.");if(Fv(s)<7e3)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+Fv(s));gt=new YF().parse(s)}const i=new Af(this.manager).setPath(this.resourcePath||t).setCrossOrigin(this.crossOrigin);return new XF(i,this.manager).parse(gt)}}class XF{constructor(e,t){this.textureLoader=e,this.manager=t}parse(){Jt=this.parseConnections();const e=this.parseImages(),t=this.parseTextures(e),i=this.parseMaterials(t),s=this.parseDeformers(),a=new KF().parse(s);return this.parseScene(s,a,i),Vn}parseConnections(){const e=new Map;return"Connections"in gt&>.Connections.connections.forEach(function(i){const s=i[0],a=i[1],r=i[2];e.has(s)||e.set(s,{parents:[],children:[]});const o={ID:a,relationship:r};e.get(s).parents.push(o),e.has(a)||e.set(a,{parents:[],children:[]});const l={ID:s,relationship:r};e.get(a).children.push(l)}),e}parseImages(){const e={},t={};if("Video"in gt.Objects){const i=gt.Objects.Video;for(const s in i){const a=i[s],r=parseInt(s);if(e[r]=a.RelativeFilename||a.Filename,"Content"in a){const o=a.Content instanceof ArrayBuffer&&a.Content.byteLength>0,l=typeof a.Content=="string"&&a.Content!=="";if(o||l){const c=this.parseImage(i[s]);t[a.RelativeFilename||a.Filename]=c}}}}for(const i in e){const s=e[i];t[s]!==void 0?e[i]=t[s]:e[i]=e[i].split("\\").pop()}return e}parseImage(e){const t=e.Content,i=e.RelativeFilename||e.Filename,s=i.slice(i.lastIndexOf(".")+1).toLowerCase();let a;switch(s){case"bmp":a="image/bmp";break;case"jpg":case"jpeg":a="image/jpeg";break;case"png":a="image/png";break;case"tif":a="image/tiff";break;case"tga":this.manager.getHandler(".tga")===null&&console.warn("FBXLoader: TGA loader not found, skipping ",i),a="image/tga";break;case"webp":a="image/webp";break;default:console.warn('FBXLoader: Image type "'+s+'" is not supported.');return}if(typeof t=="string")return"data:"+a+";base64,"+t;{const r=new Uint8Array(t);return window.URL.createObjectURL(new Blob([r],{type:a}))}}parseTextures(e){const t=new Map;if("Texture"in gt.Objects){const i=gt.Objects.Texture;for(const s in i){const a=this.parseTexture(i[s],e);t.set(parseInt(s),a)}}return t}parseTexture(e,t){const i=this.loadTexture(e,t);i.ID=e.id,i.name=e.attrName;const s=e.WrapModeU,a=e.WrapModeV,r=s!==void 0?s.value:0,o=a!==void 0?a.value:0;if(i.wrapS=r===0?xs:Wn,i.wrapT=o===0?xs:Wn,"Scaling"in e){const l=e.Scaling.value;i.repeat.x=l[0],i.repeat.y=l[1]}if("Translation"in e){const l=e.Translation.value;i.offset.x=l[0],i.offset.y=l[1]}return i}loadTexture(e,t){const i=e.FileName.split(".").pop().toLowerCase();let s=this.manager.getHandler(`.${i}`);s===null&&(s=this.textureLoader);const a=s.path;a||s.setPath(this.textureLoader.path);const r=Jt.get(e.id).children;let o;if(r!==void 0&&r.length>0&&t[r[0].ID]!==void 0&&(o=t[r[0].ID],(o.indexOf("blob:")===0||o.indexOf("data:")===0)&&s.setPath(void 0)),o===void 0)return console.warn("FBXLoader: Undefined filename, creating placeholder texture."),new zt;const l=s.load(o);return s.setPath(a),l}parseMaterials(e){const t=new Map;if("Material"in gt.Objects){const i=gt.Objects.Material;for(const s in i){const a=this.parseMaterial(i[s],e);a!==null&&t.set(parseInt(s),a)}}return t}parseMaterial(e,t){const i=e.id,s=e.attrName;let a=e.ShadingModel;if(typeof a=="object"&&(a=a.value),!Jt.has(i))return null;const r=this.parseParameters(e,t,i);let o;switch(a.toLowerCase()){case"phong":o=new sr;break;case"lambert":o=new Cf;break;default:console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.',a),o=new sr;break}return o.setValues(r),o.name=s,o}parseParameters(e,t,i){const s={};e.BumpFactor&&(s.bumpScale=e.BumpFactor.value),e.Diffuse?s.color=ot.colorSpaceToWorking(new de().fromArray(e.Diffuse.value),yt):e.DiffuseColor&&(e.DiffuseColor.type==="Color"||e.DiffuseColor.type==="ColorRGB")&&(s.color=ot.colorSpaceToWorking(new de().fromArray(e.DiffuseColor.value),yt)),e.DisplacementFactor&&(s.displacementScale=e.DisplacementFactor.value),e.Emissive?s.emissive=ot.colorSpaceToWorking(new de().fromArray(e.Emissive.value),yt):e.EmissiveColor&&(e.EmissiveColor.type==="Color"||e.EmissiveColor.type==="ColorRGB")&&(s.emissive=ot.colorSpaceToWorking(new de().fromArray(e.EmissiveColor.value),yt)),e.EmissiveFactor&&(s.emissiveIntensity=parseFloat(e.EmissiveFactor.value)),s.opacity=1-(e.TransparencyFactor?parseFloat(e.TransparencyFactor.value):0),(s.opacity===1||s.opacity===0)&&(s.opacity=e.Opacity?parseFloat(e.Opacity.value):null,s.opacity===null&&(s.opacity=1-(e.TransparentColor?parseFloat(e.TransparentColor.value[0]):0))),s.opacity<1&&(s.transparent=!0),e.ReflectionFactor&&(s.reflectivity=e.ReflectionFactor.value),e.Shininess&&(s.shininess=e.Shininess.value),e.Specular?s.specular=ot.colorSpaceToWorking(new de().fromArray(e.Specular.value),yt):e.SpecularColor&&e.SpecularColor.type==="Color"&&(s.specular=ot.colorSpaceToWorking(new de().fromArray(e.SpecularColor.value),yt));const a=this;return Jt.get(i).children.forEach(function(r){const o=r.relationship;switch(o){case"Bump":s.bumpMap=a.getTexture(t,r.ID);break;case"Maya|TEX_ao_map":s.aoMap=a.getTexture(t,r.ID);break;case"DiffuseColor":case"Maya|TEX_color_map":s.map=a.getTexture(t,r.ID),s.map!==void 0&&(s.map.colorSpace=yt);break;case"DisplacementColor":s.displacementMap=a.getTexture(t,r.ID);break;case"EmissiveColor":s.emissiveMap=a.getTexture(t,r.ID),s.emissiveMap!==void 0&&(s.emissiveMap.colorSpace=yt);break;case"NormalMap":case"Maya|TEX_normal_map":s.normalMap=a.getTexture(t,r.ID);break;case"ReflectionColor":s.envMap=a.getTexture(t,r.ID),s.envMap!==void 0&&(s.envMap.mapping=mr,s.envMap.colorSpace=yt);break;case"SpecularColor":s.specularMap=a.getTexture(t,r.ID),s.specularMap!==void 0&&(s.specularMap.colorSpace=yt);break;case"TransparentColor":case"TransparencyFactor":s.alphaMap=a.getTexture(t,r.ID),s.transparent=!0;break;default:console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.",o);break}}),s}getTexture(e,t){return"LayeredTexture"in gt.Objects&&t in gt.Objects.LayeredTexture&&(console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."),t=Jt.get(t).children[0].ID),e.get(t)}parseDeformers(){const e={},t={};if("Deformer"in gt.Objects){const i=gt.Objects.Deformer;for(const s in i){const a=i[s],r=Jt.get(parseInt(s));if(a.attrType==="Skin"){const o=this.parseSkeleton(r,i);o.ID=s,r.parents.length>1&&console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."),o.geometryID=r.parents[0].ID,e[s]=o}else if(a.attrType==="BlendShape"){const o={id:s};o.rawTargets=this.parseMorphTargets(r,i),o.id=s,r.parents.length>1&&console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."),t[s]=o}}}return{skeletons:e,morphTargets:t}}parseSkeleton(e,t){const i=[];return e.children.forEach(function(s){const a=t[s.ID];if(a.attrType!=="Cluster")return;const r={ID:s.ID,indices:[],weights:[],transformLink:new Ee().fromArray(a.TransformLink.a)};"Indexes"in a&&(r.indices=a.Indexes.a,r.weights=a.Weights.a),i.push(r)}),{rawBones:i,bones:[]}}parseMorphTargets(e,t){const i=[];for(let s=0;s1?r=o:o.length>0?r=o[0]:(r=new sr({name:ln.DEFAULT_MATERIAL_NAME,color:13421772}),o.push(r)),"color"in a.attributes&&o.forEach(function(l){l.vertexColors=!0}),a.groups.length>0){let l=!1;for(let c=0,u=a.groups.length;c=o.length)&&(d.materialIndex=o.length,l=!0)}if(l){const c=new sr;o.push(c)}}return a.FBX_Deformer?(s=new hf(a,r),s.normalizeSkinWeights()):s=new Se(a,r),s}createCurve(e,t){const i=e.children.reduce(function(a,r){return t.has(r.ID)&&(a=t.get(r.ID)),a},null),s=new Pt({name:ln.DEFAULT_MATERIAL_NAME,color:3342591,linewidth:1});return new On(i,s)}getTransformData(e,t){const i={};"InheritType"in t&&(i.inheritType=parseInt(t.InheritType.value)),"RotationOrder"in t?i.eulerOrder=_c(t.RotationOrder.value):i.eulerOrder=_c(0),"Lcl_Translation"in t&&(i.translation=t.Lcl_Translation.value),"PreRotation"in t&&(i.preRotation=t.PreRotation.value),"Lcl_Rotation"in t&&(i.rotation=t.Lcl_Rotation.value),"PostRotation"in t&&(i.postRotation=t.PostRotation.value),"Lcl_Scaling"in t&&(i.scale=t.Lcl_Scaling.value),"ScalingOffset"in t&&(i.scalingOffset=t.ScalingOffset.value),"ScalingPivot"in t&&(i.scalingPivot=t.ScalingPivot.value),"RotationOffset"in t&&(i.rotationOffset=t.RotationOffset.value),"RotationPivot"in t&&(i.rotationPivot=t.RotationPivot.value),e.userData.transformData=i}setLookAtProperties(e,t){"LookAtProperty"in t&&Jt.get(e.ID).children.forEach(function(s){if(s.relationship==="LookAtProperty"){const a=gt.Objects.Model[s.ID];if("Lcl_Translation"in a){const r=a.Lcl_Translation.value;e.target!==void 0?(e.target.position.fromArray(r),Vn.add(e.target)):e.lookAt(new T().fromArray(r))}}})}bindSkeleton(e,t,i){const s=this.parsePoseNodes();for(const a in e){const r=e[a];Jt.get(parseInt(r.ID)).parents.forEach(function(l){if(t.has(l.ID)){const c=l.ID;Jt.get(c).parents.forEach(function(d){i.has(d.ID)&&i.get(d.ID).bind(new Xo(r.bones),s[d.ID])})}})}}parsePoseNodes(){const e={};if("Pose"in gt.Objects){const t=gt.Objects.Pose;for(const i in t)if(t[i].attrType==="BindPose"&&t[i].NbPoseNodes>0){const s=t[i].PoseNode;Array.isArray(s)?s.forEach(function(a){e[a.Node]=new Ee().fromArray(a.Matrix.a)}):e[s.Node]=new Ee().fromArray(s.Matrix.a)}}return e}addGlobalSceneSettings(){if("GlobalSettings"in gt){if("AmbientColor"in gt.GlobalSettings){const e=gt.GlobalSettings.AmbientColor.value,t=e[0],i=e[1],s=e[2];if(t!==0||i!==0||s!==0){const a=new de().setRGB(t,i,s,yt);Vn.add(new Dc(a,1))}}"UnitScaleFactor"in gt.GlobalSettings&&(Vn.userData.unitScaleFactor=gt.GlobalSettings.UnitScaleFactor.value)}}}class KF{constructor(){this.negativeMaterialIndices=!1}parse(e){const t=new Map;if("Geometry"in gt.Objects){const i=gt.Objects.Geometry;for(const s in i){const a=Jt.get(parseInt(s)),r=this.parseGeometry(a,i[s],e);t.set(parseInt(s),r)}}return this.negativeMaterialIndices===!0&&console.warn("THREE.FBXLoader: The FBX file contains invalid (negative) material indices. The asset might not render as expected."),t}parseGeometry(e,t,i){switch(t.attrType){case"Mesh":return this.parseMeshGeometry(e,t,i);case"NurbsCurve":return this.parseNurbsGeometry(t)}}parseMeshGeometry(e,t,i){const s=i.skeletons,a=[],r=e.parents.map(function(d){return gt.Objects.Model[d.ID]});if(r.length===0)return;const o=e.children.reduce(function(d,h){return s[h.ID]!==void 0&&(d=s[h.ID]),d},null);e.children.forEach(function(d){i.morphTargets[d.ID]!==void 0&&a.push(i.morphTargets[d.ID])});const l=r[0],c={};"RotationOrder"in l&&(c.eulerOrder=_c(l.RotationOrder.value)),"InheritType"in l&&(c.inheritType=parseInt(l.InheritType.value)),"GeometricTranslation"in l&&(c.translation=l.GeometricTranslation.value),"GeometricRotation"in l&&(c.rotation=l.GeometricRotation.value),"GeometricScaling"in l&&(c.scale=l.GeometricScaling.value);const u=dM(c);return this.genGeometry(t,o,a,u)}genGeometry(e,t,i,s){const a=new $e;e.attrName&&(a.name=e.attrName);const r=this.parseGeoNode(e,t),o=this.genBuffers(r),l=new Ce(o.vertex,3);if(l.applyMatrix4(s),a.setAttribute("position",l),o.colors.length>0&&a.setAttribute("color",new Ce(o.colors,3)),t&&(a.setAttribute("skinIndex",new rf(o.weightsIndices,4)),a.setAttribute("skinWeight",new Ce(o.vertexWeights,4)),a.FBX_Deformer=t),o.normal.length>0){const c=new rt().getNormalMatrix(s),u=new Ce(o.normal,3);u.applyNormalMatrix(c),a.setAttribute("normal",u)}if(o.uvs.forEach(function(c,u){const d=u===0?"uv":`uv${u}`;a.setAttribute(d,new Ce(o.uvs[u],2))}),r.material&&r.material.mappingType!=="AllSame"){let c=o.materialIndex[0],u=0;if(o.materialIndex.forEach(function(d,h){d!==c&&(a.addGroup(u,h-u,c),c=d,u=h)}),a.groups.length>0){const d=a.groups[a.groups.length-1],h=d.start+d.count;h!==o.materialIndex.length&&a.addGroup(h,o.materialIndex.length-h,c)}a.groups.length===0&&a.addGroup(0,o.materialIndex.length,o.materialIndex[0])}return this.addMorphTargets(a,e,i,s),a}parseGeoNode(e,t){const i={};if(i.vertexPositions=e.Vertices!==void 0?e.Vertices.a:[],i.vertexIndices=e.PolygonVertexIndex!==void 0?e.PolygonVertexIndex.a:[],e.LayerElementColor&&e.LayerElementColor[0].Colors&&(i.color=this.parseVertexColors(e.LayerElementColor[0])),e.LayerElementMaterial&&(i.material=this.parseMaterialIndices(e.LayerElementMaterial[0])),e.LayerElementNormal&&(i.normal=this.parseNormals(e.LayerElementNormal[0])),e.LayerElementUV){i.uv=[];let s=0;for(;e.LayerElementUV[s];)e.LayerElementUV[s].UV&&i.uv.push(this.parseUVs(e.LayerElementUV[s])),s++}return i.weightTable={},t!==null&&(i.skeleton=t,t.rawBones.forEach(function(s,a){s.indices.forEach(function(r,o){i.weightTable[r]===void 0&&(i.weightTable[r]=[]),i.weightTable[r].push({id:a,weight:s.weights[o]})})})),i}genBuffers(e){const t={vertex:[],normal:[],colors:[],uvs:[],materialIndex:[],vertexWeights:[],weightsIndices:[]};let i=0,s=0,a=!1,r=[],o=[],l=[],c=[],u=[],d=[];const h=this;return e.vertexIndices.forEach(function(f,p){let g,_=!1;f<0&&(f=f^-1,_=!0);let m=[],v=[];if(r.push(f*3,f*3+1,f*3+2),e.color){const y=ku(p,i,f,e.color);l.push(y[0],y[1],y[2])}if(e.skeleton){if(e.weightTable[f]!==void 0&&e.weightTable[f].forEach(function(y){v.push(y.weight),m.push(y.id)}),v.length>4){a||(console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."),a=!0);const y=[0,0,0,0],b=[0,0,0,0];v.forEach(function(S,x){let M=S,C=m[x];b.forEach(function(w,E,R){if(M>w){R[E]=M,M=w;const L=y[E];y[E]=C,C=L}})}),m=y,v=b}for(;v.length<4;)v.push(0),m.push(0);for(let y=0;y<4;++y)u.push(v[y]),d.push(m[y])}if(e.normal){const y=ku(p,i,f,e.normal);o.push(y[0],y[1],y[2])}e.material&&e.material.mappingType!=="AllSame"&&(g=ku(p,i,f,e.material)[0],g<0&&(h.negativeMaterialIndices=!0,g=0)),e.uv&&e.uv.forEach(function(y,b){const S=ku(p,i,f,y);c[b]===void 0&&(c[b]=[]),c[b].push(S[0]),c[b].push(S[1])}),s++,_&&(h.genFace(t,e,r,g,o,l,c,u,d,s),i++,s=0,r=[],o=[],l=[],c=[],u=[],d=[])}),t}getNormalNewell(e){const t=new T(0,0,0);for(let i=0;i.5?new T(0,1,0):new T(0,0,1)).cross(t).normalize(),a=t.clone().cross(s).normalize();return{normal:t,tangent:s,bitangent:a}}flattenVertex(e,t,i){return new ne(e.dot(t),e.dot(i))}genFace(e,t,i,s,a,r,o,l,c,u){let d;if(u>3){const h=[],f=t.baseVertexPositions||t.vertexPositions;for(let m=0;m1&&console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.");const r=e.get(a[0].ID);i[s]={name:t[s].attrName,layer:r}}return i}addClip(e){let t=[];const i=this;return e.layer.forEach(function(s){t=t.concat(i.generateTracks(s))}),new va(e.name,-1,t)}generateTracks(e){const t=[];let i=new T,s=new T;if(e.transform&&e.transform.decompose(i,new ht,s),i=i.toArray(),s=s.toArray(),e.T!==void 0&&Object.keys(e.T.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.T.curves,i,"position");a!==void 0&&t.push(a)}if(e.R!==void 0&&Object.keys(e.R.curves).length>0){const a=this.generateRotationTrack(e.modelName,e.R.curves,e.preRotation,e.postRotation,e.eulerOrder);a!==void 0&&t.push(a)}if(e.S!==void 0&&Object.keys(e.S.curves).length>0){const a=this.generateVectorTrack(e.modelName,e.S.curves,s,"scale");a!==void 0&&t.push(a)}if(e.DeformPercent!==void 0){const a=this.generateMorphTrack(e);a!==void 0&&t.push(a)}return t}generateVectorTrack(e,t,i,s){const a=this.getTimesForAllAxes(t),r=this.getKeyframeTrackValues(a,t,i);return new qs(e+"."+s,a,r)}generateRotationTrack(e,t,i,s,a){let r,o;if(t.x!==void 0&&t.y!==void 0&&t.z!==void 0){const h=this.interpolateRotations(t.x,t.y,t.z,a);r=h[0],o=h[1]}const l=_c(0);i!==void 0&&(i=i.map(bt.degToRad),i.push(l),i=new rn().fromArray(i),i=new ht().setFromEuler(i)),s!==void 0&&(s=s.map(bt.degToRad),s.push(l),s=new rn().fromArray(s),s=new ht().setFromEuler(s).invert());const c=new ht,u=new rn,d=[];if(!o||!r)return new Ss(e+".quaternion",[0],[0]);for(let h=0;h2&&new ht().fromArray(d,(h-3)/3*4).dot(c)<0&&c.set(-c.x,-c.y,-c.z,-c.w),c.toArray(d,h/3*4);return new Ss(e+".quaternion",r,d)}generateMorphTrack(e){const t=e.DeformPercent.curves.morph,i=t.values.map(function(a){return a/100}),s=Vn.getObjectByName(e.modelName).morphTargetDictionary[e.morphName];return new ya(e.modelName+".morphTargetInfluences["+s+"]",t.times,i)}getTimesForAllAxes(e){let t=[];if(e.x!==void 0&&(t=t.concat(e.x.times)),e.y!==void 0&&(t=t.concat(e.y.times)),e.z!==void 0&&(t=t.concat(e.z.times)),t=t.sort(function(i,s){return i-s}),t.length>1){let i=1,s=t[0];for(let a=1;a=180||f[1]>=180||f[2]>=180){const g=Math.max(...f)/180,_=new rn(...c,s),m=new rn(...d,s),v=new ht().setFromEuler(_),y=new ht().setFromEuler(m);v.dot(y)&&y.set(-y.x,-y.y,-y.z,-y.w);const b=e.times[o-1],S=e.times[o]-b,x=new ht,M=new rn;for(let C=0;C<1;C+=1/g)x.copy(v.clone().slerp(y.clone(),C)),a.push(b+C*S),M.setFromQuaternion(x,s),r.push(M.x),r.push(M.y),r.push(M.z)}else a.push(e.times[o]),r.push(bt.degToRad(e.values[o])),r.push(bt.degToRad(t.values[o])),r.push(bt.degToRad(i.values[o]))}return[a,r]}}class YF{getPrevNode(){return this.nodeStack[this.currentIndent-2]}getCurrentNode(){return this.nodeStack[this.currentIndent-1]}getCurrentProp(){return this.currentProp}pushStack(e){this.nodeStack.push(e),this.currentIndent+=1}popStack(){this.nodeStack.pop(),this.currentIndent-=1}setCurrentProp(e,t){this.currentProp=e,this.currentPropName=t}parse(e){this.currentIndent=0,this.allNodes=new uM,this.nodeStack=[],this.currentProp=[],this.currentPropName="";const t=this,i=e.split(/[\r\n]+/);return i.forEach(function(s,a){const r=s.match(/^[\s\t]*;/),o=s.match(/^[\s\t]*$/);if(r||o)return;const l=s.match("^\\t{"+t.currentIndent+"}(\\w+):(.*){",""),c=s.match("^\\t{"+t.currentIndent+"}(\\w+):[\\s\\t\\r\\n](.*)"),u=s.match("^\\t{"+(t.currentIndent-1)+"}}");l?t.parseNodeBegin(s,l):c?t.parseNodeProperty(s,c,i[++a]):u?t.popStack():s.match(/^[^\s\t}]/)&&t.parseNodePropertyContinued(s)}),this.allNodes}parseNodeBegin(e,t){const i=t[1].trim().replace(/^"/,"").replace(/"$/,""),s=t[2].split(",").map(function(l){return l.trim().replace(/^"/,"").replace(/"$/,"")}),a={name:i},r=this.parseNodeAttr(s),o=this.getCurrentNode();this.currentIndent===0?this.allNodes.add(i,a):i in o?(i==="PoseNode"?o.PoseNode.push(a):o[i].id!==void 0&&(o[i]={},o[i][o[i].id]=o[i]),r.id!==""&&(o[i][r.id]=a)):typeof r.id=="number"?(o[i]={},o[i][r.id]=a):i!=="Properties70"&&(i==="PoseNode"?o[i]=[a]:o[i]=a),typeof r.id=="number"&&(a.id=r.id),r.name!==""&&(a.attrName=r.name),r.type!==""&&(a.attrType=r.type),this.pushStack(a)}parseNodeAttr(e){let t=e[0];e[0]!==""&&(t=parseInt(e[0]),isNaN(t)&&(t=e[0]));let i="",s="";return e.length>1&&(i=e[1].replace(/^(\w+)::/,""),s=e[2]),{id:t,name:i,type:s}}parseNodeProperty(e,t,i){let s=t[1].replace(/^"/,"").replace(/"$/,"").trim(),a=t[2].replace(/^"/,"").replace(/"$/,"").trim();s==="Content"&&a===","&&(a=i.replace(/"/g,"").replace(/,$/,"").trim());const r=this.getCurrentNode();if(r.name==="Properties70"){this.parseNodeSpecialProperty(e,s,a);return}if(s==="C"){const l=a.split(",").slice(1),c=parseInt(l[0]),u=parseInt(l[1]);let d=a.split(",").slice(3);d=d.map(function(h){return h.trim().replace(/^"/,"")}),s="connections",a=[c,u],tN(a,d),r[s]===void 0&&(r[s]=[])}s==="Node"&&(r.id=a),s in r&&Array.isArray(r[s])?r[s].push(a):s!=="a"?r[s]=a:r.a=a,this.setCurrentProp(r,s),s==="a"&&a.slice(-1)!==","&&(r.a=Xp(a))}parseNodePropertyContinued(e){const t=this.getCurrentNode();t.a+=e,e.slice(-1)!==","&&(t.a=Xp(t.a))}parseNodeSpecialProperty(e,t,i){const s=i.split('",').map(function(u){return u.trim().replace(/^\"/,"").replace(/\s/,"_")}),a=s[0],r=s[1],o=s[2],l=s[3];let c=s[4];switch(r){case"int":case"enum":case"bool":case"ULongLong":case"double":case"Number":case"FieldOfView":c=parseFloat(c);break;case"Color":case"ColorRGB":case"Vector3D":case"Lcl_Translation":case"Lcl_Rotation":case"Lcl_Scaling":c=Xp(c);break}this.getPrevNode()[a]={type:r,type2:o,flag:l,value:c},this.setCurrentProp(this.getPrevNode(),a)}}class jF{parse(e){const t=new Ov(e);t.skip(23);const i=t.getUint32();if(i<6400)throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: "+i);const s=new uM;for(;!this.endOfContent(t);){const a=this.parseNode(t,i);a!==null&&s.add(a.name,a)}return s}endOfContent(e){return e.size()%16===0?(e.getOffset()+160+16&-16)>=e.size():e.getOffset()+160+16>=e.size()}parseNode(e,t){const i={},s=t>=7500?e.getUint64():e.getUint32(),a=t>=7500?e.getUint64():e.getUint32();t>=7500?e.getUint64():e.getUint32();const r=e.getUint8(),o=e.getString(r);if(s===0)return null;const l=[];for(let h=0;h0?l[0]:"",u=l.length>1?l[1]:"",d=l.length>2?l[2]:"";for(i.singleProperty=a===1&&e.getOffset()===s;s>e.getOffset();){const h=this.parseNode(e,t);h!==null&&this.parseSubNode(o,i,h)}return i.propertyList=l,typeof c=="number"&&(i.id=c),u!==""&&(i.attrName=u),d!==""&&(i.attrType=d),o!==""&&(i.name=o),i}parseSubNode(e,t,i){if(i.singleProperty===!0){const s=i.propertyList[0];Array.isArray(s)?(t[i.name]=i,i.a=s):t[i.name]=s}else if(e==="Connections"&&i.name==="C"){const s=[];i.propertyList.forEach(function(a,r){r!==0&&s.push(a)}),t.connections===void 0&&(t.connections=[]),t.connections.push(s)}else if(i.name==="Properties70")Object.keys(i).forEach(function(a){t[a]=i[a]});else if(e==="Properties70"&&i.name==="P"){let s=i.propertyList[0],a=i.propertyList[1];const r=i.propertyList[2],o=i.propertyList[3];let l;s.indexOf("Lcl ")===0&&(s=s.replace("Lcl ","Lcl_")),a.indexOf("Lcl ")===0&&(a=a.replace("Lcl ","Lcl_")),a==="Color"||a==="ColorRGB"||a==="Vector"||a==="Vector3D"||a.indexOf("Lcl_")===0?l=[i.propertyList[4],i.propertyList[5],i.propertyList[6]]:l=i.propertyList[4],t[s]={type:a,type2:r,flag:o,value:l}}else t[i.name]===void 0?typeof i.id=="number"?(t[i.name]={},t[i.name][i.id]=i):t[i.name]=i:i.name==="PoseNode"?(Array.isArray(t[i.name])||(t[i.name]=[t[i.name]]),t[i.name].push(i)):t[i.name][i.id]===void 0&&(t[i.name][i.id]=i)}parseProperty(e){const t=e.getString(1);let i;switch(t){case"C":return e.getBoolean();case"D":return e.getFloat64();case"F":return e.getFloat32();case"I":return e.getInt32();case"L":return e.getInt64();case"R":return i=e.getUint32(),e.getArrayBuffer(i);case"S":return i=e.getUint32(),e.getString(i);case"Y":return e.getInt16();case"b":case"c":case"d":case"f":case"i":case"l":const s=e.getUint32(),a=e.getUint32(),r=e.getUint32();if(a===0)switch(t){case"b":case"c":return e.getBooleanArray(s);case"d":return e.getFloat64Array(s);case"f":return e.getFloat32Array(s);case"i":return e.getInt32Array(s);case"l":return e.getInt64Array(s)}const o=DF(new Uint8Array(e.getArrayBuffer(r))),l=new Ov(o.buffer);switch(t){case"b":case"c":return l.getBooleanArray(s);case"d":return l.getFloat64Array(s);case"f":return l.getFloat32Array(s);case"i":return l.getInt32Array(s);case"l":return l.getInt64Array(s)}break;default:throw new Error("THREE.FBXLoader: Unknown property type "+t)}}}class Ov{constructor(e,t){this.dv=new DataView(e),this.offset=0,this.littleEndian=t!==void 0?t:!0,this._textDecoder=new TextDecoder}getOffset(){return this.offset}size(){return this.dv.buffer.byteLength}skip(e){this.offset+=e}getBoolean(){return(this.getUint8()&1)===1}getBooleanArray(e){const t=[];for(let i=0;i=0&&(i=new Uint8Array(this.dv.buffer,t,s)),this._textDecoder.decode(i)}}class uM{add(e,t){this[e]=t}}function ZF(n){const e="Kaydara FBX Binary \0";return n.byteLength>=e.length&&e===hM(n,0,e.length)}function JF(n){const e=["K","a","y","d","a","r","a","\\","F","B","X","\\","B","i","n","a","r","y","\\","\\"];let t=0;function i(s){const a=n[s-1];return n=n.slice(t+s),t++,a}for(let s=0;s(console.warn(`⚠️ Could not load texture ${u}:`,d.message),null))])}this._processModelMaterials(s,a,e,i.format);const o=this._calculateModelScale(s,e,i.scale);if(s.userData.scaleInfo=o,s.userData.format=i.format,i.wheelSockets){s.userData.wheelSockets=!0,s.userData.wheelModelName=i.wheelModel;const l=this._findWheelSockets(s);s.userData.wheelSocketObjects=l,console.log(`🔌 Found ${Object.keys(l).length} wheel sockets`)}return{model:s,chassisTexture:a,wheelModel:r}}_findWheelSockets(e){const t={},i=["Wheel_BL","Wheel_BR","Wheel_FL","Wheel_FR"];console.log("🔍 Searching for wheel sockets..."),e.traverse(s=>{const a=s.name,r=a.toLowerCase();for(const o of i)(a===o||r===o.toLowerCase())&&(t[o]=s,console.log(` Found socket: "${a}" at position (${s.position.x.toFixed(2)}, ${s.position.y.toFixed(2)}, ${s.position.z.toFixed(2)})`))});for(const s of i)t[s]||console.warn(` ⚠️ Missing wheel socket: ${s}`);return Object.keys(t).length===0&&(console.warn("⚠️ No wheel sockets found! Listing all objects:"),e.traverse(s=>{console.log(` - "${s.name}" (${s.type})`)})),t}_calculateModelScale(e,t,i=null){const s=new bn().setFromObject(e),a=new T;s.getSize(a),console.log(`📐 ${t.toUpperCase()} model dimensions (raw):`),console.log(` Size: X=${a.x.toFixed(2)}, Y=${a.y.toFixed(2)}, Z=${a.z.toFixed(2)}`),console.log(` Min Y: ${s.min.y.toFixed(2)}, Max Y: ${s.max.y.toFixed(2)}`);const r=this.HITBOX_DIMENSIONS[t]||this.HITBOX_DIMENSIONS.octane;let o;if(i!==null)o=i,console.log(` Using override scale: ${o}`);else{const l=a.z,u=r.length*1/l;o=u*.55,console.log(` Target RL: ${r.length} x ${r.width} x ${r.height} uu`),console.log(` Scale to RL: ${u.toFixed(4)}, Final scale: ${o.toFixed(6)}`)}return{scale:o}}_loadFBX(e){return new Promise((t,i)=>{this.fbxLoader.load(e,s=>t(s),void 0,s=>i(new Error(`Failed to load FBX: ${e} - ${s.message}`)))})}_loadGLB(e){return new Promise((t,i)=>{this.gltfLoader.load(e,s=>{t(s.scene)},void 0,s=>i(new Error(`Failed to load GLB: ${e} - ${s.message}`)))})}async loadWheelModel(e){const t=Pi(`models/wheels/${e}`,this.assetBase);if(this.wheelModelCache.has(t))return this.wheelModelCache.get(t);if(this.wheelLoadingPromises.has(t))return this.wheelLoadingPromises.get(t);const i=this._loadGLB(t);this.wheelLoadingPromises.set(t,i);try{const s=await i;return console.log(`✓ Loaded wheel model: ${e}`),s.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.wheelModelCache.set(t,s),s}catch(s){throw console.error(`Failed to load wheel model ${e}:`,s),s}finally{this.wheelLoadingPromises.delete(t)}}_loadTexture(e){return new Promise((t,i)=>{this.textureLoader.load(e,s=>{s.flipY=!1,s.colorSpace=yt,t(s)},void 0,s=>i(new Error(`Failed to load texture: ${e}`)))})}_processModelMaterials(e,t,i,s="fbx"){console.log(`📦 Processing materials for ${i} (${s}):`);const a=["body","paint"],r=[];e.traverse(o=>{o.isLight&&(r.push(o),console.log(` 🔦 Removing imported light: "${o.name||o.type}"`))}),r.forEach(o=>{o.parent&&o.parent.remove(o)}),e.traverse(o=>{o.isMesh&&(console.log(` Mesh: "${o.name}"`),(Array.isArray(o.material)?o.material:[o.material]).forEach((c,u)=>{console.log(` [${u}] Material: "${c.name}" - Color: #${c.color?.getHexString()||"none"}`);const d=(c.name||"").toLowerCase(),h=(o.name||"").toLowerCase(),f=a.some(p=>d.includes(p)||h.includes(p));if(s==="glb")(c.isMeshStandardMaterial||c.isMeshPhysicalMaterial)&&(console.log(` → GLB material (keeping as-is): metalness=${c.metalness?.toFixed(2)}, roughness=${c.roughness?.toFixed(2)}`),c.userData.originalColor=c.color?.clone(),c.userData.isBodyMaterial=f);else if(c.isMeshPhongMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial){let p;f?(p=new kn({color:c.color,map:c.map,metalness:.8,roughness:.15}),console.log(" → Body material: shiny metallic")):(p=new kn({color:c.color,map:c.map,metalness:.1,roughness:.6}),console.log(" → Non-body material: matte")),p.name=c.name,Array.isArray(o.material)?o.material[u]=p:o.material=p}}))}),t?console.log(` ✓ Chassis texture loaded for ${i}`):s==="fbx"&&console.log(` ⚠️ No chassis texture for ${i}`)}getModelTypeForCar(e,t){return e&&this.carNameToModel[e]?this.carNameToModel[e]:this.hitboxToModel[t]||"octane"}getModelTypeForHitbox(e){return this.hitboxToModel[e]||"octane"}async createCarMesh(e,t=0){const i=this.getModelTypeForHitbox(e);try{const s=await this.loadModel(i);if(!s||!s.model)return console.warn(`No cached model for ${i}`),null;const a=s.model.userData.format||"fbx";let r;a==="glb"?(r=Kp(s.model),r.traverse(c=>{c.isMesh&&(Array.isArray(c.material)?c.material=c.material.map(u=>u.clone()):c.material&&(c.material=c.material.clone()))})):r=s.model.clone(),this.applyTeamColor(r,t);const o=new Et,l=s.model.userData.scaleInfo;return l&&r.scale.setScalar(l.scale),o.add(r),r.traverse(c=>{c.isMesh&&(c.castShadow=!0)}),o.userData.modelType=i,o.userData.hitboxType=e,o.userData.team=t,o.userData.isFBXModel=a==="fbx",o.userData.isGLBModel=a==="glb",o}catch(s){return console.error(`Failed to create car mesh for ${e}:`,s),null}}applyTeamColor(e,t){const i=t===0?this.TEAM_COLORS.blue:this.TEAM_COLORS.orange,s=["body","paint"];let a=!1;console.log("🔍 Analyzing car meshes for team coloring:"),e.traverse(r=>{if(r.isMesh){const o=Array.isArray(r.material)?r.material:[r.material];console.log(` Mesh: "${r.name}" with ${o.length} material(s)`),o.forEach((l,c)=>{console.log(` [${c}] Material: "${l.name}", isBodyMaterial: ${l.userData?.isBodyMaterial}`)})}}),e.traverse(r=>{r.isMesh&&(Array.isArray(r.material)?r.material:[r.material]).forEach((l,c)=>{const u=(l.name||"").toLowerCase(),d=(r.name||"").toLowerCase(),h=l.userData?.isBodyMaterial||s.some(f=>u.includes(f)||d.includes(f));if(console.log(` Checking "${l.name}" on "${r.name}": isBody=${h}`),h){a=!0;const f=l.clone();f.color=i.clone(),f.metalness=.39,f.roughness=.47,f.userData={...l.userData},Array.isArray(r.material)?r.material[c]=f:r.material=f,console.log(`🎨 Applied team color to: "${l.name}" on mesh "${r.name}" (index ${c})`)}})}),a||console.warn("⚠️ No body material found for team coloring! Check material names.")}updateTeamColor(e,t){this.applyTeamColor(e,t)}isModelReady(e,t){const i=this.getModelTypeForCar(e,t);return this.modelCache.has(this.modelCacheKey(i))}getCarMeshSync(e,t,i=0){const s=this.getModelTypeForCar(e,t),a=this.modelCache.get(this.modelCacheKey(s));if(!a||!a.model)return null;const r=a.model.userData.format||"fbx",o=a.model.userData.wheelSockets;let l;r==="glb"?(l=Kp(a.model),l.traverse(d=>{d.isMesh&&(Array.isArray(d.material)?d.material=d.material.map(h=>h.clone()):d.material&&(d.material=d.material.clone()))})):l=a.model.clone(),this.applyTeamColor(l,i);const c=new Et,u=a.model.userData.scaleInfo;return u&&l.scale.setScalar(u.scale),c.add(l),l.traverse(d=>{d.isMesh&&(d.castShadow=!0)}),c.userData.modelType=s,c.userData.carName=e,c.userData.hitboxType=t,c.userData.team=i,c.userData.isFBXModel=r==="fbx",c.userData.isGLBModel=r==="glb",c.userData.hasWheelSockets=o,o?c.userData.wheels=this._attachWheelsToSockets(l,a.wheelModel):c.userData.wheels=this._findWheelMeshes(l),c}_attachWheelsToSockets(e,t){const i=[],s={Wheel_FL:{side:"left",position:"front"},Wheel_FR:{side:"right",position:"front"},Wheel_BL:{side:"left",position:"rear"},Wheel_BR:{side:"right",position:"rear"}};if(!t)return console.warn("⚠️ No wheel model template available for socket attachment"),i;console.log("🔧 Attaching wheels to sockets...");const a={};e.traverse(r=>{const o=r.name;s[o]&&(a[o]=r)});for(const[r,o]of Object.entries(s)){const l=a[r];if(!l){console.warn(` ⚠️ Socket not found: ${r}`);continue}const c=Kp(t);c.traverse(u=>{u.isMesh&&(Array.isArray(u.material)?u.material=u.material.map(d=>d.clone()):u.material&&(u.material=u.material.clone()),u.castShadow=!0)}),c.position.set(0,0,0),c.rotation.set(0,0,0),l.add(c),console.log(` ✓ Attached wheel to ${r} (${o.position} ${o.side})`),i.push({mesh:c,steeringPivot:o.position==="front"?l:null,side:o.side,position:o.position,socket:l})}return console.log(`✓ Attached ${i.length} wheels to sockets`),i}_findWheelMeshes(e){const t=[],i={fl:{side:"left",position:"front"},fr:{side:"right",position:"front"},rl:{side:"left",position:"rear"},rr:{side:"right",position:"rear"}};console.log("🔍 Searching for wheels in model...");const s={};e.traverse(a=>{const o=a.name.toLowerCase().match(/^wheel_(fl|fr|rl|rr)_(y|z)$/);if(o){const l=o[1],c=o[2];s[l]||(s[l]={}),s[l][c]=a,console.log(` Found: "${a.name}" (${c==="y"?"wheel mesh":"steering pivot"})`)}});for(const[a,r]of Object.entries(s)){const o=i[a];if(!o)continue;const l=r.y,c=r.z;l&&(a==="fr"&&(l.rotation.z+=Math.PI,console.log(" Fixed FR wheel orientation (rotation.z += PI)")),t.push({mesh:l,steeringPivot:o.position==="front"?c:null,side:o.side,position:o.position}),console.log(`🛞 Wheel ${a.toUpperCase()}: mesh="${l.name}"${c&&o.position==="front"?`, steering="${c.name}"`:""}`))}return t.length===0?(console.warn("⚠️ No wheel meshes found. Expected: Wheel_FL_Y, Wheel_FR_Y, etc."),console.warn(" Listing all objects in model:"),e.traverse(a=>{console.log(` - "${a.name}" (${a.type})`)})):console.log(`✓ Found ${t.length} wheels`),t}dispose(){}}const lN=2,qp=new Map;function cN(n){const e=Pi("models/ball/scene.gltf",n);let t=qp.get(e);if(!t){const i=new oy;t=new Promise(s=>{i.load(e,a=>{console.log("✓ Ball model loaded"),s(a.scene)},void 0,a=>{console.error("Failed to load ball model:",a),qp.delete(e),s(null)})}),qp.set(e,t)}return t}class uN{constructor(e,t,i={}){this.scene=e,this.effectsManager=t,this.assetBase=i.assetBase,this.actors={},this.ballActorId=null,this.ballIndicator=null,this.ballVerticalLine=null,this.playerNames=new Set,this.actorToPlayer={},this.actorLinks={},this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.carModelLoader=new oN({assetBase:this.assetBase}),this.pendingCarReplacements=new Map,this._lastGoalScanTime=null,this._firedGoalTimes=new Set,this._p0=new T,this._p1=new T,this._v0=new T,this._v1=new T,this._nextRot=new ht,this._q0=new ht,this._q1=new ht,this._qResult=new ht,this.onPlayerFound=null,this.lastBallTouchTeam=0,this.BALL_TOUCH_DISTANCE=200,this.ballTimeline=[],this.playerTimelineMap={},this.timelineIndices={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer=null,this.animationActions={},this.animationClock=new Jg(!1),this.replayDuration=0,this.useAnimationSystem=!1,this.SMOOTHING_WINDOW=5,this.positionBuffers={},this.rotationBuffers={},this.interpolationEnabled=!0,this.interpolationMethod="lerp",this.smoothingWindowSize=12,this.lastFrameInfo=null,this._lowPassState=new Map,this._lowPassAlpha=.3,this._predictState=new Map,this._predictCorrectionTime=.1,this._smoothingBuffers=new Map,this._adaptiveState=new Map,this.ballModel=null,this._ballModelReplaced=!1,this.ballModelReady=cN(this.assetBase).then(s=>(this.ballModel=s,s!==null))}async waitForBallModel(){const e=await this.ballModelReady;return e&&!this._ballModelReplaced&&this.ballActorId&&this.actors[this.ballActorId]&&(this.replaceBallWithModel(this.ballActorId),this._ballModelReplaced=!0),e}replaceBallWithModel(e){const t=this.actors[e];if(!t||!this.ballModel)return;const i=this.ballModel.clone();i.userData=t.userData,i.position.copy(t.position),i.quaternion.copy(t.quaternion),i.scale.copy(t.scale);const s=92.75;i.scale.set(s,s,s),i.traverse(a=>{a.isMesh&&(a.castShadow=!0,a.receiveShadow=!0)}),this.scene.remove(t),this.scene.add(i),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),this.actors[e]=i,console.log("✓ Ball replaced with GLTF model")}reset(){Object.values(this.actors).forEach(e=>{this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.actors={},this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null),this.actorToPlayer={},this.actorLinks={},this.playerNames.clear(),this.playerNameToCarActorId={},this.playerNameToPriActorId={},this.playerTeams={},this.actorLoadouts={},this.carBodyIds={},this.pendingCarReplacements.clear(),this._lastGoalScanTime=null,this._firedGoalTimes.clear(),this.ballTimeline=[],this.playerTimelineMap={},this.ballTimelineCorrected=[],this.playerTimelineMapCorrected={},this.ballTimelineFiltered=[],this.playerTimelineMapFiltered={},this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},this.interpolantsInitialized=!1,this.animationMixer?.stopAllAction?.(),this.animationMixer=null,this.animationActions={},this.replayDuration=0,this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear(),this._predictState.clear(),this._smoothingBuffers.clear(),this._adaptiveState.clear(),this._ballModelReplaced=!1}resetGoalExplosionPlaybackState(){this._lastGoalScanTime=null,this._firedGoalTimes.clear()}setPlayerTeams(e){this.playerTeams=e}initFromFramework(e){console.log("[ActorManager] Initializing actors from framework..."),this._createBallMesh();const t=e.playerList;t.forEach((i,s)=>{this._createCarMesh(i.name,i.team,s,i.carName,i.hitboxType);const a=this.playerNameToCarActorId[i.name];this.actors[a]}),console.log(`[ActorManager] Created ${t.length} car meshes + 1 ball`)}initInterpolants(e){console.log("[ActorManager] Initializing interpolation system..."),this.ballTimeline=e.ballTimeline||[],this.playerTimelineMap=e.playerTimelines||{},this.ballTimelineCorrected=this._correctTimeShiftedPositions(this.ballTimeline),this.playerTimelineMapCorrected={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapCorrected[s]=this._correctTimeShiftedPositions(a)}),this.ballTimelineFiltered=this._filterBadFrames(this.ballTimeline),this.playerTimelineMapFiltered={},Object.entries(this.playerTimelineMap).forEach(([s,a])=>{this.playerTimelineMapFiltered[s]=this._filterBadFrames(a)}),this.timelineIndices={ball:0,players:{}},this.timelineIndicesFiltered={ball:0,players:{}},this.timelineIndicesCorrected={ball:0,players:{}},Object.keys(this.playerTimelineMap).forEach(s=>{this.timelineIndices.players[s]=0,this.timelineIndicesFiltered.players[s]=0,this.timelineIndicesCorrected.players[s]=0}),this.ballTimeline.length>0&&(this.replayDuration=this.ballTimeline[this.ballTimeline.length-1].time),this.useAnimationSystem&&this._initAnimationSystem(),this.interpolantsInitialized=!0;const t=this.ballTimeline.length-this.ballTimelineFiltered.length,i=this.ballTimelineCorrected._correctedCount||0;console.log(` Ball: ${this.ballTimeline.length} keyframes (${i} corrected, ${t} filtered)`),Object.entries(this.playerTimelineMap).forEach(([s,a])=>{const r=this.playerTimelineMapCorrected[s]?._correctedCount||0;console.log(` ${s}: ${a.length} keyframes (${r} corrected)`)}),console.log(` Replay duration: ${this.replayDuration.toFixed(2)}s`),console.log("[ActorManager] Animation system ready")}_initAnimationSystem(){console.log("[ActorManager] Building Three.js animation clips..."),this.animationMixer=new GT(this.scene);const e=this.actors[this.ballActorId];if(e&&this.ballTimeline.length>0){const t=this._createAnimationClip("ball",this.ballTimeline,e);if(t){const i=this.animationMixer.clipAction(t,e);i.setLoop(bh),i.clampWhenFinished=!0,this.animationActions.ball=i,console.log(` ✓ Ball animation: ${t.duration.toFixed(2)}s`)}}Object.entries(this.playerTimelineMap).forEach(([t,i])=>{const s=this.playerNameToCarActorId[t],a=this.actors[s];if(a&&i.length>0){const r=this._createAnimationClip(t,i,a);if(r){const o=this.animationMixer.clipAction(r,a);o.setLoop(bh),o.clampWhenFinished=!0,this.animationActions[t]=o,console.log(` ✓ ${t} animation: ${r.duration.toFixed(2)}s`)}}}),console.log("[ActorManager] Animation clips ready")}_createAnimationClip(e,t,i){if(!t||t.length<2)return null;const s=[],a=[],r=[],o=t[0];o.time>0&&(s.push(0),o.position?a.push(o.position.x,o.position.y,o.position.z):a.push(0,0,0),o.rotation?r.push(o.rotation.x,o.rotation.y,o.rotation.z,o.rotation.w):r.push(0,0,0,1));for(const h of t){if(s.push(h.time),h.position)a.push(h.position.x,h.position.y,h.position.z);else{const f=a.length-3;f>=0?a.push(a[f],a[f+1],a[f+2]):a.push(0,0,0)}if(h.rotation)r.push(h.rotation.x,h.rotation.y,h.rotation.z,h.rotation.w);else{const f=r.length-4;f>=0?r.push(r[f],r[f+1],r[f+2],r[f+3]):r.push(0,0,0,1)}}const l=new qs(".position",s,a,_r),c=new Ss(".quaternion",s,r),u=s[s.length-1]-s[0];return new va(e,u,[l,c])}startAnimations(){this.animationMixer&&(Object.values(this.animationActions).forEach(e=>{e.reset(),e.play()}),this.animationClock.start(),console.log("[ActorManager] Animations started"))}pauseAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!0})}resumeAnimations(){this.animationMixer&&Object.values(this.animationActions).forEach(e=>{e.paused=!1})}seekAnimations(e){this.animationMixer&&(Object.values(this.animationActions).forEach(t=>{t.time=e}),this.animationMixer.setTime(e))}updateAnimations(e){!this.animationMixer||!this.useAnimationSystem||this.animationMixer.update(e)}_subsampleTimeline(e){return!e||e.length<4?e:e.filter((t,i)=>i%2===0)}_getOrCreateSmoothingBuffer(e){return this.positionBuffers[e]||(this.positionBuffers[e]=[],this.rotationBuffers[e]=[]),{positions:this.positionBuffers[e],rotations:this.rotationBuffers[e]}}_smoothPosition(e,t){const i=this._getOrCreateSmoothingBuffer(e).positions;for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_smoothRotation(e,t){const i=this._getOrCreateSmoothingBuffer(e).rotations;for(i.push({x:t.x,y:t.y,z:t.z,w:t.w});i.length>this.SMOOTHING_WINDOW;)i.shift();if(i.length<3)return t;const s=Math.floor(i.length/2);return i[s]}resetSmoothingBuffers(){this.positionBuffers={},this.rotationBuffers={},this._lowPassState.clear()}_findKeyframeIndex(e,t,i=0){if(!e||e.length===0)return-1;if(t<=e[0].time)return 0;if(t>=e[e.length-1].time)return e.length-2;let s=Math.max(0,Math.min(i,e.length-2));if(e[s].time<=t&&e[s+1].time>t)return s;if(s+2t)return s+1;let a=0,r=e.length-2;for(;a<=r;){const o=Math.floor((a+r)/2);if(e[o].time<=t&&e[o+1].time>t)return o;e[o].time>t?r=o-1:a=o+1}return Math.max(0,Math.min(a,e.length-2))}_applySmoothing(e,t){this._smoothingBuffers.has(e)||this._smoothingBuffers.set(e,[]);const i=this._smoothingBuffers.get(e);for(i.push({x:t.x,y:t.y,z:t.z});i.length>this.smoothingWindowSize;)i.shift();if(i.length===1)return t;let s=0,a=0,r=0;for(const o of i)s+=o.x,a+=o.y,r+=o.z;return{x:s/i.length,y:a/i.length,z:r/i.length}}_applyEmaSmoothing(e,t){const i=`ema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{x:t.x,y:t.y,z:t.z}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.05,Math.min(.5,1/this.smoothingWindowSize)),r={x:a*t.x+(1-a)*s.x,y:a*t.y+(1-a)*s.y,z:a*t.z+(1-a)*s.z};return this._smoothingBuffers.set(i,r),r}_applyDoubleEmaSmoothing(e,t){const i=`dema-${e}`;if(!this._smoothingBuffers.has(i))return this._smoothingBuffers.set(i,{level:{x:t.x,y:t.y,z:t.z},trend:{x:0,y:0,z:0}}),t;const s=this._smoothingBuffers.get(i),a=Math.max(.1,Math.min(.6,2/this.smoothingWindowSize)),r=a*.5,o={x:a*t.x+(1-a)*(s.level.x+s.trend.x),y:a*t.y+(1-a)*(s.level.y+s.trend.y),z:a*t.z+(1-a)*(s.level.z+s.trend.z)},l={x:r*(o.x-s.level.x)+(1-r)*s.trend.x,y:r*(o.y-s.level.y)+(1-r)*s.trend.y,z:r*(o.z-s.level.z)+(1-r)*s.trend.z};return s.level=o,s.trend=l,{x:o.x+l.x,y:o.y+l.y,z:o.z+l.z}}_applyWeightedSmoothing(e,t){const i=`wma-${e}`;this._smoothingBuffers.has(i)||this._smoothingBuffers.set(i,[]);const s=this._smoothingBuffers.get(i);for(s.push({x:t.x,y:t.y,z:t.z});s.length>this.smoothingWindowSize;)s.shift();if(s.length===1)return t;let a=0,r=0,o=0,l=0;for(let c=0;cthis.smoothingWindowSize;)s.shift();if(s.length===1)return t;const a=s.length/3;let r=0,o=0,l=0,c=0;for(let u=0;u.001&&(s.derivedVel={x:(t.x-s.lastPos.x)/a,y:(t.y-s.lastPos.y)/a,z:(t.z-s.lastPos.z)/a});const r=Math.sqrt(s.derivedVel.x**2+s.derivedVel.y**2+s.derivedVel.z**2),o=2,l=this.smoothingWindowSize,c=300,u=1500;let d;if(ru)d=o;else{const _=(r-c)/(u-c);d=Math.round(l-_*(l-o))}if(s.buffer.length>=2){const _=s.buffer[s.buffer.length-1],m=s.buffer[s.buffer.length-2],v={x:_.x-m.x,y:_.y-m.y,z:_.z-m.z},y={x:t.x-_.x,y:t.y-_.y,z:t.z-_.z},b=Math.sqrt(v.x**2+v.y**2+v.z**2),S=Math.sqrt(y.x**2+y.y**2+y.z**2);if(b>.1&&S>.1&&(v.x*y.x+v.y*y.y+v.z*y.z)/(b*S)<.5)for(;s.buffer.length>Math.max(2,d/2);)s.buffer.shift()}for(s.buffer.push({x:t.x,y:t.y,z:t.z});s.buffer.length>d;)s.buffer.shift();if(s.lastPos={x:t.x,y:t.y,z:t.z},s.lastTime=i,s.buffer.length===1)return t;let h=0,f=0,p=0,g=0;for(let _=0;_u+10&&(h.z=t.position.z+t.velocity.z*r-.5*c*r*r,h.zu+10&&(p.z=t.position.z+t.velocity.z*o-.5*c*o*o,p.z0&&o>0){const b=d*o;m>b*2&&(v=b*2/m)}const y=_*v+(1-v)*l;return{x:h.x+g.x*y,y:h.y+g.y*y,z:h.z+g.z*y}}_physicsTickInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=a/s;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=(e.velocity.x+t.velocity.x)/2,l=(e.velocity.y+t.velocity.y)/2,c=(e.velocity.z+t.velocity.z)/2,u=e.position.x+o*a,d=e.position.y+l*a,h=e.position.z+c*a,f=e.position.x+o*s,p=e.position.y+l*s,g=e.position.z+c*s,_=t.position.x-f,m=t.position.y-p,v=t.position.z-g;return{x:u+_*r,y:d+m*r,z:h+v*r}}_velocityOnlyInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=s/a;if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=e.velocity.x+(t.velocity.x-e.velocity.x)*r/2,l=e.velocity.y+(t.velocity.y-e.velocity.y)*r/2,c=e.velocity.z+(t.velocity.z-e.velocity.z)*r/2;return{x:e.position.x+o*s,y:e.position.y+l*s,z:e.position.z+c*s}}_smartHybridInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};const o=Math.sqrt(e.velocity.x**2+e.velocity.y**2+e.velocity.z**2),l=Math.sqrt(t.velocity.x**2+t.velocity.y**2+t.velocity.z**2);let c=1;o>10&&l>10&&(c=(e.velocity.x*t.velocity.x+e.velocity.y*t.velocity.y+e.velocity.z*t.velocity.z)/(o*l));const u=o>10?Math.abs(l-o)/o:0;if(c<.95||u>.1){const h=r*r*(3-2*r);return{x:e.position.x+(t.position.x-e.position.x)*h,y:e.position.y+(t.position.y-e.position.y)*h,z:e.position.z+(t.position.z-e.position.z)*h}}else{const h=(e.velocity.x+t.velocity.x)/2,f=(e.velocity.y+t.velocity.y)/2,p=(e.velocity.z+t.velocity.z)/2,g=e.position.x+h*s,_=e.position.y+f*s,m=e.position.z+p*s,v=e.position.x+h*a,y=e.position.y+f*a,b=e.position.z+p*a,S=t.position.x-v,x=t.position.y-y,M=t.position.z-b;return{x:g+S*r,y:_+x*r,z:m+M*r}}}_isBadFrame(e,t){if(!e.velocity||!t.velocity||!e.position||!t.position)return!1;const i=t.time-e.time;if(i<.001)return!1;const s=(e.velocity.x+t.velocity.x)/2,a=(e.velocity.y+t.velocity.y)/2,r=(e.velocity.z+t.velocity.z)/2,o=Math.sqrt(s**2+a**2+r**2);if(o<200)return!1;const l=t.position.x-e.position.x,c=t.position.y-e.position.y,u=t.position.z-e.position.z,d=Math.sqrt(l*l+c*c+u*u),h=o*i,f=d/h;return f<.6||f>1.4}_filterBadFrames(e){if(!e||e.length<2)return e;const t=[e[0]];for(let i=1;i0&&a.position&&a.velocity){const o=e[s-1];if(o.position&&o.velocity){const l=a.time-o.time;if(l>.001){const c=(o.velocity.x+a.velocity.x)/2,u=(o.velocity.y+a.velocity.y)/2,d=(o.velocity.z+a.velocity.z)/2,h=Math.sqrt(c**2+u**2+d**2);if(h>100){const f=a.position.x-o.position.x,p=a.position.y-o.position.y,g=a.position.z-o.position.z,_=Math.sqrt(f*f+p*p+g*g),m=h*l,v=_/m;let y=0;v>.15&&v<.35?y=l*.75:v>.4&&v<.6?y=l*.5:v>.65&&v<.85&&(y=l*.25),y>0&&(r.position.x+=a.velocity.x*y,r.position.y+=a.velocity.y*y,r.position.z+=a.velocity.z*y,i++)}}}}t.push(r)}return t._correctedCount=i,t}_timeShiftedInterpolate(e,t,i){const s=i-e.time,a=t.time-e.time,r=Math.max(0,Math.min(1,s/a));return{x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r}}_velocityAnchoredInterpolate(e,t,i,s,a,r){if(!t.velocity||!i.velocity){const m=(s-t.time)/(i.time-t.time);return{x:t.position.x+(i.position.x-t.position.x)*m,y:t.position.y+(i.position.y-t.position.y)*m,z:t.position.z+(i.position.z-t.position.z)*m}}this._velocityAnchorState||(this._velocityAnchorState=new Map);let o=this._velocityAnchorState.get(e);(!o||Math.abs(s-o.lastTime)>.5||r%10===0)&&(o={anchorPos:{...t.position},anchorTime:t.time,anchorIdx:r,lastTime:s},this._velocityAnchorState.set(e,o)),s-o.anchorTime;let u=o.anchorPos.x,d=o.anchorPos.y,h=o.anchorPos.z;const f=(t.velocity.x+i.velocity.x)/2,p=(t.velocity.y+i.velocity.y)/2,g=(t.velocity.z+i.velocity.z)/2,_=s-t.time;return o.anchorIdx===r?(u=o.anchorPos.x+f*_,d=o.anchorPos.y+p*_,h=o.anchorPos.z+g*_):(u=t.position.x+f*_,d=t.position.y+p*_,h=t.position.z+g*_),o.lastTime=s,{x:u,y:d,z:h}}_hermiteInterpolate(e,t,i){const s=t.time-e.time,a=i-e.time,r=Math.max(0,Math.min(1,a/s)),o={x:e.position.x+(t.position.x-e.position.x)*r,y:e.position.y+(t.position.y-e.position.y)*r,z:e.position.z+(t.position.z-e.position.z)*r};if(!e.velocity||!t.velocity)return o;const l=r*r,c=l*r,u=2*c-3*l+1,d=c-2*l+r,h=-2*c+3*l,f=c-l,p={x:e.velocity.x*s,y:e.velocity.y*s,z:e.velocity.z*s},g={x:t.velocity.x*s,y:t.velocity.y*s,z:t.velocity.z*s},_={x:u*e.position.x+d*p.x+h*t.position.x+f*g.x,y:u*e.position.y+d*p.y+h*t.position.y+f*g.y,z:u*e.position.z+d*p.z+h*t.position.z+f*g.z},m=_.x-o.x,v=_.y-o.y,y=_.z-o.z,b=t.position.x-e.position.x,S=t.position.y-e.position.y,x=t.position.z-e.position.z;return m*m+v*v+y*y>b*b+S*S+x*x?o:_}_physicsSimInterpolate(e,t,i,s=!1){const a=t.time-e.time,r=i-e.time,o=Math.max(0,Math.min(1,r/a));if(!e.velocity||!t.velocity)return{x:e.position.x+(t.position.x-e.position.x)*o,y:e.position.y+(t.position.y-e.position.y)*o,z:e.position.z+(t.position.z-e.position.z)*o};const l=-650,c=o*o,u=c*o,d=2*u-3*c+1,h=u-2*c+o,f=-2*u+3*c,p=u-c;let g=e.velocity.y*a,_=t.velocity.y*a;if(s){const m=.5*l*a*a;g+=m*.5,_+=m*.5}return{x:d*e.position.x+h*(e.velocity.x*a)+f*t.position.x+p*(t.velocity.x*a),y:d*e.position.y+h*g+f*t.position.y+p*_,z:d*e.position.z+h*(e.velocity.z*a)+f*t.position.z+p*(t.velocity.z*a)}}getBallPositionAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return s.sleeping?null:{...s.position};if(s.sleeping)return{...s.position};const d=(e-s.time)/r;let h;switch(this.interpolationMethod){case"catmull-rom":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"lerp-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applySmoothing("ball",h);break}case"lerp-ema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyEmaSmoothing("ball",h);break}case"lerp-dema":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyDoubleEmaSmoothing("ball",h);break}case"lerp-wma":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyWeightedSmoothing("ball",h);break}case"lerp-gauss":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyGaussianSmoothing("ball",h);break}case"one-euro":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyOneEuroFilter("ball",h);break}case"predict-correct":{h=this._predictCorrectInterpolate("ball",s,a,e);break}case"velocity-smooth":{h=this._velocitySmoothInterpolate("ball",s,a,e,!0);break}case"physics-tick":{h=this._physicsTickInterpolate(s,a,e);break}case"hermite":{h=this._hermiteInterpolate(s,a,e);break}case"physics-sim":{const f=this.ballTimelineCorrected;if(f&&f.length>=2){const p=this._findKeyframeIndex(f,e,this.timelineIndicesCorrected.ball);this.timelineIndicesCorrected.ball=p;const g=f[p],_=f[p+1];if(g?.position&&_?.position){h=this._physicsSimInterpolate(g,_,e,!0);break}}h=this._physicsSimInterpolate(s,a,e,!0);break}case"velocity-only":{h=this._velocityOnlyInterpolate(s,a,e);break}case"smart-hybrid":{h=this._smartHybridInterpolate(s,a,e);break}case"time-shifted":{const f=this.ballTimelineFiltered;if(!f||f.length<2){h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}const p=this._findKeyframeIndex(f,e,this.timelineIndicesFiltered.ball);this.timelineIndicesFiltered.ball=p;const g=f[p],_=f[p+1];if(!g?.position||!_?.position){h=g?.position?{...g.position}:{...s.position};break}const m=_.time-g.time,v=m>0?Math.max(0,Math.min(1,(e-g.time)/m)):0;h={x:g.position.x+(_.position.x-g.position.x)*v,y:g.position.y+(_.position.y-g.position.y)*v,z:g.position.z+(_.position.z-g.position.z)*v};break}case"position-lerp":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-catmull":{const f=this.ballTimeline[Math.max(0,i-1)],p=this.ballTimeline[Math.min(this.ballTimeline.length-1,i+2)];f?.position&&p?.position?h=this._catmullRomInterpolate(f.position,s.position,a.position,p.position,d):h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}case"position-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyLowPassFilter("ball",h);break}case"adaptive-smooth":{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d},h=this._applyAdaptiveSmoothing("ball",h,e);break}default:{h={x:s.position.x+(a.position.x-s.position.x)*d,y:s.position.y+(a.position.y-s.position.y)*d,z:s.position.z+(a.position.z-s.position.z)*d};break}}return h}getBallRotationAt(e){if(!this.ballTimeline||this.ballTimeline.length<2)return null;const t=this.ballTimeline[0];if(e2e3)return{...s.rotation}}if(s.sleeping)return{...s.rotation};const o=(e-s.time)/r;return this._q0.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w),this._q1.set(a.rotation.x,a.rotation.y,a.rotation.z,a.rotation.w),this._qResult.slerpQuaternions(this._q0,this._q1,o),{x:this._qResult.x,y:this._qResult.y,z:this._qResult.z,w:this._qResult.w}}getPlayerPositionAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const h=this._findKeyframeIndex(d,t,this.timelineIndicesCorrected.players[e]||0);this.timelineIndicesCorrected.players[e]=h;const f=d[h],p=d[h+1];if(f?.position&&p?.position){u=this._physicsSimInterpolate(f,p,t,!1);break}}u=this._physicsSimInterpolate(r,o,t,!1);break}case"velocity-only":{u=this._velocityOnlyInterpolate(r,o,t);break}case"smart-hybrid":{u=this._smartHybridInterpolate(r,o,t);break}case"time-shifted":{const d=this.playerTimelineMapFiltered[e];if(!d||d.length<2){u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}const h=this._findKeyframeIndex(d,t,this.timelineIndicesFiltered.players[e]||0);this.timelineIndicesFiltered.players[e]=h;const f=d[h],p=d[h+1];if(!f?.position||!p?.position){u=f?.position?{...f.position}:{...r.position};break}const g=p.time-f.time,_=g>0?Math.max(0,Math.min(1,(t-f.time)/g)):0;u={x:f.position.x+(p.position.x-f.position.x)*_,y:f.position.y+(p.position.y-f.position.y)*_,z:f.position.z+(p.position.z-f.position.z)*_};break}case"position-lerp":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-catmull":{const d=i[Math.max(0,a-1)],h=i[Math.min(i.length-1,a+2)];d?.position&&h?.position?u=this._catmullRomInterpolate(d.position,r.position,o.position,h.position,c):u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}case"position-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyLowPassFilter(`player-${e}`,u);break}case"adaptive-smooth":{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c},u=this._applyAdaptiveSmoothing(`player-${e}`,u,t);break}default:{u={x:r.position.x+(o.position.x-r.position.x)*c,y:r.position.y+(o.position.y-r.position.y)*c,z:r.position.z+(o.position.z-r.position.z)*c};break}}return u}getPlayerRotationAt(e,t){const i=this.playerTimelineMap[e];if(!i||i.length<2)return null;const s=i[0];if(t=2){const r=this.getBallPositionAt(t),o=this.getBallRotationAt(t);r?i.position.set(r.x,r.y,r.z):a=!1,o&&i.quaternion.set(o.x,o.y,o.z,o.w)}else i.position.set(s.position.x,s.position.y,s.position.z),i.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);if(i.userData.location.copy(i.position),i.userData.rotation.copy(i.quaternion),i.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),s.angularVelocity&&i.userData.angularVelocity.set(s.angularVelocity.x,s.angularVelocity.y,s.angularVelocity.z),i.userData.sleeping=s.sleeping,i.visible=a&&s.visible!==!1&&!i.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(i.position.x,2,i.position.z),this.ballIndicator.visible=i.visible),this.ballVerticalLine){const o=new Float32Array([i.position.x,2,i.position.z,i.position.x,i.position.y,i.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new lt(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=i.visible}if(i.userData.velocity&&i.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=i.position.distanceTo(c.position);u{const a=this.playerNameToCarActorId[s.name];if(!a)return;const r=this.actors[a];if(!r)return;const o=s.name;if(!this.useAnimationSystem||!this.animationMixer)if(this.interpolantsInitialized&&this.playerTimelineMap[o]){const c=this.getPlayerPositionAt(o,t),u=this.getPlayerRotationAt(o,t);c&&r.position.set(c.x,c.y,c.z),u&&r.quaternion.set(u.x,u.y,u.z,u.w)}else r.position.set(s.position.x,s.position.y,s.position.z),r.quaternion.set(s.rotation.x,s.rotation.y,s.rotation.z,s.rotation.w);r.userData.location.copy(r.position),r.userData.rotation.copy(r.quaternion),r.userData.velocity.set(s.velocity.x,s.velocity.y,s.velocity.z),r.userData.sleeping=s.sleeping,r.userData.steer=s.steer||0;const l=r.position.length()>.1;r.visible=s.isVisible&&l&&!r.userData.sleeping}),this._updateGoalExplosions(t)}_updateGoalExplosions(e){const t=this.effectsManager,i=t&&t.explosions?t.explosions.goalEvents:null;if(!(i instanceof Map)||i.size===0)return;const s=this._lastGoalScanTime;s!==null&&e=c&&e<=c+lN&&(r=!0,o=!0),s!==null&&s=c&&!this._firedGoalTimes.has(c)){this._firedGoalTimes.add(c);const d=this.getBallPositionAt(c)||a&&a.position||null;d&&this.effectsManager.triggerGoalExplosion(d,l.team)}}a&&(a.userData.isHiddenByGoal=r,r&&(a.visible=!1)),o||this.effectsManager.clearGoalExplosions?.(),this._lastGoalScanTime=e}processFrame(e,t,i,s){if(e){if(e.new_actors&&e.new_actors.forEach(a=>{if(!this.actors[a.actor_id]){const r=t(a.object_id),o=r&&r.includes("Ball"),l=r&&r.includes("Car");if(o||l){let c;o?c=new vn(92.75,16,16):c=new Di(118,36,84);const u=new kn({color:o?16777215:Math.random()*16777215}),d=new Se(c,u);if(d.userData={location:new T,rotation:new ht,isCar:l,isBall:o,playerId:null,lastUpdateTime:e.time,bodyId:null,hasReceivedUpdate:!1},this.scene.add(d),this.actors[a.actor_id]=d,o){this.ballActorId=a.actor_id,this.ballModel&&this.replaceBallWithModel(a.actor_id);const h=92.75,f=new oi(h*.95,h,32),p=new je({color:16777215,side:ut});this.ballIndicator=new Se(f,p),this.ballIndicator.rotation.x=-Math.PI/2,this.ballIndicator.visible=!1,this.scene.add(this.ballIndicator);const g=new $e().setFromPoints([new T(0,0,0),new T(0,1,0)]),_=new Pt({color:16777215,opacity:.5,transparent:!0});this.ballVerticalLine=new On(g,_),this.ballVerticalLine.frustumCulled=!1,this.ballVerticalLine.visible=!1,this.scene.add(this.ballVerticalLine)}else l&&this.effectsManager.createBoostTrail(d,a.actor_id)}}}),e.deleted_actors&&e.deleted_actors.forEach(a=>{if(this.actors[a]){const r=this.actors[a];r.userData.isCar&&this.effectsManager.removeBoostTrail(a),this.scene.remove(r),r.geometry&&r.geometry.dispose(),r.material&&r.material.dispose(),delete this.actors[a],this.ballActorId===a&&(this.ballActorId=null,this.ballIndicator&&(this.scene.remove(this.ballIndicator),this.ballIndicator.geometry&&this.ballIndicator.geometry.dispose(),this.ballIndicator.material&&this.ballIndicator.material.dispose(),this.ballIndicator=null),this.ballVerticalLine&&(this.scene.remove(this.ballVerticalLine),this.ballVerticalLine.geometry&&this.ballVerticalLine.geometry.dispose(),this.ballVerticalLine.material&&this.ballVerticalLine.material.dispose(),this.ballVerticalLine=null))}}),e.updated_actors&&e.updated_actors.forEach(a=>{const r=this.actors[a.actor_id];a.attribute.TeamLoadout&&(this.actorLoadouts[a.actor_id]=a.attribute.TeamLoadout,r&&r.userData.isCar&&(r.userData.teamLoadout=a.attribute.TeamLoadout,this.resolveBodyId(r,a.actor_id)));const o=t(a.object_id),l=o&&(o.includes("PRI_TA")||o.includes("PlayerReplicationInfo"));if(a.attribute.String&&this.playerNames.has(a.attribute.String)){const c=a.attribute.String;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.Reservation&&this.playerNames.has(a.attribute.Reservation.name)){const c=a.attribute.Reservation.name;this.actorToPlayer[a.actor_id]=c,l&&!this.playerNameToPriActorId[c]&&(this.playerNameToPriActorId[c]=a.actor_id,console.log(`[ActorManager] Mapped ${c} -> PRI Actor ${a.actor_id} (object: ${o})`)),this.checkCarPlayerLink(a.actor_id)}if(a.attribute.ActiveActor){const c=a.attribute.ActiveActor.actor;this.actorLinks[a.actor_id]||(this.actorLinks[a.actor_id]=new Set),this.actorLinks[a.actor_id].add(c),r&&r.userData.isCar&&this.checkCarPlayerLink(c,a.actor_id)}if(r&&a.attribute&&a.attribute.RigidBody){const c=a.attribute.RigidBody;if(c.location&&(r.userData.location.set(c.location.x,c.location.z,c.location.y),r.userData.lastUpdateTime=e.time,r.userData.hasReceivedUpdate=!0),c.linear_velocity&&(r.userData.velocity||(r.userData.velocity=new T),r.userData.velocity.set(c.linear_velocity.x,c.linear_velocity.z,c.linear_velocity.y)),c.rotation&&r.userData.rotation.set(c.rotation.x,c.rotation.z,c.rotation.y,-c.rotation.w),c.angular_velocity&&(r.userData.angularVelocity||(r.userData.angularVelocity=new T),r.userData.angularVelocity.set(c.angular_velocity.x,c.angular_velocity.z,c.angular_velocity.y)),c.sleeping!==void 0&&(r.userData.sleeping=c.sleeping,c.sleeping&&(r.userData.velocity&&r.userData.velocity.set(0,0,0),r.userData.angularVelocity&&r.userData.angularVelocity.set(0,0,0))),r.userData.isBall&&r.userData.isHiddenByGoal&&c.location){const u=c.location.x,d=c.location.y,h=c.location.z;Math.sqrt(u*u+d*d+h*h)<500&&(r.userData.isHiddenByGoal=!1)}}}),this.effectsManager.explosions.goalEvents.has(i)){const a=this.effectsManager.explosions.goalEvents.get(i),r=this.actors[this.ballActorId];r&&(s||(this.effectsManager.triggerGoalExplosion(r.position,a.team),console.log(`🎯 GOAL! Explosion at frame ${i} for team ${a.team} by ${a.playerName}`)),r.userData.isHiddenByGoal=!0)}if(this.effectsManager.explosions.demoEvents.has(i)){const a=this.effectsManager.explosions.demoEvents.get(i),r=this.actors[a.victimActorId];if(r){if(!s){const o=r.userData.playerId,l=o&&this.playerTeams&&this.playerTeams[o]||0;this.effectsManager.triggerDemoExplosion(r.position,l),console.log(`💥 DEMO! Explosion at frame ${i} for actor ${a.victimActorId}`)}r.userData.sleeping=!0}}}}resolveBodyId(e,t){if(!e||!e.userData.isCar||!e.userData.teamLoadout)return;let i=0;e.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,e.userData.playerId)&&(i=this.playerTeams[e.userData.playerId]);const s=e.userData.teamLoadout,a=i===1?s.orange?.body:s.blue?.body;a&&e.userData.bodyId!==a&&(e.userData.bodyId=a,this.updateCarHitbox(e,a,t))}updateCarHitbox(e,t,i){const s=uS(t),a=s?.name||"Octane",r=s?.hitboxType||"Octane";this.replaceCarWithModel(i,e,a,r)}async replaceCarWithModel(e,t,i,s){if(this.carModelLoader.isModelReady(i,s))this._doCarReplacement(e,t,i,s);else{this.pendingCarReplacements.set(e,{oldMesh:t,carName:i,hitboxType:s});try{const a=this.carModelLoader.getModelTypeForCar(i,s);await this.carModelLoader.loadModel(a);const r=this.pendingCarReplacements.get(e);r&&this.actors[e]===r.oldMesh&&this._doCarReplacement(e,r.oldMesh,r.carName,r.hitboxType),this.pendingCarReplacements.delete(e)}catch(a){console.warn(`Failed to load model for ${i} (${s}):`,a),this.pendingCarReplacements.delete(e),t&&(t.visible=!0)}}}_doCarReplacement(e,t,i,s){let a=0;t.userData.playerId&&Object.prototype.hasOwnProperty.call(this.playerTeams,t.userData.playerId)?a=this.playerTeams[t.userData.playerId]:t.userData.team!==void 0&&(a=t.userData.team);const r=this.carModelLoader.getCarMeshSync(i,s,a);if(!r){console.warn(`Could not get car mesh for ${i} (${s})`);return}const o=r.userData.wheels;r.userData={...t.userData},r.userData.isFBXModel=!0,r.userData.carName=i,r.userData.hitboxType=s,r.userData.wheels=o,r.position.copy(t.position),r.quaternion.copy(t.quaternion),this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&(Array.isArray(t.material)?t.material.forEach(c=>c.dispose()):t.material.dispose()),this.scene.add(r),this.actors[e]=r,this.effectsManager.removeBoostTrail(e),this.effectsManager.createBoostTrail(r,e);const l=this.carModelLoader.getModelTypeForCar(i,s);console.log(`🚗 Replaced car ${e} with ${l.toUpperCase()} model (${i}, ${s} hitbox, team ${a===0?"blue":"orange"})`)}checkCarPlayerLink(e,t){const i=this.actorToPlayer[e],s=this.actorLoadouts[e];if(!(!i&&!s))if(t){const a=this.actors[t];a&&a.userData.isCar&&(this.onPlayerFound&&this.onPlayerFound(i),a.userData.playerId=i,this.playerNameToCarActorId[i]=t,s&&(a.userData.teamLoadout=s),this.resolveBodyId(a,t))}else this.actorLinks[e]&&this.actorLinks[e].forEach(a=>{this.checkCarPlayerLink(e,a)})}updateInterpolation(e,t,i){const s=t[i];if(s&&Object.keys(this.actors).forEach(a=>{const r=this.actors[a],o=r.userData.location,l=r.userData.rotation;if(!o||!l||!r.userData.hasReceivedUpdate)return;let c=null,u=0;for(let d=i+1;dp.actor_id==a&&p.attribute&&p.attribute.RigidBody);if(f){c=f,u=h.time;break}}}if(c){const d=r.userData.lastUpdateTime||s.time,h=u;if(h>d){const f=(e-d)/(h-d),p=Math.max(0,Math.min(1,f)),g=h-d||.033,_=c.attribute.RigidBody;if(_.location)if(this._p0.copy(o),this._p1.set(_.location.x,_.location.z,_.location.y),r.userData.sleeping)r.position.copy(o);else{const m=c.attribute.RigidBody;if(r.userData.velocity&&m.linear_velocity){const v=p,y=v*v,b=y*v;if(g>.5)r.position.lerpVectors(o,this._p1,p);else{this._v0.copy(r.userData.velocity).multiplyScalar(g),this._v1.set(m.linear_velocity.x,m.linear_velocity.z,m.linear_velocity.y).multiplyScalar(g);const S=2*b-3*y+1,x=b-2*y+v,M=-2*b+3*y,C=b-y;r.position.set(S*this._p0.x+x*this._v0.x+M*this._p1.x+C*this._v1.x,S*this._p0.y+x*this._v0.y+M*this._p1.y+C*this._v1.y,S*this._p0.z+x*this._v0.z+M*this._p1.z+C*this._v1.z)}}else r.position.lerpVectors(o,this._p1,p)}else r.position.copy(o);_.rotation?(this._nextRot.set(_.rotation.x,_.rotation.z,_.rotation.y,-_.rotation.w),r.quaternion.slerpQuaternions(l,this._nextRot,p)):r.quaternion.copy(l);return}}r.position.copy(o),r.quaternion.copy(l)}),Object.keys(this.actors).forEach(a=>{const r=this.actors[a];if(r&&r.userData.isCar){const l=r.position.length()>.1,c=r.userData.sleeping===!0;r.visible=l&&!c}}),this.ballActorId&&this.actors[this.ballActorId]){const a=this.actors[this.ballActorId];if(a.visible=!a.userData.isHiddenByGoal,this.ballIndicator&&(this.ballIndicator.position.set(a.position.x,2,a.position.z),this.ballIndicator.visible=a.visible),this.ballVerticalLine){const o=new Float32Array([a.position.x,2,a.position.z,a.position.x,a.position.y,a.position.z]);this.ballVerticalLine.geometry.setAttribute("position",new lt(o,3)),this.ballVerticalLine.geometry.attributes.position.needsUpdate=!0,this.ballVerticalLine.visible=a.visible}if(a.userData.velocity&&a.visible){let r=this.lastBallTouchTeam,o=this.BALL_TOUCH_DISTANCE;Object.keys(this.actors).forEach(l=>{const c=this.actors[l];if(c&&c.userData.isCar&&c.userData.playerId){const u=a.position.distanceTo(c.position);if(u{const s=this.actors[i];if(!s||!s.userData.isCar||!s.userData.isFBXModel&&!s.userData.hasWheelSockets||!s.userData.wheels||s.userData.wheels.length===0)return;const a=s.position;let r=this._previousCarPositions.get(i);r||(r=a.clone(),this._previousCarPositions.set(i,r));const l=new T().subVectors(a,r).length();if(this._previousCarPositions.set(i,a.clone()),l<.01)return;const d=Math.min(l/e,.5)*1;let h=0;s.userData.steer!==void 0&&(h=-s.userData.steer*t),s.userData.wheels.forEach(f=>{if(f.socket){const p=f.side==="left"?1:-1;if(f.mesh.rotateZ(p*d),f.position==="front"&&f.steeringPivot){const g=f.side==="left"?-1:1;f.steeringPivot.rotation.y=g*h}}else{const p=f.side==="left"?-1:1;f.mesh.rotateY(p*d),f.position==="front"&&f.steeringPivot&&(f.steeringPivot.rotation.z=h)}})})}resetWheelTracking(){this._previousCarPositions&&this._previousCarPositions.clear()}updateSupersonicState(e,t,i){const s=this.playerNameToCarActorId[e];if(!s)return;const a=this.actors[s];if(!a||!a.userData.isCar)return;const r=a.userData.velocity||new T(0,0,0);this.effectsManager.updateSupersonicTrail(s,t,a.position,a.quaternion,r,i)}setInterpolationEnabled(e){this.interpolationEnabled=e,console.log(`[ActorManager] Interpolation ${e?"enabled":"disabled"}`)}setInterpolationMethod(e){if(!["lerp","hermite","catmull-rom","predict-correct","velocity-smooth","physics-tick","velocity-only","smart-hybrid","time-shifted","lerp-smooth","lerp-ema","lerp-dema","lerp-wma","lerp-gauss","one-euro","position-lerp","position-catmull","position-smooth","adaptive-smooth"].includes(e)){console.warn(`[ActorManager] Invalid interpolation method: ${e}`);return}this.interpolationMethod=e,this._smoothingBuffers.clear(),this._lowPassState.clear(),this._adaptiveState.clear(),this.resetSmoothingBuffers(),console.log(`[ActorManager] Interpolation method set to: ${e}`)}setSmoothingWindowSize(e){this.smoothingWindowSize=Math.max(1,Math.min(20,e)),this._smoothingBuffers.clear(),console.log(`[ActorManager] Smoothing window size set to: ${this.smoothingWindowSize}`)}getInterpolationSettings(){return{enabled:this.interpolationEnabled,method:this.interpolationMethod,smoothingWindowSize:this.smoothingWindowSize}}clearSmoothingBuffers(){this._smoothingBuffers.clear()}getFrameInfo(){return this.lastFrameInfo}createBallMeshForLive(){const e=new vn(92.75,16,16),t=new kn({color:16777215}),i=new Se(e,t);if(i.castShadow=!0,i.receiveShadow=!0,i.userData={location:new T,rotation:new ht,velocity:new T,angularVelocity:new T,isCar:!1,isBall:!0,playerId:null,sleeping:!1,isHiddenByGoal:!1},this.scene.add(i),this.ballModel){const s=this.ballModel.clone();s.position.copy(i.position),s.quaternion.copy(i.quaternion),s.userData={...i.userData};const a=92.75;return s.scale.set(a,a,a),s.traverse(r=>{r.isMesh&&(r.castShadow=!0,r.receiveShadow=!0)}),this.scene.remove(i),this.scene.add(s),i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose(),console.log("✓ Live ball created with GLTF model"),s}return i}createCarMeshForLive(e,t,i,s=null){const a=`live_car_${t}`,r=new Di(118,36,84),o=e===0?3381759:16737792,l=new kn({color:o}),c=new Se(r,l);return c.castShadow=!0,c.receiveShadow=!0,c.visible=!1,c.userData={location:new T,rotation:new ht,velocity:new T,angularVelocity:new T,isCar:!0,isBall:!1,playerId:i,team:e,sleeping:!1,steer:0,bodyId:s,liveActorId:a},this.scene.add(c),this.actors[a]=c,this.playerNameToCarActorId[i]=a,this.effectsManager.createBoostTrail(c,a),s&&s>0?this.updateCarHitbox(c,s,a):this.replaceCarWithModel(a,c,"Octane","Octane"),console.log(`[ActorManager] Created live car for ${i} (team ${e===0?"blue":"orange"}, bodyId: ${s})`),c}updateBoostParticlesLive(e,t,i,s){const a=t&&i>0,r=s.userData.velocity||new T(0,0,0);this.effectsManager.updateBoostTrail(e,a,s.position,s.quaternion,r)}updateSupersonicTrailLive(e,t,i,s){const a=s.userData.velocity||new T(0,0,0);this.effectsManager.updateSupersonicTrail(e,t,s.position,s.quaternion,a,i)}removeLiveCar(e){const t=this.actors[e];t&&(this.scene.remove(t),t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose(),delete this.actors[e],this.effectsManager.removeBoostTrail(e))}removeLiveBall(e){e&&(this.scene.remove(e),e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose())}}function Ls(n,e,t){t===-1?(n.clearUpdateRanges?.(),n.addUpdateRange?.(0,n.count*n.itemSize)):n.addUpdateRange?(n.clearUpdateRanges(),n.addUpdateRange(e,t)):(n.updateRange.offset=e,n.updateRange.count=t)}class mt extends et{constructor(e,t){super(),this.active=!1,this.orientToMovement=!1,t&&(this.orientToMovement=!0),this.scene=e,this.geometry=null,this.mesh=null,this.nodeCenters=null,this.lastNodeCenter=null,this.currentNodeCenter=null,this.lastOrientationDir=null,this.nodeIDs=null,this.currentLength=0,this.currentEnd=0,this.currentNodeID=0,this.advanceFrequency=60,this.advancePeriod=1/this.advanceFrequency,this.lastAdvanceTime=0,this.paused=!1,this.pauseAdvanceUpdateTimeDiff=0,this._internalTime=0,this._useInternalTime=!1}setAdvanceFrequency(e){this.advanceFrequency=e,this.advancePeriod=1/this.advanceFrequency}initialize(e,t,i,s,a,r){this.deactivate(),this.destroyMesh(),this.length=t>0?t+1:0,this.dragTexture=i?1:0,this.targetObject=r,this.initializeLocalHeadGeometry(s,a),this.nodeIDs=[],this.nodeCenters=[];for(let o=0;o=this.length?0:this.currentEnd+1;if(i?this.updateNodePositionsFromTransformMatrix(s,i):this.updateNodePositionsFromOrientationTangent(s,t.position,t.tangent),this.currentLength>=1&&(this.connectNodes(this.currentEnd,s),this.currentLength>=this.length)){const a=this.currentEnd+1>=this.length?0:this.currentEnd+1;this.disconnectNodes(a)}this.currentLength=this.length&&(this.currentEnd=0),this.currentLength>=1&&(this.currentLengththis.advancePeriod?(this.advance(),this.lastAdvanceTime=t):this.updateHead()}}updateHead=(function(){const e=new Ee;return function(){this.currentEnd<0||(this.targetObject.updateMatrixWorld(),e.copy(this.targetObject.matrixWorld),this.updateNodePositionsFromTransformMatrix(this.currentEnd,e))}})();updateNodeID(e,t){this.nodeIDs[e]=t;const i=this.geometry.getAttribute("nodeID"),s=this.geometry.getAttribute("nodeVertexID");for(let a=0;a1e-4)){this.lastOrientationDir||(this.lastOrientationDir=new T),t.setFromUnitVectors(a,r),s.copy(this.currentNodeCenter);for(let f=0;fe.add(a)),this.mainTrail=this._createMainTrail(),this.secondaryTrails=this._createSecondaryTrails(),this._updateColors(),this._updateIntensity(),this.mainTrail.activate(),this.secondaryTrails.forEach(a=>a.activate())}_createMainTrail(){const e=new mt(this.scene,!1),t=Iv(),i=this.config.mainTrailWidth,s=[new T(0,-i,0),new T(0,i,0),new T(-i,0,0),new T(i,0,0),new T(0,0,-i),new T(0,0,i)];return e.initialize(t,this.config.trailLength,!1,0,s,this.mainTarget),e.setAdvanceFrequency(60),e.mesh&&(e.mesh.frustumCulled=!1,e.mesh.renderOrder=100),e}_createSecondaryTrails(){const e=[];for(let t=0;t<4;t++){const i=new mt(this.scene,!1),s=Iv(),a=this.config.secondaryTrailWidth,r=[new T(0,-a,0),new T(0,a,0),new T(-a,0,0),new T(a,0,0),new T(0,0,-a),new T(0,0,a)];i.initialize(s,this.config.trailLength,!1,0,r,this.secondaryTargets[t]),i.setAdvanceFrequency(60),i.mesh&&(i.mesh.frustumCulled=!1,i.mesh.renderOrder=100),e.push(i)}return e}_updateColors(){const e=this.teamColors[this.team]||this.teamColors[0];this.mainTrail?.material&&(this.mainTrail.material.uniforms.headColor.value.copy(e.head),this.mainTrail.material.uniforms.tailColor.value.copy(e.tail));const t=e.head.clone();t.w=e.head.w*.85;const i=e.tail.clone();this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.headColor.value.copy(t),s.material.uniforms.tailColor.value.copy(i))})}_updateIntensity(){this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=this.intensity),this.secondaryTrails.forEach(e=>{e?.material&&(e.material.uniforms.intensityMultiplier.value=this.intensity)})}setTeam(e){this.team!==e&&(this.team=e,this._updateColors())}setIntensity(e){this.intensity=e,this.dying||this._updateIntensity()}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.mainTrail.pause(),this.secondaryTrails.forEach(e=>e.pause()))}updatePosition(e,t,i){if(this.dying)return;const s=t.clone().normalize();this.mainTarget.position.copy(e),this.mainTarget.updateMatrixWorld();for(let a=0;a<4;a++){const o=a/4*Math.PI*2+i,l=new T(Math.cos(o)*this.config.secondaryTrailOffset,Math.sin(o)*this.config.secondaryTrailOffset,0);if(s.lengthSq()>.001){const c=new T(0,0,1),u=new ht;u.setFromUnitVectors(c,s),l.applyQuaternion(u)}this.secondaryTargets[a].position.copy(e).add(l),this.secondaryTargets[a].updateMatrixWorld()}}update(e){if(this.dying){this.deathTime+=e;const t=Math.min(1,this.deathTime/this.maxDeathTime),i=this.intensity*(1-t);this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=i),this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.intensityMultiplier.value=i)}),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.mainTrail.isActive&&this.mainTrail.update(e),this.secondaryTrails.forEach(t=>{t.isActive&&t.update(e)})}dispose(){this.mainTrail.deactivate(),this.secondaryTrails.forEach(e=>e.deactivate()),this.mainTrail.geometry&&this.mainTrail.geometry.dispose(),this.mainTrail.material&&this.mainTrail.material.dispose(),this.secondaryTrails.forEach(e=>{e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.scene.remove(this.mainTarget),this.secondaryTargets.forEach(e=>this.scene.remove(e))}}class tN{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.ballRadius=92.75,this.config={trailLength:60,mainTrailWidth:15,secondaryTrailWidth:1.5,secondaryTrailOffset:this.ballRadius*.7},this.rotationSpeed=Math.PI/3,this.currentRotation=0,this.minVelocity=1500,this.maxVelocity=6e3,this.minIntensity=.3,this.maxIntensity=1,this.wasEmitting=!1,this.segments=[],this.currentSegment=null,this.currentIntensity=1}_calculateIntensity(e){if(e<=this.minVelocity)return this.minIntensity;if(e>=this.maxVelocity)return this.maxIntensity;const t=(e-this.minVelocity)/(this.maxVelocity-this.minVelocity);return this.minIntensity+t*(this.maxIntensity-this.minIntensity)}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null))}activate(){this.active||(this.active=!0,this.currentSegment=null,this.wasEmitting=!1)}deactivate(){this.active&&(this.active=!1,this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null))}emit(e,t,i){const s=t.length();if(!(s>=this.minVelocity)){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasEmitting=!1;return}this.currentIntensity=this._calculateIntensity(s),this.active||this.activate(),!this.wasEmitting||!this.currentSegment?(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new eN(this.scene,this.team,this.config,this.currentIntensity),this.segments.push(this.currentSegment)):this.currentSegment.setIntensity(this.currentIntensity),this.wasEmitting=!0,this.currentRotation+=this.rotationSpeed*i,this.currentRotation>Math.PI*2&&(this.currentRotation-=Math.PI*2),this.currentSegment.updatePosition(e,t,this.currentRotation)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}reset(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null,this.currentRotation=0,this.wasEmitting=!1}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}let Pu=null,Iu=null,Lu=null,Lv=!1;function nN(){Lv||(rN(),oN(),lN(),Lv=!0)}let gi=null;class iN{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.sphereGeo=new vn(1,16,12),this.coreGeo=new vn(1,12,8),this.ringGeo=new oi(.5,1,32),this.particleGeo=new Nn(1,1),this.coreMaterial=new je({color:16777130,transparent:!0,opacity:.9,blending:Vt,side:ut,depthWrite:!1}),this.sphereMaterial=new je({color:16737792,transparent:!0,opacity:.5,blending:Vt,side:ut,depthWrite:!1}),this.ringMaterial=new je({color:16746496,transparent:!0,opacity:.7,blending:Vt,side:ut,depthWrite:!1}),this.particleMaterial=new je({color:16763904,transparent:!0,opacity:.8,blending:Vt,side:ut,depthWrite:!1});for(let e=0;e!i.active);t||(t=this.explosions[0],this.resetExplosion(t)),t.active=!0,t.elapsed=0,t.position.copy(e),t.container.position.copy(e),t.container.visible=!0,t.core.scale.set(.1,.1,.1),t.coreMat.opacity=1,t.sphere.scale.set(.1,.1,.1),t.sphere.material.opacity=.6,t.ring.scale.set(.1,.1,.1),t.ring.material.opacity=.8,t.particleMat.opacity=.9,t.particles.forEach((i,s)=>{i.mesh.position.set(0,0,0);const a=s/12*Math.PI*2,r=(Math.random()-.3)*Math.PI,o=350+Math.random()*250;i.velocity.set(Math.cos(a)*Math.cos(r)*o,Math.sin(r)*o+100,Math.sin(a)*Math.cos(r)*o)})}resetExplosion(e){e.active=!1,e.container.visible=!1}update(e){for(const t of this.explosions){if(!t.active)continue;t.elapsed+=e;const i=t.elapsed/t.duration;if(i>=1){this.resetExplosion(t);continue}const s=30+i*80;t.core.scale.set(s,s,s),t.coreMat.opacity=1*Math.pow(1-i,2);const a=50+i*200;t.sphere.scale.set(a,a,a),t.sphere.material.opacity=.6*(1-i);const r=80+i*350;t.ring.scale.set(r,r,r),t.ring.material.opacity=.8*(1-i*i),t.particleMat.opacity=.9*(1-i);for(const o of t.particles)o.mesh.position.add(o.velocity.clone().multiplyScalar(e)),o.velocity.y-=300*e,this.camera&&o.mesh.lookAt(this.camera.position)}}dispose(){for(const e of this.explosions)this.scene.remove(e.container),e.coreMat.dispose(),e.sphere.material.dispose(),e.ring.material.dispose(),e.particleMat.dispose();this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.coreMaterial.dispose(),this.sphereMaterial.dispose(),this.ringMaterial.dispose(),this.particleMaterial.dispose()}}function aM(n,e=null,t=null){return gi&&gi.scene!==n&&(gi.dispose?.(),gi=null),gi||(gi=new iN(n,e,t)),e&&t&&!gi.warmedUp&&(gi.renderer=e,gi.camera=t,gi.warmup()),gi}function sN(n,e,t){aM(n,e,t),rM(n,e,t)}let Gn=null;const kv={0:{core:6737151,sphere:35071,ring:43775,particles:8969727},1:{core:16768358,sphere:16737792,ring:16746496,particles:16755268}};class aN{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.coreGeo=new vn(1,16,12),this.sphereGeo=new vn(1,20,14),this.ringGeo=new oi(.3,1,48),this.particleGeo=new Nn(1,1),this.rayGeo=new Nn(1,1);for(let e=0;e!l.active);i||(i=this.explosions[0],this.resetExplosion(i));const s=i.materials[t]||i.materials[0];i.core.material=s.core,i.core2.material=s.core.clone(),i.core3.material=s.sphere.clone(),i.sphere.material=s.sphere;for(const l of i.rings)l.mesh.material=s.ring.clone();for(const l of i.rays)l.mesh.material=s.rays.clone();for(const l of i.particles)l.mesh.material=s.particles.clone();i.active=!0,i.elapsed=0,i.currentTeam=t,i.position.copy(e),i.container.position.copy(e),i.container.visible=!0,i.rotationOffset=0,i.core.scale.set(.1,.1,.1),i.core.material.opacity=1,i.core2.scale.set(.1,.1,.1),i.core2.material.opacity=.8,i.core3.scale.set(.1,.1,.1),i.core3.material.opacity=.5,i.sphere.scale.set(.1,.1,.1),i.sphere.material.opacity=.4;for(const l of i.rings)l.mesh.scale.set(.1,.1,.1),l.mesh.material.opacity=.9;for(let l=0;l=i.particles.length);d++){const h=i.particles[o];h.mesh.position.set(0,0,0),h.mesh.material.opacity=1;const f=h.initialScale;h.mesh.scale.set(f,f,f);const p=c+(Math.random()-.5)*.3,g=u+(Math.random()-.5)*.2,v=1800*(1-d/r*.5)+Math.random()*300;h.velocity.set(Math.cos(p)*Math.cos(g)*v,Math.sin(g)*v+300,Math.sin(p)*Math.cos(g)*v),h.delay=d*.02,o++}}for(;o=1){this.resetExplosion(t);continue}t.rotationOffset+=e*2;const s=this.easeOutElastic(Math.min(i*2,1)),a=this.easeOutExpo(i),r=this.easeOutBack(Math.min(i*1.5,1)),o=1+Math.sin(t.elapsed*15)*.15*(1-i),l=(150+s*300)*o;t.core.scale.set(l,l,l),t.core.material.opacity=1*Math.pow(1-i,1.2);const c=1+Math.sin(t.elapsed*12+1)*.12*(1-i),u=(200+r*400)*c;t.core2.scale.set(u,u,u),t.core2.material.opacity=.7*Math.pow(1-i,1.5);const d=300+a*600;t.core3.scale.set(d,d,d),t.core3.material.opacity=.4*Math.pow(1-i,2);const h=400+a*1200;t.sphere.scale.set(h,h,h),t.sphere.material.opacity=.3*(1-i*i);for(let g=0;g0){g.mesh.position.add(g.velocity.clone().multiplyScalar(e)),g.velocity.y-=600*e,g.velocity.multiplyScalar(.995);const m=Math.max(.3,1-i*.7),v=g.initialScale*m;g.mesh.scale.set(v,v,v)}g.mesh.material.opacity=1*Math.pow(1-i,1.2),this.camera&&g.mesh.lookAt(this.camera.position)}}}dispose(){for(const e of this.explosions){this.scene.remove(e.container);for(const t of Object.values(e.materials))t.core.dispose(),t.sphere.dispose(),t.ring.dispose(),t.particles.dispose(),t.rays.dispose()}this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.rayGeo.dispose()}}function rM(n,e=null,t=null){return Gn&&Gn.scene!==n&&(Gn.dispose?.(),Gn=null),Gn||(Gn=new aN(n,e,t)),e&&t&&!Gn.warmedUp&&(Gn.renderer=e,Gn.camera=t,Gn.warmup()),Gn}function rN(){if(Pu)return Pu;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createRadialGradient(32,32,0,32,32,32);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.2,"rgba(255,255,255,0.8)"),t.addColorStop(.5,"rgba(255,255,255,0.3)"),t.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=t,e.fillRect(0,0,64,64),Pu=new Ec(n),Pu}function oN(){if(Iu)return Iu;const n=document.createElement("canvas");n.width=128,n.height=128;const e=n.getContext("2d"),t=e.createRadialGradient(64,64,0,64,64,64);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.1,"rgba(255,200,100,0.9)"),t.addColorStop(.4,"rgba(255,100,50,0.4)"),t.addColorStop(.7,"rgba(255,50,0,0.1)"),t.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=t,e.fillRect(0,0,128,128),Iu=new Ec(n),Iu}function lN(){if(Lu)return Lu;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createImageData(64,64);for(let i=0;ie.add(a)),this.mainTrail=this._createMainTrail(),this.secondaryTrails=this._createSecondaryTrails(),this._updateColors(),this._updateIntensity(),this.mainTrail.activate(),this.secondaryTrails.forEach(a=>a.activate())}_createMainTrail(){const e=new mt(this.scene,!1),t=Uv(),i=this.config.mainTrailWidth,s=[new T(0,-i,0),new T(0,i,0),new T(-i,0,0),new T(i,0,0),new T(0,0,-i),new T(0,0,i)];return e.initialize(t,this.config.trailLength,!1,0,s,this.mainTarget),e.setAdvanceFrequency(60),e.mesh&&(e.mesh.frustumCulled=!1,e.mesh.renderOrder=100),e}_createSecondaryTrails(){const e=[];for(let t=0;t<4;t++){const i=new mt(this.scene,!1),s=Uv(),a=this.config.secondaryTrailWidth,r=[new T(0,-a,0),new T(0,a,0),new T(-a,0,0),new T(a,0,0),new T(0,0,-a),new T(0,0,a)];i.initialize(s,this.config.trailLength,!1,0,r,this.secondaryTargets[t]),i.setAdvanceFrequency(60),i.mesh&&(i.mesh.frustumCulled=!1,i.mesh.renderOrder=100),e.push(i)}return e}_updateColors(){const e=this.teamColors[this.team]||this.teamColors[0];this.mainTrail?.material&&(this.mainTrail.material.uniforms.headColor.value.copy(e.head),this.mainTrail.material.uniforms.tailColor.value.copy(e.tail));const t=e.head.clone();t.w=e.head.w*.85;const i=e.tail.clone();this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.headColor.value.copy(t),s.material.uniforms.tailColor.value.copy(i))})}_updateIntensity(){this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=this.intensity),this.secondaryTrails.forEach(e=>{e?.material&&(e.material.uniforms.intensityMultiplier.value=this.intensity)})}setTeam(e){this.team!==e&&(this.team=e,this._updateColors())}setIntensity(e){this.intensity=e,this.dying||this._updateIntensity()}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.mainTrail.pause(),this.secondaryTrails.forEach(e=>e.pause()))}updatePosition(e,t,i){if(this.dying)return;const s=t.clone().normalize();this.mainTarget.position.copy(e),this.mainTarget.updateMatrixWorld();for(let a=0;a<4;a++){const o=a/4*Math.PI*2+i,l=new T(Math.cos(o)*this.config.secondaryTrailOffset,Math.sin(o)*this.config.secondaryTrailOffset,0);if(s.lengthSq()>.001){const c=new T(0,0,1),u=new ht;u.setFromUnitVectors(c,s),l.applyQuaternion(u)}this.secondaryTargets[a].position.copy(e).add(l),this.secondaryTargets[a].updateMatrixWorld()}}update(e){if(this.dying){this.deathTime+=e;const t=Math.min(1,this.deathTime/this.maxDeathTime),i=this.intensity*(1-t);this.mainTrail?.material&&(this.mainTrail.material.uniforms.intensityMultiplier.value=i),this.secondaryTrails.forEach(s=>{s?.material&&(s.material.uniforms.intensityMultiplier.value=i)}),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.mainTrail.isActive&&this.mainTrail.update(e),this.secondaryTrails.forEach(t=>{t.isActive&&t.update(e)})}dispose(){this.mainTrail.deactivate(),this.secondaryTrails.forEach(e=>e.deactivate()),this.mainTrail.geometry&&this.mainTrail.geometry.dispose(),this.mainTrail.material&&this.mainTrail.material.dispose(),this.secondaryTrails.forEach(e=>{e.geometry&&e.geometry.dispose(),e.material&&e.material.dispose()}),this.scene.remove(this.mainTarget),this.secondaryTargets.forEach(e=>this.scene.remove(e))}}class hN{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.ballRadius=92.75,this.config={trailLength:60,mainTrailWidth:15,secondaryTrailWidth:1.5,secondaryTrailOffset:this.ballRadius*.7},this.rotationSpeed=Math.PI/3,this.currentRotation=0,this.minVelocity=1500,this.maxVelocity=6e3,this.minIntensity=.3,this.maxIntensity=1,this.wasEmitting=!1,this.segments=[],this.currentSegment=null,this.currentIntensity=1}_calculateIntensity(e){if(e<=this.minVelocity)return this.minIntensity;if(e>=this.maxVelocity)return this.maxIntensity;const t=(e-this.minVelocity)/(this.maxVelocity-this.minVelocity);return this.minIntensity+t*(this.maxIntensity-this.minIntensity)}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null))}activate(){this.active||(this.active=!0,this.currentSegment=null,this.wasEmitting=!1)}deactivate(){this.active&&(this.active=!1,this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null))}emit(e,t,i){const s=t.length();if(!(s>=this.minVelocity)){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasEmitting=!1;return}this.currentIntensity=this._calculateIntensity(s),this.active||this.activate(),!this.wasEmitting||!this.currentSegment?(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new dN(this.scene,this.team,this.config,this.currentIntensity),this.segments.push(this.currentSegment)):this.currentSegment.setIntensity(this.currentIntensity),this.wasEmitting=!0,this.currentRotation+=this.rotationSpeed*i,this.currentRotation>Math.PI*2&&(this.currentRotation-=Math.PI*2),this.currentSegment.updatePosition(e,t,this.currentRotation)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}reset(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null,this.currentRotation=0,this.wasEmitting=!1}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}let Du=null,Ou=null,Fu=null,Bv=!1;function fN(){Bv||(gN(),yN(),vN(),Bv=!0)}let gi=null;class pN{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.sphereGeo=new vn(1,16,12),this.coreGeo=new vn(1,12,8),this.ringGeo=new oi(.5,1,32),this.particleGeo=new Nn(1,1),this.coreMaterial=new je({color:16777130,transparent:!0,opacity:.9,blending:Vt,side:ut,depthWrite:!1}),this.sphereMaterial=new je({color:16737792,transparent:!0,opacity:.5,blending:Vt,side:ut,depthWrite:!1}),this.ringMaterial=new je({color:16746496,transparent:!0,opacity:.7,blending:Vt,side:ut,depthWrite:!1}),this.particleMaterial=new je({color:16763904,transparent:!0,opacity:.8,blending:Vt,side:ut,depthWrite:!1});for(let e=0;e!i.active);t||(t=this.explosions[0],this.resetExplosion(t)),t.active=!0,t.elapsed=0,t.position.copy(e),t.container.position.copy(e),t.container.visible=!0,t.core.scale.set(.1,.1,.1),t.coreMat.opacity=1,t.sphere.scale.set(.1,.1,.1),t.sphere.material.opacity=.6,t.ring.scale.set(.1,.1,.1),t.ring.material.opacity=.8,t.particleMat.opacity=.9,t.particles.forEach((i,s)=>{i.mesh.position.set(0,0,0);const a=s/12*Math.PI*2,r=(Math.random()-.3)*Math.PI,o=350+Math.random()*250;i.velocity.set(Math.cos(a)*Math.cos(r)*o,Math.sin(r)*o+100,Math.sin(a)*Math.cos(r)*o)})}resetExplosion(e){e.active=!1,e.container.visible=!1}update(e){for(const t of this.explosions){if(!t.active)continue;t.elapsed+=e;const i=t.elapsed/t.duration;if(i>=1){this.resetExplosion(t);continue}const s=30+i*80;t.core.scale.set(s,s,s),t.coreMat.opacity=1*Math.pow(1-i,2);const a=50+i*200;t.sphere.scale.set(a,a,a),t.sphere.material.opacity=.6*(1-i);const r=80+i*350;t.ring.scale.set(r,r,r),t.ring.material.opacity=.8*(1-i*i),t.particleMat.opacity=.9*(1-i);for(const o of t.particles)o.mesh.position.add(o.velocity.clone().multiplyScalar(e)),o.velocity.y-=300*e,this.camera&&o.mesh.lookAt(this.camera.position)}}dispose(){for(const e of this.explosions)this.scene.remove(e.container),e.coreMat.dispose(),e.sphere.material.dispose(),e.ring.material.dispose(),e.particleMat.dispose();this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.coreMaterial.dispose(),this.sphereMaterial.dispose(),this.ringMaterial.dispose(),this.particleMaterial.dispose()}}function pM(n,e=null,t=null){return gi&&gi.scene!==n&&(gi.dispose?.(),gi=null),gi||(gi=new pN(n,e,t)),e&&t&&!gi.warmedUp&&(gi.renderer=e,gi.camera=t,gi.warmup()),gi}function mN(n,e,t){pM(n,e,t),mM(n,e,t)}let Gn=null;const zv={0:{core:6737151,sphere:35071,ring:43775,particles:8969727},1:{core:16768358,sphere:16737792,ring:16746496,particles:16755268}};class _N{constructor(e,t,i,s=2){this.scene=e,this.renderer=t,this.camera=i,this.maxExplosions=s,this.explosions=[],this.warmedUp=!1,this.initPool()}initPool(){this.coreGeo=new vn(1,16,12),this.sphereGeo=new vn(1,20,14),this.ringGeo=new oi(.3,1,48),this.particleGeo=new Nn(1,1),this.rayGeo=new Nn(1,1);for(let e=0;e!l.active);i||(i=this.explosions[0],this.resetExplosion(i));const s=i.materials[t]||i.materials[0];i.core.material=s.core,i.core2.material=s.core.clone(),i.core3.material=s.sphere.clone(),i.sphere.material=s.sphere;for(const l of i.rings)l.mesh.material=s.ring.clone();for(const l of i.rays)l.mesh.material=s.rays.clone();for(const l of i.particles)l.mesh.material=s.particles.clone();i.active=!0,i.elapsed=0,i.currentTeam=t,i.position.copy(e),i.container.position.copy(e),i.container.visible=!0,i.rotationOffset=0,i.core.scale.set(.1,.1,.1),i.core.material.opacity=1,i.core2.scale.set(.1,.1,.1),i.core2.material.opacity=.8,i.core3.scale.set(.1,.1,.1),i.core3.material.opacity=.5,i.sphere.scale.set(.1,.1,.1),i.sphere.material.opacity=.4;for(const l of i.rings)l.mesh.scale.set(.1,.1,.1),l.mesh.material.opacity=.9;for(let l=0;l=i.particles.length);d++){const h=i.particles[o];h.mesh.position.set(0,0,0),h.mesh.material.opacity=1;const f=h.initialScale;h.mesh.scale.set(f,f,f);const p=c+(Math.random()-.5)*.3,g=u+(Math.random()-.5)*.2,v=1800*(1-d/r*.5)+Math.random()*300;h.velocity.set(Math.cos(p)*Math.cos(g)*v,Math.sin(g)*v+300,Math.sin(p)*Math.cos(g)*v),h.delay=d*.02,o++}}for(;o=1){this.resetExplosion(t);continue}t.rotationOffset+=e*2;const s=this.easeOutElastic(Math.min(i*2,1)),a=this.easeOutExpo(i),r=this.easeOutBack(Math.min(i*1.5,1)),o=1+Math.sin(t.elapsed*15)*.15*(1-i),l=(150+s*300)*o;t.core.scale.set(l,l,l),t.core.material.opacity=1*Math.pow(1-i,1.2);const c=1+Math.sin(t.elapsed*12+1)*.12*(1-i),u=(200+r*400)*c;t.core2.scale.set(u,u,u),t.core2.material.opacity=.7*Math.pow(1-i,1.5);const d=300+a*600;t.core3.scale.set(d,d,d),t.core3.material.opacity=.4*Math.pow(1-i,2);const h=400+a*1200;t.sphere.scale.set(h,h,h),t.sphere.material.opacity=.3*(1-i*i);for(let g=0;g0){g.mesh.position.add(g.velocity.clone().multiplyScalar(e)),g.velocity.y-=600*e,g.velocity.multiplyScalar(.995);const m=Math.max(.3,1-i*.7),v=g.initialScale*m;g.mesh.scale.set(v,v,v)}g.mesh.material.opacity=1*Math.pow(1-i,1.2),this.camera&&g.mesh.lookAt(this.camera.position)}}}dispose(){for(const e of this.explosions){this.scene.remove(e.container);for(const t of Object.values(e.materials))t.core.dispose(),t.sphere.dispose(),t.ring.dispose(),t.particles.dispose(),t.rays.dispose()}this.coreGeo.dispose(),this.sphereGeo.dispose(),this.ringGeo.dispose(),this.particleGeo.dispose(),this.rayGeo.dispose()}}function mM(n,e=null,t=null){return Gn&&Gn.scene!==n&&(Gn.dispose?.(),Gn=null),Gn||(Gn=new _N(n,e,t)),e&&t&&!Gn.warmedUp&&(Gn.renderer=e,Gn.camera=t,Gn.warmup()),Gn}function gN(){if(Du)return Du;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createRadialGradient(32,32,0,32,32,32);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.2,"rgba(255,255,255,0.8)"),t.addColorStop(.5,"rgba(255,255,255,0.3)"),t.addColorStop(1,"rgba(255,255,255,0)"),e.fillStyle=t,e.fillRect(0,0,64,64),Du=new Pc(n),Du}function yN(){if(Ou)return Ou;const n=document.createElement("canvas");n.width=128,n.height=128;const e=n.getContext("2d"),t=e.createRadialGradient(64,64,0,64,64,64);return t.addColorStop(0,"rgba(255,255,255,1)"),t.addColorStop(.1,"rgba(255,200,100,0.9)"),t.addColorStop(.4,"rgba(255,100,50,0.4)"),t.addColorStop(.7,"rgba(255,50,0,0.1)"),t.addColorStop(1,"rgba(0,0,0,0)"),e.fillStyle=t,e.fillRect(0,0,128,128),Ou=new Pc(n),Ou}function vN(){if(Fu)return Fu;const n=document.createElement("canvas");n.width=64,n.height=64;const e=n.getContext("2d"),t=e.createImageData(64,64);for(let i=0;i=o.maxLife){o.active=!1,i[r]=0,s[r]=0;continue}t[r*3]+=o.velocity.x*e,t[r*3+1]+=o.velocity.y*e,t[r*3+2]+=o.velocity.z*e;const l=o.life/o.maxLife;i[r]=Math.pow(1-l,.5);const c=o.initialSize||3;s[r]=c*(1-l*.7),a[r*3]=1,a[r*3+1]=Math.max(.2,.9-l*.7),a[r*3+2]=Math.max(0,.4-l*.4),o.velocity.y+=20*e}this.geometry.attributes.position.needsUpdate=!0,this.geometry.attributes.alpha.needsUpdate=!0,this.geometry.attributes.size.needsUpdate=!0,this.geometry.attributes.color.needsUpdate=!0}addToScene(e){e.add(this.points)}removeFromScene(e){e.remove(this.points)}dispose(){this.geometry.dispose(),this.points.material.dispose()}}class uN{constructor(e,t,i,s){this.scene=e,this.team=t,this.trailWidth=i,this.trailLength=s,this.active=!0,this.dying=!1,this.deathTime=0,this.maxDeathTime=1.5,this.teamColors={0:new Ye(.3,.6,1,.9),1:new Ye(1,.5,.15,.9)},this.leftTarget=new et,this.rightTarget=new et,e.add(this.leftTarget),e.add(this.rightTarget),this.leftTrail=this.createTrail(this.leftTarget),this.rightTrail=this.createTrail(this.rightTarget),this.updateColors(),this.leftTrail.activate(),this.rightTrail.activate()}createTrail(e){const t=new mt(this.scene,!1),i=mt.createBaseMaterial();i.blending=Vt,i.depthWrite=!1,i.side=ut;const s=this.trailWidth,a=[new T(0,0,0),new T(0,s,0),new T(-s/2,s/2,0),new T(s/2,s/2,0)];return t.initialize(i,this.trailLength,!1,0,a,e),t.setAdvanceFrequency(60),t.mesh&&(t.mesh.frustumCulled=!1),t}updateColors(){const e=this.teamColors[this.team]||this.teamColors[0],t=new Ye(e.x*.3,e.y*.3,e.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(e),this.leftTrail.material.uniforms.tailColor.value.copy(t)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(e),this.rightTrail.material.uniforms.tailColor.value.copy(t))}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.leftTrail.pause(),this.rightTrail.pause())}updatePosition(e,t,i){this.dying||(this.leftTarget.position.copy(e),this.rightTarget.position.copy(t),this.leftTarget.quaternion.copy(i),this.rightTarget.quaternion.copy(i),this.leftTarget.updateMatrixWorld(),this.rightTarget.updateMatrixWorld())}update(e){if(this.dying){this.deathTime+=e;const i=1-Math.min(1,this.deathTime/this.maxDeathTime),s=this.teamColors[this.team]||this.teamColors[0],a=new Ye(s.x,s.y,s.z,s.w*i),r=new Ye(s.x*.3,s.y*.3,s.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(a),this.leftTrail.material.uniforms.tailColor.value.copy(r)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(a),this.rightTrail.material.uniforms.tailColor.value.copy(r)),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.leftTrail.isActive&&this.leftTrail.update(e),this.rightTrail.isActive&&this.rightTrail.update(e)}dispose(){this.leftTrail.deactivate(),this.rightTrail.deactivate(),this.leftTrail.geometry&&this.leftTrail.geometry.dispose(),this.rightTrail.geometry&&this.rightTrail.geometry.dispose(),this.leftTrail.material&&this.leftTrail.material.dispose(),this.rightTrail.material&&this.rightTrail.material.dispose(),this.scene.remove(this.leftTarget),this.scene.remove(this.rightTarget)}}class dN{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.trailLength=80,this.trailWidth=15,this.arenaBounds={floor:0,ceiling:2044,wallX:4096,wallZ:5120},this.groundedThreshold=50,this.segments=[],this.currentSegment=null,this.wasGrounded=!0}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.team=e,this.currentSegment.updateColors()))}setActive(e){e&&!this.active?(this.currentSegment=null,this.wasGrounded=!0):!e&&this.active&&this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null),this.active=e}isGrounded(e){const t=this.groundedThreshold,i=this.arenaBounds;if(e.yi.ceiling-t)return{grounded:!0,surface:"ceiling",normal:new T(0,-1,0)};if(Math.abs(e.x)>i.wallX-t){const s=e.x>0?-1:1;return{grounded:!0,surface:"wall",normal:new T(s,0,0)}}if(Math.abs(e.z)>i.wallZ-t){const s=e.z>0?-1:1;return{grounded:!0,surface:"wall",normal:new T(0,0,s)}}return{grounded:!1,surface:null,normal:null}}emit(e,t,i){if(!this.active)return;const s=this.isGrounded(e);if(!s.grounded){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasGrounded=!1;return}(!this.wasGrounded||!this.currentSegment)&&(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new uN(this.scene,this.team,this.trailWidth,this.trailLength),this.segments.push(this.currentSegment)),this.wasGrounded=!0;const r=new T(-30,5,40),o=new T(-30,5,-40);r.applyQuaternion(t),o.applyQuaternion(t);const l=e.clone().add(r),c=e.clone().add(o),u=2;if(s.surface==="floor")l.y=u,c.y=u;else if(s.surface==="ceiling")l.y=this.arenaBounds.ceiling-u,c.y=this.arenaBounds.ceiling-u;else if(s.surface==="wall"){if(s.normal.x!==0){const d=s.normal.x>0?-this.arenaBounds.wallX+u:this.arenaBounds.wallX-u;l.x=d,c.x=d}else if(s.normal.z!==0){const d=s.normal.z>0?-this.arenaBounds.wallZ+u:this.arenaBounds.wallZ-u;l.z=d,c.z=d}}this.currentSegment.updatePosition(l,c,t)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}class hN{constructor(e){this.scene=e,this.renderer=null,this.camera=null,this.explosions={active:[],goalEvents:new Map,demoEvents:new Map},this.boostTrails=new Map,this.supersonicTrails=new Map,this.ballTrail=null,nN()}setRenderContext(e,t){this.renderer=e,this.camera=t,sN(this.scene,e,t)}reset(){this.explosions.active.forEach(e=>e.removeFromScene(this.scene)),this.explosions.active=[],this.clearGoalExplosions(),this.boostTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.boostTrails.clear(),this.supersonicTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.supersonicTrails.clear(),this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose(),this.ballTrail=null)}clearEvents(){this.explosions.goalEvents.clear(),this.explosions.demoEvents.clear()}setGoalEvents(e){this.explosions.goalEvents.clear();for(const t of e??[])Number.isFinite(t.frame)&&this.explosions.goalEvents.set(t.frame,{time:t.time,team:t.team??0,playerName:t.playerName??""})}resetBallTrail(){this.ballTrail&&this.ballTrail.reset()}clearGoalExplosions(){Gn&&Gn.clearActive();for(const e of this.explosions.active)e.removeFromScene(this.scene);this.explosions.active=[]}createBoostTrail(e,t){if(this.boostTrails.has(t)){const s=this.boostTrails.get(t);s.removeFromScene(this.scene),s.dispose()}const i=new cN(e);return i.addToScene(this.scene),this.boostTrails.set(t,i),i}removeBoostTrail(e){const t=this.boostTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.boostTrails.delete(e))}updateBoostTrail(e,t,i,s,a){const r=this.boostTrails.get(e);r&&(r.setActive(t),t&&r.emit(i,s,a,this._playbackSpeed||1))}createSupersonicTrail(e,t){if(this.supersonicTrails.has(e)){const s=this.supersonicTrails.get(e);s.removeFromScene(this.scene),s.dispose()}const i=new dN(this.scene,t);return i.addToScene(this.scene),this.supersonicTrails.set(e,i),i}removeSupersonicTrail(e){const t=this.supersonicTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.supersonicTrails.delete(e))}updateSupersonicTrail(e,t,i,s,a,r){let o=this.supersonicTrails.get(e);!o&&t&&(o=this.createSupersonicTrail(e,r)),o&&(r!==void 0&&o.team!==r&&o.setTeam(r),o.setActive(t),t&&o.emit(i,s,a))}createBallTrail(){return this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose()),this.ballTrail=new tN(this.scene,0),this.ballTrail.addToScene(this.scene),console.log("✓ Spiral ball trail created and added to scene"),this.ballTrail}updateBallTrail(e,t,i){this.ballTrail||this.createBallTrail(),i!==void 0&&this.ballTrail.team!==i&&this.ballTrail.setTeam(i);const s=1/60*(this._playbackSpeed||1);this.ballTrail.emit(e,t,s)}triggerGoalExplosion(e,t){const i=rM(this.scene,this.renderer,this.camera);i&&(this.camera&&(i.camera=this.camera),i.trigger(e,t))}triggerDemoExplosion(e,t,i){const s=aM(this.scene);s&&s.trigger(e)}update(e,t=!0,i=1){this._playbackSpeed=i;const s=e*i;gi&&gi.update(s),Gn&&Gn.update(s);for(let a=this.explosions.active.length-1;a>=0;a--){const r=this.explosions.active[a];r.update(s)&&(r.removeFromScene(this.scene),this.explosions.active.splice(a,1))}t&&(this.boostTrails.forEach(a=>{a.update(s)}),this.supersonicTrails.forEach(a=>{a.update(s)}),this.ballTrail&&this.ballTrail.update(s))}}const Dv={Octane:65535,Dominus:16746496,Plank:8978176,Breakout:16711816,Hybrid:8913151,Merc:16776960},fN={0:5744895,1:16751680};function pN(n,e){return e===0||e===1?fN[e]:Dv[n]||Dv.Octane}class mN{constructor(e){this.scene=e,this.hitboxes=new Map,this.enabled=!1}setEnabled(e){this.enabled=e,this.hitboxes.forEach(({mesh:t})=>{t.visible=e})}createHitboxWireframe(e,t){const i=Ny[e]||Ny.Octane,s=pN(e,t),a=i.length,r=i.width,o=i.height,l=i.offsetX,c=i.offsetZ;console.log(`[HitboxManager] Creating hitbox for ${e}:`,{dims:i,length:a,width:r,height:o,offsetX:l,offsetY:c});const u=new Et,d=new ki(a,o,r),h=new je({color:s,transparent:!0,opacity:.35,depthTest:!1,depthWrite:!1,side:ut}),f=new Se(d,h);f.frustumCulled=!1,f.renderOrder=1,f.position.set(l,c,0),u.add(f);const p=new hf(d),g=new Pt({color:s,linewidth:2,transparent:!0,opacity:.9,depthTest:!1}),_=new Fn(p,g);_.frustumCulled=!1,_.renderOrder=2,_.position.set(l,c,0),u.add(_);const m=3.33,v=new vn(m,8,6),y=new Fg(v),b=new Pt({color:16777215,linewidth:1,transparent:!0,opacity:.9,depthTest:!1}),S=new Fn(y,b);return S.frustumCulled=!1,u.add(S),u.userData.hitboxType=e,u.userData.team=t??null,u.frustumCulled=!1,u}addHitbox(e,t,i){const s=i===0||i===1?i:null;if(this.hitboxes.has(e)){const r=this.hitboxes.get(e);if(r.hitboxType===t&&r.team===s)return;this.scene.remove(r.mesh),r.mesh.traverse(o=>{o.geometry&&o.geometry.dispose(),o.material&&o.material.dispose()})}const a=this.createHitboxWireframe(t,s);a.visible=this.enabled,this.scene.add(a),this.hitboxes.set(e,{mesh:a,hitboxType:t,team:s})}removeHitbox(e){if(this.hitboxes.has(e)){const{mesh:t}=this.hitboxes.get(e);this.scene.remove(t),t.traverse(i=>{i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose()}),this.hitboxes.delete(e)}}updateHitboxes(e,t,i,s){if(!this.enabled)return;for(const[r,o]of Object.entries(t)){const l=e[o];if(!l||!l.userData.isCar)continue;const c=i?i(r):"Octane",u=s?s(r):null;this.addHitbox(o,c,u);const{mesh:d}=this.hitboxes.get(o);d.position.copy(l.position),d.quaternion.copy(l.quaternion),d.visible=this.enabled&&l.visible}const a=new Set(Object.values(t));for(const r of this.hitboxes.keys())a.has(r)||this.removeHitbox(r)}reset(){this.hitboxes.forEach(({mesh:e})=>{this.scene.remove(e),e.traverse(t=>{t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose()})}),this.hitboxes.clear()}dispose(){this.reset()}}const oM=["baseGroup","glowMesh","innerGlowMesh","lensColumnMesh","lensRimMesh","topGlowMesh","coreGlowMesh","highlightMesh"];function Gp(n,e,t,i){const s=new Se(new Wo(n,32),new je({color:e,transparent:!0,opacity:t,blending:Vt,side:ut,depthWrite:!1}));return s.rotation.x=-Math.PI/2,s.renderOrder=i,s}function Ov(n,e){n&&n.traverse(t=>{const i=t;if(!i.isMesh||!(i.material instanceof je))return;const s=i.userData.baseOpacity;i.material.opacity=(s??i.material.opacity)*e})}function ku(n,e,t){n.rotation.x=-Math.PI/2,n.renderOrder=t,n.frustumCulled=!1,n.userData.baseOpacity=e,n.material.transparent=!0,n.material.opacity=e,n.material.side=ut,n.material.depthWrite=!1}function _N(n){const e=new Et;e.renderOrder=98,e.frustumCulled=!1;const t=new je({color:1118477}),i=new je({color:16752640,blending:Vt}),s=new Se(new Wo(n*.55,48),t.clone());ku(s,.86,98),e.add(s);const a=new Se(new oi(n*.45,n*.62,48),new je({color:16765242,blending:Vt}));ku(a,.78,100),a.position.y=1.4,e.add(a);function r(o,l,c){const u=new $s;return[[o*Math.cos(-c*.72),o*Math.sin(-c*.72)],[l*Math.cos(-c),l*Math.sin(-c)],[l*Math.cos(c),l*Math.sin(c)],[o*Math.cos(c*.72),o*Math.sin(c*.72)]].forEach(([h,f],p)=>{p===0?u.moveTo(h,f):u.lineTo(h,f)}),u.closePath(),u}for(let o=0;o<3;o+=1){const l=o*(Math.PI*2)/3+Math.PI/2,c=new Se(new vr(r(n*.52,n*1.42,.33)),t.clone());ku(c,.86,98),c.rotation.z=l,e.add(c);const u=new Se(new vr(r(n*.66,n*1.2,.21)),i.clone());ku(u,.86,99),u.position.y=1.1,u.rotation.z=l,e.add(u)}return e}function Fv(n,e){for(const t of oM){const i=n.userData[t];i&&(i.visible=e)}}function gN(){let n=new Map;function e(i){const s=i.player.adapter.boostPads;!s||s.size===0||(console.log(`[boost-pads] Creating ${s.size} boost pads...`),n=new Map,s.forEach((a,r)=>{const o=a.isBig;let l,c,u;if(o){l=new vn(37,24,18),c=new li({color:16757274,emissive:16747008,emissiveIntensity:.42,metalness:.04,roughness:.08,clearcoat:1,clearcoatRoughness:.025,transmission:.18,thickness:30,ior:1.42,envMapIntensity:1.9,blending:Vt,transparent:!0,opacity:.68,depthWrite:!1}),u=new Se(l,c),u.renderOrder=100;const p=_N(37*2.05);p.position.y=-140,u.add(p),u.userData.baseGroup=p;const g=new Se(new gr(37*.12,37*.18,112,24,1,!0),new je({color:16761664,transparent:!0,opacity:.28,blending:Vt,side:ut,depthWrite:!1}));g.position.y=-62,g.renderOrder=99,u.add(g),u.userData.lensColumnMesh=g;const _=new Se(new vn(37*1.03,24,14),new je({color:16768890,transparent:!0,opacity:.32,blending:Vt,side:dn,depthWrite:!1}));_.renderOrder=101,u.add(_),u.userData.lensRimMesh=_;const m=new vn(37*1.3,20,14),v=new je({color:16758315,transparent:!0,opacity:.16,blending:Vt,side:dn,depthWrite:!1}),y=new Se(m,v);y.renderOrder=99,u.add(y),u.userData.glowMesh=y;const b=new vn(37*1.12,20,14),S=new je({color:16761130,transparent:!0,opacity:.22,blending:Vt,side:dn,depthWrite:!1}),x=new Se(b,S);x.renderOrder=99,u.add(x),u.userData.innerGlowMesh=x,u.userData.needsLight=!0}else{l=new gr(45,45*.92,8,32),c=new li({color:16761370,emissive:16750336,emissiveIntensity:.72,metalness:.88,roughness:.14,clearcoat:1,clearcoatRoughness:.05,envMapIntensity:2,transparent:!0,opacity:1,depthWrite:!1}),u=new Se(l,c),u.renderOrder=100;const g=Gp(45*1.42,16756736,.34,101);g.position.y=8/2+.15,u.add(g),u.userData.topGlowMesh=g;const _=Gp(45*.74,16777114,.42,102);_.position.y=8/2+.35,u.add(_),u.userData.coreGlowMesh=_;const m=Gp(45*.42,16775376,.46,103);m.position.set(-45*.18,8/2+.55,-45*.12),m.scale.y=.34,u.add(m),u.userData.highlightMesh=m}const h=o?130:10;if(u.position.set(a.position.x,h,a.position.y),u.userData.padId=r,u.userData.isBig=o,u.userData.isAvailable=!0,i.scene.add(u),n.set(r,u),u.userData.needsLight){const f=new br(16751872,.7,480);f.decay=0,f.position.set(a.position.x,h-50,a.position.y),i.scene.add(f),u.userData.light=f}}),console.log(`[boost-pads] ✓ Created ${n.size} boost pad meshes`))}function t(i){i.player.adapter.boostPads.forEach((a,r)=>{const o=n.get(r);if(!o)return;const l=a.isAvailable;o.userData.isAvailable!==l&&(o.userData.isAvailable=l,l?(o.material.color.setHex(a.isBig?16757274:16761370),o.material.emissive.setHex(a.isBig?16747008:16750336),o.material.emissiveIntensity=a.isBig?.42:.72,o.material.opacity=a.isBig?.68:1,o.visible=!0,Fv(o,!0),Ov(o.userData.baseGroup,1),o.userData.light&&(o.userData.light.intensity=.85),o.userData.glowMesh&&(o.userData.glowMesh.visible=!0),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!0)):(o.material.color.setHex(a.isBig?9063424:9065472),o.material.emissive.setHex(0),o.material.emissiveIntensity=0,o.material.opacity=.2,o.visible=!0,Fv(o,!1),o.userData.baseGroup&&(o.userData.baseGroup.visible=!0,Ov(o.userData.baseGroup,.26)),o.userData.light&&(o.userData.light.intensity=0),o.userData.glowMesh&&(o.userData.glowMesh.visible=!1),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!1)))})}return{id:"boost-pads",setup(i){e(i)},beforeRender(i){t(i)},teardown(i){n.forEach(s=>{i.scene.remove(s),s.geometry.dispose(),s.material.dispose();for(const r of oM){const o=s.userData[r];o&&o.traverse(l=>{const c=l;c.isMesh&&(c.geometry.dispose(),c.material.dispose())})}const a=s.userData.light;a&&(i.scene.remove(a),a.dispose())}),n.clear()}}}const yN=2;function vN(n){if(n.frames.length===0)return null;const e=new Map;for(const s of n.frames)e.set(s.gameState,(e.get(s.gameState)??0)+1);let t=null,i=-1;for(const[s,a]of e.entries())a<=i||(t=s,i=a);return t}function bN(n,e){if(e===null)return null;for(const t of n.frames){if(t.gameState===e)break;return t.gameState}return null}function lM(n,e){return e===null?n.kickoffCountdown<=0:n.gameState===e}function ty(n,e){return n.kickoffCountdown>0?!0:e!==null&&n.gameState===e}function xN(n,e){return n.ballFrames[e]?.position?!0:n.players.some(t=>t.frames[e]?.position)}function wN(n,e,t,i){return ty(e,i)&&xN(n,t)}function SN(n,e){return n.timelineEvents.some(t=>t.kind==="goal"&&e.time>=t.time&&e.timec){const h=a.at(-1);h&&h.endTime>=c?h.endTime=Math.max(h.endTime,d):a.push({startTime:c,endTime:d})}o=u}return a}function MN(n,e,t){const i=bt.clamp(t,0,n);for(const s of e){if(i0&&(n.frames[s-1]?.kickoffCountdown??0)>0;)s-=1;let a=e+1;for(;a0;)a+=1;let r=0;for(let c=s;cl>s&&lM(o,t));return!r||r.time===e?null:r.time}function LN(n,e,t,i){const s=Bh(n,e),a=n.frames[s];if(!a||!dd(n,a,s,t,i))return null;const r=n.frames.find((c,u)=>u>s&&!dd(n,c,u,t,i));if(r)return r.time===e?null:r.time;let o=s;for(;o>0&&dd(n,n.frames[o-1],o-1,t,i);)o-=1;const l=n.frames[o]?.time;return l===void 0||l===e?null:l}function kN(n){return!!n?.position&&n?.isPresent!==!1}function DN(n,e,t){for(let i=n.length-1;i>=0;i-=1){const s=n[i],a=t-s.time;if(!(a<0)){if(a>PN)break;if(s.kind==="demo"&&s.secondaryPlayerId===e)return s}}return null}const ON="space",FN={space:{id:"space",skyboxUrl:"/skyboxes/PlanetaryEarth4k.hdr",exposure:1.45,rotation:{x:8,y:0,z:28},animation:{enabled:!0,speed:2}}};function NN(n){if(n===!1)return null;if(typeof n=="string"){const e=FN[n];return e||(console.warn(`[player] unknown environment "${n}"; using neutral default`),null)}return n}const UN=new Proxy({},{get:()=>()=>{}});function Uv(n){if(!n)return null;const e={};for(const t of Object.keys(n)){const i=n[t];typeof i=="number"&&Number.isFinite(i)&&(e[t]=i)}return e}const Bv=48,Du=.14,BN=16,zN=16,HN=.003,VN=.05,GN=1.08,zv=4120,Hv=5140,$N=0,WN=2200,XN=new T(0,700,0),KN=new T(-1,0,0),qN=new T(0,-1,0),YN=new T(0,900,0),jN=new T(0,1,0),ZN=new T(9600,-5500,12600).normalize();function JN(n,e){const t=Number.isFinite(e)&&e>0?e:1.7777777777777777,i=n==="overhead"?XN.clone():YN.clone(),s=n==="overhead"?KN.clone():jN.clone(),a=n==="overhead"?qN.clone():ZN.clone(),r=QN({aspect:t,fov:Bv,forward:a,margin:GN,target:i,up:s});return{position:i.clone().addScaledVector(a,-r),target:i,up:s,fov:Bv}}function QN(n){const{aspect:e,fov:t,forward:i,margin:s,target:a,up:r}=n,o=i.clone().normalize(),l=new T().crossVectors(o,r).normalize(),c=new T().crossVectors(l,o).normalize(),u=Math.tan(bt.degToRad(t)/2),d=u*e;let h=1;for(const f of[-zv,zv])for(const p of[$N,WN])for(const g of[-Hv,Hv]){const _=new T(f,p,g).sub(a),m=Math.abs(_.dot(l)),v=Math.abs(_.dot(c)),y=_.dot(o);h=Math.max(h,m/d-y,v/u-y)}return Math.max(1,h*s)}function e3(n){const e=new Et;return e.name="replayRoot",e.matrixAutoUpdate=!1,e.matrix.set(1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1),n.add(e),e}class t3 extends EventTarget{container;adapter;replay;options;sceneManager;arenaManager;actorManager;effectsManager;hitboxManager;controls;replayRoot;sceneState;effectsEnabled;ready;plugins=[];beforeRenderCallbacks=[];resizeObserver=null;animationFrameId=null;disposed=!1;playing=!1;readyResolved=!1;speed;loop;currentTime=0;lastTickAt=null;freeCameraTransition=null;cameraDistanceScaleValue;customCameraSettingsValue;cameraViewModeValue;attachedPlayerIdValue;ballCamEnabledValue;boostMeterEnabledValue;boostPickupAnimationEnabledValue;hitboxWireframesEnabledValue;hitboxOnlyModeEnabledValue;hitboxTypeByName=null;hitboxTeamByName=null;hitboxesActive=!1;skipPostGoalTransitionsEnabledValue;skipKickoffsEnabledValue;attachmentTouched=!1;liveGameState=null;kickoffGameState=null;timelineSegmentsCacheKey=null;timelineSegmentsCache=[];constructor(e,t,i={},s=null){super(),this.container=e,this.adapter=t,this.replay=s,this.options=i,this.updateReplayGameStates(),this.speed=Math.max(.1,i.initialPlaybackRate??i.speed??1),this.loop=i.loop??!1,this.cameraDistanceScaleValue=Math.max(.25,i.initialCameraDistanceScale??1),this.customCameraSettingsValue=Uv(i.initialCustomCameraSettings),this.attachedPlayerIdValue=i.initialAttachedPlayerId??null,this.cameraViewModeValue=i.initialCameraViewMode??(this.attachedPlayerIdValue?"follow":"free"),this.ballCamEnabledValue=i.initialBallCamEnabled??null,this.boostMeterEnabledValue=i.initialBoostMeterEnabled??!1,this.boostPickupAnimationEnabledValue=i.initialBoostPickupAnimationEnabled??!0,this.hitboxWireframesEnabledValue=i.initialHitboxWireframesEnabled??!1,this.hitboxOnlyModeEnabledValue=i.initialHitboxOnlyModeEnabled??!1,this.skipPostGoalTransitionsEnabledValue=i.initialSkipPostGoalTransitionsEnabled??!0,this.skipKickoffsEnabledValue=i.initialSkipKickoffsEnabled??!1,this.sceneManager=new vO(e,{assetBase:i.assetBase,preserveDrawingBuffer:i.preserveDrawingBuffer}),this.sceneManager.initDefaultEnvironment(),this.applyEnvironmentSpec(i.environment??ON),this.arenaManager=new cF(this.scene,{assetBase:i.assetBase}),this.effectsEnabled=i.effects??!0,this.effectsManager=this.effectsEnabled?new hN(this.scene):UN,this.actorManager=new QF(this.scene,this.effectsManager,{assetBase:i.assetBase}),i.motionInterpolation&&this.setMotionInterpolation(i.motionInterpolation),this.actorManager.initFromFramework(t),this.actorManager.initInterpolants(t.getTimelines()),this.hitboxManager=new mN(this.scene),this.syncGoalEvents(),this.controls=new eO(this.camera,this.renderer.domElement),this.controls.zoomSpeed=2.5,this.camera.position.set(0,4e3,6e3),this.controls.target.set(0,200,0),this.controls.update(),this.replayRoot=e3(this.scene),this.sceneState=this.createSceneState(),this.ready=Promise.all([this.arenaManager.loadArenaMeshes().catch(a=>{console.warn("[player] arena load failed",a)}),this.prepareReplayAssets()]).then(()=>{this.markReady()}),this.installResizeHandling();for(const a of i.plugins??[])this.installPlugin(a,!1);this.plugins.some(a=>a.plugin.id==="boost-pads")||this.installPlugin(gN(),!1),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),this.scheduleAnimationFrame(),this.emitChange(),i.autoplay&&this.play()}get scene(){return this.sceneManager.scene}get camera(){return this.sceneManager.camera}get renderer(){return this.sceneManager.renderer}get duration(){return this.adapter.duration}async replaceReplay(e,t,i={}){if(this.disposed)throw new Error("Cannot replace replay on a disposed ReplayPlayer");const s=i.preservePlayback??this.playing;this.playing&&this.setPlayingInternal(!1),this.teardownPlugins(),this.effectsManager.reset(),this.effectsManager.clearEvents?.(),this.hitboxManager.reset(),this.actorManager.reset(),this.adapter=e,this.replay=t,this.updateReplayGameStates(),this.timelineSegmentsCacheKey=null,this.timelineSegmentsCache=[],this.hitboxTypeByName=null,this.hitboxTeamByName=null,this.hitboxesActive=!1,this.freeCameraTransition=null,this.actorManager.initFromFramework(e),this.actorManager.initInterpolants(e.getTimelines()),this.syncGoalEvents();const a=this.attachedPlayerIdValue&&this.adapter.playerList.some(r=>r.id===this.attachedPlayerIdValue)?this.attachedPlayerIdValue:null;a!==this.attachedPlayerIdValue&&(this.attachedPlayerIdValue=a,this.cameraViewModeValue==="follow"&&(this.cameraViewModeValue="free")),this.seekInternal(i.currentTime??0),this.readyResolved=!1,this.ready=this.prepareReplayAssets().then(()=>{this.markReady()}),await this.ready,this.setupPlugins(),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),s&&this.setPlayingInternal(!0),this.render(),this.emitChange()}setEnvironment(e){this.applyEnvironmentSpec(e)}applyEnvironmentSpec(e){const t=NN(e);if(!t){this.sceneManager.setDefaultBackground();return}this.sceneManager.applyEnvironment(t).catch(i=>{console.warn(`[player] environment "${t.id}" failed to load`,i)})}play(){this.playing||(this.setPlayingInternal(!0),this.emitChange())}pause(){this.playing&&(this.setPlayingInternal(!1),this.emitChange())}togglePlayback(){this.playing?this.pause():this.play()}seek(e){this.seekInternal(e),this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setPlaybackRate(e){this.speed=Math.max(.1,e),this.emitChange()}setLoop(e){this.loop=e}setMotionInterpolation(e){this.actorManager.interpolationMethod=e==="linear"?"lerp":"hermite"}setFrameIndex(e){const t=this.adapter.frameTimes;if(t.length===0||!Number.isFinite(e))return;const i=Math.min(Math.max(Math.trunc(e),0),t.length-1);this.playing&&this.setPlayingInternal(!1),this.seekInternal(t[i]),this.emitChange()}stepFrames(e){Number.isFinite(e)&&this.setFrameIndex(this.adapter.frameIndexAt(this.currentTime)+Math.trunc(e))}stepForwardFrame(){this.stepFrames(1)}stepBackwardFrame(){this.stepFrames(-1)}setCameraDistanceScale(e){this.cameraDistanceScaleValue=Math.max(.25,e),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue),this.emitChange()}setCustomCameraSettings(e){this.applyCustomCameraSettings(e),this.emitChange()}setAttachedPlayer(e){this.attachedPlayerIdValue=e,this.cameraViewModeValue=e?"follow":"free",this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setCameraViewMode(e){this.cameraViewModeValue=e,this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setFreeCameraPreset(e,t={}){this.cameraViewModeValue="free",this.attachmentTouched=!0,this.syncCameraAttachment();const i=JN(e,this.camera.aspect);t.instant?(this.camera.position.copy(i.position),this.controls.target.copy(i.target),this.camera.up.copy(i.up).normalize(),this.camera.fov=i.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(i.target),this.controls.enabled=!0,this.freeCameraTransition=null):this.freeCameraTransition=i,this.emitChange()}setBallCamEnabled(e){this.ballCamEnabledValue=e,this.getCameraPlugin()?.setBallCam(e),this.emitChange()}setBoostMeterEnabled(e){this.boostMeterEnabledValue=e,this.emitChange()}setBoostPickupAnimationEnabled(e){this.boostPickupAnimationEnabledValue=e,this.emitChange()}setHitboxWireframesEnabled(e){this.hitboxWireframesEnabledValue=e,this.emitChange()}setHitboxOnlyModeEnabled(e){this.hitboxOnlyModeEnabledValue=e,this.emitChange()}setSkipPostGoalTransitionsEnabled(e){this.skipPostGoalTransitionsEnabledValue=e,e&&this.playing&&this.skipPostGoalTransitionIfNeeded(),this.emitChange()}setSkipKickoffsEnabled(e){this.skipKickoffsEnabledValue=e,e&&this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setState(e){e.speed!==void 0&&(this.speed=Math.max(.1,e.speed)),e.cameraDistanceScale!==void 0&&(this.cameraDistanceScaleValue=Math.max(.25,e.cameraDistanceScale),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue)),e.customCameraSettings!==void 0&&this.applyCustomCameraSettings(e.customCameraSettings),e.cameraViewMode!==void 0&&(this.cameraViewModeValue=e.cameraViewMode,this.attachmentTouched=!0),e.attachedPlayerId!==void 0&&(this.attachedPlayerIdValue=e.attachedPlayerId,this.attachmentTouched=!0,e.cameraViewMode===void 0&&(this.cameraViewModeValue=e.attachedPlayerId?"follow":"free")),(e.cameraViewMode!==void 0||e.attachedPlayerId!==void 0)&&(this.freeCameraTransition=null,this.syncCameraAttachment()),e.useReplayBallCam===!0?(this.ballCamEnabledValue=null,this.getCameraPlugin()?.setBallCam(null)):e.ballCamEnabled!==void 0&&(this.ballCamEnabledValue=e.ballCamEnabled,this.getCameraPlugin()?.setBallCam(e.ballCamEnabled)),e.boostMeterEnabled!==void 0&&(this.boostMeterEnabledValue=e.boostMeterEnabled),e.boostPickupAnimationEnabled!==void 0&&(this.boostPickupAnimationEnabledValue=e.boostPickupAnimationEnabled),e.hitboxWireframesEnabled!==void 0&&(this.hitboxWireframesEnabledValue=e.hitboxWireframesEnabled),e.hitboxOnlyModeEnabled!==void 0&&(this.hitboxOnlyModeEnabledValue=e.hitboxOnlyModeEnabled),e.skipPostGoalTransitionsEnabled!==void 0&&(this.skipPostGoalTransitionsEnabledValue=e.skipPostGoalTransitionsEnabled),e.skipKickoffsEnabled!==void 0&&(this.skipKickoffsEnabledValue=e.skipKickoffsEnabled),e.currentTime!==void 0&&this.seekInternal(e.currentTime),e.playing!==void 0&&e.playing!==this.playing&&this.setPlayingInternal(e.playing),this.playing&&(e.currentTime!==void 0||e.playing!==void 0)&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}getState(){const e=this.adapter.frameIndexAt(this.currentTime),t=this.getCameraPlugin();let i=this.cameraViewModeValue,s=this.attachedPlayerIdValue;if(t)if(t.getMode()==="follow"){i="follow";const a=t.getTarget();s=(a?this.adapter.playerList.find(o=>o.name===a):void 0)?.id??s}else i="free",s=null;return{currentTime:this.currentTime,duration:this.duration,frameIndex:e,activeMetadata:this.replay?AN(this.replay,e,this.currentTime):null,playing:this.playing,speed:this.speed,cameraDistanceScale:this.cameraDistanceScaleValue,customCameraSettings:this.customCameraSettingsValue,cameraViewMode:i,attachedPlayerId:s,ballCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,useReplayBallCam:this.ballCamEnabledValue===null,effectiveBallCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,boostMeterEnabled:this.boostMeterEnabledValue,boostPickupAnimationEnabled:this.boostPickupAnimationEnabledValue,hitboxWireframesEnabled:this.hitboxWireframesEnabledValue,hitboxOnlyModeEnabled:this.hitboxOnlyModeEnabledValue,skipPostGoalTransitionsEnabled:this.skipPostGoalTransitionsEnabledValue,skipKickoffsEnabled:this.skipKickoffsEnabledValue}}getSnapshot(){return this.getState()}getTimelineDuration(){return this.replay?.duration??this.duration}getTimelineCurrentTime(){return this.projectReplayTimeToTimeline(this.currentTime).timelineTime}getTimelineSegments(){if(!this.replay)return[];const e=`${this.skipPostGoalTransitionsEnabledValue}:${this.skipKickoffsEnabledValue}`;return this.timelineSegmentsCacheKey===e?this.timelineSegmentsCache:(this.timelineSegmentsCacheKey=e,this.timelineSegmentsCache=TN(this.replay,this.skipPostGoalTransitionsEnabledValue,this.skipKickoffsEnabledValue,this.liveGameState,this.kickoffGameState),this.timelineSegmentsCache)}projectReplayTimeToTimeline(e){return MN(this.replay?.duration??this.duration,this.getTimelineSegments(),e)}projectTimelineTimeToReplay(e){return EN(this.replay?.duration??this.duration,this.getTimelineDuration(),this.getTimelineSegments(),e)}subscribe(e){const t=i=>{e(i.detail)};return this.addEventListener("change",t),e(this.getState()),()=>{this.removeEventListener("change",t)}}onBeforeRender(e){return this.beforeRenderCallbacks.push(e),()=>{const t=this.beforeRenderCallbacks.indexOf(e);t>=0&&this.beforeRenderCallbacks.splice(t,1)}}addPlugin(e){return this.installPlugin(e,!0)}removePlugin(e){const t=this.plugins.findIndex(s=>s.plugin.id===e);if(t<0)return!1;const[i]=this.plugins.splice(t,1);return i.plugin.teardown?.(this.createPluginContext()),!0}getPlugins(){return this.plugins.map(e=>e.plugin)}destroy(){if(!this.disposed){for(this.disposed=!0,this.playing=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.beforeRenderCallbacks.length=0;this.plugins.length>0;)this.plugins.pop()?.plugin.teardown?.(this.createPluginContext());this.controls.dispose(),this.effectsEnabled&&this.effectsManager.reset(),this.hitboxManager.dispose(),this.actorManager.reset(),this.sceneManager.dispose()}}dispose(){this.destroy()}setPlayingInternal(e){this.playing=e,this.lastTickAt=null,e?this.actorManager.resumeAnimations():this.actorManager.pauseAnimations()}prepareReplayAssets(){return this.actorManager.waitForBallModel().catch(()=>!1).then(()=>{if(this.effectsEnabled)try{this.effectsManager.setRenderContext(this.renderer,this.camera)}catch(e){console.warn("[player] explosion warmup failed",e)}})}markReady(){this.readyResolved=!0,this.lastTickAt=null}updateReplayGameStates(){if(!this.replay){this.liveGameState=null,this.kickoffGameState=null;return}this.liveGameState=vN(this.replay),this.kickoffGameState=bN(this.replay,this.liveGameState)}syncGoalEvents(){this.effectsEnabled&&(this.effectsManager.clearEvents?.(),this.replay&&this.effectsManager.setGoalEvents(this.replay.timelineEvents.filter(e=>e.kind==="goal").map(e=>({frame:e.frame,time:e.time,team:e.isTeamZero?0:1,playerName:e.playerName??""}))))}teardownPlugins(){const e=this.createPluginContext();for(const t of this.plugins)t.plugin.teardown?.(e)}setupPlugins(){for(const e of this.plugins)e.plugin.setup?.(this.createPluginContext()),e.plugin.id==="camera"&&this.pushCameraParityState(),e.plugin.onStateChange?.(this.createPluginStateContext(this.getState()))}seekInternal(e){this.currentTime=bt.clamp(e,0,this.duration),this.actorManager.seekAnimations(this.currentTime),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()}getPlaybackEndTime(){return this.replay?CN(this.replay.duration,this.getTimelineSegments()):this.duration}skipPastKickoffIfNeeded(){if(!this.replay||!this.skipKickoffsEnabledValue)return!1;const e=IN(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}skipPostGoalTransitionIfNeeded(){if(!this.replay||!this.skipPostGoalTransitionsEnabledValue)return!1;const e=LN(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}getCameraPlugin(){const e=this.plugins.find(t=>t.plugin.id==="camera")?.plugin;return e&&typeof e.follow=="function"?e:null}playerNameForId(e){return this.adapter.playerList.find(t=>t.id===e)?.name??null}applyReplayBallCam(){if(this.ballCamEnabledValue!==null||this.cameraViewModeValue!=="follow"||!this.attachedPlayerIdValue)return;const e=this.playerNameForId(this.attachedPlayerIdValue);if(!e)return;const t=this.adapter.getAllPlayers().find(i=>i.name===e);t&&this.getCameraPlugin()?.setBallCam(t.isBallCam)}syncCameraAttachment(){const e=this.getCameraPlugin();if(e){if(this.cameraViewModeValue==="follow"&&this.attachedPlayerIdValue){const t=this.playerNameForId(this.attachedPlayerIdValue);if(!t){console.warn(`[player] no player with id ${JSON.stringify(this.attachedPlayerIdValue)}`);return}this.camera.up.set(0,1,0),e.follow(t);return}e.getMode()==="follow"&&e.release()}}applyCustomCameraSettings(e){this.customCameraSettingsValue=Uv(e);const t=this.getCameraPlugin();t&&(t.setCameraSettings(null),this.customCameraSettingsValue&&t.setCameraSettings(this.customCameraSettingsValue))}pushCameraParityState(){const e=this.getCameraPlugin();e&&(this.cameraDistanceScaleValue!==1&&e.setDistanceScale(this.cameraDistanceScaleValue),this.customCameraSettingsValue&&e.setCameraSettings(this.customCameraSettingsValue),this.ballCamEnabledValue!==null&&e.setBallCam(this.ballCamEnabledValue),this.attachmentTouched&&this.syncCameraAttachment())}applyInitialCameraOptions(){const e=this.options;(e.initialAttachedPlayerId!==void 0||e.initialCameraViewMode!==void 0)&&(this.attachmentTouched=!0),this.pushCameraParityState()}computeFrameRenderInfo(){const e=this.adapter.frameTimes,t=this.adapter.frameIndexAt(this.currentTime),i=Math.min(t+1,Math.max(e.length-1,0)),s=e[t]??0,a=e[i]??s,r=a>s?bt.clamp((this.currentTime-s)/(a-s),0,1):0;return{frameIndex:t,nextFrameIndex:i,alpha:r,currentTime:this.currentTime}}installResizeHandling(){typeof ResizeObserver>"u"||(this.resizeObserver=new ResizeObserver(()=>this.sceneManager.onWindowResize()),this.resizeObserver.observe(this.container))}scheduleAnimationFrame(){this.animationFrameId!==null||this.disposed||(this.animationFrameId=requestAnimationFrame(this.tick))}tick=e=>{if(this.animationFrameId=null,this.disposed)return;let t=!1,i=0;if(this.playing&&this.readyResolved){i=this.lastTickAt===null?0:Math.min(.1,(e-this.lastTickAt)/1e3),this.lastTickAt=e;let s=this.currentTime+i*this.speed;const a=this.getPlaybackEndTime();s>=a&&(this.loop?(s=0,this.actorManager.seekAnimations(0),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()):(s=a,this.playing=!1)),t=s!==this.currentTime||!this.playing,this.currentTime=s,this.playing&&(t=this.skipPostGoalTransitionIfNeeded()||t,t=this.skipPastKickoffIfNeeded()||t)}else this.playing&&(this.lastTickAt=null);this.render(i),t&&this.emitChange(),this.scheduleAnimationFrame()};renderFrame(e=0){if(this.adapter.seek(this.currentTime),this.playing&&this.actorManager.updateAnimations(e*this.speed),this.actorManager.updateFromFramework(this.adapter,this.currentTime),this.updatePlayerStates(),this.applyReplayBallCam(),this.updateHitboxVisualization(),this.effectsManager.update(e,this.playing,this.speed),this.playing&&this.actorManager.updateWheelRotations(),this.sceneManager.updateSkyboxAnimation(this.playing?e*this.speed:0),this.controls.update(),this.beforeRenderCallbacks.length>0){const t=this.computeFrameRenderInfo();for(const i of[...this.beforeRenderCallbacks])i(t)}if(this.plugins.length>0){const t=this.createRenderContext();for(const i of this.plugins)i.plugin.beforeRender?.(t)}this.updateFreeCameraTransition(),this.renderer.render(this.scene,this.camera)}render(e=0){this.renderFrame(e)}updateFreeCameraTransition(){const e=this.freeCameraTransition;if(!e)return;this.controls.enabled=!1,this.camera.position.lerp(e.position,Du),this.controls.target.lerp(e.target,Du),this.camera.up.lerp(e.up,Du).normalize(),this.camera.fov=bt.lerp(this.camera.fov,e.fov,Du),this.camera.updateProjectionMatrix(),this.camera.lookAt(this.controls.target);const t=this.camera.position.distanceToSquared(e.position)<=BN,i=this.controls.target.distanceToSquared(e.target)<=zN,s=this.camera.up.angleTo(e.up)<=HN,a=Math.abs(this.camera.fov-e.fov)<=VN;!t||!i||!s||!a||(this.camera.position.copy(e.position),this.controls.target.copy(e.target),this.camera.up.copy(e.up).normalize(),this.camera.fov=e.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(e.target),this.controls.enabled=!0,this.freeCameraTransition=null)}updatePlayerStates(){if(!this.playing)return;const e=this.hitboxOnlyModeEnabledValue;for(const t of this.adapter.getAllPlayers())this.actorManager.updateBoostState(t.name,t.isBoosting&&!e,t.isKickoffReset),this.actorManager.updateSupersonicState(t.name,t.isSupersonic&&!e,t.team)}updateHitboxVisualization(){const e=this.hitboxWireframesEnabledValue||this.hitboxOnlyModeEnabledValue;if(!e&&!this.hitboxesActive||(this.hitboxesActive=e,this.hitboxManager.setEnabled(e),!e))return;const t=this.actorManager;if(this.hitboxTypeByName||(this.hitboxTypeByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.hitboxType]))),this.hitboxTeamByName||(this.hitboxTeamByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.team]))),this.hitboxManager.updateHitboxes(t.actors,t.playerNameToCarActorId,i=>this.hitboxTypeByName?.get(i)??"Octane",i=>this.hitboxTeamByName?.get(i)??null),this.hitboxOnlyModeEnabledValue)for(const i of Object.values(t.playerNameToCarActorId)){const s=i===void 0?void 0:t.actors[i];s&&(s.visible=!1)}}installPlugin(e,t){const i=typeof e=="function"?e():e;if(this.plugins.some(a=>a.plugin.id===i.id))throw new Error(`Player plugin "${i.id}" is already installed`);const s={definition:e,plugin:i};return this.plugins.push(s),i.setup?.(this.createPluginContext()),i.id==="camera"&&this.pushCameraParityState(),i.onStateChange?.(this.createPluginStateContext(this.getState())),t&&this.render(),()=>{const a=this.plugins.indexOf(s);a<0||(this.plugins.splice(a,1),i.teardown?.(this.createPluginContext()))}}createSceneState(){const e=this.actorManager,t=this,i=new Se;return{get scene(){return t.scene},replayRoot:this.replayRoot,get camera(){return t.camera},get renderer(){return t.renderer},controls:this.controls,resize:()=>this.sceneManager.onWindowResize(),dispose:()=>this.destroy(),get ballMesh(){return(e.ballActorId!=null?e.actors[e.ballActorId]:null)??i},get playerMeshes(){const s=new Map;for(const a of t.adapter.playerList){const r=e.playerNameToCarActorId[a.name],o=r!=null?e.actors[r]:void 0;o&&s.set(a.id,o)}return s},playerBodyMeshes:new Map,playerHitboxes:new Map,playerBoostTrails:new Map,playerBoostMeters:new Map,playerDemoIndicators:new Map,updateWallVisibility:()=>{}}}createPluginContext(){return{player:this,replay:this.replay,options:this.options,scene:this.scene,camera:this.camera,renderer:this.renderer,container:this.container}}createPluginStateContext(e){return{...this.createPluginContext(),state:e}}createRenderContext(){const e=this.actorManager,t=this.adapter.ball,i={position:t.position,rotation:t.rotation,velocity:t.velocity,visible:t.visible,object3d:e.ballActorId!=null?e.actors[e.ballActorId]??null:null},s=this.adapter.getAllPlayers().map(a=>{const r=e.playerNameToCarActorId[a.name];return{id:a.id,name:a.name,team:a.team,carName:a.carName,hitboxType:a.hitboxType,position:a.position,rotation:a.rotation,velocity:a.velocity,boost:a.boost,isBoosting:a.isBoosting,visible:a.isVisible,object3d:r!=null?e.actors[r]??null:null}});return{...this.createPluginContext(),...this.computeFrameRenderInfo(),state:this.getState(),time:this.currentTime,ball:i,cars:s}}emitChange(){const e=this.getState(),t=this.createPluginStateContext(e);for(const i of this.plugins)i.plugin.onStateChange?.(t);this.dispatchEvent(new CustomEvent("change",{detail:e}))}}const Xt={LEFT:1,RIGHT:2,MIDDLE:4},$=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Zr={NONE:0,IN:1,OUT:-1};function za(n){return n.isPerspectiveCamera}function ra(n){return n.isOrthographicCamera}const Jr=Math.PI*2,Vv=Math.PI/2,uM=1e-5,ml=Math.PI/180;function Gi(n,e,t){return Math.max(e,Math.min(t,n))}function Ft(n,e=uM){return Math.abs(n)0==f>u&&(f=u,t.value=(f-u)/a),f}function $v(n,e,t,i,s=1/0,a,r){i=Math.max(1e-4,i);const o=2/i,l=o*a,c=1/(1+l+.48*l*l+.235*l*l*l);let u=e.x,d=e.y,h=e.z,f=n.x-u,p=n.y-d,g=n.z-h;const _=u,m=d,v=h,y=s*i,b=y*y,S=f*f+p*p+g*g;if(S>b){const U=Math.sqrt(S);f=f/U*y,p=p/U*y,g=g/U*y}u=n.x-f,d=n.y-p,h=n.z-g;const x=(t.x+o*f)*a,M=(t.y+o*p)*a,C=(t.z+o*g)*a;t.x=(t.x-o*x)*c,t.y=(t.y-o*M)*c,t.z=(t.z-o*C)*c,r.x=u+(f+x)*c,r.y=d+(p+M)*c,r.z=h+(g+C)*c;const w=_-n.x,E=m-n.y,R=v-n.z,L=r.x-_,O=r.y-m,D=r.z-v;return w*L+E*O+R*D>0&&(r.x=_,r.y=m,r.z=v,t.x=(r.x-_)/a,t.y=(r.y-m)/a,t.z=(r.z-v)/a),r}function $p(n,e){e.set(0,0),n.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=n.length,e.y/=n.length}function Wp(n,e){return ra(n)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class n3{constructor(){this._listeners={}}addEventListener(e,t){const i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){const i=this._listeners;return i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){const s=this._listeners[e];if(s!==void 0){const a=s.indexOf(t);a!==-1&&s.splice(a,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const i=this._listeners[e.type];if(i!==void 0){e.target=this;const s=i.slice(0);for(let a=0,r=s.length;a{},this._enabled=!0,this._state=$.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Zr.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new nt.Vector3,this._focalOffsetVelocity=new nt.Vector3,this._zoomVelocity={value:0},this._truckInternal=(m,v,y,b)=>{let S,x;if(za(this._camera)){const M=pt.copy(this._camera.position).sub(this._target),C=this._camera.getEffectiveFOV()*ml,w=M.length()*Math.tan(C*.5);S=this.truckSpeed*m*w/this._elementRect.height,x=this.truckSpeed*v*w/this._elementRect.height}else if(ra(this._camera)){const M=this._camera;S=this.truckSpeed*m*(M.right-M.left)/M.zoom/this._elementRect.width,x=this.truckSpeed*v*(M.top-M.bottom)/M.zoom/this._elementRect.height}else return;b?(y?this.setFocalOffset(this._focalOffsetEnd.x+S,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(S,0,!0),this.forward(-x,!0)):y?this.setFocalOffset(this._focalOffsetEnd.x+S,this._focalOffsetEnd.y+x,this._focalOffsetEnd.z,!0):this.truck(S,x,!0)},this._rotateInternal=(m,v)=>{const y=Jr*this.azimuthRotateSpeed*m/this._elementRect.height,b=Jr*this.polarRotateSpeed*v/this._elementRect.height;this.rotate(y,b,!0)},this._dollyInternal=(m,v,y)=>{const b=Math.pow(.95,-m*this.dollySpeed),S=this._sphericalEnd.radius,x=this._sphericalEnd.radius*b,M=Gi(x,this.minDistance,this.maxDistance),C=M-x;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(x,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(C,!0),this._dollyToNoClamp(M,!0)):this._dollyToNoClamp(M,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?x:M)-S,this._dollyControlCoord.set(v,y)),this._lastDollyDirection=Math.sign(-m)},this._zoomInternal=(m,v,y)=>{const b=Math.pow(.95,m*this.dollySpeed),S=this._zoom,x=this._zoom*b;this.zoomTo(x,!0),this.dollyToCursor&&(this._changedZoom+=x-S,this._dollyControlCoord.set(v,y))},typeof nt>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new nt.Quaternion().setFromUnitVectors(this._camera.up,Nu),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=$.NONE,this._target=new nt.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new nt.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new nt.Spherical().setFromVector3(pt.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new nt.Vector3,new nt.Vector3,new nt.Vector3,new nt.Vector3],this._updateNearPlaneCorners(),this._boundary=new nt.Box3(new nt.Vector3(-1/0,-1/0,-1/0),new nt.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new nt.Vector2,this.mouseButtons={left:$.ROTATE,middle:$.DOLLY,right:$.TRUCK,wheel:za(this._camera)?$.DOLLY:ra(this._camera)?$.ZOOM:$.NONE},this.touches={one:$.TOUCH_ROTATE,two:za(this._camera)?$.TOUCH_DOLLY_TRUCK:ra(this._camera)?$.TOUCH_ZOOM_TRUCK:$.NONE,three:$.TOUCH_TRUCK};const i=new nt.Vector2,s=new nt.Vector2,a=new nt.Vector2,r=m=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const b=this._domElement.getBoundingClientRect(),S=m.clientX/b.width,x=m.clientY/b.height;if(Sthis._interactiveArea.right||xthis._interactiveArea.bottom)return}const v=m.pointerType!=="mouse"?null:(m.buttons&Xt.LEFT)===Xt.LEFT?Xt.LEFT:(m.buttons&Xt.MIDDLE)===Xt.MIDDLE?Xt.MIDDLE:(m.buttons&Xt.RIGHT)===Xt.RIGHT?Xt.RIGHT:null;if(v!==null){const b=this._findPointerByMouseButton(v);b&&this._disposePointer(b)}if((m.buttons&Xt.LEFT)===Xt.LEFT&&this._lockedPointer)return;const y={pointerId:m.pointerId,clientX:m.clientX,clientY:m.clientY,deltaX:0,deltaY:0,mouseButton:v};this._activePointers.push(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,h(m)},o=m=>{m.cancelable&&m.preventDefault();const v=m.pointerId,y=this._lockedPointer||this._findPointerById(v);if(y){if(y.clientX=m.clientX,y.clientY=m.clientY,y.deltaX=m.movementX,y.deltaY=m.movementY,this._state=0,m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(m.buttons&Xt.LEFT)===Xt.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(m.buttons&Xt.MIDDLE)===Xt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(m.buttons&Xt.RIGHT)===Xt.RIGHT&&(this._state=this._state|this.mouseButtons.right);f()}},l=m=>{const v=this._findPointerById(m.pointerId);if(!(v&&v===this._lockedPointer)){if(v&&this._disposePointer(v),m.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=$.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=$.NONE;p()}};let c=-1;const u=m=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===$.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const x=this._domElement.getBoundingClientRect(),M=m.clientX/x.width,C=m.clientY/x.height;if(Mthis._interactiveArea.right||Cthis._interactiveArea.bottom)return}if(m.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===$.ROTATE||this.mouseButtons.wheel===$.TRUCK){const x=performance.now();c-x<1e3&&this._getClientRect(this._elementRect),c=x}const v=s3?-1:-3,y=m.deltaMode===1||m.ctrlKey?m.deltaY/v:m.deltaY/(v*10),b=this.dollyToCursor?(m.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,S=this.dollyToCursor?(m.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case $.ROTATE:{this._rotateInternal(m.deltaX,m.deltaY),this._isUserControllingRotate=!0;break}case $.TRUCK:{this._truckInternal(m.deltaX,m.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case $.SCREEN_PAN:{this._truckInternal(m.deltaX,m.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case $.OFFSET:{this._truckInternal(m.deltaX,m.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case $.DOLLY:{this._dollyInternal(-y,b,S),this._isUserControllingDolly=!0;break}case $.ZOOM:{this._zoomInternal(-y,b,S),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},d=m=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===r_.ACTION.NONE){const v=m instanceof PointerEvent?m.pointerId:0,y=this._findPointerById(v);y&&this._disposePointer(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}m.preventDefault()}},h=m=>{if(!this._enabled)return;if($p(this._activePointers,Zn),this._getClientRect(this._elementRect),i.copy(Zn),s.copy(Zn),this._activePointers.length>=2){const y=Zn.x-this._activePointers[1].clientX,b=Zn.y-this._activePointers[1].clientY,S=Math.sqrt(y*y+b*b);a.set(0,S);const x=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,M=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;s.set(x,M)}if(this._state=0,!m)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in m&&m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(m.buttons&Xt.LEFT)===Xt.LEFT&&(this._state=this._state|this.mouseButtons.left),(m.buttons&Xt.MIDDLE)===Xt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(m.buttons&Xt.RIGHT)===Xt.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&$.TRUCK)===$.TRUCK||(this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&$.DOLLY)===$.DOLLY||(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&$.ZOOM)===$.ZOOM||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},f=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,$p(this._activePointers,Zn);const v=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,y=v?-v.deltaX:s.x-Zn.x,b=v?-v.deltaY:s.y-Zn.y;if(s.copy(Zn),((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(y,b),this._isUserControllingRotate=!0),(this._state&$.DOLLY)===$.DOLLY||(this._state&$.ZOOM)===$.ZOOM){const S=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0,M=this.dollyDragInverted?-1:1;(this._state&$.DOLLY)===$.DOLLY?(this._dollyInternal(M*b*Fu,S,x),this._isUserControllingDolly=!0):(this._zoomInternal(M*b*Fu,S,x),this._isUserControllingZoom=!0)}if((this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE){const S=Zn.x-this._activePointers[1].clientX,x=Zn.y-this._activePointers[1].clientY,M=Math.sqrt(S*S+x*x),C=a.y-M;a.set(0,M);const w=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,E=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET?(this._dollyInternal(C*Fu,w,E),this._isUserControllingDolly=!0):(this._zoomInternal(C*Fu,w,E),this._isUserControllingZoom=!0)}((this._state&$.TRUCK)===$.TRUCK||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(y,b,!1,!1),this._isUserControllingTruck=!0),((this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(y,b,!1,!0),this._isUserControllingTruck=!0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(y,b,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},p=()=>{$p(this._activePointers,Zn),s.copy(Zn),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",g),this._domElement.ownerDocument.addEventListener("pointerlockerror",_),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),h())},this.unlockPointer=()=>{var m,v,y;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(m=this._domElement)===null||m===void 0||m.ownerDocument.exitPointerLock(),(v=this._domElement)===null||v===void 0||v.ownerDocument.removeEventListener("pointerlockchange",g),(y=this._domElement)===null||y===void 0||y.ownerDocument.removeEventListener("pointerlockerror",_),this.cancel()};const g=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},_=()=>{this.unlockPointer()};this._addAllEventListeners=m=>{this._domElement=m,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",d)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",d),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",g),this._domElement.ownerDocument.removeEventListener("pointerlockerror",_))},this.cancel=()=>{this._state!==$.NONE&&(this._state=$.NONE,this._activePointers.length=0,p())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=Gi(e.width,0,1),this._interactiveArea.height=Gi(e.height,0,1),this._interactiveArea.x=Gi(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=Gi(e.y,0,1-this._interactiveArea.height)}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}rotate(e,t,i=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+t,i)}rotateAzimuthTo(e,t=!1){return this.rotateTo(e,this._sphericalEnd.phi,t)}rotatePolarTo(e,t=!1){return this.rotateTo(this._sphericalEnd.theta,e,t)}rotateTo(e,t,i=!1){this._isUserControllingRotate=!1;const s=Gi(e,this.minAzimuthAngle,this.maxAzimuthAngle),a=Gi(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=s,this._sphericalEnd.phi=a,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,i||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!i||Rt(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Rt(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Zr.NONE,this._changedDolly=0,this._dollyToNoClamp(Gi(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const i=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),o=Rt(r,this._spherical.radius);if(!(i>e)&&o)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,r)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const a=!t||Rt(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(a)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(yl).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const i=!t||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(i)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=Gi(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const i=!t||Rt(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(i)}pan(e,t,i=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,t,i)}truck(e,t,i=!1){this._camera.updateMatrix(),os.setFromMatrixColumn(this._camera.matrix,0),ls.setFromMatrixColumn(this._camera.matrix,1),os.multiplyScalar(e),ls.multiplyScalar(-t);const s=pt.copy(os).add(ls),a=Mt.copy(this._targetEnd).add(s);return this.moveTo(a.x,a.y,a.z,i)}forward(e,t=!1){pt.setFromMatrixColumn(this._camera.matrix,0),pt.crossVectors(this._camera.up,pt),pt.multiplyScalar(e);const i=Mt.copy(this._targetEnd).add(pt);return this.moveTo(i.x,i.y,i.z,t)}elevate(e,t=!1){return pt.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+pt.x,this._targetEnd.y+pt.y,this._targetEnd.z+pt.z,t)}moveTo(e,t,i,s=!1){this._isUserControllingTruck=!1;const a=pt.set(e,t,i).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,a,this.boundaryFriction),this._needsUpdate=!0,s||this._target.copy(this._targetEnd);const r=!s||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(e,t,i,s=!1){const o=pt.set(e,t,i).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(o.x,o.y,o.z,s)}fitToBox(e,t,{cover:i=!1,paddingLeft:s=0,paddingRight:a=0,paddingBottom:r=0,paddingTop:o=0}={}){const l=[],c=e.isBox3?eo.copy(e):eo.setFromObject(e);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=Gv(this._sphericalEnd.theta,Vv),d=Gv(this._sphericalEnd.phi,Vv);l.push(this.rotateTo(u,d,t));const h=pt.setFromSpherical(this._sphericalEnd).normalize(),f=Yv.setFromUnitVectors(h,Kp),p=Rt(Math.abs(h.y),1);p&&f.multiply(Yp.setFromAxisAngle(Nu,u)),f.multiply(this._yAxisUpSpaceInverse);const g=qv.makeEmpty();Mt.copy(c.min).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.min).setX(c.max.x).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.min).setY(c.max.y).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).setZ(c.min.z).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.min).setZ(c.max.z).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).setY(c.min.y).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).setX(c.min.x).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).applyQuaternion(f),g.expandByPoint(Mt),g.min.x-=s,g.min.y-=r,g.max.x+=a,g.max.y+=o,f.setFromUnitVectors(Kp,h),p&&f.premultiply(Yp.invert()),f.premultiply(this._yAxisUpSpace);const _=g.getSize(pt),m=g.getCenter(Mt).applyQuaternion(f);if(za(this._camera)){const v=this.getDistanceToFitBox(_.x,_.y,_.z,i);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.dollyTo(v,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(ra(this._camera)){const v=this._camera,y=v.right-v.left,b=v.top-v.bottom,S=i?Math.max(y/_.x,b/_.y):Math.min(y/_.x,b/_.y);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.zoomTo(S,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const i=[],a="isObject3D"in e?r_.createBoundingSphere(e,qp):qp.copy(e);if(i.push(this.moveTo(a.center.x,a.center.y,a.center.z,t)),za(this._camera)){const r=this.getDistanceToFitSphere(a.radius);i.push(this.dollyTo(r,t))}else if(ra(this._camera)){const r=this._camera.right-this._camera.left,o=this._camera.top-this._camera.bottom,l=2*a.radius,c=Math.min(r/l,o/l);i.push(this.zoomTo(c,t))}return i.push(this.setFocalOffset(0,0,0,t)),Promise.all(i)}setLookAt(e,t,i,s,a,r,o=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Zr.NONE,this._changedDolly=0;const l=Mt.set(s,a,r),c=pt.set(e,t,i);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(c.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,o||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!o||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold)&&Rt(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Rt(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Rt(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(e,t,i,s,a,r,o,l,c,u,d,h,f,p=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Zr.NONE,this._changedDolly=0;const g=pt.set(s,a,r),_=Mt.set(e,t,i);Mi.setFromVector3(_.sub(g).applyQuaternion(this._yAxisUpSpace));const m=Qr.set(u,d,h),v=Mt.set(o,l,c);vl.setFromVector3(v.sub(m).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(g.lerp(m,f));const y=vl.theta-Mi.theta,b=vl.phi-Mi.phi,S=vl.radius-Mi.radius;this._sphericalEnd.set(Mi.radius+S*f,Mi.phi+b*f,Mi.theta+y*f),this.normalizeRotations(),this._needsUpdate=!0,p||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const x=!p||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold)&&Rt(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Rt(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Rt(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(x)}setPosition(e,t,i,s=!1){return this.setLookAt(e,t,i,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,s)}setTarget(e,t,i,s=!1){const a=this.getPosition(pt),r=this.setLookAt(a.x,a.y,a.z,e,t,i,s);return this._sphericalEnd.phi=Gi(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(e,t,i,s=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,t,i),this._needsUpdate=!0,s||this._focalOffset.copy(this._focalOffsetEnd);const a=!s||Rt(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&Rt(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&Rt(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(a)}setOrbitPoint(e,t,i){this._camera.updateMatrixWorld(),os.setFromMatrixColumn(this._camera.matrixWorldInverse,0),ls.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Ha.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const s=pt.set(e,t,i),a=s.distanceTo(this._camera.position),r=s.sub(this._camera.position);os.multiplyScalar(r.x),ls.multiplyScalar(r.y),Ha.multiplyScalar(r.z),pt.copy(os).add(ls).add(Ha),pt.z=pt.z+a,this.dollyTo(a,!1),this.setFocalOffset(-pt.x,pt.y,-pt.z,!1),this.moveTo(e,t,i,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,t,i,s){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new nt.Vector4,typeof e=="number"?this._viewport.set(e,t,i,s):this._viewport.copy(e)}getDistanceToFitBox(e,t,i,s=!1){if(Wp(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const a=e/t,r=this._camera.getEffectiveFOV()*ml,o=this._camera.aspect;return((s?a>o:at.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(t=>t.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,t,i){const s=t.lengthSq();if(s===0)return e;const a=Mt.copy(t).add(e),o=this._boundary.clampPoint(a,Qr).sub(a),l=o.lengthSq();if(l===0)return e.add(t);if(l===s)return e;if(i===0)return e.add(t).add(o);{const c=1+i*l/t.dot(o);return e.add(Mt.copy(t).multiplyScalar(c)).add(o.multiplyScalar(1-i))}}_updateNearPlaneCorners(){if(za(this._camera)){const e=this._camera,t=e.near,i=e.getEffectiveFOV()*ml,s=Math.tan(i*.5)*t,a=s*e.aspect;this._nearPlaneCorners[0].set(-a,-s,0),this._nearPlaneCorners[1].set(a,-s,0),this._nearPlaneCorners[2].set(a,s,0),this._nearPlaneCorners[3].set(-a,s,0)}else if(ra(this._camera)){const e=this._camera,t=1/e.zoom,i=e.left*t,s=e.right*t,a=e.top*t,r=e.bottom*t;this._nearPlaneCorners[0].set(i,a,0),this._nearPlaneCorners[1].set(s,a,0),this._nearPlaneCorners[2].set(s,r,0),this._nearPlaneCorners[3].set(i,r,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||Wp(this._camera,"_collisionTest"))return e;const i=this._getTargetDirection(yl);jp.lookAt(Wv,i,this._camera.up);for(let s=0;s<4;s++){const a=Mt.copy(this._nearPlaneCorners[s]);a.applyMatrix4(jp);const r=Qr.addVectors(this._target,a);Uu.set(r,i),Uu.far=this._spherical.radius+1;const o=Uu.intersectObjects(this.colliderMeshes);o.length!==0&&o[0].distance{const i=()=>{this.removeEventListener("rest",i),t()};this.addEventListener("rest",i)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new nt.Sphere){const i=t,s=i.center;eo.makeEmpty(),e.traverseVisible(r=>{r.isMesh&&eo.expandByObject(r)}),eo.getCenter(s);let a=0;return e.traverseVisible(r=>{if(!r.isMesh)return;const o=r;if(!o.geometry)return;const l=o.geometry.clone();l.applyMatrix4(o.matrixWorld);const u=l.attributes.position;for(let d=0,h=u.count;di.preventDefault()),this.isFollowingViewer=!1,this.followTargetPosition=new T,this.followTargetQuaternion=new ht,this.followPositionLerpFactor=.12,this.followRotationSlerpFactor=.1,this.hasFollowTarget=!1,this.isRightMouseDown=!1,this.lastMouseX=null,this.lastMouseY=null,this.savedCameraState=null,this.isInReplayMode=!1}setMode(e){if(this.mode=e,e==="ballOrbit"){if(this.controls.enabled=!0,this.lastBallOrbitPos=null,this.ballOrbitScrollHandler||(this.ballOrbitScrollHandler=t=>{if(this.mode==="ballOrbit"&&!this.isFollowingViewer){t.preventDefault();const i=Math.max(this.controls.distance*.2,100);t.deltaY>0?this.controls.dolly(-i,!0):this.controls.dolly(i,!0)}},this.domElement.addEventListener("wheel",this.ballOrbitScrollHandler,{passive:!1})),this.targetBall){const t=this.targetBall.position;this.camera.position.distanceTo(t),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}return}if(e==="free"){if(this.controls.enabled=!1,!this.freeCamKeys){this.freeCamKeys={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},this.freeCamSpeed=2e3,this.freeCamRotation={yaw:0,pitch:0};const t=new T;this.camera.getWorldDirection(t),this.freeCamRotation.yaw=Math.atan2(t.x,t.z),this.freeCamRotation.pitch=Math.asin(-t.y),this.onKeyDown=i=>this.handleFreeCamKeyDown(i),this.onKeyUp=i=>this.handleFreeCamKeyUp(i),this.onMouseMove=i=>this.handleFreeCamMouseMove(i),this.onMouseDown=i=>{i.button===2&&this.mode==="free"&&!this.isFollowingViewer&&(this.isRightMouseDown=!0,this.domElement.requestPointerLock?.())},this.onMouseUp=i=>{i.button===2&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.())},this.onPointerLockChange=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onMouseLeave=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onWindowBlur=()=>{this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1)},this.onVisibilityChange=()=>{document.hidden&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1))},document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.onKeyUp),document.addEventListener("mousemove",this.onMouseMove),this.domElement.addEventListener("mousedown",this.onMouseDown),document.addEventListener("mouseup",this.onMouseUp),document.addEventListener("pointerlockchange",this.onPointerLockChange),this.domElement.addEventListener("mouseleave",this.onMouseLeave),window.addEventListener("blur",this.onWindowBlur),document.addEventListener("visibilitychange",this.onVisibilityChange)}this.isRightMouseDown=!1}else this.controls.enabled=!1,this.lastIsBallCam=null,this.currentBlend=0,this.targetBlend=0}setTargetCar(e){if(this.targetCar!==e&&(this.currentBallCamAngle=null,this.targetCar&&e)){this.targetHandoff={elapsed:0,duration:a3,startPosition:this.camera.position.clone(),startQuaternion:this.camera.quaternion.clone()};const t=new T().subVectors(this.camera.position,e.position);t.y=0,t.length()>.01&&(t.normalize(),this.smoothedCarYaw=Math.atan2(-t.x,-t.z)),this.lastCarPos&&this.lastCarPos.copy(e.position)}this.targetCar=e}setTargetBall(e){this.targetBall=e}handleFreeCamKeyDown(e){if(this.mode!=="free"||this.isFollowingViewer)return;const t=e.target;if(!(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable))switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!0;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!0;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!0;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!0;break;case"Space":this.freeCamKeys.up=!0;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!0;break}}handleFreeCamKeyUp(e){switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!1;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!1;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!1;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!1;break;case"Space":this.freeCamKeys.up=!1;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!1;break}}handleFreeCamMouseMove(e){if(this.mode!=="free"||!this.isRightMouseDown||this.isFollowingViewer)return;const t=e.movementX||0,i=e.movementY||0,s=.003;this.freeCamRotation.yaw-=t*s,this.freeCamRotation.pitch+=i*s,this.freeCamRotation.pitch=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,this.freeCamRotation.pitch))}updateFreeCam(e){if(!this.freeCamKeys)return;const t=new T(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));t.normalize();const i=new T(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));i.normalize();const s=new T(Math.sin(this.freeCamRotation.yaw-Math.PI/2),0,Math.cos(this.freeCamRotation.yaw-Math.PI/2)),a=new T(0,1,0),r=new T,o=this.freeCamSpeed*e;this.freeCamKeys.forward&&r.add(i.clone().multiplyScalar(o)),this.freeCamKeys.backward&&r.add(i.clone().multiplyScalar(-o)),this.freeCamKeys.right&&r.add(s.clone().multiplyScalar(o)),this.freeCamKeys.left&&r.add(s.clone().multiplyScalar(-o)),this.freeCamKeys.up&&r.add(a.clone().multiplyScalar(o)),this.freeCamKeys.down&&r.add(a.clone().multiplyScalar(-o)),r.length()>0&&r.normalize().multiplyScalar(o),this.camera.position.add(r);const l=this.camera.position.clone().add(t);this.camera.lookAt(l),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,l.x,l.y,l.z,!1)}update(e,t=!0){if(this.isFollowingViewer){this.updateFollowInterpolation(e);return}if(this.mode==="free"){this.updateFreeCam(e),this.controls.update(e);return}if(this.mode==="ballOrbit"){if(this.targetBall){const p=this.targetBall.position;this.lastBallOrbitPos||(this.lastBallOrbitPos=p.clone());const g=new T().subVectors(p,this.lastBallOrbitPos);if(this.controls.setTarget(p.x,p.y,p.z,!1),g.lengthSq()>.01){const _=new T;this.controls.getPosition(_);const m=_.x+g.x,v=_.y+g.y,y=_.z+g.z;this.controls.setPosition(m,v,y,!1),this.lastBallOrbitPos.copy(p)}}this.controls.update(e);return}if(!this.targetCar){this.controls.update(e);return}const i=this.targetCar.position.clone(),s=this.targetCar.quaternion;if(this.lastIsBallCam!==null&&this.lastIsBallCam!==t&&!t){const p=new T().subVectors(this.camera.position,i);p.y=0,p.length()>.01&&(p.normalize(),this.smoothedCarYaw=Math.atan2(-p.x,-p.z))}this.lastIsBallCam=t;const a=this.calculateCarCamPosition(i,s,e),r=this.calculateBallCamPosition(i,s,e);this.targetBlend=t?1:0;const o=Math.max(.15,Math.min(.6,this.baseDuration/this.transitionSpeed)),l=e/o;this.currentBlendthis.targetBlend&&(this.currentBlend=Math.max(this.currentBlend-l,this.targetBlend));const c=this.currentBlend,u=c*c*(3-2*c),d=new T().lerpVectors(a.cameraPos,r.cameraPos,u);this._tempMatrix.lookAt(a.cameraPos,a.lookTarget,new T(0,1,0)),this._tempQuatCarCam.setFromRotationMatrix(this._tempMatrix),this._tempMatrix.lookAt(r.cameraPos,r.lookTarget,new T(0,1,0)),this._tempQuatBallCam.setFromRotationMatrix(this._tempMatrix),this._tempQuatCarCam.dot(this._tempQuatBallCam)<0&&this._tempQuatBallCam.set(-this._tempQuatBallCam.x,-this._tempQuatBallCam.y,-this._tempQuatBallCam.z,-this._tempQuatBallCam.w);const h=new ht().slerpQuaternions(this._tempQuatCarCam,this._tempQuatBallCam,u);if(this.targetHandoff){this.targetHandoff.elapsed+=e;const p=Math.min(1,this.targetHandoff.elapsed/this.targetHandoff.duration),g=p*p*(3-2*p),_=d.clone(),m=h.clone();d.lerpVectors(this.targetHandoff.startPosition,_,g),h.slerpQuaternions(this.targetHandoff.startQuaternion,m,g),p>=1&&(this.targetHandoff=null)}if(this.camera.position.copy(d),this.camera.quaternion.copy(h),this.followAngle!==0){const p=this.followAngle*Math.PI/180;this.camera.rotateX(-p)}this.currentCamPos||(this.currentCamPos=new T),this.currentLookTarget||(this.currentLookTarget=new T),this.currentCamPos.copy(d);const f=new T(0,0,-1).applyQuaternion(this.camera.quaternion);this.currentLookTarget.copy(d).add(f.multiplyScalar(100)),this.enforceMinHeight()}calculateBallCamPosition(e,t,i=1/60){if(!this.targetBall)return this.calculateCarCamPosition(e,t,i);const s=this.targetBall.position.clone(),a=new T().subVectors(e,s);a.y=0,a.normalize();const r=e.clone().add(a.multiplyScalar(this.followDistance)),o=s.y-e.y,c=Math.min(1,Math.max(0,o/800));r.y=e.y+this.followHeight-c*100,r.y.01)s.normalize(),u=Math.atan2(s.x,s.z);else if(a>.05){s.normalize();let y=Math.atan2(s.x,s.z)-o;for(;y>Math.PI;)y-=Math.PI*2;for(;y<-Math.PI;)y+=Math.PI*2;Math.abs(y)>Math.PI/2?u=o+Math.PI:u=o}else u=o;this.lastCarPos.copy(e),this.smoothedCarYaw===void 0&&(this.smoothedCarYaw=u);let d=u-this.smoothedCarYaw;for(;d>Math.PI;)d-=Math.PI*2;for(;d<-Math.PI;)d+=Math.PI*2;const h=c?this.swivelSpeed*.4:this.swivelSpeed;this.smoothedCarYaw+=d*Math.min(1,h*(1/60));const f=-Math.sin(this.smoothedCarYaw),p=-Math.cos(this.smoothedCarYaw),g=new T(e.x+f*this.followDistance,e.y+this.followHeight,e.z+p*this.followDistance);g.yMath.PI;)s-=Math.PI*2;for(;s<-Math.PI;)s+=Math.PI*2;this.followCurrentOrbitParams.azimuth+=s*.15,this.followCurrentOrbitParams.polar+=(this.followTargetOrbitParams.polar-this.followCurrentOrbitParams.polar)*.15,this.controls.setTarget(t.x,t.y,t.z,!1),this.controls.dollyTo(this.followCurrentOrbitParams.distance,!1),this.controls.rotateTo(this.followCurrentOrbitParams.azimuth,this.followCurrentOrbitParams.polar,!1),this.controls.update(e)}}else{if(this.camera.position.lerp(this.followTargetPosition,this.followPositionLerpFactor),this.camera.quaternion.slerp(this.followTargetQuaternion,this.followRotationSlerpFactor),this.freeCamRotation){const i=new T;this.camera.getWorldDirection(i),this.freeCamRotation.yaw=Math.atan2(i.x,i.z),this.freeCamRotation.pitch=Math.asin(-i.y)}const t=new T;this.camera.getWorldDirection(t),t.multiplyScalar(100).add(this.camera.position),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}}setDefaultFreecamPosition(){if(this.camera.position.copy(this.defaultFreecamPosition),this.camera.lookAt(this.defaultFreecamLookAt),this.freeCamRotation){const e=new T;this.camera.getWorldDirection(e),this.freeCamRotation.yaw=Math.atan2(e.x,e.z),this.freeCamRotation.pitch=Math.asin(-e.y)}this.controls.setLookAt(this.defaultFreecamPosition.x,this.defaultFreecamPosition.y,this.defaultFreecamPosition.z,this.defaultFreecamLookAt.x,this.defaultFreecamLookAt.y,this.defaultFreecamLookAt.z,!1)}getIsPointerLocked(){return this.isPointerLocked||!1}setPointerLockCallback(e){this.onPointerLockStateChange=e}dispose(){this.controls.dispose(),this.ballOrbitScrollHandler&&this.domElement.removeEventListener("wheel",this.ballOrbitScrollHandler),this.onKeyDown&&document.removeEventListener("keydown",this.onKeyDown),this.onKeyUp&&document.removeEventListener("keyup",this.onKeyUp),this.onMouseMove&&document.removeEventListener("mousemove",this.onMouseMove),this.onMouseDown&&this.domElement.removeEventListener("mousedown",this.onMouseDown),this.onMouseUp&&document.removeEventListener("mouseup",this.onMouseUp),this.onPointerLockChange&&document.removeEventListener("pointerlockchange",this.onPointerLockChange),this.onMouseLeave&&this.domElement.removeEventListener("mouseleave",this.onMouseLeave),this.onWindowBlur&&window.removeEventListener("blur",this.onWindowBlur),this.onVisibilityChange&&document.removeEventListener("visibilitychange",this.onVisibilityChange)}}function Zv(n){if(n.pitch===void 0||n.angle!==void 0)return n;const{pitch:e,...t}=n;return{...t,angle:e}}const o3={distance:260,height:90,angle:-4,stiffness:.45,swivelSpeed:4.3,transitionSpeed:1.3,fov:110};function l3(n={}){let e=null,t=null,i=n.mode??(n.follow?"follow":"orbit"),s=n.follow??null,a=n.ballCam??null,r=a??!0,o=Zv({...n.settings}),l=1;const c=n.useRecordedSettings!==!1;let u=null;const d=new T;let h=!1;function f(){if(!(!t||!e)){if(t.player.controls.enabled=i==="orbit",i==="free")e.setMode("free");else if(i==="ballOrbit"){const y=_();y&&e.setTargetBall(y),e.setMode("ballOrbit")}else e.setMode("car");u=null}}function p(){return!c||!t||!s?null:t.player.adapter.getPlayer(s)?.cameraSettings??null}function g(){const y={...o3,...p(),...o};return l!==1&&y.distance!==void 0&&(y.distance*=l),y}function _(){if(!t)return null;const y=t.player.actorManager;return y.ballActorId!=null?y.actors[y.ballActorId]??null:null}function m(y){const b=g().fov;if(!b)return;const S=b*Math.PI/180,x=16/9,M=2*Math.atan(Math.tan(S/2)/x),C=2*Math.atan(Math.tan(S/2)/y.aspect),w=Math.max(M,C)*180/Math.PI;Math.abs(y.fov-w)>.1&&(y.fov=w,y.updateProjectionMatrix())}function v(y,b){if(!e)return;if(i==="free"){o.freeCamSpeed&&(e.freeCamSpeed=o.freeCamSpeed),e.update(b);return}if(i==="ballOrbit"){y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.update(b);return}const x=(s?y.cars.find(C=>C.name===s):void 0)?.object3d??null;if(!x){e.update(b);return}e.setTargetCar(x),y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.setFollowSettings(g());const M=s?y.player.adapter.getPlayer(s):void 0;r=a??M?.isBallCam??!0,d.copy(x.position),h=!0,e.update(b,r)}return{id:"camera",setup(y){t=y,e=new r3(y.camera,y.renderer.domElement),f()},beforeRender(y){if(!e||(m(y.camera),i==="orbit"))return;const b=performance.now(),S=u===null?1/60:Math.min(.1,(b-u)/1e3);u=b,v(y,S)},teardown(){i="orbit",t&&(t.player.controls.enabled=!0),e?.dispose(),e=null,t=null},setMode(y){y!==i&&(i=y,f())},getMode(){return i},follow(y){s=y,i="follow",f()},release(){i="orbit",t&&h&&t.player.controls.target.copy(d),f()},getTarget(){return s},setBallCam(y){a=y,y!==null&&(r=y)},getBallCam(){return r},setCameraSettings(y){o=y===null?{}:{...o,...Zv(y)}},setDistanceScale(y){l=Math.max(.25,y)},getDistanceScale(){return l},getCameraSettings(){return g()},getRecordedSettings(){const y=p();return y?{...y}:null}}}const c3={"top-left":"top: 8px; left: 8px;","top-right":"top: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;"};function u3(n={}){const e=n.corner??"top-right",t=n.updateIntervalMs??500,i=()=>typeof n.mount=="function"?n.mount():n.mount??null;let s=null,a=null,r=null,o=0,l=performance.now(),c=0,u=0;const d=typeof n.onSample=="function";return{id:"fps-overlay",setup(h){if(l=performance.now(),o=0,u=h.player.getState().frameIndex,c=u,d)return;const f=i(),p=f!=null;s=document.createElement("div"),s.className="player-fps-overlay",s.style.cssText=p?` + `,transparent:!0,depthWrite:!1,blending:Vt});this.points=new fr(t,o),this.points.frustumCulled=!1,this.nextParticleIndex=0}setActive(e){this.active=e}emit(e,t,i,s=1){if(!this.active)return;const a=Math.floor(Math.random()*3)+3,r=Math.max(1,Math.round(a*s));for(let o=0;o=o.maxLife){o.active=!1,i[r]=0,s[r]=0;continue}t[r*3]+=o.velocity.x*e,t[r*3+1]+=o.velocity.y*e,t[r*3+2]+=o.velocity.z*e;const l=o.life/o.maxLife;i[r]=Math.pow(1-l,.5);const c=o.initialSize||3;s[r]=c*(1-l*.7),a[r*3]=1,a[r*3+1]=Math.max(.2,.9-l*.7),a[r*3+2]=Math.max(0,.4-l*.4),o.velocity.y+=20*e}this.geometry.attributes.position.needsUpdate=!0,this.geometry.attributes.alpha.needsUpdate=!0,this.geometry.attributes.size.needsUpdate=!0,this.geometry.attributes.color.needsUpdate=!0}addToScene(e){e.add(this.points)}removeFromScene(e){e.remove(this.points)}dispose(){this.geometry.dispose(),this.points.material.dispose()}}class xN{constructor(e,t,i,s){this.scene=e,this.team=t,this.trailWidth=i,this.trailLength=s,this.active=!0,this.dying=!1,this.deathTime=0,this.maxDeathTime=1.5,this.teamColors={0:new Ye(.3,.6,1,.9),1:new Ye(1,.5,.15,.9)},this.leftTarget=new et,this.rightTarget=new et,e.add(this.leftTarget),e.add(this.rightTarget),this.leftTrail=this.createTrail(this.leftTarget),this.rightTrail=this.createTrail(this.rightTarget),this.updateColors(),this.leftTrail.activate(),this.rightTrail.activate()}createTrail(e){const t=new mt(this.scene,!1),i=mt.createBaseMaterial();i.blending=Vt,i.depthWrite=!1,i.side=ut;const s=this.trailWidth,a=[new T(0,0,0),new T(0,s,0),new T(-s/2,s/2,0),new T(s/2,s/2,0)];return t.initialize(i,this.trailLength,!1,0,a,e),t.setAdvanceFrequency(60),t.mesh&&(t.mesh.frustumCulled=!1),t}updateColors(){const e=this.teamColors[this.team]||this.teamColors[0],t=new Ye(e.x*.3,e.y*.3,e.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(e),this.leftTrail.material.uniforms.tailColor.value.copy(t)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(e),this.rightTrail.material.uniforms.tailColor.value.copy(t))}startDying(){this.dying||(this.dying=!0,this.deathTime=0,this.leftTrail.pause(),this.rightTrail.pause())}updatePosition(e,t,i){this.dying||(this.leftTarget.position.copy(e),this.rightTarget.position.copy(t),this.leftTarget.quaternion.copy(i),this.rightTarget.quaternion.copy(i),this.leftTarget.updateMatrixWorld(),this.rightTarget.updateMatrixWorld())}update(e){if(this.dying){this.deathTime+=e;const i=1-Math.min(1,this.deathTime/this.maxDeathTime),s=this.teamColors[this.team]||this.teamColors[0],a=new Ye(s.x,s.y,s.z,s.w*i),r=new Ye(s.x*.3,s.y*.3,s.z*.3,0);this.leftTrail?.material&&(this.leftTrail.material.uniforms.headColor.value.copy(a),this.leftTrail.material.uniforms.tailColor.value.copy(r)),this.rightTrail?.material&&(this.rightTrail.material.uniforms.headColor.value.copy(a),this.rightTrail.material.uniforms.tailColor.value.copy(r)),this.deathTime>=this.maxDeathTime&&(this.active=!1)}this.leftTrail.isActive&&this.leftTrail.update(e),this.rightTrail.isActive&&this.rightTrail.update(e)}dispose(){this.leftTrail.deactivate(),this.rightTrail.deactivate(),this.leftTrail.geometry&&this.leftTrail.geometry.dispose(),this.rightTrail.geometry&&this.rightTrail.geometry.dispose(),this.leftTrail.material&&this.leftTrail.material.dispose(),this.rightTrail.material&&this.rightTrail.material.dispose(),this.scene.remove(this.leftTarget),this.scene.remove(this.rightTarget)}}class wN{constructor(e,t=0){this.scene=e,this.team=t,this.active=!1,this.trailLength=80,this.trailWidth=15,this.arenaBounds={floor:0,ceiling:2044,wallX:4096,wallZ:5120},this.groundedThreshold=50,this.segments=[],this.currentSegment=null,this.wasGrounded=!0}setTeam(e){this.team!==e&&(this.team=e,this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.team=e,this.currentSegment.updateColors()))}setActive(e){e&&!this.active?(this.currentSegment=null,this.wasGrounded=!0):!e&&this.active&&this.currentSegment&&(this.currentSegment.startDying(),this.currentSegment=null),this.active=e}isGrounded(e){const t=this.groundedThreshold,i=this.arenaBounds;if(e.yi.ceiling-t)return{grounded:!0,surface:"ceiling",normal:new T(0,-1,0)};if(Math.abs(e.x)>i.wallX-t){const s=e.x>0?-1:1;return{grounded:!0,surface:"wall",normal:new T(s,0,0)}}if(Math.abs(e.z)>i.wallZ-t){const s=e.z>0?-1:1;return{grounded:!0,surface:"wall",normal:new T(0,0,s)}}return{grounded:!1,surface:null,normal:null}}emit(e,t,i){if(!this.active)return;const s=this.isGrounded(e);if(!s.grounded){this.currentSegment&&!this.currentSegment.dying&&(this.currentSegment.startDying(),this.currentSegment=null),this.wasGrounded=!1;return}(!this.wasGrounded||!this.currentSegment)&&(this.currentSegment&&!this.currentSegment.dying&&this.currentSegment.startDying(),this.currentSegment=new xN(this.scene,this.team,this.trailWidth,this.trailLength),this.segments.push(this.currentSegment)),this.wasGrounded=!0;const r=new T(-30,5,40),o=new T(-30,5,-40);r.applyQuaternion(t),o.applyQuaternion(t);const l=e.clone().add(r),c=e.clone().add(o),u=2;if(s.surface==="floor")l.y=u,c.y=u;else if(s.surface==="ceiling")l.y=this.arenaBounds.ceiling-u,c.y=this.arenaBounds.ceiling-u;else if(s.surface==="wall"){if(s.normal.x!==0){const d=s.normal.x>0?-this.arenaBounds.wallX+u:this.arenaBounds.wallX-u;l.x=d,c.x=d}else if(s.normal.z!==0){const d=s.normal.z>0?-this.arenaBounds.wallZ+u:this.arenaBounds.wallZ-u;l.z=d,c.z=d}}this.currentSegment.updatePosition(l,c,t)}update(e){for(let t=this.segments.length-1;t>=0;t--){const i=this.segments[t];i.update(e),i.active||(i.dispose(),this.segments.splice(t,1))}}addToScene(e){}removeFromScene(e){for(const t of this.segments)t.startDying();this.currentSegment=null}dispose(){for(const e of this.segments)e.dispose();this.segments=[],this.currentSegment=null}}class SN{constructor(e){this.scene=e,this.renderer=null,this.camera=null,this.explosions={active:[],goalEvents:new Map,demoEvents:new Map},this.boostTrails=new Map,this.supersonicTrails=new Map,this.ballTrail=null,fN()}setRenderContext(e,t){this.renderer=e,this.camera=t,mN(this.scene,e,t)}reset(){this.explosions.active.forEach(e=>e.removeFromScene(this.scene)),this.explosions.active=[],this.clearGoalExplosions(),this.boostTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.boostTrails.clear(),this.supersonicTrails.forEach(e=>{e.removeFromScene(this.scene),e.dispose()}),this.supersonicTrails.clear(),this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose(),this.ballTrail=null)}clearEvents(){this.explosions.goalEvents.clear(),this.explosions.demoEvents.clear()}setGoalEvents(e){this.explosions.goalEvents.clear();for(const t of e??[])Number.isFinite(t.frame)&&this.explosions.goalEvents.set(t.frame,{time:t.time,team:t.team??0,playerName:t.playerName??""})}resetBallTrail(){this.ballTrail&&this.ballTrail.reset()}clearGoalExplosions(){Gn&&Gn.clearActive();for(const e of this.explosions.active)e.removeFromScene(this.scene);this.explosions.active=[]}createBoostTrail(e,t){if(this.boostTrails.has(t)){const s=this.boostTrails.get(t);s.removeFromScene(this.scene),s.dispose()}const i=new bN(e);return i.addToScene(this.scene),this.boostTrails.set(t,i),i}removeBoostTrail(e){const t=this.boostTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.boostTrails.delete(e))}updateBoostTrail(e,t,i,s,a){const r=this.boostTrails.get(e);r&&(r.setActive(t),t&&r.emit(i,s,a,this._playbackSpeed||1))}createSupersonicTrail(e,t){if(this.supersonicTrails.has(e)){const s=this.supersonicTrails.get(e);s.removeFromScene(this.scene),s.dispose()}const i=new wN(this.scene,t);return i.addToScene(this.scene),this.supersonicTrails.set(e,i),i}removeSupersonicTrail(e){const t=this.supersonicTrails.get(e);t&&(t.removeFromScene(this.scene),t.dispose(),this.supersonicTrails.delete(e))}updateSupersonicTrail(e,t,i,s,a,r){let o=this.supersonicTrails.get(e);!o&&t&&(o=this.createSupersonicTrail(e,r)),o&&(r!==void 0&&o.team!==r&&o.setTeam(r),o.setActive(t),t&&o.emit(i,s,a))}createBallTrail(){return this.ballTrail&&(this.ballTrail.removeFromScene(this.scene),this.ballTrail.dispose()),this.ballTrail=new hN(this.scene,0),this.ballTrail.addToScene(this.scene),console.log("✓ Spiral ball trail created and added to scene"),this.ballTrail}updateBallTrail(e,t,i){this.ballTrail||this.createBallTrail(),i!==void 0&&this.ballTrail.team!==i&&this.ballTrail.setTeam(i);const s=1/60*(this._playbackSpeed||1);this.ballTrail.emit(e,t,s)}triggerGoalExplosion(e,t){const i=mM(this.scene,this.renderer,this.camera);i&&(this.camera&&(i.camera=this.camera),i.trigger(e,t))}triggerDemoExplosion(e,t,i){const s=pM(this.scene);s&&s.trigger(e)}update(e,t=!0,i=1){this._playbackSpeed=i;const s=e*i;gi&&gi.update(s),Gn&&Gn.update(s);for(let a=this.explosions.active.length-1;a>=0;a--){const r=this.explosions.active[a];r.update(s)&&(r.removeFromScene(this.scene),this.explosions.active.splice(a,1))}t&&(this.boostTrails.forEach(a=>{a.update(s)}),this.supersonicTrails.forEach(a=>{a.update(s)}),this.ballTrail&&this.ballTrail.update(s))}}const Hv={Octane:65535,Dominus:16746496,Plank:8978176,Breakout:16711816,Hybrid:8913151,Merc:16776960},TN={0:5744895,1:16751680};function MN(n,e){return e===0||e===1?TN[e]:Hv[n]||Hv.Octane}class EN{constructor(e){this.scene=e,this.hitboxes=new Map,this.enabled=!1}setEnabled(e){this.enabled=e,this.hitboxes.forEach(({mesh:t})=>{t.visible=e})}createHitboxWireframe(e,t){const i=$y[e]||$y.Octane,s=MN(e,t),a=i.length,r=i.width,o=i.height,l=i.offsetX,c=i.offsetZ;console.log(`[HitboxManager] Creating hitbox for ${e}:`,{dims:i,length:a,width:r,height:o,offsetX:l,offsetY:c});const u=new Et,d=new Di(a,o,r),h=new je({color:s,transparent:!0,opacity:.35,depthTest:!1,depthWrite:!1,side:ut}),f=new Se(d,h);f.frustumCulled=!1,f.renderOrder=1,f.position.set(l,c,0),u.add(f);const p=new yf(d),g=new Pt({color:s,linewidth:2,transparent:!0,opacity:.9,depthTest:!1}),_=new Fn(p,g);_.frustumCulled=!1,_.renderOrder=2,_.position.set(l,c,0),u.add(_);const m=3.33,v=new vn(m,8,6),y=new Gg(v),b=new Pt({color:16777215,linewidth:1,transparent:!0,opacity:.9,depthTest:!1}),S=new Fn(y,b);return S.frustumCulled=!1,u.add(S),u.userData.hitboxType=e,u.userData.team=t??null,u.frustumCulled=!1,u}addHitbox(e,t,i){const s=i===0||i===1?i:null;if(this.hitboxes.has(e)){const r=this.hitboxes.get(e);if(r.hitboxType===t&&r.team===s)return;this.scene.remove(r.mesh),r.mesh.traverse(o=>{o.geometry&&o.geometry.dispose(),o.material&&o.material.dispose()})}const a=this.createHitboxWireframe(t,s);a.visible=this.enabled,this.scene.add(a),this.hitboxes.set(e,{mesh:a,hitboxType:t,team:s})}removeHitbox(e){if(this.hitboxes.has(e)){const{mesh:t}=this.hitboxes.get(e);this.scene.remove(t),t.traverse(i=>{i.geometry&&i.geometry.dispose(),i.material&&i.material.dispose()}),this.hitboxes.delete(e)}}updateHitboxes(e,t,i,s){if(!this.enabled)return;for(const[r,o]of Object.entries(t)){const l=e[o];if(!l||!l.userData.isCar)continue;const c=i?i(r):"Octane",u=s?s(r):null;this.addHitbox(o,c,u);const{mesh:d}=this.hitboxes.get(o);d.position.copy(l.position),d.quaternion.copy(l.quaternion),d.visible=this.enabled&&l.visible}const a=new Set(Object.values(t));for(const r of this.hitboxes.keys())a.has(r)||this.removeHitbox(r)}reset(){this.hitboxes.forEach(({mesh:e})=>{this.scene.remove(e),e.traverse(t=>{t.geometry&&t.geometry.dispose(),t.material&&t.material.dispose()})}),this.hitboxes.clear()}dispose(){this.reset()}}const _M=["baseGroup","glowMesh","innerGlowMesh","lensColumnMesh","lensRimMesh","topGlowMesh","coreGlowMesh","highlightMesh"];function Yp(n,e,t,i){const s=new Se(new qo(n,32),new je({color:e,transparent:!0,opacity:t,blending:Vt,side:ut,depthWrite:!1}));return s.rotation.x=-Math.PI/2,s.renderOrder=i,s}function Vv(n,e){n&&n.traverse(t=>{const i=t;if(!i.isMesh||!(i.material instanceof je))return;const s=i.userData.baseOpacity;i.material.opacity=(s??i.material.opacity)*e})}function Nu(n,e,t){n.rotation.x=-Math.PI/2,n.renderOrder=t,n.frustumCulled=!1,n.userData.baseOpacity=e,n.material.transparent=!0,n.material.opacity=e,n.material.side=ut,n.material.depthWrite=!1}function CN(n){const e=new Et;e.renderOrder=98,e.frustumCulled=!1;const t=new je({color:1118477}),i=new je({color:16752640,blending:Vt}),s=new Se(new qo(n*.55,48),t.clone());Nu(s,.86,98),e.add(s);const a=new Se(new oi(n*.45,n*.62,48),new je({color:16765242,blending:Vt}));Nu(a,.78,100),a.position.y=1.4,e.add(a);function r(o,l,c){const u=new $s;return[[o*Math.cos(-c*.72),o*Math.sin(-c*.72)],[l*Math.cos(-c),l*Math.sin(-c)],[l*Math.cos(c),l*Math.sin(c)],[o*Math.cos(c*.72),o*Math.sin(c*.72)]].forEach(([h,f],p)=>{p===0?u.moveTo(h,f):u.lineTo(h,f)}),u.closePath(),u}for(let o=0;o<3;o+=1){const l=o*(Math.PI*2)/3+Math.PI/2,c=new Se(new br(r(n*.52,n*1.42,.33)),t.clone());Nu(c,.86,98),c.rotation.z=l,e.add(c);const u=new Se(new br(r(n*.66,n*1.2,.21)),i.clone());Nu(u,.86,99),u.position.y=1.1,u.rotation.z=l,e.add(u)}return e}function Gv(n,e){for(const t of _M){const i=n.userData[t];i&&(i.visible=e)}}function AN(){let n=new Map;function e(i){const s=i.player.adapter.boostPads;!s||s.size===0||(console.log(`[boost-pads] Creating ${s.size} boost pads...`),n=new Map,s.forEach((a,r)=>{const o=a.isBig;let l,c,u;if(o){l=new vn(37,24,18),c=new li({color:16757274,emissive:16747008,emissiveIntensity:.42,metalness:.04,roughness:.08,clearcoat:1,clearcoatRoughness:.025,transmission:.18,thickness:30,ior:1.42,envMapIntensity:1.9,blending:Vt,transparent:!0,opacity:.68,depthWrite:!1}),u=new Se(l,c),u.renderOrder=100;const p=CN(37*2.05);p.position.y=-140,u.add(p),u.userData.baseGroup=p;const g=new Se(new yr(37*.12,37*.18,112,24,1,!0),new je({color:16761664,transparent:!0,opacity:.28,blending:Vt,side:ut,depthWrite:!1}));g.position.y=-62,g.renderOrder=99,u.add(g),u.userData.lensColumnMesh=g;const _=new Se(new vn(37*1.03,24,14),new je({color:16768890,transparent:!0,opacity:.32,blending:Vt,side:dn,depthWrite:!1}));_.renderOrder=101,u.add(_),u.userData.lensRimMesh=_;const m=new vn(37*1.3,20,14),v=new je({color:16758315,transparent:!0,opacity:.16,blending:Vt,side:dn,depthWrite:!1}),y=new Se(m,v);y.renderOrder=99,u.add(y),u.userData.glowMesh=y;const b=new vn(37*1.12,20,14),S=new je({color:16761130,transparent:!0,opacity:.22,blending:Vt,side:dn,depthWrite:!1}),x=new Se(b,S);x.renderOrder=99,u.add(x),u.userData.innerGlowMesh=x,u.userData.needsLight=!0}else{l=new yr(45,45*.92,8,32),c=new li({color:16761370,emissive:16750336,emissiveIntensity:.72,metalness:.88,roughness:.14,clearcoat:1,clearcoatRoughness:.05,envMapIntensity:2,transparent:!0,opacity:1,depthWrite:!1}),u=new Se(l,c),u.renderOrder=100;const g=Yp(45*1.42,16756736,.34,101);g.position.y=8/2+.15,u.add(g),u.userData.topGlowMesh=g;const _=Yp(45*.74,16777114,.42,102);_.position.y=8/2+.35,u.add(_),u.userData.coreGlowMesh=_;const m=Yp(45*.42,16775376,.46,103);m.position.set(-45*.18,8/2+.55,-45*.12),m.scale.y=.34,u.add(m),u.userData.highlightMesh=m}const h=o?130:10;if(u.position.set(a.position.x,h,a.position.y),u.userData.padId=r,u.userData.isBig=o,u.userData.isAvailable=!0,i.scene.add(u),n.set(r,u),u.userData.needsLight){const f=new xr(16751872,.7,480);f.decay=0,f.position.set(a.position.x,h-50,a.position.y),i.scene.add(f),u.userData.light=f}}),console.log(`[boost-pads] ✓ Created ${n.size} boost pad meshes`))}function t(i){i.player.adapter.boostPads.forEach((a,r)=>{const o=n.get(r);if(!o)return;const l=a.isAvailable;o.userData.isAvailable!==l&&(o.userData.isAvailable=l,l?(o.material.color.setHex(a.isBig?16757274:16761370),o.material.emissive.setHex(a.isBig?16747008:16750336),o.material.emissiveIntensity=a.isBig?.42:.72,o.material.opacity=a.isBig?.68:1,o.visible=!0,Gv(o,!0),Vv(o.userData.baseGroup,1),o.userData.light&&(o.userData.light.intensity=.85),o.userData.glowMesh&&(o.userData.glowMesh.visible=!0),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!0)):(o.material.color.setHex(a.isBig?9063424:9065472),o.material.emissive.setHex(0),o.material.emissiveIntensity=0,o.material.opacity=.2,o.visible=!0,Gv(o,!1),o.userData.baseGroup&&(o.userData.baseGroup.visible=!0,Vv(o.userData.baseGroup,.26)),o.userData.light&&(o.userData.light.intensity=0),o.userData.glowMesh&&(o.userData.glowMesh.visible=!1),o.userData.innerGlowMesh&&(o.userData.innerGlowMesh.visible=!1)))})}return{id:"boost-pads",setup(i){e(i)},beforeRender(i){t(i)},teardown(i){n.forEach(s=>{i.scene.remove(s),s.geometry.dispose(),s.material.dispose();for(const r of _M){const o=s.userData[r];o&&o.traverse(l=>{const c=l;c.isMesh&&(c.geometry.dispose(),c.material.dispose())})}const a=s.userData.light;a&&(i.scene.remove(a),a.dispose())}),n.clear()}}}const RN=2;function PN(n){if(n.frames.length===0)return null;const e=new Map;for(const s of n.frames)e.set(s.gameState,(e.get(s.gameState)??0)+1);let t=null,i=-1;for(const[s,a]of e.entries())a<=i||(t=s,i=a);return t}function IN(n,e){if(e===null)return null;for(const t of n.frames){if(t.gameState===e)break;return t.gameState}return null}function gM(n,e){return e===null?n.kickoffCountdown<=0:n.gameState===e}function ly(n,e){return n.kickoffCountdown>0?!0:e!==null&&n.gameState===e}function LN(n,e){return n.ballFrames[e]?.position?!0:n.players.some(t=>t.frames[e]?.position)}function kN(n,e,t,i){return ly(e,i)&&LN(n,t)}function DN(n,e){return n.timelineEvents.some(t=>t.kind==="goal"&&e.time>=t.time&&e.timec){const h=a.at(-1);h&&h.endTime>=c?h.endTime=Math.max(h.endTime,d):a.push({startTime:c,endTime:d})}o=u}return a}function FN(n,e,t){const i=bt.clamp(t,0,n);for(const s of e){if(i0&&(n.frames[s-1]?.kickoffCountdown??0)>0;)s-=1;let a=e+1;for(;a0;)a+=1;let r=0;for(let c=s;cl>s&&gM(o,t));return!r||r.time===e?null:r.time}function GN(n,e,t,i){const s=Wh(n,e),a=n.frames[s];if(!a||!md(n,a,s,t,i))return null;const r=n.frames.find((c,u)=>u>s&&!md(n,c,u,t,i));if(r)return r.time===e?null:r.time;let o=s;for(;o>0&&md(n,n.frames[o-1],o-1,t,i);)o-=1;const l=n.frames[o]?.time;return l===void 0||l===e?null:l}function $N(n){return!!n?.position&&n?.isPresent!==!1}function WN(n,e,t){for(let i=n.length-1;i>=0;i-=1){const s=n[i],a=t-s.time;if(!(a<0)){if(a>HN)break;if(s.kind==="demo"&&s.secondaryPlayerId===e)return s}}return null}const XN="space",KN={space:{id:"space",skyboxUrl:"/skyboxes/PlanetaryEarth4k.hdr",exposure:1.45,rotation:{x:8,y:0,z:28},animation:{enabled:!0,speed:2}}};function qN(n){if(n===!1)return null;if(typeof n=="string"){const e=KN[n];return e||(console.warn(`[player] unknown environment "${n}"; using neutral default`),null)}return n}const YN=new Proxy({},{get:()=>()=>{}});function Wv(n){if(!n)return null;const e={};for(const t of Object.keys(n)){const i=n[t];typeof i=="number"&&Number.isFinite(i)&&(e[t]=i)}return e}const Xv=48,Uu=.14,jN=16,ZN=16,JN=.003,QN=.05,eU=1.08,Kv=4120,qv=5140,tU=0,nU=2200,iU=new T(0,700,0),sU=new T(-1,0,0),aU=new T(0,-1,0),rU=new T(0,900,0),oU=new T(0,1,0),lU=new T(9600,-5500,12600).normalize();function cU(n,e){const t=Number.isFinite(e)&&e>0?e:1.7777777777777777,i=n==="overhead"?iU.clone():rU.clone(),s=n==="overhead"?sU.clone():oU.clone(),a=n==="overhead"?aU.clone():lU.clone(),r=uU({aspect:t,fov:Xv,forward:a,margin:eU,target:i,up:s});return{position:i.clone().addScaledVector(a,-r),target:i,up:s,fov:Xv}}function uU(n){const{aspect:e,fov:t,forward:i,margin:s,target:a,up:r}=n,o=i.clone().normalize(),l=new T().crossVectors(o,r).normalize(),c=new T().crossVectors(l,o).normalize(),u=Math.tan(bt.degToRad(t)/2),d=u*e;let h=1;for(const f of[-Kv,Kv])for(const p of[tU,nU])for(const g of[-qv,qv]){const _=new T(f,p,g).sub(a),m=Math.abs(_.dot(l)),v=Math.abs(_.dot(c)),y=_.dot(o);h=Math.max(h,m/d-y,v/u-y)}return Math.max(1,h*s)}function dU(n){const e=new Et;return e.name="replayRoot",e.matrixAutoUpdate=!1,e.matrix.set(1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1),n.add(e),e}class hU extends EventTarget{container;adapter;replay;options;sceneManager;arenaManager;actorManager;effectsManager;hitboxManager;controls;replayRoot;sceneState;effectsEnabled;ready;plugins=[];beforeRenderCallbacks=[];resizeObserver=null;animationFrameId=null;disposed=!1;playing=!1;readyResolved=!1;speed;loop;currentTime=0;lastTickAt=null;freeCameraTransition=null;cameraDistanceScaleValue;customCameraSettingsValue;cameraViewModeValue;attachedPlayerIdValue;ballCamEnabledValue;boostMeterEnabledValue;boostPickupAnimationEnabledValue;hitboxWireframesEnabledValue;hitboxOnlyModeEnabledValue;hitboxTypeByName=null;hitboxTeamByName=null;hitboxesActive=!1;skipPostGoalTransitionsEnabledValue;skipKickoffsEnabledValue;attachmentTouched=!1;liveGameState=null;kickoffGameState=null;timelineSegmentsCacheKey=null;timelineSegmentsCache=[];constructor(e,t,i={},s=null){super(),this.container=e,this.adapter=t,this.replay=s,this.options=i,this.updateReplayGameStates(),this.speed=Math.max(.1,i.initialPlaybackRate??i.speed??1),this.loop=i.loop??!1,this.cameraDistanceScaleValue=Math.max(.25,i.initialCameraDistanceScale??1),this.customCameraSettingsValue=Wv(i.initialCustomCameraSettings),this.attachedPlayerIdValue=i.initialAttachedPlayerId??null,this.cameraViewModeValue=i.initialCameraViewMode??(this.attachedPlayerIdValue?"follow":"free"),this.ballCamEnabledValue=i.initialBallCamEnabled??null,this.boostMeterEnabledValue=i.initialBoostMeterEnabled??!1,this.boostPickupAnimationEnabledValue=i.initialBoostPickupAnimationEnabled??!0,this.hitboxWireframesEnabledValue=i.initialHitboxWireframesEnabled??!1,this.hitboxOnlyModeEnabledValue=i.initialHitboxOnlyModeEnabled??!1,this.skipPostGoalTransitionsEnabledValue=i.initialSkipPostGoalTransitionsEnabled??!0,this.skipKickoffsEnabledValue=i.initialSkipKickoffsEnabled??!1,this.sceneManager=new PO(e,{assetBase:i.assetBase,preserveDrawingBuffer:i.preserveDrawingBuffer}),this.sceneManager.initDefaultEnvironment(),this.applyEnvironmentSpec(i.environment??XN),this.arenaManager=new bF(this.scene,{assetBase:i.assetBase}),this.effectsEnabled=i.effects??!0,this.effectsManager=this.effectsEnabled?new SN(this.scene):YN,this.actorManager=new uN(this.scene,this.effectsManager,{assetBase:i.assetBase}),i.motionInterpolation&&this.setMotionInterpolation(i.motionInterpolation),this.actorManager.initFromFramework(t),this.actorManager.initInterpolants(t.getTimelines()),this.hitboxManager=new EN(this.scene),this.syncGoalEvents(),this.controls=new dO(this.camera,this.renderer.domElement),this.controls.zoomSpeed=2.5,this.camera.position.set(0,4e3,6e3),this.controls.target.set(0,200,0),this.controls.update(),this.replayRoot=dU(this.scene),this.sceneState=this.createSceneState(),this.ready=Promise.all([this.arenaManager.loadArenaMeshes().catch(a=>{console.warn("[player] arena load failed",a)}),this.prepareReplayAssets()]).then(()=>{this.markReady()}),this.installResizeHandling();for(const a of i.plugins??[])this.installPlugin(a,!1);this.plugins.some(a=>a.plugin.id==="boost-pads")||this.installPlugin(AN(),!1),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),this.scheduleAnimationFrame(),this.emitChange(),i.autoplay&&this.play()}get scene(){return this.sceneManager.scene}get camera(){return this.sceneManager.camera}get renderer(){return this.sceneManager.renderer}get duration(){return this.adapter.duration}async replaceReplay(e,t,i={}){if(this.disposed)throw new Error("Cannot replace replay on a disposed ReplayPlayer");const s=i.preservePlayback??this.playing;this.playing&&this.setPlayingInternal(!1),this.teardownPlugins(),this.effectsManager.reset(),this.effectsManager.clearEvents?.(),this.hitboxManager.reset(),this.actorManager.reset(),this.adapter=e,this.replay=t,this.updateReplayGameStates(),this.timelineSegmentsCacheKey=null,this.timelineSegmentsCache=[],this.hitboxTypeByName=null,this.hitboxTeamByName=null,this.hitboxesActive=!1,this.freeCameraTransition=null,this.actorManager.initFromFramework(e),this.actorManager.initInterpolants(e.getTimelines()),this.syncGoalEvents();const a=this.attachedPlayerIdValue&&this.adapter.playerList.some(r=>r.id===this.attachedPlayerIdValue)?this.attachedPlayerIdValue:null;a!==this.attachedPlayerIdValue&&(this.attachedPlayerIdValue=a,this.cameraViewModeValue==="follow"&&(this.cameraViewModeValue="free")),this.seekInternal(i.currentTime??0),this.readyResolved=!1,this.ready=this.prepareReplayAssets().then(()=>{this.markReady()}),await this.ready,this.setupPlugins(),this.applyInitialCameraOptions(),this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded(),s&&this.setPlayingInternal(!0),this.render(),this.emitChange()}setEnvironment(e){this.applyEnvironmentSpec(e)}applyEnvironmentSpec(e){const t=qN(e);if(!t){this.sceneManager.setDefaultBackground();return}this.sceneManager.applyEnvironment(t).catch(i=>{console.warn(`[player] environment "${t.id}" failed to load`,i)})}play(){this.playing||(this.setPlayingInternal(!0),this.emitChange())}pause(){this.playing&&(this.setPlayingInternal(!1),this.emitChange())}togglePlayback(){this.playing?this.pause():this.play()}seek(e){this.seekInternal(e),this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setPlaybackRate(e){this.speed=Math.max(.1,e),this.emitChange()}setLoop(e){this.loop=e}setMotionInterpolation(e){this.actorManager.interpolationMethod=e==="linear"?"lerp":"hermite"}setFrameIndex(e){const t=this.adapter.frameTimes;if(t.length===0||!Number.isFinite(e))return;const i=Math.min(Math.max(Math.trunc(e),0),t.length-1);this.playing&&this.setPlayingInternal(!1),this.seekInternal(t[i]),this.emitChange()}stepFrames(e){Number.isFinite(e)&&this.setFrameIndex(this.adapter.frameIndexAt(this.currentTime)+Math.trunc(e))}stepForwardFrame(){this.stepFrames(1)}stepBackwardFrame(){this.stepFrames(-1)}setCameraDistanceScale(e){this.cameraDistanceScaleValue=Math.max(.25,e),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue),this.emitChange()}setCustomCameraSettings(e){this.applyCustomCameraSettings(e),this.emitChange()}setAttachedPlayer(e){this.attachedPlayerIdValue=e,this.cameraViewModeValue=e?"follow":"free",this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setCameraViewMode(e){this.cameraViewModeValue=e,this.attachmentTouched=!0,this.freeCameraTransition=null,this.syncCameraAttachment(),this.emitChange()}setFreeCameraPreset(e,t={}){this.cameraViewModeValue="free",this.attachmentTouched=!0,this.syncCameraAttachment();const i=cU(e,this.camera.aspect);t.instant?(this.camera.position.copy(i.position),this.controls.target.copy(i.target),this.camera.up.copy(i.up).normalize(),this.camera.fov=i.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(i.target),this.controls.enabled=!0,this.freeCameraTransition=null):this.freeCameraTransition=i,this.emitChange()}setBallCamEnabled(e){this.ballCamEnabledValue=e,this.getCameraPlugin()?.setBallCam(e),this.emitChange()}setBoostMeterEnabled(e){this.boostMeterEnabledValue=e,this.emitChange()}setBoostPickupAnimationEnabled(e){this.boostPickupAnimationEnabledValue=e,this.emitChange()}setHitboxWireframesEnabled(e){this.hitboxWireframesEnabledValue=e,this.emitChange()}setHitboxOnlyModeEnabled(e){this.hitboxOnlyModeEnabledValue=e,this.emitChange()}setSkipPostGoalTransitionsEnabled(e){this.skipPostGoalTransitionsEnabledValue=e,e&&this.playing&&this.skipPostGoalTransitionIfNeeded(),this.emitChange()}setSkipKickoffsEnabled(e){this.skipKickoffsEnabledValue=e,e&&this.playing&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}setState(e){e.speed!==void 0&&(this.speed=Math.max(.1,e.speed)),e.cameraDistanceScale!==void 0&&(this.cameraDistanceScaleValue=Math.max(.25,e.cameraDistanceScale),this.getCameraPlugin()?.setDistanceScale(this.cameraDistanceScaleValue)),e.customCameraSettings!==void 0&&this.applyCustomCameraSettings(e.customCameraSettings),e.cameraViewMode!==void 0&&(this.cameraViewModeValue=e.cameraViewMode,this.attachmentTouched=!0),e.attachedPlayerId!==void 0&&(this.attachedPlayerIdValue=e.attachedPlayerId,this.attachmentTouched=!0,e.cameraViewMode===void 0&&(this.cameraViewModeValue=e.attachedPlayerId?"follow":"free")),(e.cameraViewMode!==void 0||e.attachedPlayerId!==void 0)&&(this.freeCameraTransition=null,this.syncCameraAttachment()),e.useReplayBallCam===!0?(this.ballCamEnabledValue=null,this.getCameraPlugin()?.setBallCam(null)):e.ballCamEnabled!==void 0&&(this.ballCamEnabledValue=e.ballCamEnabled,this.getCameraPlugin()?.setBallCam(e.ballCamEnabled)),e.boostMeterEnabled!==void 0&&(this.boostMeterEnabledValue=e.boostMeterEnabled),e.boostPickupAnimationEnabled!==void 0&&(this.boostPickupAnimationEnabledValue=e.boostPickupAnimationEnabled),e.hitboxWireframesEnabled!==void 0&&(this.hitboxWireframesEnabledValue=e.hitboxWireframesEnabled),e.hitboxOnlyModeEnabled!==void 0&&(this.hitboxOnlyModeEnabledValue=e.hitboxOnlyModeEnabled),e.skipPostGoalTransitionsEnabled!==void 0&&(this.skipPostGoalTransitionsEnabledValue=e.skipPostGoalTransitionsEnabled),e.skipKickoffsEnabled!==void 0&&(this.skipKickoffsEnabledValue=e.skipKickoffsEnabled),e.currentTime!==void 0&&this.seekInternal(e.currentTime),e.playing!==void 0&&e.playing!==this.playing&&this.setPlayingInternal(e.playing),this.playing&&(e.currentTime!==void 0||e.playing!==void 0)&&(this.skipPostGoalTransitionIfNeeded(),this.skipPastKickoffIfNeeded()),this.emitChange()}getState(){const e=this.adapter.frameIndexAt(this.currentTime),t=this.getCameraPlugin();let i=this.cameraViewModeValue,s=this.attachedPlayerIdValue;if(t)if(t.getMode()==="follow"){i="follow";const a=t.getTarget();s=(a?this.adapter.playerList.find(o=>o.name===a):void 0)?.id??s}else i="free",s=null;return{currentTime:this.currentTime,duration:this.duration,frameIndex:e,activeMetadata:this.replay?BN(this.replay,e,this.currentTime):null,playing:this.playing,speed:this.speed,cameraDistanceScale:this.cameraDistanceScaleValue,customCameraSettings:this.customCameraSettingsValue,cameraViewMode:i,attachedPlayerId:s,ballCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,useReplayBallCam:this.ballCamEnabledValue===null,effectiveBallCamEnabled:t?t.getBallCam():this.ballCamEnabledValue??!1,boostMeterEnabled:this.boostMeterEnabledValue,boostPickupAnimationEnabled:this.boostPickupAnimationEnabledValue,hitboxWireframesEnabled:this.hitboxWireframesEnabledValue,hitboxOnlyModeEnabled:this.hitboxOnlyModeEnabledValue,skipPostGoalTransitionsEnabled:this.skipPostGoalTransitionsEnabledValue,skipKickoffsEnabled:this.skipKickoffsEnabledValue}}getSnapshot(){return this.getState()}getTimelineDuration(){return this.replay?.duration??this.duration}getTimelineCurrentTime(){return this.projectReplayTimeToTimeline(this.currentTime).timelineTime}getTimelineSegments(){if(!this.replay)return[];const e=`${this.skipPostGoalTransitionsEnabledValue}:${this.skipKickoffsEnabledValue}`;return this.timelineSegmentsCacheKey===e?this.timelineSegmentsCache:(this.timelineSegmentsCacheKey=e,this.timelineSegmentsCache=ON(this.replay,this.skipPostGoalTransitionsEnabledValue,this.skipKickoffsEnabledValue,this.liveGameState,this.kickoffGameState),this.timelineSegmentsCache)}projectReplayTimeToTimeline(e){return FN(this.replay?.duration??this.duration,this.getTimelineSegments(),e)}projectTimelineTimeToReplay(e){return NN(this.replay?.duration??this.duration,this.getTimelineDuration(),this.getTimelineSegments(),e)}subscribe(e){const t=i=>{e(i.detail)};return this.addEventListener("change",t),e(this.getState()),()=>{this.removeEventListener("change",t)}}onBeforeRender(e){return this.beforeRenderCallbacks.push(e),()=>{const t=this.beforeRenderCallbacks.indexOf(e);t>=0&&this.beforeRenderCallbacks.splice(t,1)}}addPlugin(e){return this.installPlugin(e,!0)}removePlugin(e){const t=this.plugins.findIndex(s=>s.plugin.id===e);if(t<0)return!1;const[i]=this.plugins.splice(t,1);return i.plugin.teardown?.(this.createPluginContext()),!0}getPlugins(){return this.plugins.map(e=>e.plugin)}destroy(){if(!this.disposed){for(this.disposed=!0,this.playing=!1,this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.beforeRenderCallbacks.length=0;this.plugins.length>0;)this.plugins.pop()?.plugin.teardown?.(this.createPluginContext());this.controls.dispose(),this.effectsEnabled&&this.effectsManager.reset(),this.hitboxManager.dispose(),this.actorManager.reset(),this.sceneManager.dispose()}}dispose(){this.destroy()}setPlayingInternal(e){this.playing=e,this.lastTickAt=null,e?this.actorManager.resumeAnimations():this.actorManager.pauseAnimations()}prepareReplayAssets(){return this.actorManager.waitForBallModel().catch(()=>!1).then(()=>{if(this.effectsEnabled)try{this.effectsManager.setRenderContext(this.renderer,this.camera)}catch(e){console.warn("[player] explosion warmup failed",e)}})}markReady(){this.readyResolved=!0,this.lastTickAt=null}updateReplayGameStates(){if(!this.replay){this.liveGameState=null,this.kickoffGameState=null;return}this.liveGameState=PN(this.replay),this.kickoffGameState=IN(this.replay,this.liveGameState)}syncGoalEvents(){this.effectsEnabled&&(this.effectsManager.clearEvents?.(),this.replay&&this.effectsManager.setGoalEvents(this.replay.timelineEvents.filter(e=>e.kind==="goal").map(e=>({frame:e.frame,time:e.time,team:e.isTeamZero?0:1,playerName:e.playerName??""}))))}teardownPlugins(){const e=this.createPluginContext();for(const t of this.plugins)t.plugin.teardown?.(e)}setupPlugins(){for(const e of this.plugins)e.plugin.setup?.(this.createPluginContext()),e.plugin.id==="camera"&&this.pushCameraParityState(),e.plugin.onStateChange?.(this.createPluginStateContext(this.getState()))}seekInternal(e){this.currentTime=bt.clamp(e,0,this.duration),this.actorManager.seekAnimations(this.currentTime),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()}getPlaybackEndTime(){return this.replay?UN(this.replay.duration,this.getTimelineSegments()):this.duration}skipPastKickoffIfNeeded(){if(!this.replay||!this.skipKickoffsEnabledValue)return!1;const e=VN(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}skipPostGoalTransitionIfNeeded(){if(!this.replay||!this.skipPostGoalTransitionsEnabledValue)return!1;const e=GN(this.replay,this.currentTime,this.liveGameState,this.kickoffGameState);return e===null?!1:(this.seekInternal(e),!0)}getCameraPlugin(){const e=this.plugins.find(t=>t.plugin.id==="camera")?.plugin;return e&&typeof e.follow=="function"?e:null}playerNameForId(e){return this.adapter.playerList.find(t=>t.id===e)?.name??null}applyReplayBallCam(){if(this.ballCamEnabledValue!==null||this.cameraViewModeValue!=="follow"||!this.attachedPlayerIdValue)return;const e=this.playerNameForId(this.attachedPlayerIdValue);if(!e)return;const t=this.adapter.getAllPlayers().find(i=>i.name===e);t&&this.getCameraPlugin()?.setBallCam(t.isBallCam)}syncCameraAttachment(){const e=this.getCameraPlugin();if(e){if(this.cameraViewModeValue==="follow"&&this.attachedPlayerIdValue){const t=this.playerNameForId(this.attachedPlayerIdValue);if(!t){console.warn(`[player] no player with id ${JSON.stringify(this.attachedPlayerIdValue)}`);return}this.camera.up.set(0,1,0),e.follow(t);return}e.getMode()==="follow"&&e.release()}}applyCustomCameraSettings(e){this.customCameraSettingsValue=Wv(e);const t=this.getCameraPlugin();t&&(t.setCameraSettings(null),this.customCameraSettingsValue&&t.setCameraSettings(this.customCameraSettingsValue))}pushCameraParityState(){const e=this.getCameraPlugin();e&&(this.cameraDistanceScaleValue!==1&&e.setDistanceScale(this.cameraDistanceScaleValue),this.customCameraSettingsValue&&e.setCameraSettings(this.customCameraSettingsValue),this.ballCamEnabledValue!==null&&e.setBallCam(this.ballCamEnabledValue),this.attachmentTouched&&this.syncCameraAttachment())}applyInitialCameraOptions(){const e=this.options;(e.initialAttachedPlayerId!==void 0||e.initialCameraViewMode!==void 0)&&(this.attachmentTouched=!0),this.pushCameraParityState()}computeFrameRenderInfo(){const e=this.adapter.frameTimes,t=this.adapter.frameIndexAt(this.currentTime),i=Math.min(t+1,Math.max(e.length-1,0)),s=e[t]??0,a=e[i]??s,r=a>s?bt.clamp((this.currentTime-s)/(a-s),0,1):0;return{frameIndex:t,nextFrameIndex:i,alpha:r,currentTime:this.currentTime}}installResizeHandling(){typeof ResizeObserver>"u"||(this.resizeObserver=new ResizeObserver(()=>this.sceneManager.onWindowResize()),this.resizeObserver.observe(this.container))}scheduleAnimationFrame(){this.animationFrameId!==null||this.disposed||(this.animationFrameId=requestAnimationFrame(this.tick))}tick=e=>{if(this.animationFrameId=null,this.disposed)return;let t=!1,i=0;if(this.playing&&this.readyResolved){i=this.lastTickAt===null?0:Math.min(.1,(e-this.lastTickAt)/1e3),this.lastTickAt=e;let s=this.currentTime+i*this.speed;const a=this.getPlaybackEndTime();s>=a&&(this.loop?(s=0,this.actorManager.seekAnimations(0),this.effectsManager.resetBallTrail(),this.effectsManager.clearGoalExplosions?.(),this.actorManager.resetGoalExplosionPlaybackState(),this.actorManager.resetWheelTracking()):(s=a,this.playing=!1)),t=s!==this.currentTime||!this.playing,this.currentTime=s,this.playing&&(t=this.skipPostGoalTransitionIfNeeded()||t,t=this.skipPastKickoffIfNeeded()||t)}else this.playing&&(this.lastTickAt=null);this.render(i),t&&this.emitChange(),this.scheduleAnimationFrame()};renderFrame(e=0){if(this.adapter.seek(this.currentTime),this.playing&&this.actorManager.updateAnimations(e*this.speed),this.actorManager.updateFromFramework(this.adapter,this.currentTime),this.updatePlayerStates(),this.applyReplayBallCam(),this.updateHitboxVisualization(),this.effectsManager.update(e,this.playing,this.speed),this.playing&&this.actorManager.updateWheelRotations(),this.sceneManager.updateSkyboxAnimation(this.playing?e*this.speed:0),this.controls.update(),this.beforeRenderCallbacks.length>0){const t=this.computeFrameRenderInfo();for(const i of[...this.beforeRenderCallbacks])i(t)}if(this.plugins.length>0){const t=this.createRenderContext();for(const i of this.plugins)i.plugin.beforeRender?.(t)}this.updateFreeCameraTransition(),this.renderer.render(this.scene,this.camera)}render(e=0){this.renderFrame(e)}updateFreeCameraTransition(){const e=this.freeCameraTransition;if(!e)return;this.controls.enabled=!1,this.camera.position.lerp(e.position,Uu),this.controls.target.lerp(e.target,Uu),this.camera.up.lerp(e.up,Uu).normalize(),this.camera.fov=bt.lerp(this.camera.fov,e.fov,Uu),this.camera.updateProjectionMatrix(),this.camera.lookAt(this.controls.target);const t=this.camera.position.distanceToSquared(e.position)<=jN,i=this.controls.target.distanceToSquared(e.target)<=ZN,s=this.camera.up.angleTo(e.up)<=JN,a=Math.abs(this.camera.fov-e.fov)<=QN;!t||!i||!s||!a||(this.camera.position.copy(e.position),this.controls.target.copy(e.target),this.camera.up.copy(e.up).normalize(),this.camera.fov=e.fov,this.camera.updateProjectionMatrix(),this.camera.lookAt(e.target),this.controls.enabled=!0,this.freeCameraTransition=null)}updatePlayerStates(){if(!this.playing)return;const e=this.hitboxOnlyModeEnabledValue;for(const t of this.adapter.getAllPlayers())this.actorManager.updateBoostState(t.name,t.isBoosting&&!e,t.isKickoffReset),this.actorManager.updateSupersonicState(t.name,t.isSupersonic&&!e,t.team)}updateHitboxVisualization(){const e=this.hitboxWireframesEnabledValue||this.hitboxOnlyModeEnabledValue;if(!e&&!this.hitboxesActive||(this.hitboxesActive=e,this.hitboxManager.setEnabled(e),!e))return;const t=this.actorManager;if(this.hitboxTypeByName||(this.hitboxTypeByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.hitboxType]))),this.hitboxTeamByName||(this.hitboxTeamByName=new Map(this.adapter.getAllPlayers().map(i=>[i.name,i.team]))),this.hitboxManager.updateHitboxes(t.actors,t.playerNameToCarActorId,i=>this.hitboxTypeByName?.get(i)??"Octane",i=>this.hitboxTeamByName?.get(i)??null),this.hitboxOnlyModeEnabledValue)for(const i of Object.values(t.playerNameToCarActorId)){const s=i===void 0?void 0:t.actors[i];s&&(s.visible=!1)}}installPlugin(e,t){const i=typeof e=="function"?e():e;if(this.plugins.some(a=>a.plugin.id===i.id))throw new Error(`Player plugin "${i.id}" is already installed`);const s={definition:e,plugin:i};return this.plugins.push(s),i.setup?.(this.createPluginContext()),i.id==="camera"&&this.pushCameraParityState(),i.onStateChange?.(this.createPluginStateContext(this.getState())),t&&this.render(),()=>{const a=this.plugins.indexOf(s);a<0||(this.plugins.splice(a,1),i.teardown?.(this.createPluginContext()))}}createSceneState(){const e=this.actorManager,t=this,i=new Se;return{get scene(){return t.scene},replayRoot:this.replayRoot,get camera(){return t.camera},get renderer(){return t.renderer},controls:this.controls,resize:()=>this.sceneManager.onWindowResize(),dispose:()=>this.destroy(),get ballMesh(){return(e.ballActorId!=null?e.actors[e.ballActorId]:null)??i},get playerMeshes(){const s=new Map;for(const a of t.adapter.playerList){const r=e.playerNameToCarActorId[a.name],o=r!=null?e.actors[r]:void 0;o&&s.set(a.id,o)}return s},playerBodyMeshes:new Map,playerHitboxes:new Map,playerBoostTrails:new Map,playerBoostMeters:new Map,playerDemoIndicators:new Map,updateWallVisibility:()=>{}}}createPluginContext(){return{player:this,replay:this.replay,options:this.options,scene:this.scene,camera:this.camera,renderer:this.renderer,container:this.container}}createPluginStateContext(e){return{...this.createPluginContext(),state:e}}createRenderContext(){const e=this.actorManager,t=this.adapter.ball,i={position:t.position,rotation:t.rotation,velocity:t.velocity,visible:t.visible,object3d:e.ballActorId!=null?e.actors[e.ballActorId]??null:null},s=this.adapter.getAllPlayers().map(a=>{const r=e.playerNameToCarActorId[a.name];return{id:a.id,name:a.name,team:a.team,carName:a.carName,hitboxType:a.hitboxType,position:a.position,rotation:a.rotation,velocity:a.velocity,boost:a.boost,isBoosting:a.isBoosting,visible:a.isVisible,object3d:r!=null?e.actors[r]??null:null}});return{...this.createPluginContext(),...this.computeFrameRenderInfo(),state:this.getState(),time:this.currentTime,ball:i,cars:s}}emitChange(){const e=this.getState(),t=this.createPluginStateContext(e);for(const i of this.plugins)i.plugin.onStateChange?.(t);this.dispatchEvent(new CustomEvent("change",{detail:e}))}}const Xt={LEFT:1,RIGHT:2,MIDDLE:4},$=Object.freeze({NONE:0,ROTATE:1,TRUCK:2,SCREEN_PAN:4,OFFSET:8,DOLLY:16,ZOOM:32,TOUCH_ROTATE:64,TOUCH_TRUCK:128,TOUCH_SCREEN_PAN:256,TOUCH_OFFSET:512,TOUCH_DOLLY:1024,TOUCH_ZOOM:2048,TOUCH_DOLLY_TRUCK:4096,TOUCH_DOLLY_SCREEN_PAN:8192,TOUCH_DOLLY_OFFSET:16384,TOUCH_DOLLY_ROTATE:32768,TOUCH_ZOOM_TRUCK:65536,TOUCH_ZOOM_OFFSET:131072,TOUCH_ZOOM_SCREEN_PAN:262144,TOUCH_ZOOM_ROTATE:524288}),Jr={NONE:0,IN:1,OUT:-1};function Ha(n){return n.isPerspectiveCamera}function ra(n){return n.isOrthographicCamera}const Qr=Math.PI*2,Yv=Math.PI/2,vM=1e-5,yl=Math.PI/180;function $i(n,e,t){return Math.max(e,Math.min(t,n))}function Ft(n,e=vM){return Math.abs(n)0==f>u&&(f=u,t.value=(f-u)/a),f}function Zv(n,e,t,i,s=1/0,a,r){i=Math.max(1e-4,i);const o=2/i,l=o*a,c=1/(1+l+.48*l*l+.235*l*l*l);let u=e.x,d=e.y,h=e.z,f=n.x-u,p=n.y-d,g=n.z-h;const _=u,m=d,v=h,y=s*i,b=y*y,S=f*f+p*p+g*g;if(S>b){const U=Math.sqrt(S);f=f/U*y,p=p/U*y,g=g/U*y}u=n.x-f,d=n.y-p,h=n.z-g;const x=(t.x+o*f)*a,M=(t.y+o*p)*a,C=(t.z+o*g)*a;t.x=(t.x-o*x)*c,t.y=(t.y-o*M)*c,t.z=(t.z-o*C)*c,r.x=u+(f+x)*c,r.y=d+(p+M)*c,r.z=h+(g+C)*c;const w=_-n.x,E=m-n.y,R=v-n.z,L=r.x-_,O=r.y-m,D=r.z-v;return w*L+E*O+R*D>0&&(r.x=_,r.y=m,r.z=v,t.x=(r.x-_)/a,t.y=(r.y-m)/a,t.z=(r.z-v)/a),r}function jp(n,e){e.set(0,0),n.forEach(t=>{e.x+=t.clientX,e.y+=t.clientY}),e.x/=n.length,e.y/=n.length}function Zp(n,e){return ra(n)?(console.warn(`${e} is not supported in OrthographicCamera`),!0):!1}class fU{constructor(){this._listeners={}}addEventListener(e,t){const i=this._listeners;i[e]===void 0&&(i[e]=[]),i[e].indexOf(t)===-1&&i[e].push(t)}hasEventListener(e,t){const i=this._listeners;return i[e]!==void 0&&i[e].indexOf(t)!==-1}removeEventListener(e,t){const s=this._listeners[e];if(s!==void 0){const a=s.indexOf(t);a!==-1&&s.splice(a,1)}}removeAllEventListeners(e){if(!e){this._listeners={};return}Array.isArray(this._listeners[e])&&(this._listeners[e].length=0)}dispatchEvent(e){const i=this._listeners[e.type];if(i!==void 0){e.target=this;const s=i.slice(0);for(let a=0,r=s.length;a{},this._enabled=!0,this._state=$.NONE,this._viewport=null,this._changedDolly=0,this._changedZoom=0,this._hasRested=!0,this._boundaryEnclosesCamera=!1,this._needsUpdate=!0,this._updatedLastTime=!1,this._elementRect=new DOMRect,this._isDragging=!1,this._dragNeedsUpdate=!0,this._activePointers=[],this._lockedPointer=null,this._interactiveArea=new DOMRect(0,0,1,1),this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._isUserControllingOffset=!1,this._isUserControllingZoom=!1,this._lastDollyDirection=Jr.NONE,this._thetaVelocity={value:0},this._phiVelocity={value:0},this._radiusVelocity={value:0},this._targetVelocity=new nt.Vector3,this._focalOffsetVelocity=new nt.Vector3,this._zoomVelocity={value:0},this._truckInternal=(m,v,y,b)=>{let S,x;if(Ha(this._camera)){const M=pt.copy(this._camera.position).sub(this._target),C=this._camera.getEffectiveFOV()*yl,w=M.length()*Math.tan(C*.5);S=this.truckSpeed*m*w/this._elementRect.height,x=this.truckSpeed*v*w/this._elementRect.height}else if(ra(this._camera)){const M=this._camera;S=this.truckSpeed*m*(M.right-M.left)/M.zoom/this._elementRect.width,x=this.truckSpeed*v*(M.top-M.bottom)/M.zoom/this._elementRect.height}else return;b?(y?this.setFocalOffset(this._focalOffsetEnd.x+S,this._focalOffsetEnd.y,this._focalOffsetEnd.z,!0):this.truck(S,0,!0),this.forward(-x,!0)):y?this.setFocalOffset(this._focalOffsetEnd.x+S,this._focalOffsetEnd.y+x,this._focalOffsetEnd.z,!0):this.truck(S,x,!0)},this._rotateInternal=(m,v)=>{const y=Qr*this.azimuthRotateSpeed*m/this._elementRect.height,b=Qr*this.polarRotateSpeed*v/this._elementRect.height;this.rotate(y,b,!0)},this._dollyInternal=(m,v,y)=>{const b=Math.pow(.95,-m*this.dollySpeed),S=this._sphericalEnd.radius,x=this._sphericalEnd.radius*b,M=$i(x,this.minDistance,this.maxDistance),C=M-x;this.infinityDolly&&this.dollyToCursor?this._dollyToNoClamp(x,!0):this.infinityDolly&&!this.dollyToCursor?(this.dollyInFixed(C,!0),this._dollyToNoClamp(M,!0)):this._dollyToNoClamp(M,!0),this.dollyToCursor&&(this._changedDolly+=(this.infinityDolly?x:M)-S,this._dollyControlCoord.set(v,y)),this._lastDollyDirection=Math.sign(-m)},this._zoomInternal=(m,v,y)=>{const b=Math.pow(.95,m*this.dollySpeed),S=this._zoom,x=this._zoom*b;this.zoomTo(x,!0),this.dollyToCursor&&(this._changedZoom+=x-S,this._dollyControlCoord.set(v,y))},typeof nt>"u"&&console.error("camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information."),this._camera=e,this._yAxisUpSpace=new nt.Quaternion().setFromUnitVectors(this._camera.up,Hu),this._yAxisUpSpaceInverse=this._yAxisUpSpace.clone().invert(),this._state=$.NONE,this._target=new nt.Vector3,this._targetEnd=this._target.clone(),this._focalOffset=new nt.Vector3,this._focalOffsetEnd=this._focalOffset.clone(),this._spherical=new nt.Spherical().setFromVector3(pt.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace)),this._sphericalEnd=this._spherical.clone(),this._lastDistance=this._spherical.radius,this._zoom=this._camera.zoom,this._zoomEnd=this._zoom,this._lastZoom=this._zoom,this._nearPlaneCorners=[new nt.Vector3,new nt.Vector3,new nt.Vector3,new nt.Vector3],this._updateNearPlaneCorners(),this._boundary=new nt.Box3(new nt.Vector3(-1/0,-1/0,-1/0),new nt.Vector3(1/0,1/0,1/0)),this._cameraUp0=this._camera.up.clone(),this._target0=this._target.clone(),this._position0=this._camera.position.clone(),this._zoom0=this._zoom,this._focalOffset0=this._focalOffset.clone(),this._dollyControlCoord=new nt.Vector2,this.mouseButtons={left:$.ROTATE,middle:$.DOLLY,right:$.TRUCK,wheel:Ha(this._camera)?$.DOLLY:ra(this._camera)?$.ZOOM:$.NONE},this.touches={one:$.TOUCH_ROTATE,two:Ha(this._camera)?$.TOUCH_DOLLY_TRUCK:ra(this._camera)?$.TOUCH_ZOOM_TRUCK:$.NONE,three:$.TOUCH_TRUCK};const i=new nt.Vector2,s=new nt.Vector2,a=new nt.Vector2,r=m=>{if(!this._enabled||!this._domElement)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const b=this._domElement.getBoundingClientRect(),S=m.clientX/b.width,x=m.clientY/b.height;if(Sthis._interactiveArea.right||xthis._interactiveArea.bottom)return}const v=m.pointerType!=="mouse"?null:(m.buttons&Xt.LEFT)===Xt.LEFT?Xt.LEFT:(m.buttons&Xt.MIDDLE)===Xt.MIDDLE?Xt.MIDDLE:(m.buttons&Xt.RIGHT)===Xt.RIGHT?Xt.RIGHT:null;if(v!==null){const b=this._findPointerByMouseButton(v);b&&this._disposePointer(b)}if((m.buttons&Xt.LEFT)===Xt.LEFT&&this._lockedPointer)return;const y={pointerId:m.pointerId,clientX:m.clientX,clientY:m.clientY,deltaX:0,deltaY:0,mouseButton:v};this._activePointers.push(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),this._isDragging=!0,h(m)},o=m=>{m.cancelable&&m.preventDefault();const v=m.pointerId,y=this._lockedPointer||this._findPointerById(v);if(y){if(y.clientX=m.clientX,y.clientY=m.clientY,y.deltaX=m.movementX,y.deltaY=m.movementY,this._state=0,m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else(!this._isDragging&&this._lockedPointer||this._isDragging&&(m.buttons&Xt.LEFT)===Xt.LEFT)&&(this._state=this._state|this.mouseButtons.left),this._isDragging&&(m.buttons&Xt.MIDDLE)===Xt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),this._isDragging&&(m.buttons&Xt.RIGHT)===Xt.RIGHT&&(this._state=this._state|this.mouseButtons.right);f()}},l=m=>{const v=this._findPointerById(m.pointerId);if(!(v&&v===this._lockedPointer)){if(v&&this._disposePointer(v),m.pointerType==="touch")switch(this._activePointers.length){case 0:this._state=$.NONE;break;case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else this._state=$.NONE;p()}};let c=-1;const u=m=>{if(!this._domElement||!this._enabled||this.mouseButtons.wheel===$.NONE)return;if(this._interactiveArea.left!==0||this._interactiveArea.top!==0||this._interactiveArea.width!==1||this._interactiveArea.height!==1){const x=this._domElement.getBoundingClientRect(),M=m.clientX/x.width,C=m.clientY/x.height;if(Mthis._interactiveArea.right||Cthis._interactiveArea.bottom)return}if(m.preventDefault(),this.dollyToCursor||this.mouseButtons.wheel===$.ROTATE||this.mouseButtons.wheel===$.TRUCK){const x=performance.now();c-x<1e3&&this._getClientRect(this._elementRect),c=x}const v=mU?-1:-3,y=m.deltaMode===1||m.ctrlKey?m.deltaY/v:m.deltaY/(v*10),b=this.dollyToCursor?(m.clientX-this._elementRect.x)/this._elementRect.width*2-1:0,S=this.dollyToCursor?(m.clientY-this._elementRect.y)/this._elementRect.height*-2+1:0;switch(this.mouseButtons.wheel){case $.ROTATE:{this._rotateInternal(m.deltaX,m.deltaY),this._isUserControllingRotate=!0;break}case $.TRUCK:{this._truckInternal(m.deltaX,m.deltaY,!1,!1),this._isUserControllingTruck=!0;break}case $.SCREEN_PAN:{this._truckInternal(m.deltaX,m.deltaY,!1,!0),this._isUserControllingTruck=!0;break}case $.OFFSET:{this._truckInternal(m.deltaX,m.deltaY,!0,!1),this._isUserControllingOffset=!0;break}case $.DOLLY:{this._dollyInternal(-y,b,S),this._isUserControllingDolly=!0;break}case $.ZOOM:{this._zoomInternal(-y,b,S),this._isUserControllingZoom=!0;break}}this.dispatchEvent({type:"control"})},d=m=>{if(!(!this._domElement||!this._enabled)){if(this.mouseButtons.right===f_.ACTION.NONE){const v=m instanceof PointerEvent?m.pointerId:0,y=this._findPointerById(v);y&&this._disposePointer(y),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l);return}m.preventDefault()}},h=m=>{if(!this._enabled)return;if(jp(this._activePointers,Zn),this._getClientRect(this._elementRect),i.copy(Zn),s.copy(Zn),this._activePointers.length>=2){const y=Zn.x-this._activePointers[1].clientX,b=Zn.y-this._activePointers[1].clientY,S=Math.sqrt(y*y+b*b);a.set(0,S);const x=(this._activePointers[0].clientX+this._activePointers[1].clientX)*.5,M=(this._activePointers[0].clientY+this._activePointers[1].clientY)*.5;s.set(x,M)}if(this._state=0,!m)this._lockedPointer&&(this._state=this._state|this.mouseButtons.left);else if("pointerType"in m&&m.pointerType==="touch")switch(this._activePointers.length){case 1:this._state=this.touches.one;break;case 2:this._state=this.touches.two;break;case 3:this._state=this.touches.three;break}else!this._lockedPointer&&(m.buttons&Xt.LEFT)===Xt.LEFT&&(this._state=this._state|this.mouseButtons.left),(m.buttons&Xt.MIDDLE)===Xt.MIDDLE&&(this._state=this._state|this.mouseButtons.middle),(m.buttons&Xt.RIGHT)===Xt.RIGHT&&(this._state=this._state|this.mouseButtons.right);((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._sphericalEnd.theta=this._spherical.theta,this._sphericalEnd.phi=this._spherical.phi,this._thetaVelocity.value=0,this._phiVelocity.value=0),((this._state&$.TRUCK)===$.TRUCK||(this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN)&&(this._targetEnd.copy(this._target),this._targetVelocity.set(0,0,0)),((this._state&$.DOLLY)===$.DOLLY||(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE)&&(this._sphericalEnd.radius=this._spherical.radius,this._radiusVelocity.value=0),((this._state&$.ZOOM)===$.ZOOM||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._zoomEnd=this._zoom,this._zoomVelocity.value=0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._focalOffsetEnd.copy(this._focalOffset),this._focalOffsetVelocity.set(0,0,0)),this.dispatchEvent({type:"controlstart"})},f=()=>{if(!this._enabled||!this._dragNeedsUpdate)return;this._dragNeedsUpdate=!1,jp(this._activePointers,Zn);const v=this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement?this._lockedPointer||this._activePointers[0]:null,y=v?-v.deltaX:s.x-Zn.x,b=v?-v.deltaY:s.y-Zn.y;if(s.copy(Zn),((this._state&$.ROTATE)===$.ROTATE||(this._state&$.TOUCH_ROTATE)===$.TOUCH_ROTATE||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE)&&(this._rotateInternal(y,b),this._isUserControllingRotate=!0),(this._state&$.DOLLY)===$.DOLLY||(this._state&$.ZOOM)===$.ZOOM){const S=this.dollyToCursor?(i.x-this._elementRect.x)/this._elementRect.width*2-1:0,x=this.dollyToCursor?(i.y-this._elementRect.y)/this._elementRect.height*-2+1:0,M=this.dollyDragInverted?-1:1;(this._state&$.DOLLY)===$.DOLLY?(this._dollyInternal(M*b*zu,S,x),this._isUserControllingDolly=!0):(this._zoomInternal(M*b*zu,S,x),this._isUserControllingZoom=!0)}if((this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_ZOOM)===$.TOUCH_ZOOM||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_ZOOM_ROTATE)===$.TOUCH_ZOOM_ROTATE){const S=Zn.x-this._activePointers[1].clientX,x=Zn.y-this._activePointers[1].clientY,M=Math.sqrt(S*S+x*x),C=a.y-M;a.set(0,M);const w=this.dollyToCursor?(s.x-this._elementRect.x)/this._elementRect.width*2-1:0,E=this.dollyToCursor?(s.y-this._elementRect.y)/this._elementRect.height*-2+1:0;(this._state&$.TOUCH_DOLLY)===$.TOUCH_DOLLY||(this._state&$.TOUCH_DOLLY_ROTATE)===$.TOUCH_DOLLY_ROTATE||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET?(this._dollyInternal(C*zu,w,E),this._isUserControllingDolly=!0):(this._zoomInternal(C*zu,w,E),this._isUserControllingZoom=!0)}((this._state&$.TRUCK)===$.TRUCK||(this._state&$.TOUCH_TRUCK)===$.TOUCH_TRUCK||(this._state&$.TOUCH_DOLLY_TRUCK)===$.TOUCH_DOLLY_TRUCK||(this._state&$.TOUCH_ZOOM_TRUCK)===$.TOUCH_ZOOM_TRUCK)&&(this._truckInternal(y,b,!1,!1),this._isUserControllingTruck=!0),((this._state&$.SCREEN_PAN)===$.SCREEN_PAN||(this._state&$.TOUCH_SCREEN_PAN)===$.TOUCH_SCREEN_PAN||(this._state&$.TOUCH_DOLLY_SCREEN_PAN)===$.TOUCH_DOLLY_SCREEN_PAN||(this._state&$.TOUCH_ZOOM_SCREEN_PAN)===$.TOUCH_ZOOM_SCREEN_PAN)&&(this._truckInternal(y,b,!1,!0),this._isUserControllingTruck=!0),((this._state&$.OFFSET)===$.OFFSET||(this._state&$.TOUCH_OFFSET)===$.TOUCH_OFFSET||(this._state&$.TOUCH_DOLLY_OFFSET)===$.TOUCH_DOLLY_OFFSET||(this._state&$.TOUCH_ZOOM_OFFSET)===$.TOUCH_ZOOM_OFFSET)&&(this._truckInternal(y,b,!0,!1),this._isUserControllingOffset=!0),this.dispatchEvent({type:"control"})},p=()=>{jp(this._activePointers,Zn),s.copy(Zn),this._dragNeedsUpdate=!1,(this._activePointers.length===0||this._activePointers.length===1&&this._activePointers[0]===this._lockedPointer)&&(this._isDragging=!1),this._activePointers.length===0&&this._domElement&&(this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this.dispatchEvent({type:"controlend"}))};this.lockPointer=()=>{!this._enabled||!this._domElement||(this.cancel(),this._lockedPointer={pointerId:-1,clientX:0,clientY:0,deltaX:0,deltaY:0,mouseButton:null},this._activePointers.push(this._lockedPointer),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.requestPointerLock(),this._domElement.ownerDocument.addEventListener("pointerlockchange",g),this._domElement.ownerDocument.addEventListener("pointerlockerror",_),this._domElement.ownerDocument.addEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.addEventListener("pointerup",l),h())},this.unlockPointer=()=>{var m,v,y;this._lockedPointer!==null&&(this._disposePointer(this._lockedPointer),this._lockedPointer=null),(m=this._domElement)===null||m===void 0||m.ownerDocument.exitPointerLock(),(v=this._domElement)===null||v===void 0||v.ownerDocument.removeEventListener("pointerlockchange",g),(y=this._domElement)===null||y===void 0||y.ownerDocument.removeEventListener("pointerlockerror",_),this.cancel()};const g=()=>{this._domElement&&this._domElement.ownerDocument.pointerLockElement===this._domElement||this.unlockPointer()},_=()=>{this.unlockPointer()};this._addAllEventListeners=m=>{this._domElement=m,this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none",this._domElement.addEventListener("pointerdown",r),this._domElement.addEventListener("pointercancel",l),this._domElement.addEventListener("wheel",u,{passive:!1}),this._domElement.addEventListener("contextmenu",d)},this._removeAllEventListeners=()=>{this._domElement&&(this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect="",this._domElement.removeEventListener("pointerdown",r),this._domElement.removeEventListener("pointercancel",l),this._domElement.removeEventListener("wheel",u,{passive:!1}),this._domElement.removeEventListener("contextmenu",d),this._domElement.ownerDocument.removeEventListener("pointermove",o,{passive:!1}),this._domElement.ownerDocument.removeEventListener("pointerup",l),this._domElement.ownerDocument.removeEventListener("pointerlockchange",g),this._domElement.ownerDocument.removeEventListener("pointerlockerror",_))},this.cancel=()=>{this._state!==$.NONE&&(this._state=$.NONE,this._activePointers.length=0,p())},t&&this.connect(t),this.update(0)}get camera(){return this._camera}set camera(e){this._camera=e,this.updateCameraUp(),this._camera.updateProjectionMatrix(),this._updateNearPlaneCorners(),this._needsUpdate=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e,this._domElement&&(e?(this._domElement.style.touchAction="none",this._domElement.style.userSelect="none",this._domElement.style.webkitUserSelect="none"):(this.cancel(),this._domElement.style.touchAction="",this._domElement.style.userSelect="",this._domElement.style.webkitUserSelect=""))}get active(){return!this._hasRested}get currentAction(){return this._state}get distance(){return this._spherical.radius}set distance(e){this._spherical.radius===e&&this._sphericalEnd.radius===e||(this._spherical.radius=e,this._sphericalEnd.radius=e,this._needsUpdate=!0)}get azimuthAngle(){return this._spherical.theta}set azimuthAngle(e){this._spherical.theta===e&&this._sphericalEnd.theta===e||(this._spherical.theta=e,this._sphericalEnd.theta=e,this._needsUpdate=!0)}get polarAngle(){return this._spherical.phi}set polarAngle(e){this._spherical.phi===e&&this._sphericalEnd.phi===e||(this._spherical.phi=e,this._sphericalEnd.phi=e,this._needsUpdate=!0)}get boundaryEnclosesCamera(){return this._boundaryEnclosesCamera}set boundaryEnclosesCamera(e){this._boundaryEnclosesCamera=e,this._needsUpdate=!0}set interactiveArea(e){this._interactiveArea.width=$i(e.width,0,1),this._interactiveArea.height=$i(e.height,0,1),this._interactiveArea.x=$i(e.x,0,1-this._interactiveArea.width),this._interactiveArea.y=$i(e.y,0,1-this._interactiveArea.height)}addEventListener(e,t){super.addEventListener(e,t)}removeEventListener(e,t){super.removeEventListener(e,t)}rotate(e,t,i=!1){return this.rotateTo(this._sphericalEnd.theta+e,this._sphericalEnd.phi+t,i)}rotateAzimuthTo(e,t=!1){return this.rotateTo(e,this._sphericalEnd.phi,t)}rotatePolarTo(e,t=!1){return this.rotateTo(this._sphericalEnd.theta,e,t)}rotateTo(e,t,i=!1){this._isUserControllingRotate=!1;const s=$i(e,this.minAzimuthAngle,this.maxAzimuthAngle),a=$i(t,this.minPolarAngle,this.maxPolarAngle);this._sphericalEnd.theta=s,this._sphericalEnd.phi=a,this._sphericalEnd.makeSafe(),this._needsUpdate=!0,i||(this._spherical.theta=this._sphericalEnd.theta,this._spherical.phi=this._sphericalEnd.phi);const r=!i||Rt(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Rt(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold);return this._createOnRestPromise(r)}dolly(e,t=!1){return this.dollyTo(this._sphericalEnd.radius-e,t)}dollyTo(e,t=!1){return this._isUserControllingDolly=!1,this._lastDollyDirection=Jr.NONE,this._changedDolly=0,this._dollyToNoClamp($i(e,this.minDistance,this.maxDistance),t)}_dollyToNoClamp(e,t=!1){const i=this._sphericalEnd.radius;if(this.colliderMeshes.length>=1){const r=this._collisionTest(),o=Rt(r,this._spherical.radius);if(!(i>e)&&o)return Promise.resolve();this._sphericalEnd.radius=Math.min(e,r)}else this._sphericalEnd.radius=e;this._needsUpdate=!0,t||(this._spherical.radius=this._sphericalEnd.radius);const a=!t||Rt(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(a)}dollyInFixed(e,t=!1){this._targetEnd.add(this._getCameraDirection(xl).multiplyScalar(e)),t||this._target.copy(this._targetEnd);const i=!t||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(i)}zoom(e,t=!1){return this.zoomTo(this._zoomEnd+e,t)}zoomTo(e,t=!1){this._isUserControllingZoom=!1,this._zoomEnd=$i(e,this.minZoom,this.maxZoom),this._needsUpdate=!0,t||(this._zoom=this._zoomEnd);const i=!t||Rt(this._zoom,this._zoomEnd,this.restThreshold);return this._changedZoom=0,this._createOnRestPromise(i)}pan(e,t,i=!1){return console.warn("`pan` has been renamed to `truck`"),this.truck(e,t,i)}truck(e,t,i=!1){this._camera.updateMatrix(),ls.setFromMatrixColumn(this._camera.matrix,0),cs.setFromMatrixColumn(this._camera.matrix,1),ls.multiplyScalar(e),cs.multiplyScalar(-t);const s=pt.copy(ls).add(cs),a=Mt.copy(this._targetEnd).add(s);return this.moveTo(a.x,a.y,a.z,i)}forward(e,t=!1){pt.setFromMatrixColumn(this._camera.matrix,0),pt.crossVectors(this._camera.up,pt),pt.multiplyScalar(e);const i=Mt.copy(this._targetEnd).add(pt);return this.moveTo(i.x,i.y,i.z,t)}elevate(e,t=!1){return pt.copy(this._camera.up).multiplyScalar(e),this.moveTo(this._targetEnd.x+pt.x,this._targetEnd.y+pt.y,this._targetEnd.z+pt.z,t)}moveTo(e,t,i,s=!1){this._isUserControllingTruck=!1;const a=pt.set(e,t,i).sub(this._targetEnd);this._encloseToBoundary(this._targetEnd,a,this.boundaryFriction),this._needsUpdate=!0,s||this._target.copy(this._targetEnd);const r=!s||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold);return this._createOnRestPromise(r)}lookInDirectionOf(e,t,i,s=!1){const o=pt.set(e,t,i).sub(this._targetEnd).normalize().multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);return this.setPosition(o.x,o.y,o.z,s)}fitToBox(e,t,{cover:i=!1,paddingLeft:s=0,paddingRight:a=0,paddingBottom:r=0,paddingTop:o=0}={}){const l=[],c=e.isBox3?to.copy(e):to.setFromObject(e);c.isEmpty()&&(console.warn("camera-controls: fitTo() cannot be used with an empty box. Aborting"),Promise.resolve());const u=jv(this._sphericalEnd.theta,Yv),d=jv(this._sphericalEnd.phi,Yv);l.push(this.rotateTo(u,d,t));const h=pt.setFromSpherical(this._sphericalEnd).normalize(),f=nb.setFromUnitVectors(h,Qp),p=Rt(Math.abs(h.y),1);p&&f.multiply(tm.setFromAxisAngle(Hu,u)),f.multiply(this._yAxisUpSpaceInverse);const g=tb.makeEmpty();Mt.copy(c.min).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.min).setX(c.max.x).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.min).setY(c.max.y).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).setZ(c.min.z).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.min).setZ(c.max.z).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).setY(c.min.y).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).setX(c.min.x).applyQuaternion(f),g.expandByPoint(Mt),Mt.copy(c.max).applyQuaternion(f),g.expandByPoint(Mt),g.min.x-=s,g.min.y-=r,g.max.x+=a,g.max.y+=o,f.setFromUnitVectors(Qp,h),p&&f.premultiply(tm.invert()),f.premultiply(this._yAxisUpSpace);const _=g.getSize(pt),m=g.getCenter(Mt).applyQuaternion(f);if(Ha(this._camera)){const v=this.getDistanceToFitBox(_.x,_.y,_.z,i);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.dollyTo(v,t)),l.push(this.setFocalOffset(0,0,0,t))}else if(ra(this._camera)){const v=this._camera,y=v.right-v.left,b=v.top-v.bottom,S=i?Math.max(y/_.x,b/_.y):Math.min(y/_.x,b/_.y);l.push(this.moveTo(m.x,m.y,m.z,t)),l.push(this.zoomTo(S,t)),l.push(this.setFocalOffset(0,0,0,t))}return Promise.all(l)}fitToSphere(e,t){const i=[],a="isObject3D"in e?f_.createBoundingSphere(e,em):em.copy(e);if(i.push(this.moveTo(a.center.x,a.center.y,a.center.z,t)),Ha(this._camera)){const r=this.getDistanceToFitSphere(a.radius);i.push(this.dollyTo(r,t))}else if(ra(this._camera)){const r=this._camera.right-this._camera.left,o=this._camera.top-this._camera.bottom,l=2*a.radius,c=Math.min(r/l,o/l);i.push(this.zoomTo(c,t))}return i.push(this.setFocalOffset(0,0,0,t)),Promise.all(i)}setLookAt(e,t,i,s,a,r,o=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Jr.NONE,this._changedDolly=0;const l=Mt.set(s,a,r),c=pt.set(e,t,i);this._targetEnd.copy(l),this._sphericalEnd.setFromVector3(c.sub(l).applyQuaternion(this._yAxisUpSpace)),this.normalizeRotations(),this._needsUpdate=!0,o||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const u=!o||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold)&&Rt(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Rt(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Rt(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(u)}lerpLookAt(e,t,i,s,a,r,o,l,c,u,d,h,f,p=!1){this._isUserControllingRotate=!1,this._isUserControllingDolly=!1,this._isUserControllingTruck=!1,this._lastDollyDirection=Jr.NONE,this._changedDolly=0;const g=pt.set(s,a,r),_=Mt.set(e,t,i);Mi.setFromVector3(_.sub(g).applyQuaternion(this._yAxisUpSpace));const m=eo.set(u,d,h),v=Mt.set(o,l,c);wl.setFromVector3(v.sub(m).applyQuaternion(this._yAxisUpSpace)),this._targetEnd.copy(g.lerp(m,f));const y=wl.theta-Mi.theta,b=wl.phi-Mi.phi,S=wl.radius-Mi.radius;this._sphericalEnd.set(Mi.radius+S*f,Mi.phi+b*f,Mi.theta+y*f),this.normalizeRotations(),this._needsUpdate=!0,p||(this._target.copy(this._targetEnd),this._spherical.copy(this._sphericalEnd));const x=!p||Rt(this._target.x,this._targetEnd.x,this.restThreshold)&&Rt(this._target.y,this._targetEnd.y,this.restThreshold)&&Rt(this._target.z,this._targetEnd.z,this.restThreshold)&&Rt(this._spherical.theta,this._sphericalEnd.theta,this.restThreshold)&&Rt(this._spherical.phi,this._sphericalEnd.phi,this.restThreshold)&&Rt(this._spherical.radius,this._sphericalEnd.radius,this.restThreshold);return this._createOnRestPromise(x)}setPosition(e,t,i,s=!1){return this.setLookAt(e,t,i,this._targetEnd.x,this._targetEnd.y,this._targetEnd.z,s)}setTarget(e,t,i,s=!1){const a=this.getPosition(pt),r=this.setLookAt(a.x,a.y,a.z,e,t,i,s);return this._sphericalEnd.phi=$i(this._sphericalEnd.phi,this.minPolarAngle,this.maxPolarAngle),r}setFocalOffset(e,t,i,s=!1){this._isUserControllingOffset=!1,this._focalOffsetEnd.set(e,t,i),this._needsUpdate=!0,s||this._focalOffset.copy(this._focalOffsetEnd);const a=!s||Rt(this._focalOffset.x,this._focalOffsetEnd.x,this.restThreshold)&&Rt(this._focalOffset.y,this._focalOffsetEnd.y,this.restThreshold)&&Rt(this._focalOffset.z,this._focalOffsetEnd.z,this.restThreshold);return this._createOnRestPromise(a)}setOrbitPoint(e,t,i){this._camera.updateMatrixWorld(),ls.setFromMatrixColumn(this._camera.matrixWorldInverse,0),cs.setFromMatrixColumn(this._camera.matrixWorldInverse,1),Va.setFromMatrixColumn(this._camera.matrixWorldInverse,2);const s=pt.set(e,t,i),a=s.distanceTo(this._camera.position),r=s.sub(this._camera.position);ls.multiplyScalar(r.x),cs.multiplyScalar(r.y),Va.multiplyScalar(r.z),pt.copy(ls).add(cs).add(Va),pt.z=pt.z+a,this.dollyTo(a,!1),this.setFocalOffset(-pt.x,pt.y,-pt.z,!1),this.moveTo(e,t,i,!1)}setBoundary(e){if(!e){this._boundary.min.set(-1/0,-1/0,-1/0),this._boundary.max.set(1/0,1/0,1/0),this._needsUpdate=!0;return}this._boundary.copy(e),this._boundary.clampPoint(this._targetEnd,this._targetEnd),this._needsUpdate=!0}setViewport(e,t,i,s){if(e===null){this._viewport=null;return}this._viewport=this._viewport||new nt.Vector4,typeof e=="number"?this._viewport.set(e,t,i,s):this._viewport.copy(e)}getDistanceToFitBox(e,t,i,s=!1){if(Zp(this._camera,"getDistanceToFitBox"))return this._spherical.radius;const a=e/t,r=this._camera.getEffectiveFOV()*yl,o=this._camera.aspect;return((s?a>o:at.pointerId===e)}_findPointerByMouseButton(e){return this._activePointers.find(t=>t.mouseButton===e)}_disposePointer(e){this._activePointers.splice(this._activePointers.indexOf(e),1)}_encloseToBoundary(e,t,i){const s=t.lengthSq();if(s===0)return e;const a=Mt.copy(t).add(e),o=this._boundary.clampPoint(a,eo).sub(a),l=o.lengthSq();if(l===0)return e.add(t);if(l===s)return e;if(i===0)return e.add(t).add(o);{const c=1+i*l/t.dot(o);return e.add(Mt.copy(t).multiplyScalar(c)).add(o.multiplyScalar(1-i))}}_updateNearPlaneCorners(){if(Ha(this._camera)){const e=this._camera,t=e.near,i=e.getEffectiveFOV()*yl,s=Math.tan(i*.5)*t,a=s*e.aspect;this._nearPlaneCorners[0].set(-a,-s,0),this._nearPlaneCorners[1].set(a,-s,0),this._nearPlaneCorners[2].set(a,s,0),this._nearPlaneCorners[3].set(-a,s,0)}else if(ra(this._camera)){const e=this._camera,t=1/e.zoom,i=e.left*t,s=e.right*t,a=e.top*t,r=e.bottom*t;this._nearPlaneCorners[0].set(i,a,0),this._nearPlaneCorners[1].set(s,a,0),this._nearPlaneCorners[2].set(s,r,0),this._nearPlaneCorners[3].set(i,r,0)}}_collisionTest(){let e=1/0;if(!(this.colliderMeshes.length>=1)||Zp(this._camera,"_collisionTest"))return e;const i=this._getTargetDirection(xl);nm.lookAt(Jv,i,this._camera.up);for(let s=0;s<4;s++){const a=Mt.copy(this._nearPlaneCorners[s]);a.applyMatrix4(nm);const r=eo.addVectors(this._target,a);Vu.set(r,i),Vu.far=this._spherical.radius+1;const o=Vu.intersectObjects(this.colliderMeshes);o.length!==0&&o[0].distance{const i=()=>{this.removeEventListener("rest",i),t()};this.addEventListener("rest",i)}))}_addAllEventListeners(e){}_removeAllEventListeners(){}get dampingFactor(){return console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead."),0}set dampingFactor(e){console.warn(".dampingFactor has been deprecated. use smoothTime (in seconds) instead.")}get draggingDampingFactor(){return console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead."),0}set draggingDampingFactor(e){console.warn(".draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.")}static createBoundingSphere(e,t=new nt.Sphere){const i=t,s=i.center;to.makeEmpty(),e.traverseVisible(r=>{r.isMesh&&to.expandByObject(r)}),to.getCenter(s);let a=0;return e.traverseVisible(r=>{if(!r.isMesh)return;const o=r;if(!o.geometry)return;const l=o.geometry.clone();l.applyMatrix4(o.matrixWorld);const u=l.attributes.position;for(let d=0,h=u.count;di.preventDefault()),this.isFollowingViewer=!1,this.followTargetPosition=new T,this.followTargetQuaternion=new ht,this.followPositionLerpFactor=.12,this.followRotationSlerpFactor=.1,this.hasFollowTarget=!1,this.isRightMouseDown=!1,this.lastMouseX=null,this.lastMouseY=null,this.savedCameraState=null,this.isInReplayMode=!1}setMode(e){if(this.mode=e,e==="ballOrbit"){if(this.controls.enabled=!0,this.lastBallOrbitPos=null,this.ballOrbitScrollHandler||(this.ballOrbitScrollHandler=t=>{if(this.mode==="ballOrbit"&&!this.isFollowingViewer){t.preventDefault();const i=Math.max(this.controls.distance*.2,100);t.deltaY>0?this.controls.dolly(-i,!0):this.controls.dolly(i,!0)}},this.domElement.addEventListener("wheel",this.ballOrbitScrollHandler,{passive:!1})),this.targetBall){const t=this.targetBall.position;this.camera.position.distanceTo(t),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}return}if(e==="free"){if(this.controls.enabled=!1,!this.freeCamKeys){this.freeCamKeys={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},this.freeCamSpeed=2e3,this.freeCamRotation={yaw:0,pitch:0};const t=new T;this.camera.getWorldDirection(t),this.freeCamRotation.yaw=Math.atan2(t.x,t.z),this.freeCamRotation.pitch=Math.asin(-t.y),this.onKeyDown=i=>this.handleFreeCamKeyDown(i),this.onKeyUp=i=>this.handleFreeCamKeyUp(i),this.onMouseMove=i=>this.handleFreeCamMouseMove(i),this.onMouseDown=i=>{i.button===2&&this.mode==="free"&&!this.isFollowingViewer&&(this.isRightMouseDown=!0,this.domElement.requestPointerLock?.())},this.onMouseUp=i=>{i.button===2&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.())},this.onPointerLockChange=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onMouseLeave=()=>{document.pointerLockElement!==this.domElement&&(this.isRightMouseDown=!1)},this.onWindowBlur=()=>{this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1)},this.onVisibilityChange=()=>{document.hidden&&(this.isRightMouseDown=!1,document.pointerLockElement===this.domElement&&document.exitPointerLock?.(),this.freeCamKeys&&(this.freeCamKeys.forward=!1,this.freeCamKeys.backward=!1,this.freeCamKeys.left=!1,this.freeCamKeys.right=!1,this.freeCamKeys.up=!1,this.freeCamKeys.down=!1))},document.addEventListener("keydown",this.onKeyDown),document.addEventListener("keyup",this.onKeyUp),document.addEventListener("mousemove",this.onMouseMove),this.domElement.addEventListener("mousedown",this.onMouseDown),document.addEventListener("mouseup",this.onMouseUp),document.addEventListener("pointerlockchange",this.onPointerLockChange),this.domElement.addEventListener("mouseleave",this.onMouseLeave),window.addEventListener("blur",this.onWindowBlur),document.addEventListener("visibilitychange",this.onVisibilityChange)}this.isRightMouseDown=!1}else this.controls.enabled=!1,this.lastIsBallCam=null,this.currentBlend=0,this.targetBlend=0}setTargetCar(e){if(this.targetCar!==e&&(this.currentBallCamAngle=null,this.targetCar&&e)){this.targetHandoff={elapsed:0,duration:_U,startPosition:this.camera.position.clone(),startQuaternion:this.camera.quaternion.clone()};const t=new T().subVectors(this.camera.position,e.position);t.y=0,t.length()>.01&&(t.normalize(),this.smoothedCarYaw=Math.atan2(-t.x,-t.z)),this.lastCarPos&&this.lastCarPos.copy(e.position)}this.targetCar=e}setTargetBall(e){this.targetBall=e}handleFreeCamKeyDown(e){if(this.mode!=="free"||this.isFollowingViewer)return;const t=e.target;if(!(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.isContentEditable))switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!0;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!0;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!0;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!0;break;case"Space":this.freeCamKeys.up=!0;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!0;break}}handleFreeCamKeyUp(e){switch(e.code){case"KeyW":case"ArrowUp":this.freeCamKeys.forward=!1;break;case"KeyS":case"ArrowDown":this.freeCamKeys.backward=!1;break;case"KeyA":case"ArrowLeft":this.freeCamKeys.left=!1;break;case"KeyD":case"ArrowRight":this.freeCamKeys.right=!1;break;case"Space":this.freeCamKeys.up=!1;break;case"ShiftLeft":case"ShiftRight":this.freeCamKeys.down=!1;break}}handleFreeCamMouseMove(e){if(this.mode!=="free"||!this.isRightMouseDown||this.isFollowingViewer)return;const t=e.movementX||0,i=e.movementY||0,s=.003;this.freeCamRotation.yaw-=t*s,this.freeCamRotation.pitch+=i*s,this.freeCamRotation.pitch=Math.max(-Math.PI/2+.01,Math.min(Math.PI/2-.01,this.freeCamRotation.pitch))}updateFreeCam(e){if(!this.freeCamKeys)return;const t=new T(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));t.normalize();const i=new T(Math.sin(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch),-Math.sin(this.freeCamRotation.pitch),Math.cos(this.freeCamRotation.yaw)*Math.cos(this.freeCamRotation.pitch));i.normalize();const s=new T(Math.sin(this.freeCamRotation.yaw-Math.PI/2),0,Math.cos(this.freeCamRotation.yaw-Math.PI/2)),a=new T(0,1,0),r=new T,o=this.freeCamSpeed*e;this.freeCamKeys.forward&&r.add(i.clone().multiplyScalar(o)),this.freeCamKeys.backward&&r.add(i.clone().multiplyScalar(-o)),this.freeCamKeys.right&&r.add(s.clone().multiplyScalar(o)),this.freeCamKeys.left&&r.add(s.clone().multiplyScalar(-o)),this.freeCamKeys.up&&r.add(a.clone().multiplyScalar(o)),this.freeCamKeys.down&&r.add(a.clone().multiplyScalar(-o)),r.length()>0&&r.normalize().multiplyScalar(o),this.camera.position.add(r);const l=this.camera.position.clone().add(t);this.camera.lookAt(l),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,l.x,l.y,l.z,!1)}update(e,t=!0){if(this.isFollowingViewer){this.updateFollowInterpolation(e);return}if(this.mode==="free"){this.updateFreeCam(e),this.controls.update(e);return}if(this.mode==="ballOrbit"){if(this.targetBall){const p=this.targetBall.position;this.lastBallOrbitPos||(this.lastBallOrbitPos=p.clone());const g=new T().subVectors(p,this.lastBallOrbitPos);if(this.controls.setTarget(p.x,p.y,p.z,!1),g.lengthSq()>.01){const _=new T;this.controls.getPosition(_);const m=_.x+g.x,v=_.y+g.y,y=_.z+g.z;this.controls.setPosition(m,v,y,!1),this.lastBallOrbitPos.copy(p)}}this.controls.update(e);return}if(!this.targetCar){this.controls.update(e);return}const i=this.targetCar.position.clone(),s=this.targetCar.quaternion;if(this.lastIsBallCam!==null&&this.lastIsBallCam!==t&&!t){const p=new T().subVectors(this.camera.position,i);p.y=0,p.length()>.01&&(p.normalize(),this.smoothedCarYaw=Math.atan2(-p.x,-p.z))}this.lastIsBallCam=t;const a=this.calculateCarCamPosition(i,s,e),r=this.calculateBallCamPosition(i,s,e);this.targetBlend=t?1:0;const o=Math.max(.15,Math.min(.6,this.baseDuration/this.transitionSpeed)),l=e/o;this.currentBlendthis.targetBlend&&(this.currentBlend=Math.max(this.currentBlend-l,this.targetBlend));const c=this.currentBlend,u=c*c*(3-2*c),d=new T().lerpVectors(a.cameraPos,r.cameraPos,u);this._tempMatrix.lookAt(a.cameraPos,a.lookTarget,new T(0,1,0)),this._tempQuatCarCam.setFromRotationMatrix(this._tempMatrix),this._tempMatrix.lookAt(r.cameraPos,r.lookTarget,new T(0,1,0)),this._tempQuatBallCam.setFromRotationMatrix(this._tempMatrix),this._tempQuatCarCam.dot(this._tempQuatBallCam)<0&&this._tempQuatBallCam.set(-this._tempQuatBallCam.x,-this._tempQuatBallCam.y,-this._tempQuatBallCam.z,-this._tempQuatBallCam.w);const h=new ht().slerpQuaternions(this._tempQuatCarCam,this._tempQuatBallCam,u);if(this.targetHandoff){this.targetHandoff.elapsed+=e;const p=Math.min(1,this.targetHandoff.elapsed/this.targetHandoff.duration),g=p*p*(3-2*p),_=d.clone(),m=h.clone();d.lerpVectors(this.targetHandoff.startPosition,_,g),h.slerpQuaternions(this.targetHandoff.startQuaternion,m,g),p>=1&&(this.targetHandoff=null)}if(this.camera.position.copy(d),this.camera.quaternion.copy(h),this.followAngle!==0){const p=this.followAngle*Math.PI/180;this.camera.rotateX(-p)}this.currentCamPos||(this.currentCamPos=new T),this.currentLookTarget||(this.currentLookTarget=new T),this.currentCamPos.copy(d);const f=new T(0,0,-1).applyQuaternion(this.camera.quaternion);this.currentLookTarget.copy(d).add(f.multiplyScalar(100)),this.enforceMinHeight()}calculateBallCamPosition(e,t,i=1/60){if(!this.targetBall)return this.calculateCarCamPosition(e,t,i);const s=this.targetBall.position.clone(),a=new T().subVectors(e,s);a.y=0,a.normalize();const r=e.clone().add(a.multiplyScalar(this.followDistance)),o=s.y-e.y,c=Math.min(1,Math.max(0,o/800));r.y=e.y+this.followHeight-c*100,r.y.01)s.normalize(),u=Math.atan2(s.x,s.z);else if(a>.05){s.normalize();let y=Math.atan2(s.x,s.z)-o;for(;y>Math.PI;)y-=Math.PI*2;for(;y<-Math.PI;)y+=Math.PI*2;Math.abs(y)>Math.PI/2?u=o+Math.PI:u=o}else u=o;this.lastCarPos.copy(e),this.smoothedCarYaw===void 0&&(this.smoothedCarYaw=u);let d=u-this.smoothedCarYaw;for(;d>Math.PI;)d-=Math.PI*2;for(;d<-Math.PI;)d+=Math.PI*2;const h=c?this.swivelSpeed*.4:this.swivelSpeed;this.smoothedCarYaw+=d*Math.min(1,h*(1/60));const f=-Math.sin(this.smoothedCarYaw),p=-Math.cos(this.smoothedCarYaw),g=new T(e.x+f*this.followDistance,e.y+this.followHeight,e.z+p*this.followDistance);g.yMath.PI;)s-=Math.PI*2;for(;s<-Math.PI;)s+=Math.PI*2;this.followCurrentOrbitParams.azimuth+=s*.15,this.followCurrentOrbitParams.polar+=(this.followTargetOrbitParams.polar-this.followCurrentOrbitParams.polar)*.15,this.controls.setTarget(t.x,t.y,t.z,!1),this.controls.dollyTo(this.followCurrentOrbitParams.distance,!1),this.controls.rotateTo(this.followCurrentOrbitParams.azimuth,this.followCurrentOrbitParams.polar,!1),this.controls.update(e)}}else{if(this.camera.position.lerp(this.followTargetPosition,this.followPositionLerpFactor),this.camera.quaternion.slerp(this.followTargetQuaternion,this.followRotationSlerpFactor),this.freeCamRotation){const i=new T;this.camera.getWorldDirection(i),this.freeCamRotation.yaw=Math.atan2(i.x,i.z),this.freeCamRotation.pitch=Math.asin(-i.y)}const t=new T;this.camera.getWorldDirection(t),t.multiplyScalar(100).add(this.camera.position),this.controls.setLookAt(this.camera.position.x,this.camera.position.y,this.camera.position.z,t.x,t.y,t.z,!1)}}setDefaultFreecamPosition(){if(this.camera.position.copy(this.defaultFreecamPosition),this.camera.lookAt(this.defaultFreecamLookAt),this.freeCamRotation){const e=new T;this.camera.getWorldDirection(e),this.freeCamRotation.yaw=Math.atan2(e.x,e.z),this.freeCamRotation.pitch=Math.asin(-e.y)}this.controls.setLookAt(this.defaultFreecamPosition.x,this.defaultFreecamPosition.y,this.defaultFreecamPosition.z,this.defaultFreecamLookAt.x,this.defaultFreecamLookAt.y,this.defaultFreecamLookAt.z,!1)}getIsPointerLocked(){return this.isPointerLocked||!1}setPointerLockCallback(e){this.onPointerLockStateChange=e}dispose(){this.controls.dispose(),this.ballOrbitScrollHandler&&this.domElement.removeEventListener("wheel",this.ballOrbitScrollHandler),this.onKeyDown&&document.removeEventListener("keydown",this.onKeyDown),this.onKeyUp&&document.removeEventListener("keyup",this.onKeyUp),this.onMouseMove&&document.removeEventListener("mousemove",this.onMouseMove),this.onMouseDown&&this.domElement.removeEventListener("mousedown",this.onMouseDown),this.onMouseUp&&document.removeEventListener("mouseup",this.onMouseUp),this.onPointerLockChange&&document.removeEventListener("pointerlockchange",this.onPointerLockChange),this.onMouseLeave&&this.domElement.removeEventListener("mouseleave",this.onMouseLeave),this.onWindowBlur&&window.removeEventListener("blur",this.onWindowBlur),this.onVisibilityChange&&document.removeEventListener("visibilitychange",this.onVisibilityChange)}}function sb(n){if(n.pitch===void 0||n.angle!==void 0)return n;const{pitch:e,...t}=n;return{...t,angle:e}}const yU={distance:260,height:90,angle:-4,stiffness:.45,swivelSpeed:4.3,transitionSpeed:1.3,fov:110};function vU(n={}){let e=null,t=null,i=n.mode??(n.follow?"follow":"orbit"),s=n.follow??null,a=n.ballCam??null,r=a??!0,o=sb({...n.settings}),l=1;const c=n.useRecordedSettings!==!1;let u=null;const d=new T;let h=!1;function f(){if(!(!t||!e)){if(t.player.controls.enabled=i==="orbit",i==="free")e.setMode("free");else if(i==="ballOrbit"){const y=_();y&&e.setTargetBall(y),e.setMode("ballOrbit")}else e.setMode("car");u=null}}function p(){return!c||!t||!s?null:t.player.adapter.getPlayer(s)?.cameraSettings??null}function g(){const y={...yU,...p(),...o};return l!==1&&y.distance!==void 0&&(y.distance*=l),y}function _(){if(!t)return null;const y=t.player.actorManager;return y.ballActorId!=null?y.actors[y.ballActorId]??null:null}function m(y){const b=g().fov;if(!b)return;const S=b*Math.PI/180,x=16/9,M=2*Math.atan(Math.tan(S/2)/x),C=2*Math.atan(Math.tan(S/2)/y.aspect),w=Math.max(M,C)*180/Math.PI;Math.abs(y.fov-w)>.1&&(y.fov=w,y.updateProjectionMatrix())}function v(y,b){if(!e)return;if(i==="free"){o.freeCamSpeed&&(e.freeCamSpeed=o.freeCamSpeed),e.update(b);return}if(i==="ballOrbit"){y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.update(b);return}const x=(s?y.cars.find(C=>C.name===s):void 0)?.object3d??null;if(!x){e.update(b);return}e.setTargetCar(x),y.ball.object3d&&e.setTargetBall(y.ball.object3d),e.setFollowSettings(g());const M=s?y.player.adapter.getPlayer(s):void 0;r=a??M?.isBallCam??!0,d.copy(x.position),h=!0,e.update(b,r)}return{id:"camera",setup(y){t=y,e=new gU(y.camera,y.renderer.domElement),f()},beforeRender(y){if(!e||(m(y.camera),i==="orbit"))return;const b=performance.now(),S=u===null?1/60:Math.min(.1,(b-u)/1e3);u=b,v(y,S)},teardown(){i="orbit",t&&(t.player.controls.enabled=!0),e?.dispose(),e=null,t=null},setMode(y){y!==i&&(i=y,f())},getMode(){return i},follow(y){s=y,i="follow",f()},release(){i="orbit",t&&h&&t.player.controls.target.copy(d),f()},getTarget(){return s},setBallCam(y){a=y,y!==null&&(r=y)},getBallCam(){return r},setCameraSettings(y){o=y===null?{}:{...o,...sb(y)}},setDistanceScale(y){l=Math.max(.25,y)},getDistanceScale(){return l},getCameraSettings(){return g()},getRecordedSettings(){const y=p();return y?{...y}:null}}}const bU={"top-left":"top: 8px; left: 8px;","top-right":"top: 8px; right: 8px;","bottom-left":"bottom: 8px; left: 8px;","bottom-right":"bottom: 8px; right: 8px;"};function xU(n={}){const e=n.corner??"top-right",t=n.updateIntervalMs??500,i=()=>typeof n.mount=="function"?n.mount():n.mount??null;let s=null,a=null,r=null,o=0,l=performance.now(),c=0,u=0;const d=typeof n.onSample=="function";return{id:"fps-overlay",setup(h){if(l=performance.now(),o=0,u=h.player.getState().frameIndex,c=u,d)return;const f=i(),p=f!=null;s=document.createElement("div"),s.className="player-fps-overlay",s.style.cssText=p?` display: inline-flex; gap: 10px; align-items: center; font: 600 11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; color: #c8d4e6; letter-spacing: 0.02em; white-space: nowrap; `:` - position: absolute; ${c3[e]} + position: absolute; ${bU[e]} z-index: 30; pointer-events: none; user-select: none; display: flex; gap: 10px; font: 600 11px/1.35 ui-monospace, SFMono-Regular, Menlo, monospace; @@ -3938,7 +3938,7 @@ void main() { border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 6px; padding: 4px 8px; letter-spacing: 0.02em; white-space: nowrap; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); - `;const g=document.createElement("span");g.append("Render "),a=document.createElement("span"),a.style.color="#7fd4ff",a.textContent="– fps",g.append(a);const _=document.createElement("span");_.append("Replay "),r=document.createElement("span"),r.style.color="#9affc0",r.textContent="– fps",_.append(r),s.append(g,_),f?f.appendChild(s):(getComputedStyle(h.container).position==="static"&&(h.container.style.position="relative"),h.container.appendChild(s))},beforeRender(h){o+=1,u=h.frameIndex;const f=performance.now(),p=f-l;if(pd3(u,i,s,a,n.currentTime))}}function Bu(n){return{...n,setup:n.setup?e=>{n.setup?.(o_(e,n.id))}:void 0,onStateChange:n.onStateChange?e=>{n.onStateChange?.(hM(e,n.id))}:void 0,beforeRender:n.beforeRender?e=>{n.beforeRender?.(h3(e,n.id))}:void 0,teardown:n.teardown?e=>{n.teardown?.(o_(e,n.id))}:void 0}}const f3=255;function Ys(n){return n==null?null:n*100/f3}const p3=1.35,m3="#57a8ff",_3="#ff9c40",g3=256,y3=160,v3=360,b3=225,x3=260,w3=430,fM=18,Jv=120;function S3(n){return n?m3:_3}function T3(n){return n.events.filter(e=>!e.available&&e.playerId)}function pM(n,e){const t=document.createElement("canvas");t.width=g3,t.height=y3;const i=t.getContext("2d");if(!i)throw new Error("Unable to create boost pickup count canvas");i.clearRect(0,0,t.width,t.height),i.textAlign="center",i.textBaseline="middle",i.lineJoin="round",i.font="800 124px sans-serif",i.lineWidth=18,i.strokeStyle="rgba(4, 10, 18, 0.88)",i.strokeText(`${n}`,t.width/2,t.height/2),i.fillStyle=e,i.fillText(`${n}`,t.width/2,t.height/2);const s=new Ec(t);return s.colorSpace=yt,s.needsUpdate=!0,s}function M3(n){n?.dispose()}function E3(n){const e=new Et;e.visible=!1,e.renderOrder=60,e.frustumCulled=!1;const t=pM(1,n),i=new sf({map:t,transparent:!0,depthTest:!1,depthWrite:!1}),s=new af(i);s.scale.set(v3,b3,1),s.renderOrder=62,s.frustumCulled=!1,e.add(s);const a=new je({color:n,transparent:!0,opacity:0,side:ut,depthTest:!1,depthWrite:!1,blending:Vt}),r=new Se(new oi(Jv*.72,Jv,36),a);return r.position.z=fM,r.renderOrder=61,r.frustumCulled=!1,e.add(r),{group:e,textMaterial:i,ringMaterial:a}}function C3(n,e){n.currentCount!==e&&(M3(n.textMaterial.map),n.textMaterial.map=pM(e,n.color),n.textMaterial.needsUpdate=!0,n.currentCount=e)}function A3(n){const e=new Map;for(const s of n.replay.players)e.set(s.id,s);const t=[];for(const s of n.replay.boostPads)for(const a of T3(s))t.push({pad:s,event:a});t.sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:s.event.frame!==a.event.frame?s.event.frame-a.event.frame:s.pad.index-a.pad.index);const i=[];for(const{pad:s,event:a}of t){if(!a.playerId)continue;const r=e.get(a.playerId);if(!r)continue;const o=S3(r.isTeamZero),{group:l,textMaterial:c,ringMaterial:u}=E3(o);l.position.copy(s.position),n.scene.replayRoot.add(l),i.push({time:a.time,pad:s,event:a,player:r,color:o,currentCount:1,position:new T(s.position.x,s.position.y,s.position.z),size:s.size,group:l,textMaterial:c,ringMaterial:u})}return i}function R3(n,e,t){const i=bt.clamp(e/t,0,1),s=1-Math.pow(1-i,3),a=i*i,r=n.size==="big"?w3:x3,o=n.size==="big"?360:280,l=1+Math.sin(i*Math.PI)*.22;n.group.visible=!0,n.group.position.set(n.position.x,n.position.y,n.position.z+r+s*o),n.group.scale.setScalar(l),n.textMaterial.opacity=Math.max(0,1-a),n.ringMaterial.opacity=Math.max(0,.48*(1-i));const c=n.group.children[1];if(c){const u=.75+s*(n.size==="big"?2.8:1.85);c.scale.setScalar(u),c.position.z=fM-r-s*o}}function P3(n={}){const e=Math.max(.1,n.durationSeconds??p3);let t=[];function i(a){return n.includePickup?.({pad:a.pad,event:a.event,player:a.player})??!0}function s(){for(const a of t)a.group.visible=!1}return{id:"boost-pickup-animation",setup(a){t=A3(a)},beforeRender(a){if(!a.state.boostPickupAnimationEnabled){s();return}const r=a.currentTime-e,o=new Map;for(const l of t){if(l.time>a.currentTime){l.group.visible=!1;continue}if(!i(l)){l.group.visible=!1;continue}const c=(o.get(l.player.id)??0)+1;if(o.set(l.player.id,c),l.time{(r instanceof Se||r instanceof af)&&r.geometry?.dispose()}),a.textMaterial.map?.dispose(),a.textMaterial.dispose(),a.ringMaterial.dispose();t=[]}}}const I3=60,L3=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function k3(n){if(n&&MediaRecorder.isTypeSupported(n))return n;for(const e of L3)if(MediaRecorder.isTypeSupported(e))return e;return""}function D3(n){return n instanceof Error?n.message:String(n)}function O3(n={}){let e=null,t=null,i=[],s=null,a=0,r=0,o="",l=0,c=null,u=null,d=null,h=null,f=!1,p=null;const g=new Set;function _(){return{state:t?t.state==="recording"?"recording":"stopping":c?"error":s?"ready":"idle",elapsedSeconds:r,mimeType:o,sizeBytes:l,error:c}}function m(){const x=_();n.onStatusChange?.(x);for(const M of g)M(x)}function v(){if(!e)throw new Error("Canvas recorder plugin is not installed");return e}function y(x){t=null,h=null,f=!1,s=x,l=x?.size??0,p&&e&&e.player.setState({currentTime:p.currentTime,speed:p.speed,playing:p.playing}),p=null,x&&n.onComplete?.(x),m(),d?.(x),d=null,u=null}function b(x){c=D3(x),t=null,h=null,f=!1,p=null,m(),d?.(null),d=null,u=null}const S={id:"canvas-recorder",setup(x){e=x},beforeRender(x){t?.state==="recording"&&(r=(performance.now()-a)/1e3,m()),t?.state==="recording"&&h!==null&&x.currentTime>=h&&S.stop()},onStateChange(x){f&&t?.state==="recording"&&!x.state.playing&&r>0&&S.stop()},teardown(){t?.state==="recording"&&t.stop(),e=null,t=null,h=null,f=!1,p=null,d?.(null),d=null,u=null,g.clear()},start(x={}){const M=v();if(t?.state==="recording")throw new Error("Canvas recording is already in progress");if(typeof MediaRecorder>"u")throw new Error("MediaRecorder is not available in this browser");const C=M.scene.renderer.domElement;if(!C.captureStream)throw new Error("Canvas captureStream is not available in this browser");c=null,s=null,i=[],l=0,r=0,a=performance.now(),o=k3(x.mimeType??n.mimeType);const w=Math.max(1,x.fps??n.fps??I3),E=C.captureStream(w);t=new MediaRecorder(E,{mimeType:o,videoBitsPerSecond:x.videoBitsPerSecond??n.videoBitsPerSecond}),u=new Promise(R=>{d=R}),t.addEventListener("dataavailable",R=>{R.data.size>0&&(i.push(R.data),l+=R.data.size,m())}),t.addEventListener("stop",()=>{E.getTracks().forEach(R=>R.stop()),y(new Blob(i,{type:o||"video/webm"}))},{once:!0}),t.addEventListener("error",R=>{E.getTracks().forEach(L=>L.stop()),b(R.error??R)},{once:!0}),t.start(1e3),m()},stop(){if(!t)return Promise.resolve(s);if(t.state==="inactive")return u??Promise.resolve(s);const x=u??new Promise(M=>{d=M});return t.stop(),m(),x},clear(){if(t?.state==="recording")throw new Error("Cannot clear a recording while recording is in progress");s=null,i=[],l=0,r=0,c=null,m()},getRecording(){return s},getStatus(){return _()},subscribe(x){return g.add(x),x(_()),()=>{g.delete(x)}},recordRange(x={}){const M=v(),C=M.player.getState();(x.restorePlaybackState??!0)&&(p=C);const w=x.playbackRate??C.speed,E=x.startTime??C.currentTime;h=x.endTime??C.duration,f=!0,M.player.setState({currentTime:E,speed:w,playing:!1}),S.start(x);const R=u;return M.player.play(),(R??Promise.resolve(null)).then(L=>{if(!L)throw new Error("Recording stopped without producing a video");return L})},recordFullReplay(x={}){return S.recordRange({...x,startTime:x.startTime??0,endTime:x.endTime??v().replay.duration})}};return S}const Qv="subtr-actor-timeline-overlay-styles";function F3(){if(document.getElementById(Qv))return;const n=document.createElement("style");n.id=Qv,n.textContent=` + `;const g=document.createElement("span");g.append("Render "),a=document.createElement("span"),a.style.color="#7fd4ff",a.textContent="– fps",g.append(a);const _=document.createElement("span");_.append("Replay "),r=document.createElement("span"),r.style.color="#9affc0",r.textContent="– fps",_.append(r),s.append(g,_),f?f.appendChild(s):(getComputedStyle(h.container).position==="static"&&(h.container.style.position="relative"),h.container.appendChild(s))},beforeRender(h){o+=1,u=h.frameIndex;const f=performance.now(),p=f-l;if(pwU(u,i,s,a,n.currentTime))}}function Gu(n){return{...n,setup:n.setup?e=>{n.setup?.(p_(e,n.id))}:void 0,onStateChange:n.onStateChange?e=>{n.onStateChange?.(xM(e,n.id))}:void 0,beforeRender:n.beforeRender?e=>{n.beforeRender?.(SU(e,n.id))}:void 0,teardown:n.teardown?e=>{n.teardown?.(p_(e,n.id))}:void 0}}const TU=255;function Ys(n){return n==null?null:n*100/TU}const MU=1.35,EU="#57a8ff",CU="#ff9c40",AU=256,RU=160,PU=360,IU=225,LU=260,kU=430,wM=18,ab=120;function DU(n){return n?EU:CU}function OU(n){return n.events.filter(e=>!e.available&&e.playerId)}function SM(n,e){const t=document.createElement("canvas");t.width=AU,t.height=RU;const i=t.getContext("2d");if(!i)throw new Error("Unable to create boost pickup count canvas");i.clearRect(0,0,t.width,t.height),i.textAlign="center",i.textBaseline="middle",i.lineJoin="round",i.font="800 124px sans-serif",i.lineWidth=18,i.strokeStyle="rgba(4, 10, 18, 0.88)",i.strokeText(`${n}`,t.width/2,t.height/2),i.fillStyle=e,i.fillText(`${n}`,t.width/2,t.height/2);const s=new Pc(t);return s.colorSpace=yt,s.needsUpdate=!0,s}function FU(n){n?.dispose()}function NU(n){const e=new Et;e.visible=!1,e.renderOrder=60,e.frustumCulled=!1;const t=SM(1,n),i=new uf({map:t,transparent:!0,depthTest:!1,depthWrite:!1}),s=new df(i);s.scale.set(PU,IU,1),s.renderOrder=62,s.frustumCulled=!1,e.add(s);const a=new je({color:n,transparent:!0,opacity:0,side:ut,depthTest:!1,depthWrite:!1,blending:Vt}),r=new Se(new oi(ab*.72,ab,36),a);return r.position.z=wM,r.renderOrder=61,r.frustumCulled=!1,e.add(r),{group:e,textMaterial:i,ringMaterial:a}}function UU(n,e){n.currentCount!==e&&(FU(n.textMaterial.map),n.textMaterial.map=SM(e,n.color),n.textMaterial.needsUpdate=!0,n.currentCount=e)}function BU(n){const e=new Map;for(const s of n.replay.players)e.set(s.id,s);const t=[];for(const s of n.replay.boostPads)for(const a of OU(s))t.push({pad:s,event:a});t.sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:s.event.frame!==a.event.frame?s.event.frame-a.event.frame:s.pad.index-a.pad.index);const i=[];for(const{pad:s,event:a}of t){if(!a.playerId)continue;const r=e.get(a.playerId);if(!r)continue;const o=DU(r.isTeamZero),{group:l,textMaterial:c,ringMaterial:u}=NU(o);l.position.copy(s.position),n.scene.replayRoot.add(l),i.push({time:a.time,pad:s,event:a,player:r,color:o,currentCount:1,position:new T(s.position.x,s.position.y,s.position.z),size:s.size,group:l,textMaterial:c,ringMaterial:u})}return i}function zU(n,e,t){const i=bt.clamp(e/t,0,1),s=1-Math.pow(1-i,3),a=i*i,r=n.size==="big"?kU:LU,o=n.size==="big"?360:280,l=1+Math.sin(i*Math.PI)*.22;n.group.visible=!0,n.group.position.set(n.position.x,n.position.y,n.position.z+r+s*o),n.group.scale.setScalar(l),n.textMaterial.opacity=Math.max(0,1-a),n.ringMaterial.opacity=Math.max(0,.48*(1-i));const c=n.group.children[1];if(c){const u=.75+s*(n.size==="big"?2.8:1.85);c.scale.setScalar(u),c.position.z=wM-r-s*o}}function HU(n={}){const e=Math.max(.1,n.durationSeconds??MU);let t=[];function i(a){return n.includePickup?.({pad:a.pad,event:a.event,player:a.player})??!0}function s(){for(const a of t)a.group.visible=!1}return{id:"boost-pickup-animation",setup(a){t=BU(a)},beforeRender(a){if(!a.state.boostPickupAnimationEnabled){s();return}const r=a.currentTime-e,o=new Map;for(const l of t){if(l.time>a.currentTime){l.group.visible=!1;continue}if(!i(l)){l.group.visible=!1;continue}const c=(o.get(l.player.id)??0)+1;if(o.set(l.player.id,c),l.time{(r instanceof Se||r instanceof df)&&r.geometry?.dispose()}),a.textMaterial.map?.dispose(),a.textMaterial.dispose(),a.ringMaterial.dispose();t=[]}}}const VU=60,GU=["video/webm;codecs=vp9","video/webm;codecs=vp8","video/webm"];function $U(n){if(n&&MediaRecorder.isTypeSupported(n))return n;for(const e of GU)if(MediaRecorder.isTypeSupported(e))return e;return""}function WU(n){return n instanceof Error?n.message:String(n)}function XU(n={}){let e=null,t=null,i=[],s=null,a=0,r=0,o="",l=0,c=null,u=null,d=null,h=null,f=!1,p=null;const g=new Set;function _(){return{state:t?t.state==="recording"?"recording":"stopping":c?"error":s?"ready":"idle",elapsedSeconds:r,mimeType:o,sizeBytes:l,error:c}}function m(){const x=_();n.onStatusChange?.(x);for(const M of g)M(x)}function v(){if(!e)throw new Error("Canvas recorder plugin is not installed");return e}function y(x){t=null,h=null,f=!1,s=x,l=x?.size??0,p&&e&&e.player.setState({currentTime:p.currentTime,speed:p.speed,playing:p.playing}),p=null,x&&n.onComplete?.(x),m(),d?.(x),d=null,u=null}function b(x){c=WU(x),t=null,h=null,f=!1,p=null,m(),d?.(null),d=null,u=null}const S={id:"canvas-recorder",setup(x){e=x},beforeRender(x){t?.state==="recording"&&(r=(performance.now()-a)/1e3,m()),t?.state==="recording"&&h!==null&&x.currentTime>=h&&S.stop()},onStateChange(x){f&&t?.state==="recording"&&!x.state.playing&&r>0&&S.stop()},teardown(){t?.state==="recording"&&t.stop(),e=null,t=null,h=null,f=!1,p=null,d?.(null),d=null,u=null,g.clear()},start(x={}){const M=v();if(t?.state==="recording")throw new Error("Canvas recording is already in progress");if(typeof MediaRecorder>"u")throw new Error("MediaRecorder is not available in this browser");const C=M.scene.renderer.domElement;if(!C.captureStream)throw new Error("Canvas captureStream is not available in this browser");c=null,s=null,i=[],l=0,r=0,a=performance.now(),o=$U(x.mimeType??n.mimeType);const w=Math.max(1,x.fps??n.fps??VU),E=C.captureStream(w);t=new MediaRecorder(E,{mimeType:o,videoBitsPerSecond:x.videoBitsPerSecond??n.videoBitsPerSecond}),u=new Promise(R=>{d=R}),t.addEventListener("dataavailable",R=>{R.data.size>0&&(i.push(R.data),l+=R.data.size,m())}),t.addEventListener("stop",()=>{E.getTracks().forEach(R=>R.stop()),y(new Blob(i,{type:o||"video/webm"}))},{once:!0}),t.addEventListener("error",R=>{E.getTracks().forEach(L=>L.stop()),b(R.error??R)},{once:!0}),t.start(1e3),m()},stop(){if(!t)return Promise.resolve(s);if(t.state==="inactive")return u??Promise.resolve(s);const x=u??new Promise(M=>{d=M});return t.stop(),m(),x},clear(){if(t?.state==="recording")throw new Error("Cannot clear a recording while recording is in progress");s=null,i=[],l=0,r=0,c=null,m()},getRecording(){return s},getStatus(){return _()},subscribe(x){return g.add(x),x(_()),()=>{g.delete(x)}},recordRange(x={}){const M=v(),C=M.player.getState();(x.restorePlaybackState??!0)&&(p=C);const w=x.playbackRate??C.speed,E=x.startTime??C.currentTime;h=x.endTime??C.duration,f=!0,M.player.setState({currentTime:E,speed:w,playing:!1}),S.start(x);const R=u;return M.player.play(),(R??Promise.resolve(null)).then(L=>{if(!L)throw new Error("Recording stopped without producing a video");return L})},recordFullReplay(x={}){return S.recordRange({...x,startTime:x.startTime??0,endTime:x.endTime??v().replay.duration})}};return S}const rb="subtr-actor-timeline-overlay-styles";function KU(){if(document.getElementById(rb))return;const n=document.createElement("style");n.id=rb,n.textContent=` .sap-tl-root { position: absolute; inset: 0; @@ -4411,8 +4411,8 @@ void main() { font-size: 0.72rem; } } - `,document.head.append(n)}const N3=new Set(["goal","save","bookmark"]),U3=.2,Zp=60,B3=2,z3=4,H3=.01,eb=.01;function l_(n){if(!Number.isFinite(n))return"--:--.--";const e=Math.max(0,n),t=Math.floor(e/60),i=Math.floor(e%60),s=Math.floor((e-Math.floor(e))*100);return`${t}:${String(i).padStart(2,"0")}.${String(s).padStart(2,"0")}`}function tb(n){switch(n.kind){case"goal":return 5;case"demo":return 4;case"save":return 3;case"assist":return 2;case"shot":case"bookmark":return 1;default:return 0}}function V3(n){switch(n.kind){case"goal":case"goal-context":case"goal-tag":return z3;default:return B3}}function ny(n){return n.seekTime!==void 0&&Number.isFinite(n.seekTime)?Math.max(0,n.seekTime):Number.isFinite(n.time)?Math.max(0,n.time-V3(n)):0}function G3(n){if(n.color)return n.color;if(n.isTeamZero===!0)return"#3b82f6";if(n.isTeamZero===!1)return"#f59e0b";switch(n.kind){case"goal":return"#f5f7fa";case"demo":return"#ef4444";case"save":return"#34d399";case"assist":return"#c084fc";case"shot":return"#60a5fa";case"bookmark":return"#facc15";default:return"#d1d9e0"}}function $3(n){if(n.events.length>1)return`${n.events.length}`;const e=n.events[0];return e?e.shortLabel&&e.shortLabel.trim()!==""?e.shortLabel.slice(0,3).toUpperCase():e.kind.slice(0,1).toUpperCase():""}function c_(n){return[...n].sort((e,t)=>{const i=tb(t)-tb(e);return i!==0?i:e.time-t.time})}function W3(n){return n.events.map(e=>`${l_(e.time)} ${e.label??e.kind}`).join(` -`)}function mM(n){const e=new Map;for(const t of n){const i=t.frame!==void 0?`frame:${t.frame}`:`time:${t.time.toFixed(2)}`,s=e.get(i);if(s){s.events.push(t);continue}e.set(i,{key:i,time:t.time,events:[t]})}return[...e.values()].map(t=>({...t,events:c_(t.events)})).sort((t,i)=>t.time-i.time)}function nb(n){if(n.length<=Zp)return n;const e=n[0]?.time??0,i=(n[n.length-1]?.time??e)-e;if(i<=0)return[{key:"compact:0",time:e,events:c_(n.flatMap(r=>r.events))}];const s=i/Zp,a=new Map;for(const r of n){const o=Math.min(Zp-1,Math.max(0,Math.floor((r.time-e)/s))),l=a.get(o);if(l){l.events.push(...r.events);continue}a.set(o,{key:`compact:${o}`,time:r.time,events:[...r.events]})}return[...a.values()].map(r=>({...r,events:c_(r.events)})).sort((r,o)=>r.time-o.time)}function _M(n,e){return n?typeof n=="function"?n(e):n:[]}function X3(n,e){const t=[];for(const i of n){const s=_M(i.source,e);s.length!==0&&t.push({key:i.key,label:i.label,buckets:mM(s)})}return t}function K3(n,e){return n?typeof n=="function"?n(e):n:[]}function q3(n,e){const t=new Set,i=[];for(const s of n)for(const a of K3(s,e)){const r=a.id;if(r!==void 0){if(t.has(r))continue;t.add(r)}i.push(a)}return i}function Y3(n){const e=new Map;for(const t of n){const i=t.lane??"default",s=t.laneLabel??t.lane??"",a=e.get(i);if(a){a.ranges.push(t);continue}e.set(i,{key:i,label:s,ranges:[t]})}return[...e.values()].map(t=>({...t,ranges:[...t.ranges].sort((i,s)=>i.startTime-s.startTime)}))}function j3(n){return n.color?n.color:n.isTeamZero===!0?"#3b82f6":n.isTeamZero===!1?"#f59e0b":"#d1d9e0"}function Z3(n,e){if(n.replayEvents)return _M(n.replayEvents,e);if(n.includeReplayEvents===!1)return[];const t=new Set(n.replayEventKinds??N3);return e.replay.timelineEvents.filter(i=>t.has(i.kind))}function J3(n,e){const t=e.player.projectReplayTimeToTimeline(ny(n));if(!t.hiddenBySkip)return t.seekTime;const i=Math.min(e.player.getTimelineDuration(),t.timelineTime+H3);return e.player.projectTimelineTimeToReplay(i)}function zu(n,e){return`${n/Math.max(e,1e-4)*100}%`}function Q3(n,e,t){let i=n.timelineTime,s=e.timelineTime;return s<=i&&(n.hiddenBySkip||e.hiddenBySkip)&&(i>=t?(i=Math.max(0,t-eb),s=t):s=Math.min(t,i+eb)),{startTimelineTime:i,endTimelineTime:s}}function eU(n={}){const e=n.pauseWhileScrubbing??!0;let t=0;const i=n.events?[{key:"events:initial",label:n.eventsLabel??"Events",source:n.events}]:[],s=n.ranges?[n.ranges]:[];let a=null,r=null,o=null,l=null,c=null,u=null,d=null,h=null,f=null,p=null,g=null,_=null,m=!1,v="",y=!1,b=!1,S=null,x=[],M=[],C=null;const w=new Map,E=[],R=[],L=[],O=[];let D=0,U=new Set;function F(){S&&(Oe(S),H({...S,state:S.player.getState()}))}function W(){S&&(Z(S),H({...S,state:S.player.getState()}))}function H(X){if(!l||!c||!u||!d||!h||!f||!r)return;const se=X.player.getTimelineCurrentTime(),we=X.player.getTimelineDuration(),Re=[we.toFixed(4),X.state.skipKickoffsEnabled?"1":"0",X.state.skipPostGoalTransitionsEnabled?"1":"0"].join(":");C!==Re&&(Oe(X),Z(X),C=Re),l.min="0",l.max=`${we}`,l.step="0.01",l.value=`${Math.min(se,we)}`,c.dataset.playing=X.state.playing?"true":"false",c.setAttribute("aria-label",X.state.playing?"Pause replay":"Play replay"),c.title=X.state.playing?"Pause replay":"Play replay",u.textContent=X.state.playing?"||":">",d.textContent=X.state.playing?"Pause":"Play",h.textContent=l_(se),f.textContent=`-${l_(we-se)}`,r.dataset.scrubbing=y?"true":"false",De(se);for(const G of R){const j=Math.max(0,G.startTimelineTime),Y=Math.min(we,G.endTimelineTime);if(Math.max(0,Y-j)<=1e-4){G.element.hidden=!0;continue}G.element.hidden=!1,G.element.dataset.active=se>=j&&se<=Y?"true":"false"}const k=zu(Math.min(se,we),we);for(const G of O)G.element.style.left=k;for(const G of L)G.element.style.left=k}function ie(X){let se=0,we=E.length;for(;seD)for(let G=D;G{se.player.seek(J3(Re,se))}),G.dataset.active="false",G.dataset.passed="false";const j={element:G,timelineTime:k.timelineTime,active:!1,passed:!1};return w.set(X.key,j),E.push(j),G}function Oe(X){if(!g||!p)return;g.replaceChildren(),p.replaceChildren(),w.clear(),E.splice(0,E.length),D=0,U=new Set,O.splice(0,O.length);const se=Z3(n,X);x=[],se.length>0&&x.push({key:"replay",label:n.replayEventsLabel??"Replay",buckets:mM(se)}),x.push(...X3(i,X));const we=Math.max(X.player.getTimelineDuration(),1e-4),Re=x[0];if(Re?.key==="replay")for(const G of nb(Re.buckets)){const j=Ke({...G,key:`${Re.key}:${G.key}`},X,we);j&&g.append(j)}const k=x.filter(G=>G.key!=="replay");p.hidden=k.length===0;for(const G of k){const j=document.createElement("div");j.className="sap-tl-event-lane",j.dataset.label=G.label;const Y=document.createElement("span");Y.className="sap-tl-event-lane-label",Y.textContent=G.label,Y.setAttribute("aria-label",G.label),j.append(Y);const Q=document.createElement("div");Q.className="sap-tl-event-lane-track";const ge=document.createElement("div");ge.className="sap-tl-markers";for(const ye of nb(G.buckets)){const We=Ke({...ye,key:`${G.key}:${ye.key}`},X,we);We&&ge.append(We)}const ue=document.createElement("div");ue.className="sap-tl-event-playhead",Q.append(ge,ue),O.push({element:ue}),j.append(Q),p.append(j)}E.sort((G,j)=>G.timelineTime-j.timelineTime)}function Z(X){if(!o)return;o.replaceChildren(),R.splice(0,R.length),L.splice(0,L.length);const se=q3(s,X).filter(Re=>Number.isFinite(Re.startTime)&&Number.isFinite(Re.endTime)&&Re.endTime>Re.startTime);M=Y3(se);const we=Math.max(X.player.getTimelineDuration(),1e-4);if(M.length===0){o.hidden=!0;return}o.hidden=!1;for(const Re of M){const k=document.createElement("div");k.className="sap-tl-range-lane";const G=document.createElement("div");if(G.className="sap-tl-range-lane-track",Re.label){k.dataset.label=Re.label;const Y=document.createElement("span");Y.className="sap-tl-range-lane-label",Y.textContent=Re.label,Y.setAttribute("aria-label",Re.label),k.append(Y)}for(const Y of Re.ranges){const Q=X.player.projectReplayTimeToTimeline(Y.startTime),ge=X.player.projectReplayTimeToTimeline(Y.endTime),{startTimelineTime:ue,endTimelineTime:ye}=Q3(Q,ge,we),We=document.createElement("div");We.className="sap-tl-range-segment",Y.className&&We.classList.add(Y.className),We.style.background=j3(Y),We.title=Y.label??Re.label,We.dataset.active="false",We.style.left=zu(ue,we),We.style.width=zu(Math.max(0,ye-ue),we),G.append(We),R.push({range:Y,element:We,startTimelineTime:ue,endTimelineTime:ye})}const j=document.createElement("div");j.className="sap-tl-range-playhead",G.append(j),L.push({element:j}),k.append(G),o.append(k)}}function ae(){y&&(y=!1,r?.setAttribute("data-scrubbing","false"),b&&S?.player.play(),b=!1)}function Te(){if(y||(y=!0,r?.setAttribute("data-scrubbing","true"),!e))return;const X=S?.player;X&&(b=X.getState().playing,b&&X.pause())}return{id:"timeline-overlay",addEventSource(X,se={}){return i.push({key:se.id??`events:${t++}`,label:se.label??"Events",source:X}),F(),()=>{this.removeEventSource(X)}},removeEventSource(X){const se=i.findIndex(we=>we.source===X);return se<0?!1:(i.splice(se,1),F(),!0)},refreshEvents(){F()},addRangeSource(X){return s.push(X),W(),()=>{this.removeRangeSource(X)}},removeRangeSource(X){const se=s.indexOf(X);return se<0?!1:(s.splice(se,1),W(),!0)},refreshRanges(){W()},setup(X){S=X,F3(),getComputedStyle(X.container).position==="static"&&(m=!0,v=X.container.style.position,X.container.style.position="relative"),a=document.createElement("div"),a.className="sap-tl-root",r=document.createElement("div"),r.className="sap-tl-shell",r.dataset.scrubbing="false";const se=document.createElement("div");se.className="sap-tl-topline";const we=document.createElement("div");we.className="sap-tl-primary",c=document.createElement("button"),c.type="button",c.className="sap-tl-toggle sap-tl-track-toggle",u=document.createElement("span"),u.className="sap-tl-toggle-icon",u.setAttribute("aria-hidden","true"),u.textContent=">",d=document.createElement("span"),d.className="sap-tl-toggle-label",d.textContent="Play",c.append(u,d),c.addEventListener("click",()=>{X.player.togglePlayback()}),h=document.createElement("span"),h.className="sap-tl-current",h.textContent="0:00.00",f=document.createElement("span"),f.className="sap-tl-remaining",f.textContent="-0:00.00",we.append(h),se.append(we,f);const Re=document.createElement("div");Re.className="sap-tl-track-wrap",o=document.createElement("div"),o.className="sap-tl-ranges",o.hidden=!0,p=document.createElement("div"),p.className="sap-tl-event-lanes",p.hidden=!0;const k=document.createElement("div");k.className="sap-tl-track-rail";const G=document.createElement("div");G.className="sap-tl-main-rail",g=document.createElement("div"),g.className="sap-tl-markers",l=document.createElement("input"),l.className="sap-tl-range",l.type="range",l.min="0",l.max=`${X.replay.duration}`,l.step="0.01",l.value="0";const j=()=>{Te()},Y=()=>{l&&X.player.seek(X.player.projectTimelineTimeToReplay(Number(l.value)))},Q=()=>{ae()};l.addEventListener("pointerdown",j),l.addEventListener("input",Y),l.addEventListener("change",Q),window.addEventListener("pointerup",Q),window.addEventListener("pointercancel",Q),_=()=>{l?.removeEventListener("pointerdown",j),l?.removeEventListener("input",Y),l?.removeEventListener("change",Q),window.removeEventListener("pointerup",Q),window.removeEventListener("pointercancel",Q)},k.append(G,g,l),Re.append(o,p,c,k),r.append(se,Re),a.append(r),X.container.append(a),Oe(X),Z(X),H({...X,state:X.player.getState()})},onStateChange(X){S=X,H(X)},teardown(X){_?.(),_=null,ae(),a?.remove(),a=null,r=null,o=null,p=null,l=null,c=null,u=null,d=null,h=null,f=null,g=null,S=null,x=[],M=[],C=null,w.clear(),E.splice(0,E.length),R.splice(0,R.length),L.splice(0,L.length),O.splice(0,O.length),D=0,U=new Set,m&&(X.container.style.position=v,m=!1)}}}function tU(n,e,t={}){const i=new nS(e.raw,{motionSmoothing:t.motionSmoothing,smoothingBlendFactor:t.smoothingBlendFactor,smoothingAnchorInterval:t.smoothingAnchorInterval,timelineCompaction:t.timelineCompaction,disableFrameFiltering:t.disableFrameFiltering}),s=new t3(n,i,t,e.replay);return s.getPlugins().some(a=>a.id==="camera")||s.addPlugin(l3()),s}const nU="https://ballchasing.com",iU=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function sU(n,e){const i=(e instanceof URL?e.href:e).replace(/\/+$/,"");return new URL(`${i}/${n.replace(/^\/+/,"")}`)}function ib(n){return iU.test(n.trim())}function iy(n){const e=n.trim();if(ib(e))return e.toLowerCase();let t;try{t=new URL(e)}catch{throw new Error(`Invalid Ballchasing replay id: ${n}`)}if(!/(^|\.)ballchasing\.com$/i.test(t.hostname))throw new Error(`Invalid Ballchasing replay URL: ${n}`);const i=t.pathname.split("/").filter(Boolean),s=i.findIndex(o=>o==="replay"),a=i.findIndex(o=>o==="replays"),r=s>=0?i[s+1]:a>=0?i[a+1]:void 0;if(!r||!ib(r))throw new Error(`Invalid Ballchasing replay URL: ${n}`);return r.toLowerCase()}function aU(n){return`ballchasing-${iy(n)}.replay`}function rU(n,e=nU){const t=iy(n);return sU(`dl/replay/${encodeURIComponent(t)}`,e)}const u_=250,sb="subtr-actor-ballchasing-overlay-styles",Jp="#3b82f6",ab="#f59e0b";function oU(){if(document.getElementById(sb))return;const n=document.createElement("style");n.id=sb,n.textContent=` + `,document.head.append(n)}const qU=new Set(["goal","save","bookmark"]),YU=.2,im=60,jU=2,ZU=4,JU=.01,ob=.01;function m_(n){if(!Number.isFinite(n))return"--:--.--";const e=Math.max(0,n),t=Math.floor(e/60),i=Math.floor(e%60),s=Math.floor((e-Math.floor(e))*100);return`${t}:${String(i).padStart(2,"0")}.${String(s).padStart(2,"0")}`}function lb(n){switch(n.kind){case"goal":return 5;case"demo":return 4;case"save":return 3;case"assist":return 2;case"shot":case"bookmark":return 1;default:return 0}}function QU(n){switch(n.kind){case"goal":case"goal-context":case"goal-tag":return ZU;default:return jU}}function cy(n){return n.seekTime!==void 0&&Number.isFinite(n.seekTime)?Math.max(0,n.seekTime):Number.isFinite(n.time)?Math.max(0,n.time-QU(n)):0}function e3(n){if(n.color)return n.color;if(n.isTeamZero===!0)return"#3b82f6";if(n.isTeamZero===!1)return"#f59e0b";switch(n.kind){case"goal":return"#f5f7fa";case"demo":return"#ef4444";case"save":return"#34d399";case"assist":return"#c084fc";case"shot":return"#60a5fa";case"bookmark":return"#facc15";default:return"#d1d9e0"}}function t3(n){if(n.events.length>1)return`${n.events.length}`;const e=n.events[0];return e?e.shortLabel&&e.shortLabel.trim()!==""?e.shortLabel.slice(0,3).toUpperCase():e.kind.slice(0,1).toUpperCase():""}function __(n){return[...n].sort((e,t)=>{const i=lb(t)-lb(e);return i!==0?i:e.time-t.time})}function n3(n){return n.events.map(e=>`${m_(e.time)} ${e.label??e.kind}`).join(` +`)}function TM(n){const e=new Map;for(const t of n){const i=t.frame!==void 0?`frame:${t.frame}`:`time:${t.time.toFixed(2)}`,s=e.get(i);if(s){s.events.push(t);continue}e.set(i,{key:i,time:t.time,events:[t]})}return[...e.values()].map(t=>({...t,events:__(t.events)})).sort((t,i)=>t.time-i.time)}function cb(n){if(n.length<=im)return n;const e=n[0]?.time??0,i=(n[n.length-1]?.time??e)-e;if(i<=0)return[{key:"compact:0",time:e,events:__(n.flatMap(r=>r.events))}];const s=i/im,a=new Map;for(const r of n){const o=Math.min(im-1,Math.max(0,Math.floor((r.time-e)/s))),l=a.get(o);if(l){l.events.push(...r.events);continue}a.set(o,{key:`compact:${o}`,time:r.time,events:[...r.events]})}return[...a.values()].map(r=>({...r,events:__(r.events)})).sort((r,o)=>r.time-o.time)}function MM(n,e){return n?typeof n=="function"?n(e):n:[]}function i3(n,e){const t=[];for(const i of n){const s=MM(i.source,e);s.length!==0&&t.push({key:i.key,label:i.label,buckets:TM(s)})}return t}function s3(n,e){return n?typeof n=="function"?n(e):n:[]}function a3(n,e){const t=new Set,i=[];for(const s of n)for(const a of s3(s,e)){const r=a.id;if(r!==void 0){if(t.has(r))continue;t.add(r)}i.push(a)}return i}function r3(n){const e=new Map;for(const t of n){const i=t.lane??"default",s=t.laneLabel??t.lane??"",a=e.get(i);if(a){a.ranges.push(t);continue}e.set(i,{key:i,label:s,ranges:[t]})}return[...e.values()].map(t=>({...t,ranges:[...t.ranges].sort((i,s)=>i.startTime-s.startTime)}))}function o3(n){return n.color?n.color:n.isTeamZero===!0?"#3b82f6":n.isTeamZero===!1?"#f59e0b":"#d1d9e0"}function l3(n,e){if(n.replayEvents)return MM(n.replayEvents,e);if(n.includeReplayEvents===!1)return[];const t=new Set(n.replayEventKinds??qU);return e.replay.timelineEvents.filter(i=>t.has(i.kind))}function c3(n,e){const t=e.player.projectReplayTimeToTimeline(cy(n));if(!t.hiddenBySkip)return t.seekTime;const i=Math.min(e.player.getTimelineDuration(),t.timelineTime+JU);return e.player.projectTimelineTimeToReplay(i)}function $u(n,e){return`${n/Math.max(e,1e-4)*100}%`}function u3(n,e,t){let i=n.timelineTime,s=e.timelineTime;return s<=i&&(n.hiddenBySkip||e.hiddenBySkip)&&(i>=t?(i=Math.max(0,t-ob),s=t):s=Math.min(t,i+ob)),{startTimelineTime:i,endTimelineTime:s}}function d3(n={}){const e=n.pauseWhileScrubbing??!0;let t=0;const i=n.events?[{key:"events:initial",label:n.eventsLabel??"Events",source:n.events}]:[],s=n.ranges?[n.ranges]:[];let a=null,r=null,o=null,l=null,c=null,u=null,d=null,h=null,f=null,p=null,g=null,_=null,m=!1,v="",y=!1,b=!1,S=null,x=[],M=[],C=null;const w=new Map,E=[],R=[],L=[],O=[];let D=0,U=new Set;function F(){S&&(Oe(S),H({...S,state:S.player.getState()}))}function W(){S&&(Z(S),H({...S,state:S.player.getState()}))}function H(X){if(!l||!c||!u||!d||!h||!f||!r)return;const se=X.player.getTimelineCurrentTime(),we=X.player.getTimelineDuration(),Re=[we.toFixed(4),X.state.skipKickoffsEnabled?"1":"0",X.state.skipPostGoalTransitionsEnabled?"1":"0"].join(":");C!==Re&&(Oe(X),Z(X),C=Re),l.min="0",l.max=`${we}`,l.step="0.01",l.value=`${Math.min(se,we)}`,c.dataset.playing=X.state.playing?"true":"false",c.setAttribute("aria-label",X.state.playing?"Pause replay":"Play replay"),c.title=X.state.playing?"Pause replay":"Play replay",u.textContent=X.state.playing?"||":">",d.textContent=X.state.playing?"Pause":"Play",h.textContent=m_(se),f.textContent=`-${m_(we-se)}`,r.dataset.scrubbing=y?"true":"false",De(se);for(const G of R){const j=Math.max(0,G.startTimelineTime),Y=Math.min(we,G.endTimelineTime);if(Math.max(0,Y-j)<=1e-4){G.element.hidden=!0;continue}G.element.hidden=!1,G.element.dataset.active=se>=j&&se<=Y?"true":"false"}const k=$u(Math.min(se,we),we);for(const G of O)G.element.style.left=k;for(const G of L)G.element.style.left=k}function ie(X){let se=0,we=E.length;for(;seD)for(let G=D;G{se.player.seek(c3(Re,se))}),G.dataset.active="false",G.dataset.passed="false";const j={element:G,timelineTime:k.timelineTime,active:!1,passed:!1};return w.set(X.key,j),E.push(j),G}function Oe(X){if(!g||!p)return;g.replaceChildren(),p.replaceChildren(),w.clear(),E.splice(0,E.length),D=0,U=new Set,O.splice(0,O.length);const se=l3(n,X);x=[],se.length>0&&x.push({key:"replay",label:n.replayEventsLabel??"Replay",buckets:TM(se)}),x.push(...i3(i,X));const we=Math.max(X.player.getTimelineDuration(),1e-4),Re=x[0];if(Re?.key==="replay")for(const G of cb(Re.buckets)){const j=Ke({...G,key:`${Re.key}:${G.key}`},X,we);j&&g.append(j)}const k=x.filter(G=>G.key!=="replay");p.hidden=k.length===0;for(const G of k){const j=document.createElement("div");j.className="sap-tl-event-lane",j.dataset.label=G.label;const Y=document.createElement("span");Y.className="sap-tl-event-lane-label",Y.textContent=G.label,Y.setAttribute("aria-label",G.label),j.append(Y);const Q=document.createElement("div");Q.className="sap-tl-event-lane-track";const ge=document.createElement("div");ge.className="sap-tl-markers";for(const ye of cb(G.buckets)){const We=Ke({...ye,key:`${G.key}:${ye.key}`},X,we);We&&ge.append(We)}const ue=document.createElement("div");ue.className="sap-tl-event-playhead",Q.append(ge,ue),O.push({element:ue}),j.append(Q),p.append(j)}E.sort((G,j)=>G.timelineTime-j.timelineTime)}function Z(X){if(!o)return;o.replaceChildren(),R.splice(0,R.length),L.splice(0,L.length);const se=a3(s,X).filter(Re=>Number.isFinite(Re.startTime)&&Number.isFinite(Re.endTime)&&Re.endTime>Re.startTime);M=r3(se);const we=Math.max(X.player.getTimelineDuration(),1e-4);if(M.length===0){o.hidden=!0;return}o.hidden=!1;for(const Re of M){const k=document.createElement("div");k.className="sap-tl-range-lane";const G=document.createElement("div");if(G.className="sap-tl-range-lane-track",Re.label){k.dataset.label=Re.label;const Y=document.createElement("span");Y.className="sap-tl-range-lane-label",Y.textContent=Re.label,Y.setAttribute("aria-label",Re.label),k.append(Y)}for(const Y of Re.ranges){const Q=X.player.projectReplayTimeToTimeline(Y.startTime),ge=X.player.projectReplayTimeToTimeline(Y.endTime),{startTimelineTime:ue,endTimelineTime:ye}=u3(Q,ge,we),We=document.createElement("div");We.className="sap-tl-range-segment",Y.className&&We.classList.add(Y.className),We.style.background=o3(Y),We.title=Y.label??Re.label,We.dataset.active="false",We.style.left=$u(ue,we),We.style.width=$u(Math.max(0,ye-ue),we),G.append(We),R.push({range:Y,element:We,startTimelineTime:ue,endTimelineTime:ye})}const j=document.createElement("div");j.className="sap-tl-range-playhead",G.append(j),L.push({element:j}),k.append(G),o.append(k)}}function re(){y&&(y=!1,r?.setAttribute("data-scrubbing","false"),b&&S?.player.play(),b=!1)}function Te(){if(y||(y=!0,r?.setAttribute("data-scrubbing","true"),!e))return;const X=S?.player;X&&(b=X.getState().playing,b&&X.pause())}return{id:"timeline-overlay",addEventSource(X,se={}){return i.push({key:se.id??`events:${t++}`,label:se.label??"Events",source:X}),F(),()=>{this.removeEventSource(X)}},removeEventSource(X){const se=i.findIndex(we=>we.source===X);return se<0?!1:(i.splice(se,1),F(),!0)},refreshEvents(){F()},addRangeSource(X){return s.push(X),W(),()=>{this.removeRangeSource(X)}},removeRangeSource(X){const se=s.indexOf(X);return se<0?!1:(s.splice(se,1),W(),!0)},refreshRanges(){W()},setup(X){S=X,KU(),getComputedStyle(X.container).position==="static"&&(m=!0,v=X.container.style.position,X.container.style.position="relative"),a=document.createElement("div"),a.className="sap-tl-root",r=document.createElement("div"),r.className="sap-tl-shell",r.dataset.scrubbing="false";const se=document.createElement("div");se.className="sap-tl-topline";const we=document.createElement("div");we.className="sap-tl-primary",c=document.createElement("button"),c.type="button",c.className="sap-tl-toggle sap-tl-track-toggle",u=document.createElement("span"),u.className="sap-tl-toggle-icon",u.setAttribute("aria-hidden","true"),u.textContent=">",d=document.createElement("span"),d.className="sap-tl-toggle-label",d.textContent="Play",c.append(u,d),c.addEventListener("click",()=>{X.player.togglePlayback()}),h=document.createElement("span"),h.className="sap-tl-current",h.textContent="0:00.00",f=document.createElement("span"),f.className="sap-tl-remaining",f.textContent="-0:00.00",we.append(h),se.append(we,f);const Re=document.createElement("div");Re.className="sap-tl-track-wrap",o=document.createElement("div"),o.className="sap-tl-ranges",o.hidden=!0,p=document.createElement("div"),p.className="sap-tl-event-lanes",p.hidden=!0;const k=document.createElement("div");k.className="sap-tl-track-rail";const G=document.createElement("div");G.className="sap-tl-main-rail",g=document.createElement("div"),g.className="sap-tl-markers",l=document.createElement("input"),l.className="sap-tl-range",l.type="range",l.min="0",l.max=`${X.replay.duration}`,l.step="0.01",l.value="0";const j=()=>{Te()},Y=()=>{l&&X.player.seek(X.player.projectTimelineTimeToReplay(Number(l.value)))},Q=()=>{re()};l.addEventListener("pointerdown",j),l.addEventListener("input",Y),l.addEventListener("change",Q),window.addEventListener("pointerup",Q),window.addEventListener("pointercancel",Q),_=()=>{l?.removeEventListener("pointerdown",j),l?.removeEventListener("input",Y),l?.removeEventListener("change",Q),window.removeEventListener("pointerup",Q),window.removeEventListener("pointercancel",Q)},k.append(G,g,l),Re.append(o,p,c,k),r.append(se,Re),a.append(r),X.container.append(a),Oe(X),Z(X),H({...X,state:X.player.getState()})},onStateChange(X){S=X,H(X)},teardown(X){_?.(),_=null,re(),a?.remove(),a=null,r=null,o=null,p=null,l=null,c=null,u=null,d=null,h=null,f=null,g=null,S=null,x=[],M=[],C=null,w.clear(),E.splice(0,E.length),R.splice(0,R.length),L.splice(0,L.length),O.splice(0,O.length),D=0,U=new Set,m&&(X.container.style.position=v,m=!1)}}}function h3(n,e,t={}){const i=new dS(e.raw,{motionSmoothing:t.motionSmoothing,smoothingBlendFactor:t.smoothingBlendFactor,smoothingAnchorInterval:t.smoothingAnchorInterval,timelineCompaction:t.timelineCompaction,disableFrameFiltering:t.disableFrameFiltering}),s=new hU(n,i,t,e.replay);return s.getPlugins().some(a=>a.id==="camera")||s.addPlugin(vU()),s}const f3="https://ballchasing.com",p3=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function m3(n,e){const i=(e instanceof URL?e.href:e).replace(/\/+$/,"");return new URL(`${i}/${n.replace(/^\/+/,"")}`)}function ub(n){return p3.test(n.trim())}function uy(n){const e=n.trim();if(ub(e))return e.toLowerCase();let t;try{t=new URL(e)}catch{throw new Error(`Invalid Ballchasing replay id: ${n}`)}if(!/(^|\.)ballchasing\.com$/i.test(t.hostname))throw new Error(`Invalid Ballchasing replay URL: ${n}`);const i=t.pathname.split("/").filter(Boolean),s=i.findIndex(o=>o==="replay"),a=i.findIndex(o=>o==="replays"),r=s>=0?i[s+1]:a>=0?i[a+1]:void 0;if(!r||!ub(r))throw new Error(`Invalid Ballchasing replay URL: ${n}`);return r.toLowerCase()}function _3(n){return`ballchasing-${uy(n)}.replay`}function g3(n,e=f3){const t=uy(n);return m3(`dl/replay/${encodeURIComponent(t)}`,e)}const g_=250,db="subtr-actor-ballchasing-overlay-styles",sm="#3b82f6",hb="#f59e0b";function y3(){if(document.getElementById(db))return;const n=document.createElement("style");n.id=db,n.textContent=` .sap-bc-overlay-root { position: absolute; inset: 0; @@ -4541,14 +4541,14 @@ void main() { right: calc(50% + 2.7rem); flex-direction: row; justify-content: flex-end; - border-bottom: 2px solid ${Jp}; + border-bottom: 2px solid ${sm}; } .sap-bc-team-hud-orange { left: calc(50% + 2.7rem); flex-direction: row; justify-content: flex-start; - border-bottom: 2px solid ${ab}; + border-bottom: 2px solid ${hb}; } .sap-bc-hud-player { @@ -4656,7 +4656,7 @@ void main() { .sap-bc-followed-boost-ring { --sap-bc-followed-boost: 0%; - --sap-bc-followed-color: ${Jp}; + --sap-bc-followed-color: ${sm}; position: relative; display: grid; place-items: center; @@ -4676,11 +4676,11 @@ void main() { } .sap-bc-followed-hud-blue .sap-bc-followed-boost-ring { - --sap-bc-followed-color: ${Jp}; + --sap-bc-followed-color: ${sm}; } .sap-bc-followed-hud-orange .sap-bc-followed-boost-ring { - --sap-bc-followed-color: ${ab}; + --sap-bc-followed-color: ${hb}; } .sap-bc-followed-boost-value { @@ -4795,7 +4795,7 @@ void main() { font-size: 0.68rem; } } - `,document.head.append(n)}function lU(n,e){const t=n.players[e],i=t.frame?.boostAmount??0,s=t.nextFrame?.boostAmount??i;return bt.lerp(i,s,n.alpha)}function cU(n,e){const t=n.replay.players.find(h=>h.id===e);if(!t)return null;const i=Bh(n.replay,n.state.currentTime),s=Math.min(i+1,n.replay.frames.length-1),a=n.replay.frames[i],r=n.replay.frames[s]??a,o=a?.time??n.state.currentTime,l=r?.time??o,c=l>o?bt.clamp((n.state.currentTime-o)/(l-o),0,1):0,u=t.frames[i]?.boostAmount??0,d=t.frames[s]?.boostAmount??u;return bt.lerp(u,d,c)}function rb(n,e,t,i){if(!n||!e)return;const s=Math.max(0,Math.min(100,Math.round(Ys(t))));n.style.width=`${s}%`,e.textContent=`${s} ${i}`}function ob(n,e,t,i){if(!n)return;const s=Math.max(0,Math.min(100,Math.round(Ys(e))));n.root.hidden=!1,n.root.classList.toggle("sap-bc-followed-hud-blue",i),n.root.classList.toggle("sap-bc-followed-hud-orange",!i),n.root.setAttribute("aria-label",`${t} boost ${s}`),n.ring.style.setProperty("--sap-bc-followed-boost",`${s}%`),n.value.textContent=`${s}`,n.name.textContent=t}function lb(n,e,t,i){if(!n)return;const s=()=>{e.player.setAttachedPlayer(t)};n.classList.add("sap-bc-player-selectable"),n.tabIndex=0,n.setAttribute("role","button"),n.setAttribute("aria-label",`Follow ${i}`),n.title=`Follow ${i}`,n.addEventListener("click",s),n.addEventListener("keydown",a=>{a.key!=="Enter"&&a.key!==" "||(a.preventDefault(),s())})}function uU(n,e,t,i,s){if(n.getWorldPosition(s),s.add(e),s.project(t),s.z<-1||s.z>1)return!1;const a=i.clientWidth||1,r=i.clientHeight||1;return s.x=(s.x+1)*a/2,s.y=(1-s.y)*r/2,!(s.x<-80||s.x>a+80||s.y<-80||s.y>r+80)}function dU(n={}){const e=n.showFloatingNames??!0,t=n.showFloatingBoostBars??!0,i=n.showTeamBoostHud??!0,s=n.showFollowedPlayerHud??!0;let a=null,r=null,o=null,l=null,c=null,u=!1,d="";const h=new Map,f=n.floatingLiftUu,p=new T,g=new T;function _(){const b=typeof f=="function"?f():f;return typeof b=="number"&&Number.isFinite(b)?b:u_}function m(b){for(const[S,x]of h.entries()){const M=S===b;x.floatingRoot?.classList.toggle("sap-bc-player-following",M),x.teamHudEntry?.classList.toggle("sap-bc-player-following",M),x.floatingRoot?.setAttribute("aria-pressed",M?"true":"false"),x.teamHudEntry?.setAttribute("aria-pressed",M?"true":"false")}}function v(b){if(!c||!b.state.attachedPlayerId){c&&(c.root.hidden=!0);return}const S=b.replay.players.find(M=>M.id===b.state.attachedPlayerId);if(!S){c.root.hidden=!0;return}const x=cU(b,S.id);if(x===null){c.root.hidden=!0;return}ob(c,x,S.name,S.isTeamZero)}function y(b,S){if(oU(),getComputedStyle(S).position==="static"&&(u=!0,d=S.style.position,S.style.position="relative"),a=document.createElement("div"),a.className="sap-bc-overlay-root",e||t?(r=document.createElement("div"),r.className="sap-bc-floating-layer",a.append(r)):r=null,i?(o=document.createElement("div"),o.className="sap-bc-team-hud sap-bc-team-hud-blue",l=document.createElement("div"),l.className="sap-bc-team-hud sap-bc-team-hud-orange",a.append(o,l)):(o=null,l=null),s){const x=document.createElement("div");x.className="sap-bc-followed-hud",x.hidden=!0;const M=document.createElement("div");M.className="sap-bc-followed-boost-ring";const C=document.createElement("span");C.className="sap-bc-followed-boost-value",M.append(C);const w=document.createElement("div");w.className="sap-bc-followed-meta",w.textContent="Boost";const E=document.createElement("span");E.className="sap-bc-followed-name",w.append(E),x.append(M,w),a.append(x),c={root:x,ring:M,value:C,name:E}}else c=null;for(const x of b.replay.players){let M=null,C=null,w=null,E=null;r&&(M=document.createElement("div"),M.className="sap-bc-floating-track",M.hidden=!0,(e||t)&&(C=document.createElement("div"),C.className=`sap-bc-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,w=document.createElement("div"),w.className=`sap-bc-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,E=document.createElement("span"),E.className="sap-bc-boost-text",C.append(w,E),M.append(C)),lb(M,b,x.id,x.name),r.append(M));let R=null,L=null,O=null;if(i){R=document.createElement("div"),R.className="sap-bc-hud-player";const D=document.createElement("div");D.className=`sap-bc-hud-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,L=document.createElement("div"),L.className=`sap-bc-hud-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,O=document.createElement("span"),O.className="sap-bc-hud-boost-text",D.append(L,O),R.append(D),lb(R,b,x.id,x.name),(x.isTeamZero?o:l)?.append(R)}h.set(x.id,{floatingRoot:M,floatingBoostFill:w,floatingBoostText:E,teamHudEntry:R,teamHudFill:L,teamHudText:O})}S.append(a),m(b.player.getState().attachedPlayerId),v({...b,state:b.player.getState()})}return{id:"ballchasing-overlay",setup(b){y(b,b.container)},onStateChange(b){m(b.state.attachedPlayerId),v(b)},teardown(b){a?.remove(),a=null,r=null,o=null,l=null,c=null,h.clear(),u&&(b.container.style.position=d,u=!1)},beforeRender(b){if(!a)return;g.copy(b.scene.camera.up).normalize().multiplyScalar(_()*(b.options.fieldScale??1));let S=!1;for(const[x,M]of b.players.entries()){const C=h.get(M.track.id);if(!C)continue;const w=lU(b,x),E=C.floatingRoot?.classList.contains("sap-bc-player-following")??!1;E&&(ob(c,w,M.track.name,M.track.isTeamZero),S=!0),rb(C.floatingBoostFill,C.floatingBoostText,w,M.track.name),rb(C.teamHudFill,C.teamHudText,w,M.track.name);const R=M.mesh,L=R!==null&&M.interpolatedPosition!==null;if(C.teamHudEntry?.classList.toggle("sap-bc-hud-player-inactive",!L),!!C.floatingRoot){if(E||!L||!uU(R,g,b.scene.camera,b.container,p)){C.floatingRoot.hidden=!0;continue}C.floatingRoot.hidden=!1,C.floatingRoot.style.transform=`translate(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px) translate(-50%, -100%)`}}!S&&c&&(c.root.hidden=!0)}}}function hU(){return` + `,document.head.append(n)}function v3(n,e){const t=n.players[e],i=t.frame?.boostAmount??0,s=t.nextFrame?.boostAmount??i;return bt.lerp(i,s,n.alpha)}function b3(n,e){const t=n.replay.players.find(h=>h.id===e);if(!t)return null;const i=Wh(n.replay,n.state.currentTime),s=Math.min(i+1,n.replay.frames.length-1),a=n.replay.frames[i],r=n.replay.frames[s]??a,o=a?.time??n.state.currentTime,l=r?.time??o,c=l>o?bt.clamp((n.state.currentTime-o)/(l-o),0,1):0,u=t.frames[i]?.boostAmount??0,d=t.frames[s]?.boostAmount??u;return bt.lerp(u,d,c)}function fb(n,e,t,i){if(!n||!e)return;const s=Math.max(0,Math.min(100,Math.round(Ys(t))));n.style.width=`${s}%`,e.textContent=`${s} ${i}`}function pb(n,e,t,i){if(!n)return;const s=Math.max(0,Math.min(100,Math.round(Ys(e))));n.root.hidden=!1,n.root.classList.toggle("sap-bc-followed-hud-blue",i),n.root.classList.toggle("sap-bc-followed-hud-orange",!i),n.root.setAttribute("aria-label",`${t} boost ${s}`),n.ring.style.setProperty("--sap-bc-followed-boost",`${s}%`),n.value.textContent=`${s}`,n.name.textContent=t}function mb(n,e,t,i){if(!n)return;const s=()=>{e.player.setAttachedPlayer(t)};n.classList.add("sap-bc-player-selectable"),n.tabIndex=0,n.setAttribute("role","button"),n.setAttribute("aria-label",`Follow ${i}`),n.title=`Follow ${i}`,n.addEventListener("click",s),n.addEventListener("keydown",a=>{a.key!=="Enter"&&a.key!==" "||(a.preventDefault(),s())})}function x3(n,e,t,i,s){if(n.getWorldPosition(s),s.add(e),s.project(t),s.z<-1||s.z>1)return!1;const a=i.clientWidth||1,r=i.clientHeight||1;return s.x=(s.x+1)*a/2,s.y=(1-s.y)*r/2,!(s.x<-80||s.x>a+80||s.y<-80||s.y>r+80)}function w3(n={}){const e=n.showFloatingNames??!0,t=n.showFloatingBoostBars??!0,i=n.showTeamBoostHud??!0,s=n.showFollowedPlayerHud??!0;let a=null,r=null,o=null,l=null,c=null,u=!1,d="";const h=new Map,f=n.floatingLiftUu,p=new T,g=new T;function _(){const b=typeof f=="function"?f():f;return typeof b=="number"&&Number.isFinite(b)?b:g_}function m(b){for(const[S,x]of h.entries()){const M=S===b;x.floatingRoot?.classList.toggle("sap-bc-player-following",M),x.teamHudEntry?.classList.toggle("sap-bc-player-following",M),x.floatingRoot?.setAttribute("aria-pressed",M?"true":"false"),x.teamHudEntry?.setAttribute("aria-pressed",M?"true":"false")}}function v(b){if(!c||!b.state.attachedPlayerId){c&&(c.root.hidden=!0);return}const S=b.replay.players.find(M=>M.id===b.state.attachedPlayerId);if(!S){c.root.hidden=!0;return}const x=b3(b,S.id);if(x===null){c.root.hidden=!0;return}pb(c,x,S.name,S.isTeamZero)}function y(b,S){if(y3(),getComputedStyle(S).position==="static"&&(u=!0,d=S.style.position,S.style.position="relative"),a=document.createElement("div"),a.className="sap-bc-overlay-root",e||t?(r=document.createElement("div"),r.className="sap-bc-floating-layer",a.append(r)):r=null,i?(o=document.createElement("div"),o.className="sap-bc-team-hud sap-bc-team-hud-blue",l=document.createElement("div"),l.className="sap-bc-team-hud sap-bc-team-hud-orange",a.append(o,l)):(o=null,l=null),s){const x=document.createElement("div");x.className="sap-bc-followed-hud",x.hidden=!0;const M=document.createElement("div");M.className="sap-bc-followed-boost-ring";const C=document.createElement("span");C.className="sap-bc-followed-boost-value",M.append(C);const w=document.createElement("div");w.className="sap-bc-followed-meta",w.textContent="Boost";const E=document.createElement("span");E.className="sap-bc-followed-name",w.append(E),x.append(M,w),a.append(x),c={root:x,ring:M,value:C,name:E}}else c=null;for(const x of b.replay.players){let M=null,C=null,w=null,E=null;r&&(M=document.createElement("div"),M.className="sap-bc-floating-track",M.hidden=!0,(e||t)&&(C=document.createElement("div"),C.className=`sap-bc-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,w=document.createElement("div"),w.className=`sap-bc-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,E=document.createElement("span"),E.className="sap-bc-boost-text",C.append(w,E),M.append(C)),mb(M,b,x.id,x.name),r.append(M));let R=null,L=null,O=null;if(i){R=document.createElement("div"),R.className="sap-bc-hud-player";const D=document.createElement("div");D.className=`sap-bc-hud-boost-bar ${x.isTeamZero?"sap-bc-boost-bar-blue":"sap-bc-boost-bar-orange"}`,L=document.createElement("div"),L.className=`sap-bc-hud-boost-fill ${x.isTeamZero?"sap-bc-boost-fill-blue":"sap-bc-boost-fill-orange"}`,O=document.createElement("span"),O.className="sap-bc-hud-boost-text",D.append(L,O),R.append(D),mb(R,b,x.id,x.name),(x.isTeamZero?o:l)?.append(R)}h.set(x.id,{floatingRoot:M,floatingBoostFill:w,floatingBoostText:E,teamHudEntry:R,teamHudFill:L,teamHudText:O})}S.append(a),m(b.player.getState().attachedPlayerId),v({...b,state:b.player.getState()})}return{id:"ballchasing-overlay",setup(b){y(b,b.container)},onStateChange(b){m(b.state.attachedPlayerId),v(b)},teardown(b){a?.remove(),a=null,r=null,o=null,l=null,c=null,h.clear(),u&&(b.container.style.position=d,u=!1)},beforeRender(b){if(!a)return;g.copy(b.scene.camera.up).normalize().multiplyScalar(_()*(b.options.fieldScale??1));let S=!1;for(const[x,M]of b.players.entries()){const C=h.get(M.track.id);if(!C)continue;const w=v3(b,x),E=C.floatingRoot?.classList.contains("sap-bc-player-following")??!1;E&&(pb(c,w,M.track.name,M.track.isTeamZero),S=!0),fb(C.floatingBoostFill,C.floatingBoostText,w,M.track.name),fb(C.teamHudFill,C.teamHudText,w,M.track.name);const R=M.mesh,L=R!==null&&M.interpolatedPosition!==null;if(C.teamHudEntry?.classList.toggle("sap-bc-hud-player-inactive",!L),!!C.floatingRoot){if(E||!L||!x3(R,g,b.scene.camera,b.container,p)){C.floatingRoot.hidden=!0;continue}C.floatingRoot.hidden=!1,C.floatingRoot.style.transform=`translate(${p.x.toFixed(1)}px, ${p.y.toFixed(1)}px) translate(-50%, -100%)`}}!S&&c&&(c.root.hidden=!0)}}}const S3="modulepreload",T3=function(n,e){return new URL(n,e).href},_b={},M3=function(e,t,i){let s=Promise.resolve();if(t&&t.length>0){let c=function(u){return Promise.all(u.map(d=>Promise.resolve(d).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};const r=document.getElementsByTagName("link"),o=document.querySelector("meta[property=csp-nonce]"),l=o?.nonce||o?.getAttribute("nonce");s=c(t.map(u=>{if(u=T3(u,i),u in _b)return;_b[u]=!0;const d=u.endsWith(".css"),h=d?'[rel="stylesheet"]':"";if(i)for(let p=r.length-1;p>=0;p--){const g=r[p];if(g.href===u&&(!d||g.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${h}`))return;const f=document.createElement("link");if(f.rel=d?"stylesheet":S3,d||(f.as="script"),f.crossOrigin="",f.href=u,l&&f.setAttribute("nonce",l),document.head.appendChild(f),d)return new Promise((p,g)=>{f.addEventListener("load",p),f.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${u}`)))})}))}function a(r){const o=new Event("vite:preloadError",{cancelable:!0});if(o.payload=r,window.dispatchEvent(o),!o.defaultPrevented)throw r}return s.then(r=>{for(const o of r||[])o.status==="rejected"&&a(o.reason);return e().catch(a)})};function E3(){return{guid:{a:0,b:0,c:0,d:0},code:null,name:null,training_type:"Training_None",difficulty:"D_Easy",creator_name:null,description:null,tags:[],map_name:null,created_at:0n,updated_at:0n,creator_player_id:{uid:0n,epic_account_id:null,platform:null,splitscreen_id:0},rounds:[],player_team_number:0,unowned:!1,perfect_completed:!1,shots_completed:0}}let am=null;async function C3(){return am||(am=(async()=>{const n=await M3(()=>import("./rl_replay_subtr_actor-Cnltgw4Z.js"),[],import.meta.url),e=n.default;return typeof e=="function"&&await e(),n})()),am}async function gb(n){return n?.bindings??C3()}function A3(n){return n instanceof Uint8Array?n:new Uint8Array(n)}function no(n){try{return n()}catch(e){throw e instanceof Error?e:new Error(String(e))}}class ca{constructor(e,t){this.bindings=e,this.lossless=t}lossless;cachedPack=null;static async load(e,t){return ca.fromBytes(e,await gb(t))}static fromBytes(e,t){const i=no(()=>t.parse_training_pack_lossless(A3(e)));return new ca(t,i)}static async create(e,t){return ca.createWithBindings(await gb(t),e)}static createWithBindings(e,t){const i={...E3(),...t},s=no(()=>e.new_training_pack(i));return new ca(e,s)}static fromLosslessJson(e,t){const i=new ca(t,e);return i.view(),i}view(){return this.cachedPack||(this.cachedPack=no(()=>this.bindings.training_pack_from_lossless(this.lossless))),this.cachedPack}apply(e){this.lossless=no(e),this.cachedPack=null}get losslessJson(){return this.lossless}get pack(){return structuredClone(this.view())}toJSON(){return this.pack}get name(){return this.view().name}get code(){return this.view().code}get description(){return this.view().description}get creatorName(){return this.view().creator_name}get trainingType(){return this.view().training_type}get difficulty(){return this.view().difficulty}get mapName(){return this.view().map_name}get guid(){return{...this.view().guid}}get tags(){return[...this.view().tags]}get rounds(){return structuredClone(this.view().rounds)}get roundCount(){return this.view().rounds.length}updateMetadata(e){const t={...this.view(),...e};this.apply(()=>this.bindings.update_training_pack_metadata(this.lossless,t))}setName(e){this.updateMetadata({name:e})}setCode(e){this.updateMetadata({code:e})}setDescription(e){this.updateMetadata({description:e})}setCreatorName(e){this.updateMetadata({creator_name:e})}setTrainingType(e){this.updateMetadata({training_type:e})}setDifficulty(e){this.updateMetadata({difficulty:e})}setMapName(e){this.updateMetadata({map_name:e})}setTags(e){this.updateMetadata({tags:e})}setGuid(e){this.updateMetadata({guid:e})}addRound(e){this.apply(()=>this.bindings.training_pack_add_round(this.lossless,e))}insertRound(e,t){this.apply(()=>this.bindings.training_pack_insert_round(this.lossless,e,t))}removeRound(e){const t=this.view().rounds[e];return this.apply(()=>this.bindings.training_pack_remove_round(this.lossless,e)),structuredClone(t)}moveRound(e,t){this.apply(()=>this.bindings.training_pack_move_round(this.lossless,e,t))}duplicateRound(e){this.apply(()=>this.bindings.training_pack_duplicate_round(this.lossless,e))}getRoundArchetypes(e){return no(()=>this.bindings.training_pack_round_archetypes(this.lossless,e))}setRoundArchetype(e,t,i){this.apply(()=>this.bindings.training_pack_set_round_archetype(this.lossless,e,t,i))}addRoundArchetype(e,t){this.apply(()=>this.bindings.training_pack_add_round_archetype(this.lossless,e,t))}removeRoundArchetype(e,t){const i=this.getRoundArchetypes(e)[t];return this.apply(()=>this.bindings.training_pack_remove_round_archetype(this.lossless,e,t)),i}setRoundBall(e,t){this.apply(()=>this.bindings.training_pack_set_round_ball(this.lossless,e,t))}addRoundCar(e,t){this.addRoundArchetype(e,{kind:"CarSpawnPoint",...t})}setRoundTimeLimit(e,t){this.apply(()=>this.bindings.training_pack_set_round_time_limit(this.lossless,e,t))}appendRoundsFrom(e){const t=e.view().rounds.length;return this.apply(()=>this.bindings.training_pack_append_rounds(this.lossless,e.lossless)),t}toBytes(){return no(()=>this.bindings.serialize_training_pack(this.lossless))}}const EM=8,R3=17,P3=32768/Math.PI;function Jl(n){return Math.round(n*P3)}function _d(n,e){const{x:t,y:i,z:s,w:a}=e,r=2*(i*n.z-s*n.y),o=2*(s*n.x-t*n.z),l=2*(t*n.y-i*n.x);return{x:n.x+a*r+(i*l-s*o),y:n.y+a*o+(s*r-t*l),z:n.z+a*l+(t*o-i*r)}}function I3(n){const e=n?.x??0,t=n?.y??0,i=n?.z??0,s=Math.hypot(e,t),a=Math.hypot(s,i);return a===0?{rotator:{pitch:0,yaw:0,roll:0},speed:0}:{rotator:{pitch:Jl(Math.atan2(i,s)),yaw:Jl(Math.atan2(t,e)),roll:0},speed:a}}function L3(n){const e=_d({x:1,y:0,z:0},n),t=_d({x:0,y:1,z:0},n),i=_d({x:0,y:0,z:1},n);return{pitch:Jl(Math.atan2(e.z,Math.hypot(e.x,e.y))),yaw:Jl(Math.atan2(e.y,e.x)),roll:Jl(Math.atan2(t.z,i.z))}}const k3=1,D3=300,O3=400,F3=20;function N3(n,e){const t=D3,i=O3,s=F3,a=n.linearVelocity,r=a?.x??0,o=a?.y??0,l=a?.z??0,c=Math.hypot(r,o,l);if(c<=t)return null;const u=n.rotation?_d({x:1,y:0,z:0},n.rotation):{x:1,y:0,z:0},d=r*u.x+o*u.y+l*u.z,h=d(e>>>0).toString(16).padStart(8,"0").toUpperCase()).join("")}function $3(n){return`${G3(n)}.Tem`}function W3(n=Math.floor(Date.now()/1e3)){const e=BigInt(n);return{guid:V3(),name:"Captured Training Pack",training_type:"Training_Striker",difficulty:"D_Medium",map_name:"Park_P",created_at:e,updated_at:e}}function X3(){return`
@@ -4822,6 +4822,7 @@ void main() { + @@ -5219,6 +5220,70 @@ void main() {
+ +
--
--
-`}const tn="#3b82f6",nn="#f59e0b",fU=new Set(["wavedash"]),pU=new Set(["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"]);function Dn(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function cb(n){return pU.has(n)&&!fU.has(n)}function Ef(n){return n===!0?tn:n===!1?nn:null}const gM=["timeline","core_player","player_possession","possession","loose_possession","ball_half","ball_third","territorial_pressure","movement","player_activity","field_third","field_half","ball_depth","depth_role","ball_proximity","shadow_defense","rotation_role","first_man_change","goal_context","backboard","ceiling_shot","wall_aerial","wall_aerial_shot","center","flick","flip_reset","dodge_reset","double_tap","fifty_fifty","kickoff","one_timer","pass","ball_carry","controlled_play","rush","dodge","speed_flip","half_flip","half_volley","wavedash","whiff","powerslide","touch","boost_pickups","boost_respawn","bump","demolition"],yM=["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"],sy=[...new Set([...gM,...yM])],mU=new Set(yM);function mo(){return Object.fromEntries(sy.map(n=>[n,0]))}function Qp(n){return{...n??mo()}}function Hu(n,e){n[e]+=1}function _U(n){return sy.includes(n)}function vM(n){if(n==null)return null;if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function d_(n){return vM(n.meta.primary_player)}function gU(n){return n.meta.team_is_team_0??null}function yU(n){const e=n.meta.stream;return!mU.has(e)||!_U(e)?null:e}function h_(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_frame:n.meta.timing.frame;return typeof e=="number"&&Number.isFinite(e)?e:null}function f_(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_time:n.meta.timing.time;return typeof e=="number"&&Number.isFinite(e)?e:null}function vU(n,e){const t=h_(n);if(t!==null)return t<=e.frame_number;const i=f_(n);return i!==null&&i<=e.time}function bU(n){return[...n].sort((e,t)=>{const i=h_(e),s=h_(t);if(i!==s)return(i??Number.POSITIVE_INFINITY)-(s??Number.POSITIVE_INFINITY);const a=f_(e),r=f_(t);return a!==r?(a??Number.POSITIVE_INFINITY)-(r??Number.POSITIVE_INFINITY):(d_(e)??"").localeCompare(d_(t)??"")})}function bM(n){const e=xM(n);for(const t of n.frames)e.applyFrame(t);return n}function xM(n){const e=sy.map(s=>({eventType:s,events:bU(pc(n).filter(a=>a.meta.stream===s)),index:0})),t=new Map,i={teamZero:mo(),teamOne:mo()};return{applyFrame(s){for(const a of e)for(;a.index({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function wU(n,e,t,i){n.is_last_backboard=i,n.time_since_last_backboard=n.last_backboard_time==null?null:Math.max(0,t-n.last_backboard_time),n.frames_since_last_backboard=n.last_backboard_frame==null?null:Math.max(0,e-n.last_backboard_frame)}function SU(n,e,t,i){n.count+=1,n.last_backboard_time=e.time,n.last_backboard_frame=e.frame,n.time_since_last_backboard=Math.max(0,i-e.time),n.frames_since_last_backboard=Math.max(0,t-e.frame)}function TU(n,e){Object.assign(n,e??wM())}function db(n,e){n.count=e}function MU(n){const e=SM(n);for(const t of n.frames)e.applyFrame(t);return n}function SM(n){const e=xU(be(n,"backboard"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)wU(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function p_(n){return`${n.key}\0${n.value}`}function Vu(n){return n.map(p_).join("")}function TM(n,e){e.sort((s,a)=>p_(s).localeCompare(p_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Vu(s.labels)===Vu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Vu(s.labels).localeCompare(Vu(a.labels))))}function fb(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="origin"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function MM(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function EM(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function pb(n,e){TM(n,[{key:"kind",value:"carry"}]),n.carry_count=MM(n),n.total_carry_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_carry_time=Math.max(n.longest_carry_time,e.duration),n.furthest_carry_distance=Math.max(n.furthest_carry_distance,e.straight_line_distance),n.fastest_carry_speed=Math.max(n.fastest_carry_speed,e.average_speed),n.carry_speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap}function mb(n,e){e.air_dribble_origin!=null&&TM(n,[{key:"origin",value:e.air_dribble_origin}]),n.count=MM(n),n.ground_to_air_count=fb(n,"ground_to_air"),n.wall_to_air_count=fb(n,"wall_to_air"),n.total_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_time=Math.max(n.longest_time,e.duration),n.furthest_distance=Math.max(n.furthest_distance,e.straight_line_distance),n.fastest_speed=Math.max(n.fastest_speed,e.average_speed),n.speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap,n.total_touch_count+=e.touch_count,n.max_touch_count=Math.max(n.max_touch_count,e.touch_count)}function em(n,e){Object.assign(n,e??hd()),e?.labeled_event_counts?n.labeled_event_counts=EM(e.labeled_event_counts):delete n.labeled_event_counts}function tm(n,e){Object.assign(n,e??fd()),e?.labeled_event_counts?n.labeled_event_counts=EM(e.labeled_event_counts):delete n.labeled_event_counts}function CU(n){const e=CM(n);for(const t of n.frames)e.applyFrame(t);return n}function CM(n){const e=EU(be(n,"ball_carry"));let t=0;const i=new Map,s=new Map,a=hd(),r=hd(),o=fd(),l=fd();return{applyFrame(c){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function RU(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1),n.last_bump_time=e.time,n.last_bump_frame=e.frame,n.last_bump_strength=e.strength,n.max_bump_strength=Math.max(n.max_bump_strength,e.strength),n.cumulative_bump_strength+=e.strength}function PU(n,e){n.bumps_taken+=1,e.is_team_bump&&(n.team_bumps_taken+=1)}function IU(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1)}function LU(n,e){Object.assign(n,e??m_())}function gb(n,e){Object.assign(n,e)}function kU(n){const e=AM(n);for(const t of n.frames)e.applyFrame(t);return n}function AM(n){const e=AU(be(n,"bump"));let t=0;const i=new Map,s=_b(),a=_b();return{applyFrame(r){for(;t=t&&n0&&(s.overfill_total=an(s.overfill_total,i),e.field_half==="opponent"&&(s.overfill_from_stolen=an(s.overfill_from_stolen,i)))}function bb(n,e){e.boost_granted!=null&&(n.stats.amount_respawned=an(n.stats.amount_respawned,on(e.boost_granted)))}class BU{constructor(e){this.points=e}index=0;sample(e){for(;this.index+1e?0:on(t.value)}}function v_(n,e){return`${n}:${e}`}function zU(n){const e=new Map,t=n.accumulation_tracks;for(const i of t??[]){const s=Il(i.player_id);e.set(v_(s,i.quantity),new BU(i.points))}return e}function HU(n){return[...be(n,"boost_pickup")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function VU(n){return[...be(n,"respawn")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function sm(n,e){for(const t of RM)n[t]=e[t]}function PM(n){const e=HU(n),t=VU(n),i=zU(n);let s=0,a=0;const r=new Map,o=im(),l=im(),c=(d,h)=>{const f=Il(d);let p=r.get(f);return p||(p=im(),r.set(f,p)),p.isTeamZero=h,p},u=(d,h,f)=>{const p=g=>i.get(v_(h,g))?.sample(f)??0;d.amount_used=p("boost_used"),d.amount_used_while_grounded=p("boost_used_grounded"),d.amount_used_while_airborne=p("boost_used_airborne"),d.amount_used_while_supersonic=p("boost_used_supersonic")};return{applyFrame(d,h){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function b_(n){return`${n.key}\0${n.value}`}function $u(n){return n.map(b_).join("")}function qU(n,e){e.sort((s,a)=>b_(s).localeCompare(b_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>$u(s.labels)===$u(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>$u(s.labels).localeCompare($u(a.labels))))}function YU(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function jU(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function ZU(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function JU(n,e,t,i){n.is_last_ceiling_shot=i,n.time_since_last_ceiling_shot=n.last_ceiling_shot_time==null?null:Math.max(0,IM(t,n.last_ceiling_shot_time)),n.frames_since_last_ceiling_shot=n.last_ceiling_shot_frame==null?null:Math.max(0,e-n.last_ceiling_shot_frame)}function QU(n,e,t,i){qU(n,[{key:"confidence_band",value:e.confidence>=WU?"high":"standard"}]),n.count=jU(n),n.high_confidence_count=YU(n,"high"),n.is_last_ceiling_shot=!0,n.last_ceiling_shot_time=e.time,n.last_ceiling_shot_frame=e.frame,n.time_since_last_ceiling_shot=Math.max(0,IM(i,e.time)),n.frames_since_last_ceiling_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=XU(n.cumulative_confidence,e.confidence)}function eB(n,e){Object.assign(n,e??LM()),e?.labeled_event_counts?n.labeled_event_counts=ZU(e.labeled_event_counts):delete n.labeled_event_counts}function tB(n){const e=kM(n);for(const t of n.frames)e.applyFrame(t);return n}function kM(n){const e=KU(be(n,"ceiling_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)JU(o,a.frame_number,a.time,i===r);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function aB(n,e){Object.assign(n,e??ay())}function Sb(n,e){Object.assign(n,e)}function Tb(n,e){n.score+=e.score_delta,n.goals+=e.goals_delta,n.assists+=e.assists_delta,n.saves+=e.saves_delta,n.shots+=e.shots_delta}function DM(n,e){if(e.time_after_kickoff!=null){const t=Math.max(0,e.time_after_kickoff);t<10?n.kickoff_goal_count+=1:t<20?n.short_goal_count+=1:t<40?n.medium_goal_count+=1:n.long_goal_count+=1}if(e.goal_buildup==="counter_attack"?n.counter_attack_goal_count+=1:e.goal_buildup==="sustained_pressure"?n.sustained_pressure_goal_count+=1:e.goal_buildup!=null&&(n.other_buildup_goal_count+=1),e.ball_air_time_before_goal!=null){const t=Math.max(0,e.ball_air_time_before_goal);n.goal_ball_air_time_sample_count+=1,n.cumulative_goal_ball_air_time=cs(n.cumulative_goal_ball_air_time,t),n.last_goal_ball_air_time=t}}function am(n,e){return n!=null&&e!=null&&fc(n)===fc(e)}function Mb(n,e){return n?e.y:-e.y}function rB(n,e){if(n.ball_position==null||e.position==null)return!1;const t=!n.scoring_team_is_team_0,i=Mb(t,n.ball_position);if(i>nB)return!1;const s=Mb(t,e.position);return s=sB}function oB(n,e,t){const i=t.is_team_0===e.scoring_team_is_team_0,s=am(t.player,e.defending_team_most_back_player),a=am(t.player,e.scoring_team_most_back_player);s&&(n.goals_conceded_while_last_defender+=1),a&&(n.goals_for_while_most_back+=1),s&&(n.goals_against_while_most_back+=1),!i&&rB(e,t)&&(n.caught_ahead_of_play_on_conceded_goals+=1),!i&&t.boost_amount!=null&&(n.goal_against_boost_sample_count+=1,n.cumulative_boost_on_goals_against=cs(n.cumulative_boost_on_goals_against,t.boost_amount),n.last_boost_on_goal_against=t.boost_amount),!i&&t.average_boost_in_leadup!=null&&t.min_boost_in_leadup!=null&&(n.goal_against_boost_leadup_sample_count+=1,n.cumulative_average_boost_in_goal_against_leadup=cs(n.cumulative_average_boost_in_goal_against_leadup,t.average_boost_in_leadup),n.cumulative_min_boost_in_goal_against_leadup=cs(n.cumulative_min_boost_in_goal_against_leadup,t.min_boost_in_leadup),n.last_average_boost_in_goal_against_leadup=t.average_boost_in_leadup,n.last_min_boost_in_goal_against_leadup=t.min_boost_in_leadup),!i&&t.position!=null&&(n.goal_against_position_sample_count+=1,n.cumulative_goal_against_position_x=cs(n.cumulative_goal_against_position_x,t.position.x),n.cumulative_goal_against_position_y=cs(n.cumulative_goal_against_position_y,t.position.y),n.cumulative_goal_against_position_z=cs(n.cumulative_goal_against_position_z,t.position.z),n.last_goal_against_position={...t.position});const r=am(t.player,e.scorer),o=r?e.scorer_last_touch?.ball_position:null;o!=null&&(n.scoring_goal_last_touch_position_sample_count+=1,n.cumulative_scoring_goal_last_touch_position_x=cs(n.cumulative_scoring_goal_last_touch_position_x,o.x),n.cumulative_scoring_goal_last_touch_position_y=cs(n.cumulative_scoring_goal_last_touch_position_y,o.y),n.cumulative_scoring_goal_last_touch_position_z=cs(n.cumulative_scoring_goal_last_touch_position_z,o.z),n.last_scoring_goal_last_touch_position={...o}),r&&DM(n,e)}function lB(n,e,t,i){DM(i.scoring_team_is_team_0?e:t,i);for(const s of i.players){const a=fc(s.player),r=n.get(a)??ay();n.set(a,r),oB(r,i,s)}}function cB(n){const e=OM(n);for(const t of n.frames)e.applyFrame(t);return n}function OM(n){const e=wb(be(n,"core_player")),t=wb(be(n,"goal_context"));let i=0,s=0;const a=new Map,r=x_(),o=x_();return{applyFrame(l){for(;i({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Ab(n,e){n.count+=1,n.total_time=Eb(n.total_time,e.duration),n.longest_time=Math.max(n.longest_time,e.duration),n.touch_count+=e.touch_count,n.total_advance_distance=Eb(n.total_advance_distance,e.total_advance_distance)}function om(n,e){Object.assign(n,e??pd())}function dB(n){const e=FM(n);for(const t of n.frames)e.applyFrame(t);return n}function FM(n){const e=uB(be(n,"controlled_play"));let t=0;const i=new Map,s=pd(),a=pd();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function fB(n,e){n.count+=1,e.on_ball&&(n.on_ball_count+=1)}function pB(n,e){Object.assign(n,e??NM())}function mB(n){const e=UM(n);for(const t of n.frames)e.applyFrame(t);return n}function UM(n){const e=hB(be(n,"dodge_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function gB(n,e,t,i){n.is_last_double_tap=i,n.time_since_last_double_tap=n.last_double_tap_time==null?null:Math.max(0,t-n.last_double_tap_time),n.frames_since_last_double_tap=n.last_double_tap_frame==null?null:Math.max(0,e-n.last_double_tap_frame)}function yB(n,e,t,i){n.count+=1,n.last_double_tap_time=e.time,n.last_double_tap_frame=e.frame,n.time_since_last_double_tap=Math.max(0,i-e.time),n.frames_since_last_double_tap=Math.max(0,t-e.frame)}function vB(n,e){Object.assign(n,e??BM())}function Ib(n,e){n.count=e}function bB(n){const e=zM(n);for(const t of n.frames)e.applyFrame(t);return n}function zM(n){const e=_B(be(n,"double_tap"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)gB(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function wB(n,e){Object.assign(n,e??HM())}function Db(n,e){Object.assign(n,e)}function SB(n){const e=VM(n);for(const t of n.frames)e.applyFrame(t);return n}function VM(n){const e=xB(be(n,"demolition"));let t=0;const i=new Map,s=kb(),a=kb();function r(o){const l=Lb(o),c=i.get(l)??HM();return i.set(l,c),c}return{applyFrame(o){for(;t({event:e,index:t})).sort((e,t)=>e.event.resolve_frame!==t.event.resolve_frame?e.event.resolve_frame-t.event.resolve_frame:e.event.resolve_time!==t.event.resolve_time?e.event.resolve_time-t.event.resolve_time:e.index-t.index).map(({event:e})=>e)}function MB(n){return{key:"phase",value:n?"kickoff":"open_play"}}function EB(n,e){return e==null?{key:"outcome",value:"neutral"}:{key:"outcome",value:e===n?"win":"loss"}}function CB(n,e){return e==null?{key:"possession_after",value:"neutral"}:{key:"possession_after",value:e===n?"self":"opponent"}}function AB(n,e){return{key:"dodge_state",value:(n?e.team_zero_dodge_contact:e.team_one_dodge_contact)?"dodge":"no_dodge"}}function S_(n){return`${n.key}\0${n.value}`}function Wu(n){return n.map(S_).join("")}function RB(n,e){e.sort((s,a)=>S_(s).localeCompare(S_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Wu(s.labels)===Wu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Wu(s.labels).localeCompare(Wu(a.labels))))}function PB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Fb(n,e,t){n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0==null?n.neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.possession_after_count+=1:n.opponent_possession_after_count+=1,t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0==null?n.kickoff_neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.kickoff_possession_after_count+=1:n.kickoff_opponent_possession_after_count+=1)}function Nb(n,e,t){RB(n,[MB(t.is_kickoff),EB(e,t.winning_team_is_team_0),CB(e,t.possession_team_is_team_0),AB(e,t)]),n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0===e&&(n.possession_after_count+=1),t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0===e&&(n.kickoff_possession_after_count+=1))}function IB(n,e){Object.assign(n,e??w_()),e?.labeled_event_counts?n.labeled_event_counts=PB(e.labeled_event_counts):delete n.labeled_event_counts}function Ub(n,e){Object.assign(n,e)}function LB(n){const e=GM(n);for(const t of n.frames)e.applyFrame(t);return n}function GM(n){const e=TB(be(n,"fifty_fifty"));let t=0;const i=Ob(),s=Ob(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function T_(n){return`${n.key}\0${n.value}`}function Xu(n){return n.map(T_).join("")}function XM(n,e){e.sort((s,a)=>T_(s).localeCompare(T_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Xu(s.labels)===Xu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Xu(s.labels).localeCompare(Xu(a.labels))))}function DB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function OB(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"taker_outcome",value:n.outcome},{key:"kickoff_approach",value:n.approach},{key:"approach_flip_direction",value:n.approach_flip_direction}]}function FB(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"support_behavior",value:n.support_behavior}]}function zb(n,e,t){n.count+=1,t.outcome==="neutral"?n.neutral_outcomes+=1:t.outcome===(e?"team_zero_win":"team_one_win")?n.wins+=1:t.outcome===(e?"team_one_win":"team_zero_win")&&(n.losses+=1),t.kickoff_possession_outcome==="contested"?n.contested_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_possession":"team_one_possession")?n.kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_one_possession":"team_zero_possession")?n.opponent_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_advantage":"team_one_advantage")?n.kickoff_possession_advantages+=1:n.opponent_kickoff_possession_advantages+=1,t.kickoff_goal&&(n.kickoff_goal_count+=1,t.scoring_team_is_team_0===e?n.kickoff_goals_for+=1:t.scoring_team_is_team_0!=null&&(n.kickoff_goals_against+=1)),t.win_strength!=null&&(n.win_strength_sample_count+=1,n.cumulative_win_strength+=t.win_strength)}function Hb(n,e,t){t&&(t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after,e.boost_after_sample_count+=1,e.cumulative_boost_after+=t.boost_after),t.outcome==="fake"?(n.fake_count+=1,e.fake_count+=1):t.outcome==="missed"&&(n.missed_count+=1,e.missed_count+=1))}function NB(n,e,t){n.count+=1,XM(n,OB(t)),t.outcome==="touched"?n.touches+=1:t.outcome==="fake"?n.fakes+=1:t.outcome==="missed"&&(n.misses+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function UB(n,e,t){n.count+=1,XM(n,FB(t)),t.first_touch_time!=null&&(n.touches+=1),t.support_behavior==="go_for_boost"?n.support_go_for_boosts+=1:t.support_behavior==="cheat"?n.support_cheats+=1:t.support_behavior==="other"&&(n.support_other+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function Ku(n,e,t){const i=$M(t.player),s=n.get(i)??WM();n.set(i,s),"outcome"in t?NB(s,e,t):UB(s,e,t)}function Vb(n,e){Object.assign(n,e)}function BB(n,e){Object.assign(n,e??WM()),e?.labeled_event_counts?n.labeled_event_counts=DB(e.labeled_event_counts):delete n.labeled_event_counts}function zB(n){const e=KM(n);for(const t of n.frames)e.applyFrame(t);return n}function KM(n){const e=kB(be(n,"kickoff"));let t=0;const i=Bb(),s=Bb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function M_(n){return`${n.key}\0${n.value}`}function qu(n){return n.map(M_).join("")}function GB(n,e){e.sort((s,a)=>M_(s).localeCompare(M_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>qu(s.labels)===qu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>qu(s.labels).localeCompare(qu(a.labels))))}function $B(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function WB(n){return n==="forward"||n==="reverse"||n==="side"?n:"other"}function XB(n){return n==="left"||n==="right"?n:"center"}function KB(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function qB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function YB(n,e,t,i){n.is_last_flick=i,n.time_since_last_flick=n.last_flick_time==null?null:Math.max(0,qM(t,n.last_flick_time)),n.frames_since_last_flick=n.last_flick_frame==null?null:Math.max(0,e-n.last_flick_frame)}function jB(n,e,t,i){GB(n,[{key:"confidence_band",value:e.confidence>=HB?"high":"standard"},{key:"kind",value:WB(e.kind)},{key:"direction",value:XB(e.direction)}]),n.count=KB(n),n.high_confidence_count=$B(n,"high"),n.is_last_flick=!0,n.last_flick_time=e.time,n.last_flick_frame=e.frame,n.time_since_last_flick=Math.max(0,qM(i,e.time)),n.frames_since_last_flick=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=cm(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=cm(n.cumulative_setup_duration,e.setup_duration),n.cumulative_ball_speed_change=cm(n.cumulative_ball_speed_change,e.ball_speed_change)}function ZB(n,e){Object.assign(n,e??YM()),e?.labeled_event_counts?n.labeled_event_counts=qB(e.labeled_event_counts):delete n.labeled_event_counts}function JB(n){const e=jM(n);for(const t of n.frames)e.applyFrame(t);return n}function jM(n){const e=VB(be(n,"flick"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)YB(o,a.frame_number,a.time,r===i);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function ez(n,e){n.count+=1,n.total_time_to_use+=e.time_since_reset,n.min_time_to_use=n.min_time_to_use===null?e.time_since_reset:Math.min(n.min_time_to_use,e.time_since_reset)}function tz(n,e){Object.assign(n,e??ZM())}function nz(n){const e=JM(n);for(const t of n.frames)e.applyFrame(t);return n}function JM(n){const e=QB(be(n,"flip_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function sz(n,e,t,i){n.is_last_half_volley=i,n.time_since_last_half_volley=n.last_half_volley_time==null?null:Math.max(0,eE(t,n.last_half_volley_time)),n.frames_since_last_half_volley=n.last_half_volley_frame==null?null:Math.max(0,e-n.last_half_volley_frame)}function az(n,e,t,i){n.count+=1,n.total_ball_speed=QM(n.total_ball_speed,e.ball_speed),n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.last_half_volley_time=e.time,n.last_half_volley_frame=e.frame,n.time_since_last_half_volley=Math.max(0,eE(i,e.time)),n.frames_since_last_half_volley=Math.max(0,t-e.frame)}function rz(n,e){Object.assign(n,e??tE())}function Xb(n,e){Object.assign(n,e)}function oz(n){const e=nE(n);for(const t of n.frames)e.applyFrame(t);return n}function nE(n){const e=iz(be(n,"half_volley"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)sz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;te.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:Yi(e.player).localeCompare(Yi(t.player)))}function dz(n){return[...n].sort((e,t)=>e.resolved_frame!==t.resolved_frame?e.resolved_frame-t.resolved_frame:e.resolved_time!==t.resolved_time?e.resolved_time-t.resolved_time:e.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:Yi(e.player).localeCompare(Yi(t.player)))}function um(){return{count:0,highConfidenceCount:0,lastTime:null,lastFrame:null,lastResolvedTime:null,lastResolvedFrame:null,lastQuality:null,bestQuality:0,cumulativeQuality:0,labeledCounts:{entries:[]}}}function vo(n){return Math.fround(n)}function hz(n,e){return vo(vo(n)+vo(e))}function fz(n,e){return{key:"confidence_band",value:n>=e?"high":"standard"}}function pz(n,e){const t=e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key)),i=n.entries.find(s=>s.labels.length===t.length&&s.labels.every((a,r)=>a.key===t[r]?.key&&a.value===t[r]?.value));if(i){i.count+=1;return}n.entries.push({labels:t,count:1}),n.entries.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels)))}function Yo(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function dm(n,e,t,i,s){n.count+=1,e.confidence>=s&&(n.highConfidenceCount+=1),pz(n.labeledCounts,[fz(e.confidence,s)]),n.lastTime=e.time,n.lastFrame=e.frame,n.lastResolvedTime=i,n.lastResolvedFrame=t,n.lastQuality=e.confidence,n.bestQuality=Math.max(n.bestQuality,e.confidence),n.cumulativeQuality=hz(n.cumulativeQuality,e.confidence)}function ry(n,e){return n?.lastTime==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,vo(vo(e.time)-vo(n.lastTime)))}function oy(n,e){return n?.lastFrame==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,e.frame_number-n.lastFrame)}function iE(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_speed_flip=i,n.last_speed_flip_time=e?.lastTime??null,n.last_speed_flip_frame=e?.lastFrame??null,n.time_since_last_speed_flip=ry(e,t),n.frames_since_last_speed_flip=oy(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Yo(e.labeledCounts):delete n.labeled_event_counts}function sE(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_half_flip=i,n.last_half_flip_time=e?.lastTime??null,n.last_half_flip_frame=e?.lastFrame??null,n.time_since_last_half_flip=ry(e,t),n.frames_since_last_half_flip=oy(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Yo(e.labeledCounts):delete n.labeled_event_counts}function aE(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_wavedash=i,n.last_wavedash_time=e?.lastTime??null,n.last_wavedash_frame=e?.lastFrame??null,n.time_since_last_wavedash=ry(e,t),n.frames_since_last_wavedash=oy(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Yo(e.labeledCounts):delete n.labeled_event_counts}function mz(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Yo(n.labeled_event_counts):delete e.labeled_event_counts,e}function _z(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Yo(n.labeled_event_counts):delete e.labeled_event_counts,e}function gz(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Yo(n.labeled_event_counts):delete e.labeled_event_counts,e}function yz(n,e){if(e){Object.assign(n,e);return}iE(n,void 0,{frame_number:0,time:0},!1)}function vz(n,e){if(e){Object.assign(n,e);return}sE(n,void 0,{frame_number:0,time:0},!1)}function bz(n,e){if(e){Object.assign(n,e);return}aE(n,void 0,{frame_number:0,time:0},!1)}function xz(n){return n.is_live_play||n.ball_has_been_hit===!1}function wz(n){const e=rE(n);for(const t of n.frames)e.applyFrame(t);return n}function rE(n){const e=dz(be(n,"speed_flip")),t=Kb(be(n,"half_flip")),i=Kb(be(n,"wavedash"));let s=0,a=0,r=0,o=null,l=null,c=null;const u=new Map,d=new Map,h=new Map,f=new Map,p=new Map,g=new Map;return{applyFrame(_){if(xz(_)){for(;sSz.map(e=>({labels:[{key:"height_band",value:n},{key:"speed_band",value:e}],value:0}))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function md(n=!1){return{tracked_time:0,total_distance:0,speed_integral:0,time_slow_speed:0,time_boost_speed:0,time_supersonic_speed:0,time_on_ground:0,time_low_air:0,time_high_air:0,labeled_tracked_time:n?Ez():{entries:[]}}}function Cz(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Az(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function Rz(n,e,t){const i=Az(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=us(s.value,t):(n.entries.push({labels:i,value:pa(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function Pz(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),value:e.value}))}}function Yb(n,e){const t=pa(e.dt);n.tracked_time=us(n.tracked_time,t),n.total_distance=us(n.total_distance,e.distance),n.speed_integral=us(n.speed_integral,Mz(e.speed,t)),e.speed_band==="slow"?n.time_slow_speed=us(n.time_slow_speed,t):e.speed_band==="boost"?n.time_boost_speed=us(n.time_boost_speed,t):e.speed_band==="supersonic"&&(n.time_supersonic_speed=us(n.time_supersonic_speed,t)),e.height_band==="ground"?n.time_on_ground=us(n.time_on_ground,t):e.height_band==="low_air"?n.time_low_air=us(n.time_low_air,t):e.height_band==="high_air"&&(n.time_high_air=us(n.time_high_air,t));const i=n.labeled_tracked_time??{entries:[]};n.labeled_tracked_time=i,Rz(i,[{key:"speed_band",value:e.speed_band},{key:"height_band",value:e.height_band}],t)}function hm(n,e){const t=e??md(!0),i=t.labeled_tracked_time;Object.assign(n,t,{labeled_tracked_time:i?Pz(i):void 0}),i?.entries.length||delete n.labeled_tracked_time}function Iz(n){const e=oE(n);for(const t of n.frames)e.applyFrame(t);return n}function oE(n){const e=Cz(be(n,"movement"));let t=0;const i=new Map,s=md(),a=md();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function kz(n,e,t,i){n.is_last_one_timer=i,n.time_since_last_one_timer=n.last_one_timer_time==null?null:Math.max(0,t-n.last_one_timer_time),n.frames_since_last_one_timer=n.last_one_timer_frame==null?null:Math.max(0,e-n.last_one_timer_frame)}function Dz(n,e,t,i){n.count+=1,n.total_ball_speed+=e.ball_speed,n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.total_pass_distance+=e.pass_travel_distance,n.last_one_timer_time=e.time,n.last_one_timer_frame=e.frame,n.time_since_last_one_timer=Math.max(0,i-e.time),n.frames_since_last_one_timer=Math.max(0,t-e.frame)}function Oz(n,e){Object.assign(n,e??lE())}function Zb(n,e){Object.assign(n,e)}function Fz(n){const e=cE(n);for(const t of n.frames)e.applyFrame(t);return n}function cE(n){const e=Lz(be(n,"one_timer"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)kz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.index-t.index}).map(({event:e})=>e)}function Uz(n,e,t,i){n.is_last_completed_pass=i,n.time_since_last_completed_pass=n.last_completed_pass_time==null?null:Math.max(0,t-n.last_completed_pass_time),n.frames_since_last_completed_pass=n.last_completed_pass_frame==null?null:Math.max(0,e-n.last_completed_pass_frame)}function Bz(n,e,t,i){n.completed_pass_count+=1,n.total_pass_distance+=e.ball_travel_distance,n.total_pass_advance+=e.ball_advance_distance,n.longest_pass_distance=Math.max(n.longest_pass_distance,e.ball_travel_distance),n.last_completed_pass_time=e.time,n.last_completed_pass_frame=e.frame,n.time_since_last_completed_pass=Math.max(0,i-e.time),n.frames_since_last_completed_pass=Math.max(0,t-e.frame)}function zz(n,e){Object.assign(n,e??E_())}function Jb(n,e){Object.assign(n,e)}function Hz(n){const e=uE(n);for(const t of n.frames)e.applyFrame(t);return n}function uE(n){const e=Nz(be(n,"pass"));let t=0,i=null;const s=new Map,a={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0},r={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0};return{applyFrame(o){for(const[l,c]of s)Uz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function $z(n){return C_(n)}function Wz(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function dE(n,e,t){const i=Wz(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=Ll(s.value,t):(n.entries.push({labels:i,value:Yl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function Xz(n,e){return n.key==="possession_state"&&n.value==="team_zero"?{key:"possession_state",value:e?"own":"opponent"}:n.key==="possession_state"&&n.value==="team_one"?{key:"possession_state",value:e?"opponent":"own"}:n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function Qb(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)dE(t,i.labels.map(s=>Xz(s,e)),i.value);return{tracked_time:n.tracked_time,possession_time:e?n.team_zero_time:n.team_one_time,opponent_possession_time:e?n.team_one_time:n.team_zero_time,neutral_time:n.neutral_time,labeled_time:t}}function Kz(n,e){n.active=e.active,n.possessionState=e.possession_state}function qz(n,e,t){if(!e.active)return;const i=Yl(t.dt);n.tracked_time=Ll(n.tracked_time,i),e.possessionState==="team_zero"?n.team_zero_time=Ll(n.team_zero_time,i):e.possessionState==="team_one"?n.team_one_time=Ll(n.team_one_time,i):n.neutral_time=Ll(n.neutral_time,i);const s=[{key:"possession_state",value:e.possessionState}];e.fieldThird!=null&&s.push({key:"field_third",value:e.fieldThird}),e.fieldHalf!=null&&s.push({key:"field_half",value:e.fieldHalf}),dE(n.labeled_time,s,i)}function ex(n,e){Object.assign(n,e??Gz())}function Yz(n){const e=hE(n);for(const t of n.frames)e.applyFrame(t);return n}function hE(n){const e=$z(be(n,"possession")),t=C_(be(n,"ball_third")),i=C_(be(n,"ball_half"));let s=0,a=0,r=0;const o=Vz(),l={active:!1,possessionState:"neutral",fieldThird:null,fieldHalf:null};return{applyFrame(c){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Va(n,e){const t=wh(e.player),i=n.get(t)??fE();return n.set(t,i),i}function Zz(n,e){switch(n.active_game_time=Kt(n.active_game_time,e.duration),e.state){case"tracked":n.tracked_time=Kt(n.tracked_time,e.duration);break;case"demolished":n.time_demolished=Kt(n.time_demolished,e.duration);break}}function Jz(n,e){switch(e.state){case"defensive":n.time_defensive_third=Kt(n.time_defensive_third,e.duration);break;case"neutral":n.time_neutral_third=Kt(n.time_neutral_third,e.duration);break;case"offensive":n.time_offensive_third=Kt(n.time_offensive_third,e.duration);break}}function Qz(n,e){switch(e.state){case"defensive":n.time_defensive_half=Kt(n.time_defensive_half,e.duration);break;case"offensive":n.time_offensive_half=Kt(n.time_offensive_half,e.duration);break}}function e5(n,e){switch(e.state){case"behind_ball":n.time_behind_ball=Kt(n.time_behind_ball,e.duration);break;case"level_with_ball":n.time_level_with_ball=Kt(n.time_level_with_ball,e.duration);break;case"ahead_of_ball":n.time_in_front_of_ball=Kt(n.time_in_front_of_ball,e.duration);break}}function t5(n,e){switch(e.state){case"no_teammates":n.time_no_teammates=Kt(n.time_no_teammates,e.duration);break;case"most_back":n.time_most_back=Kt(n.time_most_back,e.duration);break;case"most_forward":n.time_most_forward=Kt(n.time_most_forward,e.duration);break;case"mid":n.time_mid_role=Kt(n.time_mid_role,e.duration);break;case"other":n.time_other_role=Kt(n.time_other_role,e.duration);break}}function n5(n,e,t){t.state.closest_to_ball_team&&(e.tracked_time=Kt(e.tracked_time,t.duration),e.time_closest_to_ball_team=Kt(e.time_closest_to_ball_team,t.duration),n.time_closest_to_ball_team=Kt(n.time_closest_to_ball_team,t.duration)),t.state.closest_to_ball_absolute&&(e.time_closest_to_ball_absolute=Kt(e.time_closest_to_ball_absolute,t.duration),n.time_closest_to_ball_absolute=Kt(n.time_closest_to_ball_absolute,t.duration)),t.state.farthest_from_ball&&(n.time_farthest_from_ball=Kt(n.time_farthest_from_ball,t.duration))}function i5(n,e){e.state==="shadowing"&&(n.time_shadow_defense=Kt(n.time_shadow_defense,e.duration))}function s5(n,e){Object.assign(n,e??fE())}function tx(n,e){Object.assign(n,e??A_())}function Ga(n,e){const t=jz(n),i=new Array(t.length).fill(0);return{applyThroughFrame(s){for(let a=0;as.frame_number)break;const o=a5(r,s),l=o-i[a];l>0&&(i[a]=o,e({...r,duration:l}))}}}}function a5(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function r5(n){const e=pE(n);for(const t of n.frames)e.applyFrame(t);return n}function pE(n){const e=new Map,t=A_(),i=A_(),s=[Ga(be(n,"player_activity"),a=>Zz(Va(e,a),a)),Ga(be(n,"field_third"),a=>Jz(Va(e,a),a)),Ga(be(n,"field_half"),a=>Qz(Va(e,a),a)),Ga(be(n,"ball_depth"),a=>e5(Va(e,a),a)),Ga(be(n,"depth_role"),a=>t5(Va(e,a),a)),Ga(be(n,"ball_proximity"),a=>n5(Va(e,a),a.is_team_0?t:i,a)),Ga(be(n,"shadow_defense"),a=>i5(Va(e,a),a))];return{applyFrame(a){for(const r of s)r.applyThroughFrame(a);tx(a.team_zero.positioning,t),tx(a.team_one.positioning,i);for(const r of a.players)s5(r.positioning,e.get(wh(r.player_id))),o5(r.positioning,n,r.player_id)}}}function o5(n,e,t){const i=e.positioning_summary;if(!Array.isArray(i))return;const s=wh(t),a=i.find(r=>!r||typeof r!="object"?!1:wh(r.player_id)===s);a?.distance&&Object.assign(n,a.distance)}function pm(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function kl(){return{total_duration:0,press_count:0}}function l5(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function c5(n){return n.gameplay_phase==="active_play"||n.gameplay_phase==="kickoff_waiting_for_touch"}function mm(n,e){Object.assign(n,e??kl())}function u5(n){const e=mE(n);for(const t of n.frames)e.applyFrame(t);return n}function mE(n){const e=l5(be(n,"powerslide"));let t=0;const i=new Map,s=new Map,a=kl(),r=kl();return{applyFrame(o){const l=c5(o);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function p5(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function _E(n,e,t){const i=p5(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=Dl(s.value,t):(n.entries.push({labels:i,value:jl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function m5(n,e){return n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function nx(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)_E(t,i.labels.map(s=>m5(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_half_time:e?n.team_zero_side_time:n.team_one_side_time,offensive_half_time:e?n.team_one_side_time:n.team_zero_side_time,neutral_time:n.neutral_time,labeled_time:t}}function _5(n,e){n.active=e.active,n.fieldHalf=e.field_half}function g5(n,e,t){if(!e.active)return;const i=jl(t.dt);n.tracked_time=Dl(n.tracked_time,i),e.fieldHalf==="team_zero_side"?n.team_zero_side_time=Dl(n.team_zero_side_time,i):e.fieldHalf==="team_one_side"?n.team_one_side_time=Dl(n.team_one_side_time,i):n.neutral_time=Dl(n.neutral_time,i),_E(n.labeled_time,[{key:"field_half",value:e.fieldHalf}],i)}function ix(n,e){Object.assign(n,e??h5())}function y5(n){const e=gE(n);for(const t of n.frames)e.applyFrame(t);return n}function gE(n){const e=f5(be(n,"ball_half"));let t=0;const i=d5(),s={active:!1,fieldHalf:"neutral"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function w5(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function yE(n,e,t){const i=w5(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=Ol(s.value,t):(n.entries.push({labels:i,value:Zl(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function S5(n,e){return n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:{...n}}function sx(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)yE(t,i.labels.map(s=>S5(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_third_time:e?n.team_zero_third_time:n.team_one_third_time,neutral_third_time:n.neutral_third_time,offensive_third_time:e?n.team_one_third_time:n.team_zero_third_time,labeled_time:t}}function T5(n,e){n.active=e.active,n.fieldThird=e.field_third}function M5(n,e,t){if(!e.active)return;const i=Zl(t.dt);n.tracked_time=Ol(n.tracked_time,i),e.fieldThird==="team_zero_third"?n.team_zero_third_time=Ol(n.team_zero_third_time,i):e.fieldThird==="team_one_third"?n.team_one_third_time=Ol(n.team_one_third_time,i):n.neutral_third_time=Ol(n.neutral_third_time,i),yE(n.labeled_time,[{key:"field_third",value:e.fieldThird}],i)}function ax(n,e){Object.assign(n,e??b5())}function E5(n){const e=vE(n);for(const t of n.frames)e.applyFrame(t);return n}function vE(n){const e=x5(be(n,"ball_third"));let t=0;const i=v5(),s={active:!1,fieldThird:"neutral_third"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function A5(n,e,t){n.session_count+=1,n.session_time=Yu(n.session_time,t.duration),n.offensive_half_time=Yu(n.offensive_half_time,t.offensive_half_time),n.offensive_third_time=Yu(n.offensive_third_time,t.offensive_third_time),n.longest_session_time=Math.max(n.longest_session_time,t.duration),n.average_session_time=n.session_count===0?0:_d(n.session_time/n.session_count),e.opponent_session_count+=1,e.opponent_session_time=Yu(e.opponent_session_time,t.duration),e.opponent_longest_session_time=Math.max(e.opponent_longest_session_time,t.duration)}function ox(n,e){Object.assign(n,e)}function R5(n){const e=bE(n);for(const t of n.frames)e.applyFrame(t);return n}function bE(n){const e=C5(be(n,"territorial_pressure"));let t=0;const i=rx(),s=rx();return{applyFrame(a){for(;t=e[t].end_frame;){const r=e[t];A5(r.team_is_team_0?i:s,r.team_is_team_0?s:i,r),t+=1}ox(a.team_zero.territorial_pressure,i),ox(a.team_one.territorial_pressure,s)}}}function io(n,e){return Math.fround(Math.fround(n)+Math.fround(e))}function xE(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function wE(){return{active_game_time:0,time_first_man:0,time_second_man:0,time_third_man:0,time_ambiguous_role:0,longest_first_man_stint_time:0,first_man_stint_count:0,became_first_man_count:0,lost_first_man_count:0,current_role_state:"unknown"}}function lx(){return{first_man_changes_for_team:0,rotation_count:0}}function cx(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function P5(n,e,t,i,s){const a=n.stats;switch(a.active_game_time=io(a.active_game_time,t),a.current_role_state=e.state,e.state){case"first_man":{n.lastFirstManEndTime!==null&&e.time-n.lastFirstManEndTime<=s?n.currentFirstManStintTime=io(n.currentFirstManStintTime,t):(n.currentFirstManStintTime=t,a.first_man_stint_count+=1),n.lastFirstManEndTime=i,a.longest_first_man_stint_time=Math.max(a.longest_first_man_stint_time,n.currentFirstManStintTime),a.time_first_man=io(a.time_first_man,t);break}case"second_man":a.time_second_man=io(a.time_second_man,t);break;case"third_man":a.time_third_man=io(a.time_third_man,t);break;case"ambiguous":a.time_ambiguous_role=io(a.time_ambiguous_role,t);break}}function I5(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function R_(n,e){const t=xE(e),i=n.get(t)??{currentFirstManStintTime:0,lastFirstManEndTime:null,stats:wE()};return n.set(t,i),i}function L5(n,e,t){n.first_man_changes_for_team+=1,n.rotation_count+=1,R_(e,t.previous_first_man).stats.lost_first_man_count+=1,R_(e,t.next_first_man).stats.became_first_man_count+=1}function k5(n,e){Object.assign(n,e??wE())}function ux(n,e){Object.assign(n,e)}function D5(n){const e=SE(n);for(const t of n.frames)e.applyFrame(t);return n}function SE(n){const e=cx(be(n,"rotation_role")),t=cx(be(n,"first_man_change")),i=n.config.rotation_first_man_stint_end_grace_seconds,s=new Array(e.length).fill(0);let a=0;const r=new Map,o=lx(),l=lx();return{applyFrame(c){for(let u=0;uc.frame_number)break;const h=I5(d,c),f=h-s[u];if(f>0){s[u]=h;const p=c.frame_number>=d.end_frame?d.end_time:Math.min(c.time,d.end_time);P5(R_(r,d.player),d,f,p,i)}}for(;a({event:e,index:t})).sort((e,t)=>e.event.start_frame!==t.event.start_frame?e.event.start_frame-t.event.start_frame:e.event.start_time!==t.event.start_time?e.event.start_time-t.event.start_time:e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.index-t.index).map(({event:e})=>e)}function F5(n,e){n.count+=1,e.attackers===2&&e.defenders===1?n.two_v_one_count+=1:e.attackers===2&&e.defenders===2?n.two_v_two_count+=1:e.attackers===2&&e.defenders===3?n.two_v_three_count+=1:e.attackers===3&&e.defenders===1?n.three_v_one_count+=1:e.attackers===3&&e.defenders===2?n.three_v_two_count+=1:e.attackers===3&&e.defenders===3&&(n.three_v_three_count+=1)}function hx(n,e){Object.assign(n,e)}function N5(n){const e=TE(n);for(const t of n.frames)e.applyFrame(t);return n}function TE(n){const e=O5(be(n,"rush"));let t=0;const i=dx(),s=dx(),a=n.config.rush_min_possession_retained_seconds;return{applyFrame(r){for(;t=e[t].start_frame&&r.time-e[t].start_time>=a;){const o=e[t];F5(o.is_team_0?i:s,o),t+=1}hx(r.team_zero.rush,i),hx(r.team_one.rush,s)}}}const U5=["control","hard_hit","medium_hit"],B5=["ground","high_air","low_air"],z5=["air","ground","wall"],H5=["dodge","no_dodge"];function bo(n){return Math.fround(n)}function gd(n,e){return bo(bo(n)+bo(e))}function ME(n,e){return bo(bo(n)-bo(e))}function _m(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function V5(){return{entries:H5.flatMap(n=>B5.flatMap(e=>U5.flatMap(t=>z5.map(i=>({labels:[{key:"dodge_state",value:n},{key:"height_band",value:e},{key:"kind",value:t},{key:"surface",value:i}],count:0}))))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function EE(){return{touch_count:0,control_touch_count:0,medium_hit_count:0,hard_hit_count:0,aerial_touch_count:0,high_aerial_touch_count:0,wall_touch_count:0,first_touch_count:0,is_last_touch:!1,last_touch_time:null,last_touch_frame:null,time_since_last_touch:null,frames_since_last_touch:null,last_ball_speed_change:null,max_ball_speed_change:0,cumulative_ball_speed_change:0,total_ball_travel_distance:0,total_ball_advance_distance:0,total_ball_retreat_distance:0,labeled_touch_counts:V5()}}const G5=EE();function fx(){return{stats:EE(),labeledCountsVersion:0,labeledCountsSnapshot:void 0,labeledCountsSnapshotVersion:-1}}function $5(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function W5(n,e){e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key));const t=n.labeled_touch_counts?.entries??[];n.labeled_touch_counts={entries:t};const i=t.find(s=>s.labels.length===e.length&&s.labels.every((a,r)=>a.key===e[r]?.key&&a.value===e[r]?.value));i?i.count+=1:(t.push({labels:e,count:1}),t.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels))))}function X5(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function ju(n,e){return n.tags?.find(t=>t.group===e)?.value??null}function K5(n,e,t){const i=ju(e,"kind")??"control",s=ju(e,"height_band")??"ground",a=ju(e,"surface")??"ground",r=ju(e,"dodge_state")??"no_dodge",o=n.stats;o.touch_count+=1,i==="control"?o.control_touch_count+=1:i==="medium_hit"?o.medium_hit_count+=1:i==="hard_hit"&&(o.hard_hit_count+=1),s==="low_air"?o.aerial_touch_count+=1:s==="high_air"&&(o.aerial_touch_count+=1,o.high_aerial_touch_count+=1),a==="wall"&&(o.wall_touch_count+=1),W5(o,[{key:"kind",value:i},{key:"height_band",value:s},{key:"surface",value:a},{key:"dodge_state",value:r}]),n.labeledCountsVersion+=1,o.last_touch_time=e.time,o.last_touch_frame=e.frame,o.time_since_last_touch=Math.max(0,ME(t.time,e.time)),o.frames_since_last_touch=Math.max(0,t.frame_number-e.frame),o.last_ball_speed_change=e.ball_speed_change,o.max_ball_speed_change=Math.max(o.max_ball_speed_change,e.ball_speed_change),o.cumulative_ball_speed_change=gd(o.cumulative_ball_speed_change,e.ball_speed_change)}function q5(n){return n.labeledCountsSnapshotVersion!==n.labeledCountsVersion&&(n.labeledCountsSnapshot=n.stats.labeled_touch_counts?X5(n.stats.labeled_touch_counts):void 0,n.labeledCountsSnapshotVersion=n.labeledCountsVersion),n.labeledCountsSnapshot}function Y5(n,e){if(!e){Object.assign(n,G5);return}Object.assign(n,e.stats,{labeled_touch_counts:q5(e)})}function j5(n){const e=CE(n);for(const t of n.frames)e.applyFrame(t);return n}function CE(n){const e=$5(be(n,"touch")),t=e.flatMap(o=>o.ball_movement?[{player:o.player,movement:o.ball_movement}]:[]).sort((o,l)=>o.movement.end_frame!==l.movement.end_frame?o.movement.end_frame-l.movement.end_frame:o.movement.end_time-l.movement.end_time);let i=0,s=0,a=null;const r=new Map;return{applyFrame(o){if(!o.is_live_play)a=null;else{for(const l of r.values()){const c=l.stats;c.is_last_touch=!1,c.last_touch_time!=null&&(c.time_since_last_touch=Math.max(0,ME(o.time,c.last_touch_time))),c.last_touch_frame!=null&&(c.frames_since_last_touch=Math.max(0,o.frame_number-c.last_touch_frame))}for(;i({event:e,index:t})).sort((e,t)=>e.event.resolved_frame!==t.event.resolved_frame?e.event.resolved_frame-t.event.resolved_frame:e.event.resolved_time!==t.event.resolved_time?e.event.resolved_time-t.event.resolved_time:e.index-t.index).map(({event:e})=>e)}function Q5(n,e,t){n.is_last_whiff=!1,n.time_since_last_whiff=n.last_whiff_time==null?null:Math.max(0,t-n.last_whiff_time),n.frames_since_last_whiff=n.last_whiff_frame==null?null:Math.max(0,e-n.last_whiff_frame)}function eH(n,e,t,i){if((e.kind??"whiff")==="beaten_to_ball"){n.beaten_to_ball_count+=1;return}n.whiff_count+=1,e.aerial?n.aerial_whiff_count+=1:n.grounded_whiff_count+=1,e.dodge_active&&(n.dodge_whiff_count+=1),n.is_last_whiff=!0,n.last_whiff_time=e.time,n.last_whiff_frame=e.frame,n.time_since_last_whiff=Math.max(0,i-e.time),n.frames_since_last_whiff=Math.max(0,t-e.frame),n.last_closest_approach_distance=e.closest_approach_distance,n.best_closest_approach_distance=n.best_closest_approach_distance==null?e.closest_approach_distance:Math.min(n.best_closest_approach_distance,e.closest_approach_distance),n.cumulative_closest_approach_distance+=e.closest_approach_distance}function px(n,e){Object.assign(n,e??P_())}function tH(n){const e=AE(n);for(const t of n.frames)e.applyFrame(t);return n}function AE(n){const e=J5(be(n,"whiff"));let t=0,i=null;const s=new Map,a=new Map;return{applyFrame(r){if(r.is_live_play){for(const o of s.values())Q5(o,r.frame_number,r.time);for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function sH(n,e,t,i){n.is_last_wall_aerial=i,n.time_since_last_wall_aerial=n.last_wall_aerial_time==null?null:Math.max(0,RE(t,n.last_wall_aerial_time)),n.frames_since_last_wall_aerial=n.last_wall_aerial_frame==null?null:Math.max(0,e-n.last_wall_aerial_frame)}function aH(n,e,t,i){n.count+=1,e.confidence>=nH&&(n.high_confidence_count+=1),n.is_last_wall_aerial=!0,n.last_wall_aerial_time=e.time,n.last_wall_aerial_frame=e.frame,n.time_since_last_wall_aerial=Math.max(0,RE(i,e.time)),n.frames_since_last_wall_aerial=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Zu(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=Zu(n.cumulative_setup_duration,e.setup_duration),n.cumulative_takeoff_to_touch_time=Zu(n.cumulative_takeoff_to_touch_time,e.time_since_takeoff),n.cumulative_touch_height=Zu(n.cumulative_touch_height,e.player_position[2]??0)}function rH(n,e){Object.assign(n,e??PE())}function oH(n){const e=IE(n);for(const t of n.frames)e.applyFrame(t);return n}function IE(n){const e=iH(be(n,"wall_aerial"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)sH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function uH(n,e,t,i){n.is_last_wall_aerial_shot=i,n.time_since_last_wall_aerial_shot=n.last_wall_aerial_shot_time==null?null:Math.max(0,LE(t,n.last_wall_aerial_shot_time)),n.frames_since_last_wall_aerial_shot=n.last_wall_aerial_shot_frame==null?null:Math.max(0,e-n.last_wall_aerial_shot_frame)}function dH(n,e,t,i){n.count+=1,e.confidence>=lH&&(n.high_confidence_count+=1),n.is_last_wall_aerial_shot=!0,n.last_wall_aerial_shot_time=e.time,n.last_wall_aerial_shot_frame=e.frame,n.time_since_last_wall_aerial_shot=Math.max(0,LE(i,e.time)),n.frames_since_last_wall_aerial_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=ym(n.cumulative_confidence,e.confidence),n.cumulative_takeoff_to_shot_time=ym(n.cumulative_takeoff_to_shot_time,e.time_since_takeoff),n.cumulative_shot_height=ym(n.cumulative_shot_height,e.player_position[2]??0)}function hH(n,e){Object.assign(n,e??kE())}function fH(n){const e=DE(n);for(const t of n.frames)e.applyFrame(t);return n}function DE(n){const e=cH(be(n,"wall_aerial_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)uH(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{let r=!1;for(;t[f.frame_number,p])),a=new Map,r={...n,frames:[]},o=gH.flatMap(f=>f.createFrameAccumulator?[f.createFrameAccumulator(r)]:[]),l=Math.max(1,t.materializationChunkSize??pH),c=Math.max(l,t.maxMaterializationChunkSize??mH);let u=-1,d=l;const h=f=>{if(f<=u)return;const p=Math.min(i.length-1,Math.max(f,u+d));for(let g=u+1;g<=p;g+=1){const _=i[g],m=_?xH(bH(_)):void 0;if(m){for(const v of o)v.applyFrame(m);a.set(m.frame_number,m)}}u=p,d=Math.min(c,i.length,d*_H)};return{get(f){const p=s.get(f);if(p!==void 0)return h(p),a.get(f)}}}function vH(n){return!n||typeof n!="object"?n:{...n}}function bH(n){return{...n,team_zero:{...n.team_zero},team_one:{...n.team_one},players:n.players.map(e=>({...e,player_id:vH(e.player_id)}))}}function xH(n){return{...n,team_zero:Bo(n.team_zero??{}),team_one:Bo(n.team_one??{}),players:n.players.map(t=>cy(t))}}function pc(n){return n.events?.events??[]}function be(n,e){return pc(n).filter(t=>t.payload.kind===e).map(t=>t.payload.payload)}const wH=new Set(["is_team_0","name","player_id"]);function gx(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0}function SH(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.keys(n).every(e=>wH.has(e))}function TH(n){return gx(n.team_zero)&&gx(n.team_one)&&n.players.every(e=>SH(e))}function MH(n){return new Map(bM(n).frames.map(e=>[e.frame_number,e]))}function OE(n,e,t){const i=n.frames.filter(s=>TH(s)).length;if(i===n.frames.length)return yH(n,e,t);if(i>0)throw new Error("stats timeline frames must be either all compact scaffolds or all materialized snapshots");return MH(n)}function Ht(n,e){return n.get(e)??null}const uy=[{stage:"validating",index:1,total:9,label:"Parse replay",start:0,end:.08},{stage:"processing",index:2,total:9,label:"Process replay frames",start:.08,end:.62},{stage:"building-stats",index:3,total:9,label:"Build stats events",start:.62,end:.7},{stage:"serializing-replay",index:4,total:9,label:"Serialize replay data",start:.7,end:.76},{stage:"serializing-stats",index:5,total:9,label:"Serialize stats timeline",start:.76,end:.86},{stage:"normalizing",index:6,total:9,label:"Normalize replay model",start:.86,end:.91},{stage:"decoding-replay",index:7,total:9,label:"Decode replay data",start:.91,end:.94},{stage:"decoding-stats",index:8,total:9,label:"Decode stats chunks",start:.94,end:.96},{stage:"deriving-stats",index:9,total:9,label:"Derive stats snapshots",start:.96,end:1}];function FE(n){return Math.max(0,Math.min(1,n))}function vm(n,e,t){if(n!==void 0)return FE((n-e)/(t-e))}function dy(n){if(n.stage!=="stats-timeline")return n;const e=n.progress;return e===void 0?{...n,stage:"building-stats"}:e<.35?{...n,stage:"building-stats",progress:vm(e,0,.35)}:e<.55?{...n,stage:"serializing-replay",progress:vm(e,.35,.55)}:{...n,stage:"serializing-stats",progress:vm(e,.55,.92)}}function NE(n){const e=dy(n);return uy.find(t=>t.stage===e.stage)}function EH(){return uy.map(({stage:n,index:e,total:t,label:i})=>({stage:n,index:e,total:t,label:i}))}function CH(n){const e=NE(n);return{stage:e.stage,index:e.index,total:e.total,label:e.label}}function AH(n){const e=dy(n),t=NE(e);return uy.map(({stage:i,index:s,total:a,label:r})=>{if(st.index)return{stage:i,index:s,total:a,label:r,state:"pending",completion:0,indeterminate:!1};const o=e.progress!==void 0;return{stage:i,index:s,total:a,label:r,state:"active",completion:o?FE(e.progress??0):1,indeterminate:!o}})}function jo(n){const e=dy(n),t=e.progress===void 0?null:Math.round(e.progress*100);switch(e.stage){case"validating":return"Parsing replay...";case"processing":return t!==null&&e.totalFrames!==void 0?`Processing replay frames... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:"Processing replay frames...";case"building-stats":return t!==null?e.totalFrames!==void 0?`Building stats events... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:`Building stats events... ${t}%`:"Building stats events...";case"serializing-replay":return t!==null?`Serializing replay data... ${t}%`:"Serializing replay data...";case"serializing-stats":return t!==null?`Serializing stats timeline... ${t}%`:"Serializing stats timeline...";case"decoding-replay":return t!==null?`Decoding replay data... ${t}%`:"Decoding replay data...";case"decoding-stats":return t!==null?e.totalChunks!==void 0?`Decoding stats chunks... ${t}% (${e.processedChunks??0}/${e.totalChunks})`:`Decoding stats chunks... ${t}%`:"Decoding stats chunks...";case"deriving-stats":return t!==null?`Deriving stats snapshots... ${t}%`:"Deriving stats snapshots...";case"normalizing":return t!==null?`Normalizing replay model... ${t}%`:"Normalizing replay model...";default:return"Loading replay..."}}function RH(n){return n instanceof Error?n:new Error(String(n))}function Fs(n,e){return JSON.parse(n.decode(new Uint8Array(e)))}async function PH(n,e,t){t?.({stage:"decoding-stats",progress:0});const i=Fs(n,e.configBuffer);t?.({stage:"decoding-stats",progress:.05}),await ar();const s=Fs(n,e.replayMetaBuffer);t?.({stage:"decoding-stats",progress:.1}),await ar();const a=Fs(n,e.eventsBuffer),r=Fs(n,e.activitySummaryBuffer),o=Fs(n,e.positioningSummaryBuffer),l=Fs(n,e.accumulationTracksBuffer);t?.({stage:"decoding-stats",progress:.15}),await ar();const c=[],u=e.frameChunkBuffers.length;for(let d=0;d{let t=!1,i=null;const s=()=>{t||(t=!0,i!==null&&clearTimeout(i),e())};i=setTimeout(s,n),requestAnimationFrame(()=>s())})}async function Cf(n,e={}){if(typeof Worker>"u")throw new Error("Replay loading worker is not available in this environment");const t=new Worker(new URL(""+new URL("replayLoader.worker-D3pjMe81.js",import.meta.url).href,import.meta.url),{type:"module"}),i=n.slice(),s=e.reportEveryNFrames??100;return new Promise((a,r)=>{const o=()=>{t.terminate()};t.onmessage=async c=>{const u=c.data;if(u.type==="progress"){e.onProgress?.(u.progress);return}if(u.type==="error"){o(),r(new Error(u.error));return}o();try{const d=new TextDecoder;e.onProgress?.({stage:"decoding-replay",progress:0}),await ar();const h=Fs(d,u.replayBuffer);e.onProgress?.({stage:"decoding-replay",progress:.5}),await ar();const f=Fs(d,u.rawReplayBuffer);e.onProgress?.({stage:"decoding-replay",progress:1}),await ar();const p=await PH(d,u.statsTimelineParts,e.onProgress),g=OE(p);a({replay:h,raw:f,statsTimeline:p,statsFrameLookup:g})}catch(d){r(RH(d))}},t.onerror=c=>{o(),r(new Error(c.message||"Replay loading worker failed"))};const l={type:"load-replay",bytes:i.buffer,reportEveryNFrames:s};t.postMessage(l,[i.buffer])})}function IH(n){const e=document.createElement("div");e.className="replay-load-modal",e.hidden=!0;const t=document.createElement("div");t.className="replay-load-modal__dialog",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","replay-load-modal-title");const i=document.createElement("p");i.className="replay-load-modal__eyebrow",i.textContent="Replay loading";const s=document.createElement("h2");s.id="replay-load-modal-title",s.className="replay-load-modal__title",s.textContent="Preparing replay pipeline";const a=document.createElement("p");a.className="replay-load-modal__status",a.textContent="Preparing replay...";const r=document.createElement("div");r.className="replay-load-modal__phase-list";const o=new Map;for(const f of EH()){const p=document.createElement("div");p.className="replay-load-modal__phase-row",p.dataset.state="pending";const g=document.createElement("p");g.className="replay-load-modal__phase-label",g.textContent=`${f.index}. ${f.label}`;const _=document.createElement("div");_.className="replay-load-modal__phase-bar";const m=document.createElement("div");m.className="replay-load-modal__phase-fill",m.dataset.indeterminate="false",_.append(m),p.append(g,_),r.append(p),o.set(f.stage,{row:p,fill:m})}const l=document.createElement("p");l.className="replay-load-modal__meta",t.append(i,s,a,r,l),e.append(t),n.append(e);let c="";const u=()=>{for(const{row:f,fill:p}of o.values())f.dataset.state="pending",p.style.width="0%",p.dataset.indeterminate="false"},d=f=>{for(const p of AH(f)){const g=o.get(p.stage);g&&(g.row.dataset.state=p.state,g.fill.dataset.indeterminate=p.indeterminate?"true":"false",g.fill.style.width=`${Math.round(p.completion*100)}%`)}},h=f=>{e.hidden=!f};return{show(f,p="Preparing replay..."){c=f,h(!0),u(),s.textContent="Preparing replay pipeline",a.textContent=p,l.textContent=`Loading ${f}`},update(f){h(!0);const p=CH(f);if(d(f),s.textContent=`Phase ${p.index} of ${p.total}: ${p.label}`,a.textContent=jo(f),f.stage==="processing"&&f.totalFrames!==void 0){l.textContent=`${f.processedFrames??0}/${f.totalFrames} frames`;return}if(f.stage==="decoding-stats"&&f.totalChunks!==void 0){l.textContent=`${f.processedChunks??0}/${f.totalChunks} chunks`;return}l.textContent=c?`Loading ${c}`:""},hide(){h(!1)},destroy(){e.remove()}}}const LH=["free","follow"];function UE(n){return n.useReplayBallCam??!1?"player":n.ballCamEnabled?"on":"off"}function yx(n){return n.useReplayBallCam?"player":n.ballCam===!0?"on":n.ballCam===!1?"off":"player"}const BE={fov:110,height:100,pitch:-4,distance:270,stiffness:0,swivelSpeed:1,transitionSpeed:1};class hy{constructor(e){this.options=e}lastFreeCameraPreset=null;get freeCameraPreset(){return this.lastFreeCameraPreset}set freeCameraPreset(e){this.lastFreeCameraPreset=e}ballCamModeValue="player";get ballCamMode(){return this.ballCamModeValue}autoPossessionEnabledValue=!1;get autoPossessionEnabled(){return this.autoPossessionEnabledValue}static ballCamEnabledForMode(e){return e==="player"?null:e==="on"}followPlayerWithReplayCamera(e,t={}){const i=this.options.getReplayPlayer();i&&(t.preserveAutoPossession||this.setAutoPossessionEnabled(!1,{requestConfigSync:!1}),i.setAttachedPlayer(e),i.setCameraViewMode("follow"),t.usePlayerCameraSettings!==!1&&i.setCustomCameraSettings(null),this.setBallCamMode(t.ballCam??"player"),this.lastFreeCameraPreset=null,t.requestConfigSync!==!1&&this.options.requestConfigSync())}setAutoPossessionEnabled(e,t={}){if(this.autoPossessionEnabledValue===e){this.renderAutoPossessionButton();return}this.autoPossessionEnabledValue=e,this.renderAutoPossessionButton(),t.notify!==!1&&this.options.onAutoPossessionChange?.(e),t.requestConfigSync!==!1&&this.options.requestConfigSync()}renderBallCamButtons(){const{ballCamOffButton:e,ballCamOnButton:t,ballCamPlayerButton:i}=this.options.elements,s=[["off",e],["on",t],["player",i]];for(const[a,r]of s){const o=a===this.ballCamModeValue;r.dataset.active=o?"true":"false",r.setAttribute("aria-pressed",o?"true":"false")}}renderAutoPossessionButton(){this.options.elements.cameraViewAutoPossession.checked=this.autoPossessionEnabledValue}disableAutoPossessionForManualCameraControl(){this.setAutoPossessionEnabled(!1,{requestConfigSync:!1})}setBallCamMode(e){this.ballCamModeValue=e,this.options.getReplayPlayer()?.setBallCamEnabled(hy.ballCamEnabledForMode(e)),this.renderBallCamButtons()}get nameplateLiftUu(){const e=Number(this.options.elements.nameplateLift.value);return Number.isFinite(e)?e:u_}applyNameplateLiftUu(e){const{nameplateLift:t,nameplateLiftReadout:i}=this.options.elements,s=e??u_;t.value=`${s}`,i.textContent=Jn(s,"",0)}installEventListeners(e){const{elements:t}=this.options;t.usePlayerCameraSettings.addEventListener("change",()=>{const s=t.usePlayerCameraSettings.checked;t.cameraSettingsControls.hidden=s,this.options.getReplayPlayer()?.setCustomCameraSettings(s?null:this.readCustomCameraSettings()),this.options.requestConfigSync()},{signal:e});for(const s of[t.customCameraFov,t.customCameraHeight,t.customCameraPitch,t.customCameraDistance,t.customCameraStiffness,t.customCameraSwivelSpeed,t.customCameraTransitionSpeed])s.addEventListener("input",()=>{const a=this.readCustomCameraSettings();this.syncCustomCameraSettingControls(a),this.options.getReplayPlayer()?.setCustomCameraSettings(a),this.options.requestConfigSync()},{signal:e});t.attachedPlayer.addEventListener("change",()=>{const s=this.options.getReplayPlayer(),a=t.attachedPlayer.value||null;this.disableAutoPossessionForManualCameraControl(),s?.setAttachedPlayer(a),a&&(s?.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFreeButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setCameraViewMode("free"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFollowButton.addEventListener("click",()=>{const s=this.options.getReplayPlayer();this.disableAutoPossessionForManualCameraControl(),s?.setCameraViewMode("follow"),s?.getState().attachedPlayerId&&(s.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewOverheadButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("overhead"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="overhead",this.options.requestConfigSync()},{signal:e}),t.cameraViewSideButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("side"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="side",this.options.requestConfigSync()},{signal:e});const i=[["off",t.ballCamOffButton],["on",t.ballCamOnButton],["player",t.ballCamPlayerButton]];for(const[s,a]of i)a.addEventListener("click",()=>{this.setBallCamMode(s),this.options.requestConfigSync()},{signal:e});t.cameraViewAutoPossession.addEventListener("change",()=>{this.setAutoPossessionEnabled(t.cameraViewAutoPossession.checked)},{signal:e}),t.nameplateLift.addEventListener("input",()=>{t.nameplateLiftReadout.textContent=Jn(this.nameplateLiftUu,"",0),this.options.requestConfigSync()},{signal:e})}setTransportEnabled(e,t){this.options.elements.attachedPlayer.disabled=!e,this.syncModeButtons(e?t:void 0)}syncState(e){const{elements:t}=this.options;t.usePlayerCameraSettings.checked=e.customCameraSettings===null,t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,this.syncCustomCameraSettingControls(e.customCameraSettings??this.getFallbackCameraSettings()),this.ballCamModeValue=UE(e),this.renderBallCamButtons(),t.attachedPlayer.value=e.attachedPlayerId??"",this.syncAvailability(e),this.renderProfile(e)}syncAvailability(e){this.syncModeButtons(e);const i=this.options.getReplayPlayer()!==null&&e?.cameraViewMode==="follow"&&(e.attachedPlayerId??null)!==null;this.options.elements.usePlayerCameraSettings.disabled=!i,this.setCameraSettingControlsEnabled(i&&e?.customCameraSettings!==null),this.options.elements.ballCamOffButton.disabled=!i,this.options.elements.ballCamOnButton.disabled=!i,this.options.elements.ballCamPlayerButton.disabled=!i,this.renderBallCamButtons()}syncModeButtons(e){const t=e?.cameraViewMode??"free",i=this.options.getReplayPlayer()!==null&&e!==void 0,s=(e?.attachedPlayerId??null)!==null;for(const l of LH){const c=this.getCameraViewButton(l);c.disabled=!i||l==="follow"&&!s;const u=l===t;c.dataset.active=u?"true":"false",c.setAttribute("aria-pressed",u?"true":"false")}const{cameraViewOverheadButton:a,cameraViewSideButton:r}=this.options.elements,{cameraViewAutoPossession:o}=this.options.elements;a.disabled=!i,r.disabled=!i,o.disabled=!i,a.dataset.active="false",r.dataset.active="false",this.renderAutoPossessionButton(),a.setAttribute("aria-pressed","false"),r.setAttribute("aria-pressed","false")}populateAttachedPlayerOptions(e){const{attachedPlayer:t}=this.options.elements;t.replaceChildren(),t.append(new Option("Free camera",""));for(const i of e)t.append(new Option(`${i.name} (${i.isTeamZero?"Blue":"Orange"})`,i.id))}renderProfile(e){const t=this.options.elements,i=this.options.getReplayPlayer(),s=e?.attachedPlayerId??null;if(!i||e?.cameraViewMode!=="follow"||s===null){this.renderEmptyProfile("Free camera");return}const a=i.replay.players.find(o=>o.id===s);if(!a){this.renderEmptyProfile("Unknown");return}const r=this.getEffectiveCameraSettings(e);t.cameraProfileReadout.textContent=e.customCameraSettings===null?a.name:`${a.name} custom`,t.cameraFovReadout.textContent=Jn(r.fov,"",0),t.cameraHeightReadout.textContent=Jn(r.height,"",0),t.cameraPitchReadout.textContent=Jn(r.pitch,"",0),t.cameraBaseDistanceReadout.textContent=Jn(r.distance,"",0),t.cameraStiffnessReadout.textContent=Jn(r.stiffness,"",2)}getFallbackCameraSettings(){return BE}getAttachedPlayerCameraSettings(e){const t=this.options.getReplayPlayer();return!t||e===null?null:t.replay.players.find(i=>i.id===e)?.cameraSettings??null}getEffectiveCameraSettings(e){return{...this.getFallbackCameraSettings(),...this.getAttachedPlayerCameraSettings(e.attachedPlayerId)??{},...e.customCameraSettings??{}}}readCustomCameraSettings(){const e=this.options.elements;return{fov:Number(e.customCameraFov.value),height:Number(e.customCameraHeight.value),pitch:Number(e.customCameraPitch.value),distance:Number(e.customCameraDistance.value),stiffness:Number(e.customCameraStiffness.value),swivelSpeed:Number(e.customCameraSwivelSpeed.value),transitionSpeed:Number(e.customCameraTransitionSpeed.value)}}setCameraSettingControlsEnabled(e){const t=this.options.elements;t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,t.customCameraFov.disabled=!e,t.customCameraHeight.disabled=!e,t.customCameraPitch.disabled=!e,t.customCameraDistance.disabled=!e,t.customCameraStiffness.disabled=!e,t.customCameraSwivelSpeed.disabled=!e,t.customCameraTransitionSpeed.disabled=!e}syncCustomCameraSettingControls(e){const t=this.options.elements,i=this.getFallbackCameraSettings(),s=e.fov??i.fov,a=e.height??i.height,r=e.pitch??i.pitch,o=e.distance??i.distance,l=e.stiffness??i.stiffness,c=e.swivelSpeed??i.swivelSpeed,u=e.transitionSpeed??i.transitionSpeed;t.customCameraFov.value=`${s}`,t.customCameraHeight.value=`${a}`,t.customCameraPitch.value=`${r}`,t.customCameraDistance.value=`${o}`,t.customCameraStiffness.value=`${l}`,t.customCameraSwivelSpeed.value=`${c}`,t.customCameraTransitionSpeed.value=`${u}`,t.customCameraFovReadout.textContent=Jn(s,"",0),t.customCameraHeightReadout.textContent=Jn(a,"",0),t.customCameraPitchReadout.textContent=Jn(r,"",0),t.customCameraDistanceReadout.textContent=Jn(o,"",0),t.customCameraStiffnessReadout.textContent=Jn(l,"",2),t.customCameraSwivelSpeedReadout.textContent=Jn(c,"",1),t.customCameraTransitionSpeedReadout.textContent=Jn(u,"",2)}getCameraViewButton(e){switch(e){case"free":return this.options.elements.cameraViewFreeButton;case"follow":return this.options.elements.cameraViewFollowButton}}renderEmptyProfile(e){const t=this.options.elements;t.cameraProfileReadout.textContent=e,t.cameraFovReadout.textContent="--",t.cameraHeightReadout.textContent="--",t.cameraPitchReadout.textContent="--",t.cameraBaseDistanceReadout.textContent="--",t.cameraStiffnessReadout.textContent="--"}}function Jn(n,e="",t=0){return n===void 0||Number.isNaN(n)?"--":`${n.toFixed(t)}${e}`}function kH(n){return new hy(n)}const vx="subtr-actor-touch-overlay-styles",fy=5882879,py=16761180,bx=120,xx=4,DH=196,bm=24,wx=210,Sx=5,OH=.1,FH=48,NH=["team","intention","kind","height_band","surface","dodge_state","flag"],UH=[{label:"Blue team",color:fy},{label:"Orange team",color:py}],zE=[{label:"Shot",color:16711880},{label:"Save",color:58998},{label:"Clear",color:16764928},{label:"Boom",color:16020150},{label:"Pass",color:47103},{label:"Control",color:0},{label:"Advance",color:16486972}],yd=[{label:"Control",color:0},{label:"Medium hit",color:16436245},{label:"Hard hit",color:16735596}],vd=[{label:"Ground",color:10741301},{label:"Low air",color:3718648},{label:"High air",color:8490232}],HE=[{label:"Ground",color:8702998},{label:"Air",color:6333946},{label:"Wall",color:16347926}],I_=[{label:"No dodge",color:9741240},{label:"Dodge",color:15235577}],L_=[{label:"First touch",color:16777215},{label:"Contested",color:15680580}],BH=[{title:"Team",entries:UH},{title:"Intention",entries:zE},{title:"Hit strength",entries:yd},{title:"Height",entries:vd},{title:"Surface",entries:HE},{title:"Dodge",entries:I_},{title:"Flags",entries:L_}];function Lc(n){return Object.fromEntries(n.map(e=>[e.label.toLowerCase().replaceAll(" ","_"),e.color]))}const VE=Lc(zE),GE={...Lc(yd),medium_hit:yd[1].color,hard_hit:yd[2].color},$E={...Lc(vd),low_air:vd[1].color,high_air:vd[2].color},WE=Lc(HE),XE={...Lc(I_),no_dodge:I_[0].color},k_={first_touch:L_[0].color,contested:L_[1].color},qi=10134961;function ei(n,e){const t=n.tags;if(!Array.isArray(t))return null;const i=t.find(s=>s.group===e);return i?i.value:null}function KE(n){return ei(n,"possession")??ei(n,"action")}function Ct(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function xm(n,e){return Math.max(0,n-e)}function bd(n){return n==="team"||n==="intention"||n==="kind"||n==="height_band"||n==="surface"||n==="dodge_state"||n==="flag"}function So(n){const e=Array.isArray(n)?n:n?[n]:["team"],t=new Set,i=[];for(const s of e)bd(s)&&!t.has(s)&&(t.add(s),i.push(s));return i.length>0?i:["team"]}function qE(n){return n[n.length-1]??"team"}function zH(n,e,t){const i=HH(n,qE(t)),s=i?` · ${i.replaceAll("_"," ")}`:"";if(e==="markers")return`${n.playerName}${s}`;const a=Math.round(n.totalBallAdvanceDistance),r=Math.round(n.totalBallRetreatDistance);return a>0&&r>0?`${n.playerName} +${a} / -${r} uu${s}`:r>0?`${n.playerName} -${r} uu${s}`:`${n.playerName} +${a} uu${s}`}function HH(n,e){return e==="intention"?n.intention:e==="kind"?n.kind:e==="height_band"?n.heightBand:e==="surface"?n.surface:e==="dodge_state"?n.dodgeState:e==="flag"?n.contested?"contested":n.firstTouch?"first_touch":null:null}function VH(n){return n.split("_").filter(Boolean).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function bl(n,e,t){return typeof e!="string"||e.length===0?null:{key:n,value:e,label:VH(e),color:t[e]??qi}}function Tx(n,e,t){return e!==!0?null:{key:n,value:"true",label:t,color:k_[n]??qi}}function GH(n){const e=ei(n,"reception")==="first_touch",t=ei(n,"contested")!=null;return[bl("intention",KE(n),VE),bl("kind",ei(n,"kind"),GE),bl("height_band",ei(n,"height_band"),$E),bl("surface",ei(n,"surface"),WE),bl("dodge_state",ei(n,"dodge_state"),XE),Tx("first_touch",e,"First touch"),Tx("contested",t,"Contested")].filter(i=>i!=null)}function YE(n,e){return e==="intention"?VE[n.intention??""]??qi:e==="kind"?GE[n.kind??""]??qi:e==="height_band"?$E[n.heightBand??""]??qi:e==="surface"?WE[n.surface??""]??qi:e==="dodge_state"?XE[n.dodgeState??""]??qi:e==="flag"?n.contested?k_.contested??qi:n.firstTouch?k_.first_touch??qi:qi:n.isTeamZero?fy:py}function $H(n,e){return(e.length>0?e:["team"]).map(i=>YE(n,i))}function jE(n,e){const t=[],i=[...be(n,"touch")].sort((s,a)=>s.frame!==a.frame?s.frame-a.frame:s.time!==a.time?s.time-a.time:0);for(const s of i){const a=Ct(s.player),r=e.ballFrames[s.frame]?.position;if(!r)continue;const o=s.ball_movement,c=(o?e.ballFrames[o.end_frame]?.position:null)??r,u=t.length,d=GH(s);t.push({id:`touch-stat:${s.frame}:${a}:${u+1}`,time:e.frames[s.frame]?.time??s.time,frame:s.frame,isTeamZero:s.is_team_0,playerId:a,playerName:e.players.find(h=>h.id===a)?.name??a,kind:ei(s,"kind"),intention:KE(s),heightBand:ei(s,"height_band"),surface:ei(s,"surface"),dodgeState:ei(s,"dodge_state"),firstTouch:ei(s,"reception")==="first_touch",contested:ei(s,"contested")!=null,classifications:d,position:{x:r.x,y:r.y,z:r.z},endPosition:{x:c.x,y:c.y,z:c.z},totalBallTravelDistance:o?xm(o.travel_distance,0):0,totalBallAdvanceDistance:o?xm(o.advance_distance,0):0,totalBallRetreatDistance:o?xm(o.retreat_distance,0):0})}return t}function WH(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function XH(){if(document.getElementById(vx))return;const n=document.createElement("style");n.id=vx,n.textContent=` +`}const tn="#3b82f6",nn="#f59e0b",K3=new Set(["wavedash"]),q3=new Set(["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"]);function Dn(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function yb(n){return q3.has(n)&&!K3.has(n)}function Lf(n){return n===!0?tn:n===!1?nn:null}const AM=["timeline","core_player","player_possession","possession","loose_possession","ball_half","ball_third","territorial_pressure","movement","player_activity","field_third","field_half","ball_depth","depth_role","ball_proximity","shadow_defense","rotation_role","first_man_change","goal_context","backboard","ceiling_shot","wall_aerial","wall_aerial_shot","center","flick","flip_reset","dodge_reset","double_tap","fifty_fifty","kickoff","one_timer","pass","ball_carry","controlled_play","rush","dodge","speed_flip","half_flip","half_volley","wavedash","whiff","powerslide","touch","boost_pickups","boost_respawn","bump","demolition"],RM=["air_dribble","ball_carry","ceiling_shot","double_tap","flick","flip_reset","half_flip","half_volley","one_timer","speed_flip","wall_aerial","wall_aerial_shot","wavedash"],dy=[...new Set([...AM,...RM])],Y3=new Set(RM);function go(){return Object.fromEntries(dy.map(n=>[n,0]))}function rm(n){return{...n??go()}}function Wu(n,e){n[e]+=1}function j3(n){return dy.includes(n)}function PM(n){if(n==null)return null;if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function y_(n){return PM(n.meta.primary_player)}function Z3(n){return n.meta.team_is_team_0??null}function J3(n){const e=n.meta.stream;return!Y3.has(e)||!j3(e)?null:e}function v_(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_frame:n.meta.timing.frame;return typeof e=="number"&&Number.isFinite(e)?e:null}function b_(n){const e=n.meta.timing.type==="span"?n.meta.timing.end_time:n.meta.timing.time;return typeof e=="number"&&Number.isFinite(e)?e:null}function Q3(n,e){const t=v_(n);if(t!==null)return t<=e.frame_number;const i=b_(n);return i!==null&&i<=e.time}function eB(n){return[...n].sort((e,t)=>{const i=v_(e),s=v_(t);if(i!==s)return(i??Number.POSITIVE_INFINITY)-(s??Number.POSITIVE_INFINITY);const a=b_(e),r=b_(t);return a!==r?(a??Number.POSITIVE_INFINITY)-(r??Number.POSITIVE_INFINITY):(y_(e)??"").localeCompare(y_(t)??"")})}function IM(n){const e=LM(n);for(const t of n.frames)e.applyFrame(t);return n}function LM(n){const e=dy.map(s=>({eventType:s,events:eB(yc(n).filter(a=>a.meta.stream===s)),index:0})),t=new Map,i={teamZero:go(),teamOne:go()};return{applyFrame(s){for(const a of e)for(;a.index({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function nB(n,e,t,i){n.is_last_backboard=i,n.time_since_last_backboard=n.last_backboard_time==null?null:Math.max(0,t-n.last_backboard_time),n.frames_since_last_backboard=n.last_backboard_frame==null?null:Math.max(0,e-n.last_backboard_frame)}function iB(n,e,t,i){n.count+=1,n.last_backboard_time=e.time,n.last_backboard_frame=e.frame,n.time_since_last_backboard=Math.max(0,i-e.time),n.frames_since_last_backboard=Math.max(0,t-e.frame)}function sB(n,e){Object.assign(n,e??kM())}function bb(n,e){n.count=e}function aB(n){const e=DM(n);for(const t of n.frames)e.applyFrame(t);return n}function DM(n){const e=tB(be(n,"backboard"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)nB(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function x_(n){return`${n.key}\0${n.value}`}function Xu(n){return n.map(x_).join("")}function OM(n,e){e.sort((s,a)=>x_(s).localeCompare(x_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Xu(s.labels)===Xu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Xu(s.labels).localeCompare(Xu(a.labels))))}function wb(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="origin"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function FM(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function NM(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Sb(n,e){OM(n,[{key:"kind",value:"carry"}]),n.carry_count=FM(n),n.total_carry_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_carry_time=Math.max(n.longest_carry_time,e.duration),n.furthest_carry_distance=Math.max(n.furthest_carry_distance,e.straight_line_distance),n.fastest_carry_speed=Math.max(n.fastest_carry_speed,e.average_speed),n.carry_speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap}function Tb(n,e){e.air_dribble_origin!=null&&OM(n,[{key:"origin",value:e.air_dribble_origin}]),n.count=FM(n),n.ground_to_air_count=wb(n,"ground_to_air"),n.wall_to_air_count=wb(n,"wall_to_air"),n.total_time+=e.duration,n.total_straight_line_distance+=e.straight_line_distance,n.total_path_distance+=e.path_distance,n.longest_time=Math.max(n.longest_time,e.duration),n.furthest_distance=Math.max(n.furthest_distance,e.straight_line_distance),n.fastest_speed=Math.max(n.fastest_speed,e.average_speed),n.speed_sum+=e.average_speed,n.average_horizontal_gap_sum+=e.average_horizontal_gap,n.average_vertical_gap_sum+=e.average_vertical_gap,n.total_touch_count+=e.touch_count,n.max_touch_count=Math.max(n.max_touch_count,e.touch_count)}function om(n,e){Object.assign(n,e??gd()),e?.labeled_event_counts?n.labeled_event_counts=NM(e.labeled_event_counts):delete n.labeled_event_counts}function lm(n,e){Object.assign(n,e??yd()),e?.labeled_event_counts?n.labeled_event_counts=NM(e.labeled_event_counts):delete n.labeled_event_counts}function oB(n){const e=UM(n);for(const t of n.frames)e.applyFrame(t);return n}function UM(n){const e=rB(be(n,"ball_carry"));let t=0;const i=new Map,s=new Map,a=gd(),r=gd(),o=yd(),l=yd();return{applyFrame(c){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function cB(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1),n.last_bump_time=e.time,n.last_bump_frame=e.frame,n.last_bump_strength=e.strength,n.max_bump_strength=Math.max(n.max_bump_strength,e.strength),n.cumulative_bump_strength+=e.strength}function uB(n,e){n.bumps_taken+=1,e.is_team_bump&&(n.team_bumps_taken+=1)}function dB(n,e){n.bumps_inflicted+=1,e.is_team_bump&&(n.team_bumps_inflicted+=1)}function hB(n,e){Object.assign(n,e??w_())}function Eb(n,e){Object.assign(n,e)}function fB(n){const e=BM(n);for(const t of n.frames)e.applyFrame(t);return n}function BM(n){const e=lB(be(n,"bump"));let t=0;const i=new Map,s=Mb(),a=Mb();return{applyFrame(r){for(;t=t&&n0&&(s.overfill_total=an(s.overfill_total,i),e.field_half==="opponent"&&(s.overfill_from_stolen=an(s.overfill_from_stolen,i)))}function Rb(n,e){e.boost_granted!=null&&(n.stats.amount_respawned=an(n.stats.amount_respawned,on(e.boost_granted)))}class vB{constructor(e){this.points=e}index=0;sample(e){for(;this.index+1e?0:on(t.value)}}function E_(n,e){return`${n}:${e}`}function bB(n){const e=new Map,t=n.accumulation_tracks;for(const i of t??[]){const s=Dl(i.player_id);e.set(E_(s,i.quantity),new vB(i.points))}return e}function xB(n){return[...be(n,"boost_pickup")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function wB(n){return[...be(n,"respawn")].sort((e,t)=>e.frame-t.frame||e.time-t.time)}function dm(n,e){for(const t of zM)n[t]=e[t]}function HM(n){const e=xB(n),t=wB(n),i=bB(n);let s=0,a=0;const r=new Map,o=um(),l=um(),c=(d,h)=>{const f=Dl(d);let p=r.get(f);return p||(p=um(),r.set(f,p)),p.isTeamZero=h,p},u=(d,h,f)=>{const p=g=>i.get(E_(h,g))?.sample(f)??0;d.amount_used=p("boost_used"),d.amount_used_while_grounded=p("boost_used_grounded"),d.amount_used_while_airborne=p("boost_used_airborne"),d.amount_used_while_supersonic=p("boost_used_supersonic")};return{applyFrame(d,h){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function C_(n){return`${n.key}\0${n.value}`}function qu(n){return n.map(C_).join("")}function AB(n,e){e.sort((s,a)=>C_(s).localeCompare(C_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>qu(s.labels)===qu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>qu(s.labels).localeCompare(qu(a.labels))))}function RB(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function PB(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function IB(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function LB(n,e,t,i){n.is_last_ceiling_shot=i,n.time_since_last_ceiling_shot=n.last_ceiling_shot_time==null?null:Math.max(0,VM(t,n.last_ceiling_shot_time)),n.frames_since_last_ceiling_shot=n.last_ceiling_shot_frame==null?null:Math.max(0,e-n.last_ceiling_shot_frame)}function kB(n,e,t,i){AB(n,[{key:"confidence_band",value:e.confidence>=MB?"high":"standard"}]),n.count=PB(n),n.high_confidence_count=RB(n,"high"),n.is_last_ceiling_shot=!0,n.last_ceiling_shot_time=e.time,n.last_ceiling_shot_frame=e.frame,n.time_since_last_ceiling_shot=Math.max(0,VM(i,e.time)),n.frames_since_last_ceiling_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=EB(n.cumulative_confidence,e.confidence)}function DB(n,e){Object.assign(n,e??GM()),e?.labeled_event_counts?n.labeled_event_counts=IB(e.labeled_event_counts):delete n.labeled_event_counts}function OB(n){const e=$M(n);for(const t of n.frames)e.applyFrame(t);return n}function $M(n){const e=CB(be(n,"ceiling_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)LB(o,a.frame_number,a.time,i===r);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function BB(n,e){Object.assign(n,e??hy())}function Lb(n,e){Object.assign(n,e)}function kb(n,e){n.score+=e.score_delta,n.goals+=e.goals_delta,n.assists+=e.assists_delta,n.saves+=e.saves_delta,n.shots+=e.shots_delta}function WM(n,e){if(e.time_after_kickoff!=null){const t=Math.max(0,e.time_after_kickoff);t<10?n.kickoff_goal_count+=1:t<20?n.short_goal_count+=1:t<40?n.medium_goal_count+=1:n.long_goal_count+=1}if(e.goal_buildup==="counter_attack"?n.counter_attack_goal_count+=1:e.goal_buildup==="sustained_pressure"?n.sustained_pressure_goal_count+=1:e.goal_buildup!=null&&(n.other_buildup_goal_count+=1),e.ball_air_time_before_goal!=null){const t=Math.max(0,e.ball_air_time_before_goal);n.goal_ball_air_time_sample_count+=1,n.cumulative_goal_ball_air_time=us(n.cumulative_goal_ball_air_time,t),n.last_goal_ball_air_time=t}}function hm(n,e){return n!=null&&e!=null&&gc(n)===gc(e)}function Db(n,e){return n?e.y:-e.y}function zB(n,e){if(n.ball_position==null||e.position==null)return!1;const t=!n.scoring_team_is_team_0,i=Db(t,n.ball_position);if(i>FB)return!1;const s=Db(t,e.position);return s=UB}function HB(n,e,t){const i=t.is_team_0===e.scoring_team_is_team_0,s=hm(t.player,e.defending_team_most_back_player),a=hm(t.player,e.scoring_team_most_back_player);s&&(n.goals_conceded_while_last_defender+=1),a&&(n.goals_for_while_most_back+=1),s&&(n.goals_against_while_most_back+=1),!i&&zB(e,t)&&(n.caught_ahead_of_play_on_conceded_goals+=1),!i&&t.boost_amount!=null&&(n.goal_against_boost_sample_count+=1,n.cumulative_boost_on_goals_against=us(n.cumulative_boost_on_goals_against,t.boost_amount),n.last_boost_on_goal_against=t.boost_amount),!i&&t.average_boost_in_leadup!=null&&t.min_boost_in_leadup!=null&&(n.goal_against_boost_leadup_sample_count+=1,n.cumulative_average_boost_in_goal_against_leadup=us(n.cumulative_average_boost_in_goal_against_leadup,t.average_boost_in_leadup),n.cumulative_min_boost_in_goal_against_leadup=us(n.cumulative_min_boost_in_goal_against_leadup,t.min_boost_in_leadup),n.last_average_boost_in_goal_against_leadup=t.average_boost_in_leadup,n.last_min_boost_in_goal_against_leadup=t.min_boost_in_leadup),!i&&t.position!=null&&(n.goal_against_position_sample_count+=1,n.cumulative_goal_against_position_x=us(n.cumulative_goal_against_position_x,t.position.x),n.cumulative_goal_against_position_y=us(n.cumulative_goal_against_position_y,t.position.y),n.cumulative_goal_against_position_z=us(n.cumulative_goal_against_position_z,t.position.z),n.last_goal_against_position={...t.position});const r=hm(t.player,e.scorer),o=r?e.scorer_last_touch?.ball_position:null;o!=null&&(n.scoring_goal_last_touch_position_sample_count+=1,n.cumulative_scoring_goal_last_touch_position_x=us(n.cumulative_scoring_goal_last_touch_position_x,o.x),n.cumulative_scoring_goal_last_touch_position_y=us(n.cumulative_scoring_goal_last_touch_position_y,o.y),n.cumulative_scoring_goal_last_touch_position_z=us(n.cumulative_scoring_goal_last_touch_position_z,o.z),n.last_scoring_goal_last_touch_position={...o}),r&&WM(n,e)}function VB(n,e,t,i){WM(i.scoring_team_is_team_0?e:t,i);for(const s of i.players){const a=gc(s.player),r=n.get(a)??hy();n.set(a,r),HB(r,i,s)}}function GB(n){const e=XM(n);for(const t of n.frames)e.applyFrame(t);return n}function XM(n){const e=Ib(be(n,"core_player")),t=Ib(be(n,"goal_context"));let i=0,s=0;const a=new Map,r=A_(),o=A_();return{applyFrame(l){for(;i({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function Nb(n,e){n.count+=1,n.total_time=Ob(n.total_time,e.duration),n.longest_time=Math.max(n.longest_time,e.duration),n.touch_count+=e.touch_count,n.total_advance_distance=Ob(n.total_advance_distance,e.total_advance_distance)}function pm(n,e){Object.assign(n,e??vd())}function WB(n){const e=KM(n);for(const t of n.frames)e.applyFrame(t);return n}function KM(n){const e=$B(be(n,"controlled_play"));let t=0;const i=new Map,s=vd(),a=vd();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function KB(n,e){n.count+=1,e.on_ball&&(n.on_ball_count+=1)}function qB(n,e){Object.assign(n,e??qM())}function YB(n){const e=YM(n);for(const t of n.frames)e.applyFrame(t);return n}function YM(n){const e=XB(be(n,"dodge_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function ZB(n,e,t,i){n.is_last_double_tap=i,n.time_since_last_double_tap=n.last_double_tap_time==null?null:Math.max(0,t-n.last_double_tap_time),n.frames_since_last_double_tap=n.last_double_tap_frame==null?null:Math.max(0,e-n.last_double_tap_frame)}function JB(n,e,t,i){n.count+=1,n.last_double_tap_time=e.time,n.last_double_tap_frame=e.frame,n.time_since_last_double_tap=Math.max(0,i-e.time),n.frames_since_last_double_tap=Math.max(0,t-e.frame)}function QB(n,e){Object.assign(n,e??jM())}function zb(n,e){n.count=e}function ez(n){const e=ZM(n);for(const t of n.frames)e.applyFrame(t);return n}function ZM(n){const e=jB(be(n,"double_tap"));let t=0,i=0,s=0,a=null;const r=new Map;return{applyFrame(o){for(const[c,u]of r)ZB(u,o.frame_number,o.time,c===a);let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function nz(n,e){Object.assign(n,e??JM())}function Gb(n,e){Object.assign(n,e)}function iz(n){const e=QM(n);for(const t of n.frames)e.applyFrame(t);return n}function QM(n){const e=tz(be(n,"demolition"));let t=0;const i=new Map,s=Vb(),a=Vb();function r(o){const l=Hb(o),c=i.get(l)??JM();return i.set(l,c),c}return{applyFrame(o){for(;t({event:e,index:t})).sort((e,t)=>e.event.resolve_frame!==t.event.resolve_frame?e.event.resolve_frame-t.event.resolve_frame:e.event.resolve_time!==t.event.resolve_time?e.event.resolve_time-t.event.resolve_time:e.index-t.index).map(({event:e})=>e)}function az(n){return{key:"phase",value:n?"kickoff":"open_play"}}function rz(n,e){return e==null?{key:"outcome",value:"neutral"}:{key:"outcome",value:e===n?"win":"loss"}}function oz(n,e){return e==null?{key:"possession_after",value:"neutral"}:{key:"possession_after",value:e===n?"self":"opponent"}}function lz(n,e){return{key:"dodge_state",value:(n?e.team_zero_dodge_contact:e.team_one_dodge_contact)?"dodge":"no_dodge"}}function P_(n){return`${n.key}\0${n.value}`}function Yu(n){return n.map(P_).join("")}function cz(n,e){e.sort((s,a)=>P_(s).localeCompare(P_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Yu(s.labels)===Yu(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Yu(s.labels).localeCompare(Yu(a.labels))))}function uz(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Wb(n,e,t){n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0==null?n.neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.possession_after_count+=1:n.opponent_possession_after_count+=1,t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0==null?n.kickoff_neutral_possession_after_count+=1:t.possession_team_is_team_0===e?n.kickoff_possession_after_count+=1:n.kickoff_opponent_possession_after_count+=1)}function Xb(n,e,t){cz(n,[az(t.is_kickoff),rz(e,t.winning_team_is_team_0),oz(e,t.possession_team_is_team_0),lz(e,t)]),n.count+=1,t.winning_team_is_team_0==null?n.neutral_outcomes+=1:t.winning_team_is_team_0===e?n.wins+=1:n.losses+=1,t.possession_team_is_team_0===e&&(n.possession_after_count+=1),t.is_kickoff&&(n.kickoff_count+=1,t.winning_team_is_team_0==null?n.kickoff_neutral_outcomes+=1:t.winning_team_is_team_0===e?n.kickoff_wins+=1:n.kickoff_losses+=1,t.possession_team_is_team_0===e&&(n.kickoff_possession_after_count+=1))}function dz(n,e){Object.assign(n,e??R_()),e?.labeled_event_counts?n.labeled_event_counts=uz(e.labeled_event_counts):delete n.labeled_event_counts}function Kb(n,e){Object.assign(n,e)}function hz(n){const e=eE(n);for(const t of n.frames)e.applyFrame(t);return n}function eE(n){const e=sz(be(n,"fifty_fifty"));let t=0;const i=$b(),s=$b(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function I_(n){return`${n.key}\0${n.value}`}function ju(n){return n.map(I_).join("")}function iE(n,e){e.sort((s,a)=>I_(s).localeCompare(I_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>ju(s.labels)===ju(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>ju(s.labels).localeCompare(ju(a.labels))))}function pz(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function mz(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"taker_outcome",value:n.outcome},{key:"kickoff_approach",value:n.approach},{key:"approach_flip_direction",value:n.approach_flip_direction}]}function _z(n){return[{key:"kickoff_spawn",value:n.spawn_position},{key:"support_behavior",value:n.support_behavior}]}function Yb(n,e,t){n.count+=1,t.outcome==="neutral"?n.neutral_outcomes+=1:t.outcome===(e?"team_zero_win":"team_one_win")?n.wins+=1:t.outcome===(e?"team_one_win":"team_zero_win")&&(n.losses+=1),t.kickoff_possession_outcome==="contested"?n.contested_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_possession":"team_one_possession")?n.kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_one_possession":"team_zero_possession")?n.opponent_kickoff_possessions+=1:t.kickoff_possession_outcome===(e?"team_zero_advantage":"team_one_advantage")?n.kickoff_possession_advantages+=1:n.opponent_kickoff_possession_advantages+=1,t.kickoff_goal&&(n.kickoff_goal_count+=1,t.scoring_team_is_team_0===e?n.kickoff_goals_for+=1:t.scoring_team_is_team_0!=null&&(n.kickoff_goals_against+=1)),t.win_strength!=null&&(n.win_strength_sample_count+=1,n.cumulative_win_strength+=t.win_strength)}function jb(n,e,t){t&&(t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after,e.boost_after_sample_count+=1,e.cumulative_boost_after+=t.boost_after),t.outcome==="fake"?(n.fake_count+=1,e.fake_count+=1):t.outcome==="missed"&&(n.missed_count+=1,e.missed_count+=1))}function gz(n,e,t){n.count+=1,iE(n,mz(t)),t.outcome==="touched"?n.touches+=1:t.outcome==="fake"?n.fakes+=1:t.outcome==="missed"&&(n.misses+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function yz(n,e,t){n.count+=1,iE(n,_z(t)),t.first_touch_time!=null&&(n.touches+=1),t.support_behavior==="go_for_boost"?n.support_go_for_boosts+=1:t.support_behavior==="cheat"?n.support_cheats+=1:t.support_behavior==="other"&&(n.support_other+=1),e.kickoff_goal&&e.scoring_team_is_team_0===t.is_team_0&&(n.kickoff_goal_count+=1),t.boost_after!=null&&(n.boost_after_sample_count+=1,n.cumulative_boost_after+=t.boost_after)}function Zu(n,e,t){const i=tE(t.player),s=n.get(i)??nE();n.set(i,s),"outcome"in t?gz(s,e,t):yz(s,e,t)}function Zb(n,e){Object.assign(n,e)}function vz(n,e){Object.assign(n,e??nE()),e?.labeled_event_counts?n.labeled_event_counts=pz(e.labeled_event_counts):delete n.labeled_event_counts}function bz(n){const e=sE(n);for(const t of n.frames)e.applyFrame(t);return n}function sE(n){const e=fz(be(n,"kickoff"));let t=0;const i=qb(),s=qb(),a=new Map;return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function L_(n){return`${n.key}\0${n.value}`}function Ju(n){return n.map(L_).join("")}function Sz(n,e){e.sort((s,a)=>L_(s).localeCompare(L_(a)));const t=n.labeled_event_counts??={entries:[]},i=t.entries.find(s=>Ju(s.labels)===Ju(e));i?i.count+=1:(t.entries.push({labels:[...e],count:1}),t.entries.sort((s,a)=>Ju(s.labels).localeCompare(Ju(a.labels))))}function Tz(n,e){return n.labeled_event_counts?.entries.filter(t=>t.labels.some(i=>i.key==="confidence_band"&&i.value===e)).reduce((t,i)=>t+i.count,0)??0}function Mz(n){return n==="forward"||n==="reverse"||n==="side"?n:"other"}function Ez(n){return n==="left"||n==="right"?n:"center"}function Cz(n){return n.labeled_event_counts?.entries.reduce((e,t)=>e+t.count,0)??0}function Az(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function Rz(n,e,t,i){n.is_last_flick=i,n.time_since_last_flick=n.last_flick_time==null?null:Math.max(0,aE(t,n.last_flick_time)),n.frames_since_last_flick=n.last_flick_frame==null?null:Math.max(0,e-n.last_flick_frame)}function Pz(n,e,t,i){Sz(n,[{key:"confidence_band",value:e.confidence>=xz?"high":"standard"},{key:"kind",value:Mz(e.kind)},{key:"direction",value:Ez(e.direction)}]),n.count=Cz(n),n.high_confidence_count=Tz(n,"high"),n.is_last_flick=!0,n.last_flick_time=e.time,n.last_flick_frame=e.frame,n.time_since_last_flick=Math.max(0,aE(i,e.time)),n.frames_since_last_flick=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=_m(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=_m(n.cumulative_setup_duration,e.setup_duration),n.cumulative_ball_speed_change=_m(n.cumulative_ball_speed_change,e.ball_speed_change)}function Iz(n,e){Object.assign(n,e??rE()),e?.labeled_event_counts?n.labeled_event_counts=Az(e.labeled_event_counts):delete n.labeled_event_counts}function Lz(n){const e=oE(n);for(const t of n.frames)e.applyFrame(t);return n}function oE(n){const e=wz(be(n,"flick"));let t=0,i=null;const s=new Map;return{applyFrame(a){if(a.is_live_play){for(const[r,o]of s)Rz(o,a.frame_number,a.time,r===i);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Dz(n,e){n.count+=1,n.total_time_to_use+=e.time_since_reset,n.min_time_to_use=n.min_time_to_use===null?e.time_since_reset:Math.min(n.min_time_to_use,e.time_since_reset)}function Oz(n,e){Object.assign(n,e??lE())}function Fz(n){const e=cE(n);for(const t of n.frames)e.applyFrame(t);return n}function cE(n){const e=kz(be(n,"flip_reset"));let t=0;const i=new Map;return{applyFrame(s){for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function Uz(n,e,t,i){n.is_last_half_volley=i,n.time_since_last_half_volley=n.last_half_volley_time==null?null:Math.max(0,dE(t,n.last_half_volley_time)),n.frames_since_last_half_volley=n.last_half_volley_frame==null?null:Math.max(0,e-n.last_half_volley_frame)}function Bz(n,e,t,i){n.count+=1,n.total_ball_speed=uE(n.total_ball_speed,e.ball_speed),n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.last_half_volley_time=e.time,n.last_half_volley_frame=e.frame,n.time_since_last_half_volley=Math.max(0,dE(i,e.time)),n.frames_since_last_half_volley=Math.max(0,t-e.frame)}function zz(n,e){Object.assign(n,e??hE())}function tx(n,e){Object.assign(n,e)}function Hz(n){const e=fE(n);for(const t of n.frames)e.applyFrame(t);return n}function fE(n){const e=Nz(be(n,"half_volley"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)Uz(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;te.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:ji(e.player).localeCompare(ji(t.player)))}function Wz(n){return[...n].sort((e,t)=>e.resolved_frame!==t.resolved_frame?e.resolved_frame-t.resolved_frame:e.resolved_time!==t.resolved_time?e.resolved_time-t.resolved_time:e.frame!==t.frame?e.frame-t.frame:e.time!==t.time?e.time-t.time:ji(e.player).localeCompare(ji(t.player)))}function gm(){return{count:0,highConfidenceCount:0,lastTime:null,lastFrame:null,lastResolvedTime:null,lastResolvedFrame:null,lastQuality:null,bestQuality:0,cumulativeQuality:0,labeledCounts:{entries:[]}}}function xo(n){return Math.fround(n)}function Xz(n,e){return xo(xo(n)+xo(e))}function Kz(n,e){return{key:"confidence_band",value:n>=e?"high":"standard"}}function qz(n,e){const t=e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key)),i=n.entries.find(s=>s.labels.length===t.length&&s.labels.every((a,r)=>a.key===t[r]?.key&&a.value===t[r]?.value));if(i){i.count+=1;return}n.entries.push({labels:t,count:1}),n.entries.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels)))}function Jo(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function ym(n,e,t,i,s){n.count+=1,e.confidence>=s&&(n.highConfidenceCount+=1),qz(n.labeledCounts,[Kz(e.confidence,s)]),n.lastTime=e.time,n.lastFrame=e.frame,n.lastResolvedTime=i,n.lastResolvedFrame=t,n.lastQuality=e.confidence,n.bestQuality=Math.max(n.bestQuality,e.confidence),n.cumulativeQuality=Xz(n.cumulativeQuality,e.confidence)}function fy(n,e){return n?.lastTime==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,xo(xo(e.time)-xo(n.lastTime)))}function py(n,e){return n?.lastFrame==null?null:n.lastResolvedFrame===e.frame_number?0:Math.max(0,e.frame_number-n.lastFrame)}function pE(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_speed_flip=i,n.last_speed_flip_time=e?.lastTime??null,n.last_speed_flip_frame=e?.lastFrame??null,n.time_since_last_speed_flip=fy(e,t),n.frames_since_last_speed_flip=py(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Jo(e.labeledCounts):delete n.labeled_event_counts}function mE(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_half_flip=i,n.last_half_flip_time=e?.lastTime??null,n.last_half_flip_frame=e?.lastFrame??null,n.time_since_last_half_flip=fy(e,t),n.frames_since_last_half_flip=py(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Jo(e.labeledCounts):delete n.labeled_event_counts}function _E(n,e,t,i){n.count=e?.count??0,n.high_confidence_count=e?.highConfidenceCount??0,n.is_last_wavedash=i,n.last_wavedash_time=e?.lastTime??null,n.last_wavedash_frame=e?.lastFrame??null,n.time_since_last_wavedash=fy(e,t),n.frames_since_last_wavedash=py(e,t),n.last_quality=e?.lastQuality??null,n.best_quality=e?.bestQuality??0,n.cumulative_quality=e?.cumulativeQuality??0,e?.labeledCounts.entries.length?n.labeled_event_counts=Jo(e.labeledCounts):delete n.labeled_event_counts}function Yz(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Jo(n.labeled_event_counts):delete e.labeled_event_counts,e}function jz(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Jo(n.labeled_event_counts):delete e.labeled_event_counts,e}function Zz(n){const e={...n};return n.labeled_event_counts?e.labeled_event_counts=Jo(n.labeled_event_counts):delete e.labeled_event_counts,e}function Jz(n,e){if(e){Object.assign(n,e);return}pE(n,void 0,{frame_number:0,time:0},!1)}function Qz(n,e){if(e){Object.assign(n,e);return}mE(n,void 0,{frame_number:0,time:0},!1)}function eH(n,e){if(e){Object.assign(n,e);return}_E(n,void 0,{frame_number:0,time:0},!1)}function tH(n){return n.is_live_play||n.ball_has_been_hit===!1}function nH(n){const e=gE(n);for(const t of n.frames)e.applyFrame(t);return n}function gE(n){const e=Wz(be(n,"speed_flip")),t=nx(be(n,"half_flip")),i=nx(be(n,"wavedash"));let s=0,a=0,r=0,o=null,l=null,c=null;const u=new Map,d=new Map,h=new Map,f=new Map,p=new Map,g=new Map;return{applyFrame(_){if(tH(_)){for(;siH.map(e=>({labels:[{key:"height_band",value:n},{key:"speed_band",value:e}],value:0}))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function bd(n=!1){return{tracked_time:0,total_distance:0,speed_integral:0,time_slow_speed:0,time_boost_speed:0,time_supersonic_speed:0,time_on_ground:0,time_low_air:0,time_high_air:0,labeled_tracked_time:n?rH():{entries:[]}}}function oH(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function lH(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function cH(n,e,t){const i=lH(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=ds(s.value,t):(n.entries.push({labels:i,value:ma(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function uH(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),value:e.value}))}}function sx(n,e){const t=ma(e.dt);n.tracked_time=ds(n.tracked_time,t),n.total_distance=ds(n.total_distance,e.distance),n.speed_integral=ds(n.speed_integral,aH(e.speed,t)),e.speed_band==="slow"?n.time_slow_speed=ds(n.time_slow_speed,t):e.speed_band==="boost"?n.time_boost_speed=ds(n.time_boost_speed,t):e.speed_band==="supersonic"&&(n.time_supersonic_speed=ds(n.time_supersonic_speed,t)),e.height_band==="ground"?n.time_on_ground=ds(n.time_on_ground,t):e.height_band==="low_air"?n.time_low_air=ds(n.time_low_air,t):e.height_band==="high_air"&&(n.time_high_air=ds(n.time_high_air,t));const i=n.labeled_tracked_time??{entries:[]};n.labeled_tracked_time=i,cH(i,[{key:"speed_band",value:e.speed_band},{key:"height_band",value:e.height_band}],t)}function vm(n,e){const t=e??bd(!0),i=t.labeled_tracked_time;Object.assign(n,t,{labeled_tracked_time:i?uH(i):void 0}),i?.entries.length||delete n.labeled_tracked_time}function dH(n){const e=yE(n);for(const t of n.frames)e.applyFrame(t);return n}function yE(n){const e=oH(be(n,"movement"));let t=0;const i=new Map,s=bd(),a=bd();return{applyFrame(r){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function fH(n,e,t,i){n.is_last_one_timer=i,n.time_since_last_one_timer=n.last_one_timer_time==null?null:Math.max(0,t-n.last_one_timer_time),n.frames_since_last_one_timer=n.last_one_timer_frame==null?null:Math.max(0,e-n.last_one_timer_frame)}function pH(n,e,t,i){n.count+=1,n.total_ball_speed+=e.ball_speed,n.fastest_ball_speed=Math.max(n.fastest_ball_speed,e.ball_speed),n.total_pass_distance+=e.pass_travel_distance,n.last_one_timer_time=e.time,n.last_one_timer_frame=e.frame,n.time_since_last_one_timer=Math.max(0,i-e.time),n.frames_since_last_one_timer=Math.max(0,t-e.frame)}function mH(n,e){Object.assign(n,e??vE())}function rx(n,e){Object.assign(n,e)}function _H(n){const e=bE(n);for(const t of n.frames)e.applyFrame(t);return n}function bE(n){const e=hH(be(n,"one_timer"));let t=0,i=null;const s=new Map,a={count:0,total_ball_speed:0,fastest_ball_speed:0},r={count:0,total_ball_speed:0,fastest_ball_speed:0};return{applyFrame(o){for(const[l,c]of s)fH(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.index-t.index}).map(({event:e})=>e)}function yH(n,e,t,i){n.is_last_completed_pass=i,n.time_since_last_completed_pass=n.last_completed_pass_time==null?null:Math.max(0,t-n.last_completed_pass_time),n.frames_since_last_completed_pass=n.last_completed_pass_frame==null?null:Math.max(0,e-n.last_completed_pass_frame)}function vH(n,e,t,i){n.completed_pass_count+=1,n.total_pass_distance+=e.ball_travel_distance,n.total_pass_advance+=e.ball_advance_distance,n.longest_pass_distance=Math.max(n.longest_pass_distance,e.ball_travel_distance),n.last_completed_pass_time=e.time,n.last_completed_pass_frame=e.frame,n.time_since_last_completed_pass=Math.max(0,i-e.time),n.frames_since_last_completed_pass=Math.max(0,t-e.frame)}function bH(n,e){Object.assign(n,e??k_())}function ox(n,e){Object.assign(n,e)}function xH(n){const e=xE(n);for(const t of n.frames)e.applyFrame(t);return n}function xE(n){const e=gH(be(n,"pass"));let t=0,i=null;const s=new Map,a={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0},r={completed_pass_count:0,total_pass_distance:0,total_pass_advance:0,longest_pass_distance:0};return{applyFrame(o){for(const[l,c]of s)yH(c,o.frame_number,o.time,o.is_live_play&&l===i);if(!o.is_live_play)i=null;else{let l=!1;for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function TH(n){return D_(n)}function MH(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function wE(n,e,t){const i=MH(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=Ol(s.value,t):(n.entries.push({labels:i,value:Ql(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function EH(n,e){return n.key==="possession_state"&&n.value==="team_zero"?{key:"possession_state",value:e?"own":"opponent"}:n.key==="possession_state"&&n.value==="team_one"?{key:"possession_state",value:e?"opponent":"own"}:n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function lx(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)wE(t,i.labels.map(s=>EH(s,e)),i.value);return{tracked_time:n.tracked_time,possession_time:e?n.team_zero_time:n.team_one_time,opponent_possession_time:e?n.team_one_time:n.team_zero_time,neutral_time:n.neutral_time,labeled_time:t}}function CH(n,e){n.active=e.active,n.possessionState=e.possession_state}function AH(n,e,t){if(!e.active)return;const i=Ql(t.dt);n.tracked_time=Ol(n.tracked_time,i),e.possessionState==="team_zero"?n.team_zero_time=Ol(n.team_zero_time,i):e.possessionState==="team_one"?n.team_one_time=Ol(n.team_one_time,i):n.neutral_time=Ol(n.neutral_time,i);const s=[{key:"possession_state",value:e.possessionState}];e.fieldThird!=null&&s.push({key:"field_third",value:e.fieldThird}),e.fieldHalf!=null&&s.push({key:"field_half",value:e.fieldHalf}),wE(n.labeled_time,s,i)}function cx(n,e){Object.assign(n,e??SH())}function RH(n){const e=SE(n);for(const t of n.frames)e.applyFrame(t);return n}function SE(n){const e=TH(be(n,"possession")),t=D_(be(n,"ball_third")),i=D_(be(n,"ball_half"));let s=0,a=0,r=0;const o=wH(),l={active:!1,possessionState:"neutral",fieldThird:null,fieldHalf:null};return{applyFrame(c){for(;s({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function Ga(n,e){const t=Ah(e.player),i=n.get(t)??TE();return n.set(t,i),i}function IH(n,e){switch(n.active_game_time=Kt(n.active_game_time,e.duration),e.state){case"tracked":n.tracked_time=Kt(n.tracked_time,e.duration);break;case"demolished":n.time_demolished=Kt(n.time_demolished,e.duration);break}}function LH(n,e){switch(e.state){case"defensive":n.time_defensive_third=Kt(n.time_defensive_third,e.duration);break;case"neutral":n.time_neutral_third=Kt(n.time_neutral_third,e.duration);break;case"offensive":n.time_offensive_third=Kt(n.time_offensive_third,e.duration);break}}function kH(n,e){switch(e.state){case"defensive":n.time_defensive_half=Kt(n.time_defensive_half,e.duration);break;case"offensive":n.time_offensive_half=Kt(n.time_offensive_half,e.duration);break}}function DH(n,e){switch(e.state){case"behind_ball":n.time_behind_ball=Kt(n.time_behind_ball,e.duration);break;case"level_with_ball":n.time_level_with_ball=Kt(n.time_level_with_ball,e.duration);break;case"ahead_of_ball":n.time_in_front_of_ball=Kt(n.time_in_front_of_ball,e.duration);break}}function OH(n,e){switch(e.state){case"no_teammates":n.time_no_teammates=Kt(n.time_no_teammates,e.duration);break;case"most_back":n.time_most_back=Kt(n.time_most_back,e.duration);break;case"most_forward":n.time_most_forward=Kt(n.time_most_forward,e.duration);break;case"mid":n.time_mid_role=Kt(n.time_mid_role,e.duration);break;case"other":n.time_other_role=Kt(n.time_other_role,e.duration);break}}function FH(n,e,t){t.state.closest_to_ball_team&&(e.tracked_time=Kt(e.tracked_time,t.duration),e.time_closest_to_ball_team=Kt(e.time_closest_to_ball_team,t.duration),n.time_closest_to_ball_team=Kt(n.time_closest_to_ball_team,t.duration)),t.state.closest_to_ball_absolute&&(e.time_closest_to_ball_absolute=Kt(e.time_closest_to_ball_absolute,t.duration),n.time_closest_to_ball_absolute=Kt(n.time_closest_to_ball_absolute,t.duration)),t.state.farthest_from_ball&&(n.time_farthest_from_ball=Kt(n.time_farthest_from_ball,t.duration))}function NH(n,e){e.state==="shadowing"&&(n.time_shadow_defense=Kt(n.time_shadow_defense,e.duration))}function UH(n,e){Object.assign(n,e??TE())}function ux(n,e){Object.assign(n,e??O_())}function $a(n,e){const t=PH(n),i=new Array(t.length).fill(0);return{applyThroughFrame(s){for(let a=0;as.frame_number)break;const o=BH(r,s),l=o-i[a];l>0&&(i[a]=o,e({...r,duration:l}))}}}}function BH(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function zH(n){const e=ME(n);for(const t of n.frames)e.applyFrame(t);return n}function ME(n){const e=new Map,t=O_(),i=O_(),s=[$a(be(n,"player_activity"),a=>IH(Ga(e,a),a)),$a(be(n,"field_third"),a=>LH(Ga(e,a),a)),$a(be(n,"field_half"),a=>kH(Ga(e,a),a)),$a(be(n,"ball_depth"),a=>DH(Ga(e,a),a)),$a(be(n,"depth_role"),a=>OH(Ga(e,a),a)),$a(be(n,"ball_proximity"),a=>FH(Ga(e,a),a.is_team_0?t:i,a)),$a(be(n,"shadow_defense"),a=>NH(Ga(e,a),a))];return{applyFrame(a){for(const r of s)r.applyThroughFrame(a);ux(a.team_zero.positioning,t),ux(a.team_one.positioning,i);for(const r of a.players)UH(r.positioning,e.get(Ah(r.player_id))),HH(r.positioning,n,r.player_id)}}}function HH(n,e,t){const i=e.positioning_summary;if(!Array.isArray(i))return;const s=Ah(t),a=i.find(r=>!r||typeof r!="object"?!1:Ah(r.player_id)===s);a?.distance&&Object.assign(n,a.distance)}function xm(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function Fl(){return{total_duration:0,press_count:0}}function VH(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function GH(n){return n.gameplay_phase==="active_play"||n.gameplay_phase==="kickoff_waiting_for_touch"}function wm(n,e){Object.assign(n,e??Fl())}function $H(n){const e=EE(n);for(const t of n.frames)e.applyFrame(t);return n}function EE(n){const e=VH(be(n,"powerslide"));let t=0;const i=new Map,s=new Map,a=Fl(),r=Fl();return{applyFrame(o){const l=GH(o);for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function qH(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function CE(n,e,t){const i=qH(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=Nl(s.value,t):(n.entries.push({labels:i,value:ec(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function YH(n,e){return n.key==="field_half"&&n.value==="team_zero_side"?{key:"field_half",value:e?"defensive_half":"offensive_half"}:n.key==="field_half"&&n.value==="team_one_side"?{key:"field_half",value:e?"offensive_half":"defensive_half"}:{...n}}function dx(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)CE(t,i.labels.map(s=>YH(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_half_time:e?n.team_zero_side_time:n.team_one_side_time,offensive_half_time:e?n.team_one_side_time:n.team_zero_side_time,neutral_time:n.neutral_time,labeled_time:t}}function jH(n,e){n.active=e.active,n.fieldHalf=e.field_half}function ZH(n,e,t){if(!e.active)return;const i=ec(t.dt);n.tracked_time=Nl(n.tracked_time,i),e.fieldHalf==="team_zero_side"?n.team_zero_side_time=Nl(n.team_zero_side_time,i):e.fieldHalf==="team_one_side"?n.team_one_side_time=Nl(n.team_one_side_time,i):n.neutral_time=Nl(n.neutral_time,i),CE(n.labeled_time,[{key:"field_half",value:e.fieldHalf}],i)}function hx(n,e){Object.assign(n,e??XH())}function JH(n){const e=AE(n);for(const t of n.frames)e.applyFrame(t);return n}function AE(n){const e=KH(be(n,"ball_half"));let t=0;const i=WH(),s={active:!1,fieldHalf:"neutral"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function n5(n){return n.sort((e,t)=>e.key===t.key?e.value.localeCompare(t.value):e.key.localeCompare(t.key))}function RE(n,e,t){const i=n5(e),s=n.entries.find(a=>a.labels.length===i.length&&a.labels.every((r,o)=>r.key===i[o]?.key&&r.value===i[o]?.value));s?s.value=Ul(s.value,t):(n.entries.push({labels:i,value:tc(t)}),n.entries.sort((a,r)=>JSON.stringify(a.labels).localeCompare(JSON.stringify(r.labels))))}function i5(n,e){return n.key==="field_third"&&n.value==="team_zero_third"?{key:"field_third",value:e?"defensive_third":"offensive_third"}:n.key==="field_third"&&n.value==="team_one_third"?{key:"field_third",value:e?"offensive_third":"defensive_third"}:{...n}}function fx(n,e){const t={entries:[]};for(const i of n.labeled_time.entries)RE(t,i.labels.map(s=>i5(s,e)),i.value);return{tracked_time:n.tracked_time,defensive_third_time:e?n.team_zero_third_time:n.team_one_third_time,neutral_third_time:n.neutral_third_time,offensive_third_time:e?n.team_one_third_time:n.team_zero_third_time,labeled_time:t}}function s5(n,e){n.active=e.active,n.fieldThird=e.field_third}function a5(n,e,t){if(!e.active)return;const i=tc(t.dt);n.tracked_time=Ul(n.tracked_time,i),e.fieldThird==="team_zero_third"?n.team_zero_third_time=Ul(n.team_zero_third_time,i):e.fieldThird==="team_one_third"?n.team_one_third_time=Ul(n.team_one_third_time,i):n.neutral_third_time=Ul(n.neutral_third_time,i),RE(n.labeled_time,[{key:"field_third",value:e.fieldThird}],i)}function px(n,e){Object.assign(n,e??e5())}function r5(n){const e=PE(n);for(const t of n.frames)e.applyFrame(t);return n}function PE(n){const e=t5(be(n,"ball_third"));let t=0;const i=QH(),s={active:!1,fieldThird:"neutral_third"};return{applyFrame(a){for(;t({event:e,index:t})).sort((e,t)=>e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.event.end_time!==t.event.end_time?e.event.end_time-t.event.end_time:e.index-t.index).map(({event:e})=>e)}function l5(n,e,t){n.session_count+=1,n.session_time=Qu(n.session_time,t.duration),n.offensive_half_time=Qu(n.offensive_half_time,t.offensive_half_time),n.offensive_third_time=Qu(n.offensive_third_time,t.offensive_third_time),n.longest_session_time=Math.max(n.longest_session_time,t.duration),n.average_session_time=n.session_count===0?0:xd(n.session_time/n.session_count),e.opponent_session_count+=1,e.opponent_session_time=Qu(e.opponent_session_time,t.duration),e.opponent_longest_session_time=Math.max(e.opponent_longest_session_time,t.duration)}function _x(n,e){Object.assign(n,e)}function c5(n){const e=IE(n);for(const t of n.frames)e.applyFrame(t);return n}function IE(n){const e=o5(be(n,"territorial_pressure"));let t=0;const i=mx(),s=mx();return{applyFrame(a){for(;t=e[t].end_frame;){const r=e[t];l5(r.team_is_team_0?i:s,r.team_is_team_0?s:i,r),t+=1}_x(a.team_zero.territorial_pressure,i),_x(a.team_one.territorial_pressure,s)}}}function ao(n,e){return Math.fround(Math.fround(n)+Math.fround(e))}function LE(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function kE(){return{active_game_time:0,time_first_man:0,time_second_man:0,time_third_man:0,time_ambiguous_role:0,longest_first_man_stint_time:0,first_man_stint_count:0,became_first_man_count:0,lost_first_man_count:0,current_role_state:"unknown"}}function gx(){return{first_man_changes_for_team:0,rotation_count:0}}function yx(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function u5(n,e,t,i,s){const a=n.stats;switch(a.active_game_time=ao(a.active_game_time,t),a.current_role_state=e.state,e.state){case"first_man":{n.lastFirstManEndTime!==null&&e.time-n.lastFirstManEndTime<=s?n.currentFirstManStintTime=ao(n.currentFirstManStintTime,t):(n.currentFirstManStintTime=t,a.first_man_stint_count+=1),n.lastFirstManEndTime=i,a.longest_first_man_stint_time=Math.max(a.longest_first_man_stint_time,n.currentFirstManStintTime),a.time_first_man=ao(a.time_first_man,t);break}case"second_man":a.time_second_man=ao(a.time_second_man,t);break;case"third_man":a.time_third_man=ao(a.time_third_man,t);break;case"ambiguous":a.time_ambiguous_role=ao(a.time_ambiguous_role,t);break}}function d5(n,e){if(e.frame_number>=n.end_frame)return n.duration;const t=n.end_time-n.time;if(t<=0)return 0;const i=Math.max(0,e.time-n.time);return n.duration*Math.min(1,i/t)}function F_(n,e){const t=LE(e),i=n.get(t)??{currentFirstManStintTime:0,lastFirstManEndTime:null,stats:kE()};return n.set(t,i),i}function h5(n,e,t){n.first_man_changes_for_team+=1,n.rotation_count+=1,F_(e,t.previous_first_man).stats.lost_first_man_count+=1,F_(e,t.next_first_man).stats.became_first_man_count+=1}function f5(n,e){Object.assign(n,e??kE())}function vx(n,e){Object.assign(n,e)}function p5(n){const e=DE(n);for(const t of n.frames)e.applyFrame(t);return n}function DE(n){const e=yx(be(n,"rotation_role")),t=yx(be(n,"first_man_change")),i=n.config.rotation_first_man_stint_end_grace_seconds,s=new Array(e.length).fill(0);let a=0;const r=new Map,o=gx(),l=gx();return{applyFrame(c){for(let u=0;uc.frame_number)break;const h=d5(d,c),f=h-s[u];if(f>0){s[u]=h;const p=c.frame_number>=d.end_frame?d.end_time:Math.min(c.time,d.end_time);u5(F_(r,d.player),d,f,p,i)}}for(;a({event:e,index:t})).sort((e,t)=>e.event.start_frame!==t.event.start_frame?e.event.start_frame-t.event.start_frame:e.event.start_time!==t.event.start_time?e.event.start_time-t.event.start_time:e.event.end_frame!==t.event.end_frame?e.event.end_frame-t.event.end_frame:e.index-t.index).map(({event:e})=>e)}function _5(n,e){n.count+=1,e.attackers===2&&e.defenders===1?n.two_v_one_count+=1:e.attackers===2&&e.defenders===2?n.two_v_two_count+=1:e.attackers===2&&e.defenders===3?n.two_v_three_count+=1:e.attackers===3&&e.defenders===1?n.three_v_one_count+=1:e.attackers===3&&e.defenders===2?n.three_v_two_count+=1:e.attackers===3&&e.defenders===3&&(n.three_v_three_count+=1)}function xx(n,e){Object.assign(n,e)}function g5(n){const e=OE(n);for(const t of n.frames)e.applyFrame(t);return n}function OE(n){const e=m5(be(n,"rush"));let t=0;const i=bx(),s=bx(),a=n.config.rush_min_possession_retained_seconds;return{applyFrame(r){for(;t=e[t].start_frame&&r.time-e[t].start_time>=a;){const o=e[t];_5(o.is_team_0?i:s,o),t+=1}xx(r.team_zero.rush,i),xx(r.team_one.rush,s)}}}const y5=["control","hard_hit","medium_hit"],v5=["ground","high_air","low_air"],b5=["air","ground","wall"],x5=["dodge","no_dodge"];function wo(n){return Math.fround(n)}function wd(n,e){return wo(wo(n)+wo(e))}function FE(n,e){return wo(wo(n)-wo(e))}function Sm(n){if(!n||typeof n!="object")return String(n);const[e,t]=Object.entries(n)[0]??["Unknown","unknown"];return`${e}:${typeof t=="string"?t:JSON.stringify(t)}`}function w5(){return{entries:x5.flatMap(n=>v5.flatMap(e=>y5.flatMap(t=>b5.map(i=>({labels:[{key:"dodge_state",value:n},{key:"height_band",value:e},{key:"kind",value:t},{key:"surface",value:i}],count:0}))))).sort((n,e)=>JSON.stringify(n.labels).localeCompare(JSON.stringify(e.labels)))}}function NE(){return{touch_count:0,control_touch_count:0,medium_hit_count:0,hard_hit_count:0,aerial_touch_count:0,high_aerial_touch_count:0,wall_touch_count:0,first_touch_count:0,is_last_touch:!1,last_touch_time:null,last_touch_frame:null,time_since_last_touch:null,frames_since_last_touch:null,last_ball_speed_change:null,max_ball_speed_change:0,cumulative_ball_speed_change:0,total_ball_travel_distance:0,total_ball_advance_distance:0,total_ball_retreat_distance:0,labeled_touch_counts:w5()}}const S5=NE();function wx(){return{stats:NE(),labeledCountsVersion:0,labeledCountsSnapshot:void 0,labeledCountsSnapshotVersion:-1}}function T5(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function M5(n,e){e.sort((s,a)=>s.key===a.key?s.value.localeCompare(a.value):s.key.localeCompare(a.key));const t=n.labeled_touch_counts?.entries??[];n.labeled_touch_counts={entries:t};const i=t.find(s=>s.labels.length===e.length&&s.labels.every((a,r)=>a.key===e[r]?.key&&a.value===e[r]?.value));i?i.count+=1:(t.push({labels:e,count:1}),t.sort((s,a)=>JSON.stringify(s.labels).localeCompare(JSON.stringify(a.labels))))}function E5(n){return{entries:n.entries.map(e=>({labels:e.labels.map(t=>({...t})),count:e.count}))}}function ed(n,e){return n.tags?.find(t=>t.group===e)?.value??null}function C5(n,e,t){const i=ed(e,"kind")??"control",s=ed(e,"height_band")??"ground",a=ed(e,"surface")??"ground",r=ed(e,"dodge_state")??"no_dodge",o=n.stats;o.touch_count+=1,i==="control"?o.control_touch_count+=1:i==="medium_hit"?o.medium_hit_count+=1:i==="hard_hit"&&(o.hard_hit_count+=1),s==="low_air"?o.aerial_touch_count+=1:s==="high_air"&&(o.aerial_touch_count+=1,o.high_aerial_touch_count+=1),a==="wall"&&(o.wall_touch_count+=1),M5(o,[{key:"kind",value:i},{key:"height_band",value:s},{key:"surface",value:a},{key:"dodge_state",value:r}]),n.labeledCountsVersion+=1,o.last_touch_time=e.time,o.last_touch_frame=e.frame,o.time_since_last_touch=Math.max(0,FE(t.time,e.time)),o.frames_since_last_touch=Math.max(0,t.frame_number-e.frame),o.last_ball_speed_change=e.ball_speed_change,o.max_ball_speed_change=Math.max(o.max_ball_speed_change,e.ball_speed_change),o.cumulative_ball_speed_change=wd(o.cumulative_ball_speed_change,e.ball_speed_change)}function A5(n){return n.labeledCountsSnapshotVersion!==n.labeledCountsVersion&&(n.labeledCountsSnapshot=n.stats.labeled_touch_counts?E5(n.stats.labeled_touch_counts):void 0,n.labeledCountsSnapshotVersion=n.labeledCountsVersion),n.labeledCountsSnapshot}function R5(n,e){if(!e){Object.assign(n,S5);return}Object.assign(n,e.stats,{labeled_touch_counts:A5(e)})}function P5(n){const e=UE(n);for(const t of n.frames)e.applyFrame(t);return n}function UE(n){const e=T5(be(n,"touch")),t=e.flatMap(o=>o.ball_movement?[{player:o.player,movement:o.ball_movement}]:[]).sort((o,l)=>o.movement.end_frame!==l.movement.end_frame?o.movement.end_frame-l.movement.end_frame:o.movement.end_time-l.movement.end_time);let i=0,s=0,a=null;const r=new Map;return{applyFrame(o){if(!o.is_live_play)a=null;else{for(const l of r.values()){const c=l.stats;c.is_last_touch=!1,c.last_touch_time!=null&&(c.time_since_last_touch=Math.max(0,FE(o.time,c.last_touch_time))),c.last_touch_frame!=null&&(c.frames_since_last_touch=Math.max(0,o.frame_number-c.last_touch_frame))}for(;i({event:e,index:t})).sort((e,t)=>e.event.resolved_frame!==t.event.resolved_frame?e.event.resolved_frame-t.event.resolved_frame:e.event.resolved_time!==t.event.resolved_time?e.event.resolved_time-t.event.resolved_time:e.index-t.index).map(({event:e})=>e)}function k5(n,e,t){n.is_last_whiff=!1,n.time_since_last_whiff=n.last_whiff_time==null?null:Math.max(0,t-n.last_whiff_time),n.frames_since_last_whiff=n.last_whiff_frame==null?null:Math.max(0,e-n.last_whiff_frame)}function D5(n,e,t,i){if((e.kind??"whiff")==="beaten_to_ball"){n.beaten_to_ball_count+=1;return}n.whiff_count+=1,e.aerial?n.aerial_whiff_count+=1:n.grounded_whiff_count+=1,e.dodge_active&&(n.dodge_whiff_count+=1),n.is_last_whiff=!0,n.last_whiff_time=e.time,n.last_whiff_frame=e.frame,n.time_since_last_whiff=Math.max(0,i-e.time),n.frames_since_last_whiff=Math.max(0,t-e.frame),n.last_closest_approach_distance=e.closest_approach_distance,n.best_closest_approach_distance=n.best_closest_approach_distance==null?e.closest_approach_distance:Math.min(n.best_closest_approach_distance,e.closest_approach_distance),n.cumulative_closest_approach_distance+=e.closest_approach_distance}function Sx(n,e){Object.assign(n,e??N_())}function O5(n){const e=BE(n);for(const t of n.frames)e.applyFrame(t);return n}function BE(n){const e=L5(be(n,"whiff"));let t=0,i=null;const s=new Map,a=new Map;return{applyFrame(r){if(r.is_live_play){for(const o of s.values())k5(o,r.frame_number,r.time);for(;t({event:e,index:t})).sort((e,t)=>{const i=e.event.sample_frame??e.event.frame,s=t.event.sample_frame??t.event.frame;if(i!==s)return i-s;const a=e.event.sample_time??e.event.time,r=t.event.sample_time??t.event.time;return a!==r?a-r:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index}).map(({event:e})=>e)}function U5(n,e,t,i){n.is_last_wall_aerial=i,n.time_since_last_wall_aerial=n.last_wall_aerial_time==null?null:Math.max(0,zE(t,n.last_wall_aerial_time)),n.frames_since_last_wall_aerial=n.last_wall_aerial_frame==null?null:Math.max(0,e-n.last_wall_aerial_frame)}function B5(n,e,t,i){n.count+=1,e.confidence>=F5&&(n.high_confidence_count+=1),n.is_last_wall_aerial=!0,n.last_wall_aerial_time=e.time,n.last_wall_aerial_frame=e.frame,n.time_since_last_wall_aerial=Math.max(0,zE(i,e.time)),n.frames_since_last_wall_aerial=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=td(n.cumulative_confidence,e.confidence),n.cumulative_setup_duration=td(n.cumulative_setup_duration,e.setup_duration),n.cumulative_takeoff_to_touch_time=td(n.cumulative_takeoff_to_touch_time,e.time_since_takeoff),n.cumulative_touch_height=td(n.cumulative_touch_height,e.player_position[2]??0)}function z5(n,e){Object.assign(n,e??HE())}function H5(n){const e=VE(n);for(const t of n.frames)e.applyFrame(t);return n}function VE(n){const e=N5(be(n,"wall_aerial"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)U5(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{for(;t({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function $5(n,e,t,i){n.is_last_wall_aerial_shot=i,n.time_since_last_wall_aerial_shot=n.last_wall_aerial_shot_time==null?null:Math.max(0,GE(t,n.last_wall_aerial_shot_time)),n.frames_since_last_wall_aerial_shot=n.last_wall_aerial_shot_frame==null?null:Math.max(0,e-n.last_wall_aerial_shot_frame)}function W5(n,e,t,i){n.count+=1,e.confidence>=V5&&(n.high_confidence_count+=1),n.is_last_wall_aerial_shot=!0,n.last_wall_aerial_shot_time=e.time,n.last_wall_aerial_shot_frame=e.frame,n.time_since_last_wall_aerial_shot=Math.max(0,GE(i,e.time)),n.frames_since_last_wall_aerial_shot=Math.max(0,t-e.frame),n.last_confidence=e.confidence,n.best_confidence=Math.max(n.best_confidence,e.confidence),n.cumulative_confidence=Mm(n.cumulative_confidence,e.confidence),n.cumulative_takeoff_to_shot_time=Mm(n.cumulative_takeoff_to_shot_time,e.time_since_takeoff),n.cumulative_shot_height=Mm(n.cumulative_shot_height,e.player_position[2]??0)}function X5(n,e){Object.assign(n,e??$E())}function K5(n){const e=WE(n);for(const t of n.frames)e.applyFrame(t);return n}function WE(n){const e=G5(be(n,"wall_aerial_shot"));let t=0,i=null;const s=new Map;return{applyFrame(a){for(const[r,o]of s)$5(o,a.frame_number,a.time,a.is_live_play&&r===i);if(!a.is_live_play)i=null;else{let r=!1;for(;t[f.frame_number,p])),a=new Map,r={...n,frames:[]},o=Z5.flatMap(f=>f.createFrameAccumulator?[f.createFrameAccumulator(r)]:[]),l=Math.max(1,t.materializationChunkSize??q5),c=Math.max(l,t.maxMaterializationChunkSize??Y5);let u=-1,d=l;const h=f=>{if(f<=u)return;const p=Math.min(i.length-1,Math.max(f,u+d));for(let g=u+1;g<=p;g+=1){const _=i[g],m=_?tV(eV(_)):void 0;if(m){for(const v of o)v.applyFrame(m);a.set(m.frame_number,m)}}u=p,d=Math.min(c,i.length,d*j5)};return{get(f){const p=s.get(f);if(p!==void 0)return h(p),a.get(f)}}}function Q5(n){return!n||typeof n!="object"?n:{...n}}function eV(n){return{...n,team_zero:{...n.team_zero},team_one:{...n.team_one},players:n.players.map(e=>({...e,player_id:Q5(e.player_id)}))}}function tV(n){return{...n,team_zero:Vo(n.team_zero??{}),team_one:Vo(n.team_one??{}),players:n.players.map(t=>_y(t))}}function yc(n){return n.events?.events??[]}function be(n,e){return yc(n).filter(t=>t.payload.kind===e).map(t=>t.payload.payload)}const nV=new Set(["is_team_0","name","player_id"]);function Ex(n){return!!n&&typeof n=="object"&&!Array.isArray(n)&&Object.keys(n).length===0}function iV(n){return!n||typeof n!="object"||Array.isArray(n)?!1:Object.keys(n).every(e=>nV.has(e))}function sV(n){return Ex(n.team_zero)&&Ex(n.team_one)&&n.players.every(e=>iV(e))}function aV(n){return new Map(IM(n).frames.map(e=>[e.frame_number,e]))}function XE(n,e,t){const i=n.frames.filter(s=>sV(s)).length;if(i===n.frames.length)return J5(n,e,t);if(i>0)throw new Error("stats timeline frames must be either all compact scaffolds or all materialized snapshots");return aV(n)}function Ht(n,e){return n.get(e)??null}const gy=[{stage:"validating",index:1,total:9,label:"Parse replay",start:0,end:.08},{stage:"processing",index:2,total:9,label:"Process replay frames",start:.08,end:.62},{stage:"building-stats",index:3,total:9,label:"Build stats events",start:.62,end:.7},{stage:"serializing-replay",index:4,total:9,label:"Serialize replay data",start:.7,end:.76},{stage:"serializing-stats",index:5,total:9,label:"Serialize stats timeline",start:.76,end:.86},{stage:"normalizing",index:6,total:9,label:"Normalize replay model",start:.86,end:.91},{stage:"decoding-replay",index:7,total:9,label:"Decode replay data",start:.91,end:.94},{stage:"decoding-stats",index:8,total:9,label:"Decode stats chunks",start:.94,end:.96},{stage:"deriving-stats",index:9,total:9,label:"Derive stats snapshots",start:.96,end:1}];function KE(n){return Math.max(0,Math.min(1,n))}function Em(n,e,t){if(n!==void 0)return KE((n-e)/(t-e))}function yy(n){if(n.stage!=="stats-timeline")return n;const e=n.progress;return e===void 0?{...n,stage:"building-stats"}:e<.35?{...n,stage:"building-stats",progress:Em(e,0,.35)}:e<.55?{...n,stage:"serializing-replay",progress:Em(e,.35,.55)}:{...n,stage:"serializing-stats",progress:Em(e,.55,.92)}}function qE(n){const e=yy(n);return gy.find(t=>t.stage===e.stage)}function rV(){return gy.map(({stage:n,index:e,total:t,label:i})=>({stage:n,index:e,total:t,label:i}))}function oV(n){const e=qE(n);return{stage:e.stage,index:e.index,total:e.total,label:e.label}}function lV(n){const e=yy(n),t=qE(e);return gy.map(({stage:i,index:s,total:a,label:r})=>{if(st.index)return{stage:i,index:s,total:a,label:r,state:"pending",completion:0,indeterminate:!1};const o=e.progress!==void 0;return{stage:i,index:s,total:a,label:r,state:"active",completion:o?KE(e.progress??0):1,indeterminate:!o}})}function Qo(n){const e=yy(n),t=e.progress===void 0?null:Math.round(e.progress*100);switch(e.stage){case"validating":return"Parsing replay...";case"processing":return t!==null&&e.totalFrames!==void 0?`Processing replay frames... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:"Processing replay frames...";case"building-stats":return t!==null?e.totalFrames!==void 0?`Building stats events... ${t}% (${e.processedFrames??0}/${e.totalFrames})`:`Building stats events... ${t}%`:"Building stats events...";case"serializing-replay":return t!==null?`Serializing replay data... ${t}%`:"Serializing replay data...";case"serializing-stats":return t!==null?`Serializing stats timeline... ${t}%`:"Serializing stats timeline...";case"decoding-replay":return t!==null?`Decoding replay data... ${t}%`:"Decoding replay data...";case"decoding-stats":return t!==null?e.totalChunks!==void 0?`Decoding stats chunks... ${t}% (${e.processedChunks??0}/${e.totalChunks})`:`Decoding stats chunks... ${t}%`:"Decoding stats chunks...";case"deriving-stats":return t!==null?`Deriving stats snapshots... ${t}%`:"Deriving stats snapshots...";case"normalizing":return t!==null?`Normalizing replay model... ${t}%`:"Normalizing replay model...";default:return"Loading replay..."}}function cV(n){return n instanceof Error?n:new Error(String(n))}function Fs(n,e){return JSON.parse(n.decode(new Uint8Array(e)))}async function uV(n,e,t){t?.({stage:"decoding-stats",progress:0});const i=Fs(n,e.configBuffer);t?.({stage:"decoding-stats",progress:.05}),await rr();const s=Fs(n,e.replayMetaBuffer);t?.({stage:"decoding-stats",progress:.1}),await rr();const a=Fs(n,e.eventsBuffer),r=Fs(n,e.activitySummaryBuffer),o=Fs(n,e.positioningSummaryBuffer),l=Fs(n,e.accumulationTracksBuffer);t?.({stage:"decoding-stats",progress:.15}),await rr();const c=[],u=e.frameChunkBuffers.length;for(let d=0;d{let t=!1,i=null;const s=()=>{t||(t=!0,i!==null&&clearTimeout(i),e())};i=setTimeout(s,n),requestAnimationFrame(()=>s())})}async function kf(n,e={}){if(typeof Worker>"u")throw new Error("Replay loading worker is not available in this environment");const t=new Worker(new URL(""+new URL("replayLoader.worker-BOmyAjmY.js",import.meta.url).href,import.meta.url),{type:"module"}),i=n.slice(),s=e.reportEveryNFrames??100;return new Promise((a,r)=>{const o=()=>{t.terminate()};t.onmessage=async c=>{const u=c.data;if(u.type==="progress"){e.onProgress?.(u.progress);return}if(u.type==="error"){o(),r(new Error(u.error));return}o();try{const d=new TextDecoder;e.onProgress?.({stage:"decoding-replay",progress:0}),await rr();const h=Fs(d,u.replayBuffer);e.onProgress?.({stage:"decoding-replay",progress:.5}),await rr();const f=Fs(d,u.rawReplayBuffer);e.onProgress?.({stage:"decoding-replay",progress:1}),await rr();const p=await uV(d,u.statsTimelineParts,e.onProgress),g=XE(p);a({replay:h,raw:f,statsTimeline:p,statsFrameLookup:g})}catch(d){r(cV(d))}},t.onerror=c=>{o(),r(new Error(c.message||"Replay loading worker failed"))};const l={type:"load-replay",bytes:i.buffer,reportEveryNFrames:s};t.postMessage(l,[i.buffer])})}function dV(n){const e=document.createElement("div");e.className="replay-load-modal",e.hidden=!0;const t=document.createElement("div");t.className="replay-load-modal__dialog",t.setAttribute("role","dialog"),t.setAttribute("aria-modal","true"),t.setAttribute("aria-labelledby","replay-load-modal-title");const i=document.createElement("p");i.className="replay-load-modal__eyebrow",i.textContent="Replay loading";const s=document.createElement("h2");s.id="replay-load-modal-title",s.className="replay-load-modal__title",s.textContent="Preparing replay pipeline";const a=document.createElement("p");a.className="replay-load-modal__status",a.textContent="Preparing replay...";const r=document.createElement("div");r.className="replay-load-modal__phase-list";const o=new Map;for(const f of rV()){const p=document.createElement("div");p.className="replay-load-modal__phase-row",p.dataset.state="pending";const g=document.createElement("p");g.className="replay-load-modal__phase-label",g.textContent=`${f.index}. ${f.label}`;const _=document.createElement("div");_.className="replay-load-modal__phase-bar";const m=document.createElement("div");m.className="replay-load-modal__phase-fill",m.dataset.indeterminate="false",_.append(m),p.append(g,_),r.append(p),o.set(f.stage,{row:p,fill:m})}const l=document.createElement("p");l.className="replay-load-modal__meta",t.append(i,s,a,r,l),e.append(t),n.append(e);let c="";const u=()=>{for(const{row:f,fill:p}of o.values())f.dataset.state="pending",p.style.width="0%",p.dataset.indeterminate="false"},d=f=>{for(const p of lV(f)){const g=o.get(p.stage);g&&(g.row.dataset.state=p.state,g.fill.dataset.indeterminate=p.indeterminate?"true":"false",g.fill.style.width=`${Math.round(p.completion*100)}%`)}},h=f=>{e.hidden=!f};return{show(f,p="Preparing replay..."){c=f,h(!0),u(),s.textContent="Preparing replay pipeline",a.textContent=p,l.textContent=`Loading ${f}`},update(f){h(!0);const p=oV(f);if(d(f),s.textContent=`Phase ${p.index} of ${p.total}: ${p.label}`,a.textContent=Qo(f),f.stage==="processing"&&f.totalFrames!==void 0){l.textContent=`${f.processedFrames??0}/${f.totalFrames} frames`;return}if(f.stage==="decoding-stats"&&f.totalChunks!==void 0){l.textContent=`${f.processedChunks??0}/${f.totalChunks} chunks`;return}l.textContent=c?`Loading ${c}`:""},hide(){h(!1)},destroy(){e.remove()}}}const hV=["free","follow"];function YE(n){return n.useReplayBallCam??!1?"player":n.ballCamEnabled?"on":"off"}function Cx(n){return n.useReplayBallCam?"player":n.ballCam===!0?"on":n.ballCam===!1?"off":"player"}const jE={fov:110,height:100,pitch:-4,distance:270,stiffness:0,swivelSpeed:1,transitionSpeed:1};class vy{constructor(e){this.options=e}lastFreeCameraPreset=null;get freeCameraPreset(){return this.lastFreeCameraPreset}set freeCameraPreset(e){this.lastFreeCameraPreset=e}ballCamModeValue="player";get ballCamMode(){return this.ballCamModeValue}autoPossessionEnabledValue=!1;get autoPossessionEnabled(){return this.autoPossessionEnabledValue}static ballCamEnabledForMode(e){return e==="player"?null:e==="on"}followPlayerWithReplayCamera(e,t={}){const i=this.options.getReplayPlayer();i&&(t.preserveAutoPossession||this.setAutoPossessionEnabled(!1,{requestConfigSync:!1}),i.setAttachedPlayer(e),i.setCameraViewMode("follow"),t.usePlayerCameraSettings!==!1&&i.setCustomCameraSettings(null),this.setBallCamMode(t.ballCam??"player"),this.lastFreeCameraPreset=null,t.requestConfigSync!==!1&&this.options.requestConfigSync())}setAutoPossessionEnabled(e,t={}){if(this.autoPossessionEnabledValue===e){this.renderAutoPossessionButton();return}this.autoPossessionEnabledValue=e,this.renderAutoPossessionButton(),t.notify!==!1&&this.options.onAutoPossessionChange?.(e),t.requestConfigSync!==!1&&this.options.requestConfigSync()}renderBallCamButtons(){const{ballCamOffButton:e,ballCamOnButton:t,ballCamPlayerButton:i}=this.options.elements,s=[["off",e],["on",t],["player",i]];for(const[a,r]of s){const o=a===this.ballCamModeValue;r.dataset.active=o?"true":"false",r.setAttribute("aria-pressed",o?"true":"false")}}renderAutoPossessionButton(){this.options.elements.cameraViewAutoPossession.checked=this.autoPossessionEnabledValue}disableAutoPossessionForManualCameraControl(){this.setAutoPossessionEnabled(!1,{requestConfigSync:!1})}setBallCamMode(e){this.ballCamModeValue=e,this.options.getReplayPlayer()?.setBallCamEnabled(vy.ballCamEnabledForMode(e)),this.renderBallCamButtons()}get nameplateLiftUu(){const e=Number(this.options.elements.nameplateLift.value);return Number.isFinite(e)?e:g_}applyNameplateLiftUu(e){const{nameplateLift:t,nameplateLiftReadout:i}=this.options.elements,s=e??g_;t.value=`${s}`,i.textContent=Jn(s,"",0)}installEventListeners(e){const{elements:t}=this.options;t.usePlayerCameraSettings.addEventListener("change",()=>{const s=t.usePlayerCameraSettings.checked;t.cameraSettingsControls.hidden=s,this.options.getReplayPlayer()?.setCustomCameraSettings(s?null:this.readCustomCameraSettings()),this.options.requestConfigSync()},{signal:e});for(const s of[t.customCameraFov,t.customCameraHeight,t.customCameraPitch,t.customCameraDistance,t.customCameraStiffness,t.customCameraSwivelSpeed,t.customCameraTransitionSpeed])s.addEventListener("input",()=>{const a=this.readCustomCameraSettings();this.syncCustomCameraSettingControls(a),this.options.getReplayPlayer()?.setCustomCameraSettings(a),this.options.requestConfigSync()},{signal:e});t.attachedPlayer.addEventListener("change",()=>{const s=this.options.getReplayPlayer(),a=t.attachedPlayer.value||null;this.disableAutoPossessionForManualCameraControl(),s?.setAttachedPlayer(a),a&&(s?.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFreeButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setCameraViewMode("free"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewFollowButton.addEventListener("click",()=>{const s=this.options.getReplayPlayer();this.disableAutoPossessionForManualCameraControl(),s?.setCameraViewMode("follow"),s?.getState().attachedPlayerId&&(s.setCustomCameraSettings(null),this.setBallCamMode("player")),this.lastFreeCameraPreset=null,this.options.requestConfigSync()},{signal:e}),t.cameraViewOverheadButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("overhead"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="overhead",this.options.requestConfigSync()},{signal:e}),t.cameraViewSideButton.addEventListener("click",()=>{this.options.getReplayPlayer()?.setFreeCameraPreset("side"),this.disableAutoPossessionForManualCameraControl(),this.lastFreeCameraPreset="side",this.options.requestConfigSync()},{signal:e});const i=[["off",t.ballCamOffButton],["on",t.ballCamOnButton],["player",t.ballCamPlayerButton]];for(const[s,a]of i)a.addEventListener("click",()=>{this.setBallCamMode(s),this.options.requestConfigSync()},{signal:e});t.cameraViewAutoPossession.addEventListener("change",()=>{this.setAutoPossessionEnabled(t.cameraViewAutoPossession.checked)},{signal:e}),t.nameplateLift.addEventListener("input",()=>{t.nameplateLiftReadout.textContent=Jn(this.nameplateLiftUu,"",0),this.options.requestConfigSync()},{signal:e})}setTransportEnabled(e,t){this.options.elements.attachedPlayer.disabled=!e,this.syncModeButtons(e?t:void 0)}syncState(e){const{elements:t}=this.options;t.usePlayerCameraSettings.checked=e.customCameraSettings===null,t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,this.syncCustomCameraSettingControls(e.customCameraSettings??this.getFallbackCameraSettings()),this.ballCamModeValue=YE(e),this.renderBallCamButtons(),t.attachedPlayer.value=e.attachedPlayerId??"",this.syncAvailability(e),this.renderProfile(e)}syncAvailability(e){this.syncModeButtons(e);const i=this.options.getReplayPlayer()!==null&&e?.cameraViewMode==="follow"&&(e.attachedPlayerId??null)!==null;this.options.elements.usePlayerCameraSettings.disabled=!i,this.setCameraSettingControlsEnabled(i&&e?.customCameraSettings!==null),this.options.elements.ballCamOffButton.disabled=!i,this.options.elements.ballCamOnButton.disabled=!i,this.options.elements.ballCamPlayerButton.disabled=!i,this.renderBallCamButtons()}syncModeButtons(e){const t=e?.cameraViewMode??"free",i=this.options.getReplayPlayer()!==null&&e!==void 0,s=(e?.attachedPlayerId??null)!==null;for(const l of hV){const c=this.getCameraViewButton(l);c.disabled=!i||l==="follow"&&!s;const u=l===t;c.dataset.active=u?"true":"false",c.setAttribute("aria-pressed",u?"true":"false")}const{cameraViewOverheadButton:a,cameraViewSideButton:r}=this.options.elements,{cameraViewAutoPossession:o}=this.options.elements;a.disabled=!i,r.disabled=!i,o.disabled=!i,a.dataset.active="false",r.dataset.active="false",this.renderAutoPossessionButton(),a.setAttribute("aria-pressed","false"),r.setAttribute("aria-pressed","false")}populateAttachedPlayerOptions(e){const{attachedPlayer:t}=this.options.elements;t.replaceChildren(),t.append(new Option("Free camera",""));for(const i of e)t.append(new Option(`${i.name} (${i.isTeamZero?"Blue":"Orange"})`,i.id))}renderProfile(e){const t=this.options.elements,i=this.options.getReplayPlayer(),s=e?.attachedPlayerId??null;if(!i||e?.cameraViewMode!=="follow"||s===null){this.renderEmptyProfile("Free camera");return}const a=i.replay.players.find(o=>o.id===s);if(!a){this.renderEmptyProfile("Unknown");return}const r=this.getEffectiveCameraSettings(e);t.cameraProfileReadout.textContent=e.customCameraSettings===null?a.name:`${a.name} custom`,t.cameraFovReadout.textContent=Jn(r.fov,"",0),t.cameraHeightReadout.textContent=Jn(r.height,"",0),t.cameraPitchReadout.textContent=Jn(r.pitch,"",0),t.cameraBaseDistanceReadout.textContent=Jn(r.distance,"",0),t.cameraStiffnessReadout.textContent=Jn(r.stiffness,"",2)}getFallbackCameraSettings(){return jE}getAttachedPlayerCameraSettings(e){const t=this.options.getReplayPlayer();return!t||e===null?null:t.replay.players.find(i=>i.id===e)?.cameraSettings??null}getEffectiveCameraSettings(e){return{...this.getFallbackCameraSettings(),...this.getAttachedPlayerCameraSettings(e.attachedPlayerId)??{},...e.customCameraSettings??{}}}readCustomCameraSettings(){const e=this.options.elements;return{fov:Number(e.customCameraFov.value),height:Number(e.customCameraHeight.value),pitch:Number(e.customCameraPitch.value),distance:Number(e.customCameraDistance.value),stiffness:Number(e.customCameraStiffness.value),swivelSpeed:Number(e.customCameraSwivelSpeed.value),transitionSpeed:Number(e.customCameraTransitionSpeed.value)}}setCameraSettingControlsEnabled(e){const t=this.options.elements;t.cameraSettingsControls.hidden=t.usePlayerCameraSettings.checked,t.customCameraFov.disabled=!e,t.customCameraHeight.disabled=!e,t.customCameraPitch.disabled=!e,t.customCameraDistance.disabled=!e,t.customCameraStiffness.disabled=!e,t.customCameraSwivelSpeed.disabled=!e,t.customCameraTransitionSpeed.disabled=!e}syncCustomCameraSettingControls(e){const t=this.options.elements,i=this.getFallbackCameraSettings(),s=e.fov??i.fov,a=e.height??i.height,r=e.pitch??i.pitch,o=e.distance??i.distance,l=e.stiffness??i.stiffness,c=e.swivelSpeed??i.swivelSpeed,u=e.transitionSpeed??i.transitionSpeed;t.customCameraFov.value=`${s}`,t.customCameraHeight.value=`${a}`,t.customCameraPitch.value=`${r}`,t.customCameraDistance.value=`${o}`,t.customCameraStiffness.value=`${l}`,t.customCameraSwivelSpeed.value=`${c}`,t.customCameraTransitionSpeed.value=`${u}`,t.customCameraFovReadout.textContent=Jn(s,"",0),t.customCameraHeightReadout.textContent=Jn(a,"",0),t.customCameraPitchReadout.textContent=Jn(r,"",0),t.customCameraDistanceReadout.textContent=Jn(o,"",0),t.customCameraStiffnessReadout.textContent=Jn(l,"",2),t.customCameraSwivelSpeedReadout.textContent=Jn(c,"",1),t.customCameraTransitionSpeedReadout.textContent=Jn(u,"",2)}getCameraViewButton(e){switch(e){case"free":return this.options.elements.cameraViewFreeButton;case"follow":return this.options.elements.cameraViewFollowButton}}renderEmptyProfile(e){const t=this.options.elements;t.cameraProfileReadout.textContent=e,t.cameraFovReadout.textContent="--",t.cameraHeightReadout.textContent="--",t.cameraPitchReadout.textContent="--",t.cameraBaseDistanceReadout.textContent="--",t.cameraStiffnessReadout.textContent="--"}}function Jn(n,e="",t=0){return n===void 0||Number.isNaN(n)?"--":`${n.toFixed(t)}${e}`}function fV(n){return new vy(n)}const Ax="subtr-actor-touch-overlay-styles",by=5882879,xy=16761180,Rx=120,Px=4,pV=196,Cm=24,Ix=210,Lx=5,mV=.1,_V=48,gV=["team","intention","kind","height_band","surface","dodge_state","flag"],yV=[{label:"Blue team",color:by},{label:"Orange team",color:xy}],ZE=[{label:"Shot",color:16711880},{label:"Save",color:58998},{label:"Clear",color:16764928},{label:"Boom",color:16020150},{label:"Pass",color:47103},{label:"Control",color:0},{label:"Advance",color:16486972}],Sd=[{label:"Control",color:0},{label:"Medium hit",color:16436245},{label:"Hard hit",color:16735596}],Td=[{label:"Ground",color:10741301},{label:"Low air",color:3718648},{label:"High air",color:8490232}],JE=[{label:"Ground",color:8702998},{label:"Air",color:6333946},{label:"Wall",color:16347926}],U_=[{label:"No dodge",color:9741240},{label:"Dodge",color:15235577}],B_=[{label:"First touch",color:16777215},{label:"Contested",color:15680580}],vV=[{title:"Team",entries:yV},{title:"Intention",entries:ZE},{title:"Hit strength",entries:Sd},{title:"Height",entries:Td},{title:"Surface",entries:JE},{title:"Dodge",entries:U_},{title:"Flags",entries:B_}];function Fc(n){return Object.fromEntries(n.map(e=>[e.label.toLowerCase().replaceAll(" ","_"),e.color]))}const QE=Fc(ZE),e1={...Fc(Sd),medium_hit:Sd[1].color,hard_hit:Sd[2].color},t1={...Fc(Td),low_air:Td[1].color,high_air:Td[2].color},n1=Fc(JE),i1={...Fc(U_),no_dodge:U_[0].color},z_={first_touch:B_[0].color,contested:B_[1].color},Yi=10134961;function ei(n,e){const t=n.tags;if(!Array.isArray(t))return null;const i=t.find(s=>s.group===e);return i?i.value:null}function s1(n){return ei(n,"possession")??ei(n,"action")}function Ct(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function Am(n,e){return Math.max(0,n-e)}function Md(n){return n==="team"||n==="intention"||n==="kind"||n==="height_band"||n==="surface"||n==="dodge_state"||n==="flag"}function Mo(n){const e=Array.isArray(n)?n:n?[n]:["team"],t=new Set,i=[];for(const s of e)Md(s)&&!t.has(s)&&(t.add(s),i.push(s));return i.length>0?i:["team"]}function a1(n){return n[n.length-1]??"team"}function bV(n,e,t){const i=xV(n,a1(t)),s=i?` · ${i.replaceAll("_"," ")}`:"";if(e==="markers")return`${n.playerName}${s}`;const a=Math.round(n.totalBallAdvanceDistance),r=Math.round(n.totalBallRetreatDistance);return a>0&&r>0?`${n.playerName} +${a} / -${r} uu${s}`:r>0?`${n.playerName} -${r} uu${s}`:`${n.playerName} +${a} uu${s}`}function xV(n,e){return e==="intention"?n.intention:e==="kind"?n.kind:e==="height_band"?n.heightBand:e==="surface"?n.surface:e==="dodge_state"?n.dodgeState:e==="flag"?n.contested?"contested":n.firstTouch?"first_touch":null:null}function wV(n){return n.split("_").filter(Boolean).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function Sl(n,e,t){return typeof e!="string"||e.length===0?null:{key:n,value:e,label:wV(e),color:t[e]??Yi}}function kx(n,e,t){return e!==!0?null:{key:n,value:"true",label:t,color:z_[n]??Yi}}function SV(n){const e=ei(n,"reception")==="first_touch",t=ei(n,"contested")!=null;return[Sl("intention",s1(n),QE),Sl("kind",ei(n,"kind"),e1),Sl("height_band",ei(n,"height_band"),t1),Sl("surface",ei(n,"surface"),n1),Sl("dodge_state",ei(n,"dodge_state"),i1),kx("first_touch",e,"First touch"),kx("contested",t,"Contested")].filter(i=>i!=null)}function r1(n,e){return e==="intention"?QE[n.intention??""]??Yi:e==="kind"?e1[n.kind??""]??Yi:e==="height_band"?t1[n.heightBand??""]??Yi:e==="surface"?n1[n.surface??""]??Yi:e==="dodge_state"?i1[n.dodgeState??""]??Yi:e==="flag"?n.contested?z_.contested??Yi:n.firstTouch?z_.first_touch??Yi:Yi:n.isTeamZero?by:xy}function TV(n,e){return(e.length>0?e:["team"]).map(i=>r1(n,i))}function o1(n,e){const t=[],i=[...be(n,"touch")].sort((s,a)=>s.frame!==a.frame?s.frame-a.frame:s.time!==a.time?s.time-a.time:0);for(const s of i){const a=Ct(s.player),r=e.ballFrames[s.frame]?.position;if(!r)continue;const o=s.ball_movement,c=(o?e.ballFrames[o.end_frame]?.position:null)??r,u=t.length,d=SV(s);t.push({id:`touch-stat:${s.frame}:${a}:${u+1}`,time:e.frames[s.frame]?.time??s.time,frame:s.frame,isTeamZero:s.is_team_0,playerId:a,playerName:e.players.find(h=>h.id===a)?.name??a,kind:ei(s,"kind"),intention:s1(s),heightBand:ei(s,"height_band"),surface:ei(s,"surface"),dodgeState:ei(s,"dodge_state"),firstTouch:ei(s,"reception")==="first_touch",contested:ei(s,"contested")!=null,classifications:d,position:{x:r.x,y:r.y,z:r.z},endPosition:{x:c.x,y:c.y,z:c.z},totalBallTravelDistance:o?Am(o.travel_distance,0):0,totalBallAdvanceDistance:o?Am(o.advance_distance,0):0,totalBallRetreatDistance:o?Am(o.retreat_distance,0):0})}return t}function MV(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function EV(){if(document.getElementById(Ax))return;const n=document.createElement("style");n.id=Ax,n.textContent=` .sap-touch-overlay-root { position: absolute; inset: 0; @@ -5504,45 +5569,45 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function KH(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}function ZE(n){return[n.line.material,n.cone.material].flatMap(e=>Array.isArray(e)?e:[e])}function Mx(n,e){for(const t of ZE(n))t.transparent=!0,t.opacity=e,t.depthWrite=!1,t.depthTest=!1}function Ex(n){n.removeFromParent(),n.line.geometry.dispose(),n.cone.geometry.dispose();for(const e of ZE(n))e.dispose()}function D_(n){for(const e of n.ringSegments){e.removeFromParent(),e.geometry.dispose();const t=Array.isArray(e.material)?e.material:[e.material];for(const i of t)i.dispose()}n.ringSegments=[],n.ringColorsKey=""}function qH(n,e,t){const i=new oi(e,t,48,1),s=new je({color:n,transparent:!0,opacity:.7,side:ut,depthWrite:!1,depthTest:!1}),a=new Se(i,s);return a.rotation.x=-Math.PI/2,a.renderOrder=40,a}function YH(n,e){const t=e.length>0?e:[qi],i=t.join("|");if(n.ringColorsKey===i)return;D_(n);const s=t.length,a=xx*Math.max(0,s-1),r=(DH-bx-a)/s,o=t.map((l,c)=>{const u=bx+c*(r+xx);return qH(l,u,u+r)});for(const l of o)n.ring.add(l),n.ringSegments.push(l);n.ringColorsKey=i}function jH(n,e){for(const t of n.ringSegments){const i=Array.isArray(t.material)?t.material:[t.material];for(const s of i)s.opacity=e}}class ZH{scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;arrowStart=new T;arrowEnd=new T;arrowDirection=new T;labelOffset=new T(0,0,wx);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=Sx;mode="markers";colorModes=["team"];constructor(e,t,i,s,a){XH(),this.scene=e,this.container=t,this.decaySeconds=Math.max(.1,a?.decaySeconds??Sx),this.mode=a?.mode??"markers",this.colorModes=So(a?.colorModes??a?.colorMode),this.labelOffset.set(0,0,wx),this.markers=jE(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="touch-event-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-touch-overlay-root",this.container.append(this.labelRoot)}getDecaySeconds(){return this.decaySeconds}setDecaySeconds(e){this.decaySeconds=Math.max(.1,e)}getMode(){return this.mode}setMode(e){this.mode=e}getColorModes(){return[...this.colorModes]}setColorMode(e){this.setColorModes([e])}setColorModes(e){this.colorModes=So([...e])}update(e){const t=WH(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),D_(a),Ex(a.arrow),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.1+.6*r,c=.95+(1-r)*.28,u=qE(this.colorModes),d=YE(s,u),h=$H(s,this.colorModes);YH(o,h),jH(o,l),o.arrow.setColor(d),o.ring.position.set(s.position.x,s.position.y,s.position.z+bm),o.ring.scale.setScalar(c),o.label.textContent=zH(s,this.mode,this.colorModes),o.label.classList.toggle("sap-touch-overlay-label-advancement",this.mode==="advancement");const f=u==="team";o.label.classList.toggle("sap-touch-overlay-label-blue",f&&s.isTeamZero),o.label.classList.toggle("sap-touch-overlay-label-orange",f&&!s.isTeamZero),o.label.style.borderColor=f?"":`#${d.toString(16).padStart(6,"0")}cc`,o.label.style.background=f?"":`#${d.toString(16).padStart(6,"0")}66`,this.updateArrow(o,s,l),this.worldPosition.set(s.position.x,s.position.y,s.position.z),this.worldPosition.add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),KH(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.22+.78*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),D_(e),Ex(e.arrow),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Et;i.renderOrder=40,this.group.add(i);const s=new jg(new T(0,1,0),new T,1,e.isTeamZero?fy:py,1,1);s.visible=!1,s.renderOrder=45,s.line.renderOrder=45,s.cone.renderOrder=45,Mx(s,.7),this.group.add(s);const a=document.createElement("div");a.className=`sap-touch-overlay-label ${e.isTeamZero?"sap-touch-overlay-label-blue":"sap-touch-overlay-label-orange"}`,a.textContent=e.playerName,a.hidden=!0,this.labelRoot.append(a);const r={marker:e,ring:i,ringSegments:[],ringColorsKey:"",arrow:s,label:a};return this.views.set(e.id,r),r}updateArrow(e,t,i){if(this.mode!=="advancement"||t.totalBallTravelDistance<=OH){e.arrow.visible=!1;return}this.arrowStart.set(t.position.x,t.position.y,t.position.z+bm*2),this.arrowEnd.set(t.endPosition.x,t.endPosition.y,t.endPosition.z+bm*2),this.arrowDirection.copy(this.arrowEnd).sub(this.arrowStart);const s=this.arrowDirection.length();if(s0&&r>0)return a/r}const t=n.frames[0],i=n.frames.at(-1);if(t&&i){const s=i.frame_number-t.frame_number,a=i.time-t.time;if(s>0&&a>0)return s/a}return tV}function iV(n,e={}){if(!n)return[];const t=e.preRollSeconds??JH,i=e.minPossessionSeconds??QH,s=e.samePlayerBridgeSeconds??eV,a=be(n,"player_possession").map(d=>({playerId:Ct(d.player_id),startFrame:Math.max(0,Math.trunc(xl(d.start_frame))),endFrame:Math.max(0,Math.trunc(xl(d.end_frame))),startTime:xl(d.start_time),endTime:xl(d.end_time),duration:xl(d.duration),sustainedControl:d.sustained_control})).filter(d=>d.endFrame>d.startFrame&&(d.sustainedControl||d.duration>=i)).sort((d,h)=>d.startFrame-h.startFrame||d.endFrame-h.endFrame),r=nV(n,a),o=Math.max(0,Math.round(t*r)),l=Math.max(0,Math.round(s*r)),c=[];let u=null;for(const d of a){let h=Math.max(0,d.startFrame-o);u&&u.playerId!==d.playerId&&(h=Math.max(h,u.endFrame));const f=c.at(-1);if(f&&f.playerId===d.playerId&&h<=f.endFrame+l){c[c.length-1]={...f,endFrame:Math.max(f.endFrame,d.endFrame),possessionEndFrame:Math.max(f.possessionEndFrame,d.endFrame)},u=d;continue}c.push({playerId:d.playerId,startFrame:h,endFrame:d.endFrame,possessionStartFrame:d.startFrame,possessionEndFrame:d.endFrame}),u=d}return c.map((d,h)=>({...d,endFrame:c[h+1]?.startFrame??Number.POSITIVE_INFINITY}))}function sV(n,e){const t=Math.max(0,Math.trunc(e));return n.find(s=>t>=s.startFrame&&tthis.update(i))))}reset(){this.unsubscribeBeforeRender?.(),this.unsubscribeBeforeRender=null,this.sourcePlayer=null,this.sourceTimeline=null,this.spans=[]}syncCurrentFrame(){const e=this.options.getReplayPlayer();if(!e)return;const t=e.getState();this.update({frameIndex:t.frameIndex,nextFrameIndex:t.frameIndex,alpha:0,currentTime:t.currentTime})}update(e){const t=this.options.getCameraControlsController(),i=this.options.getReplayPlayer();if(!t?.autoPossessionEnabled||!i)return;const s=sV(this.spans,e.frameIndex);if(!s||!i.replay.players.some(r=>r.id===s))return;const a=i.getState();a.cameraViewMode==="follow"&&a.attachedPlayerId===s||t.followPlayerWithReplayCamera(s,{ballCam:"player",preserveAutoPossession:!0,requestConfigSync:!1,usePlayerCameraSettings:!1})}}function rV(n){return new aV(n)}const oV=236,mc=4120,lV=2300,cV=16185075,uV=.18,dV=1118481,xd=5882879,wd=16761180,hV=.55,wm=.12,Cx=.28,fV=3,pV=4,Ax=5,Rx=2,mV=6,_V=856343,gV=.42,yV=18,vV=.24,bV=10,Px=220,xV=200,JE=140,wV=220,SV=100,TV=120;function MV(n){const e=xV/2;if(n){const s=-mc+Px,a=-e;return{minX:s,maxX:a,centerX:(s+a)/2,width:a-s}}const t=e,i=mc-Px;return{minX:t,maxX:i,centerX:(t+i)/2,width:i-t}}function EV(n,e,t){if(n.length<2)return[];const i=Math.min(...n),s=Math.max(...n),a=s-i,r=e?-1:1,o=-r;return a<=t?[{kind:"other",centerY:(i+s)/2,halfDepth:Math.max(t-a/2,t*.35),directions:[r,o]}]:[{kind:"back",centerY:e?i:s,halfDepth:t,directions:[r]},{kind:"forward",centerY:e?s:i,halfDepth:t,directions:[o]}]}function CV(n,e){const t=new $s;return t.moveTo(0,e/2),t.lineTo(n/2,-e/2),t.lineTo(-n/2,-e/2),t.closePath(),new vr(t)}function Ix(n){const e=SV*n,t=new je({color:dV,transparent:!0,opacity:.9,side:ut,depthWrite:!1,depthTest:!1}),i=new Et;i.visible=!1;const s=new Nn(JE*.55*n,1),a=new Se(s,t);a.position.z=Ax,a.renderOrder=22,i.add(a);const r=CV(TV*n,e),o=new Se(r,t);return o.position.z=Ax,o.renderOrder=23,i.add(o),{group:i,shaftGeom:s,shaftMesh:a,headGeom:r,headMesh:o,material:t,headLength:e}}function Sm(n,e,t,i){const s=Math.max(t-n.headLength,n.headLength*.2);n.group.position.x=e,n.group.rotation.z=i>0?0:Math.PI,n.shaftMesh.scale.y=s,n.shaftMesh.position.y=-n.headLength/2,n.headMesh.position.y=t/2-n.headLength/2,n.group.visible=!0}function Sh(n){n.group.visible=!1}function so(n,e){const t=new Et;t.visible=!1;const i=new je({color:cV,transparent:!0,opacity:uV,side:ut,depthWrite:!1,depthTest:!1}),s=new Nn(1,1),a=new Se(s,i);a.position.z=fV,a.renderOrder=20,t.add(a);const r=new je({color:e,transparent:!0,opacity:hV,side:ut,depthWrite:!1,depthTest:!1}),o=new Nn(1,1),l=new Se(o,r);l.position.z=pV,l.renderOrder=21,t.add(l);const c=Ix(n),u=Ix(n);return t.add(c.group),t.add(u.group),{group:t,floorGeom:s,floorMesh:a,floorMaterial:i,stripeGeom:o,stripeMesh:l,stripeMaterial:r,primaryMarker:c,secondaryMarker:u}}function AV(n){n.group.visible=!1,Sh(n.primaryMarker),Sh(n.secondaryMarker)}function RV(n,e,t,i){const s=e.halfDepth*2*i,a=mc*2*i,r=t.width*i,o=t.centerX*i,l=JE*i,c=Math.max(s-32*i,n.primaryMarker.headLength*1.15),u=Math.min(c,Math.max(wV*i,s*.6));if(n.group.position.y=e.centerY*i,n.floorMesh.position.x=0,n.floorMesh.scale.set(a,s,1),n.stripeMesh.position.x=o,n.stripeMesh.scale.set(l,s,1),Sh(n.primaryMarker),Sh(n.secondaryMarker),e.directions.length===1)Sm(n.primaryMarker,o,u,e.directions[0]);else{const d=r*.18;Sm(n.primaryMarker,o-d,u,e.directions[0]),Sm(n.secondaryMarker,o+d,u,e.directions[1])}n.group.visible=!0}function Lx(n){n.group.removeFromParent(),n.shaftGeom.dispose(),n.headGeom.dispose(),n.material.dispose()}class PV{replay;blueBack;blueForward;blueOther;orangeBack;orangeForward;orangeOther;constructor(e,t,i){this.replay=t,this.blueBack=so(i,xd),this.blueForward=so(i,xd),this.blueOther=so(i,xd),this.orangeBack=so(i,wd),this.orangeForward=so(i,wd),this.orangeOther=so(i,wd);for(const s of this.getZones())e.add(s.group)}update(e,t){const{frameIndex:i}=e,s=oV;for(const a of[!0,!1]){const r=this.replay.players.filter(d=>d.isTeamZero===a).length,o=[];for(const d of this.replay.players){if(d.isTeamZero!==a)continue;const h=d.frames[i];h?.position&&o.push(h.position.y)}const l=MV(a),c=this.getTeamZones(a);for(const d of c.values())AV(d);if(r<2||o.length!==r)continue;const u=EV(o,a,s);for(const d of u){const h=c.get(d.kind);h&&RV(h,d,l,t)}}}dispose(){for(const e of this.getZones())e.group.removeFromParent(),e.floorGeom.dispose(),e.floorMaterial.dispose(),e.stripeGeom.dispose(),e.stripeMaterial.dispose(),Lx(e.primaryMarker),Lx(e.secondaryMarker)}getTeamZones(e){return e?new Map([["back",this.blueBack],["forward",this.blueForward],["other",this.blueOther]]):new Map([["back",this.orangeBack],["forward",this.orangeForward],["other",this.orangeOther]])}getZones(){return[this.blueBack,this.blueForward,this.blueOther,this.orangeBack,this.orangeForward,this.orangeOther]}}function IV(n){return n==null||Number.isNaN(n)?null:n<0?"team-zero":"team-one"}class LV{group;teamZeroSide;teamOneSide;constructor(e,t){this.group=new Et,this.teamZeroSide=this.createHalfFieldSide(xd),this.teamOneSide=this.createHalfFieldSide(wd);const i=mc*t,s=5120*t;this.teamZeroSide.mesh.position.set(0,-s/2,Rx),this.teamZeroSide.mesh.scale.set(i*2,s,1),this.teamOneSide.mesh.position.set(0,s/2,Rx),this.teamOneSide.mesh.scale.set(i*2,s,1),this.group.add(this.teamZeroSide.mesh),this.group.add(this.teamOneSide.mesh),e.add(this.group)}update(e){const t=IV(e);this.teamZeroSide.material.opacity=t==="team-zero"?Cx:wm,this.teamOneSide.material.opacity=t==="team-one"?Cx:wm}dispose(){this.group.removeFromParent(),this.teamZeroSide.mesh.geometry.dispose(),this.teamZeroSide.material.dispose(),this.teamOneSide.mesh.geometry.dispose(),this.teamOneSide.material.dispose()}createHalfFieldSide(e){const t=new Nn(1,1),i=new je({color:e,transparent:!0,opacity:wm,side:ut,depthWrite:!1,depthTest:!1}),s=new Se(t,i);return s.renderOrder=18,{mesh:s,material:i}}}function kV(n,e){const t=new Et,i=mc*2*e,s=(a,r,o)=>{const l=new Nn(i,r*e),c=new je({color:_V,transparent:!0,opacity:o,side:ut,depthWrite:!1,depthTest:!1}),u=new Se(l,c);return u.position.set(0,a,mV),u.renderOrder=24,u};for(const a of[-1,1]){const r=a*lV*e;t.add(s(r,yV,gV))}return t.add(s(0,bV,vV)),n.add(t),t}function un(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function O_(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Hi(n,e){return`
${n}${e}
`}function DV(n,e){return` - ${Hi("50s",un(n?.count))} - ${Hi("Blue wins",`${un(n?.wins)} (${O_(n?.wins,n?.count)})`)} - ${Hi("Orange wins",`${un(n?.losses)} (${O_(n?.losses,n?.count)})`)} - ${Hi("Neutral",un(n?.neutral_outcomes))} - ${Hi("Blue poss after",un(n?.possession_after_count))} - ${Hi("Orange poss after",un(n?.opponent_possession_after_count))} - ${Hi("Kickoff 50s",un(n?.kickoff_count))} - ${Hi("Blue kickoff wins",un(n?.kickoff_wins))} - ${Hi("Orange kickoff wins",un(n?.kickoff_losses))} - ${Hi("Blue kickoff poss",un(n?.kickoff_possession_after_count))} - ${Hi("Orange kickoff poss",un(n?.kickoff_opponent_possession_after_count))} - `}function kx(n){return` + `,document.head.append(n)}function CV(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}function l1(n){return[n.line.material,n.cone.material].flatMap(e=>Array.isArray(e)?e:[e])}function Dx(n,e){for(const t of l1(n))t.transparent=!0,t.opacity=e,t.depthWrite=!1,t.depthTest=!1}function Ox(n){n.removeFromParent(),n.line.geometry.dispose(),n.cone.geometry.dispose();for(const e of l1(n))e.dispose()}function H_(n){for(const e of n.ringSegments){e.removeFromParent(),e.geometry.dispose();const t=Array.isArray(e.material)?e.material:[e.material];for(const i of t)i.dispose()}n.ringSegments=[],n.ringColorsKey=""}function AV(n,e,t){const i=new oi(e,t,48,1),s=new je({color:n,transparent:!0,opacity:.7,side:ut,depthWrite:!1,depthTest:!1}),a=new Se(i,s);return a.rotation.x=-Math.PI/2,a.renderOrder=40,a}function RV(n,e){const t=e.length>0?e:[Yi],i=t.join("|");if(n.ringColorsKey===i)return;H_(n);const s=t.length,a=Px*Math.max(0,s-1),r=(pV-Rx-a)/s,o=t.map((l,c)=>{const u=Rx+c*(r+Px);return AV(l,u,u+r)});for(const l of o)n.ring.add(l),n.ringSegments.push(l);n.ringColorsKey=i}function PV(n,e){for(const t of n.ringSegments){const i=Array.isArray(t.material)?t.material:[t.material];for(const s of i)s.opacity=e}}class IV{scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;arrowStart=new T;arrowEnd=new T;arrowDirection=new T;labelOffset=new T(0,0,Ix);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=Lx;mode="markers";colorModes=["team"];constructor(e,t,i,s,a){EV(),this.scene=e,this.container=t,this.decaySeconds=Math.max(.1,a?.decaySeconds??Lx),this.mode=a?.mode??"markers",this.colorModes=Mo(a?.colorModes??a?.colorMode),this.labelOffset.set(0,0,Ix),this.markers=o1(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="touch-event-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-touch-overlay-root",this.container.append(this.labelRoot)}getDecaySeconds(){return this.decaySeconds}setDecaySeconds(e){this.decaySeconds=Math.max(.1,e)}getMode(){return this.mode}setMode(e){this.mode=e}getColorModes(){return[...this.colorModes]}setColorMode(e){this.setColorModes([e])}setColorModes(e){this.colorModes=Mo([...e])}update(e){const t=MV(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),H_(a),Ox(a.arrow),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.1+.6*r,c=.95+(1-r)*.28,u=a1(this.colorModes),d=r1(s,u),h=TV(s,this.colorModes);RV(o,h),PV(o,l),o.arrow.setColor(d),o.ring.position.set(s.position.x,s.position.y,s.position.z+Cm),o.ring.scale.setScalar(c),o.label.textContent=bV(s,this.mode,this.colorModes),o.label.classList.toggle("sap-touch-overlay-label-advancement",this.mode==="advancement");const f=u==="team";o.label.classList.toggle("sap-touch-overlay-label-blue",f&&s.isTeamZero),o.label.classList.toggle("sap-touch-overlay-label-orange",f&&!s.isTeamZero),o.label.style.borderColor=f?"":`#${d.toString(16).padStart(6,"0")}cc`,o.label.style.background=f?"":`#${d.toString(16).padStart(6,"0")}66`,this.updateArrow(o,s,l),this.worldPosition.set(s.position.x,s.position.y,s.position.z),this.worldPosition.add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),CV(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.22+.78*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),H_(e),Ox(e.arrow),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new Et;i.renderOrder=40,this.group.add(i);const s=new iy(new T(0,1,0),new T,1,e.isTeamZero?by:xy,1,1);s.visible=!1,s.renderOrder=45,s.line.renderOrder=45,s.cone.renderOrder=45,Dx(s,.7),this.group.add(s);const a=document.createElement("div");a.className=`sap-touch-overlay-label ${e.isTeamZero?"sap-touch-overlay-label-blue":"sap-touch-overlay-label-orange"}`,a.textContent=e.playerName,a.hidden=!0,this.labelRoot.append(a);const r={marker:e,ring:i,ringSegments:[],ringColorsKey:"",arrow:s,label:a};return this.views.set(e.id,r),r}updateArrow(e,t,i){if(this.mode!=="advancement"||t.totalBallTravelDistance<=mV){e.arrow.visible=!1;return}this.arrowStart.set(t.position.x,t.position.y,t.position.z+Cm*2),this.arrowEnd.set(t.endPosition.x,t.endPosition.y,t.endPosition.z+Cm*2),this.arrowDirection.copy(this.arrowEnd).sub(this.arrowStart);const s=this.arrowDirection.length();if(s<_V){e.arrow.visible=!1;return}this.arrowDirection.normalize(),e.arrow.visible=!0,e.arrow.position.copy(this.arrowStart),e.arrow.setDirection(this.arrowDirection),e.arrow.setLength(s,Math.min(140,Math.max(42,s*.18)),Math.min(86,Math.max(24,s*.1))),Dx(e.arrow,Math.min(.86,i+.12))}}const LV=.8,kV=.45,DV=.5,OV=30;function Tl(n){return Number.isFinite(n)?n:0}function FV(n,e){for(const s of e){const a=s.endFrame-s.startFrame,r=s.endTime-s.startTime;if(a>0&&r>0)return a/r}const t=n.frames[0],i=n.frames.at(-1);if(t&&i){const s=i.frame_number-t.frame_number,a=i.time-t.time;if(s>0&&a>0)return s/a}return OV}function NV(n,e={}){if(!n)return[];const t=e.preRollSeconds??LV,i=e.minPossessionSeconds??kV,s=e.samePlayerBridgeSeconds??DV,a=be(n,"player_possession").map(d=>({playerId:Ct(d.player_id),startFrame:Math.max(0,Math.trunc(Tl(d.start_frame))),endFrame:Math.max(0,Math.trunc(Tl(d.end_frame))),startTime:Tl(d.start_time),endTime:Tl(d.end_time),duration:Tl(d.duration),sustainedControl:d.sustained_control})).filter(d=>d.endFrame>d.startFrame&&(d.sustainedControl||d.duration>=i)).sort((d,h)=>d.startFrame-h.startFrame||d.endFrame-h.endFrame),r=FV(n,a),o=Math.max(0,Math.round(t*r)),l=Math.max(0,Math.round(s*r)),c=[];let u=null;for(const d of a){let h=Math.max(0,d.startFrame-o);u&&u.playerId!==d.playerId&&(h=Math.max(h,u.endFrame));const f=c.at(-1);if(f&&f.playerId===d.playerId&&h<=f.endFrame+l){c[c.length-1]={...f,endFrame:Math.max(f.endFrame,d.endFrame),possessionEndFrame:Math.max(f.possessionEndFrame,d.endFrame)},u=d;continue}c.push({playerId:d.playerId,startFrame:h,endFrame:d.endFrame,possessionStartFrame:d.startFrame,possessionEndFrame:d.endFrame}),u=d}return c.map((d,h)=>({...d,endFrame:c[h+1]?.startFrame??Number.POSITIVE_INFINITY}))}function UV(n,e){const t=Math.max(0,Math.trunc(e));return n.find(s=>t>=s.startFrame&&tthis.update(i))))}reset(){this.unsubscribeBeforeRender?.(),this.unsubscribeBeforeRender=null,this.sourcePlayer=null,this.sourceTimeline=null,this.spans=[]}syncCurrentFrame(){const e=this.options.getReplayPlayer();if(!e)return;const t=e.getState();this.update({frameIndex:t.frameIndex,nextFrameIndex:t.frameIndex,alpha:0,currentTime:t.currentTime})}update(e){const t=this.options.getCameraControlsController(),i=this.options.getReplayPlayer();if(!t?.autoPossessionEnabled||!i)return;const s=UV(this.spans,e.frameIndex);if(!s||!i.replay.players.some(r=>r.id===s))return;const a=i.getState();a.cameraViewMode==="follow"&&a.attachedPlayerId===s||t.followPlayerWithReplayCamera(s,{ballCam:"player",preserveAutoPossession:!0,requestConfigSync:!1,usePlayerCameraSettings:!1})}}function zV(n){return new BV(n)}const HV=236,vc=4120,VV=2300,GV=16185075,$V=.18,WV=1118481,Ed=5882879,Cd=16761180,XV=.55,Rm=.12,Fx=.28,KV=3,qV=4,Nx=5,Ux=2,YV=6,jV=856343,ZV=.42,JV=18,QV=.24,e4=10,Bx=220,t4=200,c1=140,n4=220,i4=100,s4=120;function a4(n){const e=t4/2;if(n){const s=-vc+Bx,a=-e;return{minX:s,maxX:a,centerX:(s+a)/2,width:a-s}}const t=e,i=vc-Bx;return{minX:t,maxX:i,centerX:(t+i)/2,width:i-t}}function r4(n,e,t){if(n.length<2)return[];const i=Math.min(...n),s=Math.max(...n),a=s-i,r=e?-1:1,o=-r;return a<=t?[{kind:"other",centerY:(i+s)/2,halfDepth:Math.max(t-a/2,t*.35),directions:[r,o]}]:[{kind:"back",centerY:e?i:s,halfDepth:t,directions:[r]},{kind:"forward",centerY:e?s:i,halfDepth:t,directions:[o]}]}function o4(n,e){const t=new $s;return t.moveTo(0,e/2),t.lineTo(n/2,-e/2),t.lineTo(-n/2,-e/2),t.closePath(),new br(t)}function zx(n){const e=i4*n,t=new je({color:WV,transparent:!0,opacity:.9,side:ut,depthWrite:!1,depthTest:!1}),i=new Et;i.visible=!1;const s=new Nn(c1*.55*n,1),a=new Se(s,t);a.position.z=Nx,a.renderOrder=22,i.add(a);const r=o4(s4*n,e),o=new Se(r,t);return o.position.z=Nx,o.renderOrder=23,i.add(o),{group:i,shaftGeom:s,shaftMesh:a,headGeom:r,headMesh:o,material:t,headLength:e}}function Pm(n,e,t,i){const s=Math.max(t-n.headLength,n.headLength*.2);n.group.position.x=e,n.group.rotation.z=i>0?0:Math.PI,n.shaftMesh.scale.y=s,n.shaftMesh.position.y=-n.headLength/2,n.headMesh.position.y=t/2-n.headLength/2,n.group.visible=!0}function Rh(n){n.group.visible=!1}function ro(n,e){const t=new Et;t.visible=!1;const i=new je({color:GV,transparent:!0,opacity:$V,side:ut,depthWrite:!1,depthTest:!1}),s=new Nn(1,1),a=new Se(s,i);a.position.z=KV,a.renderOrder=20,t.add(a);const r=new je({color:e,transparent:!0,opacity:XV,side:ut,depthWrite:!1,depthTest:!1}),o=new Nn(1,1),l=new Se(o,r);l.position.z=qV,l.renderOrder=21,t.add(l);const c=zx(n),u=zx(n);return t.add(c.group),t.add(u.group),{group:t,floorGeom:s,floorMesh:a,floorMaterial:i,stripeGeom:o,stripeMesh:l,stripeMaterial:r,primaryMarker:c,secondaryMarker:u}}function l4(n){n.group.visible=!1,Rh(n.primaryMarker),Rh(n.secondaryMarker)}function c4(n,e,t,i){const s=e.halfDepth*2*i,a=vc*2*i,r=t.width*i,o=t.centerX*i,l=c1*i,c=Math.max(s-32*i,n.primaryMarker.headLength*1.15),u=Math.min(c,Math.max(n4*i,s*.6));if(n.group.position.y=e.centerY*i,n.floorMesh.position.x=0,n.floorMesh.scale.set(a,s,1),n.stripeMesh.position.x=o,n.stripeMesh.scale.set(l,s,1),Rh(n.primaryMarker),Rh(n.secondaryMarker),e.directions.length===1)Pm(n.primaryMarker,o,u,e.directions[0]);else{const d=r*.18;Pm(n.primaryMarker,o-d,u,e.directions[0]),Pm(n.secondaryMarker,o+d,u,e.directions[1])}n.group.visible=!0}function Hx(n){n.group.removeFromParent(),n.shaftGeom.dispose(),n.headGeom.dispose(),n.material.dispose()}class u4{replay;blueBack;blueForward;blueOther;orangeBack;orangeForward;orangeOther;constructor(e,t,i){this.replay=t,this.blueBack=ro(i,Ed),this.blueForward=ro(i,Ed),this.blueOther=ro(i,Ed),this.orangeBack=ro(i,Cd),this.orangeForward=ro(i,Cd),this.orangeOther=ro(i,Cd);for(const s of this.getZones())e.add(s.group)}update(e,t){const{frameIndex:i}=e,s=HV;for(const a of[!0,!1]){const r=this.replay.players.filter(d=>d.isTeamZero===a).length,o=[];for(const d of this.replay.players){if(d.isTeamZero!==a)continue;const h=d.frames[i];h?.position&&o.push(h.position.y)}const l=a4(a),c=this.getTeamZones(a);for(const d of c.values())l4(d);if(r<2||o.length!==r)continue;const u=r4(o,a,s);for(const d of u){const h=c.get(d.kind);h&&c4(h,d,l,t)}}}dispose(){for(const e of this.getZones())e.group.removeFromParent(),e.floorGeom.dispose(),e.floorMaterial.dispose(),e.stripeGeom.dispose(),e.stripeMaterial.dispose(),Hx(e.primaryMarker),Hx(e.secondaryMarker)}getTeamZones(e){return e?new Map([["back",this.blueBack],["forward",this.blueForward],["other",this.blueOther]]):new Map([["back",this.orangeBack],["forward",this.orangeForward],["other",this.orangeOther]])}getZones(){return[this.blueBack,this.blueForward,this.blueOther,this.orangeBack,this.orangeForward,this.orangeOther]}}function d4(n){return n==null||Number.isNaN(n)?null:n<0?"team-zero":"team-one"}class h4{group;teamZeroSide;teamOneSide;constructor(e,t){this.group=new Et,this.teamZeroSide=this.createHalfFieldSide(Ed),this.teamOneSide=this.createHalfFieldSide(Cd);const i=vc*t,s=5120*t;this.teamZeroSide.mesh.position.set(0,-s/2,Ux),this.teamZeroSide.mesh.scale.set(i*2,s,1),this.teamOneSide.mesh.position.set(0,s/2,Ux),this.teamOneSide.mesh.scale.set(i*2,s,1),this.group.add(this.teamZeroSide.mesh),this.group.add(this.teamOneSide.mesh),e.add(this.group)}update(e){const t=d4(e);this.teamZeroSide.material.opacity=t==="team-zero"?Fx:Rm,this.teamOneSide.material.opacity=t==="team-one"?Fx:Rm}dispose(){this.group.removeFromParent(),this.teamZeroSide.mesh.geometry.dispose(),this.teamZeroSide.material.dispose(),this.teamOneSide.mesh.geometry.dispose(),this.teamOneSide.material.dispose()}createHalfFieldSide(e){const t=new Nn(1,1),i=new je({color:e,transparent:!0,opacity:Rm,side:ut,depthWrite:!1,depthTest:!1}),s=new Se(t,i);return s.renderOrder=18,{mesh:s,material:i}}}function f4(n,e){const t=new Et,i=vc*2*e,s=(a,r,o)=>{const l=new Nn(i,r*e),c=new je({color:jV,transparent:!0,opacity:o,side:ut,depthWrite:!1,depthTest:!1}),u=new Se(l,c);return u.position.set(0,a,YV),u.renderOrder=24,u};for(const a of[-1,1]){const r=a*VV*e;t.add(s(r,JV,ZV))}return t.add(s(0,e4,QV)),n.add(t),t}function un(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function V_(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Vi(n,e){return`
${n}${e}
`}function p4(n,e){return` + ${Vi("50s",un(n?.count))} + ${Vi("Blue wins",`${un(n?.wins)} (${V_(n?.wins,n?.count)})`)} + ${Vi("Orange wins",`${un(n?.losses)} (${V_(n?.losses,n?.count)})`)} + ${Vi("Neutral",un(n?.neutral_outcomes))} + ${Vi("Blue poss after",un(n?.possession_after_count))} + ${Vi("Orange poss after",un(n?.opponent_possession_after_count))} + ${Vi("Kickoff 50s",un(n?.kickoff_count))} + ${Vi("Blue kickoff wins",un(n?.kickoff_wins))} + ${Vi("Orange kickoff wins",un(n?.kickoff_losses))} + ${Vi("Blue kickoff poss",un(n?.kickoff_possession_after_count))} + ${Vi("Orange kickoff poss",un(n?.kickoff_opponent_possession_after_count))} + `}function Vx(n){return`
50s${un(n?.count)}
-
Wins${un(n?.wins)} (${O_(n?.wins,n?.count)})
+
Wins${un(n?.wins)} (${V_(n?.wins,n?.count)})
Losses${un(n?.losses)}
Neutral${un(n?.neutral_outcomes)}
Poss after${un(n?.possession_after_count)}
Kickoff 50s${un(n?.kickoff_count)}
Kickoff wins${un(n?.kickoff_wins)}
Kickoff poss${un(n?.kickoff_possession_after_count)}
- `}function OV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function FV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Dx(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=FV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function Ox(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function F_(n,e){return`
${Ox(n)}${Ox(e)}
`}function NV(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function QE(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="own"?"Blue control":"Orange control":n==="own"?"Team control":"Opp control"}function N_(n){return n.kind==="shared"?["own","neutral","opponent"]:["own","neutral","opponent"]}function UV(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function BV(n){return n.kind==="shared"?["defensive_third","neutral_third","offensive_third"]:["defensive_third","neutral_third","offensive_third"]}function zV(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="defensive_half"?"Blue half":"Orange half":n==="defensive_half"?"Own half":"Opp half"}function HV(n){return n.kind==="shared"?["defensive_half","neutral","offensive_half"]:["defensive_half","neutral","offensive_half"]}function VV(n,e,t,i){for(const s of t){const a=s==="possession_state"?N_(i):s==="field_third"?BV(i):HV(i),r=a.indexOf(n[s]),o=a.indexOf(e[s]),l=r===-1?Number.MAX_SAFE_INTEGER:r,c=o===-1?Number.MAX_SAFE_INTEGER:o;if(l!==c)return l-c}return 0}function GV(n,e,t){const i=(s,a)=>s==="possession_state"?QE(a,t):s==="field_third"?UV(a,t):zV(a,t);if(e.length===1){const s=e[0];return i(s,n[s])}return e.map(s=>i(s,n[s])).join(" / ")}function $V(n,e,t,i){if(e.length===0)return"";const s=new Map;if(n?.labeled_time?.entries?.length)for(const a of n.labeled_time.entries){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=s.get(c);u?u.total+=a.value:s.set(c,{values:o,total:a.value})}if(s.size===0&&e.length===1&&e[0]==="possession_state"){const a=new Map;return n&&(a.set("own",n.possession_time),a.set("neutral",n.neutral_time??0),a.set("opponent",n.opponent_possession_time)),N_(i).some(r=>(a.get(r)??0)>0)?N_(i).filter(r=>a.has(r)).map(r=>F_(QE(r,i),Dx(a.get(r),t))).join(""):""}return[...s.values()].sort((a,r)=>VV(a.values,r.values,e,i)).map(a=>F_(GV(a.values,e,i),Dx(a.total,t))).join("")}function Fx(n,e){const t=n?.tracked_time,i=NV(e.breakdownClasses),s=$V(n,i,t,e.labelPerspective);return` - ${F_("Tracked",OV(t,1,"s"))} + `}function m4(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function _4(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function Gx(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=_4(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function $x(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function G_(n,e){return`
${$x(n)}${$x(e)}
`}function g4(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function u1(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="own"?"Blue control":"Orange control":n==="own"?"Team control":"Opp control"}function $_(n){return n.kind==="shared"?["own","neutral","opponent"]:["own","neutral","opponent"]}function y4(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function v4(n){return n.kind==="shared"?["defensive_third","neutral_third","offensive_third"]:["defensive_third","neutral_third","offensive_third"]}function b4(n,e){return n==="neutral"?"Neutral":e.kind==="shared"?n==="defensive_half"?"Blue half":"Orange half":n==="defensive_half"?"Own half":"Opp half"}function x4(n){return n.kind==="shared"?["defensive_half","neutral","offensive_half"]:["defensive_half","neutral","offensive_half"]}function w4(n,e,t,i){for(const s of t){const a=s==="possession_state"?$_(i):s==="field_third"?v4(i):x4(i),r=a.indexOf(n[s]),o=a.indexOf(e[s]),l=r===-1?Number.MAX_SAFE_INTEGER:r,c=o===-1?Number.MAX_SAFE_INTEGER:o;if(l!==c)return l-c}return 0}function S4(n,e,t){const i=(s,a)=>s==="possession_state"?u1(a,t):s==="field_third"?y4(a,t):b4(a,t);if(e.length===1){const s=e[0];return i(s,n[s])}return e.map(s=>i(s,n[s])).join(" / ")}function T4(n,e,t,i){if(e.length===0)return"";const s=new Map;if(n?.labeled_time?.entries?.length)for(const a of n.labeled_time.entries){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=s.get(c);u?u.total+=a.value:s.set(c,{values:o,total:a.value})}if(s.size===0&&e.length===1&&e[0]==="possession_state"){const a=new Map;return n&&(a.set("own",n.possession_time),a.set("neutral",n.neutral_time??0),a.set("opponent",n.opponent_possession_time)),$_(i).some(r=>(a.get(r)??0)>0)?$_(i).filter(r=>a.has(r)).map(r=>G_(u1(r,i),Gx(a.get(r),t))).join(""):""}return[...s.values()].sort((a,r)=>w4(a.values,r.values,e,i)).map(a=>G_(S4(a.values,e,i),Gx(a.total,t))).join("")}function Wx(n,e){const t=n?.tracked_time,i=g4(e.breakdownClasses),s=T4(n,i,t,e.labelPerspective);return` + ${G_("Tracked",m4(t,1,"s"))} ${s} - `}function WV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function XV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function KV(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=XV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function Nx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function e1(n,e){return`
${Nx(n)}${Nx(e)}
`}function qV(n,e){return n==="neutral"?"Neutral zone":e.kind==="shared"?n==="defensive_half"?"Blue side":"Orange side":n==="defensive_half"?"Own half":"Opp half"}function YV(n,e,t){const i=new Map;if(n&&(i.set("defensive_half",n.defensive_half_time),i.set("neutral",n.neutral_time??0),i.set("offensive_half",n.offensive_half_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_half")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_half","neutral","offensive_half"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>e1(qV(a,t),KV(i.get(a),e))).join(""):""}function Ux(n,e){const t=n?.tracked_time,i=YV(n,t,e.labelPerspective);return` - ${i.length===0?e1("Tracked",WV(t,1,"s")):""} + `}function M4(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function E4(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function C4(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=E4(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function Xx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function d1(n,e){return`
${Xx(n)}${Xx(e)}
`}function A4(n,e){return n==="neutral"?"Neutral zone":e.kind==="shared"?n==="defensive_half"?"Blue side":"Orange side":n==="defensive_half"?"Own half":"Opp half"}function R4(n,e,t){const i=new Map;if(n&&(i.set("defensive_half",n.defensive_half_time),i.set("neutral",n.neutral_time??0),i.set("offensive_half",n.offensive_half_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_half")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_half","neutral","offensive_half"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>d1(A4(a,t),C4(i.get(a),e))).join(""):""}function Kx(n,e){const t=n?.tracked_time,i=R4(n,t,e.labelPerspective);return` + ${i.length===0?d1("Tracked",M4(t,1,"s")):""} ${i} - `}function jV(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function ZV(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function JV(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=ZV(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function Bx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function t1(n,e){return`
${Bx(n)}${Bx(e)}
`}function QV(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function e4(n,e,t){const i=new Map;if(n&&(i.set("defensive_third",n.defensive_third_time),i.set("neutral_third",n.neutral_third_time??0),i.set("offensive_third",n.offensive_third_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_third")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_third","neutral_third","offensive_third"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>t1(QV(a,t),JV(i.get(a),e))).join(""):""}function zx(n,e){const t=n?.tracked_time,i=e4(n,t,e.labelPerspective);return` - ${i.length===0?t1("Tracked",jV(t,1,"s")):""} + `}function P4(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function I4(n,e,t=1){return n===void 0||e===void 0||Number.isNaN(n)||Number.isNaN(e)||e<=0?"?":`${(n*100/e).toFixed(t)}%`}function L4(n,e,t=1){if(n===void 0||Number.isNaN(n))return"?";const i=I4(n,e,t);return i==="?"?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${i})`}function qx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function h1(n,e){return`
${qx(n)}${qx(e)}
`}function k4(n,e){return n==="neutral_third"?"Neutral third":e.kind==="shared"?n==="defensive_third"?"Blue third":"Orange third":n==="defensive_third"?"Own third":"Opp third"}function D4(n,e,t){const i=new Map;if(n&&(i.set("defensive_third",n.defensive_third_time),i.set("neutral_third",n.neutral_third_time??0),i.set("offensive_third",n.offensive_third_time)),n?.labeled_time?.entries?.length){i.clear();for(const a of n.labeled_time.entries){const r=a.labels.find(o=>o.key==="field_third")?.value;r&&i.set(r,(i.get(r)??0)+a.value)}}const s=["defensive_third","neutral_third","offensive_third"];return s.some(a=>(i.get(a)??0)>0)?s.filter(a=>i.has(a)).map(a=>h1(k4(a,t),L4(i.get(a),e))).join(""):""}function Yx(n,e){const t=n?.tracked_time,i=D4(n,t,e.labelPerspective);return` + ${i.length===0?h1("Tracked",P4(t,1,"s")):""} ${i} - `}function $a(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Wa(n,e){return`
${n}${e}
`}function Tm(n){return` - ${Wa("Rushes",$a(n?.count))} - ${Wa("2v1",$a(n?.two_v_one_count))} - ${Wa("2v2",$a(n?.two_v_two_count))} - ${Wa("2v3",$a(n?.two_v_three_count))} - ${Wa("3v1",$a(n?.three_v_one_count))} - ${Wa("3v2",$a(n?.three_v_two_count))} - ${Wa("3v3",$a(n?.three_v_three_count))} - `}const Hx="subtr-actor-fifty-fifty-overlay-styles",t4=5882879,n4=16761180,i4=15988472,s4=180,a4=4;function U_(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function Vx(n,e){const t=U_(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function r4(n,e){const t=Vx(e,n.team_zero_player),i=Vx(e,n.team_one_player),s=n.is_kickoff?"Kickoff 50/50":"50/50",a=n.winning_team_is_team_0===void 0?null:n.winning_team_is_team_0,r=n.possession_team_is_team_0===void 0?null:n.possession_team_is_team_0,o=a===null?"neutral":a?"blue win":"orange win",l=r===null?"neutral poss":r?"blue poss":"orange poss",c=a===null?"sap-fifty-fifty-overlay-label-neutral":a?"sap-fifty-fifty-overlay-label-blue":"sap-fifty-fifty-overlay-label-orange";return{text:`${s}: ${t} vs ${i} | ${o} | ${l}`,className:c,winnerIsTeamZero:a}}function n1(n,e){return be(n,"fifty_fifty").map(t=>{const i=r4(t,e),s=new T(...t.team_zero_position),a=new T(...t.team_one_position),r=new T(...t.midpoint),o=e.frames[t.start_frame]?.time??t.start_time;return{id:`fifty-fifty:${t.start_frame}:${U_(t.team_zero_player)}:${U_(t.team_one_player)}`,time:o,frame:t.start_frame,label:i.text,labelClassName:i.className,axisStart:s,axisEnd:a,midpoint:r,winnerIsTeamZero:i.winnerIsTeamZero}})}function o4(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function l4(){if(document.getElementById(Hx))return;const n=document.createElement("style");n.id=Hx,n.textContent=` + `}function Wa(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Xa(n,e){return`
${n}${e}
`}function Im(n){return` + ${Xa("Rushes",Wa(n?.count))} + ${Xa("2v1",Wa(n?.two_v_one_count))} + ${Xa("2v2",Wa(n?.two_v_two_count))} + ${Xa("2v3",Wa(n?.two_v_three_count))} + ${Xa("3v1",Wa(n?.three_v_one_count))} + ${Xa("3v2",Wa(n?.three_v_two_count))} + ${Xa("3v3",Wa(n?.three_v_three_count))} + `}const jx="subtr-actor-fifty-fifty-overlay-styles",O4=5882879,F4=16761180,N4=15988472,U4=180,B4=4;function W_(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function Zx(n,e){const t=W_(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function z4(n,e){const t=Zx(e,n.team_zero_player),i=Zx(e,n.team_one_player),s=n.is_kickoff?"Kickoff 50/50":"50/50",a=n.winning_team_is_team_0===void 0?null:n.winning_team_is_team_0,r=n.possession_team_is_team_0===void 0?null:n.possession_team_is_team_0,o=a===null?"neutral":a?"blue win":"orange win",l=r===null?"neutral poss":r?"blue poss":"orange poss",c=a===null?"sap-fifty-fifty-overlay-label-neutral":a?"sap-fifty-fifty-overlay-label-blue":"sap-fifty-fifty-overlay-label-orange";return{text:`${s}: ${t} vs ${i} | ${o} | ${l}`,className:c,winnerIsTeamZero:a}}function f1(n,e){return be(n,"fifty_fifty").map(t=>{const i=z4(t,e),s=new T(...t.team_zero_position),a=new T(...t.team_one_position),r=new T(...t.midpoint),o=e.frames[t.start_frame]?.time??t.start_time;return{id:`fifty-fifty:${t.start_frame}:${W_(t.team_zero_player)}:${W_(t.team_one_player)}`,time:o,frame:t.start_frame,label:i.text,labelClassName:i.className,axisStart:s,axisEnd:a,midpoint:r,winnerIsTeamZero:i.winnerIsTeamZero}})}function H4(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function V4(){if(document.getElementById(jx))return;const n=document.createElement("style");n.id=jx,n.textContent=` .sap-fifty-fifty-overlay-root { position: absolute; inset: 0; @@ -5584,7 +5649,7 @@ void main() { border-color: rgba(243, 246, 248, 0.4); background: rgba(34, 41, 47, 0.86); } - `,document.head.append(n)}function c4(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class u4{scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,s4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=a4;constructor(e,t,i,s){l4(),this.scene=e,this.container=t,this.markers=n1(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="fifty-fifty-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-fifty-fifty-overlay-root",this.container.append(this.labelRoot)}update(e){const t=o4(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.line.removeFromParent(),a.line.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.12+.78*r;o.material.opacity=l;const c=o.line.geometry.getAttribute("position");c.setXYZ(0,s.axisStart.x,s.axisStart.y,s.axisStart.z+24),c.setXYZ(1,s.axisEnd.x,s.axisEnd.y,s.axisEnd.z+24),c.needsUpdate=!0,this.worldPosition.copy(s.midpoint).add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),c4(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.24+.76*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.line.removeFromParent(),e.line.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new $e().setFromPoints([e.axisStart,e.axisEnd]),s=new Pt({color:e.winnerIsTeamZero===null?i4:e.winnerIsTeamZero?t4:n4,transparent:!0,opacity:.9}),a=new On(i,s);a.renderOrder=3,this.group.add(a);const r=document.createElement("div");r.className=`sap-fifty-fifty-overlay-label ${e.labelClassName}`,r.textContent=e.label,this.labelRoot.append(r);const o={marker:e,line:a,material:s,label:r};return this.views.set(e.id,o),o}}const Gx="subtr-actor-ceiling-shot-overlay-styles",d4=5882879,h4=16761180,f4=16185075,p4=140,m4=215,_4=220,g4=4.5;function i1(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function y4(n,e){const t=i1(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function s1(n,e){return be(n,"ceiling_shot").map(t=>{const i=y4(e,t.player),s=i1(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`ceiling-shot:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,ceilingContactPosition:{x:t.ceiling_contact_position[0],y:t.ceiling_contact_position[1],z:t.ceiling_contact_position[2]},touchPosition:{x:t.touch_position[0],y:t.touch_position[1],z:t.touch_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function v4(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function b4(){if(document.getElementById(Gx))return;const n=document.createElement("style");n.id=Gx,n.textContent=` + `,document.head.append(n)}function G4(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class $4{scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,U4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=B4;constructor(e,t,i,s){V4(),this.scene=e,this.container=t,this.markers=f1(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="fifty-fifty-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-fifty-fifty-overlay-root",this.container.append(this.labelRoot)}update(e){const t=H4(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.line.removeFromParent(),a.line.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.12+.78*r;o.material.opacity=l;const c=o.line.geometry.getAttribute("position");c.setXYZ(0,s.axisStart.x,s.axisStart.y,s.axisStart.z+24),c.setXYZ(1,s.axisEnd.x,s.axisEnd.y,s.axisEnd.z+24),c.needsUpdate=!0,this.worldPosition.copy(s.midpoint).add(this.labelOffset),this.scene.replayRoot.localToWorld(this.worldPosition),G4(this.worldPosition,this.scene.camera,this.container,this.projectedPosition)?(o.label.hidden=!1,o.label.style.opacity=`${.24+.76*r}`,o.label.style.transform=`translate(${this.projectedPosition.x.toFixed(1)}px, ${this.projectedPosition.y.toFixed(1)}px) translate(-50%, -100%)`):o.label.hidden=!0}}dispose(){for(const e of this.views.values())e.line.removeFromParent(),e.line.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition,this.changedContainerPosition=!1)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new $e().setFromPoints([e.axisStart,e.axisEnd]),s=new Pt({color:e.winnerIsTeamZero===null?N4:e.winnerIsTeamZero?O4:F4,transparent:!0,opacity:.9}),a=new On(i,s);a.renderOrder=3,this.group.add(a);const r=document.createElement("div");r.className=`sap-fifty-fifty-overlay-label ${e.labelClassName}`,r.textContent=e.label,this.labelRoot.append(r);const o={marker:e,line:a,material:s,label:r};return this.views.set(e.id,o),o}}const Jx="subtr-actor-ceiling-shot-overlay-styles",W4=5882879,X4=16761180,K4=16185075,q4=140,Y4=215,j4=220,Z4=4.5;function p1(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function J4(n,e){const t=p1(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function m1(n,e){return be(n,"ceiling_shot").map(t=>{const i=J4(e,t.player),s=p1(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`ceiling-shot:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,ceilingContactPosition:{x:t.ceiling_contact_position[0],y:t.ceiling_contact_position[1],z:t.ceiling_contact_position[2]},touchPosition:{x:t.touch_position[0],y:t.touch_position[1],z:t.touch_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function Q4(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function eG(){if(document.getElementById(Jx))return;const n=document.createElement("style");n.id=Jx,n.textContent=` .sap-ceiling-shot-overlay-root { position: absolute; inset: 0; @@ -5621,13 +5686,13 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function x4(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class w4{scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,_4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=g4;constructor(e,t,i,s){b4(),this.scene=e,this.container=t,this.markers=s1(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="ceiling-shot-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-ceiling-shot-overlay-root",this.container.append(this.labelRoot)}update(e){const t=v4(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.ringMaterial.dispose(),a.beam.removeFromParent(),a.beamGeometry.dispose(),a.beamMaterial.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.14+.6*r,c=.94+(1-r)*.18;o.ringMaterial.opacity=l,o.beamMaterial.opacity=.18+.55*r,o.ring.position.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z+12),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z).add(this.labelOffset);const u=x4(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.ringMaterial.dispose(),e.beam.removeFromParent(),e.beamGeometry.dispose(),e.beamMaterial.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.quality>=.8?f4:e.isTeamZero?d4:h4,s=new je({color:i,transparent:!0,opacity:.8,side:ut,depthWrite:!1,depthTest:!1}),a=new oi(p4,m4,48),r=new Se(a,s);r.renderOrder=30,this.group.add(r);const o=new $e().setFromPoints([new T(e.ceilingContactPosition.x,e.ceilingContactPosition.y,e.ceilingContactPosition.z),new T(e.touchPosition.x,e.touchPosition.y,e.touchPosition.z)]),l=new Pt({color:i,transparent:!0,opacity:.7,depthWrite:!1,depthTest:!1}),c=new On(o,l);c.renderOrder=29,this.group.add(c);const u=document.createElement("div");u.className=`sap-ceiling-shot-overlay-label ${e.isTeamZero?"sap-ceiling-shot-overlay-label-blue":"sap-ceiling-shot-overlay-label-orange"}`,u.textContent=`${e.playerName} ceiling shot ${e.qualityLabel}`,this.labelRoot.append(u);const d={marker:e,ring:r,ringMaterial:s,beam:c,beamGeometry:o,beamMaterial:l,label:u};return this.views.set(e.id,d),d}}const S4="#d1d9e0",a1=new Set(["flick_goal","double_tap_goal","one_timer_goal","passing_goal","air_dribble_goal","flip_reset_goal","bump_goal","demo_goal","half_volley_goal"]);function my(n){return n.metadata.performer==="scorer"||n.metadata.modifiers?.includes("by_scorer")?"scorer":n.metadata.performer==="teammate"?"teammate":a1.has(n.kind)?"unknown":"scorer"}function T4(n){return my(n)==="scorer"}function M4(n){return my(n)==="teammate"}function r1(n){const e=my(n);return e==="unknown"?"performer unknown":a1.has(n.kind)?`by ${e}`:null}function is(n,e){return n.players.find(t=>t.id===e)?.name??e}function Un(n,e,t){return n.frames[e??-1]?.time??t}function E4(n){const e=n.kind;return e!=="forward"&&e!=="reverse"&&e!=="side"?"flick":`${n.direction==="left"||n.direction==="right"?`${n.direction} `:""}${e} flick`}function C4(n){const e=new Set(n),t=new Set(["goal"]);return e.has("core")&&(t.add("save"),t.add("shot"),t.add("assist")),e.has("demo")&&t.add("demo"),[...t]}function A4(n,e){const t=new Set(C4(e));return n.timelineEvents.filter(i=>t.has(i.kind))}function R4(n,e){return n1(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"fifty-fifty",label:t.label,shortLabel:t.label.startsWith("Kickoff 50/50")?"KO":"50",isTeamZero:t.winnerIsTeamZero,color:t.winnerIsTeamZero===null?S4:t.winnerIsTeamZero?tn:nn}))}function P4(n,e){return(be(n,"flick")??[]).map((t,i)=>{const s=Ct(t.player),a=is(e,s),r=E4(t);return{id:`flick:${t.frame}:${s}:${i+1}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"flick",label:`${a} ${r}`,shortLabel:"F",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function I4(n,e){return jE(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"touch",label:`${t.playerName} touch`,shortLabel:"T",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?tn:nn}))}function L4(n,e){return be(n,"backboard").map((t,i)=>{const s=Ct(t.player),a=e.players.find(r=>r.id===s)?.name??s;return{id:`backboard:${t.frame}:${s}:${i}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"backboard",label:`${a} backboard`,shortLabel:"BB",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function k4(n,e){return s1(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"ceiling-shot",label:`${t.playerName} ceiling shot ${t.qualityLabel}`,shortLabel:"CS",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?tn:nn}))}function D4(n,e){return be(n,"wall_aerial").map((t,i)=>{const s=Ct(t.player),a=is(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Dn(t.wall).toLowerCase();return{id:`wall-aerial:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial",label:`${a} wall-to-air setup ${o}% | ${l} wall`,shortLabel:"W2A",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function O4(n,e){return be(n,"wall_aerial_shot").map((t,i)=>{const s=Ct(t.player),a=is(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Dn(t.wall).toLowerCase();return{id:`wall-aerial-shot:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial-shot",label:`${a} wall shot ${o}% | ${l} wall`,shortLabel:"WS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function F4(n,e){return be(n,"double_tap").map((t,i)=>{const s=Ct(t.player),a=is(e,s);return{id:`double-tap:${t.frame}:${s}:${i}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"double-tap",label:`${a} double tap`,shortLabel:"DT",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function N4(n,e){return be(n,"center").map((t,i)=>{const s=Ct(t.player),a=is(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.lateral_centering_distance);return{id:`center:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"center",label:`${a} center | ${o}uu lateral`,shortLabel:"C",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function U4(n,e){return be(n,"one_timer").map((t,i)=>{const s=Ct(t.player),a=Ct(t.passer),r=is(e,s),o=is(e,a),l=Un(e,t.frame,t.time),c=Math.round(t.ball_speed);return{id:`one-timer:${t.frame}:${a}:${s}:${i}`,time:l,frame:t.frame,kind:"one-timer",label:`${r} one-timer from ${o} | ${c}uu/s`,shortLabel:"OT",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function B4(n){return Dn(n.replace(/_pass$/,""))}function z4(n,e){return be(n,"pass").map((t,i)=>{const s=Ct(t.passer),a=Ct(t.receiver),r=is(e,s),o=is(e,a),l=Un(e,t.frame,t.time),c=Math.round(t.ball_travel_distance),u=B4(t.pass_kind);return{id:`pass:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"pass",label:`${r} to ${o} ${u.toLowerCase()} pass | ${c}uu`,shortLabel:"P",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function H4(n,e){return be(n,"half_volley").map((t,i)=>{const s=Ct(t.player),a=is(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.ball_speed);return{id:`half-volley:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-volley",label:`${a} half volley | ${o}uu/s`,shortLabel:"HV",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function V4(n,e){return be(n,"rush").map((t,i)=>{const s=Un(e,t.end_frame,t.end_time),a=`${t.attackers}v${t.defenders}`,r=t.is_team_0?"Blue":"Orange";return{id:`rush:${t.start_frame}:${t.end_frame}:${i}`,time:s,frame:t.end_frame,kind:"rush",label:`${r} rush ${a}`,shortLabel:"R",playerId:null,playerName:null,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function G4(n,e){return(be(n,"powerslide")??[]).filter(t=>t.active).map((t,i)=>{const s=Ct(t.player),a=is(e,s);return{id:`powerslide:${t.frame}:${s}:${i+1}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"powerslide",label:`${a} powerslide`,shortLabel:"PS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function $4(n,e){return be(n,"speed_flip").map(t=>{const i=t.player?Ct(t.player):null,s=i?e.players.find(o=>o.id===i)?.name??i:"Unknown",a=e.frames[t.frame]?.time??t.time,r=Math.round(t.confidence*100);return{id:`speed-flip:${t.frame}:${i}:${Math.round(t.confidence*1e3)}`,time:a,frame:t.frame,kind:"speed-flip",label:`${s} speed flip ${r}%`,shortLabel:"SF",playerId:i,playerName:s,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function W4(n,e){return(be(n,"dodge")??[]).map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round((t.dodge_impulse?.confidence??1)*100),l=(t.dodge_impulse?.direction_label??"dodge").replaceAll("_"," ");return{id:`dodge:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"dodge",label:`${a} flip impulse ${l} ${o}%`,shortLabel:"FI",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function X4(n,e){return be(n,"half_flip").map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.end_speed-t.start_speed);return{id:`half-flip:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-flip",label:`${a} half flip ${o}% | +${l}uu/s`,shortLabel:"HF",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function K4(n,e){return be(n,"wavedash").map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.horizontal_speed_gain);return{id:`wavedash:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wavedash",label:`${a} wavedash ${o}% | +${l}uu/s`,shortLabel:"WD",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function q4(n,e){return be(n,"bump").map((t,i)=>{const s=Ct(t.initiator),a=Ct(t.victim),r=e.players.find(u=>u.id===s)?.name??s,o=e.players.find(u=>u.id===a)?.name??a,l=Un(e,t.frame,t.time),c=Math.round(t.confidence*100);return{id:`bump:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"bump",label:`${r} bumped ${o} ${c}%`,shortLabel:"B",playerId:s,playerName:r,isTeamZero:t.initiator_is_team_0,color:t.initiator_is_team_0?tn:nn}})}function Y4(n){return n.kind==="beaten_to_ball"?"BT":n.dodge_active?"DW":n.aerial?"AW":"W"}function j4(n){const e=[n.aerial?"aerial":"grounded"];return n.dodge_active&&e.push("dodge"),e.join(" ")}function Z4(n){return n.kind==="beaten_to_ball"?"beaten to ball":"whiff"}function J4(n,e){return be(n,"whiff").map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round(t.closest_approach_distance),l=Math.round(t.approach_speed);return{id:`whiff:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"whiff",label:`${a} ${j4(t)} ${Z4(t)} | ${o}uu closest, ${l}uu/s`,shortLabel:Y4(t),playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}const o1={flick:P4,ceiling_shot:k4,wall_aerial:D4,wall_aerial_shot:O4,double_tap:F4,center:N4,one_timer:U4,pass:z4,half_flip:X4,half_volley:H4,speed_flip:$4},l1=Object.keys(o1),c1=.02,si=1e-4,Q4=200,u1=.08,B_={big:"rgba(245, 158, 11, 0.92)",small:"rgba(52, 211, 153, 0.86)"},$x={both:"rgba(52, 211, 153, 0.86)",inferred_only:"rgba(239, 68, 68, 0.9)",reported_only:"rgba(59, 130, 246, 0.9)"};function eG(n){const e=n.config?.ball_half_neutral_zone_half_width_y;return typeof e=="number"&&Number.isFinite(e)?Math.max(0,e):Q4}function Th(n,e,t){return n?.frames?.[e??-1]?.time??t}function tG(n,e,t,i,s,a){const r=e?.ballFrames[n]?.position?.y;return typeof r=="number"&&Number.isFinite(r)&&Math.abs(r)<=t+si||a>si?"neutral":i>s+si?"team_zero_side":s>i+si?"team_one_side":null}function d1(n,e,t){if(n==="neutral")return{id:`half-control:neutral:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:"Neutral half control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_side";return{id:`half-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:i?"Blue half control":"Orange half control",color:Ef(i)??void 0,isTeamZero:i}}function Af(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function nG(n,e){const t=Af(be(n,"possession")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return nG(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.possession?.possession_time??0,u=l.team_one?.possession?.possession_time??0,d=l.team_zero?.possession?.neutral_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;let g=null;const{startTime:_,endTime:m}=Er(o,r,e);h>f+si&&h>p+si?g={id:`possession:team_zero:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Blue possession",color:"rgba(59, 130, 246, 0.88)",isTeamZero:!0}:f>h+si&&f>p+si&&(g={id:`possession:team_one:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Orange possession",color:"rgba(245, 158, 11, 0.88)",isTeamZero:!1}),Zo(t,g),r=o}return t}function sG(n,e){const t=Af(be(n,"ball_half")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return sG(n,e);const t=[];let i=0,s=0,a=0;const r=eG(n);let o=null;for(const l of n.frames){if(!Number.isFinite(l.time)||!Number.isFinite(l.dt)||l.dt<=0){o=l;continue}const c=l,u=c.team_zero?.ball_half?.defensive_half_time??0,d=c.team_one?.ball_half?.defensive_half_time??0,h=c.team_zero?.ball_half?.neutral_time??0,f=u-i,p=d-s,g=h-a;i=u,s=d,a=h;const{startTime:_,endTime:m}=Er(l,o,e),v=tG(l.frame_number,e,r,f,p,g),y=v?d1(v,_,m):null;Zo(t,y),o=l}return t}function rG(n,e,t){return t>si?"neutral_third":n>e+si?"team_zero_third":e>n+si?"team_one_third":null}function h1(n,e,t){if(n==="neutral_third")return{id:`third-control:neutral_third:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:"Neutral third control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_third";return{id:`third-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:i?"Blue third control":"Orange third control",color:Ef(i)??void 0,isTeamZero:i}}function oG(n,e){const t=Af(be(n,"ball_third")),i=[];let s=0,a=!1,r="neutral_third",o=null;for(const l of n.frames){for(;s0)return oG(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.ball_third?.defensive_third_time??0,u=l.team_one?.ball_third?.defensive_third_time??0,d=l.team_zero?.ball_third?.neutral_third_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;const{startTime:g,endTime:_}=Er(o,r,e),m=rG(h,f,p),v=m?h1(m,g,_):null;Zo(t,v),r=o}return t}function cG(n,e){return be(n,"fifty_fifty").map((t,i)=>{const s=Th(e,t.start_frame,t.start_time),a=Math.max(s,Th(e,t.resolve_frame,t.resolve_time)),r=t.winning_team_is_team_0==null?"Neutral":t.winning_team_is_team_0?"Blue win":"Orange win",o=t.is_kickoff?"kickoff ":"";return{id:`fifty-fifty:${t.start_frame}:${t.resolve_frame}:${i}`,startTime:s,endTime:a,lane:"fifty-fifty",laneLabel:"50/50",label:`${r} ${o}50/50`,shortLabel:t.is_kickoff?"KO":"50",color:t.winning_team_is_team_0==null?"rgba(209, 217, 224, 0.7)":t.winning_team_is_team_0?"rgba(59, 130, 246, 0.48)":"rgba(245, 158, 11, 0.48)",isTeamZero:t.winning_team_is_team_0}}).sort((t,i)=>t.startTime!==i.startTime?t.startTime-i.startTime:(t.id??"").localeCompare(i.id??""))}function uG(n,e){return be(n,"rush").map((t,i)=>{const s=e?.frames[t.start_frame]?.time??t.start_time,a=e?.frames[t.end_frame]?.time??t.end_time,r=`${t.attackers}v${t.defenders}`,o=t.is_team_0;return{id:`rush-range:${t.start_frame}:${t.end_frame}:${i}`,startTime:s,endTime:Math.max(s,a),lane:"rush",laneLabel:"Rush",label:`${o?"Blue":"Orange"} rush ${r}`,color:o?"rgba(59, 130, 246, 0.4)":"rgba(245, 158, 11, 0.4)",isTeamZero:o}})}function dG(n,e={}){const t=f1(e),i=new Set(e.detections??["both","inferred_only","reported_only"]),s=new Set(e.activities??["active","inactive","unknown"]),a=new Set(e.fieldHalves??["own","opponent","unknown"]),r=e.playerIds?new Set(e.playerIds):null;if(t.size===0||i.size===0||!s.has("unknown")||!a.has("unknown")||r?.size===0)return[];const o=new Map(n.players.map(c=>[c.id,c.isTeamZero])),l=[];for(const c of n.boostPads)if(t.has(c.size))for(let u=0;uc.startTime!==u.startTime?c.startTime-u.startTime:(c.id??"").localeCompare(u.id??""))}function f1(n){if(n.padTypes)return new Set(n.padTypes);if(n.sizes){const e=new Set(n.sizes),t=new Set;return e.has("big")&&t.add("big"),e.has("small")&&t.add("small"),e.has("big")&&e.has("small")&&t.add("ambiguous"),t}return new Set(["big","small","ambiguous"])}function Wx(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function hG(n){return{big:"big",small:"small",ambiguous:"ambiguous"}[n]}function fG(n){return{both:"counted",inferred_only:"inferred",reported_only:"reported"}[n]}function pG(n,e){return n==="inferred_only"?"I":n==="reported_only"?"R":{big:"100",small:"12",ambiguous:"?"}[e]}function mG(n,e,t={}){const i=be(n,"boost_pickup");if(i.length===0&&e)return dG(e,t);const s=f1(t),a=new Set(t.detections??["both","inferred_only","reported_only"]),r=new Set(t.activities??["active","inactive","unknown"]),o=new Set(t.fieldHalves??["own","opponent","unknown"]),l=t.playerIds?new Set(t.playerIds):null;if(s.size===0||a.size===0||r.size===0||o.size===0||l?.size===0)return[];const c=new Map((e?.players??[]).map(u=>[u.id,u.name]));return i.filter(u=>{const d=Wx(u.player_id);return s.has(u.pad_type)&&a.has(u.detection)&&r.has(u.activity)&&o.has(u.field_half)&&(!l||l.has(d))}).map((u,d)=>{const h=Wx(u.player_id),f=c.get(h)??h,p=Math.max(0,Th(e,u.frame,u.time)),g=fG(u.detection),_=hG(u.pad_type);return{id:`boost-pickup:${u.detection}:${u.frame}:${h}:${d}`,startTime:p,endTime:Math.max(p+u1,p),lane:"boost-pickups",laneLabel:"Boost Pickups",label:`${f} ${g} ${_} boost pickup`,shortLabel:pG(u.detection,u.pad_type),color:Ef(u.is_team_0)??(u.detection==="both"?u.pad_type==="big"?B_.big:u.pad_type==="small"?B_.small:$x.both:$x[u.detection]),isTeamZero:u.is_team_0}}).sort((u,d)=>u.startTime!==d.startTime?u.startTime-d.startTime:(u.id??"").localeCompare(d.id??""))}const Sd=[{fieldName:"time_defensive_third",aliases:["time_defensive_zone"],label:"Def third",relativeColor:"own"},{fieldName:"time_neutral_third",aliases:["time_neutral_zone"],label:"Neutral third",relativeColor:"neutral"},{fieldName:"time_offensive_third",aliases:["time_offensive_zone"],label:"Off third",relativeColor:"opp"}];function p1(n,e){return n.relativeColor==="neutral"?"rgba(209, 217, 224, 0.68)":(n.relativeColor==="own"?e:!e)?"rgba(89, 195, 255, 0.74)":"rgba(255, 193, 92, 0.78)"}function _y(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function _G(n,e){const t=n.positioning;if(!t)return 0;for(const i of[e.fieldName,...e.aliases??[]]){const s=t[i];if(typeof s=="number"&&Number.isFinite(s))return s}return 0}function gG(n){switch(n){case"defensive":return Sd[0];case"neutral":return Sd[1];case"offensive":return Sd[2]}}function yG(n){const e=new Map;for(const t of n.frames)for(const i of t.players){const s=_y(i.player_id);e.has(s)||e.set(s,i.name)}return e}function vG(n){const e=Af(be(n,"field_third")),t=[],i=new Map,s=yG(n);for(const a of e){if(!Number.isFinite(a.time)||!Number.isFinite(a.end_time)||a.end_time-a.time<=si)continue;const r=_y(a.player),o=gG(a.state);m1(t,i,{id:`time-in-zone:${r}:${o.fieldName}:${a.time.toFixed(3)}`,startTime:a.time,endTime:a.end_time,lane:`time-in-zone:${r}`,laneLabel:s.get(r)??r,label:o.label,color:p1(o,a.is_team_0),isTeamZero:a.is_team_0})}return t}function bG(n,e){if(be(n,"field_third").length>0)return vG(n);const t=new Map,i=[],s=new Map;let a=null;for(const r of n.frames){if(!Number.isFinite(r.time)||!Number.isFinite(r.dt)||r.dt<=0){a=r;continue}const{startTime:o,endTime:l}=Er(r,a,e);if(l-o<=si){a=r;continue}for(const c of r.players){const u=_y(c.player_id),d=t.get(u)??new Map;let h=null,f=0;for(const p of Sd){const g=_G(c,p),_=g-(d.get(p.fieldName)??0);_>f+si&&(f=_,h=p),d.set(p.fieldName,g)}t.set(u,d),h&&m1(i,s,{id:`time-in-zone:${u}:${h.fieldName}:${o.toFixed(3)}`,startTime:o,endTime:l,lane:`time-in-zone:${u}`,laneLabel:c.name,label:h.label,color:p1(h,c.is_team_0),isTeamZero:c.is_team_0})}a=r}return i}function Er(n,e,t){const i=t?.frames[n.frame_number]?.time??n.time,s=e?t?.frames[e.frame_number]?.time??e.time:Math.max(0,i-n.dt);return{startTime:Math.max(0,s),endTime:Math.max(s,i)}}function Zo(n,e){if(!e)return;const t=n[n.length-1];if(t&&t.lane===e.lane&&t.label===e.label&&Math.abs(t.endTime-e.startTime)<=c1){t.endTime=e.endTime;return}n.push(e)}function m1(n,e,t){if(!t)return;const i=t.lane??"",s=e.get(i);if(s&&s.label===t.label&&Math.abs(s.endTime-t.startTime)<=c1){s.endTime=t.endTime;return}n.push(t),e.set(i,t)}const Mm=236,_1="relative-positioning",xG={last:"Last",upfield:"Upfield",level:"Level",mid:"Mid"};function ca(n){return n?"team-blue":"team-orange"}function g1(n,e,t){return`
+ `,document.head.append(n)}function tG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class nG{scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,j4);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=Z4;constructor(e,t,i,s){eG(),this.scene=e,this.container=t,this.markers=m1(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="ceiling-shot-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-ceiling-shot-overlay-root",this.container.append(this.labelRoot)}update(e){const t=Q4(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.ringMaterial.dispose(),a.beam.removeFromParent(),a.beamGeometry.dispose(),a.beamMaterial.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.14+.6*r,c=.94+(1-r)*.18;o.ringMaterial.opacity=l,o.beamMaterial.opacity=.18+.55*r,o.ring.position.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z+12),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.touchPosition.x,s.touchPosition.y,s.touchPosition.z).add(this.labelOffset);const u=tG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.ringMaterial.dispose(),e.beam.removeFromParent(),e.beamGeometry.dispose(),e.beamMaterial.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.quality>=.8?K4:e.isTeamZero?W4:X4,s=new je({color:i,transparent:!0,opacity:.8,side:ut,depthWrite:!1,depthTest:!1}),a=new oi(q4,Y4,48),r=new Se(a,s);r.renderOrder=30,this.group.add(r);const o=new $e().setFromPoints([new T(e.ceilingContactPosition.x,e.ceilingContactPosition.y,e.ceilingContactPosition.z),new T(e.touchPosition.x,e.touchPosition.y,e.touchPosition.z)]),l=new Pt({color:i,transparent:!0,opacity:.7,depthWrite:!1,depthTest:!1}),c=new On(o,l);c.renderOrder=29,this.group.add(c);const u=document.createElement("div");u.className=`sap-ceiling-shot-overlay-label ${e.isTeamZero?"sap-ceiling-shot-overlay-label-blue":"sap-ceiling-shot-overlay-label-orange"}`,u.textContent=`${e.playerName} ceiling shot ${e.qualityLabel}`,this.labelRoot.append(u);const d={marker:e,ring:r,ringMaterial:s,beam:c,beamGeometry:o,beamMaterial:l,label:u};return this.views.set(e.id,d),d}}const iG="#d1d9e0",_1=new Set(["flick_goal","double_tap_goal","one_timer_goal","passing_goal","air_dribble_goal","flip_reset_goal","bump_goal","demo_goal","half_volley_goal"]);function wy(n){return n.metadata.performer==="scorer"||n.metadata.modifiers?.includes("by_scorer")?"scorer":n.metadata.performer==="teammate"?"teammate":_1.has(n.kind)?"unknown":"scorer"}function sG(n){return wy(n)==="scorer"}function aG(n){return wy(n)==="teammate"}function g1(n){const e=wy(n);return e==="unknown"?"performer unknown":_1.has(n.kind)?`by ${e}`:null}function ss(n,e){return n.players.find(t=>t.id===e)?.name??e}function Un(n,e,t){return n.frames[e??-1]?.time??t}function rG(n){const e=n.kind;return e!=="forward"&&e!=="reverse"&&e!=="side"?"flick":`${n.direction==="left"||n.direction==="right"?`${n.direction} `:""}${e} flick`}function oG(n){const e=new Set(n),t=new Set(["goal"]);return e.has("core")&&(t.add("save"),t.add("shot"),t.add("assist")),e.has("demo")&&t.add("demo"),[...t]}function lG(n,e){const t=new Set(oG(e));return n.timelineEvents.filter(i=>t.has(i.kind))}function cG(n,e){return f1(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"fifty-fifty",label:t.label,shortLabel:t.label.startsWith("Kickoff 50/50")?"KO":"50",isTeamZero:t.winnerIsTeamZero,color:t.winnerIsTeamZero===null?iG:t.winnerIsTeamZero?tn:nn}))}function uG(n,e){return(be(n,"flick")??[]).map((t,i)=>{const s=Ct(t.player),a=ss(e,s),r=rG(t);return{id:`flick:${t.frame}:${s}:${i+1}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"flick",label:`${a} ${r}`,shortLabel:"F",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function dG(n,e){return o1(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"touch",label:`${t.playerName} touch`,shortLabel:"T",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?tn:nn}))}function hG(n,e){return be(n,"backboard").map((t,i)=>{const s=Ct(t.player),a=e.players.find(r=>r.id===s)?.name??s;return{id:`backboard:${t.frame}:${s}:${i}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"backboard",label:`${a} backboard`,shortLabel:"BB",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function fG(n,e){return m1(n,e).map(t=>({id:t.id,time:t.time,frame:t.frame,kind:"ceiling-shot",label:`${t.playerName} ceiling shot ${t.qualityLabel}`,shortLabel:"CS",playerId:t.playerId,playerName:t.playerName,isTeamZero:t.isTeamZero,color:t.isTeamZero?tn:nn}))}function pG(n,e){return be(n,"wall_aerial").map((t,i)=>{const s=Ct(t.player),a=ss(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Dn(t.wall).toLowerCase();return{id:`wall-aerial:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial",label:`${a} wall-to-air setup ${o}% | ${l} wall`,shortLabel:"W2A",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function mG(n,e){return be(n,"wall_aerial_shot").map((t,i)=>{const s=Ct(t.player),a=ss(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Dn(t.wall).toLowerCase();return{id:`wall-aerial-shot:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wall-aerial-shot",label:`${a} wall shot ${o}% | ${l} wall`,shortLabel:"WS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function _G(n,e){return be(n,"double_tap").map((t,i)=>{const s=Ct(t.player),a=ss(e,s);return{id:`double-tap:${t.frame}:${s}:${i}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"double-tap",label:`${a} double tap`,shortLabel:"DT",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function gG(n,e){return be(n,"center").map((t,i)=>{const s=Ct(t.player),a=ss(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.lateral_centering_distance);return{id:`center:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"center",label:`${a} center | ${o}uu lateral`,shortLabel:"C",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function yG(n,e){return be(n,"one_timer").map((t,i)=>{const s=Ct(t.player),a=Ct(t.passer),r=ss(e,s),o=ss(e,a),l=Un(e,t.frame,t.time),c=Math.round(t.ball_speed);return{id:`one-timer:${t.frame}:${a}:${s}:${i}`,time:l,frame:t.frame,kind:"one-timer",label:`${r} one-timer from ${o} | ${c}uu/s`,shortLabel:"OT",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function vG(n){return Dn(n.replace(/_pass$/,""))}function bG(n,e){return be(n,"pass").map((t,i)=>{const s=Ct(t.passer),a=Ct(t.receiver),r=ss(e,s),o=ss(e,a),l=Un(e,t.frame,t.time),c=Math.round(t.ball_travel_distance),u=vG(t.pass_kind);return{id:`pass:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"pass",label:`${r} to ${o} ${u.toLowerCase()} pass | ${c}uu`,shortLabel:"P",playerId:s,playerName:r,secondaryPlayerId:a,secondaryPlayerName:o,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function xG(n,e){return be(n,"half_volley").map((t,i)=>{const s=Ct(t.player),a=ss(e,s),r=Un(e,t.frame,t.time),o=Math.round(t.ball_speed);return{id:`half-volley:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-volley",label:`${a} half volley | ${o}uu/s`,shortLabel:"HV",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function wG(n,e){return be(n,"rush").map((t,i)=>{const s=Un(e,t.end_frame,t.end_time),a=`${t.attackers}v${t.defenders}`,r=t.is_team_0?"Blue":"Orange";return{id:`rush:${t.start_frame}:${t.end_frame}:${i}`,time:s,frame:t.end_frame,kind:"rush",label:`${r} rush ${a}`,shortLabel:"R",playerId:null,playerName:null,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function SG(n,e){return(be(n,"powerslide")??[]).filter(t=>t.active).map((t,i)=>{const s=Ct(t.player),a=ss(e,s);return{id:`powerslide:${t.frame}:${s}:${i+1}`,time:Un(e,t.frame,t.time),frame:t.frame,kind:"powerslide",label:`${a} powerslide`,shortLabel:"PS",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function TG(n,e){return be(n,"speed_flip").map(t=>{const i=t.player?Ct(t.player):null,s=i?e.players.find(o=>o.id===i)?.name??i:"Unknown",a=e.frames[t.frame]?.time??t.time,r=Math.round(t.confidence*100);return{id:`speed-flip:${t.frame}:${i}:${Math.round(t.confidence*1e3)}`,time:a,frame:t.frame,kind:"speed-flip",label:`${s} speed flip ${r}%`,shortLabel:"SF",playerId:i,playerName:s,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function MG(n,e){return(be(n,"dodge")??[]).map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round((t.dodge_impulse?.confidence??1)*100),l=(t.dodge_impulse?.direction_label??"dodge").replaceAll("_"," ");return{id:`dodge:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"dodge",label:`${a} flip impulse ${l} ${o}%`,shortLabel:"FI",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function EG(n,e){return be(n,"half_flip").map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.end_speed-t.start_speed);return{id:`half-flip:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"half-flip",label:`${a} half flip ${o}% | +${l}uu/s`,shortLabel:"HF",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function CG(n,e){return be(n,"wavedash").map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round(t.confidence*100),l=Math.round(t.horizontal_speed_gain);return{id:`wavedash:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"wavedash",label:`${a} wavedash ${o}% | +${l}uu/s`,shortLabel:"WD",playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}function AG(n,e){return be(n,"bump").map((t,i)=>{const s=Ct(t.initiator),a=Ct(t.victim),r=e.players.find(u=>u.id===s)?.name??s,o=e.players.find(u=>u.id===a)?.name??a,l=Un(e,t.frame,t.time),c=Math.round(t.confidence*100);return{id:`bump:${t.frame}:${s}:${a}:${i}`,time:l,frame:t.frame,kind:"bump",label:`${r} bumped ${o} ${c}%`,shortLabel:"B",playerId:s,playerName:r,isTeamZero:t.initiator_is_team_0,color:t.initiator_is_team_0?tn:nn}})}function RG(n){return n.kind==="beaten_to_ball"?"BT":n.dodge_active?"DW":n.aerial?"AW":"W"}function PG(n){const e=[n.aerial?"aerial":"grounded"];return n.dodge_active&&e.push("dodge"),e.join(" ")}function IG(n){return n.kind==="beaten_to_ball"?"beaten to ball":"whiff"}function LG(n,e){return be(n,"whiff").map((t,i)=>{const s=Ct(t.player),a=e.players.find(c=>c.id===s)?.name??s,r=Un(e,t.frame,t.time),o=Math.round(t.closest_approach_distance),l=Math.round(t.approach_speed);return{id:`whiff:${t.frame}:${s}:${i}`,time:r,frame:t.frame,kind:"whiff",label:`${a} ${PG(t)} ${IG(t)} | ${o}uu closest, ${l}uu/s`,shortLabel:RG(t),playerId:s,playerName:a,isTeamZero:t.is_team_0,color:t.is_team_0?tn:nn}})}const y1={flick:uG,ceiling_shot:fG,wall_aerial:pG,wall_aerial_shot:mG,double_tap:_G,center:gG,one_timer:yG,pass:bG,half_flip:EG,half_volley:xG,speed_flip:TG},v1=Object.keys(y1),b1=.02,si=1e-4,kG=200,x1=.08,X_={big:"rgba(245, 158, 11, 0.92)",small:"rgba(52, 211, 153, 0.86)"},Qx={both:"rgba(52, 211, 153, 0.86)",inferred_only:"rgba(239, 68, 68, 0.9)",reported_only:"rgba(59, 130, 246, 0.9)"};function DG(n){const e=n.config?.ball_half_neutral_zone_half_width_y;return typeof e=="number"&&Number.isFinite(e)?Math.max(0,e):kG}function Ph(n,e,t){return n?.frames?.[e??-1]?.time??t}function OG(n,e,t,i,s,a){const r=e?.ballFrames[n]?.position?.y;return typeof r=="number"&&Number.isFinite(r)&&Math.abs(r)<=t+si||a>si?"neutral":i>s+si?"team_zero_side":s>i+si?"team_one_side":null}function w1(n,e,t){if(n==="neutral")return{id:`half-control:neutral:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:"Neutral half control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_side";return{id:`half-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"half-control",laneLabel:"Half Control",label:i?"Blue half control":"Orange half control",color:Lf(i)??void 0,isTeamZero:i}}function Df(n){return n.map((e,t)=>({event:e,index:t})).sort((e,t)=>e.event.frame!==t.event.frame?e.event.frame-t.event.frame:e.event.time!==t.event.time?e.event.time-t.event.time:e.index-t.index).map(({event:e})=>e)}function FG(n,e){const t=Df(be(n,"possession")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return FG(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.possession?.possession_time??0,u=l.team_one?.possession?.possession_time??0,d=l.team_zero?.possession?.neutral_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;let g=null;const{startTime:_,endTime:m}=Cr(o,r,e);h>f+si&&h>p+si?g={id:`possession:team_zero:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Blue possession",color:"rgba(59, 130, 246, 0.88)",isTeamZero:!0}:f>h+si&&f>p+si&&(g={id:`possession:team_one:${_.toFixed(3)}`,startTime:_,endTime:m,lane:"possession",laneLabel:"Possession",label:"Orange possession",color:"rgba(245, 158, 11, 0.88)",isTeamZero:!1}),el(t,g),r=o}return t}function UG(n,e){const t=Df(be(n,"ball_half")),i=[];let s=0,a=!1,r="neutral",o=null;for(const l of n.frames){for(;s0)return UG(n,e);const t=[];let i=0,s=0,a=0;const r=DG(n);let o=null;for(const l of n.frames){if(!Number.isFinite(l.time)||!Number.isFinite(l.dt)||l.dt<=0){o=l;continue}const c=l,u=c.team_zero?.ball_half?.defensive_half_time??0,d=c.team_one?.ball_half?.defensive_half_time??0,h=c.team_zero?.ball_half?.neutral_time??0,f=u-i,p=d-s,g=h-a;i=u,s=d,a=h;const{startTime:_,endTime:m}=Cr(l,o,e),v=OG(l.frame_number,e,r,f,p,g),y=v?w1(v,_,m):null;el(t,y),o=l}return t}function zG(n,e,t){return t>si?"neutral_third":n>e+si?"team_zero_third":e>n+si?"team_one_third":null}function S1(n,e,t){if(n==="neutral_third")return{id:`third-control:neutral_third:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:"Neutral third control",color:"rgba(209, 217, 224, 0.7)",isTeamZero:null};const i=n==="team_zero_third";return{id:`third-control:${n}:${e.toFixed(3)}`,startTime:e,endTime:t,lane:"third-control",laneLabel:"Third Control",label:i?"Blue third control":"Orange third control",color:Lf(i)??void 0,isTeamZero:i}}function HG(n,e){const t=Df(be(n,"ball_third")),i=[];let s=0,a=!1,r="neutral_third",o=null;for(const l of n.frames){for(;s0)return HG(n,e);const t=[];let i=0,s=0,a=0,r=null;for(const o of n.frames){if(!Number.isFinite(o.time)||!Number.isFinite(o.dt)||o.dt<=0){r=o;continue}const l=o,c=l.team_zero?.ball_third?.defensive_third_time??0,u=l.team_one?.ball_third?.defensive_third_time??0,d=l.team_zero?.ball_third?.neutral_third_time??0,h=c-i,f=u-s,p=d-a;i=c,s=u,a=d;const{startTime:g,endTime:_}=Cr(o,r,e),m=zG(h,f,p),v=m?S1(m,g,_):null;el(t,v),r=o}return t}function GG(n,e){return be(n,"fifty_fifty").map((t,i)=>{const s=Ph(e,t.start_frame,t.start_time),a=Math.max(s,Ph(e,t.resolve_frame,t.resolve_time)),r=t.winning_team_is_team_0==null?"Neutral":t.winning_team_is_team_0?"Blue win":"Orange win",o=t.is_kickoff?"kickoff ":"";return{id:`fifty-fifty:${t.start_frame}:${t.resolve_frame}:${i}`,startTime:s,endTime:a,lane:"fifty-fifty",laneLabel:"50/50",label:`${r} ${o}50/50`,shortLabel:t.is_kickoff?"KO":"50",color:t.winning_team_is_team_0==null?"rgba(209, 217, 224, 0.7)":t.winning_team_is_team_0?"rgba(59, 130, 246, 0.48)":"rgba(245, 158, 11, 0.48)",isTeamZero:t.winning_team_is_team_0}}).sort((t,i)=>t.startTime!==i.startTime?t.startTime-i.startTime:(t.id??"").localeCompare(i.id??""))}function $G(n,e){return be(n,"rush").map((t,i)=>{const s=e?.frames[t.start_frame]?.time??t.start_time,a=e?.frames[t.end_frame]?.time??t.end_time,r=`${t.attackers}v${t.defenders}`,o=t.is_team_0;return{id:`rush-range:${t.start_frame}:${t.end_frame}:${i}`,startTime:s,endTime:Math.max(s,a),lane:"rush",laneLabel:"Rush",label:`${o?"Blue":"Orange"} rush ${r}`,color:o?"rgba(59, 130, 246, 0.4)":"rgba(245, 158, 11, 0.4)",isTeamZero:o}})}function WG(n,e={}){const t=T1(e),i=new Set(e.detections??["both","inferred_only","reported_only"]),s=new Set(e.activities??["active","inactive","unknown"]),a=new Set(e.fieldHalves??["own","opponent","unknown"]),r=e.playerIds?new Set(e.playerIds):null;if(t.size===0||i.size===0||!s.has("unknown")||!a.has("unknown")||r?.size===0)return[];const o=new Map(n.players.map(c=>[c.id,c.isTeamZero])),l=[];for(const c of n.boostPads)if(t.has(c.size))for(let u=0;uc.startTime!==u.startTime?c.startTime-u.startTime:(c.id??"").localeCompare(u.id??""))}function T1(n){if(n.padTypes)return new Set(n.padTypes);if(n.sizes){const e=new Set(n.sizes),t=new Set;return e.has("big")&&t.add("big"),e.has("small")&&t.add("small"),e.has("big")&&e.has("small")&&t.add("ambiguous"),t}return new Set(["big","small","ambiguous"])}function ew(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function XG(n){return{big:"big",small:"small",ambiguous:"ambiguous"}[n]}function KG(n){return{both:"counted",inferred_only:"inferred",reported_only:"reported"}[n]}function qG(n,e){return n==="inferred_only"?"I":n==="reported_only"?"R":{big:"100",small:"12",ambiguous:"?"}[e]}function YG(n,e,t={}){const i=be(n,"boost_pickup");if(i.length===0&&e)return WG(e,t);const s=T1(t),a=new Set(t.detections??["both","inferred_only","reported_only"]),r=new Set(t.activities??["active","inactive","unknown"]),o=new Set(t.fieldHalves??["own","opponent","unknown"]),l=t.playerIds?new Set(t.playerIds):null;if(s.size===0||a.size===0||r.size===0||o.size===0||l?.size===0)return[];const c=new Map((e?.players??[]).map(u=>[u.id,u.name]));return i.filter(u=>{const d=ew(u.player_id);return s.has(u.pad_type)&&a.has(u.detection)&&r.has(u.activity)&&o.has(u.field_half)&&(!l||l.has(d))}).map((u,d)=>{const h=ew(u.player_id),f=c.get(h)??h,p=Math.max(0,Ph(e,u.frame,u.time)),g=KG(u.detection),_=XG(u.pad_type);return{id:`boost-pickup:${u.detection}:${u.frame}:${h}:${d}`,startTime:p,endTime:Math.max(p+x1,p),lane:"boost-pickups",laneLabel:"Boost Pickups",label:`${f} ${g} ${_} boost pickup`,shortLabel:qG(u.detection,u.pad_type),color:Lf(u.is_team_0)??(u.detection==="both"?u.pad_type==="big"?X_.big:u.pad_type==="small"?X_.small:Qx.both:Qx[u.detection]),isTeamZero:u.is_team_0}}).sort((u,d)=>u.startTime!==d.startTime?u.startTime-d.startTime:(u.id??"").localeCompare(d.id??""))}const Ad=[{fieldName:"time_defensive_third",aliases:["time_defensive_zone"],label:"Def third",relativeColor:"own"},{fieldName:"time_neutral_third",aliases:["time_neutral_zone"],label:"Neutral third",relativeColor:"neutral"},{fieldName:"time_offensive_third",aliases:["time_offensive_zone"],label:"Off third",relativeColor:"opp"}];function M1(n,e){return n.relativeColor==="neutral"?"rgba(209, 217, 224, 0.68)":(n.relativeColor==="own"?e:!e)?"rgba(89, 195, 255, 0.74)":"rgba(255, 193, 92, 0.78)"}function Sy(n){const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function jG(n,e){const t=n.positioning;if(!t)return 0;for(const i of[e.fieldName,...e.aliases??[]]){const s=t[i];if(typeof s=="number"&&Number.isFinite(s))return s}return 0}function ZG(n){switch(n){case"defensive":return Ad[0];case"neutral":return Ad[1];case"offensive":return Ad[2]}}function JG(n){const e=new Map;for(const t of n.frames)for(const i of t.players){const s=Sy(i.player_id);e.has(s)||e.set(s,i.name)}return e}function QG(n){const e=Df(be(n,"field_third")),t=[],i=new Map,s=JG(n);for(const a of e){if(!Number.isFinite(a.time)||!Number.isFinite(a.end_time)||a.end_time-a.time<=si)continue;const r=Sy(a.player),o=ZG(a.state);E1(t,i,{id:`time-in-zone:${r}:${o.fieldName}:${a.time.toFixed(3)}`,startTime:a.time,endTime:a.end_time,lane:`time-in-zone:${r}`,laneLabel:s.get(r)??r,label:o.label,color:M1(o,a.is_team_0),isTeamZero:a.is_team_0})}return t}function e$(n,e){if(be(n,"field_third").length>0)return QG(n);const t=new Map,i=[],s=new Map;let a=null;for(const r of n.frames){if(!Number.isFinite(r.time)||!Number.isFinite(r.dt)||r.dt<=0){a=r;continue}const{startTime:o,endTime:l}=Cr(r,a,e);if(l-o<=si){a=r;continue}for(const c of r.players){const u=Sy(c.player_id),d=t.get(u)??new Map;let h=null,f=0;for(const p of Ad){const g=jG(c,p),_=g-(d.get(p.fieldName)??0);_>f+si&&(f=_,h=p),d.set(p.fieldName,g)}t.set(u,d),h&&E1(i,s,{id:`time-in-zone:${u}:${h.fieldName}:${o.toFixed(3)}`,startTime:o,endTime:l,lane:`time-in-zone:${u}`,laneLabel:c.name,label:h.label,color:M1(h,c.is_team_0),isTeamZero:c.is_team_0})}a=r}return i}function Cr(n,e,t){const i=t?.frames[n.frame_number]?.time??n.time,s=e?t?.frames[e.frame_number]?.time??e.time:Math.max(0,i-n.dt);return{startTime:Math.max(0,s),endTime:Math.max(s,i)}}function el(n,e){if(!e)return;const t=n[n.length-1];if(t&&t.lane===e.lane&&t.label===e.label&&Math.abs(t.endTime-e.startTime)<=b1){t.endTime=e.endTime;return}n.push(e)}function E1(n,e,t){if(!t)return;const i=t.lane??"",s=e.get(i);if(s&&s.label===t.label&&Math.abs(s.endTime-t.startTime)<=b1){s.endTime=t.endTime;return}n.push(t),e.set(i,t)}const Lm=236,C1="relative-positioning",t$={last:"Last",upfield:"Upfield",level:"Level",mid:"Mid"};function ua(n){return n?"team-blue":"team-orange"}function A1(n,e,t){return`
${n} ${t.metaHtml??""}
${e} -
`}function En(n,e,t,i=""){return g1(n,t,{metaHtml:i,tone:e?"blue":"orange"})}function ci(n,e){return`
${[!0,!1].map(t=>{const i=n.filter(a=>a.is_team_0===t);if(i.length===0)return"";const s=t?"Blue":"Orange";return`
+
`}function En(n,e,t,i=""){return A1(n,t,{metaHtml:i,tone:e?"blue":"orange"})}function ci(n,e){return`
${[!0,!1].map(t=>{const i=n.filter(a=>a.is_team_0===t);if(i.length===0)return"";const s=t?"Blue":"Orange";return`

${s} team

${i.length} player${i.length===1?"":"s"} @@ -5635,12 +5700,12 @@ void main() {
${i.map(e).join("")}
-
`}).join("")}
`}function Rf(n,e,t=""){return g1(n,e,{metaHtml:t,tone:"shared"})}function Sn(n,e,t){const i=Ht(n.statsFrameLookup,e);return i?i.players.find(s=>Ct(s.player_id)===t)??null:null}function wG(n,e,t){const i=n.players.find(p=>p.id===e);if(!i||!i.frames[t]?.position)return"mid";const a=i.isTeamZero,r=n.players.filter(p=>p.isTeamZero===a).length,o=[];let l=0;for(const p of n.players){if(p.isTeamZero!==a)continue;const g=p.frames[t];if(!g?.position)continue;const _=a?g.position.y:-g.position.y;o.push(_),p.id===e&&(l=_)}if(r<2||o.length!==r)return"mid";const c=Math.min(...o),u=Math.max(...o);if(u-c<=Mm)return"level";const h=l-c<=Mm,f=u-l<=Mm;return h&&!f?"last":f&&!h?"upfield":"mid"}function SG(n){let e=null,t=null;const i=new Set,s=["possession_state","field_half","field_third"];return{id:"possession",label:"Possession",setup(){a()},teardown(){},onBeforeRender(){},getTimelineRanges(o){return iG(o.statsTimeline,o.replay)},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const u=Ht(l.statsFrameLookup,o)?.team_zero?.possession;return u?Rf("Control State",Fx(u,{labelPerspective:{kind:"shared"},breakdownClasses:r()})):""},renderFocusedPlayerStats(o,l,c){const u=Ht(c.statsFrameLookup,l),d=Sn(c,l,o),h=d?.is_team_0?u?.team_zero?.possession:u?.team_one?.possession;return!h||!d?"":Fx(h,{labelPerspective:{kind:"team"},breakdownClasses:r()})},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Possession breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";const h=document.createElement("label");h.className="toggle";const f=document.createElement("input");f.type="checkbox",f.dataset.breakdownClass="possession_state",f.addEventListener("change",()=>{f.checked?i.add("possession_state"):i.delete("possession_state"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const p=document.createElement("span");p.textContent="Control",h.append(f,p),d.append(h);const g=document.createElement("label");g.className="toggle";const _=document.createElement("input");_.type="checkbox",_.dataset.breakdownClass="field_third",_.addEventListener("change",()=>{_.checked?i.add("field_third"):i.delete("field_third"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const m=document.createElement("span");m.textContent="Thirds",g.append(_,m),d.append(g);const v=document.createElement("label");v.className="toggle";const y=document.createElement("input");y.type="checkbox",y.dataset.breakdownClass="field_half",y.addEventListener("change",()=>{y.checked?i.add("field_half"):i.delete("field_half"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const b=document.createElement("span");b.textContent="Halves",v.append(y,b),d.append(v),e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=s.filter(l=>i.has(l));t.textContent=o.length===0?"Total only":o.map(l=>l==="possession_state"?"Control":l==="field_half"?"Halves":"Thirds").join(" x ")}}}function r(){return s.filter(o=>i.has(o))}}function TG(){let n=null;return{id:"fifty-fifty",label:"50/50",setup(e){n=new u4(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return R4(e.statsTimeline,e.replay)},getTimelineRanges(e){return cG(e.statsTimeline,e.replay)},renderStats(e,t){const i=Ht(t.statsFrameLookup,e);if(!i)return"";const s=Rf("Challenge Summary",DV(i.team_zero?.fifty_fifty)),a=ci(i.players,r=>En(r.name,r.is_team_0,kx(r.fifty_fifty)));return s+a},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?kx(s.fifty_fifty):""}}}function MG(){let n=null,e=null;return{id:"ball_half",label:"Half Control",setup(t){e=t.replay,n=new LV(t.player.sceneState.replayRoot,t.fieldScale)},teardown(){n?.dispose(),n=null,e=null},onBeforeRender(t){const i=e?.ballFrames[t.frameIndex];n?.update(i?.position?.y??null)},getTimelineRanges(t){return aG(t.statsTimeline,t.replay)},renderStats(t,i){const a=Ht(i.statsFrameLookup,t)?.team_zero?.ball_half;return a?Rf("Field State",Ux(a,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(t,i,s){const a=Ht(s.statsFrameLookup,i),r=Sn(s,i,t),o=r?.is_team_0?a?.team_zero?.ball_half:a?.team_one?.ball_half;return!o||!r?"":Ux(o,{labelPerspective:{kind:"team"}})}}}function EG(){return{id:"ball_third",label:"Third Control",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return lG(n.statsTimeline,n.replay)},renderStats(n,e){const i=Ht(e.statsFrameLookup,n)?.team_zero?.ball_third;return i?Rf("Field State",zx(i,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(n,e,t){const i=Ht(t.statsFrameLookup,e),s=Sn(t,e,n),a=s?.is_team_0?i?.team_zero?.ball_third:i?.team_one?.ball_third;return!a||!s?"":zx(a,{labelPerspective:{kind:"team"}})}}}function CG(){return{id:"rush",label:"Rush",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return uG(n.statsTimeline,n.replay)},getTimelineEvents(n){return V4(n.statsTimeline,n.replay)},renderStats(n,e){const t=Ht(e.statsFrameLookup,n),i=t?.team_zero?.rush,s=t?.team_one?.rush;return!i||!s?"":[En("Blue Team",!0,Tm(i)),En("Orange Team",!1,Tm(s))].join("")},renderFocusedPlayerStats(n,e,t){const i=Ht(t.statsFrameLookup,e),s=Sn(t,e,n),a=s?.is_team_0?i?.team_zero?.rush:i?.team_one?.rush;return!a||!s?"":Tm(a)}}}const z_={speed_band:{valueOrder:["slow","boost","supersonic"],formatValue:n=>({slow:"Slow",boost:"Boost",supersonic:"Supersonic"})[n]??n},height_band:{valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n}};function AG(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function Em(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function RG(n,e,t=1){return n===void 0||Number.isNaN(n)?"?":e===void 0||Number.isNaN(e)||e<=0?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${(n*100/e).toFixed(t)}%)`}function Xx(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Td(n,e){return`
${Xx(n)}${Xx(e)}
`}function PG(n,e,t){for(const i of t){const{valueOrder:s}=z_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function IG(n,e){if(e.length===1){const t=e[0];return z_[t].formatValue(n[t])}return e.map(t=>z_[t].formatValue(n[t])).join(" / ")}function LG(n,e,t){if(e.length===0||!n?.labeled_tracked_time?.entries?.length)return"";const i=new Map,s=n?.labeled_tracked_time?.entries??[];for(const a of s){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=i.get(c);u?u.total+=a.value:i.set(c,{values:o,total:a.value})}return[...i.values()].sort((a,r)=>PG(a.values,r.values,e)).map(a=>Td(IG(a.values,e),RG(a.total,t))).join("")}function Kx(n,e={}){const t=n?.tracked_time,i=n&&t&&t>0?n.speed_integral/t:t===0?0:void 0,s=AG(e.breakdownClasses),a=LG(n,s,t);return` - ${Td("Tracked",Em(t,1,"s"))} - ${Td("Distance",Em(n?.total_distance,0," uu"))} - ${Td("Avg speed",Em(i,0," uu/s"))} + `}).join("")}
`}function Of(n,e,t=""){return A1(n,e,{metaHtml:t,tone:"shared"})}function Sn(n,e,t){const i=Ht(n.statsFrameLookup,e);return i?i.players.find(s=>Ct(s.player_id)===t)??null:null}function n$(n,e,t){const i=n.players.find(p=>p.id===e);if(!i||!i.frames[t]?.position)return"mid";const a=i.isTeamZero,r=n.players.filter(p=>p.isTeamZero===a).length,o=[];let l=0;for(const p of n.players){if(p.isTeamZero!==a)continue;const g=p.frames[t];if(!g?.position)continue;const _=a?g.position.y:-g.position.y;o.push(_),p.id===e&&(l=_)}if(r<2||o.length!==r)return"mid";const c=Math.min(...o),u=Math.max(...o);if(u-c<=Lm)return"level";const h=l-c<=Lm,f=u-l<=Lm;return h&&!f?"last":f&&!h?"upfield":"mid"}function i$(n){let e=null,t=null;const i=new Set,s=["possession_state","field_half","field_third"];return{id:"possession",label:"Possession",setup(){a()},teardown(){},onBeforeRender(){},getTimelineRanges(o){return NG(o.statsTimeline,o.replay)},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const u=Ht(l.statsFrameLookup,o)?.team_zero?.possession;return u?Of("Control State",Wx(u,{labelPerspective:{kind:"shared"},breakdownClasses:r()})):""},renderFocusedPlayerStats(o,l,c){const u=Ht(c.statsFrameLookup,l),d=Sn(c,l,o),h=d?.is_team_0?u?.team_zero?.possession:u?.team_one?.possession;return!h||!d?"":Wx(h,{labelPerspective:{kind:"team"},breakdownClasses:r()})},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Possession breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";const h=document.createElement("label");h.className="toggle";const f=document.createElement("input");f.type="checkbox",f.dataset.breakdownClass="possession_state",f.addEventListener("change",()=>{f.checked?i.add("possession_state"):i.delete("possession_state"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const p=document.createElement("span");p.textContent="Control",h.append(f,p),d.append(h);const g=document.createElement("label");g.className="toggle";const _=document.createElement("input");_.type="checkbox",_.dataset.breakdownClass="field_third",_.addEventListener("change",()=>{_.checked?i.add("field_third"):i.delete("field_third"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const m=document.createElement("span");m.textContent="Thirds",g.append(_,m),d.append(g);const v=document.createElement("label");v.className="toggle";const y=document.createElement("input");y.type="checkbox",y.dataset.breakdownClass="field_half",y.addEventListener("change",()=>{y.checked?i.add("field_half"):i.delete("field_half"),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const b=document.createElement("span");b.textContent="Halves",v.append(y,b),d.append(v),e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=s.filter(l=>i.has(l));t.textContent=o.length===0?"Total only":o.map(l=>l==="possession_state"?"Control":l==="field_half"?"Halves":"Thirds").join(" x ")}}}function r(){return s.filter(o=>i.has(o))}}function s$(){let n=null;return{id:"fifty-fifty",label:"50/50",setup(e){n=new $4(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return cG(e.statsTimeline,e.replay)},getTimelineRanges(e){return GG(e.statsTimeline,e.replay)},renderStats(e,t){const i=Ht(t.statsFrameLookup,e);if(!i)return"";const s=Of("Challenge Summary",p4(i.team_zero?.fifty_fifty)),a=ci(i.players,r=>En(r.name,r.is_team_0,Vx(r.fifty_fifty)));return s+a},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?Vx(s.fifty_fifty):""}}}function a$(){let n=null,e=null;return{id:"ball_half",label:"Half Control",setup(t){e=t.replay,n=new h4(t.player.sceneState.replayRoot,t.fieldScale)},teardown(){n?.dispose(),n=null,e=null},onBeforeRender(t){const i=e?.ballFrames[t.frameIndex];n?.update(i?.position?.y??null)},getTimelineRanges(t){return BG(t.statsTimeline,t.replay)},renderStats(t,i){const a=Ht(i.statsFrameLookup,t)?.team_zero?.ball_half;return a?Of("Field State",Kx(a,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(t,i,s){const a=Ht(s.statsFrameLookup,i),r=Sn(s,i,t),o=r?.is_team_0?a?.team_zero?.ball_half:a?.team_one?.ball_half;return!o||!r?"":Kx(o,{labelPerspective:{kind:"team"}})}}}function r$(){return{id:"ball_third",label:"Third Control",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return VG(n.statsTimeline,n.replay)},renderStats(n,e){const i=Ht(e.statsFrameLookup,n)?.team_zero?.ball_third;return i?Of("Field State",Yx(i,{labelPerspective:{kind:"shared"}})):""},renderFocusedPlayerStats(n,e,t){const i=Ht(t.statsFrameLookup,e),s=Sn(t,e,n),a=s?.is_team_0?i?.team_zero?.ball_third:i?.team_one?.ball_third;return!a||!s?"":Yx(a,{labelPerspective:{kind:"team"}})}}}function o$(){return{id:"rush",label:"Rush",setup(){},teardown(){},onBeforeRender(){},getTimelineRanges(n){return $G(n.statsTimeline,n.replay)},getTimelineEvents(n){return wG(n.statsTimeline,n.replay)},renderStats(n,e){const t=Ht(e.statsFrameLookup,n),i=t?.team_zero?.rush,s=t?.team_one?.rush;return!i||!s?"":[En("Blue Team",!0,Im(i)),En("Orange Team",!1,Im(s))].join("")},renderFocusedPlayerStats(n,e,t){const i=Ht(t.statsFrameLookup,e),s=Sn(t,e,n),a=s?.is_team_0?i?.team_zero?.rush:i?.team_one?.rush;return!a||!s?"":Im(a)}}}const K_={speed_band:{valueOrder:["slow","boost","supersonic"],formatValue:n=>({slow:"Slow",boost:"Boost",supersonic:"Supersonic"})[n]??n},height_band:{valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n}};function l$(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function km(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function c$(n,e,t=1){return n===void 0||Number.isNaN(n)?"?":e===void 0||Number.isNaN(e)||e<=0?`${n.toFixed(t)}s`:`${n.toFixed(t)}s (${(n*100/e).toFixed(t)}%)`}function tw(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Rd(n,e){return`
${tw(n)}${tw(e)}
`}function u$(n,e,t){for(const i of t){const{valueOrder:s}=K_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function d$(n,e){if(e.length===1){const t=e[0];return K_[t].formatValue(n[t])}return e.map(t=>K_[t].formatValue(n[t])).join(" / ")}function h$(n,e,t){if(e.length===0||!n?.labeled_tracked_time?.entries?.length)return"";const i=new Map,s=n?.labeled_tracked_time?.entries??[];for(const a of s){const r=new Map(a.labels.map(d=>[d.key,d.value])),o={};let l=!0;for(const d of e){const h=r.get(d);if(h===void 0){l=!1;break}o[d]=h}if(!l)continue;const c=e.map(d=>`${d}:${o[d]}`).join("|"),u=i.get(c);u?u.total+=a.value:i.set(c,{values:o,total:a.value})}return[...i.values()].sort((a,r)=>u$(a.values,r.values,e)).map(a=>Rd(d$(a.values,e),c$(a.total,t))).join("")}function nw(n,e={}){const t=n?.tracked_time,i=n&&t&&t>0?n.speed_integral/t:t===0?0:void 0,s=l$(e.breakdownClasses),a=h$(n,s,t);return` + ${Rd("Tracked",km(t,1,"s"))} + ${Rd("Distance",km(n?.total_distance,0," uu"))} + ${Rd("Avg speed",km(i,0," uu/s"))} ${a} - `}const qx="subtr-actor-flip-impulse-overlay-styles",kG=5882879,DG=16761180,Cm=260,OG=760,FG=260,NG=2.5;function y1(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function UG(n,e){const t=y1(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function BG(n){return n.split("_").filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function zG(n,e){return be(n,"dodge").flatMap((t,i)=>{const s=t.dodge_impulse;if(!s)return[];const a=UG(e,t.player),r=y1(t.player),o=e.frames[t.frame]?.time??t.time,l=new T(s.estimated_direction[0],s.estimated_direction[1],s.estimated_direction[2]);return l.lengthSq()<=Number.EPSILON&&l.set(1,0,0),l.normalize(),{id:`dodge-impulse:${t.frame}:${r}:${i}`,time:o,frame:t.frame,isTeamZero:t.is_team_0,playerId:r,playerName:a,position:new T(s.start_position[0],s.start_position[1],s.start_position[2]+44),direction:l,magnitude:s.estimated_impulse_magnitude,confidence:s.confidence,directionLabel:s.direction_label}})}function HG(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function VG(){if(document.getElementById(qx))return;const n=document.createElement("style");n.id=qx,n.textContent=` + `}const iw="subtr-actor-flip-impulse-overlay-styles",f$=5882879,p$=16761180,Dm=260,m$=760,_$=260,g$=2.5;function R1(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function y$(n,e){const t=R1(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function v$(n){return n.split("_").filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function b$(n,e){return be(n,"dodge").flatMap((t,i)=>{const s=t.dodge_impulse;if(!s)return[];const a=y$(e,t.player),r=R1(t.player),o=e.frames[t.frame]?.time??t.time,l=new T(s.estimated_direction[0],s.estimated_direction[1],s.estimated_direction[2]);return l.lengthSq()<=Number.EPSILON&&l.set(1,0,0),l.normalize(),{id:`dodge-impulse:${t.frame}:${r}:${i}`,time:o,frame:t.frame,isTeamZero:t.is_team_0,playerId:r,playerName:a,position:new T(s.start_position[0],s.start_position[1],s.start_position[2]+44),direction:l,magnitude:s.estimated_impulse_magnitude,confidence:s.confidence,directionLabel:s.direction_label}})}function x$(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function w$(){if(document.getElementById(iw))return;const n=document.createElement("style");n.id=iw,n.textContent=` .sap-flip-impulse-overlay-root { position: absolute; inset: 0; @@ -5676,7 +5741,7 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function GG(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class $G{scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,FG);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=NG;constructor(e,t,i,s){VG(),this.scene=e,this.container=t,this.markers=zG(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="flip-impulse-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-flip-impulse-overlay-root",this.container.append(this.labelRoot)}update(e){const t=HG(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.arrow.removeFromParent(),a.arrow.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.24+.72*r,c=Cm+Math.min(1,s.magnitude/450)*(OG-Cm);o.arrow.position.copy(s.position),o.arrow.setDirection(s.direction),o.arrow.setLength(c,70,38),o.arrow.cone.material.opacity=l,o.arrow.line.material.opacity=l,this.worldPosition.copy(s.position).add(this.labelOffset);const u=GG(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.arrow.removeFromParent(),e.arrow.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.isTeamZero?kG:DG,s=new jg(e.direction,e.position,Cm,i);s.renderOrder=35,s.line.material=new Pt({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),s.cone.material=new je({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),this.group.add(s);const a=document.createElement("div");a.className=`sap-flip-impulse-overlay-label ${e.isTeamZero?"sap-flip-impulse-overlay-label-blue":"sap-flip-impulse-overlay-label-orange"}`,a.textContent=`${e.playerName} ${BG(e.directionLabel)} ${Math.round(e.confidence*100)}%`,this.labelRoot.append(a);const r={marker:e,arrow:s,label:a};return this.views.set(e.id,r),r}}const Yx="subtr-actor-speed-flip-overlay-styles",WG=5882879,XG=16761180,KG=16185075,qG=150,YG=230,jG=220,ZG=4;function v1(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function JG(n,e){const t=v1(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function QG(n,e){return be(n,"speed_flip").map(t=>{const i=JG(e,t.player),s=v1(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`speed-flip:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,position:{x:t.start_position[0],y:t.start_position[1],z:t.start_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function e$(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function t$(){if(document.getElementById(Yx))return;const n=document.createElement("style");n.id=Yx,n.textContent=` + `,document.head.append(n)}function S$(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class T${scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,_$);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=g$;constructor(e,t,i,s){w$(),this.scene=e,this.container=t,this.markers=b$(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="flip-impulse-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-flip-impulse-overlay-root",this.container.append(this.labelRoot)}update(e){const t=x$(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.arrow.removeFromParent(),a.arrow.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.24+.72*r,c=Dm+Math.min(1,s.magnitude/450)*(m$-Dm);o.arrow.position.copy(s.position),o.arrow.setDirection(s.direction),o.arrow.setLength(c,70,38),o.arrow.cone.material.opacity=l,o.arrow.line.material.opacity=l,this.worldPosition.copy(s.position).add(this.labelOffset);const u=S$(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.arrow.removeFromParent(),e.arrow.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=e.isTeamZero?f$:p$,s=new iy(e.direction,e.position,Dm,i);s.renderOrder=35,s.line.material=new Pt({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),s.cone.material=new je({color:i,transparent:!0,opacity:.9,depthWrite:!1,depthTest:!1}),this.group.add(s);const a=document.createElement("div");a.className=`sap-flip-impulse-overlay-label ${e.isTeamZero?"sap-flip-impulse-overlay-label-blue":"sap-flip-impulse-overlay-label-orange"}`,a.textContent=`${e.playerName} ${v$(e.directionLabel)} ${Math.round(e.confidence*100)}%`,this.labelRoot.append(a);const r={marker:e,arrow:s,label:a};return this.views.set(e.id,r),r}}const sw="subtr-actor-speed-flip-overlay-styles",M$=5882879,E$=16761180,C$=16185075,A$=150,R$=230,P$=220,I$=4;function P1(n){if(!n)return null;const[e,t]=Object.entries(n)[0]??["Unknown","unknown"],i=typeof t=="string"?t:JSON.stringify(t);return`${e}:${i}`}function L$(n,e){const t=P1(e);return t?n.players.find(i=>i.id===t)?.name??t:"Unknown"}function k$(n,e){return be(n,"speed_flip").map(t=>{const i=L$(e,t.player),s=P1(t.player),a=e.frames[t.frame]?.time??t.time,r=t.confidence;return{id:`speed-flip:${t.frame}:${s}:${Math.round(r*1e3)}`,time:a,frame:t.frame,isTeamZero:t.is_team_0,playerId:s,playerName:i,position:{x:t.start_position[0],y:t.start_position[1],z:t.start_position[2]},quality:r,qualityLabel:`${Math.round(r*100)}%`}})}function D$(n,e,t){const i=Math.max(.1,t);return n.filter(s=>{const a=e-s.time;return a>=0&&a<=i})}function O$(){if(document.getElementById(sw))return;const n=document.createElement("style");n.id=sw,n.textContent=` .sap-speed-flip-overlay-root { position: absolute; inset: 0; @@ -5713,7 +5778,7 @@ void main() { border-color: rgba(255, 193, 92, 0.5); background: rgba(76, 41, 7, 0.84); } - `,document.head.append(n)}function n$(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class i${scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,jG);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=ZG;constructor(e,t,i,s){t$(),this.scene=e,this.container=t,this.markers=QG(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="speed-flip-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-speed-flip-overlay-root",this.container.append(this.labelRoot)}update(e){const t=e$(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.16+.56*r,c=.96+(1-r)*.22;o.material.opacity=l,o.ring.position.set(s.position.x,s.position.y,s.position.z+14),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.position.x,s.position.y,s.position.z).add(this.labelOffset);const u=n$(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new je({color:e.quality>=.75?KG:e.isTeamZero?WG:XG,transparent:!0,opacity:.8,side:ut,depthWrite:!1,depthTest:!1}),s=new oi(qG,YG,48),a=new Se(s,i);a.renderOrder=30,this.group.add(a);const r=document.createElement("div");r.className=`sap-speed-flip-overlay-label ${e.isTeamZero?"sap-speed-flip-overlay-label-blue":"sap-speed-flip-overlay-label-orange"}`,r.textContent=`${e.playerName} speed flip ${e.qualityLabel}`,this.labelRoot.append(r);const o={marker:e,ring:a,material:i,label:r};return this.views.set(e.id,o),o}}const Ju=[{value:"big",label:"Big pads"},{value:"small",label:"Small pads"},{value:"ambiguous",label:"Ambiguous pads"}],Am=[{value:"both",label:"Both detectors"},{value:"inferred_only",label:"Inferred only"},{value:"reported_only",label:"Reported only"}],Qu=[{value:"active",label:"Active play"},{value:"inactive",label:"Inactive play"},{value:"unknown",label:"Unknown activity"}],ed=[{value:"own",label:"Own half"},{value:"opponent",label:"Opponent half"},{value:"unknown",label:"Unknown half"}];function s$(n,e){return n===e||n==="ambiguous"}function a$(n,e){const t=e?r$(e,be(e,"boost_pickup")):[];return t.length===0?null:t.find(i=>Ct(i.player_id)===n.player.id&&i.detection!=="inferred_only"&&i.frame===n.event.frame&&s$(i.pad_type,n.pad.size))??null}function r$(n,e){if(e.length>0)return e;const t=n.events?.boost_pickups;return Array.isArray(t)?t:e}function b1(n={}){let e=null,t=null,i=null,s=null,a=null,r=null;const o=new Set(Ju.map(M=>M.value)),l=new Set(Am.map(M=>M.value)),c=new Set(Qu.map(M=>M.value)),u=new Set(ed.map(M=>M.value));let d=null,h=!1;function f(M,C,w,E){const R=document.createElement("div");R.className="boost-pickup-filter-group";const L=document.createElement("p");L.className="module-settings-group-title",L.textContent=M;const O=document.createElement("div");O.className="boost-pickup-filter-options";for(const D of C){const U=document.createElement("label");U.className="toggle";const F=document.createElement("input");F.type="checkbox",F.dataset.boostPickupFilter=E,F.dataset.boostPickupValue=D.value,F.addEventListener("change",()=>{F.checked?w.add(D.value):w.delete(D.value),_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const W=document.createElement("span");W.textContent=D.label,U.append(F,W),O.append(U)}return R.append(L,O),R}function p(){const M=document.createElement("div");M.className="boost-pickup-filter-group boost-pickup-filter-group-wide",i=M;const C=document.createElement("p");return C.className="module-settings-group-title",C.textContent="Player",s=document.createElement("div"),s.className="boost-pickup-filter-options",M.append(C,s),M}function g(M){if(s&&(s.replaceChildren(),i&&(i.hidden=!M||M.players.length===0),!!M))for(const C of M.players){const w=document.createElement("label");w.className="toggle";const E=document.createElement("input");E.type="checkbox",E.dataset.boostPickupPlayerId=C.id,E.addEventListener("change",()=>{d||(d=new Set(M.players.map(L=>L.id))),E.checked?d.add(C.id):d.delete(C.id),_(M),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const R=document.createElement("span");R.textContent=`${C.name} (${C.isTeamZero?"Blue":"Orange"})`,w.append(E,R),s.append(w)}}function _(M){if(e){for(const C of e.querySelectorAll("input[data-boost-pickup-filter][data-boost-pickup-value]")){const w=C.dataset.boostPickupFilter,E=C.dataset.boostPickupValue;C.checked=m(w,E)}for(const C of e.querySelectorAll("input[data-boost-pickup-player-id]")){const w=C.dataset.boostPickupPlayerId;C.checked=w?d?.has(w)??!0:!1}t&&(t.textContent=v(M))}}function m(M,C){if(!C)return!1;switch(M){case"pad-type":return o.has(C);case"detection":return l.has(C);case"activity":return c.has(C);case"field-half":return u.has(C);default:return!1}}function v(M){const C=M?.players.length??0,w=d?d.size:C;if(o.size===0||l.size===0||c.size===0||u.size===0||d!==null&&d.size===0)return"Hidden";const R=[o.sizeR.value));for(const R of w)typeof R=="string"&&E.has(R)&&M.add(R)}function S(){return{padTypes:[...o],detections:[...l],activities:[...c],fieldHalves:[...u],playerIds:d?[...d]:null}}function x(M){if(!M||typeof M!="object"||Array.isArray(M))return;const C=M;b(o,Ju,C.padTypes),b(l,Am,C.detections),b(c,Qu,C.activities),b(u,ed,C.fieldHalves),d=Array.isArray(C.playerIds)?new Set(C.playerIds.filter(w=>typeof w=="string")):null,h=a===null&&d!==null,_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()}return{setup(M){a!==M.replay&&(a=M.replay,h?h=!1:d=null),r=M.statsTimeline,_(M.replay)},teardown(){},getConfig:S,applyConfig:x,getTimelineRangeOptions(){const M={padTypes:o,detections:l,activities:c,fieldHalves:u};return d&&(M.playerIds=d),M},includePickup:y,renderSettings(M,C){if(!e){e=document.createElement("div"),e.className="boost-pickup-filter-panel";const w=document.createElement("div");w.className="boost-pickup-filter-summary",t=document.createElement("strong"),t.className="metric-readout",w.append(t);const E=document.createElement("div");E.className="boost-pickup-filter-grid",E.append(f("Pad type",Ju,o,"pad-type"),f("Activity",Qu,c,"activity"),f("Field half",ed,u,"field-half"),p()),(C.showHeader??!1)&&e.append(w),e.append(E)}return g(M?.replay??null),_(M?.replay??null),e}}}function ui(n){return{id:n.id,label:n.label,setup(){},teardown(){},onBeforeRender(){},getTimelineEvents:n.getTimelineEvents,getTimelineRanges:n.getTimelineRanges,renderStats(e,t){const i=Ht(t.statsFrameLookup,e);return i?ci(i.players,s=>En(s.name,s.is_team_0,n.render(n.select(s),s))):""},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?n.render(n.select(s),s):""}}}function $i(n){return n==null?"?":Ys(n).toFixed(0)}function o$(n,e){const t=$i(n);if(n==null||e==null)return t;const i=$i(n+e);return`${t} (${i})`}function Rm(n){n&&typeof n=="object"&&"dispose"in n&&typeof n.dispose=="function"&&n.dispose()}function l$(n){n&&(n.removeFromParent(),n.traverse(e=>{const t="geometry"in e?e.geometry:null;Rm(t);const i="material"in e?e.material:null;if(Array.isArray(i))for(const s of i)Rm(s);else Rm(i)}))}function c$(){let n=0,e=null;return{acquire(t){e||(e=kV(t.player.sceneState.replayRoot,t.fieldScale)),n+=1},release(){n<=0||(n-=1,n===0&&(l$(e),e=null))}}}const jx=c$();function it(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function ke(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function H_(n,e=0){return ke(n,e,"%")}function x1(n,e,t=1,i=0){if(n===void 0||Number.isNaN(n))return H_(e,i);const s=ke(n,t,"s");return e===void 0||Number.isNaN(e)?s:`${s} (${H_(e,i)})`}function qa(n,e,t=1,i=0){const s=n!==void 0&&e!==void 0&&!Number.isNaN(n)&&!Number.isNaN(e)&&e>0?n*100/e:void 0;return x1(n,s,t,i)}function xt(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function ys(n){const e=xt(n);return e===void 0?void 0:e*100}function w1(n){return xt(n?.tracked_time)}function u$(n,e,t){const i=xt(n?.[e]);if(i!==void 0)return i;const s=w1(n),a=xt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a*100/s}function Pn(n,e,t){return x1(xt(n?.[t]),u$(n,e,t))}function Zx(n,e,t){const i=xt(n?.[e]);if(i!==void 0)return i;const s=w1(n),a=xt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a/s}function Jx(n){return` + `,document.head.append(n)}function F$(n,e,t,i){if(i.copy(n).project(e),i.z<-1||i.z>1)return!1;const s=t.clientWidth||1,a=t.clientHeight||1;return i.x=(i.x+1)*s/2,i.y=(1-i.y)*a/2,!(i.x<-100||i.x>s+100||i.y<-100||i.y>a+100)}class N${scene;container;group=new Et;labelRoot;projectedPosition=new T;worldPosition=new T;labelOffset=new T(0,0,P$);markers;views=new Map;changedContainerPosition=!1;originalContainerPosition="";decaySeconds=I$;constructor(e,t,i,s){O$(),this.scene=e,this.container=t,this.markers=k$(s,i),getComputedStyle(t).position==="static"&&(this.changedContainerPosition=!0,this.originalContainerPosition=t.style.position,t.style.position="relative"),this.group.name="speed-flip-overlay",this.scene.replayRoot.add(this.group),this.labelRoot=document.createElement("div"),this.labelRoot.className="sap-speed-flip-overlay-root",this.container.append(this.labelRoot)}update(e){const t=D$(this.markers,e,this.decaySeconds),i=new Set(t.map(s=>s.id));for(const[s,a]of this.views.entries())i.has(s)||(a.ring.removeFromParent(),a.ring.geometry.dispose(),a.material.dispose(),a.label.remove(),this.views.delete(s));for(const s of t){const a=Math.max(0,e-s.time),r=Math.max(0,1-a/this.decaySeconds),o=this.ensureView(s),l=.16+.56*r,c=.96+(1-r)*.22;o.material.opacity=l,o.ring.position.set(s.position.x,s.position.y,s.position.z+14),o.ring.scale.setScalar(c+s.quality*.08),this.worldPosition.set(s.position.x,s.position.y,s.position.z).add(this.labelOffset);const u=F$(this.worldPosition,this.scene.camera,this.container,this.projectedPosition);o.label.style.display=u?"block":"none",u&&(o.label.style.left=`${this.projectedPosition.x}px`,o.label.style.top=`${this.projectedPosition.y}px`,o.label.style.opacity=`${.42+.58*r}`)}}dispose(){for(const e of this.views.values())e.ring.removeFromParent(),e.ring.geometry.dispose(),e.material.dispose(),e.label.remove();this.views.clear(),this.group.removeFromParent(),this.labelRoot.remove(),this.changedContainerPosition&&(this.container.style.position=this.originalContainerPosition)}ensureView(e){const t=this.views.get(e.id);if(t)return t;const i=new je({color:e.quality>=.75?C$:e.isTeamZero?M$:E$,transparent:!0,opacity:.8,side:ut,depthWrite:!1,depthTest:!1}),s=new oi(A$,R$,48),a=new Se(s,i);a.renderOrder=30,this.group.add(a);const r=document.createElement("div");r.className=`sap-speed-flip-overlay-label ${e.isTeamZero?"sap-speed-flip-overlay-label-blue":"sap-speed-flip-overlay-label-orange"}`,r.textContent=`${e.playerName} speed flip ${e.qualityLabel}`,this.labelRoot.append(r);const o={marker:e,ring:a,material:i,label:r};return this.views.set(e.id,o),o}}const nd=[{value:"big",label:"Big pads"},{value:"small",label:"Small pads"},{value:"ambiguous",label:"Ambiguous pads"}],Om=[{value:"both",label:"Both detectors"},{value:"inferred_only",label:"Inferred only"},{value:"reported_only",label:"Reported only"}],id=[{value:"active",label:"Active play"},{value:"inactive",label:"Inactive play"},{value:"unknown",label:"Unknown activity"}],sd=[{value:"own",label:"Own half"},{value:"opponent",label:"Opponent half"},{value:"unknown",label:"Unknown half"}];function U$(n,e){return n===e||n==="ambiguous"}function B$(n,e){const t=e?z$(e,be(e,"boost_pickup")):[];return t.length===0?null:t.find(i=>Ct(i.player_id)===n.player.id&&i.detection!=="inferred_only"&&i.frame===n.event.frame&&U$(i.pad_type,n.pad.size))??null}function z$(n,e){if(e.length>0)return e;const t=n.events?.boost_pickups;return Array.isArray(t)?t:e}function I1(n={}){let e=null,t=null,i=null,s=null,a=null,r=null;const o=new Set(nd.map(M=>M.value)),l=new Set(Om.map(M=>M.value)),c=new Set(id.map(M=>M.value)),u=new Set(sd.map(M=>M.value));let d=null,h=!1;function f(M,C,w,E){const R=document.createElement("div");R.className="boost-pickup-filter-group";const L=document.createElement("p");L.className="module-settings-group-title",L.textContent=M;const O=document.createElement("div");O.className="boost-pickup-filter-options";for(const D of C){const U=document.createElement("label");U.className="toggle";const F=document.createElement("input");F.type="checkbox",F.dataset.boostPickupFilter=E,F.dataset.boostPickupValue=D.value,F.addEventListener("change",()=>{F.checked?w.add(D.value):w.delete(D.value),_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const W=document.createElement("span");W.textContent=D.label,U.append(F,W),O.append(U)}return R.append(L,O),R}function p(){const M=document.createElement("div");M.className="boost-pickup-filter-group boost-pickup-filter-group-wide",i=M;const C=document.createElement("p");return C.className="module-settings-group-title",C.textContent="Player",s=document.createElement("div"),s.className="boost-pickup-filter-options",M.append(C,s),M}function g(M){if(s&&(s.replaceChildren(),i&&(i.hidden=!M||M.players.length===0),!!M))for(const C of M.players){const w=document.createElement("label");w.className="toggle";const E=document.createElement("input");E.type="checkbox",E.dataset.boostPickupPlayerId=C.id,E.addEventListener("change",()=>{d||(d=new Set(M.players.map(L=>L.id))),E.checked?d.add(C.id):d.delete(C.id),_(M),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()});const R=document.createElement("span");R.textContent=`${C.name} (${C.isTeamZero?"Blue":"Orange"})`,w.append(E,R),s.append(w)}}function _(M){if(e){for(const C of e.querySelectorAll("input[data-boost-pickup-filter][data-boost-pickup-value]")){const w=C.dataset.boostPickupFilter,E=C.dataset.boostPickupValue;C.checked=m(w,E)}for(const C of e.querySelectorAll("input[data-boost-pickup-player-id]")){const w=C.dataset.boostPickupPlayerId;C.checked=w?d?.has(w)??!0:!1}t&&(t.textContent=v(M))}}function m(M,C){if(!C)return!1;switch(M){case"pad-type":return o.has(C);case"detection":return l.has(C);case"activity":return c.has(C);case"field-half":return u.has(C);default:return!1}}function v(M){const C=M?.players.length??0,w=d?d.size:C;if(o.size===0||l.size===0||c.size===0||u.size===0||d!==null&&d.size===0)return"Hidden";const R=[o.sizeR.value));for(const R of w)typeof R=="string"&&E.has(R)&&M.add(R)}function S(){return{padTypes:[...o],detections:[...l],activities:[...c],fieldHalves:[...u],playerIds:d?[...d]:null}}function x(M){if(!M||typeof M!="object"||Array.isArray(M))return;const C=M;b(o,nd,C.padTypes),b(l,Om,C.detections),b(c,id,C.activities),b(u,sd,C.fieldHalves),d=Array.isArray(C.playerIds)?new Set(C.playerIds.filter(w=>typeof w=="string")):null,h=a===null&&d!==null,_(a),n.refreshTimelineRanges?.(),n.rerenderCurrentState?.(),n.requestConfigSync?.()}return{setup(M){a!==M.replay&&(a=M.replay,h?h=!1:d=null),r=M.statsTimeline,_(M.replay)},teardown(){},getConfig:S,applyConfig:x,getTimelineRangeOptions(){const M={padTypes:o,detections:l,activities:c,fieldHalves:u};return d&&(M.playerIds=d),M},includePickup:y,renderSettings(M,C){if(!e){e=document.createElement("div"),e.className="boost-pickup-filter-panel";const w=document.createElement("div");w.className="boost-pickup-filter-summary",t=document.createElement("strong"),t.className="metric-readout",w.append(t);const E=document.createElement("div");E.className="boost-pickup-filter-grid",E.append(f("Pad type",nd,o,"pad-type"),f("Activity",id,c,"activity"),f("Field half",sd,u,"field-half"),p()),(C.showHeader??!1)&&e.append(w),e.append(E)}return g(M?.replay??null),_(M?.replay??null),e}}}function ui(n){return{id:n.id,label:n.label,setup(){},teardown(){},onBeforeRender(){},getTimelineEvents:n.getTimelineEvents,getTimelineRanges:n.getTimelineRanges,renderStats(e,t){const i=Ht(t.statsFrameLookup,e);return i?ci(i.players,s=>En(s.name,s.is_team_0,n.render(n.select(s),s))):""},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?n.render(n.select(s),s):""}}}function Wi(n){return n==null?"?":Ys(n).toFixed(0)}function H$(n,e){const t=Wi(n);if(n==null||e==null)return t;const i=Wi(n+e);return`${t} (${i})`}function Fm(n){n&&typeof n=="object"&&"dispose"in n&&typeof n.dispose=="function"&&n.dispose()}function V$(n){n&&(n.removeFromParent(),n.traverse(e=>{const t="geometry"in e?e.geometry:null;Fm(t);const i="material"in e?e.material:null;if(Array.isArray(i))for(const s of i)Fm(s);else Fm(i)}))}function G$(){let n=0,e=null;return{acquire(t){e||(e=f4(t.player.sceneState.replayRoot,t.fieldScale)),n+=1},release(){n<=0||(n-=1,n===0&&(V$(e),e=null))}}}const aw=G$();function it(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function ke(n,e=1,t=""){return n===void 0||Number.isNaN(n)?"?":`${n.toFixed(e)}${t}`}function q_(n,e=0){return ke(n,e,"%")}function L1(n,e,t=1,i=0){if(n===void 0||Number.isNaN(n))return q_(e,i);const s=ke(n,t,"s");return e===void 0||Number.isNaN(e)?s:`${s} (${q_(e,i)})`}function Ya(n,e,t=1,i=0){const s=n!==void 0&&e!==void 0&&!Number.isNaN(n)&&!Number.isNaN(e)&&e>0?n*100/e:void 0;return L1(n,s,t,i)}function xt(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function ys(n){const e=xt(n);return e===void 0?void 0:e*100}function k1(n){return xt(n?.tracked_time)}function $$(n,e,t){const i=xt(n?.[e]);if(i!==void 0)return i;const s=k1(n),a=xt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a*100/s}function Pn(n,e,t){return L1(xt(n?.[t]),$$(n,e,t))}function rw(n,e,t){const i=xt(n?.[e]);if(i!==void 0)return i;const s=k1(n),a=xt(n?.[t]);if(!(s===void 0||s<=0||a===void 0))return a/s}function ow(n){return`
Most back${Pn(n,"percent_most_back","time_most_back")}
Most forward${Pn(n,"percent_most_forward","time_most_forward")}
Mid role${Pn(n,"percent_mid_role","time_mid_role")}
@@ -5725,59 +5790,59 @@ void main() {
Behind ball${Pn(n,"percent_behind_ball","time_behind_ball")}
Level with ball${Pn(n,"percent_level_with_ball","time_level_with_ball")}
In front of ball${Pn(n,"percent_in_front_of_ball","time_in_front_of_ball")}
- `}function Qx(n){return` + `}function lw(n){return`
Defensive zone${Pn(n,"percent_defensive_third","time_defensive_third")}
Neutral zone${Pn(n,"percent_neutral_third","time_neutral_third")}
Offensive zone${Pn(n,"percent_offensive_third","time_offensive_third")}
Defensive half${Pn(n,"percent_defensive_half","time_defensive_half")}
Offensive half${Pn(n,"percent_offensive_half","time_offensive_half")}
-
To teammates${ke(Zx(n,"average_distance_to_teammates","sum_distance_to_teammates"),0)}
-
To ball${ke(Zx(n,"average_distance_to_ball","sum_distance_to_ball"),0)}
- `}function td(n,e){return qa(xt(n?.[e]),xt(n?.active_game_time))}function d$(n){return n?n.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"?"}function h$(n){const e=n&&n.first_man_stint_count>0?n.time_first_man/n.first_man_stint_count:void 0;return` -
Current role${d$(n?.current_role_state)}
-
First man${td(n,"time_first_man")}
+
To teammates${ke(rw(n,"average_distance_to_teammates","sum_distance_to_teammates"),0)}
+
To ball${ke(rw(n,"average_distance_to_ball","sum_distance_to_ball"),0)}
+ `}function ad(n,e){return Ya(xt(n?.[e]),xt(n?.active_game_time))}function W$(n){return n?n.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" "):"?"}function X$(n){const e=n&&n.first_man_stint_count>0?n.time_first_man/n.first_man_stint_count:void 0;return` +
Current role${W$(n?.current_role_state)}
+
First man${ad(n,"time_first_man")}
First stints${it(n?.first_man_stint_count)}
Avg first stint${ke(e,2,"s")}
Longest first stint${ke(n?.longest_first_man_stint_time,2,"s")}
-
Second man${td(n,"time_second_man")}
-
Third man${td(n,"time_third_man")}
-
Ambiguous${td(n,"time_ambiguous_role")}
+
Second man${ad(n,"time_second_man")}
+
Third man${ad(n,"time_third_man")}
+
Ambiguous${ad(n,"time_ambiguous_role")}
Became first${it(n?.became_first_man_count)}
Lost first${it(n?.lost_first_man_count)}
- `}function f$(n){const e=n&&n.shots>0?n.goals*100/n.shots:void 0;return` + `}function K$(n){const e=n&&n.shots>0?n.goals*100/n.shots:void 0;return`
Score${it(n?.score)}
Goals${it(n?.goals)}
Assists${it(n?.assists)}
Saves${it(n?.saves)}
Shots${it(n?.shots)}
-
Shooting %${H_(e)}
- `}function p$(n){return` +
Shooting %${q_(e)}
+ `}function q$(n){return`
Hits${it(n?.count)}
Since last${ke(xt(n?.time_since_last_backboard),2,"s")}
- `}function m$(n){return` + `}function Y$(n){return`
Count${it(n?.count)}
Since last${ke(xt(n?.time_since_last_double_tap),2,"s")}
- `}function _$(n){const e=n&&n.completed_pass_count>0?n.total_pass_distance/n.completed_pass_count:void 0,t=n&&n.completed_pass_count>0?n.total_pass_advance/n.completed_pass_count:void 0;return` + `}function j$(n){const e=n&&n.completed_pass_count>0?n.total_pass_distance/n.completed_pass_count:void 0,t=n&&n.completed_pass_count>0?n.total_pass_advance/n.completed_pass_count:void 0;return`
Completed${it(n?.completed_pass_count)}
Received${it(n?.received_pass_count)}
Avg distance${ke(e,0)}
Avg advance${ke(t,0)}
Longest${ke(n?.longest_pass_distance,0)}
Since last${ke(xt(n?.time_since_last_completed_pass),2,"s")}
- `}function g$(n){const e=n&&n.count>0?n.total_ball_speed/n.count:void 0,t=n&&n.count>0?n.total_pass_distance/n.count:void 0;return` + `}function Z$(n){const e=n&&n.count>0?n.total_ball_speed/n.count:void 0,t=n&&n.count>0?n.total_pass_distance/n.count:void 0;return`
Attempts${it(n?.count)}
Avg speed${ke(e,0)}
Fastest${ke(n?.fastest_ball_speed,0)}
Avg pass distance${ke(t,0)}
Since last${ke(xt(n?.time_since_last_one_timer),2,"s")}
- `}function ew(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0;return` + `}function cw(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0;return`
Attempts${it(n?.count)}
High conf${it(n?.high_confidence_count)}
Last quality${ke(xt(n?.last_confidence),0,"%")}
Avg quality${ke(e,0,"%")}
Best quality${ke(xt(n?.best_confidence),0,"%")}
Since last${ke(xt(n?.time_since_last_ceiling_shot),2,"s")}
- `}function tw(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=ys(e),i=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,s=n&&n.count>0?n.cumulative_takeoff_to_touch_time/n.count:void 0,a=n&&n.count>0?n.cumulative_touch_height/n.count:void 0;return` + `}function uw(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=ys(e),i=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,s=n&&n.count>0?n.cumulative_takeoff_to_touch_time/n.count:void 0,a=n&&n.count>0?n.cumulative_touch_height/n.count:void 0;return`
Plays${it(n?.count)}
High conf${it(n?.high_confidence_count)}
Last quality${ke(ys(n?.last_confidence),0,"%")}
@@ -5786,7 +5851,7 @@ void main() {
Avg takeoff${ke(s,2,"s")}
Avg height${ke(a,0)}
Since last${ke(xt(n?.time_since_last_wall_aerial),2,"s")}
- `}function nw(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_takeoff_to_shot_time/n.count:void 0,i=n&&n.count>0?n.cumulative_shot_height/n.count:void 0;return` + `}function dw(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_takeoff_to_shot_time/n.count:void 0,i=n&&n.count>0?n.cumulative_shot_height/n.count:void 0;return`
Shots${it(n?.count)}
High conf${it(n?.high_confidence_count)}
Last quality${ke(ys(n?.last_confidence),0,"%")}
@@ -5794,13 +5859,13 @@ void main() {
Avg takeoff${ke(t,2,"s")}
Avg height${ke(i,0)}
Since last${ke(xt(n?.time_since_last_wall_aerial_shot),2,"s")}
- `}function y$(n){const e=n&&n.carry_count>0?n.average_horizontal_gap_sum/n.carry_count:void 0;return` + `}function J$(n){const e=n&&n.carry_count>0?n.average_horizontal_gap_sum/n.carry_count:void 0;return`
Carries${it(n?.carry_count)}
Total time${ke(n?.total_carry_time,1,"s")}
Longest${ke(n?.longest_carry_time,1,"s")}
Furthest${ke(n?.furthest_carry_distance,0)}
Avg gap${ke(e,0)}
- `}function v$(n){const e=n&&n.count>0?n.average_horizontal_gap_sum/n.count:void 0,t=n&&n.count>0?n.total_touch_count/n.count:void 0;return` + `}function Q$(n){const e=n&&n.count>0?n.average_horizontal_gap_sum/n.count:void 0,t=n&&n.count>0?n.total_touch_count/n.count:void 0;return`
Air dribbles${it(n?.count)}
Ground to air${it(n?.ground_to_air_count)}
Wall to air${it(n?.wall_to_air_count)}
@@ -5810,11 +5875,11 @@ void main() {
Longest${ke(n?.longest_time,1,"s")}
Furthest${ke(n?.furthest_distance,0)}
Avg gap${ke(e,0)}
- `}function b$(n){const e=n&&n.press_count>0?n.total_duration/n.press_count:void 0;return` + `}function eW(n){const e=n&&n.press_count>0?n.total_duration/n.press_count:void 0;return`
Presses${it(n?.press_count)}
Total time${ke(n?.total_duration,1,"s")}
Avg duration${ke(e,2,"s")}
- `}function x$(n){const e=n&&n.whiff_count>0?n.cumulative_closest_approach_distance/n.whiff_count:void 0;return` + `}function tW(n){const e=n&&n.whiff_count>0?n.cumulative_closest_approach_distance/n.whiff_count:void 0;return`
Whiffs${it(n?.whiff_count)}
Beaten to ball${it(n?.beaten_to_ball_count)}
Grounded${it(n?.grounded_whiff_count)}
@@ -5824,10 +5889,10 @@ void main() {
Best closest${ke(xt(n?.best_closest_approach_distance),0)}
Avg closest${ke(e,0)}
Since last${ke(xt(n?.time_since_last_whiff),2,"s")}
- `}function w$(n){return` + `}function nW(n){return`
Inflicted${it(n?.demos_inflicted)}
Taken${it(n?.demos_taken)}
- `}function S$(n){const e=n&&n.bumps_inflicted>0?n.cumulative_bump_strength/n.bumps_inflicted:void 0;return` + `}function iW(n){const e=n&&n.bumps_inflicted>0?n.cumulative_bump_strength/n.bumps_inflicted:void 0;return`
Inflicted${it(n?.bumps_inflicted)}
Taken${it(n?.bumps_taken)}
Team inflicted${it(n?.team_bumps_inflicted)}
@@ -5835,14 +5900,14 @@ void main() {
Last strength${ke(xt(n?.last_bump_strength),0)}
Max strength${ke(xt(n?.max_bump_strength),0)}
Avg strength${ke(e,0)}
- `}function T$(n){return` + `}function sW(n){return`
Refreshes${it(n?.count)}
On ball${it(n?.on_ball_count)}
- `}function M$(n){const e=n&&n.count>0?n.total_time_to_use/n.count:void 0;return` + `}function aW(n){const e=n&&n.count>0?n.total_time_to_use/n.count:void 0;return`
Confirmed${it(n?.count)}
Avg use${ke(e,2,"s")}
Fastest use${ke(xt(n?.min_time_to_use),2,"s")}
- `}function iw(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,i=n&&n.count>0?n.cumulative_ball_speed_change/n.count:void 0;return` + `}function hw(n){const e=n&&n.count>0?n.cumulative_confidence/n.count:void 0,t=n&&n.count>0?n.cumulative_setup_duration/n.count:void 0,i=n&&n.count>0?n.cumulative_ball_speed_change/n.count:void 0;return`
Attempts${it(n?.count)}
High conf${it(n?.high_confidence_count)}
Last quality${ke(xt(n?.last_confidence),0,"%")}
@@ -5850,56 +5915,56 @@ void main() {
Avg setup${ke(t,2,"s")}
Avg impulse${ke(i,0,"uu/s")}
Since last${ke(xt(n?.time_since_last_flick),2,"s")}
- `}function sw(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0;return` + `}function fw(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0;return`
Attempts${it(n?.count)}
High conf${it(n?.high_confidence_count)}
Last quality${ke(xt(n?.last_quality),0,"%")}
Avg quality${ke(e,0,"%")}
Best quality${ke(xt(n?.best_quality),0,"%")}
Since last${ke(xt(n?.time_since_last_speed_flip),2,"s")}
- `}function aw(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ys(n?.last_quality),i=ys(e),s=ys(n?.best_quality);return` + `}function pw(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ys(n?.last_quality),i=ys(e),s=ys(n?.best_quality);return`
Attempts${it(n?.count)}
High conf${it(n?.high_confidence_count)}
Last quality${ke(t,0,"%")}
Avg quality${ke(i,0,"%")}
Best quality${ke(s,0,"%")}
Since last${ke(xt(n?.time_since_last_half_flip),2,"s")}
- `}function rw(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ys(n?.last_quality),i=ys(e),s=ys(n?.best_quality);return` + `}function mw(n){const e=n&&n.count>0?n.cumulative_quality/n.count:void 0,t=ys(n?.last_quality),i=ys(e),s=ys(n?.best_quality);return`
Attempts${it(n?.count)}
High conf${it(n?.high_confidence_count)}
Last quality${ke(t,0,"%")}
Avg quality${ke(i,0,"%")}
Best quality${ke(s,0,"%")}
Since last${ke(xt(n?.time_since_last_wavedash),2,"s")}
- `}function ow(n){const e=n&&n.tracked_time>0?Ys(n.boost_integral/n.tracked_time).toFixed(0):"?",t=xt(n?.tracked_time);return` -
Collected${o$(n?.amount_collected,n?.amount_respawned)}
-
Inactive collected${$i(n?.amount_collected_inactive)}
-
Big pads amt${$i(n?.amount_collected_big)}
-
Small pads amt${$i(n?.amount_collected_small)}
-
Respawns${$i(n?.amount_respawned)}
-
Overfill${$i(n?.overfill_total)}
-
Used${$i(n?.amount_used)}
-
Used ground${$i(n?.amount_used_while_grounded)}
-
Used air${$i(n?.amount_used_while_airborne)}
+ `}function _w(n){const e=n&&n.tracked_time>0?Ys(n.boost_integral/n.tracked_time).toFixed(0):"?",t=xt(n?.tracked_time);return` +
Collected${H$(n?.amount_collected,n?.amount_respawned)}
+
Inactive collected${Wi(n?.amount_collected_inactive)}
+
Big pads amt${Wi(n?.amount_collected_big)}
+
Small pads amt${Wi(n?.amount_collected_small)}
+
Respawns${Wi(n?.amount_respawned)}
+
Overfill${Wi(n?.overfill_total)}
+
Used${Wi(n?.amount_used)}
+
Used ground${Wi(n?.amount_used_while_grounded)}
+
Used air${Wi(n?.amount_used_while_airborne)}
Big pads${n?.big_pads_collected??"?"}
Small pads${n?.small_pads_collected??"?"}
Inactive big pads${n?.big_pads_collected_inactive??"?"}
Inactive small pads${n?.small_pads_collected_inactive??"?"}
-
Stolen${$i(n?.amount_stolen)}
+
Stolen${Wi(n?.amount_stolen)}
Avg boost${e}
-
Time @ 0${qa(xt(n?.time_zero_boost),t)}
-
Time 0-25${qa(xt(n?.time_boost_0_25),t)}
-
Time 25-50${qa(xt(n?.time_boost_25_50),t)}
-
Time 50-75${qa(xt(n?.time_boost_50_75),t)}
-
Time 75-100${qa(xt(n?.time_boost_75_100),t)}
-
Time @ 100${qa(xt(n?.time_hundred_boost),t)}
- `}const V_={kind:{label:"Kind",valueOrder:["control","medium_hit","hard_hit"],formatValue:n=>({control:"Control",medium_hit:"Medium",hard_hit:"Hard"})[n]??n},height_band:{label:"Height",valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n},surface:{label:"Surface",valueOrder:["ground","air","wall"],formatValue:n=>({ground:"Ground",air:"Air",wall:"Wall"})[n]??n},dodge_state:{label:"Dodge",valueOrder:["no_dodge","dodge"],formatValue:n=>({no_dodge:"No dodge",dodge:"Dodge"})[n]??n}};function E$(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function oa(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Pm(n,e=0,t=""){return n===void 0||!Number.isFinite(n)?"?":`${n.toFixed(e)}${t}`}function lw(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Ji(n,e){return`
${lw(n)}${lw(e)}
`}function C$(n,e,t){for(const i of t){const{valueOrder:s}=V_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function A$(n,e){if(e.length===1){const t=e[0];return V_[t].formatValue(n[t])}return e.map(t=>V_[t].formatValue(n[t])).join(" / ")}function R$(n){return(n?.labeled_touch_counts?.entries??[]).map(e=>({labels:e.labels,count:e.count}))}function P$(n,e){if(e.length===0||n.length===0)return"";const t=new Map;for(const i of n){const s=new Map(i.labels.map(c=>[c.key,c.value])),a={};let r=!0;for(const c of e){const u=s.get(c);if(u===void 0){r=!1;break}a[c]=u}if(!r)continue;const o=e.map(c=>`${c}:${a[c]}`).join("|"),l=t.get(o);l?l.count+=i.count:t.set(o,{values:a,count:i.count})}return[...t.values()].sort((i,s)=>C$(i.values,s.values,e)).map(i=>Ji(A$(i.values,e),oa(i.count))).join("")}function I$(n,e){if(!n||e.length!==1)return"";const[t]=e;if(t==="kind")return[Ji("Control",oa(n.control_touch_count)),Ji("Medium",oa(n.medium_hit_count)),Ji("Hard",oa(n.hard_hit_count))].join("");if(t==="height_band"){const i=n.high_aerial_touch_count??0,s=(n.aerial_touch_count??0)-i,a=(n.touch_count??0)-(n.aerial_touch_count??0);return[Ji("Ground",oa(a)),Ji("Low air",oa(s)),Ji("High air",oa(i))].join("")}return""}function cw(n,e={}){const t=E$(e.breakdownClasses),i=R$(n),s=P$(i,t)||I$(n,t);return` - ${Ji("Touches",oa(n?.touch_count))} - ${Ji("Ball advanced",Pm(n?.total_ball_advance_distance,0," uu"))} - ${Ji("Ball traveled",Pm(n?.total_ball_travel_distance,0," uu"))} - ${Ji("Ball retreated",Pm(n?.total_ball_retreat_distance,0," uu"))} +
Time @ 0${Ya(xt(n?.time_zero_boost),t)}
+
Time 0-25${Ya(xt(n?.time_boost_0_25),t)}
+
Time 25-50${Ya(xt(n?.time_boost_25_50),t)}
+
Time 50-75${Ya(xt(n?.time_boost_50_75),t)}
+
Time 75-100${Ya(xt(n?.time_boost_75_100),t)}
+
Time @ 100${Ya(xt(n?.time_hundred_boost),t)}
+ `}const Y_={kind:{label:"Kind",valueOrder:["control","medium_hit","hard_hit"],formatValue:n=>({control:"Control",medium_hit:"Medium",hard_hit:"Hard"})[n]??n},height_band:{label:"Height",valueOrder:["ground","low_air","high_air"],formatValue:n=>({ground:"Ground",low_air:"Low air",high_air:"High air"})[n]??n},surface:{label:"Surface",valueOrder:["ground","air","wall"],formatValue:n=>({ground:"Ground",air:"Air",wall:"Wall"})[n]??n},dodge_state:{label:"Dodge",valueOrder:["no_dodge","dodge"],formatValue:n=>({no_dodge:"No dodge",dodge:"Dodge"})[n]??n}};function rW(n){const e=new Set,t=[];for(const i of n??[])e.has(i)||(e.add(i),t.push(i));return t}function oa(n){return n===void 0||Number.isNaN(n)?"?":`${Math.round(n)}`}function Nm(n,e=0,t=""){return n===void 0||!Number.isFinite(n)?"?":`${n.toFixed(e)}${t}`}function gw(n){return n.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("'","'")}function Qi(n,e){return`
${gw(n)}${gw(e)}
`}function oW(n,e,t){for(const i of t){const{valueOrder:s}=Y_[i],a=s.indexOf(n[i]),r=s.indexOf(e[i]),o=a===-1?Number.MAX_SAFE_INTEGER:a,l=r===-1?Number.MAX_SAFE_INTEGER:r;if(o!==l)return o-l}return 0}function lW(n,e){if(e.length===1){const t=e[0];return Y_[t].formatValue(n[t])}return e.map(t=>Y_[t].formatValue(n[t])).join(" / ")}function cW(n){return(n?.labeled_touch_counts?.entries??[]).map(e=>({labels:e.labels,count:e.count}))}function uW(n,e){if(e.length===0||n.length===0)return"";const t=new Map;for(const i of n){const s=new Map(i.labels.map(c=>[c.key,c.value])),a={};let r=!0;for(const c of e){const u=s.get(c);if(u===void 0){r=!1;break}a[c]=u}if(!r)continue;const o=e.map(c=>`${c}:${a[c]}`).join("|"),l=t.get(o);l?l.count+=i.count:t.set(o,{values:a,count:i.count})}return[...t.values()].sort((i,s)=>oW(i.values,s.values,e)).map(i=>Qi(lW(i.values,e),oa(i.count))).join("")}function dW(n,e){if(!n||e.length!==1)return"";const[t]=e;if(t==="kind")return[Qi("Control",oa(n.control_touch_count)),Qi("Medium",oa(n.medium_hit_count)),Qi("Hard",oa(n.hard_hit_count))].join("");if(t==="height_band"){const i=n.high_aerial_touch_count??0,s=(n.aerial_touch_count??0)-i,a=(n.touch_count??0)-(n.aerial_touch_count??0);return[Qi("Ground",oa(a)),Qi("Low air",oa(s)),Qi("High air",oa(i))].join("")}return""}function yw(n,e={}){const t=rW(e.breakdownClasses),i=cW(n),s=uW(i,t)||dW(n,t);return` + ${Qi("Touches",oa(n?.touch_count))} + ${Qi("Ball advanced",Nm(n?.total_ball_advance_distance,0," uu"))} + ${Qi("Ball traveled",Nm(n?.total_ball_travel_distance,0," uu"))} + ${Qi("Ball retreated",Nm(n?.total_ball_retreat_distance,0," uu"))} ${s} - `}const G_="subtr-actor:touch-color-modes-change",L$=[{title:"Team",mode:"team"},{title:"Intention",mode:"intention"},{title:"Hit strength",mode:"kind"},{title:"Height",mode:"height_band"},{title:"Surface",mode:"surface"},{title:"Dodge",mode:"dodge_state"},{title:"Flags",mode:"flag"}];function k$(n){return L$.find(e=>e.title===n)?.mode??"team"}function D$(n){return`#${n.toString(16).padStart(6,"0")}`}function S1(n,e){n.replaceChildren();const t=So(e),i=new Set(t),s=document.createElement("div");s.className="touch-color-legend-explainer";const a=document.createElement("span");a.textContent="Toggle sections to add or remove rings";const r=document.createElement("span");r.textContent="The outermost enabled ring sets the label tint",s.append(a,r),n.append(s);for(const o of BH){const l=k$(o.title),c=i.has(l),u=document.createElement("section");u.className="touch-color-legend-group",u.dataset.active=c?"true":"false";const d=document.createElement("button");d.type="button",d.className="touch-color-legend-heading",d.dataset.colorMode=l,d.dataset.active=c?"true":"false",d.textContent=o.title,d.addEventListener("click",()=>{const f=new Set(i);f.has(l)?f.delete(l):f.add(l);const p=NH.filter(g=>f.has(g));n.dispatchEvent(new CustomEvent(G_,{bubbles:!0,detail:{colorModes:p}})),S1(n,p)});const h=document.createElement("div");h.className="touch-color-legend-list";for(const f of o.entries){const p=document.createElement("div");p.className="touch-color-legend-item";const g=document.createElement("span");g.className="touch-color-legend-swatch",g.style.background=D$(f.color);const _=document.createElement("span");_.textContent=f.label,p.append(g,_),h.append(p)}u.append(d,h),n.append(u)}}function O$(n){let e=null,t=5,i="advancement",s=["team"],a=null,r=null,o=null,l=null,c=null;const u=new Set,d=["kind","height_band","surface","dodge_state"];return{id:"touch",label:"Touch",setup(g){e=new ZH(g.player.sceneState,g.player.container,g.replay,g.statsTimeline,{mode:i,colorModes:s}),e.setDecaySeconds(t),c=_=>{if(!(_ instanceof CustomEvent))return;const m=_.detail?.colorModes;Array.isArray(m)&&p(m.filter(bd))},window.addEventListener(G_,c),h()},teardown(){c&&(window.removeEventListener(G_,c),c=null),e?.dispose(),e=null},onBeforeRender(g){e?.update(g.currentTime)},getTimelineEvents(g){return I4(g.statsTimeline,g.replay)},getConfig(){return{decaySeconds:t,overlayMode:i,overlayColorModes:s,breakdownClasses:f()}},applyConfig(g){if(g&&typeof g=="object"&&!Array.isArray(g)){const _=g;if(typeof _.decaySeconds=="number"&&Number.isFinite(_.decaySeconds)&&(t=Math.max(1,Math.min(10,_.decaySeconds)),e?.setDecaySeconds(t)),(_.overlayMode==="markers"||_.overlayMode==="advancement")&&(i=_.overlayMode,e?.setMode(i)),Array.isArray(_.overlayColorModes)?(s=So(_.overlayColorModes.filter(bd)),e?.setColorModes(s)):bd(_.overlayColorMode)&&(s=So(_.overlayColorMode),e?.setColorModes(s)),u.clear(),Array.isArray(_.breakdownClasses))for(const m of _.breakdownClasses)d.includes(m)&&u.add(m)}h(),n.rerenderCurrentState()},renderStats(g,_){const m=Ht(_.statsFrameLookup,g);return m?ci(m.players,v=>En(v.name,v.is_team_0,cw(v.touch,{breakdownClasses:f()}),v.touch?.is_last_touch?'Last Touch':"")):""},renderFocusedPlayerStats(g,_,m){const v=Sn(m,_,g);return v?cw(v.touch,{breakdownClasses:f()}):""},renderSettings(){if(!a){a=document.createElement("div"),a.className="module-settings-card";const g=document.createElement("div");g.className="module-settings-header";const _=document.createElement("div"),m=document.createElement("p");m.className="module-settings-eyebrow",m.textContent="Touch markers";const v=document.createElement("h3");v.textContent="Touch decay",_.append(m,v),r=document.createElement("strong"),r.className="metric-readout",g.append(_,r);const y=document.createElement("label"),b=document.createElement("span");b.className="label",b.textContent="Keep each marker visible after the touch";const S=document.createElement("input");S.type="range",S.min="1",S.max="10",S.step="0.5",S.value=`${t}`,S.addEventListener("input",()=>{const H=Number(S.value);t=Number.isFinite(H)?Math.max(1,Math.min(10,H)):t,e?.setDecaySeconds(t),h(t),n.requestConfigSync?.()}),y.append(b,S);const x=document.createElement("div");x.className="module-settings-subgroup";const M=document.createElement("div");M.className="module-settings-header";const C=document.createElement("div"),w=document.createElement("p");w.className="module-settings-eyebrow",w.textContent="Overlay";const E=document.createElement("h3");E.textContent="Touch mode",C.append(w,E),o=document.createElement("strong"),o.className="metric-readout",M.append(C,o);const R=document.createElement("div");R.className="module-settings-options";for(const H of[{mode:"markers",label:"Markers"},{mode:"advancement",label:"Advancement"}]){const ie=document.createElement("label");ie.className="toggle";const le=document.createElement("input");le.type="radio",le.name="touch-overlay-mode",le.dataset.overlayMode=H.mode,le.addEventListener("change",()=>{le.checked&&(i=H.mode,e?.setMode(i),h(),n.requestConfigSync?.())});const me=document.createElement("span");me.textContent=H.label,ie.append(le,me),R.append(ie)}x.append(M,R);const L=document.createElement("div");L.className="module-settings-subgroup";const O=document.createElement("div");O.className="module-settings-header";const D=document.createElement("div"),U=document.createElement("p");U.className="module-settings-eyebrow",U.textContent="Stat display";const F=document.createElement("h3");F.textContent="Touch breakdown",D.append(U,F),l=document.createElement("strong"),l.className="metric-readout",O.append(D,l);const W=document.createElement("div");W.className="module-settings-options";for(const H of[{className:"kind",label:"Kind"},{className:"height_band",label:"Height"},{className:"surface",label:"Surface"},{className:"dodge_state",label:"Dodge"}]){const ie=document.createElement("label");ie.className="toggle";const le=document.createElement("input");le.type="checkbox",le.dataset.breakdownClass=H.className,le.addEventListener("change",()=>{le.checked?u.add(H.className):u.delete(H.className),h(),n.rerenderCurrentState(),n.requestConfigSync?.()});const me=document.createElement("span");me.textContent=H.label,ie.append(le,me),W.append(ie)}L.append(O,W),a.append(g,y,x,L)}return h(),a}};function h(g){if(!a)return;const _=g??t,m=a.querySelector("input");m instanceof HTMLInputElement&&(m.value=`${_}`),r&&(r.textContent=`${_.toFixed(1)}s`);for(const v of a.querySelectorAll("input[data-overlay-mode]"))v.checked=v.dataset.overlayMode===i;o&&(o.textContent=i==="advancement"?"Advancement":"Markers");for(const v of a.querySelectorAll("input[data-breakdown-class]")){const y=v.dataset.breakdownClass;v.checked=y?u.has(y):!1}if(l){const v=f();l.textContent=v.length>0?v.map(y=>({kind:"Kind",height_band:"Height",surface:"Surface",dodge_state:"Dodge"})[y]).join(" + "):"Total only"}}function f(){return d.filter(g=>u.has(g))}function p(g){s=So(g),e?.setColorModes(s),h(),n.requestConfigSync?.()}}function F$(n,e=b1({refreshTimelineRanges:n.refreshTimelineRanges,rerenderCurrentState:n.rerenderCurrentState})){return{id:"boost",label:"Boost",setup(t){e.setup(t)},teardown(){e.teardown()},onBeforeRender(){},getTimelineRanges(t){return mG(t.statsTimeline,t.replay,e.getTimelineRangeOptions())},getConfig(){return e.getConfig()},applyConfig(t){e.applyConfig(t)},includeBoostPickupAnimationPickup(t){return e.includePickup(t)},renderStats(t,i){const s=Ht(i.statsFrameLookup,t);return s?ci(s.players,a=>En(a.name,a.is_team_0,ow(a.boost))):""},renderFocusedPlayerStats(t,i,s){const a=Sn(s,i,t);return a?ow(a.boost):""},renderSettings(t){return e.renderSettings(t,{showHeader:!0})}}}function N$(){return ui({id:"core",label:"Core",select:n=>n.core,render:n=>f$(n)})}function U$(){return ui({id:"backboard",label:"Backboard",select:n=>n.backboard,render:n=>p$(n),getTimelineEvents(n){return L4(n.statsTimeline,n.replay)}})}function B$(){let n=null;return{id:"ceiling-shot",label:"Ceiling Shot",setup(e){n=new w4(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=Ht(t.statsFrameLookup,e);return i?ci(i.players,s=>En(s.name,s.is_team_0,ew(s.ceiling_shot),s.ceiling_shot?.is_last_ceiling_shot?'Last Ceiling Shot':"")):""},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?ew(s.ceiling_shot):""}}}function z$(){return{id:"wall-aerial",label:"Wall-to-Air Setup",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,tw(i.wall_aerial),i.wall_aerial?.is_last_wall_aerial?'Last Wall-to-Air Setup':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?tw(i.wall_aerial):""}}}function H$(){return{id:"wall-aerial-shot",label:"Wall Shot",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,nw(i.wall_aerial_shot),i.wall_aerial_shot?.is_last_wall_aerial_shot?'Last Wall Shot':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?nw(i.wall_aerial_shot):""}}}function V$(){return ui({id:"ball-carry",label:"Ball Carry",select:n=>n.ball_carry,render:n=>y$(n)})}function G$(){return ui({id:"air-dribble",label:"Air Dribble",select:n=>n.air_dribble,render:n=>v$(n)})}function $$(){return ui({id:"dodge-reset",label:"Dodge Refresh",select:n=>n.dodge_reset,render:n=>T$(n)})}function W$(){return ui({id:"flip-reset",label:"Flip Reset",select:n=>n.flip_reset,render:n=>M$(n)})}function X$(){return ui({id:"double-tap",label:"Double Tap",select:n=>n.double_tap,render:n=>m$(n)})}function K$(){return ui({id:"pass",label:"Pass",select:n=>n.pass,render:n=>_$(n)})}function q$(){return ui({id:"one-timer",label:"One-timer",select:n=>n.one_timer,render:n=>g$(n)})}function Y$(){return{id:"flick",label:"Flick",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,iw(i.flick),i.flick?.is_last_flick?'Last Flick':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?iw(i.flick):""}}}function j$(){let n=null;return{id:"speed-flip",label:"Speed Flip",setup(e){n=new i$(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=Ht(t.statsFrameLookup,e);return i?ci(i.players,s=>En(s.name,s.is_team_0,sw(s.speed_flip),s.speed_flip?.is_last_speed_flip?'Last Speed Flip':"")):""},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?sw(s.speed_flip):""}}}function Z$(){let n=null;return{id:"dodge",label:"Dodge",setup(e){n=new $G(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return W4(e.statsTimeline,e.replay)},renderStats(e,t){const i=new Map;for(const a of t.replay.players)i.set(a.id,{name:a.name,isTeamZero:a.isTeamZero,count:0});for(const a of be(t.statsTimeline,"dodge")){const r=Ct(a.player),o=t.replay.players.find(c=>c.id===r)??null,l=i.get(r)??{name:o?.name??r,isTeamZero:a.is_team_0,count:0};l.count+=1,i.set(r,l)}const s=[...i.values()].filter(a=>a.count>0);return s.length===0?"":`
${[!0,!1].map(a=>{const r=s.filter(l=>l.isTeamZero===a);if(r.length===0)return"";const o=a?"Blue":"Orange";return`
+ `}const j_="subtr-actor:touch-color-modes-change",hW=[{title:"Team",mode:"team"},{title:"Intention",mode:"intention"},{title:"Hit strength",mode:"kind"},{title:"Height",mode:"height_band"},{title:"Surface",mode:"surface"},{title:"Dodge",mode:"dodge_state"},{title:"Flags",mode:"flag"}];function fW(n){return hW.find(e=>e.title===n)?.mode??"team"}function pW(n){return`#${n.toString(16).padStart(6,"0")}`}function D1(n,e){n.replaceChildren();const t=Mo(e),i=new Set(t),s=document.createElement("div");s.className="touch-color-legend-explainer";const a=document.createElement("span");a.textContent="Toggle sections to add or remove rings";const r=document.createElement("span");r.textContent="The outermost enabled ring sets the label tint",s.append(a,r),n.append(s);for(const o of vV){const l=fW(o.title),c=i.has(l),u=document.createElement("section");u.className="touch-color-legend-group",u.dataset.active=c?"true":"false";const d=document.createElement("button");d.type="button",d.className="touch-color-legend-heading",d.dataset.colorMode=l,d.dataset.active=c?"true":"false",d.textContent=o.title,d.addEventListener("click",()=>{const f=new Set(i);f.has(l)?f.delete(l):f.add(l);const p=gV.filter(g=>f.has(g));n.dispatchEvent(new CustomEvent(j_,{bubbles:!0,detail:{colorModes:p}})),D1(n,p)});const h=document.createElement("div");h.className="touch-color-legend-list";for(const f of o.entries){const p=document.createElement("div");p.className="touch-color-legend-item";const g=document.createElement("span");g.className="touch-color-legend-swatch",g.style.background=pW(f.color);const _=document.createElement("span");_.textContent=f.label,p.append(g,_),h.append(p)}u.append(d,h),n.append(u)}}function mW(n){let e=null,t=5,i="advancement",s=["team"],a=null,r=null,o=null,l=null,c=null;const u=new Set,d=["kind","height_band","surface","dodge_state"];return{id:"touch",label:"Touch",setup(g){e=new IV(g.player.sceneState,g.player.container,g.replay,g.statsTimeline,{mode:i,colorModes:s}),e.setDecaySeconds(t),c=_=>{if(!(_ instanceof CustomEvent))return;const m=_.detail?.colorModes;Array.isArray(m)&&p(m.filter(Md))},window.addEventListener(j_,c),h()},teardown(){c&&(window.removeEventListener(j_,c),c=null),e?.dispose(),e=null},onBeforeRender(g){e?.update(g.currentTime)},getTimelineEvents(g){return dG(g.statsTimeline,g.replay)},getConfig(){return{decaySeconds:t,overlayMode:i,overlayColorModes:s,breakdownClasses:f()}},applyConfig(g){if(g&&typeof g=="object"&&!Array.isArray(g)){const _=g;if(typeof _.decaySeconds=="number"&&Number.isFinite(_.decaySeconds)&&(t=Math.max(1,Math.min(10,_.decaySeconds)),e?.setDecaySeconds(t)),(_.overlayMode==="markers"||_.overlayMode==="advancement")&&(i=_.overlayMode,e?.setMode(i)),Array.isArray(_.overlayColorModes)?(s=Mo(_.overlayColorModes.filter(Md)),e?.setColorModes(s)):Md(_.overlayColorMode)&&(s=Mo(_.overlayColorMode),e?.setColorModes(s)),u.clear(),Array.isArray(_.breakdownClasses))for(const m of _.breakdownClasses)d.includes(m)&&u.add(m)}h(),n.rerenderCurrentState()},renderStats(g,_){const m=Ht(_.statsFrameLookup,g);return m?ci(m.players,v=>En(v.name,v.is_team_0,yw(v.touch,{breakdownClasses:f()}),v.touch?.is_last_touch?'Last Touch':"")):""},renderFocusedPlayerStats(g,_,m){const v=Sn(m,_,g);return v?yw(v.touch,{breakdownClasses:f()}):""},renderSettings(){if(!a){a=document.createElement("div"),a.className="module-settings-card";const g=document.createElement("div");g.className="module-settings-header";const _=document.createElement("div"),m=document.createElement("p");m.className="module-settings-eyebrow",m.textContent="Touch markers";const v=document.createElement("h3");v.textContent="Touch decay",_.append(m,v),r=document.createElement("strong"),r.className="metric-readout",g.append(_,r);const y=document.createElement("label"),b=document.createElement("span");b.className="label",b.textContent="Keep each marker visible after the touch";const S=document.createElement("input");S.type="range",S.min="1",S.max="10",S.step="0.5",S.value=`${t}`,S.addEventListener("input",()=>{const H=Number(S.value);t=Number.isFinite(H)?Math.max(1,Math.min(10,H)):t,e?.setDecaySeconds(t),h(t),n.requestConfigSync?.()}),y.append(b,S);const x=document.createElement("div");x.className="module-settings-subgroup";const M=document.createElement("div");M.className="module-settings-header";const C=document.createElement("div"),w=document.createElement("p");w.className="module-settings-eyebrow",w.textContent="Overlay";const E=document.createElement("h3");E.textContent="Touch mode",C.append(w,E),o=document.createElement("strong"),o.className="metric-readout",M.append(C,o);const R=document.createElement("div");R.className="module-settings-options";for(const H of[{mode:"markers",label:"Markers"},{mode:"advancement",label:"Advancement"}]){const ie=document.createElement("label");ie.className="toggle";const le=document.createElement("input");le.type="radio",le.name="touch-overlay-mode",le.dataset.overlayMode=H.mode,le.addEventListener("change",()=>{le.checked&&(i=H.mode,e?.setMode(i),h(),n.requestConfigSync?.())});const me=document.createElement("span");me.textContent=H.label,ie.append(le,me),R.append(ie)}x.append(M,R);const L=document.createElement("div");L.className="module-settings-subgroup";const O=document.createElement("div");O.className="module-settings-header";const D=document.createElement("div"),U=document.createElement("p");U.className="module-settings-eyebrow",U.textContent="Stat display";const F=document.createElement("h3");F.textContent="Touch breakdown",D.append(U,F),l=document.createElement("strong"),l.className="metric-readout",O.append(D,l);const W=document.createElement("div");W.className="module-settings-options";for(const H of[{className:"kind",label:"Kind"},{className:"height_band",label:"Height"},{className:"surface",label:"Surface"},{className:"dodge_state",label:"Dodge"}]){const ie=document.createElement("label");ie.className="toggle";const le=document.createElement("input");le.type="checkbox",le.dataset.breakdownClass=H.className,le.addEventListener("change",()=>{le.checked?u.add(H.className):u.delete(H.className),h(),n.rerenderCurrentState(),n.requestConfigSync?.()});const me=document.createElement("span");me.textContent=H.label,ie.append(le,me),W.append(ie)}L.append(O,W),a.append(g,y,x,L)}return h(),a}};function h(g){if(!a)return;const _=g??t,m=a.querySelector("input");m instanceof HTMLInputElement&&(m.value=`${_}`),r&&(r.textContent=`${_.toFixed(1)}s`);for(const v of a.querySelectorAll("input[data-overlay-mode]"))v.checked=v.dataset.overlayMode===i;o&&(o.textContent=i==="advancement"?"Advancement":"Markers");for(const v of a.querySelectorAll("input[data-breakdown-class]")){const y=v.dataset.breakdownClass;v.checked=y?u.has(y):!1}if(l){const v=f();l.textContent=v.length>0?v.map(y=>({kind:"Kind",height_band:"Height",surface:"Surface",dodge_state:"Dodge"})[y]).join(" + "):"Total only"}}function f(){return d.filter(g=>u.has(g))}function p(g){s=Mo(g),e?.setColorModes(s),h(),n.requestConfigSync?.()}}function _W(n,e=I1({refreshTimelineRanges:n.refreshTimelineRanges,rerenderCurrentState:n.rerenderCurrentState})){return{id:"boost",label:"Boost",setup(t){e.setup(t)},teardown(){e.teardown()},onBeforeRender(){},getTimelineRanges(t){return YG(t.statsTimeline,t.replay,e.getTimelineRangeOptions())},getConfig(){return e.getConfig()},applyConfig(t){e.applyConfig(t)},includeBoostPickupAnimationPickup(t){return e.includePickup(t)},renderStats(t,i){const s=Ht(i.statsFrameLookup,t);return s?ci(s.players,a=>En(a.name,a.is_team_0,_w(a.boost))):""},renderFocusedPlayerStats(t,i,s){const a=Sn(s,i,t);return a?_w(a.boost):""},renderSettings(t){return e.renderSettings(t,{showHeader:!0})}}}function gW(){return ui({id:"core",label:"Core",select:n=>n.core,render:n=>K$(n)})}function yW(){return ui({id:"backboard",label:"Backboard",select:n=>n.backboard,render:n=>q$(n),getTimelineEvents(n){return hG(n.statsTimeline,n.replay)}})}function vW(){let n=null;return{id:"ceiling-shot",label:"Ceiling Shot",setup(e){n=new nG(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=Ht(t.statsFrameLookup,e);return i?ci(i.players,s=>En(s.name,s.is_team_0,cw(s.ceiling_shot),s.ceiling_shot?.is_last_ceiling_shot?'Last Ceiling Shot':"")):""},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?cw(s.ceiling_shot):""}}}function bW(){return{id:"wall-aerial",label:"Wall-to-Air Setup",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,uw(i.wall_aerial),i.wall_aerial?.is_last_wall_aerial?'Last Wall-to-Air Setup':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?uw(i.wall_aerial):""}}}function xW(){return{id:"wall-aerial-shot",label:"Wall Shot",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,dw(i.wall_aerial_shot),i.wall_aerial_shot?.is_last_wall_aerial_shot?'Last Wall Shot':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?dw(i.wall_aerial_shot):""}}}function wW(){return ui({id:"ball-carry",label:"Ball Carry",select:n=>n.ball_carry,render:n=>J$(n)})}function SW(){return ui({id:"air-dribble",label:"Air Dribble",select:n=>n.air_dribble,render:n=>Q$(n)})}function TW(){return ui({id:"dodge-reset",label:"Dodge Refresh",select:n=>n.dodge_reset,render:n=>sW(n)})}function MW(){return ui({id:"flip-reset",label:"Flip Reset",select:n=>n.flip_reset,render:n=>aW(n)})}function EW(){return ui({id:"double-tap",label:"Double Tap",select:n=>n.double_tap,render:n=>Y$(n)})}function CW(){return ui({id:"pass",label:"Pass",select:n=>n.pass,render:n=>j$(n)})}function AW(){return ui({id:"one-timer",label:"One-timer",select:n=>n.one_timer,render:n=>Z$(n)})}function RW(){return{id:"flick",label:"Flick",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,hw(i.flick),i.flick?.is_last_flick?'Last Flick':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?hw(i.flick):""}}}function PW(){let n=null;return{id:"speed-flip",label:"Speed Flip",setup(e){n=new N$(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},renderStats(e,t){const i=Ht(t.statsFrameLookup,e);return i?ci(i.players,s=>En(s.name,s.is_team_0,fw(s.speed_flip),s.speed_flip?.is_last_speed_flip?'Last Speed Flip':"")):""},renderFocusedPlayerStats(e,t,i){const s=Sn(i,t,e);return s?fw(s.speed_flip):""}}}function IW(){let n=null;return{id:"dodge",label:"Dodge",setup(e){n=new T$(e.player.sceneState,e.player.container,e.replay,e.statsTimeline)},teardown(){n?.dispose(),n=null},onBeforeRender(e){n?.update(e.currentTime)},getTimelineEvents(e){return MG(e.statsTimeline,e.replay)},renderStats(e,t){const i=new Map;for(const a of t.replay.players)i.set(a.id,{name:a.name,isTeamZero:a.isTeamZero,count:0});for(const a of be(t.statsTimeline,"dodge")){const r=Ct(a.player),o=t.replay.players.find(c=>c.id===r)??null,l=i.get(r)??{name:o?.name??r,isTeamZero:a.is_team_0,count:0};l.count+=1,i.set(r,l)}const s=[...i.values()].filter(a=>a.count>0);return s.length===0?"":`
${[!0,!1].map(a=>{const r=s.filter(l=>l.isTeamZero===a);if(r.length===0)return"";const o=a?"Blue":"Orange";return`

${o} team

${r.length} player${r.length===1?"":"s"} @@ -5907,7 +5972,7 @@ void main() {
${r.map(l=>En(l.name,l.isTeamZero,`
Events${l.count}
`)).join("")}
-
`}).join("")}
`},renderFocusedPlayerStats(e,t,i){return`
Events${be(i.statsTimeline,"dodge").filter(a=>Ct(a.player)===e).length}
`}}}function J$(){return{id:"half-flip",label:"Half Flip",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,aw(i.half_flip),i.half_flip?.is_last_half_flip?'Last Half Flip':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?aw(i.half_flip):""}}}function Q$(){return{id:"wavedash",label:"Wavedash",setup(){},teardown(){},onBeforeRender(){},getTimelineEvents(n){return K4(n.statsTimeline,n.replay)},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,rw(i.wavedash),i.wavedash?.is_last_wavedash?'Last Wavedash':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?rw(i.wavedash):""}}}function eW(){return ui({id:"whiff",label:"Whiff",select:n=>n.whiff,render:n=>x$(n),getTimelineEvents(n){return J4(n.statsTimeline,n.replay)}})}function tW(n){let e=null,t=null;const i=new Set,s=["speed_band","height_band"];return{id:"movement",label:"Movement",setup(){a()},teardown(){},onBeforeRender(){},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const c=Ht(l.statsFrameLookup,o);return c?ci(c.players,u=>En(u.name,u.is_team_0,Kx(u.movement,{breakdownClasses:r()}))):""},renderFocusedPlayerStats(o,l,c){const u=Sn(c,l,o);return u?Kx(u.movement,{breakdownClasses:r()}):""},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Movement breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";for(const h of[{className:"speed_band",label:"Speed band"},{className:"height_band",label:"Height band"}]){const f=document.createElement("label");f.className="toggle";const p=document.createElement("input");p.type="checkbox",p.dataset.breakdownClass=h.className,p.addEventListener("change",()=>{p.checked?i.add(h.className):i.delete(h.className),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const g=document.createElement("span");g.textContent=h.label,f.append(p,g),d.append(f)}e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=r();t.textContent=o.length>0?o.map(l=>({speed_band:"Speed band",height_band:"Height band"})[l]).join(" + "):"Total only"}}}function r(){return s.filter(o=>i.has(o))}}function nW(){return ui({id:"powerslide",label:"Powerslide",select:n=>n.powerslide,render:n=>b$(n),getTimelineEvents(n){return G4(n.statsTimeline,n.replay)}})}function iW(){return ui({id:"rotation",label:"Rotation",select:n=>n.rotation,render:n=>h$(n)})}function sW(){return ui({id:"demo",label:"Demo",select:n=>n.demo,render:n=>w$(n)})}function aW(){return ui({id:"bump",label:"Bump",select:n=>n.bump,render:n=>S$(n),getTimelineEvents(n){return q4(n.statsTimeline,n.replay)}})}function rW(){let n=null,e=1;return{id:_1,label:"Relative Positioning",setup(t){e=t.fieldScale,n=new PV(t.player.sceneState.replayRoot,t.replay,e)},teardown(){n?.dispose(),n=null},onBeforeRender(t){n?.update(t,e)},renderStats(t,i){const s=Ht(i.statsFrameLookup,t);return s?ci(s.players,a=>{const r=wG(i.replay,Ct(a.player_id),t),o=xG[r];return En(a.name,a.is_team_0,Jx(a.positioning),`${o}`)}):""},renderFocusedPlayerStats(t,i,s){const a=Sn(s,i,t);return a?Jx(a.positioning):""}}}function oW(){return{id:"absolute-positioning",label:"Absolute Positioning",setup(n){jx.acquire(n)},teardown(){jx.release()},onBeforeRender(){},getTimelineRanges(n){return bG(n.statsTimeline,n.replay)},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,Qx(i.positioning))):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?Qx(i.positioning):""}}}function lW(n,e={}){return[N$(),U$(),B$(),z$(),H$(),X$(),q$(),K$(),SG(n),TG(),MG(),EG(),CG(),rW(),oW(),iW(),Z$(),j$(),J$(),Q$(),O$(n),eW(),Y$(),$$(),W$(),G$(),F$(n,e.boostPickupFilters),V$(),tW(n),nW(),sW(),aW()]}const cW=new Set(["player_id","name","is_team_0"]),uW=["is_last_","time_since_last_","frames_since_last_"];function dW(n){return n===null||typeof n=="number"||typeof n=="string"||typeof n=="boolean"||Array.isArray(n)}function hW(n,e){let t=n;for(const i of e){if(!t||typeof t!="object"||Array.isArray(t))return;t=t[i]}return t}function fW(n){return n==null?"--":typeof n=="number"?Number.isFinite(n)?Number.isInteger(n)?`${n}`:`${Number(n.toFixed(3))}`:"--":typeof n=="boolean"?n?"true":"false":Array.isArray(n)?n.length===0?"[]":JSON.stringify(n):`${n}`}function pW(n,e){if(uW.some(a=>n.startsWith(a)))return!0;const t=n.match(/^last_(.+)_time$/),i=n.match(/^last_(.+)_frame$/),s=t?.[1]??i?.[1];return s?`is_last_${s}`in e||`time_since_last_${s}`in e||`frames_since_last_${s}`in e:!1}function $_(n,e,t,i){if(!n||typeof n!="object"||Array.isArray(n))return;const s=n;for(const[a,r]of Object.entries(s)){if(e==="player"&&t.length===0&&cW.has(a)||pW(a,s))continue;const o=[...t,a];if(dW(r)){const l=`${e}:${o.join(".")}`;i.push({id:l,label:o.join("."),category:o[0]??e,scope:e,path:o,read(c){return hW(c,o)},format:fW});continue}$_(r,e,o,i)}}function mW(n){const e=new Set;return n.filter(t=>e.has(t.id)?!1:(e.add(t.id),!0))}function T1(n,e){const t=[];return n&&$_(n,"player",[],t),e&&$_(e,"team",[],t),mW(t).sort((i,s)=>i.label.localeCompare(s.label))}function _W(){return T1(cy(),Bo())}function zo(n){return n?T1(n.players[0]??cy(),n.team_zero??n.team_one??Bo()):_W()}function M1(n){return n.toLowerCase().replace(/[_/.-]+/g," ").replace(/\s+/g," ").trim()}function gW(n){return M1(n).split(" ").filter(Boolean)}function yW(n,e){const t=gW(e);if(t.length===0)return 0;const i=M1([n.scope,n.category,n.label,n.id,...n.path].join(" "));let s=0;for(const a of t){const r=i.indexOf(a);if(r<0)return null;s+=r}return s+i.length/1e3}function vW(n,e){return n.map((t,i)=>({definition:t,index:i,score:yW(t,e)})).filter(t=>t.score!==null).sort((t,i)=>t.score-i.score||t.index-i.index).map(t=>t.definition)}function ds(n){if(!Number.isFinite(n))return"--";const e=Math.floor(Math.max(0,n)/60),t=Math.max(0,n)-e*60;return`${e}:${t.toFixed(1).padStart(4,"0")}`}class bW{constructor(e){this.options=e}statsWindows=new Map;nextStatsWindowId=1;getConfigs(){return[...this.statsWindows.values()].map(e=>({id:e.id,kind:e.kind,placement:this.options.readWindowPlacement(e.element),playerId:e.playerId,team:e.team,entries:e.entries.map(t=>({statId:t.statId,targetId:t.targetId}))}))}clear(){for(const e of this.statsWindows.values())e.element.remove();this.statsWindows.clear(),this.nextStatsWindowId=1}replaceFromConfig(e){this.clear();for(const t of e)this.create(t.kind,t)}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0,t={}){for(const i of this.statsWindows.values())t.preserveOpenPickers&&(i.pickerOpen||i.element.contains(document.activeElement))||this.renderStatsWindow(i,e)}create(e,t){const i=t?.id??`stats-${this.nextStatsWindowId++}`,s=Number.parseInt(i.replace(/^stats-/,""),10);Number.isFinite(s)&&(this.nextStatsWindowId=Math.max(this.nextStatsWindowId,s+1));const{x:a,y:r}=this.getStatsWindowDefaultPosition(),o=document.createElement("section");o.className="stats-window",o.dataset.windowId=i,o.style.setProperty("--window-x",`${a}px`),o.style.setProperty("--window-y",`${r}px`),t&&this.options.applyWindowPlacement(o,t.placement);const l=document.createElement("header");l.className="stats-window-header";const c=document.createElement("div");c.className="stats-window-actions";const u=document.createElement("button");if(u.type="button",u.className="stats-window-action",u.textContent="Hide",c.append(u),this.hasStatsWindowScopeSelector(e))l.classList.add("stats-window-header-actions-only"),l.append(c);else{const f=document.createElement("h2");f.textContent=this.getStatsWindowTitle(e),l.append(f,c)}const d=document.createElement("div");d.className="stats-window-body",o.append(l,d),this.options.layer.append(o);const h={id:i,kind:e,entries:t?.entries.map(f=>({key:`${i}:${f.statId}:${f.targetId??"scope"}`,statId:f.statId,targetId:f.targetId}))??[],playerId:t?.playerId??this.options.getReplayPlayer()?.replay.players[0]?.id??null,team:t?.team??"blue",pickerOpen:!1,query:"",element:o,body:d};return u.addEventListener("click",()=>{o.hidden=!0,this.options.requestConfigSync()}),this.statsWindows.set(i,h),t||this.options.bringWindowToFront(o),this.options.setLauncherOpen(!1),this.renderStatsWindow(h),this.options.requestConfigSync(),h}getStatById(e){return this.options.getStatRegistry().find(t=>t.id===e)??null}getCurrentStatsFrame(e){const t=this.options.getStatsFrameLookup();return t?Ht(t,e):null}getTeamSnapshot(e,t){return t==="blue"?e.team_zero??null:e.team_one??null}getTeamLabel(e){return e==="blue"?"Blue":"Orange"}getPlayerTeamClass(e){const t=this.options.getReplayPlayer()?.replay.players.find(i=>i.id===e);return t?ca(t.isTeamZero):null}getTeamScopeClass(e){return ca(e==="blue")}appendGroupedPlayerOptions(e,t){const i=this.options.getReplayPlayer()?.replay.players??[];for(const s of["blue","orange"]){const a=i.filter(o=>o.isTeamZero===(s==="blue"));if(a.length===0)continue;const r=document.createElement("optgroup");r.label=`${this.getTeamLabel(s)} team`;for(const o of a)r.append(new Option(o.name,o.id,o.id===t,o.id===t));e.append(r)}}getStatsWindowScopeTeamClass(e){return e.kind==="player"?this.getPlayerTeamClass(e.playerId):e.kind==="team"?this.getTeamScopeClass(e.team??"blue"):null}getStatTargetTeamClass(e,t){return e.scope==="player"?this.getPlayerTeamClass(t):this.getTeamScopeClass(t==="orange"?"orange":"blue")}getStatsWindowTitle(e){switch(e){case"player":return"Player stats";case"team":return"Team stats";case"all-players":return"All players stats";case"all-teams":return"All teams stats";case"kickoff-overview":return"Kickoff details";case"goals-overview":return"Goal labels";case"ad-hoc":return"Ad hoc stats"}}hasStatsWindowScopeSelector(e){return e==="player"||e==="team"}hasStatsWindowStatPicker(e){return e!=="goals-overview"&&e!=="kickoff-overview"}getStatsWindowAllowedScope(e){switch(e){case"player":case"all-players":return"player";case"team":case"all-teams":return"team";case"kickoff-overview":return null;case"goals-overview":return null;case"ad-hoc":return null}}getStatsWindowDefaultPosition(){const e=this.statsWindows.size*18;return{x:Math.max(12,Math.min(window.innerWidth-360,96+e)),y:Math.max(64,Math.min(window.innerHeight-240,96+e))}}renderStatsWindow(e,t=this.options.getReplayPlayer()?.getState().frameIndex??0){const i=document.activeElement,s=i instanceof HTMLInputElement&&i.dataset.statsWindowSearch===e.id,a=s?i.selectionStart:null,r=s?i.selectionEnd:null,o=s?i.selectionDirection:null;if(e.body.replaceChildren(),this.renderStatsWindowScope(e),this.hasStatsWindowStatPicker(e.kind)&&(this.renderStatsWindowAddControl(e),this.renderStatsWindowPicker(e)),this.renderStatsWindowEntries(e,t),s){const l=e.body.querySelector(`input[data-stats-window-search="${e.id}"]`);l?.focus({preventScroll:!0}),l&&a!==null&&r!==null&&l.setSelectionRange(a,r,o??"none")}}renderStatsWindowScope(e){if(e.kind!=="player"&&e.kind!=="team")return;const t=document.createElement("div");t.className="stats-window-scope-row";const i=document.createElement("select");i.className="stats-window-scope-select";const s=this.getStatsWindowScopeTeamClass(e);s&&i.classList.add(s),i.setAttribute("aria-label",e.kind==="player"?"Player stats target":"Team stats target"),e.kind==="player"?(this.appendGroupedPlayerOptions(i,e.playerId),i.value=e.playerId??"",i.addEventListener("change",()=>{e.playerId=i.value||null,this.renderStatsWindow(e),this.options.requestConfigSync()})):(i.append(new Option("Blue","blue",e.team==="blue",e.team==="blue"),new Option("Orange","orange",e.team==="orange",e.team==="orange")),i.value=e.team??"blue",i.addEventListener("change",()=>{e.team=i.value==="orange"?"orange":"blue",this.renderStatsWindow(e),this.options.requestConfigSync()})),t.append(i),e.body.append(t)}renderStatsWindowAddControl(e){const t=document.createElement("button");if(t.type="button",t.className="stats-window-add-button",t.textContent="+",t.title="Add stat",t.setAttribute("aria-label","Add stat"),t.setAttribute("aria-expanded",String(e.pickerOpen)),this.activateButton(t,()=>{e.pickerOpen=!e.pickerOpen,this.renderStatsWindow(e)}),this.hasStatsWindowScopeSelector(e.kind)){e.body.querySelector(".stats-window-scope-row")?.append(t);return}const i=document.createElement("div");i.className="stats-window-toolbar",i.append(t),e.body.append(i)}activateButton(e,t){let i=!1;e.addEventListener("pointerdown",s=>{e.disabled||(i=!0,s.preventDefault(),t())}),e.addEventListener("click",()=>{if(i){i=!1;return}e.disabled||t()})}renderStatsWindowPicker(e){const t=document.createElement("div");if(t.className="stats-window-picker",t.hidden=!e.pickerOpen,t.hidden){e.body.append(t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=document.createElement("input");s.type="search",s.placeholder="Search stats",s.value=e.query,s.dataset.statsWindowSearch=e.id;const a=document.createElement("div");a.className="stats-window-picker-list",s.addEventListener("input",()=>{e.query=s.value,this.renderStatsWindowPickerList(e,a,i)}),this.renderStatsWindowPickerList(e,a,i),t.append(s,a),e.body.append(t)}renderStatsWindowPickerList(e,t,i){t.replaceChildren();const s=this.options.getStatRegistry(),a=i?s.filter(l=>l.scope===i):s,r=vW(a,e.query),o=new Map;for(const l of r){const c=o.get(l.category)??[];c.push(l),o.set(l.category,c)}for(const[l,c]of o){if(c.length<2)continue;const u=document.createElement("button");u.type="button",u.className="stats-window-picker-item",u.innerHTML=`Add all ${l}${c.length}`,this.activateButton(u,()=>{for(const d of c)this.addStatToWindow(e,d);this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(u)}for(const l of r){const c=document.createElement("button");c.type="button",c.className="stats-window-picker-item",c.innerHTML=`${l.label}${l.scope}`,c.disabled=e.kind!=="ad-hoc"&&e.entries.some(u=>u.statId===l.id),this.activateButton(c,()=>{this.addStatToWindow(e,l),this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(c)}if(r.length===0){const l=document.createElement("p");l.className="stat-window-empty",l.textContent=s.length===0?"No stats available.":"No matching stats.",t.append(l)}}addStatToWindow(e,t){const i=e.kind==="ad-hoc"?this.getDefaultAdHocTargetId(t):void 0;e.entries.some(s=>s.statId===t.id&&s.targetId===i)||e.entries.push({key:`${e.id}:${t.id}:${i??"scope"}`,statId:t.id,targetId:i})}getDefaultAdHocTargetId(e){return e.scope==="player"?this.options.getReplayPlayer()?.replay.players[0]?.id??"":"blue"}removeStatFromWindow(e,t){const i=e.entries.findIndex(s=>s.key===t);i>=0&&e.entries.splice(i,1)}renderStatsWindowEntries(e,t){if(e.kind==="goals-overview"){this.renderGoalLabelsOverview(e);return}if(e.kind==="kickoff-overview"){this.renderKickoffOverview(e,t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=e.entries.map(r=>({entry:r,definition:this.getStatById(r.statId)})).filter(r=>r.definition!==null&&(!i||r.definition.scope===i));if(s.length===0){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="No stats added.",e.body.append(r);return}const a=this.getCurrentStatsFrame(t);if(!a){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="Load a replay to show stats.",e.body.append(r);return}if(e.kind==="all-players"){this.renderAllPlayersStats(e,a,s);return}if(e.kind==="all-teams"){this.renderAllTeamsStats(e,a,s);return}if(e.kind==="player"){const r=e.playerId?a.players.find(o=>Ct(o.player_id)===e.playerId)??null:null;this.renderScopedStatList(e,r,s);return}if(e.kind==="team"){this.renderScopedStatList(e,this.getTeamSnapshot(a,e.team??"blue"),s);return}e.kind==="ad-hoc"&&this.renderAdHocStats(e,a,s)}renderGoalLabelsOverview(e){const t=this.options.getStatsTimeline(),i=this.options.getReplayPlayer()?.replay??null;if(!t||!i){this.appendStatsWindowEmpty(e,"Load a replay to show goal labels.");return}const s=[...be(t,"goal_context")].sort((o,l)=>o.time-l.time),a=s.map((o,l)=>l);if(a.length===0){this.appendStatsWindowEmpty(e,"No goals loaded.");return}const r=document.createElement("div");r.className="goal-label-list";for(const o of a){const l=s[o]??null,c=[...l?.tags??[]].sort((M,C)=>M.kind.localeCompare(C.kind)||C.metadata.confidence-M.metadata.confidence),u=l?.time??0,d=l?.scorer??null,h=d?Ct(d):null,f=d?i.players.find(M=>M.id===h)?.name??h:"Unknown scorer",p=l?.scoring_team_is_team_0??null,g=document.createElement("section");g.className="goal-label-item",p!==null&&g.classList.add(ca(p));const _=document.createElement("header"),m=document.createElement("h3");m.textContent=`Goal ${o+1}`;const v=document.createElement("span");v.textContent=`${ds(u)} · ${f}`,_.append(m,v);const y=document.createElement("div");if(y.className="goal-label-tags",c.length===0){const M=document.createElement("span");M.className="goal-label-tag goal-label-tag-empty",M.textContent="Unlabeled",y.append(M)}else for(const M of c){const C=document.createElement("span");C.className="goal-label-tag";const w=r1(M);C.textContent=`${Dn(M.kind)} ${Math.round(M.metadata.confidence*100)}%${w?` - ${w}`:""}`,y.append(C)}const b=document.createElement("div");b.className="goal-label-actions";const S=document.createElement("button");S.type="button",S.className="goal-label-watch",S.textContent="Watch",S.addEventListener("click",()=>{this.options.watchGoalReplay(u,h)});const x=document.createElement("button");x.type="button",x.textContent="Cue",x.addEventListener("click",()=>{this.options.cueGoalReplay(u)}),b.append(S,x),g.append(_,y,b),r.append(g)}e.body.append(r)}renderKickoffOverview(e,t){const i=this.options.getStatsTimeline(),s=this.options.getReplayPlayer()?.replay??null;if(!i||!s){this.appendStatsWindowEmpty(e,"Load a replay to show kickoff details.");return}const a=this.getClosestKickoffEvent(i,t);if(!a){this.appendStatsWindowEmpty(e,"No kickoff events loaded.");return}const r=a.payload.payload,o=document.createElement("section");o.className="kickoff-overview";const l=document.createElement("header");l.className="kickoff-overview-hero";const c=document.createElement("div"),u=document.createElement("h3");u.textContent=this.formatKickoffTitle(a);const d=document.createElement("span");d.textContent=`Nearest kickoff · resolved at ${ds(r.end_time)}`,c.append(u,d);const h=document.createElement("strong"),f=this.teamClassFromNullable(r.winning_team_is_team_0);h.className="kickoff-overview-victor",f&&h.classList.add(f),h.textContent=this.formatOutcome(r),l.append(c,h);const p=document.createElement("div");p.className="kickoff-overview-summary",p.append(this.renderKickoffMetric("Win strength",`${this.formatNullableNumber(r.win_strength,2)} · ${this.formatKickoffLabelValue("kickoff_win_strength",r.win_strength_band)}`),this.renderKickoffMetric("First touch",this.formatFirstTouch(r)),this.renderKickoffMetric("Advantage",this.formatAdvantage(r)),this.renderKickoffMetric("Contested",this.formatContested(r)));const g=document.createElement("div");g.className="kickoff-detail-grid",g.append(this.renderKickoffDetail("Kickoff start",ds(r.start_time)),this.renderKickoffDetail("Movement start",ds(r.movement_start_time)),this.renderKickoffDetail("Live action",r.live_action_start_time===null?"--":ds(r.live_action_start_time)),this.renderKickoffDetail("First touch",r.first_touch_time===null?"--":ds(r.first_touch_time)),this.renderKickoffDetail("Resolution",ds(r.end_time)),this.renderKickoffDetail("After first touch",this.formatSeconds(r.advantage_seconds_after_first_touch)));const _=document.createElement("div");_.className="kickoff-strategy-list",_.append(this.renderKickoffTeamStrategy("Blue",r.team_zero_taker,r.team_zero_non_takers),this.renderKickoffTeamStrategy("Orange",r.team_one_taker,r.team_one_non_takers)),o.append(l,p,g,_),e.body.append(o)}getClosestKickoffEvent(e,t){return pc(e).filter(s=>s.payload.kind==="kickoff").sort((s,a)=>{const r=this.kickoffFrameDistance(s.payload.payload,t),o=this.kickoffFrameDistance(a.payload.payload,t);return r!==o?r-o:s.payload.payload.start_frame-a.payload.payload.start_frame})[0]??null}kickoffFrameDistance(e,t){return t>=e.start_frame&&t<=e.end_frame?0:Math.min(Math.abs(t-e.start_frame),Math.abs(t-e.end_frame))}renderKickoffMetric(e,t){const i=document.createElement("div");i.className="kickoff-metric";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffDetail(e,t){const i=document.createElement("div");i.className="kickoff-detail-row";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffTeamStrategy(e,t,i){const s=document.createElement("section");s.className=`kickoff-strategy-team ${e==="Blue"?"team-blue":"team-orange"}`;const a=document.createElement("h4");a.textContent=e,s.append(a);const r=document.createElement("p");if(r.className="kickoff-strategy-line",r.textContent=t?`${this.getPlayerName(t.player)}: ${this.formatKickoffLabelValue("kickoff_approach",t.approach)} from ${this.formatKickoffLabelValue("kickoff_spawn",t.spawn_position)} (${this.formatKickoffLabelValue("taker_outcome",t.outcome)}, ${this.formatSeconds(t.time_to_ball)})`:"No taker detected",s.append(r),i.length>0){const o=document.createElement("ul");o.className="kickoff-support-list";for(const l of i){const c=document.createElement("li");c.textContent=`${this.getPlayerName(l.player)}: ${this.formatKickoffLabelValue("support_behavior",l.support_behavior)} from ${this.formatKickoffLabelValue("kickoff_spawn",l.spawn_position)}`,o.append(c)}s.append(o)}return s}formatOutcome(e){return e.winning_team_is_team_0===!0?"Blue wins":e.winning_team_is_team_0===!1?"Orange wins":e.outcome==="neutral"?"Neutral":"Unknown"}formatFirstTouch(e){if(!e.first_touch_player)return"--";const t=e.first_touch_team_is_team_0===!0?"Blue":e.first_touch_team_is_team_0===!1?"Orange":"Unknown",i=e.first_touch_time===null?"--":ds(e.first_touch_time);return`${t} · ${this.getPlayerName(e.first_touch_player)} · ${i}`}formatAdvantage(e){if(e.advantage==="no_advantage")return"No advantage";const t=e.advantage_team_is_team_0===!0?"Blue":e.advantage_team_is_team_0===!1?"Orange":"Unknown",i=e.advantage.replace(/^team_(zero|one)_/,""),s=e.advantage_player?` · ${this.getPlayerName(e.advantage_player)}`:"",a=e.advantage_time===null?"":` · ${ds(e.advantage_time)}`;return`${t} ${this.formatKickoffLabelValue("kickoff_advantage",i)}${s}${a}`}formatContested(e){return e.kickoff_possession_outcome==="contested"?"Yes":e.kickoff_possession_team_is_team_0===!0?`No · Blue ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:e.kickoff_possession_team_is_team_0===!1?`No · Orange ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:`No · ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`}formatPossessionOutcome(e){return e.endsWith("_advantage")?"advantage":e.endsWith("_possession")?"possession":this.formatKickoffLabelValue("kickoff_possession_outcome",e)}formatKickoffType(e){return this.formatKickoffLabelValue("kickoff_type",e)}formatKickoffTitle(e){const t=e.payload.payload,i=this.formatKickoffDirection(t.kickoff_direction),s=[this.formatKickoffType(t.kickoff_type),i].filter(Boolean).join(" ");return[e.meta.label,s].filter(Boolean).join(" · ")}formatKickoffDirection(e){return e==="unknown"?"":`(${this.formatKickoffLabelValue("kickoff_direction",e)})`}formatNullableNumber(e,t){return e===null||!Number.isFinite(e)?"--":e.toFixed(t)}formatSeconds(e){return e===null||!Number.isFinite(e)?"--":`${e.toFixed(2)}s`}formatLabel(e){return e.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_").replaceAll("_"," ").replace(/\b\w/g,t=>t.toUpperCase())}formatKickoffLabelValue(e,t){const i=t.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_");return e==="kickoff_advantage"?this.formatLabel(i.replace(/^blue_/,"").replace(/^orange_/,"")):e==="kickoff_possession_outcome"?this.formatLabel(i.replace(/^blue_/,"Blue ").replace(/^orange_/,"Orange ")):this.formatLabel(i)}teamClassFromNullable(e){return e===null?null:ca(e)}getPlayerName(e){const t=Ct(e);return this.options.getReplayPlayer()?.replay.players.find(i=>i.id===t)?.name??t}appendStatsWindowEmpty(e,t){const i=document.createElement("p");i.className="stat-window-empty",i.textContent=t,e.body.append(i)}renderScopedStatList(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i)s.append(this.renderStatRow(e,a,r,t?r.format(r.read(t)):"--"));e.body.append(s)}renderAllPlayersStats(e,t,i){const s=document.createElement("div");s.className="stats-window-team-list";for(const a of["blue","orange"]){const r=t.players.filter(h=>h.is_team_0===(a==="blue"));if(r.length===0)continue;const o=document.createElement("section");o.className=`stats-window-team-group ${this.getTeamScopeClass(a)}`;const l=document.createElement("header");l.className="stats-window-team-header";const c=document.createElement("h3");c.textContent=`${this.getTeamLabel(a)} team`;const u=document.createElement("span");u.textContent=`${r.length} player${r.length===1?"":"s"}`,l.append(c,u),o.append(l);const d=document.createElement("div");d.className="stats-window-entity-list";for(const h of r){const f=document.createElement("section");f.className=`stats-window-entity ${ca(h.is_team_0)}`;const p=document.createElement("h4");p.className="stats-window-entity-title",p.textContent=h.name,f.append(p);for(const{entry:g,definition:_}of i)f.append(this.renderStatRow(e,g,_,_.format(_.read(h))));d.append(f)}o.append(d),s.append(o)}e.body.append(s)}renderAllTeamsStats(e,t,i){const s=document.createElement("div");s.className="stats-window-entity-list";for(const a of["blue","orange"]){const r=this.getTeamSnapshot(t,a),o=document.createElement("section");o.className=`stats-window-entity ${this.getTeamScopeClass(a)}`;const l=document.createElement("h3");l.className="stats-window-entity-title",l.textContent=this.getTeamLabel(a),o.append(l);for(const{entry:c,definition:u}of i)o.append(this.renderStatRow(e,c,u,r?u.format(u.read(r)):"--"));s.append(o)}e.body.append(s)}renderAdHocStats(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i){const o=this.getAdHocTarget(t,r,a.targetId);s.append(this.renderStatRow(e,a,r,o?r.format(r.read(o)):"--"))}e.body.append(s)}getAdHocTarget(e,t,i){return t.scope==="player"?e.players.find(s=>Ct(s.player_id)===i)??e.players[0]??null:this.getTeamSnapshot(e,i==="orange"?"orange":"blue")}renderStatRow(e,t,i,s){const a=document.createElement("div");a.className="stats-window-stat-row";const r=document.createElement("span");if(r.className="stats-window-stat-name",r.textContent=i.label,e.kind==="ad-hoc"){const c=document.createElement("select");c.className="stats-window-stat-target";const u=this.getStatTargetTeamClass(i,t.targetId);u&&c.classList.add(u),i.scope==="player"?this.appendGroupedPlayerOptions(c,t.targetId):c.append(new Option("Blue","blue",t.targetId==="blue",t.targetId==="blue"),new Option("Orange","orange",t.targetId==="orange",t.targetId==="orange")),c.value=t.targetId??"",c.addEventListener("change",()=>{const d=c.value;if(e.entries.some(f=>f!==t&&f.statId===t.statId&&f.targetId===d)){this.renderStatsWindow(e);return}const h=e.entries.findIndex(f=>f.key===t.key);h>=0&&(e.entries[h]={key:`${e.id}:${t.statId}:${d}`,statId:t.statId,targetId:d}),this.renderStatsWindow(e),this.options.requestConfigSync()}),r.append(" ",c)}const o=document.createElement("span");o.className="stats-window-stat-value",o.textContent=s;const l=document.createElement("button");return l.type="button",l.className="stats-window-stat-remove",l.textContent="x",l.addEventListener("click",()=>{this.removeStatFromWindow(e,t.key),this.renderStatsWindow(e),this.options.requestConfigSync()}),a.append(r,o,l),a}}function xW(n){return new bW(n)}const wW=new Set(["module:dodge","module:touch","module:powerslide"]),SW=["stats-stream:"],Mh=["#3b82f6","#06b6d4","#22c55e","#a855f7","#f97316","#ef4444","#f59e0b","#ec4899"],Pf="#d1d9e0",gy=Mh[0],yy=Mh[4],TW=[{id:"core",label:"Shots, saves, assists",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="shot"||e.kind==="save"||e.kind==="assist")}},{id:"demo",label:"Demos",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="demo")}}],MW=[];function E1(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function C1(n){if(typeof n=="string"&&n.length>0)return n;if(!E1(n))return null;const[e,t]=Object.entries(n)[0]??[];return!e||t==null?null:typeof t=="string"||typeof t=="number"?`${e}:${t}`:`${e}:${JSON.stringify(t)}`}function A1(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>e.slice(0,1).toUpperCase()).join("").slice(0,3)||"E"}function EW(n){if(typeof n!="number"||!Number.isFinite(n))return null;const e=Math.abs(n)<1?2:1;return`${n.toFixed(e).replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}s`}function ji(n){return typeof n!="string"||n.length===0?null:n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function CW(n){return n==="team_zero_side"?"Blue side":n==="team_one_side"?"Orange side":n==="neutral"?"Neutral zone":ji(n)}function AW(n){const e=ji(n);return e?`${e.toLowerCase()} third`:null}function RW(n){return n==="team_zero_third"?"Blue third":n==="team_one_third"?"Orange third":n==="neutral_third"?"Neutral third":ji(n)}function PW(n){return n==="team_zero"?"Blue":n==="team_one"?"Orange":n==="neutral"?"Neutral":ji(n)}function Md(n){return E1(n.payload.payload)?n.payload.payload:{}}function R1(n){return n===!0?gy:n===!1?yy:null}function IW(n){return n==="team_zero_side"?gy:n==="team_one_side"?yy:n==="neutral"?Pf:null}function LW(n){return n==="team_zero"?gy:n==="team_one"?yy:n==="neutral"?Pf:null}function kW(n){return typeof n=="boolean"?R1(n):null}const DW={ball_half(n){return IW(Md(n).field_half)},possession(n){return LW(Md(n).possession_state)},player_possession(n){return kW(Md(n).is_team_0)}};function P1(n,e,t){return DW[n]?.(e)??R1(t)??Pf}function mi(n){return n.filter(e=>!!e).join(" | ")}function OW({event:n,playerName:e,streamLabel:t,teamLabel:i}){const s=Md(n),a=EW(s.duration);if(n.payload.kind==="ball_half"){const r=CW(s.field_half),o=s.active===!1?"Ball half inactive":r?`Ball on ${r.toLowerCase()}`:null;return mi([o??t,a])}if(n.payload.kind==="ball_third"){const r=RW(s.field_third),o=s.active===!1?"Ball third inactive":r?`Ball in ${r.toLowerCase()}`:null;return mi([o??t,a])}if(n.payload.kind==="territorial_pressure"){const r=ji(s.end_reason),o=`${i??""} territorial pressure`.trim();return mi([r?`${o} ended: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="possession"){const r=PW(s.possession_state),o=AW(s.field_third),l=r?`${r} possession`:t;return mi([l,o,a])}if(n.payload.kind==="controlled_play"){const r=e?`${e} controlled play`:t;return mi([r,a])}if(n.payload.kind==="ball_carry"){const r=e?`${e} ${t.toLowerCase()}`:t;return mi([r,a])}if(n.payload.kind==="player_activity"){const r=ji(s.state),o=e?`${e} positioning`:t;return mi([r?`${o} ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="field_third"){const r=ji(s.state),o=e?`${e} positioning`:t;return mi([r?`${o} in ${r.toLowerCase()} third`:o,a])}if(n.payload.kind==="field_half"){const r=ji(s.state),o=e?`${e} positioning`:t;return mi([r?`${o} in ${r.toLowerCase()} half`:o,a])}if(n.payload.kind==="ball_depth"){const r=ji(s.state),o=e?`${e} ball depth`:t;return mi([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="depth_role"){const r=ji(s.state),o=e?`${e} depth role`:t;return mi([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="shadow_defense"){const r=e?`${e} shadow defense`:t;return mi([r,a])}if(n.payload.kind==="rotation_role"){const r=ji(s.state),o=e?`${e} rotation`:t;return mi([r?`${o}: ${r.toLowerCase()}`:o,a])}return e?`${e} ${t.toLowerCase()}`:t}function FW(n,e,t){const i=Dn(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{const o=a.meta.timing.type==="moment"?{time:a.meta.timing.time,frame:a.meta.timing.frame}:{time:a.meta.timing.end_time,frame:a.meta.timing.end_frame},l=C1(a.meta.primary_player),c=l?s.get(l)??l:null,u=a.meta.team_is_team_0??null,d=u==null?null:u?"Blue":"Orange",h=a.meta.id||`${e}:${o.frame??o.time}:${r}`,f=P1(e,a,u);return[{id:`stats-stream:${h}`,time:n.replay.frames[o.frame??-1]?.time??o.time,frame:o.frame,kind:e,label:OW({event:a,playerName:c,streamLabel:i,teamLabel:d}),shortLabel:A1(e),playerId:l,playerName:c,isTeamZero:u,color:f}]})}function NW(n,e,t){const i=Dn(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{if(a.meta.timing.type!=="span")return[];const o={startTime:a.meta.timing.start_time,endTime:a.meta.timing.end_time,startFrame:a.meta.timing.start_frame,endFrame:a.meta.timing.end_frame},l=a.meta.team_is_team_0??null,c=l==null?null:l?"Blue":"Orange",u=C1(a.meta.primary_player),d=u?s.get(u)??u:null,h=P1(e,a,l),f=a.meta.id||`${e}:${o.startFrame??o.startTime}:${o.endFrame??o.endTime}:${r}`,p=d?`${d} ${i.toLowerCase()}`:c?`${c} ${i.toLowerCase()}`:i;let g=`stats-stream:${e}`,_=i;return a.meta.scope==="player"&&u?(g=`stats-stream:${e}:player:${u}`,_=d?`${d} ${i.toLowerCase()}`:i):a.meta.scope==="team"&&l!=null&&(g=`stats-stream:${e}:team:${l?"0":"1"}`,_=c?`${c} ${i.toLowerCase()}`:i),[{id:`stats-stream:${f}`,startTime:n.replay.frames[o.startFrame??-1]?.time??o.startTime,endTime:Math.max(n.replay.frames[o.startFrame??-1]?.time??o.startTime,n.replay.frames[o.endFrame??-1]?.time??o.endTime),lane:g,laneLabel:_,label:p,shortLabel:A1(e),isTeamZero:l,color:h}]}).sort((a,r)=>a.startTime!==r.startTime?a.startTime-r.startTime:(a.id??"").localeCompare(r.id??""))}function UW(n,e,t,i){return[...new Set([...gM,...pc(n.statsTimeline).map(a=>a.meta.stream)])].flatMap(a=>{const r=pc(n.statsTimeline).filter(u=>u.meta.stream===a);if(i.has(a)&&r.length>0)return[];const o=r.some(u=>u.meta.timing.type==="span"),l=o?NW(n,a,r):[],c=FW(n,a,r);return[{id:`stats-stream:${a}`,playlistId:`stats-stream:${a}`,timelineKey:`stats-stream:${a}`,timelineId:`stats-stream:${a}`,group:"Event streams",label:Dn(a),count:o?l.length:c.length,active:e.has(`stats-stream:${a}`),buildTimelineEvents(){return o?[]:c},buildPlaylistEvents(){return c},buildTimelineRanges:o?()=>l:void 0,setActive(u){t(`stats-stream:${a}`,u)}}]})}function BW(n){return new Set([...n.filter(e=>e.getTimelineEvents).map(e=>e.id),...l1])}function zW(){return[...l1].sort((n,e)=>Dn(n).localeCompare(Dn(e)))}function HW({ctx:n,modules:e,activeTimelineEventSourceIds:t,activeMechanicTimelineKinds:i,toggleEventSource:s,setMechanicTimelineKind:a}){if(!n)return[];const r=[];for(const o of TW){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`replay:${o.id}`,timelineKey:`events:${o.id}`,timelineId:`events:${o.id}`,group:"Replay",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of e.filter(l=>l.getTimelineEvents)){const l=o.getTimelineEvents?.(n)??[],c=l.length;r.push({id:o.id,playlistId:`module:${o.id}`,timelineKey:`module:${o.id}`,timelineId:`module:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of MW){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`extra:${o.id}`,timelineKey:`extra:${o.id}`,timelineId:`extra:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}r.push(...UW(n,t,s,BW(e)));for(const o of zW()){const l=o1[o](n.statsTimeline,n.replay),c=l.length;r.push({id:`mechanic:${o}`,playlistId:`mechanic:${o}`,timelineKey:`mechanic:${o}`,timelineId:`mechanic:${o}`,group:"Event types",label:Dn(o),count:c,active:i.has(o),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){a(o,u)}})}return r.sort((o,l)=>o.label.localeCompare(l.label))}function VW(n,e){if(!n)return[];const t=[{id:"replay:goals",group:"Replay",label:"Goals",events:n.replay.timelineEvents.filter(s=>s.kind==="goal")}],i=e.map(s=>({id:s.playlistId,group:s.group,label:s.label,events:s.buildPlaylistEvents()}));return[...t,...i]}function W_(n,e){const t=n.map(i=>i.id);return e===null?new Set(t.filter(i=>!wW.has(i)&&!SW.some(s=>i.startsWith(s)))):new Set(t.filter(i=>e.has(i)))}function GW(n,e){const t=n.playerId??null,i=t?e.findIndex(s=>s.id===t):-1;return i>=0?Mh[i%Mh.length]:n.color??Pf}function $W({sources:n,activeSourceIds:e,replayPlayers:t}){const i=W_(n,e);return n.filter(s=>i.has(s.id)).flatMap(s=>s.events.map((a,r)=>({key:`${s.id}:${a.id??`${a.kind}:${a.time}:${r}`}`,sourceId:s.id,sourceLabel:s.label,event:a,color:GW(a,t)}))).sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:(s.event.label??s.sourceLabel).localeCompare(a.event.label??a.sourceLabel))}class WW{constructor(e){this.options=e}getSources(e=this.options.getContext()){return HW({ctx:e,modules:this.options.modules,activeTimelineEventSourceIds:this.options.getActiveTimelineEventSourceIds(),activeMechanicTimelineKinds:this.options.getActiveMechanicTimelineKinds(),toggleEventSource:this.options.toggleEventSource,setMechanicTimelineKind:this.options.setMechanicTimelineKind})}countVisibleSources(e){return e.replay.timelineEvents.filter(i=>i.kind==="goal").length+this.getSources(e).filter(i=>i.active).reduce((i,s)=>i+s.count,0)}render(){const{body:e}=this.options;e.replaceChildren();const t=this.getSources();if(t.length===0){const d=document.createElement("p");d.className="stat-window-empty",d.textContent="No events loaded.",e.append(d);return}const i=document.createElement("div");i.className="mechanics-actions";const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.addEventListener("click",()=>{for(const d of t)d.setActive(!0);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const a=document.createElement("span");a.textContent="All events";const r=document.createElement("strong");r.textContent=`${t.length}`,s.append(a,r);const o=document.createElement("button");o.type="button",o.className="module-summary-item",o.addEventListener("click",()=>{for(const d of t)d.setActive(!1);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const l=document.createElement("span");l.textContent="No events";const c=document.createElement("strong");c.textContent="Off",o.append(l,c),i.append(s,o),e.append(i);const u=this.renderSourceList(t);u&&e.append(u)}renderSourceList(e){if(e.length===0)return null;const t=document.createElement("div");t.className="module-list mechanics-list mechanics-event-list",t.style.setProperty("--event-source-columns",`${XW(e.length)}`);for(const i of e){const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.dataset.active=i.active?"true":"false",s.setAttribute("aria-pressed",i.active?"true":"false"),s.addEventListener("click",()=>{i.setActive(!i.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderTimelineEventCount()});const a=document.createElement("span");a.textContent=i.label;const r=document.createElement("strong");r.textContent=`${i.active?"On":"Off"} ${i.count}`,s.append(a,r),t.append(s)}return t}}function XW(n){return window.innerWidth<640?1:window.innerWidth<900?n>=7?2:1:n>=13?3:n>=7?2:1}function KW(n){return new WW(n)}const qW=new Set(["ceiling-shot","fifty-fifty","ball_half",_1,"absolute-positioning","dodge","speed-flip","touch"]),uw="touch";class YW{constructor(e){this.options=e}renderSummary(){const{summary:e}=this.options.elements;e.replaceChildren();const t=this.options.getTimelineSources(),i=t.map(o=>this.renderTimelineSourceToggle(o)),s=[],a=[],r=this.options.getContext();for(const o of this.options.modules){const l=qW.has(o.id);!o.getTimelineEvents&&!o.getTimelineRanges&&!l||(t.length===0&&o.getTimelineEvents&&i.push(this.renderCapabilityToggle(o.id,Lm(o,"events"),"events")),o.getTimelineRanges&&s.push(this.renderCapabilityToggle(o.id,Lm(o,"ranges"),"ranges",r?o.getTimelineRanges(r).length:void 0)),l&&a.push(this.renderCapabilityToggle(o.id,Lm(o,"effects"),"effects")))}a.push(this.renderBoostPickupAnimationToggle()),e.append(Im("Timeline markers",i),Im("Timeline ranges",s),Im("In-game visualizations",a))}renderSettings(){const{settings:e}=this.options.elements;e.replaceChildren();const t=this.options.getContext(),i=this.options.getActiveModules().filter(s=>s.id!=="boost"&&s.id!==uw).map(s=>s.renderSettings?.(t)??null).filter(s=>s instanceof HTMLElement);if(i.length===0){e.hidden=!0,this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow();return}e.hidden=!1,e.append(...i),this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow()}renderBoostPickupAnimationToggle(){const e=this.options.getBoostPickupAnimationEnabled(),t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e?"true":"false",t.setAttribute("aria-pressed",e?"true":"false"),t.addEventListener("click",this.options.toggleBoostPickupAnimation);const i=document.createElement("span");i.textContent="Boost pickup animation";const s=document.createElement("strong");return s.textContent=e?"On":"Off",t.append(i,s),t}renderCapabilityToggle(e,t,i,s){const r=this.options.getActiveCapabilityIds(i).has(e),o=document.createElement("button");o.type="button",o.className="module-summary-item",o.dataset.active=r?"true":"false",o.setAttribute("aria-pressed",r?"true":"false"),o.addEventListener("click",()=>{this.options.toggleCapability(e,i,!this.options.getActiveCapabilityIds(i).has(e))});const l=document.createElement("span");l.textContent=t;const c=document.createElement("strong");return c.textContent=dw(r,s),o.append(l,c),o}renderTimelineSourceToggle(e){const t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e.active?"true":"false",t.setAttribute("aria-pressed",e.active?"true":"false"),t.addEventListener("click",()=>{e.setActive(!e.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync(),this.renderSummary()});const i=document.createElement("span");i.textContent=jW(e);const s=document.createElement("strong");return s.textContent=dw(e.active,e.count),t.append(i,s),t}renderBoostPickupFiltersWindow(){const e=this.options.getContext(),t=this.options.boostPickupFilters.renderSettings(e,{showHeader:!1});this.options.elements.boostPickupFilters.replaceChildren(t)}renderTouchControlsWindow(){const e=this.options.getContext(),i=this.options.modules.find(s=>s.id===uw)?.renderSettings?.(e)??null;this.options.elements.touchControls.replaceChildren(),i instanceof HTMLElement&&this.options.elements.touchControls.append(i)}}function Im(n,e){const t=document.createElement("section");t.className="module-summary-group";const i=document.createElement("h3");i.textContent=n;const s=document.createElement("div");return s.className="module-list",s.append(...e),t.append(i,s),t}function dw(n,e){const t=n?"On":"Off";return e==null?t:`${t} ${e}`}function jW(n){return n.group==="Replay"?n.label:`${n.label} events`}function Lm(n,e){const t={"absolute-positioning:ranges":"Position zones","backboard:events":"Backboard","ball-carry:events":"Ball carry","boost:ranges":"Boost pickup timeline","bump:events":"Bump","ceiling-shot:events":"Ceiling shot","demo:events":"Demo","dodge-reset:events":"Dodge refresh","double-tap:events":"Double tap","fifty-fifty:events":"50/50","fifty-fifty:ranges":"50/50","dodge:events":"Dodge","half-flip:events":"Half flip","possession:ranges":"Possession","powerslide:events":"Powerslide","powerslide:ranges":"Powerslide","ball_half:ranges":"Half control","ball_third:ranges":"Third control","rush:ranges":"Rush","speed-flip:events":"Speed flip","touch:events":"Touch","wavedash:events":"Wavedash"},i={"absolute-positioning":"Position zones","ceiling-shot":"Ceiling shot labels","fifty-fifty":"50/50 labels",dodge:"Dodge impulse arrows",ball_half:"Half control","relative-positioning":"Player roles","speed-flip":"Speed flip labels",touch:"Touch labels"};return e==="effects"?i[n.id]??n.label:t[`${n.id}:${e}`]??`${n.label} timeline`}function ZW(n){return new YW(n)}var yn=Uint8Array,vi=Uint16Array,vy=Int32Array,If=new yn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Lf=new yn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),X_=new yn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),I1=function(n,e){for(var t=new vi(31),i=0;i<31;++i)t[i]=e+=1<>1|(Bt&21845)<<1;aa=(aa&52428)>>2|(aa&13107)<<2,aa=(aa&61680)>>4|(aa&3855)<<4,q_[Bt]=((aa&65280)>>8|(aa&255)<<8)>>1}var vs=(function(n,e,t){for(var i=n.length,s=0,a=new vi(e);s>l]=c}else for(o=new vi(i),s=0;s>15-n[s]);return o}),va=new yn(288);for(var Bt=0;Bt<144;++Bt)va[Bt]=8;for(var Bt=144;Bt<256;++Bt)va[Bt]=9;for(var Bt=256;Bt<280;++Bt)va[Bt]=7;for(var Bt=280;Bt<288;++Bt)va[Bt]=8;var _c=new yn(32);for(var Bt=0;Bt<32;++Bt)_c[Bt]=5;var QW=vs(va,9,0),e8=vs(va,9,1),t8=vs(_c,5,0),n8=vs(_c,5,1),km=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Vi=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},Dm=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},by=function(n){return(n+7)/8|0},kf=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new yn(n.subarray(e,t))},i8=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],ps=function(n,e,t){var i=new Error(e||i8[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,ps),!t)throw i;return i},s8=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new yn(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new yn(s*3));var c=function(we){var Re=t.length;if(we>Re){var k=new yn(Math.max(Re*2,we));k.set(t),t=k}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Vi(n,d,1);var v=Vi(n,d+1,3);if(d+=3,v)if(v==1)f=e8,p=n8,g=9,_=5;else if(v==2){var x=Vi(n,d,31)+257,M=Vi(n,d+10,15)+4,C=x+Vi(n,d+5,31)+1;d+=14;for(var w=new yn(C),E=new yn(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Vi(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Vi(n,d,7),d+=3):y==18&&(W=11+Vi(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ie=w.subarray(x);g=km(H),_=km(ie),f=vs(H,g,1),p=vs(ie,_,1)}else ps(1);else{var y=by(d)+4,b=n[y-4]|n[y-3]<<8,S=y+b;if(S>s){l&&ps(0);break}o&&c(h+b),t.set(n.subarray(y,S),h),e.b=h+=b,e.p=d=S*8,e.f=u;continue}if(d>m){l&&ps(0);break}}o&&c(h+131072);for(var le=(1<>4;if(d+=F&15,d>m){l&&ps(0);break}if(F||ps(2),De<256)t[h++]=De;else if(De==256){Le=d,f=null;break}else{var Ke=De-254;if(De>264){var R=De-257,Oe=If[R];Ke=Vi(n,d,(1<>4;Z||ps(3),d+=Z&15;var ie=JW[ae];if(ae>3){var Oe=Lf[ae];ie+=Dm(n,d)&(1<m){l&&ps(0);break}o&&c(h+131072);var Te=h+Ke;if(h>8},wl=function(n,e,t){t<<=e&7;var i=e/8|0;n[i]|=t,n[i+1]|=t>>8,n[i+2]|=t>>16},Om=function(n,e){for(var t=[],i=0;ih&&(h=a[i].s);var f=new vi(h+1),p=Y_(t[u-1],f,0);if(p>e){var i=0,g=0,_=p-e,m=1<<_;for(a.sort(function(x,M){return f[M.s]-f[x.s]||x.f-M.f});ie)g+=m-(1<>=_;g>0;){var y=a[i].s;f[y]=0&&g;--i){var b=a[i].s;f[b]==e&&(--f[b],++g)}p=e}return{t:new yn(f),l:p}},Y_=function(n,e,t){return n.s==-1?Math.max(Y_(n.l,e,t+1),Y_(n.r,e,t+1)):e[n.s]=t},fw=function(n){for(var e=n.length;e&&!n[--e];);for(var t=new vi(++e),i=0,s=n[0],a=1,r=function(l){t[i++]=l},o=1;o<=e;++o)if(n[o]==s&&o!=e)++a;else{if(!s&&a>2){for(;a>138;a-=138)r(32754);a>2&&(r(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(r(s),--a;a>6;a-=6)r(8304);a>2&&(r(a-3<<5|8208),a=0)}for(;a--;)r(s);a=1,s=n[o]}return{c:t.subarray(0,i),n:e}},Sl=function(n,e){for(var t=0,i=0;i>8,n[s+2]=n[s]^255,n[s+3]=n[s+1]^255;for(var a=0;a4&&!E[X_[L-1]];--L);var O=c+5<<3,D=Sl(s,va)+Sl(a,_c)+r,U=Sl(s,h)+Sl(a,g)+r+14+3*L+Sl(M,E)+2*M[16]+3*M[17]+7*M[18];if(l>=0&&O<=D&&O<=U)return O1(e,u,n.subarray(l,l+c));var F,W,H,ie;if(ks(e,u,1+(U15&&(ks(e,u,De[C]>>5&127),u+=De[C]>>12)}}else F=QW,W=va,H=t8,ie=_c;for(var C=0;C255){var Ke=Oe>>18&31;wl(e,u,F[Ke+257]),u+=W[Ke+257],Ke>7&&(ks(e,u,Oe>>23&31),u+=If[Ke]);var Z=Oe&31;wl(e,u,H[Z]),u+=ie[Z],Z>3&&(wl(e,u,Oe>>5&8191),u+=Lf[Z])}else wl(e,u,F[Oe]),u+=W[Oe]}return wl(e,u,F[256]),u+W[256]},a8=new vy([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),F1=new yn(0),r8=function(n,e,t,i,s,a){var r=a.z||n.length,o=new yn(i+r+5*(1+Math.ceil(r/7e3))+s),l=o.subarray(i,o.length-s),c=a.l,u=(a.r||0)&7;if(e){u&&(l[0]=a.r>>3);for(var d=a8[e-1],h=d>>13,f=d&8191,p=(1<7e3||E>24576)&&(F>423||!c)){u=pw(n,l,0,b,S,x,C,E,L,w-L,u),E=M=C=0,L=w;for(var W=0;W<286;++W)S[W]=0;for(var W=0;W<30;++W)x[W]=0}var H=2,ie=0,le=f,me=D-U&32767;if(F>2&&O==y(w-me))for(var Le=Math.min(h,F)-1,De=Math.min(32767,w),Ke=Math.min(258,F);me<=De&&--le&&D!=U;){if(n[w+H]==n[w+H-me]){for(var Oe=0;OeH){if(H=Oe,ie=me,Oe>Le)break;for(var Z=Math.min(me,Oe-2),ae=0,W=0;Wae&&(ae=se,U=Te)}}}D=U,U=g[D],me+=D-U&32767}if(ie){b[E++]=268435456|K_[H]<<18|hw[ie];var we=K_[H]&31,Re=hw[ie]&31;C+=If[we]+Lf[Re],++S[257+we],++x[Re],R=w+H,++M}else b[E++]=n[w],++S[n[w]]}}for(w=Math.max(w,R);w=r&&(l[u/8|0]=c,k=r),u=O1(l,u+1,n.subarray(w,k))}a.i=r}return kf(o,0,i+by(u)+s)},o8=function(n,e,t,i,s){if(!s&&(s={l:1},e.dictionary)){var a=e.dictionary.subarray(-32768),r=new yn(a.length+n.length);r.set(a),r.set(n,a.length),n=r,s.w=a.length}return r8(n,e.level==null?6:e.level,e.mem==null?s.l?Math.ceil(Math.max(8,Math.min(13,Math.log(n.length)))*1.5):20:12+e.mem,t,i,s)};function l8(n,e){return o8(n,e||{},0,0)}function N1(n,e){return s8(n,{i:2},e,e)}var mw=typeof TextEncoder<"u"&&new TextEncoder,j_=typeof TextDecoder<"u"&&new TextDecoder,c8=0;try{j_.decode(F1,{stream:!0}),c8=1}catch{}var u8=function(n){for(var e="",t=0;;){var i=n[t++],s=(i>127)+(i>223)+(i>239);if(t+s>n.length)return{s:e,r:kf(n,t-1)};s?s==3?(i=((i&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,e+=String.fromCharCode(55296|i>>10,56320|i&1023)):s&1?e+=String.fromCharCode((i&31)<<6|n[t++]&63):e+=String.fromCharCode((i&15)<<12|(n[t++]&63)<<6|n[t++]&63):e+=String.fromCharCode(i)}};function d8(n,e){var t;if(mw)return mw.encode(n);for(var i=n.length,s=new yn(n.length+(n.length>>1)),a=0,r=function(c){s[a++]=c},t=0;ts.length){var o=new yn(a+8+(i-t<<1));o.set(s),s=o}var l=n.charCodeAt(t);l<128||e?r(l):l<2048?(r(192|l>>6),r(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|n.charCodeAt(++t)&1023,r(240|l>>18),r(128|l>>12&63),r(128|l>>6&63),r(128|l&63)):(r(224|l>>12),r(128|l>>6&63),r(128|l&63))}return kf(s,0,a)}function U1(n,e){var t;if(j_)return j_.decode(n);var i=u8(n),s=i.s,t=i.r;return t.length&&ps(8),s}const Eh=1,Z_="cfg",_w="cfgDebug";function h8(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"")}function f8(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a!Di(e)||!A8(e.id)?null:{id:e.id,placement:H1(e.placement)}).filter(e=>e!==null):[]}function E8(n){return Array.isArray(n)?n.map(e=>!Di(e)||typeof e.id!="string"||!R8(e.kind)?null:{id:e.id,kind:e.kind,placement:H1(e.placement),playerId:V1(e.playerId)??null,team:e.team==="orange"?"orange":e.team==="blue"?"blue":null,entries:C8(e.entries)}).filter(e=>e!==null):[]}function C8(n){return Array.isArray(n)?n.map(e=>!Di(e)||typeof e.statId!="string"?null:{statId:e.statId,targetId:typeof e.targetId=="string"?e.targetId:void 0}).filter(e=>e!==null):[]}function H1(n){const e=Di(n)?n:{},t=Di(e.viewport)?e.viewport:{};return{x:Ln(e.x)??8,y:Ln(e.y)??8,viewport:{width:Ch(t.width)??1,height:Ch(t.height)??1},zIndex:Ln(e.zIndex),visible:ti(e.visible)??!0}}function A8(n){return n==="camera"||n==="scoreboard"||n==="playback"||n==="recording"||n==="mechanics"||n==="event-playlist"||n==="mechanics-review"||n==="replay-loading"||n==="boost-pickups"||n==="touch-controls"||n==="touch-legend"||n==="shot-visualization"||n==="missed-events"}function R8(n){return n==="player"||n==="team"||n==="all-players"||n==="all-teams"||n==="kickoff-overview"||n==="goals-overview"||n==="ad-hoc"}function Di(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ln(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function Ch(n){const e=Ln(n);return e!==void 0&&e>0?e:void 0}function ti(n){return typeof n=="boolean"?n:void 0}function V1(n){return n===null?null:typeof n=="string"?n:void 0}function Tl(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function gw(n,e,t){return Math.min(t,Math.max(e,n))}const P8=["camera","scoreboard","playback","recording","mechanics","event-playlist","mechanics-review","replay-loading","boost-pickups","touch-controls","touch-legend","shot-visualization","missed-events"];class I8{constructor(e){this.options=e}nextZIndex=30;reset(){this.nextZIndex=30}bringToFront(e){e.style.zIndex=`${this.nextZIndex++}`}show(e){const t=this.mustWindow(e);t.hidden=!1,this.bringToFront(t),this.options.requestConfigSync()}toggle(e){const t=this.mustWindow(e);t.hidden=!t.hidden,t.hidden||this.bringToFront(t),this.options.requestConfigSync()}hide(e){const t=this.mustWindow(e);t.hidden=!0,this.options.requestConfigSync()}readPlacement(e){const t=Number.parseInt(e.style.zIndex,10);return{x:this.readCoordinate(e,"--window-x"),y:this.readCoordinate(e,"--window-y"),viewport:yw(),zIndex:Number.isFinite(t)?t:void 0,visible:!e.hidden}}applyPlacement(e,t){const i=y8(t,yw());e.style.setProperty("--window-x",`${i.x}px`),e.style.setProperty("--window-y",`${i.y}px`),e.hidden=!t.visible,t.zIndex!==void 0&&(e.style.zIndex=`${t.zIndex}`,this.nextZIndex=Math.max(this.nextZIndex,t.zIndex+1))}getSingletonConfigs(){const e=[],t=this.options.getRoot();for(const i of P8){const s=t.querySelector(`[data-window-id="${i}"]`);s&&e.push({id:i,placement:this.readPlacement(s)})}return e}applySingletonConfigs(e){const t=this.options.getRoot();for(const i of e){const s=t.querySelector(`[data-window-id="${i.id}"]`);s&&this.applyPlacement(s,i.placement)}}installDragging(e,t){e.addEventListener("pointerdown",i=>{if(!(i.target instanceof HTMLElement)||L8(i.target))return;const s=i.target.closest("[data-window-id]");if(!s||s.hidden)return;this.bringToFront(s);const a=i.clientX,r=i.clientY,o=s.getBoundingClientRect(),l=i.pointerId;s.setPointerCapture(l),i.preventDefault();const c=d=>{const h=Math.max(8,Math.min(window.innerWidth-120,o.left+d.clientX-a)),f=Math.max(8,Math.min(window.innerHeight-100,o.top+d.clientY-r));s.style.setProperty("--window-x",`${h}px`),s.style.setProperty("--window-y",`${f}px`)},u=()=>{s.releasePointerCapture(l),s.removeEventListener("pointermove",c),s.removeEventListener("pointerup",u),s.removeEventListener("pointercancel",u),this.options.requestConfigSync()};s.addEventListener("pointermove",c),s.addEventListener("pointerup",u),s.addEventListener("pointercancel",u)},{signal:t})}mustWindow(e){const t=this.options.getRoot().querySelector(`[data-window-id="${e}"]`);if(!t)throw new Error(`Missing window for id: ${e}`);return t}readCoordinate(e,t){const i=e.style.getPropertyValue(t).trim(),s=getComputedStyle(e).getPropertyValue(t).trim(),a=i||s,r=Number.parseFloat(a);if(Number.isFinite(r))return r;const o=e.getBoundingClientRect();return t==="--window-y"?o.top:o.left}}function yw(){return{width:Math.max(1,window.innerWidth),height:Math.max(1,window.innerHeight)}}function L8(n){return n instanceof Element&&!!n.closest("button, input, select, textarea, option, label, a, [data-no-drag]")}function k8(n){return new I8(n)}class D8{constructor(e){this.options=e}activeSourceIds=null;autoFollow=!0;lastActiveKey=null;activeItem=null;renderedItems=[];reset(){this.activeSourceIds=null,this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[]}render(){this.options.body.replaceChildren(),this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[];const e=this.options.getSources();if(e.length===0){const _=document.createElement("p");_.className="stat-window-empty",_.textContent=this.options.getReplayPlayer()?"No events loaded.":"Load a replay to see events.",this.options.body.append(_);return}const t=W_(e,this.activeSourceIds),i=$W({sources:e,activeSourceIds:this.activeSourceIds,replayPlayers:this.options.getReplayPlayer()?.replay.players??[]}),s=document.createElement("div");s.className="event-playlist-toolbar";const a=document.createElement("details");a.className="event-playlist-filter",a.dataset.noDrag="true";const r=document.createElement("summary");r.textContent=`Filters ${t.size}/${e.length}`,a.append(r);const o=document.createElement("div");o.className="event-playlist-filter-panel";const l=document.createElement("div");l.className="event-playlist-filter-actions";const c=document.createElement("button");c.type="button",c.textContent="All",c.addEventListener("click",()=>{this.activeSourceIds=new Set(e.map(m=>m.id)),this.lastActiveKey=null,this.render();const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_)});const u=document.createElement("button");u.type="button",u.textContent="None",u.addEventListener("click",()=>{this.activeSourceIds=new Set,this.lastActiveKey=null,this.render()}),l.append(c,u),o.append(l);const d=new Map;for(const _ of e){const m=d.get(_.group)??[];m.push(_),d.set(_.group,m)}for(const[_,m]of d){const v=document.createElement("section");v.className="event-playlist-filter-group";const y=document.createElement("h3");y.textContent=_,v.append(y);for(const b of m){const S=document.createElement("label");S.className="toggle event-playlist-filter-option";const x=document.createElement("input");x.type="checkbox",x.checked=t.has(b.id),x.addEventListener("change",()=>{this.setSourceSelection(e,C=>{x.checked?C.add(b.id):C.delete(b.id)})});const M=document.createElement("span");M.textContent=`${b.label} (${b.events.length})`,S.append(x,M),v.append(S)}o.append(v)}a.append(o);const h=document.createElement("label");h.className="toggle event-playlist-follow";const f=document.createElement("input");f.type="checkbox",f.checked=this.autoFollow,f.addEventListener("change",()=>{this.autoFollow=f.checked;const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_,{forceScroll:!0})});const p=document.createElement("span");p.textContent="Auto-follow",h.append(f,p),s.append(a,h);const g=document.createElement("div");if(g.className="event-playlist-list",g.dataset.noDrag="true",i.length===0){const _=document.createElement("p");_.className="stat-window-empty",t.size===0?_.textContent="No event types selected.":_.textContent="No events in selected event types.",g.append(_)}else for(const _ of i){const m=document.createElement("button");m.type="button",m.className="event-playlist-item",m.dataset.eventKey=_.key,m.dataset.eventTime=`${_.event.time}`,m.style.setProperty("--event-color",_.color),Number.isFinite(_.event.time)&&this.renderedItems.push({key:_.key,time:_.event.time,element:m}),m.addEventListener("click",()=>{this.options.cueTimelineEvent(_.event)});const v=document.createElement("span");v.className="event-playlist-time",v.textContent=this.options.formatTime(_.event.time);const y=document.createElement("span");y.className="event-playlist-main";const b=document.createElement("strong");b.textContent=_.event.label??_.sourceLabel;const S=document.createElement("span");S.textContent=[_.event.playerName??null,_.event.frame!==void 0?`frame ${_.event.frame}`:null,_.sourceLabel].filter(x=>!!x).join(" · "),y.append(b,S),m.append(v,y),g.append(m)}this.options.body.append(s,g)}syncTimeline(e,t={}){if(!this.options.body.querySelector(".event-playlist-list"))return;const s=this.getActiveItem(e.currentTime),a=s?.dataset.eventKey??null;a===this.lastActiveKey&&!t.forceScroll||(this.activeItem?.isConnected?this.activeItem.dataset.active="false":this.activeItem&&(this.activeItem=null),s?(s.dataset.active="true",this.activeItem=s,(this.autoFollow||t.forceScroll)&&s.scrollIntoView({block:"nearest"})):this.activeItem=null,this.lastActiveKey=a)}setSourceSelection(e,t){const i=W_(e,this.activeSourceIds);t(i),this.activeSourceIds=i,this.lastActiveKey=null,this.render();const s=this.options.getReplayPlayer()?.getState();s&&this.syncTimeline(s)}getActiveItem(e){const t=this.renderedItems;if(t.length===0)return null;let i=0,s=t.length-1;for(;ie.getConfig||e.applyConfig).map(e=>{const t={id:e.id};return e.id==="boost"&&(t.aliases=["boost-pickup-animation"]),e.getConfig&&(t.getConfig=()=>e.getConfig?.()),e.applyConfig&&(t.applyConfig=i=>e.applyConfig?.(i)),t})}function W8(n){return B8($1(n))}function X8({replayPlayer:n,playbackRate:e,skipPostGoalTransitions:t,skipKickoffs:i}){const s=n?.getState();return{currentTime:s?.currentTime,playing:s?.playing,rate:s?.speed??Df(Number(e?.value??1)),skipPostGoalTransitions:n?s?.skipPostGoalTransitionsEnabled:t.checked,skipKickoffs:n?s?.skipKickoffsEnabled:i.checked}}function K8({replayPlayer:n,cameraControlsController:e}){const t=n?.getState(),i=t?UE(t):e?.ballCamMode;return{mode:t?.cameraViewMode,freePreset:e?.freeCameraPreset??null,attachedPlayerId:t?.attachedPlayerId,ballCam:i===void 0?void 0:i==="on",useReplayBallCam:i===void 0?void 0:i==="player",usePlayerCameraSettings:t?.customCameraSettings===null,autoPossession:e?.autoPossessionEnabled,customSettings:t?.customCameraSettings,nameplateLiftUu:e?.nameplateLiftUu}}function q8({playback:n,camera:e,activeTimelineEventSourceIds:t,activeTimelineRangeModuleIds:i,activeMechanicTimelineKinds:s,activeRenderEffectModuleIds:a,initialConfig:r,replayPlayer:o,boostPadOverlayEnabled:l,recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}){return{version:Eh,playback:n,camera:e,overlays:{timelineEvents:[...t],timelineRanges:[...i],mechanics:[...s],renderEffects:[...a],...r?.overlays.pluginRenderEffects!==void 0?{pluginRenderEffects:[...r.overlays.pluginRenderEffects]}:{},...r?.overlays.pluginHudOverlay!==void 0?{pluginHudOverlay:r.overlays.pluginHudOverlay}:{},followedPlayerHud:!1,boostPads:l,boostPickupAnimation:o?.getState().boostPickupAnimationEnabled??!1,hitboxWireframes:o?.getState().hitboxWireframesEnabled??!1,hitboxOnlyMode:o?.getState().hitboxOnlyModeEnabled??!1},recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}}function Y8(n,e,t){return{currentTime:n.currentTime,playing:n.playing,speed:n.rate,customCameraSettings:G1(e),cameraViewMode:e.mode,attachedPlayerId:e.attachedPlayerId,...yx(e)==="player"?{useReplayBallCam:!0}:{ballCamEnabled:yx(e)==="on"},boostPickupAnimationEnabled:t.overlays.boostPickupAnimation,hitboxWireframesEnabled:t.overlays.hitboxWireframes,hitboxOnlyModeEnabled:t.overlays.hitboxOnlyMode,skipPostGoalTransitionsEnabled:n.skipPostGoalTransitions,skipKickoffsEnabled:n.skipKickoffs}}function j8(n,e,t){console.groupCollapsed("[subtr-actor] stats player cfg load"),console.log("location.href",window.location.href),console.log("location.search",n.search||"(empty)"),console.log("location.hash",n.hash||"(empty)"),console.table([...n.searchParams.map(([i,s])=>({source:"search",name:i,value:s})),...n.hashParams.map(([i,s])=>({source:"hash",name:i,value:s}))]),console.log("cfg selected source",n.selectedSource??"(none)"),console.log("cfg selected raw text",n.selectedValue??"(none)"),console.log("cfg selected raw length",n.selectedValue?.length??0),console.log("cfg search values",n.searchValues),console.log("cfg hash values",n.hashValues),n.hashValues.length>0&&n.searchValues.length>0&&console.warn("Both hash and search contain cfg; hash cfg is used."),e&&(console.log("cfg normalized JSON",JSON.stringify(e,null,2)),console.log("cfg normalized object",e)),t&&console.error("cfg decode/apply error",t),console.groupEnd()}function vw(n,e){const{style:t}=n.renderer.domElement;t.visibility=e?"hidden":"",t.pointerEvents=e?"none":""}function bw(n,e={}){const t=e.destroyPlayer??!0,i=e.clearPlayerPluginHandles??!0,s=n.getUnsubscribe();s&&(s(),n.setUnsubscribe(null)),n.teardownActiveModules(),t&&(n.getReplayPlayer()?.destroy(),n.setReplayPlayer(null)),i&&(n.setCanvasRecorder(null),n.setTimelineOverlay(null)),n.setLoadedReplayName(null),n.setStatsTimeline(null),n.setStatsFrameLookup(null),n.setStatRegistry(zo(null)),n.clearTimelineEventSources(),n.clearTimelineRangeSources(),n.clearStandalonePlugins(),n.clearRenderCaches(),n.resetEventPlaylistWindow(),n.renderModuleSummary(),n.renderScoreboard(),n.renderTimelineEventCount(),n.renderMechanicsTimelineControls(),n.renderEventPlaylistWindow(),n.renderModuleSettings(),n.syncRecordingWindow()}async function Z8(n,e,t){const{elements:i}=t;let s=null;i.statusReadout.textContent=n.preparingStatus,i.fileInput.disabled=!0,t.getReplayLoadModal()?.show(n.name,n.preparingStatus),t.setTransportEnabled(!1),t.getCameraControlsController()?.syncAvailability(),i.emptyState.hidden=t.getReplayPlayer()!==null,t.getReplayPlayer()?.pause();try{i.statusReadout.textContent="Parsing replay...",t.getReplayLoadModal()?.show(n.name,"Parsing replay...");const a=await e,{replay:r}=a,o=t.getReplayPlayer();if(o){bw(t,{destroyPlayer:!1,clearPlayerPluginHandles:!1});const h=new nS(a.raw);await o.replaceReplay(h,r,{preservePlayback:!1}),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(zo(null)),t.setReplayPlayer(o),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(o.subscribe(t.renderSnapshot));const f=t.getInitialConfig();if(f){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(f)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(p=>p.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(o.getState()),t.renderSnapshot(o.getState()),t.renderStatsWindows(o.getState().frameIndex),t.renderScoreboard(o.getState().frameIndex),t.syncEventPlaylistTimeline(o.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide();return}const l=eU({replayEventsLabel:"Replay",replayEvents:h=>t.withTimelineEventSeekTimes(t.getReplayTimelineEvents(h.replay))}),c=O3({onStatusChange:t.syncRecordingWindow});t.setCanvasRecorder(c);const u=t.getInitialConfig(),d=tU(i.viewport,a,{initialPlaybackRate:u?.playback.rate,initialCustomCameraSettings:G1(u?.camera),initialAttachedPlayerId:u?.camera.attachedPlayerId??null,initialCameraViewMode:u?.camera.mode,initialBoostPickupAnimationEnabled:u?.overlays.boostPickupAnimation??!1,initialHitboxWireframesEnabled:u?.overlays.hitboxWireframes??i.hitboxWireframes.checked,initialHitboxOnlyModeEnabled:u?.overlays.hitboxOnlyMode??i.hitboxOnlyMode.checked,initialSkipPostGoalTransitionsEnabled:i.skipPostGoalTransitions.checked,initialSkipKickoffsEnabled:i.skipKickoffs.checked,plugins:[u3({onSample:({renderFps:h,replayFps:f})=>{const p=document.getElementById("render-fps-readout"),g=document.getElementById("replay-fps-readout");p&&(p.textContent=`${h.toFixed(0)} fps`),g&&(g.textContent=`${f.toFixed(0)} fps`)}}),Bu(dU({floatingLiftUu:()=>t.getCameraControlsController()?.nameplateLiftUu})),Bu(P3({includePickup:t.includeBoostPickupAnimationPickup})),Bu(c),Bu(l)]});if(s=d,vw(d,!0),await d.ready,bw(t),s=null,vw(d,!1),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(zo(null)),t.setTimelineOverlay(l),t.setReplayPlayer(d),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(d.subscribe(t.renderSnapshot)),u){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(u)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(h=>h.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(d.getState()),t.renderSnapshot(d.getState()),t.renderStatsWindows(d.getState().frameIndex),t.renderScoreboard(d.getState().frameIndex),t.syncEventPlaylistTimeline(d.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide()}catch(a){throw t.getReplayLoadModal()?.hide(),s?.destroy(),t.getReplayPlayer()||(i.emptyState.hidden=!1,t.setCanvasRecorder(null)),t.syncRecordingWindow(),a}finally{i.fileInput.disabled=!1}}function J8(n){if(n<=0)return"--";const e=["B","KB","MB","GB"];let t=n,i=0;for(;t>=1024&&i=10?1:2;return`${t.toFixed(s)} ${e[i]}`}function Q8(n){if(!n)return"No replay";if(n.error)return n.error;switch(n.state){case"idle":return"Idle";case"recording":return"Recording";case"stopping":return"Stopping";case"ready":return"Ready";case"error":return"Error"}}function e6({fpsValue:n,playbackRateValue:e}){const t=Number(n),i=Number(e);return{fps:Number.isFinite(t)?Math.max(1,Math.min(120,Math.trunc(t))):60,playbackRate:Number.isFinite(i)?Math.max(.1,i):1}}function t6(n,e=new Date){const i=(n?.replace(/\.replay$/i,"")||"replay").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,""),s=e.toISOString().replace(/[:.]/g,"-");return`${i||"replay"}-${s}.webm`}function n6(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.append(i),i.click(),i.remove(),window.setTimeout(()=>URL.revokeObjectURL(t),0)}class i6{constructor(e){this.options=e}getConfigSnapshot(){const{elements:e}=this.options;return{fps:Number(e.fps.value),playbackRate:Number(e.playbackRate.value)}}applyConfig(e){const{elements:t}=this.options;e.fps!==void 0&&(t.fps.value=`${e.fps}`),e.playbackRate!==void 0&&(t.playbackRate.value=`${e.playbackRate}`)}sync(e=this.options.getCanvasRecorder()?.getStatus()??null){const{elements:t}=this.options,i=this.options.getCanvasRecorder()!==null&&this.options.getReplayPlayer()!==null,s=e?.state??"idle",a=s==="recording"||s==="stopping",r=(this.options.getCanvasRecorder()?.getRecording()??null)!==null;t.status.textContent=Q8(e),t.elapsed.textContent=`${(e?.elapsedSeconds??0).toFixed(1)}s`,t.size.textContent=J8(e?.sizeBytes??0),t.type.textContent=e?.mimeType||"WebM",t.start.disabled=!i||a,t.fullReplay.disabled=!i||a,t.stop.disabled=!i||!a,t.download.disabled=!r||a,t.clear.disabled=!r||a,t.fps.disabled=a,t.playbackRate.disabled=a}installEventListeners(e){const{elements:t}=this.options;t.start.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(i)try{const{fps:s}=this.getRecordingOptions();i.start({fps:s}),this.sync()}catch(s){console.error("Failed to start recording:",s),this.options.setStatus(s instanceof Error?s.message:"Failed to start recording"),this.sync(i.getStatus())}},{signal:e}),t.fullReplay.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(!i)return;const{fps:s,playbackRate:a}=this.getRecordingOptions();i.recordFullReplay({fps:s,playbackRate:a,restorePlaybackState:!0}).catch(r=>{console.error("Failed to record replay:",r),this.options.setStatus(r instanceof Error?r.message:"Failed to record replay"),this.sync(this.options.getCanvasRecorder()?.getStatus()??null)}),this.sync()},{signal:e}),t.stop.addEventListener("click",()=>{this.options.getCanvasRecorder()?.stop().catch(i=>{console.error("Failed to stop recording:",i),this.options.setStatus(i instanceof Error?i.message:"Failed to stop recording")}),this.sync()},{signal:e}),t.download.addEventListener("click",()=>{const i=this.options.getCanvasRecorder()?.getRecording();i&&n6(i,t6(this.options.getLoadedReplayName()))},{signal:e}),t.clear.addEventListener("click",()=>{try{this.options.getCanvasRecorder()?.clear(),this.sync()}catch(i){console.error("Failed to clear recording:",i)}},{signal:e}),t.fps.addEventListener("change",this.options.requestConfigSync,{signal:e}),t.playbackRate.addEventListener("change",this.options.requestConfigSync,{signal:e})}getRecordingOptions(){const{elements:e}=this.options;return e6({fpsValue:e.fps.value,playbackRateValue:e.playbackRate.value})}}function s6(n){return new i6(n)}class a6{constructor(e){this.options=e}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0){const{body:t}=this.options;t.replaceChildren();const i=this.options.getStatsFrameLookup(),s=i?Ht(i,e):null,a=this.options.getReplayPlayer()?.replay??null;if(!s||!a){const o=document.createElement("p");o.className="scoreboard-empty",o.textContent="Load a replay to show the scoreboard.",t.append(o);return}const r=document.createElement("div");r.className="scoreboard-scoreline",r.append(xw(s.team_zero?.core.goals,!0),o6(),xw(s.team_one?.core.goals,!1)),t.append(r)}}function r6(n){return typeof n=="number"&&Number.isFinite(n)?`${Math.round(n)}`:"--"}function o6(){const n=document.createElement("span");return n.className="scoreboard-divider",n.textContent="-",n}function xw(n,e){const t=document.createElement("strong");return t.className=`scoreboard-goal-value ${ca(e)}`,t.textContent=r6(n),t}function l6(n){return new a6(n)}class c6{constructor(e){this.options=e}setTransportEnabled(e,t){const{elements:i}=this.options;i.togglePlayback.disabled=!e,i.previousFrame.disabled=!e,i.nextFrame.disabled=!e,i.playbackRate.disabled=!e,i.skipPostGoalTransitions.disabled=!e,i.skipKickoffs.disabled=!e,i.hitboxWireframes.disabled=!e,i.hitboxOnlyMode.disabled=!e,this.options.getCameraControlsController()?.setTransportEnabled(e,t)}renderSnapshot(e){const{elements:t}=this.options;t.timeReadout.textContent=`${e.currentTime.toFixed(2)}s`,t.frameReadout.textContent=`${e.frameIndex}`,t.durationReadout.textContent=`${e.duration.toFixed(2)}s`,t.playbackStatusReadout.textContent=e.playing?"Playing":"Paused",t.togglePlayback.textContent=e.playing?"Pause":"Play";const i=Math.max(0,this.options.getFrameCount()-1);t.previousFrame.disabled=e.frameIndex<=0,t.nextFrame.disabled=e.frameIndex>=i;const s=Df(e.speed);t.playbackRate.value=`${s}`,t.playbackRateReadout.textContent=wy(s),this.options.getCameraControlsController()?.syncState(e),t.skipPostGoalTransitions.checked=e.skipPostGoalTransitionsEnabled,t.skipKickoffs.checked=e.skipKickoffsEnabled,t.hitboxWireframes.checked=e.hitboxWireframesEnabled,t.hitboxOnlyMode.checked=e.hitboxOnlyModeEnabled,t.emptyState.hidden=!0}}function u6(n){return new c6(n)}function d6({elements:n,signal:e,setLauncherOpen:t,openReplayFilePicker:i,getElementWindowId:s,toggleWindow:a,hideWindow:r,createStatsWindow:o,loadReplayFile:l,togglePlayback:c,stepFrames:u,setPlaybackRate:d,setSkipPostGoalTransitionsEnabled:h,setSkipKickoffsEnabled:f,setHitboxWireframesEnabled:p,setHitboxOnlyModeEnabled:g}){n.launcherToggle.addEventListener("click",()=>{t(n.launcherMenu.hidden)},{signal:e}),n.root.addEventListener("click",m=>{m.target instanceof Element&&(m.target.closest(".top-chrome")||t(!1))},{signal:e}),n.loadReplayAction.addEventListener("click",i,{signal:e}),n.emptyLoadReplay.addEventListener("click",i,{signal:e}),n.root.querySelectorAll("[data-window-toggle]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowToggle;v&&(a(v),t(!1))},{signal:e})}),n.root.querySelectorAll("[data-window-hide]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowHide??s(m);v&&r(v)},{signal:e})}),n.root.querySelectorAll("[data-create-stats-window]").forEach(m=>{m.addEventListener("click",()=>{o(m.dataset.createStatsWindow)},{signal:e})}),n.fileInput.addEventListener("change",()=>{const m=n.fileInput.files?.[0];m&&l(m)},{signal:e}),n.togglePlayback.addEventListener("click",c,{signal:e}),n.previousFrame.addEventListener("click",()=>u(-1),{signal:e}),n.nextFrame.addEventListener("click",()=>u(1),{signal:e});const _=()=>{const m=Df(Number(n.playbackRate.value));n.playbackRate.value=`${m}`,n.playbackRateReadout.textContent=wy(m),d(m)};n.playbackRate.addEventListener("input",_,{signal:e}),n.playbackRate.addEventListener("change",_,{signal:e}),n.skipPostGoalTransitions.addEventListener("change",()=>{h(n.skipPostGoalTransitions.checked)},{signal:e}),n.skipKickoffs.addEventListener("change",()=>{f(n.skipKickoffs.checked)},{signal:e}),n.hitboxWireframes.addEventListener("change",()=>{p(n.hitboxWireframes.checked)},{signal:e}),n.hitboxOnlyMode.addEventListener("change",()=>{g(n.hitboxOnlyMode.checked)},{signal:e})}const h6=3500;function f6(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function p6(n){const{getReplayPlayer:e,signal:t}=n,i={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},s=()=>{i.forward=!1,i.backward=!1,i.left=!1,i.right=!1,i.up=!1,i.down=!1},a=(g,_)=>{switch(g){case"KeyW":return i.forward=_,!0;case"KeyS":return i.backward=_,!0;case"KeyA":return i.left=_,!0;case"KeyD":return i.right=_,!0;case"Space":return i.up=_,!0;case"ShiftLeft":case"ShiftRight":return i.down=_,!0;default:return!1}},r=g=>{g.ctrlKey||g.metaKey||g.altKey||f6()||a(g.code,!0)&&g.preventDefault()},o=g=>{a(g.code,!1)};window.addEventListener("keydown",r,{signal:t}),window.addEventListener("keyup",o,{signal:t}),window.addEventListener("blur",s,{signal:t});const l=new T,c=new T,u=new T,d=new T(0,1,0);let h=null,f=0;const p=g=>{f=requestAnimationFrame(p);const _=h===null?0:Math.min(.1,(g-h)/1e3);h=g;const m=(i.forward?1:0)-(i.backward?1:0),v=(i.right?1:0)-(i.left?1:0),y=(i.up?1:0)-(i.down?1:0);if(_===0||m===0&&v===0&&y===0)return;const b=e();if(!b||b.getState().cameraViewMode!=="free")return;const S=b.camera,x=b.controls;S.getWorldDirection(l),c.set(1,0,0).applyQuaternion(S.quaternion),u.set(0,0,0).addScaledVector(l,m).addScaledVector(c,v).addScaledVector(d,y),u.lengthSq()!==0&&(u.normalize().multiplyScalar(h6*_),S.position.add(u),x.target.add(u))};f=requestAnimationFrame(p),t.addEventListener("abort",()=>{cancelAnimationFrame(f)})}function m6(n,e){const t=new URLSearchParams(n),s=(t.get("replayId")??t.get("replay-id")??e??"").trim();return s.length>0?s:null}function _6(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function g6(n){if(!n.replayId)return null;const e={replay_id:n.replayId,reviewed_mechanic:n.mechanic,reviewed_event_frame:n.frame,reviewed_event_time:n.time,confidence:n.confidence,status:"confirmed"};return n.subjectKind&&n.subjectId&&(e.reviewed_subject_kind=n.subjectKind,e.reviewed_subject_id=n.subjectId),n.startFrame!==null&&(e.reviewed_start_frame=n.startFrame),n.endFrame!==null&&(e.reviewed_end_frame=n.endFrame),n.notes&&n.notes.trim()&&(e.notes=n.notes.trim()),Object.keys(n.context).length>0&&(e.context=n.context),e}function y6(n,e){const t=n.getState(),i=Math.max(0,Math.round(t.frameIndex??0)),s=t.currentTime??0,a=t.attachedPlayerId??null,r=a?n.replay.players.find(o=>o.id===a)?.name??null:null;return{localId:e.localId,mechanic:e.mechanic,frame:i,time:s,subjectKind:a?"player":null,subjectId:a,playerName:r,startFrame:null,endFrame:null,notes:e.notes?.trim()?e.notes.trim():null,confidence:1,replayId:e.replayId,context:{capturedFrom:"stat-evaluation-player",attachedPlayerId:a,playerName:r,durationSeconds:n.replay.duration??null}}}async function v6(n,e="/api/v1/events/reviews"){const t=g6(n);if(!t)return{record:n,ok:!1,message:"No replay id — cannot upload (export JSON instead)."};try{const i=await fetch(e,{method:"POST",headers:{"content-type":"application/json",..._6()},credentials:"same-origin",body:JSON.stringify(t)});if(!i.ok){let s=`${i.status}${i.statusText?` ${i.statusText}`:""}`;try{const a=await i.json();typeof a.error=="string"&&(s=a.error)}catch{}return{record:n,ok:!1,message:s}}return{record:n,ok:!0,message:"uploaded"}}catch(i){return{record:n,ok:!1,message:i instanceof Error?i.message:String(i)}}}const b6=["flick","whiff","double_tap","ceiling_shot","wall_aerial","flip_reset","one_timer","speed_flip","half_flip","wavedash","demo"],x6="m";function w6(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function S6(n,e){const t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(i)}class T6{constructor(e){this.options=e}records=[];localIdSeq=0;installEventListeners(e){const{elements:t}=this.options;for(const i of b6){const s=document.createElement("option");s.value=i,s.textContent=i.replaceAll("_"," "),t.mechanic.appendChild(s)}t.capture.addEventListener("click",()=>this.capture(),{signal:e}),t.export.addEventListener("click",()=>this.exportJson(),{signal:e}),t.upload.addEventListener("click",()=>{this.uploadAll()},{signal:e}),t.clear.addEventListener("click",()=>{this.records.length=0,this.render(),this.setStatus("Cleared.")},{signal:e}),window.addEventListener("keydown",i=>{i.key.toLowerCase()!==x6||i.repeat||i.metaKey||i.ctrlKey||i.altKey||w6()||(i.preventDefault(),this.capture())},{signal:e}),this.render()}capture(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}this.localIdSeq+=1;const t=y6(e,{mechanic:this.options.elements.mechanic.value||"flick",replayId:this.resolveReplayId(),localId:`missed-${this.localIdSeq}`});this.records.push(t),this.options.showWindow(),this.render(),this.setStatus(`Captured ${t.mechanic} @ ${t.time.toFixed(2)}s`+(t.replayId?".":" (no replay id — export only)."))}exportJson(){if(this.records.length===0){this.setStatus("Nothing to export.");return}S6("missed-events.json",{capturedFrom:"stat-evaluation-player",replayId:this.resolveReplayId(),missedEvents:this.records}),this.setStatus(`Exported ${this.records.length}.`)}async uploadAll(){if(this.records.length===0){this.setStatus("Nothing to upload.");return}let e=0;const t=[];for(const i of[...this.records]){const s=await v6(i);if(s.ok){e+=1;const a=this.records.findIndex(r=>r.localId===i.localId);a>=0&&this.records.splice(a,1)}else t.push(`${i.mechanic}@${i.time.toFixed(1)}s: ${s.message}`)}this.render(),this.setStatus(t.length===0?`Uploaded ${e}.`:`Uploaded ${e}, ${t.length} failed — ${t[0]}`)}render(){const{list:e}=this.options.elements;e.replaceChildren();for(const t of this.records){const i=document.createElement("li"),s=t.playerName??t.subjectId??"no subject",a=document.createElement("span");a.className="missed-event-row",a.textContent=`${t.mechanic} @ ${t.time.toFixed(2)}s · f${t.frame} · ${s}`+(t.replayId?"":" · no replay id");const r=document.createElement("button");r.type="button",r.textContent="✕",r.title="Remove",r.addEventListener("click",()=>{const o=this.records.findIndex(l=>l.localId===t.localId);o>=0&&(this.records.splice(o,1),this.render())}),i.append(a,r),e.appendChild(i)}}setStatus(e){this.options.elements.status.textContent=e}resolveReplayId(){return m6(window.location.search,this.options.getReplayId?.()??null)}}function M6(n){return new T6(n)}class E6{constructor(e){this.options=e}activeModules=[];activeTimelineEventSourceIds=new Set;activeTimelineRangeModuleIds=new Set;activeMechanicTimelineKinds=new Set;activeRenderEffectModuleIds=new Set;removeRenderHook=null;timelineSourceRemovers=new Map;timelineRangeSourceRemovers=new Map;getActiveModules(){return this.activeModules}getActiveTimelineEventSourceIds(){return this.activeTimelineEventSourceIds}getActiveTimelineRangeModuleIds(){return this.activeTimelineRangeModuleIds}getActiveMechanicTimelineKinds(){return this.activeMechanicTimelineKinds}getActiveRenderEffectModuleIds(){return this.activeRenderEffectModuleIds}getActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}getBoostPadOverlayEnabled(){return!0}getTimelineEventSourceIds(){return[...this.activeTimelineEventSourceIds]}getTimelineRangeModuleIds(){return[...this.activeTimelineRangeModuleIds]}getMechanicTimelineKinds(){return[...this.activeMechanicTimelineKinds]}getRenderEffectModuleIds(){return[...this.activeRenderEffectModuleIds]}applyOverlayConfig({timelineEvents:e,timelineRanges:t,mechanics:i,renderEffects:s,boostPads:a}){this.activeTimelineEventSourceIds=new Set(e),this.activeTimelineRangeModuleIds=new Set(t),this.activeMechanicTimelineKinds=new Set(i),this.activeRenderEffectModuleIds=new Set(s)}reset(){this.teardownActiveModules(),this.clearStandalonePlugins(),this.activeModules=[],this.activeTimelineEventSourceIds=new Set,this.activeTimelineRangeModuleIds=new Set,this.activeMechanicTimelineKinds=new Set,this.activeRenderEffectModuleIds=new Set,this.removeRenderHook=null}setupActiveModules(){this.teardownActiveModules();const e=this.options.getContext();if(!e)return;const t=this.getActiveModuleIds();this.activeModules=this.options.modules.filter(i=>t.has(i.id)),this.options.boostPickupFilters.setup(e);for(const i of this.activeModules)i.setup(e);this.removeRenderHook=e.player.onBeforeRender(i=>{for(const s of this.activeModules)this.activeRenderEffectModuleIds.has(s.id)&&s.onBeforeRender(i)}),this.syncTimelineEvents(),this.syncTimelineRanges()}teardownActiveModules(){this.removeRenderHook?.(),this.removeRenderHook=null,this.clearTimelineEventSources(),this.clearTimelineRangeSources();for(const e of this.activeModules)e.teardown();this.activeModules=[]}toggleCapability(e,t,i){const s=this.getMutableActiveCapabilityIds(t);i?s.add(e):s.delete(e),this.setupActiveModules(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderStatsWindows(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}setMechanicTimelineKind(e,t){t?this.activeMechanicTimelineKinds.add(e):this.activeMechanicTimelineKinds.delete(e),this.options.requestConfigSync()}activateMechanicTimelineKind(e){this.activeMechanicTimelineKinds.add(e),this.syncTimelineEvents(),this.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}clearTimelineEventSources(){for(const e of this.timelineSourceRemovers.values())e();this.timelineSourceRemovers.clear()}clearTimelineRangeSources(){for(const e of this.timelineRangeSourceRemovers.values())e();this.timelineRangeSourceRemovers.clear()}clearStandalonePlugins(){}syncBoostPadOverlayPlugin(){}toggleBoostPadOverlay(){this.options.renderModuleSummary(),this.options.requestConfigSync()}syncTimelineEvents(){this.clearTimelineEventSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.options.getEventTimelineSources(e)){if(!i.active)continue;const s=i.buildTimelineEvents();s.length!==0&&this.timelineSourceRemovers.set(i.timelineKey,t.addEventSource(this.options.withTimelineEventSeekTimes(s),{id:i.timelineId,label:i.label}))}t.refreshEvents()}}syncTimelineRanges(){this.clearTimelineRangeSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.activeModules)!this.activeTimelineRangeModuleIds.has(i.id)||!i.getTimelineRanges||this.timelineRangeSourceRemovers.set(i.id,t.addRangeSource(()=>i.getTimelineRanges?.(e)??[]));for(const i of this.options.getEventTimelineSources(e)){if(!i.active||!i.buildTimelineRanges)continue;const s=i.buildTimelineRanges();s.length!==0&&this.timelineRangeSourceRemovers.set(i.timelineKey,t.addRangeSource(s))}t.refreshRanges()}}getActiveModuleIds(){return new Set([...this.activeTimelineEventSourceIds,...this.activeTimelineRangeModuleIds,...this.activeRenderEffectModuleIds])}getMutableActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}}function C6(n){return new E6(n)}function ni(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function ww(n){return ni(n)&&(n.kind==="time"||n.kind==="frame")&&typeof n.value=="number"&&Number.isFinite(n.value)?{kind:n.kind,value:n.value}:null}function nd(n,e){if(n!=null){if(typeof n!="number"||!Number.isInteger(n)||!Number.isFinite(n)||n<0)throw new Error(`Review playlist page ${e} must be a non-negative integer.`);return n}}function Sw(n,e){if(n!=null){if(typeof n!="string")throw new Error(`Review playlist page ${e} must be a string.`);return n}}function A6(n){if(n!=null){if(!ni(n))throw new Error("Review playlist page must be an object.");return{next:Sw(n.next,"next"),previous:Sw(n.previous,"previous"),total:nd(n.total,"total"),count:nd(n.count,"count"),limit:nd(n.limit,"limit"),offset:nd(n.offset,"offset")}}}function R6(n){if(n!=null){if(!ni(n))throw new Error("Review playlist playback must be an object.");if(n.timeBase!==void 0&&n.timeBase!=="playback"&&n.timeBase!=="rawReplay")throw new Error('Review playlist playback timeBase must be "playback" or "rawReplay".');return{...n,timeBase:n.timeBase}}}function P6(n,e){if(n==null)return;if(!ni(n))throw new Error(`Review item ${e} perspective must be an object.`);if(n.kind!=="player")throw new Error(`Review item ${e} perspective kind must be "player".`);const t=typeof n.playerId=="string"&&n.playerId.trim()?n.playerId.trim():void 0,i=typeof n.playerName=="string"&&n.playerName.trim()?n.playerName.trim():void 0;if(!t&&!i)throw new Error(`Review item ${e} player perspective needs playerId or playerName.`);if(n.ballCam!==void 0&&n.ballCam!=="off"&&n.ballCam!=="on"&&n.ballCam!=="player")throw new Error(`Review item ${e} perspective ballCam must be off, on, or player.`);if(n.usePlayerCameraSettings!==void 0&&typeof n.usePlayerCameraSettings!="boolean")throw new Error(`Review item ${e} perspective usePlayerCameraSettings must be boolean.`);return{kind:"player",playerId:t,playerName:i,ballCam:n.ballCam,usePlayerCameraSettings:n.usePlayerCameraSettings}}function I6(n){if(!ni(n)||!Array.isArray(n.items))throw new Error("Review playlist must contain an items array.");const e=n.items.map((i,s)=>{if(!ni(i)||typeof i.replay!="string")throw new Error(`Invalid review item at index ${s}.`);const a=ww(i.start),r=ww(i.end);if(!a||!r)throw new Error(`Review item ${s+1} has invalid start or end.`);return{id:typeof i.id=="string"?i.id:void 0,replay:i.replay,start:a,end:r,label:typeof i.label=="string"?i.label:void 0,perspective:P6(i.perspective,s+1),meta:ni(i.meta)?i.meta:void 0}}),t=Array.isArray(n.replays)?n.replays.map(i=>!ni(i)||typeof i.id!="string"?null:{id:i.id,path:typeof i.path=="string"?i.path:void 0,label:typeof i.label=="string"?i.label:void 0,locator:ni(i.locator)?i.locator:void 0,meta:ni(i.meta)?i.meta:void 0}).filter(i=>i!==null):void 0;return{label:typeof n.label=="string"?n.label:void 0,replays:t,items:e,page:A6(n.page),playback:R6(n.playback),meta:n.meta}}function Tw(n){let e;try{e=JSON.parse(n)}catch(t){throw new Error(`Invalid review playlist JSON: ${t instanceof Error?t.message:String(t)}`)}return I6(e)}function L6(){const n=new URLSearchParams(window.location.search);return n.get("reviewPlaylist")?.trim()||n.get("review")?.trim()||n.get("playlist")?.trim()||n.get("playlistUrl")?.trim()||null}function k6(n){return/^\/(?:home|Users|tmp|var\/tmp|mnt|media|run\/user|nix\/store)\//.test(n)}function W1(n,e){const t=n.startsWith("path:")?n.slice(5):n;if(/^https?:\/\//i.test(t)||t.startsWith("/@fs/"))return t;if(t.startsWith("/")){if(k6(t))return`/@fs${t}`;if(e){const i=new URL(e,window.location.href);if(i.origin!==window.location.origin)return new URL(t,i.origin).href}return t}return e?new URL(t,e).href:t}function Ed(n,e){const t=e.replaysById.get(n.replay);if(t?.path)return t.path;if(ni(t?.locator)&&t.locator.kind==="path"&&typeof t.locator.path=="string")return t.locator.path;if(/^https?:\/\//i.test(n.replay)||n.replay.startsWith("/")||n.replay.startsWith("/@fs/")||n.replay.startsWith("path:"))return n.replay;throw new Error(`Review replay "${n.replay}" does not include a loadable path.`)}function Mw(n,e){const t=e.replaysById.get(n.replay),s=(t?.path??Ed(n,e)).replace(/^path:/,"").split("/").filter(Boolean).pop();return t?.label??s??"review replay"}function Cd(n){return typeof n=="number"&&Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function Ew(n){return n.kind==="time"?Cd(n.value):`frame ${Math.trunc(n.value)}`}function Qi(n,e){if(!ni(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?t:null}function Ad(n,e){if(!ni(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):null}function D6(n,e){for(const[t,i]of[["eventTime","eventFrame"],["startTime","startFrame"],["endTime","endFrame"]]){const s=Qi(n,t),a=Ad(n,i),r=a===null?null:e.frames[a]?.time;if(s!==null&&typeof r=="number"&&Number.isFinite(r))return s-r}return 0}function X1(n,e,t){return t==="playback"?0:t==="rawReplay"&&typeof e.rawStartTime=="number"&&Number.isFinite(e.rawStartTime)?e.rawStartTime:D6(n,e)}function J_(n,e){return Math.min(Math.max(0,n),Math.max(0,e))}function O6(n,e,t,i){if(e.kind==="frame"){const a=Math.max(0,Math.trunc(e.value));return J_(t.frames[a]?.time??0,t.duration)}const s=X1(n,t,i);return J_(e.value-s,t.duration)}function F6(n,e,t){const i=V6(n);return i===null?null:J_(i-X1(n,e,t),e.duration)}function N6(n){const e=n.start.kind==="time"?n.start.value:null,t=n.end.kind==="time"?n.end.value:null,i=[`${Ew(n.start)} to ${Ew(n.end)}`];e!==null&&t!==null&&i.push(`${Math.max(0,t-e).toFixed(1)}s clip`);const s=Qi(n,"startTime")??Qi(n,"eventTime"),a=Qi(n,"endTime")??Qi(n,"eventTime");return e!==null&&s!==null&&i.push(`${Math.max(0,s-e).toFixed(1)}s preroll`),t!==null&&a!==null&&i.push(`${Math.max(0,t-a).toFixed(1)}s postroll`),i.join(" · ")}function U6(n){const e=Qi(n,"eventTime"),t=Qi(n,"startTime"),i=Qi(n,"endTime"),s=Ad(n,"eventFrame"),a=Ad(n,"startFrame"),r=Ad(n,"endFrame"),o=t!==null&&i!==null&&Math.abs(i-t)>.001?`${Cd(t)} to ${Cd(i)}`:Cd(e??t??i),l=a!==null&&r!==null&&r!==a?`frames ${a}-${r}`:s!==null?`frame ${s}`:a!==null?`frame ${a}`:null;return[o,l].filter(c=>c&&c!=="--").join(" · ")||"--"}function Fm(n,e){return n.label??n.meta?.eventTypeLabel??n.meta?.mechanicLabel??`Review item ${e+1}`}function B6(n){if(typeof n.meta?.playerName=="string"&&n.meta.playerName.trim())return n.meta.playerName.trim();if(ni(n.meta?.target)&&typeof n.meta.target.playerName=="string"){const e=n.meta.target.playerName.trim();return e||null}return null}function Cw(n,e){if(!n)return null;if(n.playerId){const i=e.find(s=>s.id===n.playerId);if(i)return i}const t=n.playerName?.toLowerCase();return t?e.find(i=>i.name.trim().toLowerCase()===t)??null:null}function Aw(n){if(typeof n.meta?.eventTypeLabel=="string"&&n.meta.eventTypeLabel.trim())return n.meta.eventTypeLabel;if(typeof n.meta?.mechanicLabel=="string"&&n.meta.mechanicLabel.trim())return n.meta.mechanicLabel;const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"?Dn(e):"--"}function z6(n){const e=n.meta?.eventCategory;return typeof e=="string"&&e.trim()?Dn(e.trim()):"--"}function H6(n){const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"&&e.trim()?e.trim().replaceAll("-","_"):null}function V6(n){return Qi(n,"eventTime")??Qi(n,"startTime")??Qi(n,"endTime")}class G6{constructor(e){this.options=e}createReplaySource(e,t,i){const s=Ed(e,t),a=W1(s,t.sourceUrl);return{name:Mw(e,t),preparingStatus:"Loading review replay...",async readBytes(){const r=await fetch(a,{signal:i});if(!r.ok){const o=r.statusText?` ${r.statusText}`:"";throw new Error(`Failed to fetch review replay from ${a} (${r.status}${o})`)}return new Uint8Array(await r.arrayBuffer())}}}initialize(e){const t=this.getReplayClipCounts(e);for(const[i,s]of this.getReplayItems(e)){let a="",r=i;try{a=Ed(s,e),r=Mw(s,e)}catch{r=e.replaysById.get(i)?.label??i}e.replayLoadStates.set(i,{replayId:i,label:r,path:a,clipCount:t.get(i)??0,status:"idle",progress:null,error:null})}}preload(e,t){if(e.preloading)return;const i=this.getNextReplayItems(e,t);i.length!==0&&(e.preloading=!0,(async()=>{try{for(const s of i){const a=s.replay,r=e.replayLoadStates.get(a);if(!(r?.status==="loaded"||r?.status==="loading"))try{await this.loadBundle(s,e)}catch{}}}finally{e.preloading=!1}})())}loadBundle(e,t){const i=t.replayLoadCache.get(e.replay);if(i)return i;const s=this.createReplaySource(e,t);this.updateLoadState(t,e.replay,{label:s.name,path:Ed(e,t),status:"loading",progress:null,error:null});const a=Promise.resolve().then(async()=>{const r=await s.readBytes();return Cf(r,{reportEveryNFrames:100,onProgress:o=>{this.updateLoadState(t,e.replay,{status:"loading",progress:o,error:null})}})}).then(r=>(this.updateLoadState(t,e.replay,{status:"loaded",progress:null,error:null}),r)).catch(r=>{throw t.replayLoadCache.delete(e.replay),this.updateLoadState(t,e.replay,{status:"error",error:r instanceof Error?r.message:String(r)}),r});return t.replayLoadCache.set(e.replay,a),a}render(e){const{reviewSummary:t,loadingSummary:i,loadingActive:s,loadingList:a}=this.options.elements,r=e?Array.from(e.replayLoadStates.values()):[],o=r.filter(h=>h.status==="loaded").length,l=r.filter(h=>h.status==="loading").length,c=r.filter(h=>h.status==="error").length,u=r.filter(h=>h.status==="idle").length,d=r.length===0?"0 replays":`${o}/${r.length} loaded${l>0?`, ${l} loading`:""}${c>0?`, ${c} failed`:""}`;if(t.textContent=d,i.textContent=d,s.textContent=r.length===0?"No playlist":l>0?`${l} active, ${u} pending`:c>0?`${c} failed`:e?.preloading?`Background queue, ${u} pending`:o===r.length?"Complete":`${u} pending`,a.replaceChildren(),!e||r.length===0){const h=document.createElement("p");h.className="stat-window-empty",h.textContent="No replay sources.",a.append(h);return}for(const h of r){const f=document.createElement("div");f.className=`mechanics-review-replay-load ${h.status}`;const p=document.createElement("div");p.className="mechanics-review-replay-load-main";const g=document.createElement("span");g.className="mechanics-review-replay-load-title",g.textContent=h.label;const _=document.createElement("span");_.className="mechanics-review-replay-load-meta",_.textContent=[h.replayId,`${h.clipCount} ${h.clipCount===1?"clip":"clips"}`,h.path].filter(Boolean).join(" · "),p.append(g,_);const m=document.createElement("strong");m.className="mechanics-review-replay-load-status",m.textContent=this.replayLoadStatusText(h);const v=document.createElement("div");v.className="mechanics-review-replay-load-progress";const y=document.createElement("span");y.style.width=`${Math.round(this.replayLoadProgressValue(h)*100)}%`,v.append(y),f.append(p,m,v),a.append(f)}}updateLoadState(e,t,i){const s=e.replayLoadStates.get(t)??{replayId:t,label:t,path:"",clipCount:0,status:"idle",progress:null,error:null};e.replayLoadStates.set(t,{...s,...i});const a=e.manifest.items[e.currentIndex];e.loading&&a?.replay===t&&i.progress&&this.options.onActiveLoadProgress(i.progress),this.options.isActiveReview(e)&&this.render(e)}getReplayItems(e){const t=new Map;for(const i of e.manifest.items)t.has(i.replay)||t.set(i.replay,i);return t}getReplayClipCounts(e){const t=new Map;for(const i of e.manifest.items)t.set(i.replay,(t.get(i.replay)??0)+1);return t}getNextReplayItems(e,t){const i=e.manifest.items[t]?.replay,s=new Set(i?[i]:[]),a=[];for(let r=t+1;r{const i=t.file.files?.[0];if(i)try{const s=Tw(await i.text());await this.loadPlaylist(s,null)}catch(s){console.error("Failed to load review playlist:",s),this.setStatus(s instanceof Error?s.message:"Failed to load review playlist")}finally{t.file.value=""}},{signal:e}),t.loadUrl.addEventListener("click",()=>{this.loadPlaylistFromUrl(t.url.value.trim()).catch(i=>{console.error("Failed to load review playlist URL:",i),this.setStatus(i instanceof Error?i.message:"Failed to load review playlist URL")})},{signal:e}),t.previous.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.max(0,i.currentIndex-1))},{signal:e}),t.replay.addEventListener("click",()=>this.replayClip(),{signal:e}),t.next.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.min(i.manifest.items.length-1,i.currentIndex+1))},{signal:e}),t.confirm.addEventListener("click",()=>{this.submitDecision("confirmed")},{signal:e}),t.reject.addEventListener("click",()=>{this.submitDecision("rejected")},{signal:e}),t.uncertain.addEventListener("click",()=>{this.submitDecision("uncertain")},{signal:e})}render(){const{elements:e}=this.options,t=this.activeReview,i=t?.manifest.items??[],s=t?i[t.currentIndex]??null:null,a=i.length>0;e.count.textContent=`${i.length} item${i.length===1?"":"s"}`,e.index.textContent=a&&t?`${t.currentIndex+1} / ${i.length}`:"0 / 0",e.title.textContent=s?Fm(s,t?.currentIndex??0):"No candidate selected",e.mechanic.textContent=s?Aw(s):"--",e.player.textContent=s?this.getPlayerName(s):"--",e.clip.textContent=s?N6(s):"--",e.event.textContent=s?U6(s):"--",e.reason.textContent=s?.meta?.reason??"--",e.previous.disabled=!t||t.loading||t.currentIndex<=0,e.replay.disabled=!t||t.loading||!t.currentClip,e.next.disabled=!t||t.loading||t.currentIndex>=i.length-1;const r=!t||t.loading||Rw(s)===null;if(e.confirm.disabled=r,e.reject.disabled=r,e.uncertain.disabled=r,this.options.replayLoads.render(t),e.list.replaceChildren(),!t||i.length===0){const o=document.createElement("p");o.className="stat-window-empty",o.textContent="No review playlist loaded.",e.list.append(o);return}i.forEach((o,l)=>{const c=document.createElement("button");c.type="button",c.className="mechanics-review-item",c.dataset.active=l===t.currentIndex?"true":"false",c.disabled=t.loading,c.addEventListener("click",()=>{this.activateItem(l)});const u=document.createElement("span");u.textContent=Fm(o,l);const d=document.createElement("strong");d.textContent=[z6(o),Aw(o),this.getPlayerName(o),Nm(o.meta?.reviewStatus)].filter(h=>h&&h!=="--").join(" · ")||"--",c.append(u,d),e.list.append(c)})}async loadPlaylist(e,t){const i=new Map;for(const s of e.replays??[])i.set(s.id,s);this.activeReview={manifest:e,sourceUrl:t,replaysById:i,replayLoadStates:new Map,replayLoadCache:new Map,currentIndex:0,loading:!1,preloading:!1,currentReplayId:null,currentClip:null},this.options.replayLoads.initialize(this.activeReview),this.options.showReplayLoadingWindow(),this.setStatus(e.label?`Loaded ${e.label}.`:"Loaded review playlist."),this.render(),e.items.length>0&&await this.activateItem(0)}async loadPlaylistFromUrl(e){if(!e){this.setStatus("Enter a review playlist URL.");return}const t=W1(e,window.location.href);this.setStatus("Loading review playlist...");const i=await fetch(t);if(!i.ok){const a=i.statusText?` ${i.statusText}`:"";throw new Error(`Failed to fetch review playlist from ${t} (${i.status}${a})`)}const s=Tw(await i.text());await this.loadPlaylist(s,i.url||t)}async activateItem(e){const t=this.activeReview,i=t?.manifest.items[e];if(!(!t||!i||t.loading)){t.loading=!0,t.currentIndex=e,this.render(),this.setStatus(`Loading ${Fm(i,e)}...`);try{if(!this.options.getReplayPlayer()||t.currentReplayId!==i.replay){const d=this.options.replayLoads.createReplaySource(i,t),h=this.options.replayLoads.loadBundle(i,t);await this.options.loadReplayBundleForDisplay(d,h),t.currentReplayId=i.replay}this.options.replayLoads.preload(t,e);const a=t.manifest.playback?.timeBase,r=Math.max(0,this.getBoundTime(i,i.start,a)),o=Math.min(this.options.getReplayPlayer()?.getState().duration??Number.POSITIVE_INFINITY,Math.max(r,this.getBoundTime(i,i.end,a)));if(!Number.isFinite(r)||!Number.isFinite(o)||o<=r)throw new Error("Review item has an empty playback range.");const l=this.options.getReplayPlayer(),c=l?Cw(i.perspective,l.replay.players):null;c&&this.options.applyClipPerspective({playerId:c.id,ballCam:i.perspective?.ballCam,usePlayerCameraSettings:i.perspective?.usePlayerCameraSettings}),this.options.resetReplayTransitionControls();const u=l===null?null:F6(i,l.replay,a);t.currentClip={startTime:r,endTime:o,targetTime:u},this.options.activateTimelineSource(i),this.options.getReplayPlayer()?.setState({currentTime:r,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),this.setStatus(u===null?`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s`:`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s; target ${u.toFixed(2)}s`)}catch(s){console.error("Failed to activate mechanics review item:",s),t.currentClip=null,this.setStatus(s instanceof Error?s.message:"Failed to load review item")}finally{t.loading=!1,this.render()}}}replayClip(){const e=this.activeReview?.currentClip,t=this.options.getReplayPlayer();!e||!t||t.setState({currentTime:e.startTime,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1})}async submitDecision(e){const t=this.activeReview,i=t?.manifest.items[t.currentIndex]??null,s=Rw(i);if(!t||!i||!s){this.setStatus("Current review item has no review endpoint.");return}this.setStatus(`Submitting ${Nm(e)}...`);const a=await fetch(s,{method:"POST",headers:{"content-type":"application/json",...X6()},credentials:"same-origin",body:JSON.stringify({status:e})});if(!a.ok){let r=`${a.status}${a.statusText?` ${a.statusText}`:""}`;try{const o=await a.json();typeof o.error=="string"&&(r=o.error)}catch{}this.setStatus(`Review failed: ${r}`);return}i.meta=i.meta??{},i.meta.reviewStatus=e,this.setStatus(`Marked ${Nm(e)}.`),this.render()}enforceClipBoundary(e){const t=this.activeReview?.currentClip,i=this.options.getReplayPlayer();if(!t||!i||this.boundaryGuard)return!1;const s=e.currentTime=t.endTime-.025;if(!s&&!a)return!1;this.boundaryGuard=!0;try{i.setState({currentTime:s?t.startTime:t.endTime,playing:!1,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),a&&this.setStatus(`Finished clip at ${t.endTime.toFixed(2)}s`)}finally{this.boundaryGuard=!1}return!0}getBoundTime(e,t,i){const s=this.options.getReplayPlayer();return s?O6(e,t,s.replay,i):t.kind==="time"?t.value:0}getPlayerName(e){const t=B6(e);if(t)return t;const i=this.options.getReplayPlayer()?.replay.players??[];return Cw(e.perspective,i)?.name??"--"}}function Nm(n){return typeof n=="string"&&n.trim()?n.replaceAll("_"," "):"unreviewed"}function Rw(n){if(!n)return null;if(typeof n.meta?.reviewEndpoint=="string"&&n.meta.reviewEndpoint)return n.meta.reviewEndpoint;const e=typeof n.meta?.eventId=="string"&&n.meta.eventId?n.meta.eventId:n.id;return e?`/api/v1/events/${encodeURIComponent(e)}/reviews`:null}function X6(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function K6(n){return new W6(n)}const q6=["replayUrl","replay_url","replay"],Y6=["r","replayUrlZ","replay_url_z"],j6=["ballchasing","ballchasingId","ballchasingUuid","ballchasingReplay"];function Z6(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a{n.signal.aborted||(console.error("Failed to load replay URL:",t),n.statusReadout.textContent=t instanceof Error?t.message:"Failed to load replay URL")})}function i9(n){n.initialBundle?n.loadReplayBundleForDisplay({name:n.initialReplayName??"replay",preparingStatus:"Preparing replay...",async readBytes(){throw new Error("Replay bytes are not available for this preloaded replay")}},Promise.resolve(n.initialBundle)).catch(i=>{n.signal.aborted||(console.error("Failed to load preprocessed replay bundle:",i),n.statusReadout.textContent=i instanceof Error?i.message:"Failed to load preprocessed replay bundle")}):n.loadFromLocation!==!1&&n9(n);const e=L6();if(!e)return;const t=n.getMechanicsReviewController();t?.setUrl(e),n.showMechanicsReviewWindow(),t?.loadPlaylistFromUrl(e).catch(i=>{n.signal.aborted||(console.error("Failed to load mechanics review playlist from URL:",i),t?.setStatus(i instanceof Error?i.message:"Failed to load mechanics review playlist from URL"))})}function s9(n){const e=()=>{n.getSkipPostGoalTransitions().checked=!1,n.getSkipKickoffs().checked=!1},t=(i,s)=>{const a=n.getReplayPlayer();!a||!Number.isFinite(i)||(n.getMechanicsReviewController()?.clearCurrentClip(),e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:s,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())};return{watchGoalReplay(i,s){const a=n.getReplayPlayer();if(!a||!Number.isFinite(i))return;if(n.getMechanicsReviewController()?.clearCurrentClip(),s!==null&&a.replay.players.some(o=>o.id===s)){a.setAttachedPlayer(s),a.setCameraViewMode("follow");const o=n.getCameraControlsController();o&&(o.freeCameraPreset=null)}e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate()},cueGoalReplay(i){t(i,!1)},cueTimelineEvent(i){const s=n.getReplayPlayer();s&&(n.getMechanicsReviewController()?.clearCurrentClip(),e(),s.setState({currentTime:ny(i),skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())},applyConfigToReplayPlayer(i){const s=n.getReplayPlayer();if(!s)return;s.setState(Y8(i.playback,i.camera,i));const a=n.getCameraControlsController();a&&(a.freeCameraPreset=i.camera.freePreset??null),i.camera.mode==="free"&&i.camera.freePreset&&s.setFreeCameraPreset(i.camera.freePreset),n.syncBoostPadOverlayPlugin(),n.setupActiveModules(),n.renderModuleSummary(),n.renderModuleSettings(),n.renderStatsWindows(s.getState().frameIndex)}}}function a9(n){let e=!1,t=null;const i=()=>n.getFloatingWindowController()?.getSingletonConfigs()??[],s=()=>n.getStatsWindowsController()?.getConfigs()??[],a=()=>{const o=n.getActiveModulesRuntime(),l=n.getReplayPlayer();return q8({playback:X8({replayPlayer:l,playbackRate:n.playbackRate,skipPostGoalTransitions:n.skipPostGoalTransitions,skipKickoffs:n.skipKickoffs}),camera:K8({replayPlayer:l,cameraControlsController:n.getCameraControlsController()}),activeTimelineEventSourceIds:o.getActiveTimelineEventSourceIds(),activeTimelineRangeModuleIds:o.getActiveTimelineRangeModuleIds(),activeMechanicTimelineKinds:o.getActiveMechanicTimelineKinds(),activeRenderEffectModuleIds:o.getActiveRenderEffectModuleIds(),initialConfig:n.getInitialConfig(),replayPlayer:l,boostPadOverlayEnabled:o.getBoostPadOverlayEnabled(),recording:n.getRecordingWindowController()?.getConfigSnapshot()??{},singletonWindows:i(),statsWindows:s(),moduleConfigs:W8(n.modules)})},r=o=>{z8($1(n.modules),o)};return{setApplyingConfig(o){e=o},reset(){t!==null&&(window.clearTimeout(t),t=null),e=!1},scheduleConfigUrlUpdate(){e||(t!==null&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null;const o=z1(new URL(window.location.href),a());window.history.replaceState(window.history.state,"",o)},150))},applyConfigToStaticControls(o){if(n.getActiveModulesRuntime().applyOverlayConfig(o.overlays),n.skipPostGoalTransitions.checked=o.playback.skipPostGoalTransitions??n.skipPostGoalTransitions.checked,n.skipKickoffs.checked=o.playback.skipKickoffs??n.skipKickoffs.checked,n.hitboxWireframes.checked=o.overlays.hitboxWireframes,n.hitboxOnlyMode.checked=o.overlays.hitboxOnlyMode,n.getCameraControlsController()?.applyNameplateLiftUu(o.camera.nameplateLiftUu),n.getCameraControlsController()?.setAutoPossessionEnabled(o.camera.autoPossession??!1,{requestConfigSync:!1}),o.playback.rate!==void 0){const l=Df(o.playback.rate);n.playbackRate.value=`${l}`,n.playbackRateReadout.textContent=wy(l)}n.getRecordingWindowController()?.applyConfig(o.recording),r(o.moduleConfigs),n.getFloatingWindowController()?.applySingletonConfigs(o.singletonWindows),n.getStatsWindowsController()?.replaceFromConfig(o.statsWindows),n.renderModuleSummary(),n.renderModuleSettings(),n.renderTimelineEventCount()}}}function r9(n){const e=t=>{const i=n.getLauncherToggle();n.getLauncherMenu().hidden=!t,i.setAttribute("aria-label",t?"Close menu":"Open menu"),i.setAttribute("aria-expanded",t?"true":"false")};return{bringWindowToFront(t){n.getFloatingWindowController()?.bringToFront(t)},showWindow(t){n.getFloatingWindowController()?.show(t)},toggleWindow(t){n.getFloatingWindowController()?.toggle(t)},hideWindow(t){n.getFloatingWindowController()?.hide(t)},setLauncherOpen:e,openReplayFilePicker(){n.getFileInput().click(),e(!1)},installWindowDragging(t,i){n.getFloatingWindowController()?.installDragging(t,i)},getElementWindowId(t){return t.closest("[data-window-id]")?.dataset.windowId??null}}}const Q_=4096,xr=5120,o9=893,l9=642,ts=1/105;class c9{constructor(e){this.options=e,this.options.body.innerHTML=` +
`}).join("")}
`},renderFocusedPlayerStats(e,t,i){return`
Events${be(i.statsTimeline,"dodge").filter(a=>Ct(a.player)===e).length}
`}}}function LW(){return{id:"half-flip",label:"Half Flip",setup(){},teardown(){},onBeforeRender(){},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,pw(i.half_flip),i.half_flip?.is_last_half_flip?'Last Half Flip':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?pw(i.half_flip):""}}}function kW(){return{id:"wavedash",label:"Wavedash",setup(){},teardown(){},onBeforeRender(){},getTimelineEvents(n){return CG(n.statsTimeline,n.replay)},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,mw(i.wavedash),i.wavedash?.is_last_wavedash?'Last Wavedash':"")):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?mw(i.wavedash):""}}}function DW(){return ui({id:"whiff",label:"Whiff",select:n=>n.whiff,render:n=>tW(n),getTimelineEvents(n){return LG(n.statsTimeline,n.replay)}})}function OW(n){let e=null,t=null;const i=new Set,s=["speed_band","height_band"];return{id:"movement",label:"Movement",setup(){a()},teardown(){},onBeforeRender(){},getConfig(){return{breakdownClasses:r()}},applyConfig(o){if(i.clear(),o&&typeof o=="object"&&!Array.isArray(o)){const l=o.breakdownClasses;if(Array.isArray(l))for(const c of l)s.includes(c)&&i.add(c)}a(),n.rerenderCurrentState()},renderStats(o,l){const c=Ht(l.statsFrameLookup,o);return c?ci(c.players,u=>En(u.name,u.is_team_0,nw(u.movement,{breakdownClasses:r()}))):""},renderFocusedPlayerStats(o,l,c){const u=Sn(c,l,o);return u?nw(u.movement,{breakdownClasses:r()}):""},renderSettings(){if(!e){e=document.createElement("div"),e.className="module-settings-card";const o=document.createElement("div");o.className="module-settings-header";const l=document.createElement("div"),c=document.createElement("p");c.className="module-settings-eyebrow",c.textContent="Stat display";const u=document.createElement("h3");u.textContent="Movement breakdown",l.append(c,u),t=document.createElement("strong"),t.className="metric-readout",o.append(l,t);const d=document.createElement("div");d.className="module-settings-options";for(const h of[{className:"speed_band",label:"Speed band"},{className:"height_band",label:"Height band"}]){const f=document.createElement("label");f.className="toggle";const p=document.createElement("input");p.type="checkbox",p.dataset.breakdownClass=h.className,p.addEventListener("change",()=>{p.checked?i.add(h.className):i.delete(h.className),a(),n.rerenderCurrentState(),n.requestConfigSync?.()});const g=document.createElement("span");g.textContent=h.label,f.append(p,g),d.append(f)}e.append(o,d)}return a(),e}};function a(){if(e){for(const o of e.querySelectorAll("input[data-breakdown-class]")){const l=o.dataset.breakdownClass;o.checked=l?i.has(l):!1}if(t){const o=r();t.textContent=o.length>0?o.map(l=>({speed_band:"Speed band",height_band:"Height band"})[l]).join(" + "):"Total only"}}}function r(){return s.filter(o=>i.has(o))}}function FW(){return ui({id:"powerslide",label:"Powerslide",select:n=>n.powerslide,render:n=>eW(n),getTimelineEvents(n){return SG(n.statsTimeline,n.replay)}})}function NW(){return ui({id:"rotation",label:"Rotation",select:n=>n.rotation,render:n=>X$(n)})}function UW(){return ui({id:"demo",label:"Demo",select:n=>n.demo,render:n=>nW(n)})}function BW(){return ui({id:"bump",label:"Bump",select:n=>n.bump,render:n=>iW(n),getTimelineEvents(n){return AG(n.statsTimeline,n.replay)}})}function zW(){let n=null,e=1;return{id:C1,label:"Relative Positioning",setup(t){e=t.fieldScale,n=new u4(t.player.sceneState.replayRoot,t.replay,e)},teardown(){n?.dispose(),n=null},onBeforeRender(t){n?.update(t,e)},renderStats(t,i){const s=Ht(i.statsFrameLookup,t);return s?ci(s.players,a=>{const r=n$(i.replay,Ct(a.player_id),t),o=t$[r];return En(a.name,a.is_team_0,ow(a.positioning),`${o}`)}):""},renderFocusedPlayerStats(t,i,s){const a=Sn(s,i,t);return a?ow(a.positioning):""}}}function HW(){return{id:"absolute-positioning",label:"Absolute Positioning",setup(n){aw.acquire(n)},teardown(){aw.release()},onBeforeRender(){},getTimelineRanges(n){return e$(n.statsTimeline,n.replay)},renderStats(n,e){const t=Ht(e.statsFrameLookup,n);return t?ci(t.players,i=>En(i.name,i.is_team_0,lw(i.positioning))):""},renderFocusedPlayerStats(n,e,t){const i=Sn(t,e,n);return i?lw(i.positioning):""}}}function VW(n,e={}){return[gW(),yW(),vW(),bW(),xW(),EW(),AW(),CW(),i$(n),s$(),a$(),r$(),o$(),zW(),HW(),NW(),IW(),PW(),LW(),kW(),mW(n),DW(),RW(),TW(),MW(),SW(),_W(n,e.boostPickupFilters),wW(),OW(n),FW(),UW(),BW()]}const GW=new Set(["player_id","name","is_team_0"]),$W=["is_last_","time_since_last_","frames_since_last_"];function WW(n){return n===null||typeof n=="number"||typeof n=="string"||typeof n=="boolean"||Array.isArray(n)}function XW(n,e){let t=n;for(const i of e){if(!t||typeof t!="object"||Array.isArray(t))return;t=t[i]}return t}function KW(n){return n==null?"--":typeof n=="number"?Number.isFinite(n)?Number.isInteger(n)?`${n}`:`${Number(n.toFixed(3))}`:"--":typeof n=="boolean"?n?"true":"false":Array.isArray(n)?n.length===0?"[]":JSON.stringify(n):`${n}`}function qW(n,e){if($W.some(a=>n.startsWith(a)))return!0;const t=n.match(/^last_(.+)_time$/),i=n.match(/^last_(.+)_frame$/),s=t?.[1]??i?.[1];return s?`is_last_${s}`in e||`time_since_last_${s}`in e||`frames_since_last_${s}`in e:!1}function Z_(n,e,t,i){if(!n||typeof n!="object"||Array.isArray(n))return;const s=n;for(const[a,r]of Object.entries(s)){if(e==="player"&&t.length===0&&GW.has(a)||qW(a,s))continue;const o=[...t,a];if(WW(r)){const l=`${e}:${o.join(".")}`;i.push({id:l,label:o.join("."),category:o[0]??e,scope:e,path:o,read(c){return XW(c,o)},format:KW});continue}Z_(r,e,o,i)}}function YW(n){const e=new Set;return n.filter(t=>e.has(t.id)?!1:(e.add(t.id),!0))}function O1(n,e){const t=[];return n&&Z_(n,"player",[],t),e&&Z_(e,"team",[],t),YW(t).sort((i,s)=>i.label.localeCompare(s.label))}function jW(){return O1(_y(),Vo())}function Go(n){return n?O1(n.players[0]??_y(),n.team_zero??n.team_one??Vo()):jW()}function F1(n){return n.toLowerCase().replace(/[_/.-]+/g," ").replace(/\s+/g," ").trim()}function ZW(n){return F1(n).split(" ").filter(Boolean)}function JW(n,e){const t=ZW(e);if(t.length===0)return 0;const i=F1([n.scope,n.category,n.label,n.id,...n.path].join(" "));let s=0;for(const a of t){const r=i.indexOf(a);if(r<0)return null;s+=r}return s+i.length/1e3}function QW(n,e){return n.map((t,i)=>({definition:t,index:i,score:JW(t,e)})).filter(t=>t.score!==null).sort((t,i)=>t.score-i.score||t.index-i.index).map(t=>t.definition)}function Ai(n){if(!Number.isFinite(n))return"--";const e=Math.floor(Math.max(0,n)/60),t=Math.max(0,n)-e*60;return`${e}:${t.toFixed(1).padStart(4,"0")}`}class e8{constructor(e){this.options=e}statsWindows=new Map;nextStatsWindowId=1;getConfigs(){return[...this.statsWindows.values()].map(e=>({id:e.id,kind:e.kind,placement:this.options.readWindowPlacement(e.element),playerId:e.playerId,team:e.team,entries:e.entries.map(t=>({statId:t.statId,targetId:t.targetId}))}))}clear(){for(const e of this.statsWindows.values())e.element.remove();this.statsWindows.clear(),this.nextStatsWindowId=1}replaceFromConfig(e){this.clear();for(const t of e)this.create(t.kind,t)}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0,t={}){for(const i of this.statsWindows.values())t.preserveOpenPickers&&(i.pickerOpen||i.element.contains(document.activeElement))||this.renderStatsWindow(i,e)}create(e,t){const i=t?.id??`stats-${this.nextStatsWindowId++}`,s=Number.parseInt(i.replace(/^stats-/,""),10);Number.isFinite(s)&&(this.nextStatsWindowId=Math.max(this.nextStatsWindowId,s+1));const{x:a,y:r}=this.getStatsWindowDefaultPosition(),o=document.createElement("section");o.className="stats-window",o.dataset.windowId=i,o.style.setProperty("--window-x",`${a}px`),o.style.setProperty("--window-y",`${r}px`),t&&this.options.applyWindowPlacement(o,t.placement);const l=document.createElement("header");l.className="stats-window-header";const c=document.createElement("div");c.className="stats-window-actions";const u=document.createElement("button");if(u.type="button",u.className="stats-window-action",u.textContent="Hide",c.append(u),this.hasStatsWindowScopeSelector(e))l.classList.add("stats-window-header-actions-only"),l.append(c);else{const f=document.createElement("h2");f.textContent=this.getStatsWindowTitle(e),l.append(f,c)}const d=document.createElement("div");d.className="stats-window-body",o.append(l,d),this.options.layer.append(o);const h={id:i,kind:e,entries:t?.entries.map(f=>({key:`${i}:${f.statId}:${f.targetId??"scope"}`,statId:f.statId,targetId:f.targetId}))??[],playerId:t?.playerId??this.options.getReplayPlayer()?.replay.players[0]?.id??null,team:t?.team??"blue",pickerOpen:!1,query:"",element:o,body:d};return u.addEventListener("click",()=>{o.hidden=!0,this.options.requestConfigSync()}),this.statsWindows.set(i,h),t||this.options.bringWindowToFront(o),this.options.setLauncherOpen(!1),this.renderStatsWindow(h),this.options.requestConfigSync(),h}getStatById(e){return this.options.getStatRegistry().find(t=>t.id===e)??null}getCurrentStatsFrame(e){const t=this.options.getStatsFrameLookup();return t?Ht(t,e):null}getTeamSnapshot(e,t){return t==="blue"?e.team_zero??null:e.team_one??null}getTeamLabel(e){return e==="blue"?"Blue":"Orange"}getPlayerTeamClass(e){const t=this.options.getReplayPlayer()?.replay.players.find(i=>i.id===e);return t?ua(t.isTeamZero):null}getTeamScopeClass(e){return ua(e==="blue")}appendGroupedPlayerOptions(e,t){const i=this.options.getReplayPlayer()?.replay.players??[];for(const s of["blue","orange"]){const a=i.filter(o=>o.isTeamZero===(s==="blue"));if(a.length===0)continue;const r=document.createElement("optgroup");r.label=`${this.getTeamLabel(s)} team`;for(const o of a)r.append(new Option(o.name,o.id,o.id===t,o.id===t));e.append(r)}}getStatsWindowScopeTeamClass(e){return e.kind==="player"?this.getPlayerTeamClass(e.playerId):e.kind==="team"?this.getTeamScopeClass(e.team??"blue"):null}getStatTargetTeamClass(e,t){return e.scope==="player"?this.getPlayerTeamClass(t):this.getTeamScopeClass(t==="orange"?"orange":"blue")}getStatsWindowTitle(e){switch(e){case"player":return"Player stats";case"team":return"Team stats";case"all-players":return"All players stats";case"all-teams":return"All teams stats";case"kickoff-overview":return"Kickoff details";case"goals-overview":return"Goal labels";case"ad-hoc":return"Ad hoc stats"}}hasStatsWindowScopeSelector(e){return e==="player"||e==="team"}hasStatsWindowStatPicker(e){return e!=="goals-overview"&&e!=="kickoff-overview"}getStatsWindowAllowedScope(e){switch(e){case"player":case"all-players":return"player";case"team":case"all-teams":return"team";case"kickoff-overview":return null;case"goals-overview":return null;case"ad-hoc":return null}}getStatsWindowDefaultPosition(){const e=this.statsWindows.size*18;return{x:Math.max(12,Math.min(window.innerWidth-360,96+e)),y:Math.max(64,Math.min(window.innerHeight-240,96+e))}}renderStatsWindow(e,t=this.options.getReplayPlayer()?.getState().frameIndex??0){const i=document.activeElement,s=i instanceof HTMLInputElement&&i.dataset.statsWindowSearch===e.id,a=s?i.selectionStart:null,r=s?i.selectionEnd:null,o=s?i.selectionDirection:null;if(e.body.replaceChildren(),this.renderStatsWindowScope(e),this.hasStatsWindowStatPicker(e.kind)&&(this.renderStatsWindowAddControl(e),this.renderStatsWindowPicker(e)),this.renderStatsWindowEntries(e,t),s){const l=e.body.querySelector(`input[data-stats-window-search="${e.id}"]`);l?.focus({preventScroll:!0}),l&&a!==null&&r!==null&&l.setSelectionRange(a,r,o??"none")}}renderStatsWindowScope(e){if(e.kind!=="player"&&e.kind!=="team")return;const t=document.createElement("div");t.className="stats-window-scope-row";const i=document.createElement("select");i.className="stats-window-scope-select";const s=this.getStatsWindowScopeTeamClass(e);s&&i.classList.add(s),i.setAttribute("aria-label",e.kind==="player"?"Player stats target":"Team stats target"),e.kind==="player"?(this.appendGroupedPlayerOptions(i,e.playerId),i.value=e.playerId??"",i.addEventListener("change",()=>{e.playerId=i.value||null,this.renderStatsWindow(e),this.options.requestConfigSync()})):(i.append(new Option("Blue","blue",e.team==="blue",e.team==="blue"),new Option("Orange","orange",e.team==="orange",e.team==="orange")),i.value=e.team??"blue",i.addEventListener("change",()=>{e.team=i.value==="orange"?"orange":"blue",this.renderStatsWindow(e),this.options.requestConfigSync()})),t.append(i),e.body.append(t)}renderStatsWindowAddControl(e){const t=document.createElement("button");if(t.type="button",t.className="stats-window-add-button",t.textContent="+",t.title="Add stat",t.setAttribute("aria-label","Add stat"),t.setAttribute("aria-expanded",String(e.pickerOpen)),this.activateButton(t,()=>{e.pickerOpen=!e.pickerOpen,this.renderStatsWindow(e)}),this.hasStatsWindowScopeSelector(e.kind)){e.body.querySelector(".stats-window-scope-row")?.append(t);return}const i=document.createElement("div");i.className="stats-window-toolbar",i.append(t),e.body.append(i)}activateButton(e,t){let i=!1;e.addEventListener("pointerdown",s=>{e.disabled||(i=!0,s.preventDefault(),t())}),e.addEventListener("click",()=>{if(i){i=!1;return}e.disabled||t()})}renderStatsWindowPicker(e){const t=document.createElement("div");if(t.className="stats-window-picker",t.hidden=!e.pickerOpen,t.hidden){e.body.append(t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=document.createElement("input");s.type="search",s.placeholder="Search stats",s.value=e.query,s.dataset.statsWindowSearch=e.id;const a=document.createElement("div");a.className="stats-window-picker-list",s.addEventListener("input",()=>{e.query=s.value,this.renderStatsWindowPickerList(e,a,i)}),this.renderStatsWindowPickerList(e,a,i),t.append(s,a),e.body.append(t)}renderStatsWindowPickerList(e,t,i){t.replaceChildren();const s=this.options.getStatRegistry(),a=i?s.filter(l=>l.scope===i):s,r=QW(a,e.query),o=new Map;for(const l of r){const c=o.get(l.category)??[];c.push(l),o.set(l.category,c)}for(const[l,c]of o){if(c.length<2)continue;const u=document.createElement("button");u.type="button",u.className="stats-window-picker-item",u.innerHTML=`Add all ${l}${c.length}`,this.activateButton(u,()=>{for(const d of c)this.addStatToWindow(e,d);this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(u)}for(const l of r){const c=document.createElement("button");c.type="button",c.className="stats-window-picker-item",c.innerHTML=`${l.label}${l.scope}`,c.disabled=e.kind!=="ad-hoc"&&e.entries.some(u=>u.statId===l.id),this.activateButton(c,()=>{this.addStatToWindow(e,l),this.renderStatsWindow(e),this.options.requestConfigSync()}),t.append(c)}if(r.length===0){const l=document.createElement("p");l.className="stat-window-empty",l.textContent=s.length===0?"No stats available.":"No matching stats.",t.append(l)}}addStatToWindow(e,t){const i=e.kind==="ad-hoc"?this.getDefaultAdHocTargetId(t):void 0;e.entries.some(s=>s.statId===t.id&&s.targetId===i)||e.entries.push({key:`${e.id}:${t.id}:${i??"scope"}`,statId:t.id,targetId:i})}getDefaultAdHocTargetId(e){return e.scope==="player"?this.options.getReplayPlayer()?.replay.players[0]?.id??"":"blue"}removeStatFromWindow(e,t){const i=e.entries.findIndex(s=>s.key===t);i>=0&&e.entries.splice(i,1)}renderStatsWindowEntries(e,t){if(e.kind==="goals-overview"){this.renderGoalLabelsOverview(e);return}if(e.kind==="kickoff-overview"){this.renderKickoffOverview(e,t);return}const i=this.getStatsWindowAllowedScope(e.kind),s=e.entries.map(r=>({entry:r,definition:this.getStatById(r.statId)})).filter(r=>r.definition!==null&&(!i||r.definition.scope===i));if(s.length===0){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="No stats added.",e.body.append(r);return}const a=this.getCurrentStatsFrame(t);if(!a){const r=document.createElement("p");r.className="stat-window-empty",r.textContent="Load a replay to show stats.",e.body.append(r);return}if(e.kind==="all-players"){this.renderAllPlayersStats(e,a,s);return}if(e.kind==="all-teams"){this.renderAllTeamsStats(e,a,s);return}if(e.kind==="player"){const r=e.playerId?a.players.find(o=>Ct(o.player_id)===e.playerId)??null:null;this.renderScopedStatList(e,r,s);return}if(e.kind==="team"){this.renderScopedStatList(e,this.getTeamSnapshot(a,e.team??"blue"),s);return}e.kind==="ad-hoc"&&this.renderAdHocStats(e,a,s)}renderGoalLabelsOverview(e){const t=this.options.getStatsTimeline(),i=this.options.getReplayPlayer()?.replay??null;if(!t||!i){this.appendStatsWindowEmpty(e,"Load a replay to show goal labels.");return}const s=[...be(t,"goal_context")].sort((o,l)=>o.time-l.time),a=s.map((o,l)=>l);if(a.length===0){this.appendStatsWindowEmpty(e,"No goals loaded.");return}const r=document.createElement("div");r.className="goal-label-list";for(const o of a){const l=s[o]??null,c=[...l?.tags??[]].sort((M,C)=>M.kind.localeCompare(C.kind)||C.metadata.confidence-M.metadata.confidence),u=l?.time??0,d=l?.scorer??null,h=d?Ct(d):null,f=d?i.players.find(M=>M.id===h)?.name??h:"Unknown scorer",p=l?.scoring_team_is_team_0??null,g=document.createElement("section");g.className="goal-label-item",p!==null&&g.classList.add(ua(p));const _=document.createElement("header"),m=document.createElement("h3");m.textContent=`Goal ${o+1}`;const v=document.createElement("span");v.textContent=`${Ai(u)} · ${f}`,_.append(m,v);const y=document.createElement("div");if(y.className="goal-label-tags",c.length===0){const M=document.createElement("span");M.className="goal-label-tag goal-label-tag-empty",M.textContent="Unlabeled",y.append(M)}else for(const M of c){const C=document.createElement("span");C.className="goal-label-tag";const w=g1(M);C.textContent=`${Dn(M.kind)} ${Math.round(M.metadata.confidence*100)}%${w?` - ${w}`:""}`,y.append(C)}const b=document.createElement("div");b.className="goal-label-actions";const S=document.createElement("button");S.type="button",S.className="goal-label-watch",S.textContent="Watch",S.addEventListener("click",()=>{this.options.watchGoalReplay(u,h)});const x=document.createElement("button");x.type="button",x.textContent="Cue",x.addEventListener("click",()=>{this.options.cueGoalReplay(u)}),b.append(S,x),g.append(_,y,b),r.append(g)}e.body.append(r)}renderKickoffOverview(e,t){const i=this.options.getStatsTimeline(),s=this.options.getReplayPlayer()?.replay??null;if(!i||!s){this.appendStatsWindowEmpty(e,"Load a replay to show kickoff details.");return}const a=this.getClosestKickoffEvent(i,t);if(!a){this.appendStatsWindowEmpty(e,"No kickoff events loaded.");return}const r=a.payload.payload,o=document.createElement("section");o.className="kickoff-overview";const l=document.createElement("header");l.className="kickoff-overview-hero";const c=document.createElement("div"),u=document.createElement("h3");u.textContent=this.formatKickoffTitle(a);const d=document.createElement("span");d.textContent=`Nearest kickoff · resolved at ${Ai(r.end_time)}`,c.append(u,d);const h=document.createElement("strong"),f=this.teamClassFromNullable(r.winning_team_is_team_0);h.className="kickoff-overview-victor",f&&h.classList.add(f),h.textContent=this.formatOutcome(r),l.append(c,h);const p=document.createElement("div");p.className="kickoff-overview-summary",p.append(this.renderKickoffMetric("Win strength",`${this.formatNullableNumber(r.win_strength,2)} · ${this.formatKickoffLabelValue("kickoff_win_strength",r.win_strength_band)}`),this.renderKickoffMetric("First touch",this.formatFirstTouch(r)),this.renderKickoffMetric("Advantage",this.formatAdvantage(r)),this.renderKickoffMetric("Contested",this.formatContested(r)));const g=document.createElement("div");g.className="kickoff-detail-grid",g.append(this.renderKickoffDetail("Kickoff start",Ai(r.start_time)),this.renderKickoffDetail("Movement start",Ai(r.movement_start_time)),this.renderKickoffDetail("Live action",r.live_action_start_time===null?"--":Ai(r.live_action_start_time)),this.renderKickoffDetail("First touch",r.first_touch_time===null?"--":Ai(r.first_touch_time)),this.renderKickoffDetail("Resolution",Ai(r.end_time)),this.renderKickoffDetail("After first touch",this.formatSeconds(r.advantage_seconds_after_first_touch)));const _=document.createElement("div");_.className="kickoff-strategy-list",_.append(this.renderKickoffTeamStrategy("Blue",r.team_zero_taker,r.team_zero_non_takers),this.renderKickoffTeamStrategy("Orange",r.team_one_taker,r.team_one_non_takers)),o.append(l,p,g,_),e.body.append(o)}getClosestKickoffEvent(e,t){return yc(e).filter(s=>s.payload.kind==="kickoff").sort((s,a)=>{const r=this.kickoffFrameDistance(s.payload.payload,t),o=this.kickoffFrameDistance(a.payload.payload,t);return r!==o?r-o:s.payload.payload.start_frame-a.payload.payload.start_frame})[0]??null}kickoffFrameDistance(e,t){return t>=e.start_frame&&t<=e.end_frame?0:Math.min(Math.abs(t-e.start_frame),Math.abs(t-e.end_frame))}renderKickoffMetric(e,t){const i=document.createElement("div");i.className="kickoff-metric";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffDetail(e,t){const i=document.createElement("div");i.className="kickoff-detail-row";const s=document.createElement("span");s.textContent=e;const a=document.createElement("strong");return a.textContent=t,i.append(s,a),i}renderKickoffTeamStrategy(e,t,i){const s=document.createElement("section");s.className=`kickoff-strategy-team ${e==="Blue"?"team-blue":"team-orange"}`;const a=document.createElement("h4");a.textContent=e,s.append(a);const r=document.createElement("p");if(r.className="kickoff-strategy-line",r.textContent=t?`${this.getPlayerName(t.player)}: ${this.formatKickoffLabelValue("kickoff_approach",t.approach)} from ${this.formatKickoffLabelValue("kickoff_spawn",t.spawn_position)} (${this.formatKickoffLabelValue("taker_outcome",t.outcome)}, ${this.formatSeconds(t.time_to_ball)})`:"No taker detected",s.append(r),i.length>0){const o=document.createElement("ul");o.className="kickoff-support-list";for(const l of i){const c=document.createElement("li");c.textContent=`${this.getPlayerName(l.player)}: ${this.formatKickoffLabelValue("support_behavior",l.support_behavior)} from ${this.formatKickoffLabelValue("kickoff_spawn",l.spawn_position)}`,o.append(c)}s.append(o)}return s}formatOutcome(e){return e.winning_team_is_team_0===!0?"Blue wins":e.winning_team_is_team_0===!1?"Orange wins":e.outcome==="neutral"?"Neutral":"Unknown"}formatFirstTouch(e){if(!e.first_touch_player)return"--";const t=e.first_touch_team_is_team_0===!0?"Blue":e.first_touch_team_is_team_0===!1?"Orange":"Unknown",i=e.first_touch_time===null?"--":Ai(e.first_touch_time);return`${t} · ${this.getPlayerName(e.first_touch_player)} · ${i}`}formatAdvantage(e){if(e.advantage==="no_advantage")return"No advantage";const t=e.advantage_team_is_team_0===!0?"Blue":e.advantage_team_is_team_0===!1?"Orange":"Unknown",i=e.advantage.replace(/^team_(zero|one)_/,""),s=e.advantage_player?` · ${this.getPlayerName(e.advantage_player)}`:"",a=e.advantage_time===null?"":` · ${Ai(e.advantage_time)}`;return`${t} ${this.formatKickoffLabelValue("kickoff_advantage",i)}${s}${a}`}formatContested(e){return e.kickoff_possession_outcome==="contested"?"Yes":e.kickoff_possession_team_is_team_0===!0?`No · Blue ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:e.kickoff_possession_team_is_team_0===!1?`No · Orange ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`:`No · ${this.formatPossessionOutcome(e.kickoff_possession_outcome)}`}formatPossessionOutcome(e){return e.endsWith("_advantage")?"advantage":e.endsWith("_possession")?"possession":this.formatKickoffLabelValue("kickoff_possession_outcome",e)}formatKickoffType(e){return this.formatKickoffLabelValue("kickoff_type",e)}formatKickoffTitle(e){const t=e.payload.payload,i=this.formatKickoffDirection(t.kickoff_direction),s=[this.formatKickoffType(t.kickoff_type),i].filter(Boolean).join(" ");return[e.meta.label,s].filter(Boolean).join(" · ")}formatKickoffDirection(e){return e==="unknown"?"":`(${this.formatKickoffLabelValue("kickoff_direction",e)})`}formatNullableNumber(e,t){return e===null||!Number.isFinite(e)?"--":e.toFixed(t)}formatSeconds(e){return e===null||!Number.isFinite(e)?"--":`${e.toFixed(2)}s`}formatLabel(e){return e.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_").replaceAll("_"," ").replace(/\b\w/g,t=>t.toUpperCase())}formatKickoffLabelValue(e,t){const i=t.replace(/^team_zero_/,"blue_").replace(/^team_one_/,"orange_");return e==="kickoff_advantage"?this.formatLabel(i.replace(/^blue_/,"").replace(/^orange_/,"")):e==="kickoff_possession_outcome"?this.formatLabel(i.replace(/^blue_/,"Blue ").replace(/^orange_/,"Orange ")):this.formatLabel(i)}teamClassFromNullable(e){return e===null?null:ua(e)}getPlayerName(e){const t=Ct(e);return this.options.getReplayPlayer()?.replay.players.find(i=>i.id===t)?.name??t}appendStatsWindowEmpty(e,t){const i=document.createElement("p");i.className="stat-window-empty",i.textContent=t,e.body.append(i)}renderScopedStatList(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i)s.append(this.renderStatRow(e,a,r,t?r.format(r.read(t)):"--"));e.body.append(s)}renderAllPlayersStats(e,t,i){const s=document.createElement("div");s.className="stats-window-team-list";for(const a of["blue","orange"]){const r=t.players.filter(h=>h.is_team_0===(a==="blue"));if(r.length===0)continue;const o=document.createElement("section");o.className=`stats-window-team-group ${this.getTeamScopeClass(a)}`;const l=document.createElement("header");l.className="stats-window-team-header";const c=document.createElement("h3");c.textContent=`${this.getTeamLabel(a)} team`;const u=document.createElement("span");u.textContent=`${r.length} player${r.length===1?"":"s"}`,l.append(c,u),o.append(l);const d=document.createElement("div");d.className="stats-window-entity-list";for(const h of r){const f=document.createElement("section");f.className=`stats-window-entity ${ua(h.is_team_0)}`;const p=document.createElement("h4");p.className="stats-window-entity-title",p.textContent=h.name,f.append(p);for(const{entry:g,definition:_}of i)f.append(this.renderStatRow(e,g,_,_.format(_.read(h))));d.append(f)}o.append(d),s.append(o)}e.body.append(s)}renderAllTeamsStats(e,t,i){const s=document.createElement("div");s.className="stats-window-entity-list";for(const a of["blue","orange"]){const r=this.getTeamSnapshot(t,a),o=document.createElement("section");o.className=`stats-window-entity ${this.getTeamScopeClass(a)}`;const l=document.createElement("h3");l.className="stats-window-entity-title",l.textContent=this.getTeamLabel(a),o.append(l);for(const{entry:c,definition:u}of i)o.append(this.renderStatRow(e,c,u,r?u.format(u.read(r)):"--"));s.append(o)}e.body.append(s)}renderAdHocStats(e,t,i){const s=document.createElement("div");s.className="stats-window-stat-list";for(const{entry:a,definition:r}of i){const o=this.getAdHocTarget(t,r,a.targetId);s.append(this.renderStatRow(e,a,r,o?r.format(r.read(o)):"--"))}e.body.append(s)}getAdHocTarget(e,t,i){return t.scope==="player"?e.players.find(s=>Ct(s.player_id)===i)??e.players[0]??null:this.getTeamSnapshot(e,i==="orange"?"orange":"blue")}renderStatRow(e,t,i,s){const a=document.createElement("div");a.className="stats-window-stat-row";const r=document.createElement("span");if(r.className="stats-window-stat-name",r.textContent=i.label,e.kind==="ad-hoc"){const c=document.createElement("select");c.className="stats-window-stat-target";const u=this.getStatTargetTeamClass(i,t.targetId);u&&c.classList.add(u),i.scope==="player"?this.appendGroupedPlayerOptions(c,t.targetId):c.append(new Option("Blue","blue",t.targetId==="blue",t.targetId==="blue"),new Option("Orange","orange",t.targetId==="orange",t.targetId==="orange")),c.value=t.targetId??"",c.addEventListener("change",()=>{const d=c.value;if(e.entries.some(f=>f!==t&&f.statId===t.statId&&f.targetId===d)){this.renderStatsWindow(e);return}const h=e.entries.findIndex(f=>f.key===t.key);h>=0&&(e.entries[h]={key:`${e.id}:${t.statId}:${d}`,statId:t.statId,targetId:d}),this.renderStatsWindow(e),this.options.requestConfigSync()}),r.append(" ",c)}const o=document.createElement("span");o.className="stats-window-stat-value",o.textContent=s;const l=document.createElement("button");return l.type="button",l.className="stats-window-stat-remove",l.textContent="x",l.addEventListener("click",()=>{this.removeStatFromWindow(e,t.key),this.renderStatsWindow(e),this.options.requestConfigSync()}),a.append(r,o,l),a}}function t8(n){return new e8(n)}const n8=new Set(["module:dodge","module:touch","module:powerslide"]),i8=["stats-stream:"],Ih=["#3b82f6","#06b6d4","#22c55e","#a855f7","#f97316","#ef4444","#f59e0b","#ec4899"],Ff="#d1d9e0",Ty=Ih[0],My=Ih[4],s8=[{id:"core",label:"Shots, saves, assists",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="shot"||e.kind==="save"||e.kind==="assist")}},{id:"demo",label:"Demos",buildEvents(n){return n.replay.timelineEvents.filter(e=>e.kind==="demo")}}],a8=[];function N1(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function U1(n){if(typeof n=="string"&&n.length>0)return n;if(!N1(n))return null;const[e,t]=Object.entries(n)[0]??[];return!e||t==null?null:typeof t=="string"||typeof t=="number"?`${e}:${t}`:`${e}:${JSON.stringify(t)}`}function B1(n){return n.split(/[_-]+/).filter(e=>e.length>0).map(e=>e.slice(0,1).toUpperCase()).join("").slice(0,3)||"E"}function r8(n){if(typeof n!="number"||!Number.isFinite(n))return null;const e=Math.abs(n)<1?2:1;return`${n.toFixed(e).replace(/\.0+$/,"").replace(/(\.\d*[1-9])0+$/,"$1")}s`}function Zi(n){return typeof n!="string"||n.length===0?null:n.split(/[_-]+/).filter(e=>e.length>0).map(e=>`${e.slice(0,1).toUpperCase()}${e.slice(1)}`).join(" ")}function o8(n){return n==="team_zero_side"?"Blue side":n==="team_one_side"?"Orange side":n==="neutral"?"Neutral zone":Zi(n)}function l8(n){const e=Zi(n);return e?`${e.toLowerCase()} third`:null}function c8(n){return n==="team_zero_third"?"Blue third":n==="team_one_third"?"Orange third":n==="neutral_third"?"Neutral third":Zi(n)}function u8(n){return n==="team_zero"?"Blue":n==="team_one"?"Orange":n==="neutral"?"Neutral":Zi(n)}function Pd(n){return N1(n.payload.payload)?n.payload.payload:{}}function z1(n){return n===!0?Ty:n===!1?My:null}function d8(n){return n==="team_zero_side"?Ty:n==="team_one_side"?My:n==="neutral"?Ff:null}function h8(n){return n==="team_zero"?Ty:n==="team_one"?My:n==="neutral"?Ff:null}function f8(n){return typeof n=="boolean"?z1(n):null}const p8={ball_half(n){return d8(Pd(n).field_half)},possession(n){return h8(Pd(n).possession_state)},player_possession(n){return f8(Pd(n).is_team_0)}};function H1(n,e,t){return p8[n]?.(e)??z1(t)??Ff}function mi(n){return n.filter(e=>!!e).join(" | ")}function m8({event:n,playerName:e,streamLabel:t,teamLabel:i}){const s=Pd(n),a=r8(s.duration);if(n.payload.kind==="ball_half"){const r=o8(s.field_half),o=s.active===!1?"Ball half inactive":r?`Ball on ${r.toLowerCase()}`:null;return mi([o??t,a])}if(n.payload.kind==="ball_third"){const r=c8(s.field_third),o=s.active===!1?"Ball third inactive":r?`Ball in ${r.toLowerCase()}`:null;return mi([o??t,a])}if(n.payload.kind==="territorial_pressure"){const r=Zi(s.end_reason),o=`${i??""} territorial pressure`.trim();return mi([r?`${o} ended: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="possession"){const r=u8(s.possession_state),o=l8(s.field_third),l=r?`${r} possession`:t;return mi([l,o,a])}if(n.payload.kind==="controlled_play"){const r=e?`${e} controlled play`:t;return mi([r,a])}if(n.payload.kind==="ball_carry"){const r=e?`${e} ${t.toLowerCase()}`:t;return mi([r,a])}if(n.payload.kind==="player_activity"){const r=Zi(s.state),o=e?`${e} positioning`:t;return mi([r?`${o} ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="field_third"){const r=Zi(s.state),o=e?`${e} positioning`:t;return mi([r?`${o} in ${r.toLowerCase()} third`:o,a])}if(n.payload.kind==="field_half"){const r=Zi(s.state),o=e?`${e} positioning`:t;return mi([r?`${o} in ${r.toLowerCase()} half`:o,a])}if(n.payload.kind==="ball_depth"){const r=Zi(s.state),o=e?`${e} ball depth`:t;return mi([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="depth_role"){const r=Zi(s.state),o=e?`${e} depth role`:t;return mi([r?`${o}: ${r.toLowerCase()}`:o,a])}if(n.payload.kind==="shadow_defense"){const r=e?`${e} shadow defense`:t;return mi([r,a])}if(n.payload.kind==="rotation_role"){const r=Zi(s.state),o=e?`${e} rotation`:t;return mi([r?`${o}: ${r.toLowerCase()}`:o,a])}return e?`${e} ${t.toLowerCase()}`:t}function _8(n,e,t){const i=Dn(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{const o=a.meta.timing.type==="moment"?{time:a.meta.timing.time,frame:a.meta.timing.frame}:{time:a.meta.timing.end_time,frame:a.meta.timing.end_frame},l=U1(a.meta.primary_player),c=l?s.get(l)??l:null,u=a.meta.team_is_team_0??null,d=u==null?null:u?"Blue":"Orange",h=a.meta.id||`${e}:${o.frame??o.time}:${r}`,f=H1(e,a,u);return[{id:`stats-stream:${h}`,time:n.replay.frames[o.frame??-1]?.time??o.time,frame:o.frame,kind:e,label:m8({event:a,playerName:c,streamLabel:i,teamLabel:d}),shortLabel:B1(e),playerId:l,playerName:c,isTeamZero:u,color:f}]})}function g8(n,e,t){const i=Dn(e),s=new Map(n.replay.players.map(a=>[a.id,a.name]));return t.flatMap((a,r)=>{if(a.meta.timing.type!=="span")return[];const o={startTime:a.meta.timing.start_time,endTime:a.meta.timing.end_time,startFrame:a.meta.timing.start_frame,endFrame:a.meta.timing.end_frame},l=a.meta.team_is_team_0??null,c=l==null?null:l?"Blue":"Orange",u=U1(a.meta.primary_player),d=u?s.get(u)??u:null,h=H1(e,a,l),f=a.meta.id||`${e}:${o.startFrame??o.startTime}:${o.endFrame??o.endTime}:${r}`,p=d?`${d} ${i.toLowerCase()}`:c?`${c} ${i.toLowerCase()}`:i;let g=`stats-stream:${e}`,_=i;return a.meta.scope==="player"&&u?(g=`stats-stream:${e}:player:${u}`,_=d?`${d} ${i.toLowerCase()}`:i):a.meta.scope==="team"&&l!=null&&(g=`stats-stream:${e}:team:${l?"0":"1"}`,_=c?`${c} ${i.toLowerCase()}`:i),[{id:`stats-stream:${f}`,startTime:n.replay.frames[o.startFrame??-1]?.time??o.startTime,endTime:Math.max(n.replay.frames[o.startFrame??-1]?.time??o.startTime,n.replay.frames[o.endFrame??-1]?.time??o.endTime),lane:g,laneLabel:_,label:p,shortLabel:B1(e),isTeamZero:l,color:h}]}).sort((a,r)=>a.startTime!==r.startTime?a.startTime-r.startTime:(a.id??"").localeCompare(r.id??""))}function y8(n,e,t,i){return[...new Set([...AM,...yc(n.statsTimeline).map(a=>a.meta.stream)])].flatMap(a=>{const r=yc(n.statsTimeline).filter(u=>u.meta.stream===a);if(i.has(a)&&r.length>0)return[];const o=r.some(u=>u.meta.timing.type==="span"),l=o?g8(n,a,r):[],c=_8(n,a,r);return[{id:`stats-stream:${a}`,playlistId:`stats-stream:${a}`,timelineKey:`stats-stream:${a}`,timelineId:`stats-stream:${a}`,group:"Event streams",label:Dn(a),count:o?l.length:c.length,active:e.has(`stats-stream:${a}`),buildTimelineEvents(){return o?[]:c},buildPlaylistEvents(){return c},buildTimelineRanges:o?()=>l:void 0,setActive(u){t(`stats-stream:${a}`,u)}}]})}function v8(n){return new Set([...n.filter(e=>e.getTimelineEvents).map(e=>e.id),...v1])}function b8(){return[...v1].sort((n,e)=>Dn(n).localeCompare(Dn(e)))}function x8({ctx:n,modules:e,activeTimelineEventSourceIds:t,activeMechanicTimelineKinds:i,toggleEventSource:s,setMechanicTimelineKind:a}){if(!n)return[];const r=[];for(const o of s8){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`replay:${o.id}`,timelineKey:`events:${o.id}`,timelineId:`events:${o.id}`,group:"Replay",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of e.filter(l=>l.getTimelineEvents)){const l=o.getTimelineEvents?.(n)??[],c=l.length;r.push({id:o.id,playlistId:`module:${o.id}`,timelineKey:`module:${o.id}`,timelineId:`module:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}for(const o of a8){const l=o.buildEvents(n),c=l.length;r.push({id:o.id,playlistId:`extra:${o.id}`,timelineKey:`extra:${o.id}`,timelineId:`extra:${o.id}`,group:"Stats",label:o.label,count:c,active:t.has(o.id),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){s(o.id,u)}})}r.push(...y8(n,t,s,v8(e)));for(const o of b8()){const l=y1[o](n.statsTimeline,n.replay),c=l.length;r.push({id:`mechanic:${o}`,playlistId:`mechanic:${o}`,timelineKey:`mechanic:${o}`,timelineId:`mechanic:${o}`,group:"Event types",label:Dn(o),count:c,active:i.has(o),buildTimelineEvents(){return l},buildPlaylistEvents(){return l},setActive(u){a(o,u)}})}return r.sort((o,l)=>o.label.localeCompare(l.label))}function w8(n,e){if(!n)return[];const t=[{id:"replay:goals",group:"Replay",label:"Goals",events:n.replay.timelineEvents.filter(s=>s.kind==="goal")}],i=e.map(s=>({id:s.playlistId,group:s.group,label:s.label,events:s.buildPlaylistEvents()}));return[...t,...i]}function J_(n,e){const t=n.map(i=>i.id);return e===null?new Set(t.filter(i=>!n8.has(i)&&!i8.some(s=>i.startsWith(s)))):new Set(t.filter(i=>e.has(i)))}function S8(n,e){const t=n.playerId??null,i=t?e.findIndex(s=>s.id===t):-1;return i>=0?Ih[i%Ih.length]:n.color??Ff}function T8({sources:n,activeSourceIds:e,replayPlayers:t}){const i=J_(n,e);return n.filter(s=>i.has(s.id)).flatMap(s=>s.events.map((a,r)=>({key:`${s.id}:${a.id??`${a.kind}:${a.time}:${r}`}`,sourceId:s.id,sourceLabel:s.label,event:a,color:S8(a,t)}))).sort((s,a)=>s.event.time!==a.event.time?s.event.time-a.event.time:(s.event.label??s.sourceLabel).localeCompare(a.event.label??a.sourceLabel))}class M8{constructor(e){this.options=e}getSources(e=this.options.getContext()){return x8({ctx:e,modules:this.options.modules,activeTimelineEventSourceIds:this.options.getActiveTimelineEventSourceIds(),activeMechanicTimelineKinds:this.options.getActiveMechanicTimelineKinds(),toggleEventSource:this.options.toggleEventSource,setMechanicTimelineKind:this.options.setMechanicTimelineKind})}countVisibleSources(e){return e.replay.timelineEvents.filter(i=>i.kind==="goal").length+this.getSources(e).filter(i=>i.active).reduce((i,s)=>i+s.count,0)}render(){const{body:e}=this.options;e.replaceChildren();const t=this.getSources();if(t.length===0){const d=document.createElement("p");d.className="stat-window-empty",d.textContent="No events loaded.",e.append(d);return}const i=document.createElement("div");i.className="mechanics-actions";const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.addEventListener("click",()=>{for(const d of t)d.setActive(!0);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const a=document.createElement("span");a.textContent="All events";const r=document.createElement("strong");r.textContent=`${t.length}`,s.append(a,r);const o=document.createElement("button");o.type="button",o.className="module-summary-item",o.addEventListener("click",()=>{for(const d of t)d.setActive(!1);this.options.setupActiveModules(),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()});const l=document.createElement("span");l.textContent="No events";const c=document.createElement("strong");c.textContent="Off",o.append(l,c),i.append(s,o),e.append(i);const u=this.renderSourceList(t);u&&e.append(u)}renderSourceList(e){if(e.length===0)return null;const t=document.createElement("div");t.className="module-list mechanics-list mechanics-event-list",t.style.setProperty("--event-source-columns",`${E8(e.length)}`);for(const i of e){const s=document.createElement("button");s.type="button",s.className="module-summary-item",s.dataset.active=i.active?"true":"false",s.setAttribute("aria-pressed",i.active?"true":"false"),s.addEventListener("click",()=>{i.setActive(!i.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.render(),this.options.renderTimelineEventCount()});const a=document.createElement("span");a.textContent=i.label;const r=document.createElement("strong");r.textContent=`${i.active?"On":"Off"} ${i.count}`,s.append(a,r),t.append(s)}return t}}function E8(n){return window.innerWidth<640?1:window.innerWidth<900?n>=7?2:1:n>=13?3:n>=7?2:1}function C8(n){return new M8(n)}const A8=new Set(["ceiling-shot","fifty-fifty","ball_half",C1,"absolute-positioning","dodge","speed-flip","touch"]),vw="touch";class R8{constructor(e){this.options=e}renderSummary(){const{summary:e}=this.options.elements;e.replaceChildren();const t=this.options.getTimelineSources(),i=t.map(o=>this.renderTimelineSourceToggle(o)),s=[],a=[],r=this.options.getContext();for(const o of this.options.modules){const l=A8.has(o.id);!o.getTimelineEvents&&!o.getTimelineRanges&&!l||(t.length===0&&o.getTimelineEvents&&i.push(this.renderCapabilityToggle(o.id,Bm(o,"events"),"events")),o.getTimelineRanges&&s.push(this.renderCapabilityToggle(o.id,Bm(o,"ranges"),"ranges",r?o.getTimelineRanges(r).length:void 0)),l&&a.push(this.renderCapabilityToggle(o.id,Bm(o,"effects"),"effects")))}a.push(this.renderBoostPickupAnimationToggle()),e.append(Um("Timeline markers",i),Um("Timeline ranges",s),Um("In-game visualizations",a))}renderSettings(){const{settings:e}=this.options.elements;e.replaceChildren();const t=this.options.getContext(),i=this.options.getActiveModules().filter(s=>s.id!=="boost"&&s.id!==vw).map(s=>s.renderSettings?.(t)??null).filter(s=>s instanceof HTMLElement);if(i.length===0){e.hidden=!0,this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow();return}e.hidden=!1,e.append(...i),this.renderBoostPickupFiltersWindow(),this.renderTouchControlsWindow()}renderBoostPickupAnimationToggle(){const e=this.options.getBoostPickupAnimationEnabled(),t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e?"true":"false",t.setAttribute("aria-pressed",e?"true":"false"),t.addEventListener("click",this.options.toggleBoostPickupAnimation);const i=document.createElement("span");i.textContent="Boost pickup animation";const s=document.createElement("strong");return s.textContent=e?"On":"Off",t.append(i,s),t}renderCapabilityToggle(e,t,i,s){const r=this.options.getActiveCapabilityIds(i).has(e),o=document.createElement("button");o.type="button",o.className="module-summary-item",o.dataset.active=r?"true":"false",o.setAttribute("aria-pressed",r?"true":"false"),o.addEventListener("click",()=>{this.options.toggleCapability(e,i,!this.options.getActiveCapabilityIds(i).has(e))});const l=document.createElement("span");l.textContent=t;const c=document.createElement("strong");return c.textContent=bw(r,s),o.append(l,c),o}renderTimelineSourceToggle(e){const t=document.createElement("button");t.type="button",t.className="module-summary-item",t.dataset.active=e.active?"true":"false",t.setAttribute("aria-pressed",e.active?"true":"false"),t.addEventListener("click",()=>{e.setActive(!e.active),this.options.syncTimelineEvents(),this.options.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync(),this.renderSummary()});const i=document.createElement("span");i.textContent=P8(e);const s=document.createElement("strong");return s.textContent=bw(e.active,e.count),t.append(i,s),t}renderBoostPickupFiltersWindow(){const e=this.options.getContext(),t=this.options.boostPickupFilters.renderSettings(e,{showHeader:!1});this.options.elements.boostPickupFilters.replaceChildren(t)}renderTouchControlsWindow(){const e=this.options.getContext(),i=this.options.modules.find(s=>s.id===vw)?.renderSettings?.(e)??null;this.options.elements.touchControls.replaceChildren(),i instanceof HTMLElement&&this.options.elements.touchControls.append(i)}}function Um(n,e){const t=document.createElement("section");t.className="module-summary-group";const i=document.createElement("h3");i.textContent=n;const s=document.createElement("div");return s.className="module-list",s.append(...e),t.append(i,s),t}function bw(n,e){const t=n?"On":"Off";return e==null?t:`${t} ${e}`}function P8(n){return n.group==="Replay"?n.label:`${n.label} events`}function Bm(n,e){const t={"absolute-positioning:ranges":"Position zones","backboard:events":"Backboard","ball-carry:events":"Ball carry","boost:ranges":"Boost pickup timeline","bump:events":"Bump","ceiling-shot:events":"Ceiling shot","demo:events":"Demo","dodge-reset:events":"Dodge refresh","double-tap:events":"Double tap","fifty-fifty:events":"50/50","fifty-fifty:ranges":"50/50","dodge:events":"Dodge","half-flip:events":"Half flip","possession:ranges":"Possession","powerslide:events":"Powerslide","powerslide:ranges":"Powerslide","ball_half:ranges":"Half control","ball_third:ranges":"Third control","rush:ranges":"Rush","speed-flip:events":"Speed flip","touch:events":"Touch","wavedash:events":"Wavedash"},i={"absolute-positioning":"Position zones","ceiling-shot":"Ceiling shot labels","fifty-fifty":"50/50 labels",dodge:"Dodge impulse arrows",ball_half:"Half control","relative-positioning":"Player roles","speed-flip":"Speed flip labels",touch:"Touch labels"};return e==="effects"?i[n.id]??n.label:t[`${n.id}:${e}`]??`${n.label} timeline`}function I8(n){return new R8(n)}var yn=Uint8Array,vi=Uint16Array,Ey=Int32Array,Nf=new yn([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Uf=new yn([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Q_=new yn([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),V1=function(n,e){for(var t=new vi(31),i=0;i<31;++i)t[i]=e+=1<>1|(Bt&21845)<<1;aa=(aa&52428)>>2|(aa&13107)<<2,aa=(aa&61680)>>4|(aa&3855)<<4,tg[Bt]=((aa&65280)>>8|(aa&255)<<8)>>1}var vs=(function(n,e,t){for(var i=n.length,s=0,a=new vi(e);s>l]=c}else for(o=new vi(i),s=0;s>15-n[s]);return o}),ba=new yn(288);for(var Bt=0;Bt<144;++Bt)ba[Bt]=8;for(var Bt=144;Bt<256;++Bt)ba[Bt]=9;for(var Bt=256;Bt<280;++Bt)ba[Bt]=7;for(var Bt=280;Bt<288;++Bt)ba[Bt]=8;var bc=new yn(32);for(var Bt=0;Bt<32;++Bt)bc[Bt]=5;var k8=vs(ba,9,0),D8=vs(ba,9,1),O8=vs(bc,5,0),F8=vs(bc,5,1),zm=function(n){for(var e=n[0],t=1;te&&(e=n[t]);return e},Gi=function(n,e,t){var i=e/8|0;return(n[i]|n[i+1]<<8)>>(e&7)&t},Hm=function(n,e){var t=e/8|0;return(n[t]|n[t+1]<<8|n[t+2]<<16)>>(e&7)},Cy=function(n){return(n+7)/8|0},Bf=function(n,e,t){return(e==null||e<0)&&(e=0),(t==null||t>n.length)&&(t=n.length),new yn(n.subarray(e,t))},N8=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],ps=function(n,e,t){var i=new Error(e||N8[n]);if(i.code=n,Error.captureStackTrace&&Error.captureStackTrace(i,ps),!t)throw i;return i},U8=function(n,e,t,i){var s=n.length,a=0;if(!s||e.f&&!e.l)return t||new yn(0);var r=!t,o=r||e.i!=2,l=e.i;r&&(t=new yn(s*3));var c=function(we){var Re=t.length;if(we>Re){var k=new yn(Math.max(Re*2,we));k.set(t),t=k}},u=e.f||0,d=e.p||0,h=e.b||0,f=e.l,p=e.d,g=e.m,_=e.n,m=s*8;do{if(!f){u=Gi(n,d,1);var v=Gi(n,d+1,3);if(d+=3,v)if(v==1)f=D8,p=F8,g=9,_=5;else if(v==2){var x=Gi(n,d,31)+257,M=Gi(n,d+10,15)+4,C=x+Gi(n,d+5,31)+1;d+=14;for(var w=new yn(C),E=new yn(19),R=0;R>4;if(y<16)w[R++]=y;else{var F=0,W=0;for(y==16?(W=3+Gi(n,d,3),d+=2,F=w[R-1]):y==17?(W=3+Gi(n,d,7),d+=3):y==18&&(W=11+Gi(n,d,127),d+=7);W--;)w[R++]=F}}var H=w.subarray(0,x),ie=w.subarray(x);g=zm(H),_=zm(ie),f=vs(H,g,1),p=vs(ie,_,1)}else ps(1);else{var y=Cy(d)+4,b=n[y-4]|n[y-3]<<8,S=y+b;if(S>s){l&&ps(0);break}o&&c(h+b),t.set(n.subarray(y,S),h),e.b=h+=b,e.p=d=S*8,e.f=u;continue}if(d>m){l&&ps(0);break}}o&&c(h+131072);for(var le=(1<>4;if(d+=F&15,d>m){l&&ps(0);break}if(F||ps(2),De<256)t[h++]=De;else if(De==256){Le=d,f=null;break}else{var Ke=De-254;if(De>264){var R=De-257,Oe=Nf[R];Ke=Gi(n,d,(1<>4;Z||ps(3),d+=Z&15;var ie=L8[re];if(re>3){var Oe=Uf[re];ie+=Hm(n,d)&(1<m){l&&ps(0);break}o&&c(h+131072);var Te=h+Ke;if(h>8},Ml=function(n,e,t){t<<=e&7;var i=e/8|0;n[i]|=t,n[i+1]|=t>>8,n[i+2]|=t>>16},Vm=function(n,e){for(var t=[],i=0;ih&&(h=a[i].s);var f=new vi(h+1),p=ng(t[u-1],f,0);if(p>e){var i=0,g=0,_=p-e,m=1<<_;for(a.sort(function(x,M){return f[M.s]-f[x.s]||x.f-M.f});ie)g+=m-(1<>=_;g>0;){var y=a[i].s;f[y]=0&&g;--i){var b=a[i].s;f[b]==e&&(--f[b],++g)}p=e}return{t:new yn(f),l:p}},ng=function(n,e,t){return n.s==-1?Math.max(ng(n.l,e,t+1),ng(n.r,e,t+1)):e[n.s]=t},ww=function(n){for(var e=n.length;e&&!n[--e];);for(var t=new vi(++e),i=0,s=n[0],a=1,r=function(l){t[i++]=l},o=1;o<=e;++o)if(n[o]==s&&o!=e)++a;else{if(!s&&a>2){for(;a>138;a-=138)r(32754);a>2&&(r(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(r(s),--a;a>6;a-=6)r(8304);a>2&&(r(a-3<<5|8208),a=0)}for(;a--;)r(s);a=1,s=n[o]}return{c:t.subarray(0,i),n:e}},El=function(n,e){for(var t=0,i=0;i>8,n[s+2]=n[s]^255,n[s+3]=n[s+1]^255;for(var a=0;a4&&!E[Q_[L-1]];--L);var O=c+5<<3,D=El(s,ba)+El(a,bc)+r,U=El(s,h)+El(a,g)+r+14+3*L+El(M,E)+2*M[16]+3*M[17]+7*M[18];if(l>=0&&O<=D&&O<=U)return X1(e,u,n.subarray(l,l+c));var F,W,H,ie;if(ks(e,u,1+(U15&&(ks(e,u,De[C]>>5&127),u+=De[C]>>12)}}else F=k8,W=ba,H=O8,ie=bc;for(var C=0;C255){var Ke=Oe>>18&31;Ml(e,u,F[Ke+257]),u+=W[Ke+257],Ke>7&&(ks(e,u,Oe>>23&31),u+=Nf[Ke]);var Z=Oe&31;Ml(e,u,H[Z]),u+=ie[Z],Z>3&&(Ml(e,u,Oe>>5&8191),u+=Uf[Z])}else Ml(e,u,F[Oe]),u+=W[Oe]}return Ml(e,u,F[256]),u+W[256]},B8=new Ey([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),K1=new yn(0),z8=function(n,e,t,i,s,a){var r=a.z||n.length,o=new yn(i+r+5*(1+Math.ceil(r/7e3))+s),l=o.subarray(i,o.length-s),c=a.l,u=(a.r||0)&7;if(e){u&&(l[0]=a.r>>3);for(var d=B8[e-1],h=d>>13,f=d&8191,p=(1<7e3||E>24576)&&(F>423||!c)){u=Sw(n,l,0,b,S,x,C,E,L,w-L,u),E=M=C=0,L=w;for(var W=0;W<286;++W)S[W]=0;for(var W=0;W<30;++W)x[W]=0}var H=2,ie=0,le=f,me=D-U&32767;if(F>2&&O==y(w-me))for(var Le=Math.min(h,F)-1,De=Math.min(32767,w),Ke=Math.min(258,F);me<=De&&--le&&D!=U;){if(n[w+H]==n[w+H-me]){for(var Oe=0;OeH){if(H=Oe,ie=me,Oe>Le)break;for(var Z=Math.min(me,Oe-2),re=0,W=0;Wre&&(re=se,U=Te)}}}D=U,U=g[D],me+=D-U&32767}if(ie){b[E++]=268435456|eg[H]<<18|xw[ie];var we=eg[H]&31,Re=xw[ie]&31;C+=Nf[we]+Uf[Re],++S[257+we],++x[Re],R=w+H,++M}else b[E++]=n[w],++S[n[w]]}}for(w=Math.max(w,R);w=r&&(l[u/8|0]=c,k=r),u=X1(l,u+1,n.subarray(w,k))}a.i=r}return Bf(o,0,i+Cy(u)+s)},H8=function(n,e,t,i,s){if(!s&&(s={l:1},e.dictionary)){var a=e.dictionary.subarray(-32768),r=new yn(a.length+n.length);r.set(a),r.set(n,a.length),n=r,s.w=a.length}return z8(n,e.level==null?6:e.level,e.mem==null?s.l?Math.ceil(Math.max(8,Math.min(13,Math.log(n.length)))*1.5):20:12+e.mem,t,i,s)};function V8(n,e){return H8(n,e||{},0,0)}function q1(n,e){return U8(n,{i:2},e,e)}var Tw=typeof TextEncoder<"u"&&new TextEncoder,ig=typeof TextDecoder<"u"&&new TextDecoder,G8=0;try{ig.decode(K1,{stream:!0}),G8=1}catch{}var $8=function(n){for(var e="",t=0;;){var i=n[t++],s=(i>127)+(i>223)+(i>239);if(t+s>n.length)return{s:e,r:Bf(n,t-1)};s?s==3?(i=((i&15)<<18|(n[t++]&63)<<12|(n[t++]&63)<<6|n[t++]&63)-65536,e+=String.fromCharCode(55296|i>>10,56320|i&1023)):s&1?e+=String.fromCharCode((i&31)<<6|n[t++]&63):e+=String.fromCharCode((i&15)<<12|(n[t++]&63)<<6|n[t++]&63):e+=String.fromCharCode(i)}};function W8(n,e){var t;if(Tw)return Tw.encode(n);for(var i=n.length,s=new yn(n.length+(n.length>>1)),a=0,r=function(c){s[a++]=c},t=0;ts.length){var o=new yn(a+8+(i-t<<1));o.set(s),s=o}var l=n.charCodeAt(t);l<128||e?r(l):l<2048?(r(192|l>>6),r(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|n.charCodeAt(++t)&1023,r(240|l>>18),r(128|l>>12&63),r(128|l>>6&63),r(128|l&63)):(r(224|l>>12),r(128|l>>6&63),r(128|l&63))}return Bf(s,0,a)}function Y1(n,e){var t;if(ig)return ig.decode(n);var i=$8(n),s=i.s,t=i.r;return t.length&&ps(8),s}const Lh=1,sg="cfg",Mw="cfgDebug";function X8(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replaceAll("+","-").replaceAll("/","_").replace(/=+$/,"")}function K8(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a!Oi(e)||!l6(e.id)?null:{id:e.id,placement:J1(e.placement)}).filter(e=>e!==null):[]}function r6(n){return Array.isArray(n)?n.map(e=>!Oi(e)||typeof e.id!="string"||!c6(e.kind)?null:{id:e.id,kind:e.kind,placement:J1(e.placement),playerId:Q1(e.playerId)??null,team:e.team==="orange"?"orange":e.team==="blue"?"blue":null,entries:o6(e.entries)}).filter(e=>e!==null):[]}function o6(n){return Array.isArray(n)?n.map(e=>!Oi(e)||typeof e.statId!="string"?null:{statId:e.statId,targetId:typeof e.targetId=="string"?e.targetId:void 0}).filter(e=>e!==null):[]}function J1(n){const e=Oi(n)?n:{},t=Oi(e.viewport)?e.viewport:{};return{x:Ln(e.x)??8,y:Ln(e.y)??8,viewport:{width:kh(t.width)??1,height:kh(t.height)??1},zIndex:Ln(e.zIndex),visible:ti(e.visible)??!0}}function l6(n){return n==="camera"||n==="scoreboard"||n==="playback"||n==="recording"||n==="training-pack"||n==="mechanics"||n==="event-playlist"||n==="mechanics-review"||n==="replay-loading"||n==="boost-pickups"||n==="touch-controls"||n==="touch-legend"||n==="shot-visualization"||n==="missed-events"}function c6(n){return n==="player"||n==="team"||n==="all-players"||n==="all-teams"||n==="kickoff-overview"||n==="goals-overview"||n==="ad-hoc"}function Oi(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Ln(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kh(n){const e=Ln(n);return e!==void 0&&e>0?e:void 0}function ti(n){return typeof n=="boolean"?n:void 0}function Q1(n){return n===null?null:typeof n=="string"?n:void 0}function Cl(n){return Array.isArray(n)?n.filter(e=>typeof e=="string"):[]}function Ew(n,e,t){return Math.min(t,Math.max(e,n))}const u6=["camera","scoreboard","playback","recording","training-pack","mechanics","event-playlist","mechanics-review","replay-loading","boost-pickups","touch-controls","touch-legend","shot-visualization","missed-events"];class d6{constructor(e){this.options=e}nextZIndex=30;reset(){this.nextZIndex=30}bringToFront(e){e.style.zIndex=`${this.nextZIndex++}`}show(e){const t=this.mustWindow(e);t.hidden=!1,this.bringToFront(t),this.options.requestConfigSync()}toggle(e){const t=this.mustWindow(e);t.hidden=!t.hidden,t.hidden||this.bringToFront(t),this.options.requestConfigSync()}hide(e){const t=this.mustWindow(e);t.hidden=!0,this.options.requestConfigSync()}readPlacement(e){const t=Number.parseInt(e.style.zIndex,10);return{x:this.readCoordinate(e,"--window-x"),y:this.readCoordinate(e,"--window-y"),viewport:Cw(),zIndex:Number.isFinite(t)?t:void 0,visible:!e.hidden}}applyPlacement(e,t){const i=J8(t,Cw());e.style.setProperty("--window-x",`${i.x}px`),e.style.setProperty("--window-y",`${i.y}px`),e.hidden=!t.visible,t.zIndex!==void 0&&(e.style.zIndex=`${t.zIndex}`,this.nextZIndex=Math.max(this.nextZIndex,t.zIndex+1))}getSingletonConfigs(){const e=[],t=this.options.getRoot();for(const i of u6){const s=t.querySelector(`[data-window-id="${i}"]`);s&&e.push({id:i,placement:this.readPlacement(s)})}return e}applySingletonConfigs(e){const t=this.options.getRoot();for(const i of e){const s=t.querySelector(`[data-window-id="${i.id}"]`);s&&this.applyPlacement(s,i.placement)}}installDragging(e,t){e.addEventListener("pointerdown",i=>{if(!(i.target instanceof HTMLElement)||h6(i.target))return;const s=i.target.closest("[data-window-id]");if(!s||s.hidden)return;this.bringToFront(s);const a=i.clientX,r=i.clientY,o=s.getBoundingClientRect(),l=i.pointerId;s.setPointerCapture(l),i.preventDefault();const c=d=>{const h=Math.max(8,Math.min(window.innerWidth-120,o.left+d.clientX-a)),f=Math.max(8,Math.min(window.innerHeight-100,o.top+d.clientY-r));s.style.setProperty("--window-x",`${h}px`),s.style.setProperty("--window-y",`${f}px`)},u=()=>{s.releasePointerCapture(l),s.removeEventListener("pointermove",c),s.removeEventListener("pointerup",u),s.removeEventListener("pointercancel",u),this.options.requestConfigSync()};s.addEventListener("pointermove",c),s.addEventListener("pointerup",u),s.addEventListener("pointercancel",u)},{signal:t})}mustWindow(e){const t=this.options.getRoot().querySelector(`[data-window-id="${e}"]`);if(!t)throw new Error(`Missing window for id: ${e}`);return t}readCoordinate(e,t){const i=e.style.getPropertyValue(t).trim(),s=getComputedStyle(e).getPropertyValue(t).trim(),a=i||s,r=Number.parseFloat(a);if(Number.isFinite(r))return r;const o=e.getBoundingClientRect();return t==="--window-y"?o.top:o.left}}function Cw(){return{width:Math.max(1,window.innerWidth),height:Math.max(1,window.innerHeight)}}function h6(n){return n instanceof Element&&!!n.closest("button, input, select, textarea, option, label, a, [data-no-drag]")}function f6(n){return new d6(n)}class p6{constructor(e){this.options=e}activeSourceIds=null;autoFollow=!0;lastActiveKey=null;activeItem=null;renderedItems=[];reset(){this.activeSourceIds=null,this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[]}render(){this.options.body.replaceChildren(),this.lastActiveKey=null,this.activeItem=null,this.renderedItems=[];const e=this.options.getSources();if(e.length===0){const _=document.createElement("p");_.className="stat-window-empty",_.textContent=this.options.getReplayPlayer()?"No events loaded.":"Load a replay to see events.",this.options.body.append(_);return}const t=J_(e,this.activeSourceIds),i=T8({sources:e,activeSourceIds:this.activeSourceIds,replayPlayers:this.options.getReplayPlayer()?.replay.players??[]}),s=document.createElement("div");s.className="event-playlist-toolbar";const a=document.createElement("details");a.className="event-playlist-filter",a.dataset.noDrag="true";const r=document.createElement("summary");r.textContent=`Filters ${t.size}/${e.length}`,a.append(r);const o=document.createElement("div");o.className="event-playlist-filter-panel";const l=document.createElement("div");l.className="event-playlist-filter-actions";const c=document.createElement("button");c.type="button",c.textContent="All",c.addEventListener("click",()=>{this.activeSourceIds=new Set(e.map(m=>m.id)),this.lastActiveKey=null,this.render();const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_)});const u=document.createElement("button");u.type="button",u.textContent="None",u.addEventListener("click",()=>{this.activeSourceIds=new Set,this.lastActiveKey=null,this.render()}),l.append(c,u),o.append(l);const d=new Map;for(const _ of e){const m=d.get(_.group)??[];m.push(_),d.set(_.group,m)}for(const[_,m]of d){const v=document.createElement("section");v.className="event-playlist-filter-group";const y=document.createElement("h3");y.textContent=_,v.append(y);for(const b of m){const S=document.createElement("label");S.className="toggle event-playlist-filter-option";const x=document.createElement("input");x.type="checkbox",x.checked=t.has(b.id),x.addEventListener("change",()=>{this.setSourceSelection(e,C=>{x.checked?C.add(b.id):C.delete(b.id)})});const M=document.createElement("span");M.textContent=`${b.label} (${b.events.length})`,S.append(x,M),v.append(S)}o.append(v)}a.append(o);const h=document.createElement("label");h.className="toggle event-playlist-follow";const f=document.createElement("input");f.type="checkbox",f.checked=this.autoFollow,f.addEventListener("change",()=>{this.autoFollow=f.checked;const _=this.options.getReplayPlayer()?.getState();_&&this.syncTimeline(_,{forceScroll:!0})});const p=document.createElement("span");p.textContent="Auto-follow",h.append(f,p),s.append(a,h);const g=document.createElement("div");if(g.className="event-playlist-list",g.dataset.noDrag="true",i.length===0){const _=document.createElement("p");_.className="stat-window-empty",t.size===0?_.textContent="No event types selected.":_.textContent="No events in selected event types.",g.append(_)}else for(const _ of i){const m=document.createElement("button");m.type="button",m.className="event-playlist-item",m.dataset.eventKey=_.key,m.dataset.eventTime=`${_.event.time}`,m.style.setProperty("--event-color",_.color),Number.isFinite(_.event.time)&&this.renderedItems.push({key:_.key,time:_.event.time,element:m}),m.addEventListener("click",()=>{this.options.cueTimelineEvent(_.event)});const v=document.createElement("span");v.className="event-playlist-time",v.textContent=this.options.formatTime(_.event.time);const y=document.createElement("span");y.className="event-playlist-main";const b=document.createElement("strong");b.textContent=_.event.label??_.sourceLabel;const S=document.createElement("span");S.textContent=[_.event.playerName??null,_.event.frame!==void 0?`frame ${_.event.frame}`:null,_.sourceLabel].filter(x=>!!x).join(" · "),y.append(b,S),m.append(v,y),g.append(m)}this.options.body.append(s,g)}syncTimeline(e,t={}){if(!this.options.body.querySelector(".event-playlist-list"))return;const s=this.getActiveItem(e.currentTime),a=s?.dataset.eventKey??null;a===this.lastActiveKey&&!t.forceScroll||(this.activeItem?.isConnected?this.activeItem.dataset.active="false":this.activeItem&&(this.activeItem=null),s?(s.dataset.active="true",this.activeItem=s,(this.autoFollow||t.forceScroll)&&s.scrollIntoView({block:"nearest"})):this.activeItem=null,this.lastActiveKey=a)}setSourceSelection(e,t){const i=J_(e,this.activeSourceIds);t(i),this.activeSourceIds=i,this.lastActiveKey=null,this.render();const s=this.options.getReplayPlayer()?.getState();s&&this.syncTimeline(s)}getActiveItem(e){const t=this.renderedItems;if(t.length===0)return null;let i=0,s=t.length-1;for(;ie.getConfig||e.applyConfig).map(e=>{const t={id:e.id};return e.id==="boost"&&(t.aliases=["boost-pickup-animation"]),e.getConfig&&(t.getConfig=()=>e.getConfig?.()),e.applyConfig&&(t.applyConfig=i=>e.applyConfig?.(i)),t})}function M6(n){return v6(tC(n))}function E6({replayPlayer:n,playbackRate:e,skipPostGoalTransitions:t,skipKickoffs:i}){const s=n?.getState();return{currentTime:s?.currentTime,playing:s?.playing,rate:s?.speed??zf(Number(e?.value??1)),skipPostGoalTransitions:n?s?.skipPostGoalTransitionsEnabled:t.checked,skipKickoffs:n?s?.skipKickoffsEnabled:i.checked}}function C6({replayPlayer:n,cameraControlsController:e}){const t=n?.getState(),i=t?YE(t):e?.ballCamMode;return{mode:t?.cameraViewMode,freePreset:e?.freeCameraPreset??null,attachedPlayerId:t?.attachedPlayerId,ballCam:i===void 0?void 0:i==="on",useReplayBallCam:i===void 0?void 0:i==="player",usePlayerCameraSettings:t?.customCameraSettings===null,autoPossession:e?.autoPossessionEnabled,customSettings:t?.customCameraSettings,nameplateLiftUu:e?.nameplateLiftUu}}function A6({playback:n,camera:e,activeTimelineEventSourceIds:t,activeTimelineRangeModuleIds:i,activeMechanicTimelineKinds:s,activeRenderEffectModuleIds:a,initialConfig:r,replayPlayer:o,boostPadOverlayEnabled:l,recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}){return{version:Lh,playback:n,camera:e,overlays:{timelineEvents:[...t],timelineRanges:[...i],mechanics:[...s],renderEffects:[...a],...r?.overlays.pluginRenderEffects!==void 0?{pluginRenderEffects:[...r.overlays.pluginRenderEffects]}:{},...r?.overlays.pluginHudOverlay!==void 0?{pluginHudOverlay:r.overlays.pluginHudOverlay}:{},followedPlayerHud:!1,boostPads:l,boostPickupAnimation:o?.getState().boostPickupAnimationEnabled??!1,hitboxWireframes:o?.getState().hitboxWireframesEnabled??!1,hitboxOnlyMode:o?.getState().hitboxOnlyModeEnabled??!1},recording:c,singletonWindows:u,statsWindows:d,moduleConfigs:h}}function R6(n,e,t){return{currentTime:n.currentTime,playing:n.playing,speed:n.rate,customCameraSettings:eC(e),cameraViewMode:e.mode,attachedPlayerId:e.attachedPlayerId,...Cx(e)==="player"?{useReplayBallCam:!0}:{ballCamEnabled:Cx(e)==="on"},boostPickupAnimationEnabled:t.overlays.boostPickupAnimation,hitboxWireframesEnabled:t.overlays.hitboxWireframes,hitboxOnlyModeEnabled:t.overlays.hitboxOnlyMode,skipPostGoalTransitionsEnabled:n.skipPostGoalTransitions,skipKickoffsEnabled:n.skipKickoffs}}function P6(n,e,t){console.groupCollapsed("[subtr-actor] stats player cfg load"),console.log("location.href",window.location.href),console.log("location.search",n.search||"(empty)"),console.log("location.hash",n.hash||"(empty)"),console.table([...n.searchParams.map(([i,s])=>({source:"search",name:i,value:s})),...n.hashParams.map(([i,s])=>({source:"hash",name:i,value:s}))]),console.log("cfg selected source",n.selectedSource??"(none)"),console.log("cfg selected raw text",n.selectedValue??"(none)"),console.log("cfg selected raw length",n.selectedValue?.length??0),console.log("cfg search values",n.searchValues),console.log("cfg hash values",n.hashValues),n.hashValues.length>0&&n.searchValues.length>0&&console.warn("Both hash and search contain cfg; hash cfg is used."),e&&(console.log("cfg normalized JSON",JSON.stringify(e,null,2)),console.log("cfg normalized object",e)),t&&console.error("cfg decode/apply error",t),console.groupEnd()}function Aw(n,e){const{style:t}=n.renderer.domElement;t.visibility=e?"hidden":"",t.pointerEvents=e?"none":""}function Rw(n,e={}){const t=e.destroyPlayer??!0,i=e.clearPlayerPluginHandles??!0,s=n.getUnsubscribe();s&&(s(),n.setUnsubscribe(null)),n.teardownActiveModules(),t&&(n.getReplayPlayer()?.destroy(),n.setReplayPlayer(null)),i&&(n.setCanvasRecorder(null),n.setTimelineOverlay(null)),n.setLoadedReplayName(null),n.setStatsTimeline(null),n.setStatsFrameLookup(null),n.setStatRegistry(Go(null)),n.clearTimelineEventSources(),n.clearTimelineRangeSources(),n.clearStandalonePlugins(),n.clearRenderCaches(),n.resetEventPlaylistWindow(),n.renderModuleSummary(),n.renderScoreboard(),n.renderTimelineEventCount(),n.renderMechanicsTimelineControls(),n.renderEventPlaylistWindow(),n.renderModuleSettings(),n.syncRecordingWindow()}async function I6(n,e,t){const{elements:i}=t;let s=null;i.statusReadout.textContent=n.preparingStatus,i.fileInput.disabled=!0,t.getReplayLoadModal()?.show(n.name,n.preparingStatus),t.setTransportEnabled(!1),t.getCameraControlsController()?.syncAvailability(),i.emptyState.hidden=t.getReplayPlayer()!==null,t.getReplayPlayer()?.pause();try{i.statusReadout.textContent="Parsing replay...",t.getReplayLoadModal()?.show(n.name,"Parsing replay...");const a=await e,{replay:r}=a,o=t.getReplayPlayer();if(o){Rw(t,{destroyPlayer:!1,clearPlayerPluginHandles:!1});const h=new dS(a.raw);await o.replaceReplay(h,r,{preservePlayback:!1}),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(Go(null)),t.setReplayPlayer(o),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(o.subscribe(t.renderSnapshot));const f=t.getInitialConfig();if(f){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(f)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(p=>p.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(o.getState()),t.renderSnapshot(o.getState()),t.renderStatsWindows(o.getState().frameIndex),t.renderScoreboard(o.getState().frameIndex),t.syncEventPlaylistTimeline(o.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide();return}const l=d3({replayEventsLabel:"Replay",replayEvents:h=>t.withTimelineEventSeekTimes(t.getReplayTimelineEvents(h.replay))}),c=XU({onStatusChange:t.syncRecordingWindow});t.setCanvasRecorder(c);const u=t.getInitialConfig(),d=h3(i.viewport,a,{initialPlaybackRate:u?.playback.rate,initialCustomCameraSettings:eC(u?.camera),initialAttachedPlayerId:u?.camera.attachedPlayerId??null,initialCameraViewMode:u?.camera.mode,initialBoostPickupAnimationEnabled:u?.overlays.boostPickupAnimation??!1,initialHitboxWireframesEnabled:u?.overlays.hitboxWireframes??i.hitboxWireframes.checked,initialHitboxOnlyModeEnabled:u?.overlays.hitboxOnlyMode??i.hitboxOnlyMode.checked,initialSkipPostGoalTransitionsEnabled:i.skipPostGoalTransitions.checked,initialSkipKickoffsEnabled:i.skipKickoffs.checked,plugins:[xU({onSample:({renderFps:h,replayFps:f})=>{const p=document.getElementById("render-fps-readout"),g=document.getElementById("replay-fps-readout");p&&(p.textContent=`${h.toFixed(0)} fps`),g&&(g.textContent=`${f.toFixed(0)} fps`)}}),Gu(w3({floatingLiftUu:()=>t.getCameraControlsController()?.nameplateLiftUu})),Gu(HU({includePickup:t.includeBoostPickupAnimationPickup})),Gu(c),Gu(l)]});if(s=d,Aw(d,!0),await d.ready,Rw(t),s=null,Aw(d,!1),t.setStatsTimeline(a.statsTimeline),t.setStatsFrameLookup(a.statsFrameLookup),t.setStatRegistry(Go(null)),t.setTimelineOverlay(l),t.setReplayPlayer(d),t.syncBoostPadOverlayPlugin(),t.setupActiveModules(),t.setUnsubscribe(d.subscribe(t.renderSnapshot)),u){t.setApplyingConfig(!0);try{t.applyConfigToReplayPlayer(u)}finally{t.setApplyingConfig(!1)}}t.getCameraControlsController()?.populateAttachedPlayerOptions(r.players),i.emptyState.hidden=!0,i.statusReadout.textContent=`Loaded ${n.name}`,t.setLoadedReplayName(n.name),i.playersReadout.textContent=r.players.map(h=>h.name).join(", "),i.framesReadout.textContent=`${r.frameCount}`,t.renderModuleSummary(),t.renderTimelineEventCount(),t.renderMechanicsTimelineControls(),t.resetEventPlaylistWindow(),t.renderEventPlaylistWindow(),t.setTransportEnabled(!0),t.getCameraControlsController()?.syncAvailability(d.getState()),t.renderSnapshot(d.getState()),t.renderStatsWindows(d.getState().frameIndex),t.renderScoreboard(d.getState().frameIndex),t.syncEventPlaylistTimeline(d.getState(),{forceScroll:!0}),t.renderModuleSettings(),t.syncRecordingWindow(),t.getReplayLoadModal()?.hide()}catch(a){throw t.getReplayLoadModal()?.hide(),s?.destroy(),t.getReplayPlayer()||(i.emptyState.hidden=!1,t.setCanvasRecorder(null)),t.syncRecordingWindow(),a}finally{i.fileInput.disabled=!1}}function L6(n){if(n<=0)return"--";const e=["B","KB","MB","GB"];let t=n,i=0;for(;t>=1024&&i=10?1:2;return`${t.toFixed(s)} ${e[i]}`}function k6(n){if(!n)return"No replay";if(n.error)return n.error;switch(n.state){case"idle":return"Idle";case"recording":return"Recording";case"stopping":return"Stopping";case"ready":return"Ready";case"error":return"Error"}}function D6({fpsValue:n,playbackRateValue:e}){const t=Number(n),i=Number(e);return{fps:Number.isFinite(t)?Math.max(1,Math.min(120,Math.trunc(t))):60,playbackRate:Number.isFinite(i)?Math.max(.1,i):1}}function O6(n,e=new Date){const i=(n?.replace(/\.replay$/i,"")||"replay").replace(/[^a-zA-Z0-9._-]+/g,"-").replace(/^-+|-+$/g,""),s=e.toISOString().replace(/[:.]/g,"-");return`${i||"replay"}-${s}.webm`}function F6(n,e){const t=URL.createObjectURL(n),i=document.createElement("a");i.href=t,i.download=e,document.body.append(i),i.click(),i.remove(),window.setTimeout(()=>URL.revokeObjectURL(t),0)}class N6{constructor(e){this.options=e}getConfigSnapshot(){const{elements:e}=this.options;return{fps:Number(e.fps.value),playbackRate:Number(e.playbackRate.value)}}applyConfig(e){const{elements:t}=this.options;e.fps!==void 0&&(t.fps.value=`${e.fps}`),e.playbackRate!==void 0&&(t.playbackRate.value=`${e.playbackRate}`)}sync(e=this.options.getCanvasRecorder()?.getStatus()??null){const{elements:t}=this.options,i=this.options.getCanvasRecorder()!==null&&this.options.getReplayPlayer()!==null,s=e?.state??"idle",a=s==="recording"||s==="stopping",r=(this.options.getCanvasRecorder()?.getRecording()??null)!==null;t.status.textContent=k6(e),t.elapsed.textContent=`${(e?.elapsedSeconds??0).toFixed(1)}s`,t.size.textContent=L6(e?.sizeBytes??0),t.type.textContent=e?.mimeType||"WebM",t.start.disabled=!i||a,t.fullReplay.disabled=!i||a,t.stop.disabled=!i||!a,t.download.disabled=!r||a,t.clear.disabled=!r||a,t.fps.disabled=a,t.playbackRate.disabled=a}installEventListeners(e){const{elements:t}=this.options;t.start.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(i)try{const{fps:s}=this.getRecordingOptions();i.start({fps:s}),this.sync()}catch(s){console.error("Failed to start recording:",s),this.options.setStatus(s instanceof Error?s.message:"Failed to start recording"),this.sync(i.getStatus())}},{signal:e}),t.fullReplay.addEventListener("click",()=>{const i=this.options.getCanvasRecorder();if(!i)return;const{fps:s,playbackRate:a}=this.getRecordingOptions();i.recordFullReplay({fps:s,playbackRate:a,restorePlaybackState:!0}).catch(r=>{console.error("Failed to record replay:",r),this.options.setStatus(r instanceof Error?r.message:"Failed to record replay"),this.sync(this.options.getCanvasRecorder()?.getStatus()??null)}),this.sync()},{signal:e}),t.stop.addEventListener("click",()=>{this.options.getCanvasRecorder()?.stop().catch(i=>{console.error("Failed to stop recording:",i),this.options.setStatus(i instanceof Error?i.message:"Failed to stop recording")}),this.sync()},{signal:e}),t.download.addEventListener("click",()=>{const i=this.options.getCanvasRecorder()?.getRecording();i&&F6(i,O6(this.options.getLoadedReplayName()))},{signal:e}),t.clear.addEventListener("click",()=>{try{this.options.getCanvasRecorder()?.clear(),this.sync()}catch(i){console.error("Failed to clear recording:",i)}},{signal:e}),t.fps.addEventListener("change",this.options.requestConfigSync,{signal:e}),t.playbackRate.addEventListener("change",this.options.requestConfigSync,{signal:e})}getRecordingOptions(){const{elements:e}=this.options;return D6({fpsValue:e.fps.value,playbackRateValue:e.playbackRate.value})}}function U6(n){return new N6(n)}class B6{constructor(e){this.options=e}render(e=this.options.getReplayPlayer()?.getState().frameIndex??0){const{body:t}=this.options;t.replaceChildren();const i=this.options.getStatsFrameLookup(),s=i?Ht(i,e):null,a=this.options.getReplayPlayer()?.replay??null;if(!s||!a){const o=document.createElement("p");o.className="scoreboard-empty",o.textContent="Load a replay to show the scoreboard.",t.append(o);return}const r=document.createElement("div");r.className="scoreboard-scoreline",r.append(Pw(s.team_zero?.core.goals,!0),H6(),Pw(s.team_one?.core.goals,!1)),t.append(r)}}function z6(n){return typeof n=="number"&&Number.isFinite(n)?`${Math.round(n)}`:"--"}function H6(){const n=document.createElement("span");return n.className="scoreboard-divider",n.textContent="-",n}function Pw(n,e){const t=document.createElement("strong");return t.className=`scoreboard-goal-value ${ua(e)}`,t.textContent=z6(n),t}function V6(n){return new B6(n)}class G6{constructor(e){this.options=e}setTransportEnabled(e,t){const{elements:i}=this.options;i.togglePlayback.disabled=!e,i.previousFrame.disabled=!e,i.nextFrame.disabled=!e,i.playbackRate.disabled=!e,i.skipPostGoalTransitions.disabled=!e,i.skipKickoffs.disabled=!e,i.hitboxWireframes.disabled=!e,i.hitboxOnlyMode.disabled=!e,this.options.getCameraControlsController()?.setTransportEnabled(e,t)}renderSnapshot(e){const{elements:t}=this.options;t.timeReadout.textContent=`${e.currentTime.toFixed(2)}s`,t.frameReadout.textContent=`${e.frameIndex}`,t.durationReadout.textContent=`${e.duration.toFixed(2)}s`,t.playbackStatusReadout.textContent=e.playing?"Playing":"Paused",t.togglePlayback.textContent=e.playing?"Pause":"Play";const i=Math.max(0,this.options.getFrameCount()-1);t.previousFrame.disabled=e.frameIndex<=0,t.nextFrame.disabled=e.frameIndex>=i;const s=zf(e.speed);t.playbackRate.value=`${s}`,t.playbackRateReadout.textContent=Ry(s),this.options.getCameraControlsController()?.syncState(e),t.skipPostGoalTransitions.checked=e.skipPostGoalTransitionsEnabled,t.skipKickoffs.checked=e.skipKickoffsEnabled,t.hitboxWireframes.checked=e.hitboxWireframesEnabled,t.hitboxOnlyMode.checked=e.hitboxOnlyModeEnabled,t.emptyState.hidden=!0}}function $6(n){return new G6(n)}function W6({elements:n,signal:e,setLauncherOpen:t,openReplayFilePicker:i,getElementWindowId:s,toggleWindow:a,hideWindow:r,createStatsWindow:o,loadReplayFile:l,togglePlayback:c,stepFrames:u,setPlaybackRate:d,setSkipPostGoalTransitionsEnabled:h,setSkipKickoffsEnabled:f,setHitboxWireframesEnabled:p,setHitboxOnlyModeEnabled:g}){n.launcherToggle.addEventListener("click",()=>{t(n.launcherMenu.hidden)},{signal:e}),n.root.addEventListener("click",m=>{m.target instanceof Element&&(m.target.closest(".top-chrome")||t(!1))},{signal:e}),n.loadReplayAction.addEventListener("click",i,{signal:e}),n.emptyLoadReplay.addEventListener("click",i,{signal:e}),n.root.querySelectorAll("[data-window-toggle]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowToggle;v&&(a(v),t(!1))},{signal:e})}),n.root.querySelectorAll("[data-window-hide]").forEach(m=>{m.addEventListener("click",()=>{const v=m.dataset.windowHide??s(m);v&&r(v)},{signal:e})}),n.root.querySelectorAll("[data-create-stats-window]").forEach(m=>{m.addEventListener("click",()=>{o(m.dataset.createStatsWindow)},{signal:e})}),n.fileInput.addEventListener("change",()=>{const m=n.fileInput.files?.[0];m&&l(m)},{signal:e}),n.togglePlayback.addEventListener("click",c,{signal:e}),n.previousFrame.addEventListener("click",()=>u(-1),{signal:e}),n.nextFrame.addEventListener("click",()=>u(1),{signal:e});const _=()=>{const m=zf(Number(n.playbackRate.value));n.playbackRate.value=`${m}`,n.playbackRateReadout.textContent=Ry(m),d(m)};n.playbackRate.addEventListener("input",_,{signal:e}),n.playbackRate.addEventListener("change",_,{signal:e}),n.skipPostGoalTransitions.addEventListener("change",()=>{h(n.skipPostGoalTransitions.checked)},{signal:e}),n.skipKickoffs.addEventListener("change",()=>{f(n.skipKickoffs.checked)},{signal:e}),n.hitboxWireframes.addEventListener("change",()=>{p(n.hitboxWireframes.checked)},{signal:e}),n.hitboxOnlyMode.addEventListener("change",()=>{g(n.hitboxOnlyMode.checked)},{signal:e})}const X6=3500;function K6(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function q6(n){const{getReplayPlayer:e,signal:t}=n,i={forward:!1,backward:!1,left:!1,right:!1,up:!1,down:!1},s=()=>{i.forward=!1,i.backward=!1,i.left=!1,i.right=!1,i.up=!1,i.down=!1},a=(g,_)=>{switch(g){case"KeyW":return i.forward=_,!0;case"KeyS":return i.backward=_,!0;case"KeyA":return i.left=_,!0;case"KeyD":return i.right=_,!0;case"Space":return i.up=_,!0;case"ShiftLeft":case"ShiftRight":return i.down=_,!0;default:return!1}},r=g=>{g.ctrlKey||g.metaKey||g.altKey||K6()||a(g.code,!0)&&g.preventDefault()},o=g=>{a(g.code,!1)};window.addEventListener("keydown",r,{signal:t}),window.addEventListener("keyup",o,{signal:t}),window.addEventListener("blur",s,{signal:t});const l=new T,c=new T,u=new T,d=new T(0,1,0);let h=null,f=0;const p=g=>{f=requestAnimationFrame(p);const _=h===null?0:Math.min(.1,(g-h)/1e3);h=g;const m=(i.forward?1:0)-(i.backward?1:0),v=(i.right?1:0)-(i.left?1:0),y=(i.up?1:0)-(i.down?1:0);if(_===0||m===0&&v===0&&y===0)return;const b=e();if(!b||b.getState().cameraViewMode!=="free")return;const S=b.camera,x=b.controls;S.getWorldDirection(l),c.set(1,0,0).applyQuaternion(S.quaternion),u.set(0,0,0).addScaledVector(l,m).addScaledVector(c,v).addScaledVector(d,y),u.lengthSq()!==0&&(u.normalize().multiplyScalar(X6*_),S.position.add(u),x.target.add(u))};f=requestAnimationFrame(p),t.addEventListener("abort",()=>{cancelAnimationFrame(f)})}function Y6(n,e){const t=new URLSearchParams(n),s=(t.get("replayId")??t.get("replay-id")??e??"").trim();return s.length>0?s:null}function j6(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function Z6(n){if(!n.replayId)return null;const e={replay_id:n.replayId,reviewed_mechanic:n.mechanic,reviewed_event_frame:n.frame,reviewed_event_time:n.time,confidence:n.confidence,status:"confirmed"};return n.subjectKind&&n.subjectId&&(e.reviewed_subject_kind=n.subjectKind,e.reviewed_subject_id=n.subjectId),n.startFrame!==null&&(e.reviewed_start_frame=n.startFrame),n.endFrame!==null&&(e.reviewed_end_frame=n.endFrame),n.notes&&n.notes.trim()&&(e.notes=n.notes.trim()),Object.keys(n.context).length>0&&(e.context=n.context),e}function J6(n,e){const t=n.getState(),i=Math.max(0,Math.round(t.frameIndex??0)),s=t.currentTime??0,a=t.attachedPlayerId??null,r=a?n.replay.players.find(o=>o.id===a)?.name??null:null;return{localId:e.localId,mechanic:e.mechanic,frame:i,time:s,subjectKind:a?"player":null,subjectId:a,playerName:r,startFrame:null,endFrame:null,notes:e.notes?.trim()?e.notes.trim():null,confidence:1,replayId:e.replayId,context:{capturedFrom:"stat-evaluation-player",attachedPlayerId:a,playerName:r,durationSeconds:n.replay.duration??null}}}async function Q6(n,e="/api/v1/events/reviews"){const t=Z6(n);if(!t)return{record:n,ok:!1,message:"No replay id — cannot upload (export JSON instead)."};try{const i=await fetch(e,{method:"POST",headers:{"content-type":"application/json",...j6()},credentials:"same-origin",body:JSON.stringify(t)});if(!i.ok){let s=`${i.status}${i.statusText?` ${i.statusText}`:""}`;try{const a=await i.json();typeof a.error=="string"&&(s=a.error)}catch{}return{record:n,ok:!1,message:s}}return{record:n,ok:!0,message:"uploaded"}}catch(i){return{record:n,ok:!1,message:i instanceof Error?i.message:String(i)}}}const e9=["flick","whiff","double_tap","ceiling_shot","wall_aerial","flip_reset","one_timer","speed_flip","half_flip","wavedash","demo"],t9="m";function n9(){const n=document.activeElement;if(!(n instanceof HTMLElement))return!1;if(n.isContentEditable)return!0;const e=n.tagName;return e==="INPUT"||e==="TEXTAREA"||e==="SELECT"}function i9(n,e){const t=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),i=URL.createObjectURL(t),s=document.createElement("a");s.href=i,s.download=n,document.body.appendChild(s),s.click(),s.remove(),URL.revokeObjectURL(i)}class s9{constructor(e){this.options=e}records=[];localIdSeq=0;installEventListeners(e){const{elements:t}=this.options;for(const i of e9){const s=document.createElement("option");s.value=i,s.textContent=i.replaceAll("_"," "),t.mechanic.appendChild(s)}t.capture.addEventListener("click",()=>this.capture(),{signal:e}),t.export.addEventListener("click",()=>this.exportJson(),{signal:e}),t.upload.addEventListener("click",()=>{this.uploadAll()},{signal:e}),t.clear.addEventListener("click",()=>{this.records.length=0,this.render(),this.setStatus("Cleared.")},{signal:e}),window.addEventListener("keydown",i=>{i.key.toLowerCase()!==t9||i.repeat||i.metaKey||i.ctrlKey||i.altKey||n9()||(i.preventDefault(),this.capture())},{signal:e}),this.render()}capture(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}this.localIdSeq+=1;const t=J6(e,{mechanic:this.options.elements.mechanic.value||"flick",replayId:this.resolveReplayId(),localId:`missed-${this.localIdSeq}`});this.records.push(t),this.options.showWindow(),this.render(),this.setStatus(`Captured ${t.mechanic} @ ${t.time.toFixed(2)}s`+(t.replayId?".":" (no replay id — export only)."))}exportJson(){if(this.records.length===0){this.setStatus("Nothing to export.");return}i9("missed-events.json",{capturedFrom:"stat-evaluation-player",replayId:this.resolveReplayId(),missedEvents:this.records}),this.setStatus(`Exported ${this.records.length}.`)}async uploadAll(){if(this.records.length===0){this.setStatus("Nothing to upload.");return}let e=0;const t=[];for(const i of[...this.records]){const s=await Q6(i);if(s.ok){e+=1;const a=this.records.findIndex(r=>r.localId===i.localId);a>=0&&this.records.splice(a,1)}else t.push(`${i.mechanic}@${i.time.toFixed(1)}s: ${s.message}`)}this.render(),this.setStatus(t.length===0?`Uploaded ${e}.`:`Uploaded ${e}, ${t.length} failed — ${t[0]}`)}render(){const{list:e}=this.options.elements;e.replaceChildren();for(const t of this.records){const i=document.createElement("li"),s=t.playerName??t.subjectId??"no subject",a=document.createElement("span");a.className="missed-event-row",a.textContent=`${t.mechanic} @ ${t.time.toFixed(2)}s · f${t.frame} · ${s}`+(t.replayId?"":" · no replay id");const r=document.createElement("button");r.type="button",r.textContent="✕",r.title="Remove",r.addEventListener("click",()=>{const o=this.records.findIndex(l=>l.localId===t.localId);o>=0&&(this.records.splice(o,1),this.render())}),i.append(a,r),e.appendChild(i)}}setStatus(e){this.options.elements.status.textContent=e}resolveReplayId(){return Y6(window.location.search,this.options.getReplayId?.()??null)}}function a9(n){return new s9(n)}class Eo{constructor(e,t){this.file=e,this.sourceTimes=t}sourceTimes;dirty=!1;static async createNew(e){const t=await ca.create(W3(),e);return new Eo(t,[])}static async loadFromBytes(e,t){const i=await ca.load(e,t);return new Eo(i,new Array(i.roundCount).fill(null))}get shotCount(){return this.file.roundCount}get hasUnsavedShots(){return this.dirty}shots(){return this.file.rounds.map((e,t)=>({index:t,timeLimit:e.time_limit,sourceReplayTime:this.sourceTimes[t]??null}))}captureShot(e,t=null){const i=H3(this.file,e);return this.sourceTimes[i]=t,this.dirty=!0,i}removeShot(e){this.file.removeRound(e),this.sourceTimes.splice(e,1),this.dirty=!0}setShotTimeLimit(e,t){this.file.setRoundTimeLimit(e,t),this.dirty=!0}downloadFileName(){return $3(this.file.guid)}toBytes(e=Math.floor(Date.now()/1e3)){this.file.updateMetadata({updated_at:BigInt(e)});const t=this.file.toBytes();return this.dirty=!1,t}}function r9(n,e,t,i){const s=`Captured shot ${n} (${e} at ${t})`;return i===null?`${s}.`:`${s}; warning: ${i}.`}function o9(n,e){const t=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength),i=new Blob([t],{type:"application/octet-stream"}),s=URL.createObjectURL(i),a=document.createElement("a");a.href=s,a.download=e,document.body.appendChild(a),a.click(),a.remove(),window.setTimeout(()=>URL.revokeObjectURL(s),0)}class l9{constructor(e){this.options=e}session=null;sessionPromise=null;installEventListeners(e){const{elements:t}=this.options;t.capture.addEventListener("click",()=>{this.captureShot()},{signal:e}),t.newPack.addEventListener("click",()=>{this.newPack()},{signal:e}),t.download.addEventListener("click",()=>{this.download()},{signal:e}),t.load.addEventListener("click",()=>t.loadInput.click(),{signal:e}),t.loadInput.addEventListener("change",()=>{const i=t.loadInput.files?.[0]??null;t.loadInput.value="",i&&this.loadPackFile(i)},{signal:e}),t.name.addEventListener("change",()=>this.session?.file.setName(t.name.value||null),{signal:e}),t.creator.addEventListener("change",()=>this.session?.file.setCreatorName(t.creator.value||null),{signal:e}),t.description.addEventListener("change",()=>this.session?.file.setDescription(t.description.value||null),{signal:e}),t.difficulty.addEventListener("change",()=>this.session?.file.setDifficulty(t.difficulty.value),{signal:e}),this.sync()}sync(){const{elements:e}=this.options,t=this.options.getReplayPlayer();e.capture.disabled=!t,e.shooter.disabled=!t,this.populateShooterOptions(t),this.renderShotList()}populateShooterOptions(e){const{shooter:t}=this.options.elements,i=t.value;t.replaceChildren(),t.append(new Option("Followed player (camera)",""));for(const s of e?.replay.players??[])t.append(new Option(s.name,s.id));[...t.options].some(s=>s.value===i)&&(t.value=i)}async ensureSession(){if(this.session)return this.session;this.sessionPromise??=Eo.createNew();const e=await this.sessionPromise;return this.session||this.adoptSession(e),this.session??e}adoptSession(e){this.session=e,this.sessionPromise=null;const{elements:t}=this.options;t.name.value=e.file.name??"",t.creator.value=e.file.creatorName??"",t.description.value=e.file.description??"";const i=e.file.difficulty;[...t.difficulty.options].some(s=>s.value===i)&&(t.difficulty.value=i),this.renderShotList()}resolveShooter(e,t){const i=this.options.elements.shooter.value||null,s=e.getState().attachedPlayerId,a=e.replay.players,r=[...a.filter(o=>o.id===(i??s)),...a];for(const o of r){const l=o.frames[t];if(l?.position)return i&&o.id!==i?null:{track:o,sample:l}}return null}timeLimitSeconds(){const e=Number(this.options.elements.timeLimit.value);return!Number.isFinite(e)||e<0?EM:e}async captureShot(){const e=this.options.getReplayPlayer();if(!e){this.setStatus("No replay loaded.");return}const t=e.getState(),i=e.replay.ballFrames[t.frameIndex];if(!i?.position){this.setStatus("No ball state on the current frame.");return}const s=this.resolveShooter(e,t.frameIndex);if(!s){this.setStatus("Selected shooter has no car state on the current frame.");return}const a=await this.ensureSession(),r={position:s.sample.position,rotation:s.sample.rotation,linearVelocity:s.sample.linearVelocity},o=a.captureShot({ball:{position:i.position,linearVelocity:i.linearVelocity},shooter:r,timeLimit:this.timeLimitSeconds()},t.currentTime);this.renderShotList(),this.setStatus(r9(o+1,s.track.name,Ai(t.currentTime),N3(r)))}async loadPackFile(e){if(!(this.session?.hasUnsavedShots&&!window.confirm("Discard unsaved captured shots and open this pack?")))try{const t=await Eo.loadFromBytes(await e.arrayBuffer());this.adoptSession(t),this.setStatus(`Opened ${e.name} (${t.shotCount} shot${t.shotCount===1?"":"s"}); captures will append.`)}catch(t){console.error("Failed to load training pack:",t),this.setStatus(t instanceof Error?t.message:"Failed to load training pack.")}}async newPack(){if(!(this.session?.hasUnsavedShots&&!window.confirm("Discard unsaved captured shots and start a new pack?")))try{this.adoptSession(await Eo.createNew()),this.setStatus("Started a new pack.")}catch(e){console.error("Failed to create training pack:",e),this.setStatus(e instanceof Error?e.message:"Failed to create training pack.")}}async download(){const e=await this.ensureSession();if(e.shotCount===0){this.setStatus("No shots to download; capture one first.");return}try{o9(e.toBytes(),e.downloadFileName()),this.setStatus(`Downloaded ${e.downloadFileName()}.`)}catch(t){console.error("Failed to serialize training pack:",t),this.setStatus(t instanceof Error?t.message:"Failed to serialize pack.")}}renderShotList(){const{shotList:e}=this.options.elements;e.replaceChildren();const t=this.session;if(t)for(const i of t.shots()){const s=document.createElement("li"),a=document.createElement("span"),r=i.sourceReplayTime===null?"loaded":`at ${Ai(i.sourceReplayTime)}`,o=i.timeLimit===0?"no limit":`${i.timeLimit}s`;a.textContent=`Shot ${i.index+1} — ${r} — ${o}`;const l=document.createElement("button");l.type="button",l.textContent="Remove",l.addEventListener("click",()=>{t.removeShot(i.index),this.renderShotList(),this.setStatus(`Removed shot ${i.index+1}.`)}),s.append(a,l),e.appendChild(s)}}setStatus(e){this.options.elements.status.textContent=e}}function c9(n){return new l9(n)}class u9{constructor(e){this.options=e}activeModules=[];activeTimelineEventSourceIds=new Set;activeTimelineRangeModuleIds=new Set;activeMechanicTimelineKinds=new Set;activeRenderEffectModuleIds=new Set;removeRenderHook=null;timelineSourceRemovers=new Map;timelineRangeSourceRemovers=new Map;getActiveModules(){return this.activeModules}getActiveTimelineEventSourceIds(){return this.activeTimelineEventSourceIds}getActiveTimelineRangeModuleIds(){return this.activeTimelineRangeModuleIds}getActiveMechanicTimelineKinds(){return this.activeMechanicTimelineKinds}getActiveRenderEffectModuleIds(){return this.activeRenderEffectModuleIds}getActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}getBoostPadOverlayEnabled(){return!0}getTimelineEventSourceIds(){return[...this.activeTimelineEventSourceIds]}getTimelineRangeModuleIds(){return[...this.activeTimelineRangeModuleIds]}getMechanicTimelineKinds(){return[...this.activeMechanicTimelineKinds]}getRenderEffectModuleIds(){return[...this.activeRenderEffectModuleIds]}applyOverlayConfig({timelineEvents:e,timelineRanges:t,mechanics:i,renderEffects:s,boostPads:a}){this.activeTimelineEventSourceIds=new Set(e),this.activeTimelineRangeModuleIds=new Set(t),this.activeMechanicTimelineKinds=new Set(i),this.activeRenderEffectModuleIds=new Set(s)}reset(){this.teardownActiveModules(),this.clearStandalonePlugins(),this.activeModules=[],this.activeTimelineEventSourceIds=new Set,this.activeTimelineRangeModuleIds=new Set,this.activeMechanicTimelineKinds=new Set,this.activeRenderEffectModuleIds=new Set,this.removeRenderHook=null}setupActiveModules(){this.teardownActiveModules();const e=this.options.getContext();if(!e)return;const t=this.getActiveModuleIds();this.activeModules=this.options.modules.filter(i=>t.has(i.id)),this.options.boostPickupFilters.setup(e);for(const i of this.activeModules)i.setup(e);this.removeRenderHook=e.player.onBeforeRender(i=>{for(const s of this.activeModules)this.activeRenderEffectModuleIds.has(s.id)&&s.onBeforeRender(i)}),this.syncTimelineEvents(),this.syncTimelineRanges()}teardownActiveModules(){this.removeRenderHook?.(),this.removeRenderHook=null,this.clearTimelineEventSources(),this.clearTimelineRangeSources();for(const e of this.activeModules)e.teardown();this.activeModules=[]}toggleCapability(e,t,i){const s=this.getMutableActiveCapabilityIds(t);i?s.add(e):s.delete(e),this.setupActiveModules(),this.options.renderModuleSummary(),this.options.renderModuleSettings(),this.options.renderStatsWindows(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}setMechanicTimelineKind(e,t){t?this.activeMechanicTimelineKinds.add(e):this.activeMechanicTimelineKinds.delete(e),this.options.requestConfigSync()}activateMechanicTimelineKind(e){this.activeMechanicTimelineKinds.add(e),this.syncTimelineEvents(),this.syncTimelineRanges(),this.options.renderTimelineEventCount(),this.options.requestConfigSync()}clearTimelineEventSources(){for(const e of this.timelineSourceRemovers.values())e();this.timelineSourceRemovers.clear()}clearTimelineRangeSources(){for(const e of this.timelineRangeSourceRemovers.values())e();this.timelineRangeSourceRemovers.clear()}clearStandalonePlugins(){}syncBoostPadOverlayPlugin(){}toggleBoostPadOverlay(){this.options.renderModuleSummary(),this.options.requestConfigSync()}syncTimelineEvents(){this.clearTimelineEventSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.options.getEventTimelineSources(e)){if(!i.active)continue;const s=i.buildTimelineEvents();s.length!==0&&this.timelineSourceRemovers.set(i.timelineKey,t.addEventSource(this.options.withTimelineEventSeekTimes(s),{id:i.timelineId,label:i.label}))}t.refreshEvents()}}syncTimelineRanges(){this.clearTimelineRangeSources();const e=this.options.getContext(),t=this.options.getTimelineOverlay();if(!(!t||!e)){for(const i of this.activeModules)!this.activeTimelineRangeModuleIds.has(i.id)||!i.getTimelineRanges||this.timelineRangeSourceRemovers.set(i.id,t.addRangeSource(()=>i.getTimelineRanges?.(e)??[]));for(const i of this.options.getEventTimelineSources(e)){if(!i.active||!i.buildTimelineRanges)continue;const s=i.buildTimelineRanges();s.length!==0&&this.timelineRangeSourceRemovers.set(i.timelineKey,t.addRangeSource(s))}t.refreshRanges()}}getActiveModuleIds(){return new Set([...this.activeTimelineEventSourceIds,...this.activeTimelineRangeModuleIds,...this.activeRenderEffectModuleIds])}getMutableActiveCapabilityIds(e){return e==="events"?this.activeTimelineEventSourceIds:e==="ranges"?this.activeTimelineRangeModuleIds:this.activeRenderEffectModuleIds}}function d9(n){return new u9(n)}function ni(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function Iw(n){return ni(n)&&(n.kind==="time"||n.kind==="frame")&&typeof n.value=="number"&&Number.isFinite(n.value)?{kind:n.kind,value:n.value}:null}function rd(n,e){if(n!=null){if(typeof n!="number"||!Number.isInteger(n)||!Number.isFinite(n)||n<0)throw new Error(`Review playlist page ${e} must be a non-negative integer.`);return n}}function Lw(n,e){if(n!=null){if(typeof n!="string")throw new Error(`Review playlist page ${e} must be a string.`);return n}}function h9(n){if(n!=null){if(!ni(n))throw new Error("Review playlist page must be an object.");return{next:Lw(n.next,"next"),previous:Lw(n.previous,"previous"),total:rd(n.total,"total"),count:rd(n.count,"count"),limit:rd(n.limit,"limit"),offset:rd(n.offset,"offset")}}}function f9(n){if(n!=null){if(!ni(n))throw new Error("Review playlist playback must be an object.");if(n.timeBase!==void 0&&n.timeBase!=="playback"&&n.timeBase!=="rawReplay")throw new Error('Review playlist playback timeBase must be "playback" or "rawReplay".');return{...n,timeBase:n.timeBase}}}function p9(n,e){if(n==null)return;if(!ni(n))throw new Error(`Review item ${e} perspective must be an object.`);if(n.kind!=="player")throw new Error(`Review item ${e} perspective kind must be "player".`);const t=typeof n.playerId=="string"&&n.playerId.trim()?n.playerId.trim():void 0,i=typeof n.playerName=="string"&&n.playerName.trim()?n.playerName.trim():void 0;if(!t&&!i)throw new Error(`Review item ${e} player perspective needs playerId or playerName.`);if(n.ballCam!==void 0&&n.ballCam!=="off"&&n.ballCam!=="on"&&n.ballCam!=="player")throw new Error(`Review item ${e} perspective ballCam must be off, on, or player.`);if(n.usePlayerCameraSettings!==void 0&&typeof n.usePlayerCameraSettings!="boolean")throw new Error(`Review item ${e} perspective usePlayerCameraSettings must be boolean.`);return{kind:"player",playerId:t,playerName:i,ballCam:n.ballCam,usePlayerCameraSettings:n.usePlayerCameraSettings}}function m9(n){if(!ni(n)||!Array.isArray(n.items))throw new Error("Review playlist must contain an items array.");const e=n.items.map((i,s)=>{if(!ni(i)||typeof i.replay!="string")throw new Error(`Invalid review item at index ${s}.`);const a=Iw(i.start),r=Iw(i.end);if(!a||!r)throw new Error(`Review item ${s+1} has invalid start or end.`);return{id:typeof i.id=="string"?i.id:void 0,replay:i.replay,start:a,end:r,label:typeof i.label=="string"?i.label:void 0,perspective:p9(i.perspective,s+1),meta:ni(i.meta)?i.meta:void 0}}),t=Array.isArray(n.replays)?n.replays.map(i=>!ni(i)||typeof i.id!="string"?null:{id:i.id,path:typeof i.path=="string"?i.path:void 0,label:typeof i.label=="string"?i.label:void 0,locator:ni(i.locator)?i.locator:void 0,meta:ni(i.meta)?i.meta:void 0}).filter(i=>i!==null):void 0;return{label:typeof n.label=="string"?n.label:void 0,replays:t,items:e,page:h9(n.page),playback:f9(n.playback),meta:n.meta}}function kw(n){let e;try{e=JSON.parse(n)}catch(t){throw new Error(`Invalid review playlist JSON: ${t instanceof Error?t.message:String(t)}`)}return m9(e)}function _9(){const n=new URLSearchParams(window.location.search);return n.get("reviewPlaylist")?.trim()||n.get("review")?.trim()||n.get("playlist")?.trim()||n.get("playlistUrl")?.trim()||null}function g9(n){return/^\/(?:home|Users|tmp|var\/tmp|mnt|media|run\/user|nix\/store)\//.test(n)}function nC(n,e){const t=n.startsWith("path:")?n.slice(5):n;if(/^https?:\/\//i.test(t)||t.startsWith("/@fs/"))return t;if(t.startsWith("/")){if(g9(t))return`/@fs${t}`;if(e){const i=new URL(e,window.location.href);if(i.origin!==window.location.origin)return new URL(t,i.origin).href}return t}return e?new URL(t,e).href:t}function Id(n,e){const t=e.replaysById.get(n.replay);if(t?.path)return t.path;if(ni(t?.locator)&&t.locator.kind==="path"&&typeof t.locator.path=="string")return t.locator.path;if(/^https?:\/\//i.test(n.replay)||n.replay.startsWith("/")||n.replay.startsWith("/@fs/")||n.replay.startsWith("path:"))return n.replay;throw new Error(`Review replay "${n.replay}" does not include a loadable path.`)}function Dw(n,e){const t=e.replaysById.get(n.replay),s=(t?.path??Id(n,e)).replace(/^path:/,"").split("/").filter(Boolean).pop();return t?.label??s??"review replay"}function Ld(n){return typeof n=="number"&&Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function Ow(n){return n.kind==="time"?Ld(n.value):`frame ${Math.trunc(n.value)}`}function es(n,e){if(!ni(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?t:null}function kd(n,e){if(!ni(n.meta?.target))return null;const t=n.meta.target[e];return typeof t=="number"&&Number.isFinite(t)?Math.trunc(t):null}function y9(n,e){for(const[t,i]of[["eventTime","eventFrame"],["startTime","startFrame"],["endTime","endFrame"]]){const s=es(n,t),a=kd(n,i),r=a===null?null:e.frames[a]?.time;if(s!==null&&typeof r=="number"&&Number.isFinite(r))return s-r}return 0}function iC(n,e,t){return t==="playback"?0:t==="rawReplay"&&typeof e.rawStartTime=="number"&&Number.isFinite(e.rawStartTime)?e.rawStartTime:y9(n,e)}function ag(n,e){return Math.min(Math.max(0,n),Math.max(0,e))}function v9(n,e,t,i){if(e.kind==="frame"){const a=Math.max(0,Math.trunc(e.value));return ag(t.frames[a]?.time??0,t.duration)}const s=iC(n,t,i);return ag(e.value-s,t.duration)}function b9(n,e,t){const i=E9(n);return i===null?null:ag(i-iC(n,e,t),e.duration)}function x9(n){const e=n.start.kind==="time"?n.start.value:null,t=n.end.kind==="time"?n.end.value:null,i=[`${Ow(n.start)} to ${Ow(n.end)}`];e!==null&&t!==null&&i.push(`${Math.max(0,t-e).toFixed(1)}s clip`);const s=es(n,"startTime")??es(n,"eventTime"),a=es(n,"endTime")??es(n,"eventTime");return e!==null&&s!==null&&i.push(`${Math.max(0,s-e).toFixed(1)}s preroll`),t!==null&&a!==null&&i.push(`${Math.max(0,t-a).toFixed(1)}s postroll`),i.join(" · ")}function w9(n){const e=es(n,"eventTime"),t=es(n,"startTime"),i=es(n,"endTime"),s=kd(n,"eventFrame"),a=kd(n,"startFrame"),r=kd(n,"endFrame"),o=t!==null&&i!==null&&Math.abs(i-t)>.001?`${Ld(t)} to ${Ld(i)}`:Ld(e??t??i),l=a!==null&&r!==null&&r!==a?`frames ${a}-${r}`:s!==null?`frame ${s}`:a!==null?`frame ${a}`:null;return[o,l].filter(c=>c&&c!=="--").join(" · ")||"--"}function Gm(n,e){return n.label??n.meta?.eventTypeLabel??n.meta?.mechanicLabel??`Review item ${e+1}`}function S9(n){if(typeof n.meta?.playerName=="string"&&n.meta.playerName.trim())return n.meta.playerName.trim();if(ni(n.meta?.target)&&typeof n.meta.target.playerName=="string"){const e=n.meta.target.playerName.trim();return e||null}return null}function Fw(n,e){if(!n)return null;if(n.playerId){const i=e.find(s=>s.id===n.playerId);if(i)return i}const t=n.playerName?.toLowerCase();return t?e.find(i=>i.name.trim().toLowerCase()===t)??null:null}function Nw(n){if(typeof n.meta?.eventTypeLabel=="string"&&n.meta.eventTypeLabel.trim())return n.meta.eventTypeLabel;if(typeof n.meta?.mechanicLabel=="string"&&n.meta.mechanicLabel.trim())return n.meta.mechanicLabel;const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"?Dn(e):"--"}function T9(n){const e=n.meta?.eventCategory;return typeof e=="string"&&e.trim()?Dn(e.trim()):"--"}function M9(n){const e=n.meta?.eventType??n.meta?.mechanic;return typeof e=="string"&&e.trim()?e.trim().replaceAll("-","_"):null}function E9(n){return es(n,"eventTime")??es(n,"startTime")??es(n,"endTime")}class C9{constructor(e){this.options=e}createReplaySource(e,t,i){const s=Id(e,t),a=nC(s,t.sourceUrl);return{name:Dw(e,t),preparingStatus:"Loading review replay...",async readBytes(){const r=await fetch(a,{signal:i});if(!r.ok){const o=r.statusText?` ${r.statusText}`:"";throw new Error(`Failed to fetch review replay from ${a} (${r.status}${o})`)}return new Uint8Array(await r.arrayBuffer())}}}initialize(e){const t=this.getReplayClipCounts(e);for(const[i,s]of this.getReplayItems(e)){let a="",r=i;try{a=Id(s,e),r=Dw(s,e)}catch{r=e.replaysById.get(i)?.label??i}e.replayLoadStates.set(i,{replayId:i,label:r,path:a,clipCount:t.get(i)??0,status:"idle",progress:null,error:null})}}preload(e,t){if(e.preloading)return;const i=this.getNextReplayItems(e,t);i.length!==0&&(e.preloading=!0,(async()=>{try{for(const s of i){const a=s.replay,r=e.replayLoadStates.get(a);if(!(r?.status==="loaded"||r?.status==="loading"))try{await this.loadBundle(s,e)}catch{}}}finally{e.preloading=!1}})())}loadBundle(e,t){const i=t.replayLoadCache.get(e.replay);if(i)return i;const s=this.createReplaySource(e,t);this.updateLoadState(t,e.replay,{label:s.name,path:Id(e,t),status:"loading",progress:null,error:null});const a=Promise.resolve().then(async()=>{const r=await s.readBytes();return kf(r,{reportEveryNFrames:100,onProgress:o=>{this.updateLoadState(t,e.replay,{status:"loading",progress:o,error:null})}})}).then(r=>(this.updateLoadState(t,e.replay,{status:"loaded",progress:null,error:null}),r)).catch(r=>{throw t.replayLoadCache.delete(e.replay),this.updateLoadState(t,e.replay,{status:"error",error:r instanceof Error?r.message:String(r)}),r});return t.replayLoadCache.set(e.replay,a),a}render(e){const{reviewSummary:t,loadingSummary:i,loadingActive:s,loadingList:a}=this.options.elements,r=e?Array.from(e.replayLoadStates.values()):[],o=r.filter(h=>h.status==="loaded").length,l=r.filter(h=>h.status==="loading").length,c=r.filter(h=>h.status==="error").length,u=r.filter(h=>h.status==="idle").length,d=r.length===0?"0 replays":`${o}/${r.length} loaded${l>0?`, ${l} loading`:""}${c>0?`, ${c} failed`:""}`;if(t.textContent=d,i.textContent=d,s.textContent=r.length===0?"No playlist":l>0?`${l} active, ${u} pending`:c>0?`${c} failed`:e?.preloading?`Background queue, ${u} pending`:o===r.length?"Complete":`${u} pending`,a.replaceChildren(),!e||r.length===0){const h=document.createElement("p");h.className="stat-window-empty",h.textContent="No replay sources.",a.append(h);return}for(const h of r){const f=document.createElement("div");f.className=`mechanics-review-replay-load ${h.status}`;const p=document.createElement("div");p.className="mechanics-review-replay-load-main";const g=document.createElement("span");g.className="mechanics-review-replay-load-title",g.textContent=h.label;const _=document.createElement("span");_.className="mechanics-review-replay-load-meta",_.textContent=[h.replayId,`${h.clipCount} ${h.clipCount===1?"clip":"clips"}`,h.path].filter(Boolean).join(" · "),p.append(g,_);const m=document.createElement("strong");m.className="mechanics-review-replay-load-status",m.textContent=this.replayLoadStatusText(h);const v=document.createElement("div");v.className="mechanics-review-replay-load-progress";const y=document.createElement("span");y.style.width=`${Math.round(this.replayLoadProgressValue(h)*100)}%`,v.append(y),f.append(p,m,v),a.append(f)}}updateLoadState(e,t,i){const s=e.replayLoadStates.get(t)??{replayId:t,label:t,path:"",clipCount:0,status:"idle",progress:null,error:null};e.replayLoadStates.set(t,{...s,...i});const a=e.manifest.items[e.currentIndex];e.loading&&a?.replay===t&&i.progress&&this.options.onActiveLoadProgress(i.progress),this.options.isActiveReview(e)&&this.render(e)}getReplayItems(e){const t=new Map;for(const i of e.manifest.items)t.has(i.replay)||t.set(i.replay,i);return t}getReplayClipCounts(e){const t=new Map;for(const i of e.manifest.items)t.set(i.replay,(t.get(i.replay)??0)+1);return t}getNextReplayItems(e,t){const i=e.manifest.items[t]?.replay,s=new Set(i?[i]:[]),a=[];for(let r=t+1;r{const i=t.file.files?.[0];if(i)try{const s=kw(await i.text());await this.loadPlaylist(s,null)}catch(s){console.error("Failed to load review playlist:",s),this.setStatus(s instanceof Error?s.message:"Failed to load review playlist")}finally{t.file.value=""}},{signal:e}),t.loadUrl.addEventListener("click",()=>{this.loadPlaylistFromUrl(t.url.value.trim()).catch(i=>{console.error("Failed to load review playlist URL:",i),this.setStatus(i instanceof Error?i.message:"Failed to load review playlist URL")})},{signal:e}),t.previous.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.max(0,i.currentIndex-1))},{signal:e}),t.replay.addEventListener("click",()=>this.replayClip(),{signal:e}),t.next.addEventListener("click",()=>{const i=this.activeReview;i&&this.activateItem(Math.min(i.manifest.items.length-1,i.currentIndex+1))},{signal:e}),t.confirm.addEventListener("click",()=>{this.submitDecision("confirmed")},{signal:e}),t.reject.addEventListener("click",()=>{this.submitDecision("rejected")},{signal:e}),t.uncertain.addEventListener("click",()=>{this.submitDecision("uncertain")},{signal:e})}render(){const{elements:e}=this.options,t=this.activeReview,i=t?.manifest.items??[],s=t?i[t.currentIndex]??null:null,a=i.length>0;e.count.textContent=`${i.length} item${i.length===1?"":"s"}`,e.index.textContent=a&&t?`${t.currentIndex+1} / ${i.length}`:"0 / 0",e.title.textContent=s?Gm(s,t?.currentIndex??0):"No candidate selected",e.mechanic.textContent=s?Nw(s):"--",e.player.textContent=s?this.getPlayerName(s):"--",e.clip.textContent=s?x9(s):"--",e.event.textContent=s?w9(s):"--",e.reason.textContent=s?.meta?.reason??"--",e.previous.disabled=!t||t.loading||t.currentIndex<=0,e.replay.disabled=!t||t.loading||!t.currentClip,e.next.disabled=!t||t.loading||t.currentIndex>=i.length-1;const r=!t||t.loading||Uw(s)===null;if(e.confirm.disabled=r,e.reject.disabled=r,e.uncertain.disabled=r,this.options.replayLoads.render(t),e.list.replaceChildren(),!t||i.length===0){const o=document.createElement("p");o.className="stat-window-empty",o.textContent="No review playlist loaded.",e.list.append(o);return}i.forEach((o,l)=>{const c=document.createElement("button");c.type="button",c.className="mechanics-review-item",c.dataset.active=l===t.currentIndex?"true":"false",c.disabled=t.loading,c.addEventListener("click",()=>{this.activateItem(l)});const u=document.createElement("span");u.textContent=Gm(o,l);const d=document.createElement("strong");d.textContent=[T9(o),Nw(o),this.getPlayerName(o),$m(o.meta?.reviewStatus)].filter(h=>h&&h!=="--").join(" · ")||"--",c.append(u,d),e.list.append(c)})}async loadPlaylist(e,t){const i=new Map;for(const s of e.replays??[])i.set(s.id,s);this.activeReview={manifest:e,sourceUrl:t,replaysById:i,replayLoadStates:new Map,replayLoadCache:new Map,currentIndex:0,loading:!1,preloading:!1,currentReplayId:null,currentClip:null},this.options.replayLoads.initialize(this.activeReview),this.options.showReplayLoadingWindow(),this.setStatus(e.label?`Loaded ${e.label}.`:"Loaded review playlist."),this.render(),e.items.length>0&&await this.activateItem(0)}async loadPlaylistFromUrl(e){if(!e){this.setStatus("Enter a review playlist URL.");return}const t=nC(e,window.location.href);this.setStatus("Loading review playlist...");const i=await fetch(t);if(!i.ok){const a=i.statusText?` ${i.statusText}`:"";throw new Error(`Failed to fetch review playlist from ${t} (${i.status}${a})`)}const s=kw(await i.text());await this.loadPlaylist(s,i.url||t)}async activateItem(e){const t=this.activeReview,i=t?.manifest.items[e];if(!(!t||!i||t.loading)){t.loading=!0,t.currentIndex=e,this.render(),this.setStatus(`Loading ${Gm(i,e)}...`);try{if(!this.options.getReplayPlayer()||t.currentReplayId!==i.replay){const d=this.options.replayLoads.createReplaySource(i,t),h=this.options.replayLoads.loadBundle(i,t);await this.options.loadReplayBundleForDisplay(d,h),t.currentReplayId=i.replay}this.options.replayLoads.preload(t,e);const a=t.manifest.playback?.timeBase,r=Math.max(0,this.getBoundTime(i,i.start,a)),o=Math.min(this.options.getReplayPlayer()?.getState().duration??Number.POSITIVE_INFINITY,Math.max(r,this.getBoundTime(i,i.end,a)));if(!Number.isFinite(r)||!Number.isFinite(o)||o<=r)throw new Error("Review item has an empty playback range.");const l=this.options.getReplayPlayer(),c=l?Fw(i.perspective,l.replay.players):null;c&&this.options.applyClipPerspective({playerId:c.id,ballCam:i.perspective?.ballCam,usePlayerCameraSettings:i.perspective?.usePlayerCameraSettings}),this.options.resetReplayTransitionControls();const u=l===null?null:b9(i,l.replay,a);t.currentClip={startTime:r,endTime:o,targetTime:u},this.options.activateTimelineSource(i),this.options.getReplayPlayer()?.setState({currentTime:r,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),this.setStatus(u===null?`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s`:`Playing ${r.toFixed(2)}s to ${o.toFixed(2)}s; target ${u.toFixed(2)}s`)}catch(s){console.error("Failed to activate mechanics review item:",s),t.currentClip=null,this.setStatus(s instanceof Error?s.message:"Failed to load review item")}finally{t.loading=!1,this.render()}}}replayClip(){const e=this.activeReview?.currentClip,t=this.options.getReplayPlayer();!e||!t||t.setState({currentTime:e.startTime,playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1})}async submitDecision(e){const t=this.activeReview,i=t?.manifest.items[t.currentIndex]??null,s=Uw(i);if(!t||!i||!s){this.setStatus("Current review item has no review endpoint.");return}this.setStatus(`Submitting ${$m(e)}...`);const a=await fetch(s,{method:"POST",headers:{"content-type":"application/json",...P9()},credentials:"same-origin",body:JSON.stringify({status:e})});if(!a.ok){let r=`${a.status}${a.statusText?` ${a.statusText}`:""}`;try{const o=await a.json();typeof o.error=="string"&&(r=o.error)}catch{}this.setStatus(`Review failed: ${r}`);return}i.meta=i.meta??{},i.meta.reviewStatus=e,this.setStatus(`Marked ${$m(e)}.`),this.render()}enforceClipBoundary(e){const t=this.activeReview?.currentClip,i=this.options.getReplayPlayer();if(!t||!i||this.boundaryGuard)return!1;const s=e.currentTime=t.endTime-.025;if(!s&&!a)return!1;this.boundaryGuard=!0;try{i.setState({currentTime:s?t.startTime:t.endTime,playing:!1,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),a&&this.setStatus(`Finished clip at ${t.endTime.toFixed(2)}s`)}finally{this.boundaryGuard=!1}return!0}getBoundTime(e,t,i){const s=this.options.getReplayPlayer();return s?v9(e,t,s.replay,i):t.kind==="time"?t.value:0}getPlayerName(e){const t=S9(e);if(t)return t;const i=this.options.getReplayPlayer()?.replay.players??[];return Fw(e.perspective,i)?.name??"--"}}function $m(n){return typeof n=="string"&&n.trim()?n.replaceAll("_"," "):"unreviewed"}function Uw(n){if(!n)return null;if(typeof n.meta?.reviewEndpoint=="string"&&n.meta.reviewEndpoint)return n.meta.reviewEndpoint;const e=typeof n.meta?.eventId=="string"&&n.meta.eventId?n.meta.eventId:n.id;return e?`/api/v1/events/${encodeURIComponent(e)}/reviews`:null}function P9(){const n=new URLSearchParams(window.location.search),e=n.get("reviewToken")??n.get("token")??window.localStorage.getItem("rocket_sense_access_token");return e?{Authorization:`Bearer ${e}`}:{}}function I9(n){return new R9(n)}const L9=["replayUrl","replay_url","replay"],k9=["r","replayUrlZ","replay_url_z"],D9=["ballchasing","ballchasingId","ballchasingUuid","ballchasingReplay"];function O9(n){const e=n.replaceAll("-","+").replaceAll("_","/"),t=e.padEnd(Math.ceil(e.length/4)*4,"="),i=atob(t),s=new Uint8Array(i.length);for(let a=0;a{n.signal.aborted||(console.error("Failed to load replay URL:",t),n.statusReadout.textContent=t instanceof Error?t.message:"Failed to load replay URL")})}function H9(n){n.initialBundle?n.loadReplayBundleForDisplay({name:n.initialReplayName??"replay",preparingStatus:"Preparing replay...",async readBytes(){throw new Error("Replay bytes are not available for this preloaded replay")}},Promise.resolve(n.initialBundle)).catch(i=>{n.signal.aborted||(console.error("Failed to load preprocessed replay bundle:",i),n.statusReadout.textContent=i instanceof Error?i.message:"Failed to load preprocessed replay bundle")}):n.loadFromLocation!==!1&&z9(n);const e=_9();if(!e)return;const t=n.getMechanicsReviewController();t?.setUrl(e),n.showMechanicsReviewWindow(),t?.loadPlaylistFromUrl(e).catch(i=>{n.signal.aborted||(console.error("Failed to load mechanics review playlist from URL:",i),t?.setStatus(i instanceof Error?i.message:"Failed to load mechanics review playlist from URL"))})}function V9(n){const e=()=>{n.getSkipPostGoalTransitions().checked=!1,n.getSkipKickoffs().checked=!1},t=(i,s)=>{const a=n.getReplayPlayer();!a||!Number.isFinite(i)||(n.getMechanicsReviewController()?.clearCurrentClip(),e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:s,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())};return{watchGoalReplay(i,s){const a=n.getReplayPlayer();if(!a||!Number.isFinite(i))return;if(n.getMechanicsReviewController()?.clearCurrentClip(),s!==null&&a.replay.players.some(o=>o.id===s)){a.setAttachedPlayer(s),a.setCameraViewMode("follow");const o=n.getCameraControlsController();o&&(o.freeCameraPreset=null)}e(),a.setState({currentTime:Math.max(0,i-n.goalWatchLeadSeconds),playing:!0,skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate()},cueGoalReplay(i){t(i,!1)},cueTimelineEvent(i){const s=n.getReplayPlayer();s&&(n.getMechanicsReviewController()?.clearCurrentClip(),e(),s.setState({currentTime:cy(i),skipPostGoalTransitionsEnabled:!1,skipKickoffsEnabled:!1}),n.scheduleConfigUrlUpdate())},applyConfigToReplayPlayer(i){const s=n.getReplayPlayer();if(!s)return;s.setState(R6(i.playback,i.camera,i));const a=n.getCameraControlsController();a&&(a.freeCameraPreset=i.camera.freePreset??null),i.camera.mode==="free"&&i.camera.freePreset&&s.setFreeCameraPreset(i.camera.freePreset),n.syncBoostPadOverlayPlugin(),n.setupActiveModules(),n.renderModuleSummary(),n.renderModuleSettings(),n.renderStatsWindows(s.getState().frameIndex)}}}function G9(n){let e=!1,t=null;const i=()=>n.getFloatingWindowController()?.getSingletonConfigs()??[],s=()=>n.getStatsWindowsController()?.getConfigs()??[],a=()=>{const o=n.getActiveModulesRuntime(),l=n.getReplayPlayer();return A6({playback:E6({replayPlayer:l,playbackRate:n.playbackRate,skipPostGoalTransitions:n.skipPostGoalTransitions,skipKickoffs:n.skipKickoffs}),camera:C6({replayPlayer:l,cameraControlsController:n.getCameraControlsController()}),activeTimelineEventSourceIds:o.getActiveTimelineEventSourceIds(),activeTimelineRangeModuleIds:o.getActiveTimelineRangeModuleIds(),activeMechanicTimelineKinds:o.getActiveMechanicTimelineKinds(),activeRenderEffectModuleIds:o.getActiveRenderEffectModuleIds(),initialConfig:n.getInitialConfig(),replayPlayer:l,boostPadOverlayEnabled:o.getBoostPadOverlayEnabled(),recording:n.getRecordingWindowController()?.getConfigSnapshot()??{},singletonWindows:i(),statsWindows:s(),moduleConfigs:M6(n.modules)})},r=o=>{b6(tC(n.modules),o)};return{setApplyingConfig(o){e=o},reset(){t!==null&&(window.clearTimeout(t),t=null),e=!1},scheduleConfigUrlUpdate(){e||(t!==null&&window.clearTimeout(t),t=window.setTimeout(()=>{t=null;const o=Z1(new URL(window.location.href),a());window.history.replaceState(window.history.state,"",o)},150))},applyConfigToStaticControls(o){if(n.getActiveModulesRuntime().applyOverlayConfig(o.overlays),n.skipPostGoalTransitions.checked=o.playback.skipPostGoalTransitions??n.skipPostGoalTransitions.checked,n.skipKickoffs.checked=o.playback.skipKickoffs??n.skipKickoffs.checked,n.hitboxWireframes.checked=o.overlays.hitboxWireframes,n.hitboxOnlyMode.checked=o.overlays.hitboxOnlyMode,n.getCameraControlsController()?.applyNameplateLiftUu(o.camera.nameplateLiftUu),n.getCameraControlsController()?.setAutoPossessionEnabled(o.camera.autoPossession??!1,{requestConfigSync:!1}),o.playback.rate!==void 0){const l=zf(o.playback.rate);n.playbackRate.value=`${l}`,n.playbackRateReadout.textContent=Ry(l)}n.getRecordingWindowController()?.applyConfig(o.recording),r(o.moduleConfigs),n.getFloatingWindowController()?.applySingletonConfigs(o.singletonWindows),n.getStatsWindowsController()?.replaceFromConfig(o.statsWindows),n.renderModuleSummary(),n.renderModuleSettings(),n.renderTimelineEventCount()}}}function $9(n){const e=t=>{const i=n.getLauncherToggle();n.getLauncherMenu().hidden=!t,i.setAttribute("aria-label",t?"Close menu":"Open menu"),i.setAttribute("aria-expanded",t?"true":"false")};return{bringWindowToFront(t){n.getFloatingWindowController()?.bringToFront(t)},showWindow(t){n.getFloatingWindowController()?.show(t)},toggleWindow(t){n.getFloatingWindowController()?.toggle(t)},hideWindow(t){n.getFloatingWindowController()?.hide(t)},setLauncherOpen:e,openReplayFilePicker(){n.getFileInput().click(),e(!1)},installWindowDragging(t,i){n.getFloatingWindowController()?.installDragging(t,i)},getElementWindowId(t){return t.closest("[data-window-id]")?.dataset.windowId??null}}}const rg=4096,wr=5120,W9=893,X9=642,ns=1/105;class K9{constructor(e){this.options=e,this.options.body.innerHTML=`
@@ -5920,4 +5985,4 @@ void main() {

Load a replay with shot events.

- `,this.chartCanvas=this.mustElement("#shot-chart-canvas"),this.shotList=this.mustElement("#shot-list"),this.summary=this.mustElement("#shot-visualization-summary"),this.details=this.mustElement("#shot-details"),this.sceneRoot=this.mustElement("#shot-demo-scene"),this.emptyState=this.mustElement("#shot-visualization-empty"),this.chartCanvas.addEventListener("click",t=>this.handleChartClick(t))}chartCanvas;shotList;summary;details;sceneRoot;emptyState;renderer=null;scene=null;camera=null;resizeObserver=null;selectedShotId=null;cachedReplay=null;cachedShots=[];lastShotsSignature="";lastListSelectionKey=null;lastSelectedShotKey=null;shotButtons=new Map;destroy(){this.resizeObserver?.disconnect(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}render(e=this.options.getReplayPlayer()?.getState()??null){const t=this.shotEvents(),i=e?.currentTime??null;this.findSelectedShot(t)||(this.selectedShotId=t[0]?this.shotKey(t[0],0):null);const s=this.findSelectedShot(t),a=s?.key??null,r=this.shotsSignature(t),o=r!==this.lastShotsSignature;this.emptyState.hidden=t.length>0,o&&(this.summary.textContent=this.summaryText(t)),o||a!==this.lastListSelectionKey?(this.renderShotList(t,i,a),this.lastListSelectionKey=a):this.updateShotListActiveState(t,i),this.renderChart(t,i),(o||a!==this.lastSelectedShotKey)&&(this.renderSelectedShot(s?.shot??null),this.lastSelectedShotKey=a),this.lastShotsSignature=r}shotEvents(){const e=this.options.getReplayPlayer()?.replay;return e?e===this.cachedReplay?this.cachedShots:(this.cachedReplay=e,this.cachedShots=e.timelineEvents.filter(u9),this.cachedShots):(this.cachedReplay=null,this.cachedShots=[],[])}summaryText(e){if(e.length===0)return"No shots";const t=e.filter(a=>a.shot.resulting_save).length,i=e.map(a=>a.shot.ball_speed).filter(a=>Number.isFinite(a)),s=i.length===0?null:i.reduce((a,r)=>a+r,0)/i.length;return`${e.length} shots | ${t} saved | avg ${id(s)}`}renderShotList(e,t,i){this.shotButtons.clear(),this.shotList.replaceChildren(...e.map((s,a)=>{const r=this.shotKey(s,a),o=document.createElement("button");o.type="button",o.className="shot-list-item",o.dataset.selected=String(r===i),o.dataset.active=String(Um(s,t)),o.addEventListener("click",()=>{this.selectedShotId=r,this.options.cueTimelineEvent(s),this.render()});const l=document.createElement("span");l.className="shot-list-title",l.textContent=s.playerName??s.playerId??`Shot ${a+1}`;const c=document.createElement("span");return c.className="shot-list-meta",c.textContent=`${Lw(s.time)} | ${id(s.shot.ball_speed)} | ${s.shot.resulting_save?"saved":"unsaved"}`,o.append(l,c),this.shotButtons.set(r,o),o}))}updateShotListActiveState(e,t){e.forEach((i,s)=>{const a=this.shotButtons.get(this.shotKey(i,s));a&&(a.dataset.active=String(Um(i,t)))})}renderChart(e,t){const i=this.chartCanvas.getContext("2d");if(!i)return;const s=window.devicePixelRatio||1,a=this.chartCanvas.getBoundingClientRect(),r=Math.max(320,Math.round(a.width*s)),o=Math.max(220,Math.round(a.height*s));(this.chartCanvas.width!==r||this.chartCanvas.height!==o)&&(this.chartCanvas.width=r,this.chartCanvas.height=o),i.setTransform(s,0,0,s,0,0);const l=r/s,c=o/s;i.clearRect(0,0,l,c),d9(i,l,c),e.forEach((u,d)=>{const h=u.shot.shot_touch_position??u.shot.ball_position,f=Ah(h,l,c),p=!!u.shot.resulting_save,g=Um(u,t),_=this.shotKey(u,d)===this.selectedShotId,m=_?6:g?5:4;i.beginPath(),i.arc(f.x,f.y,m,0,Math.PI*2),i.fillStyle=p?"#f2c14e":"#62d2a2",i.fill(),i.lineWidth=_?2.5:1.25,i.strokeStyle=_?"#f8fafc":g?"#e11d48":"rgba(4, 12, 20, 0.85)",i.stroke()})}renderSelectedShot(e){if(!e){this.details.replaceChildren(),this.clearThreeScene();return}this.details.replaceChildren(Ml("Player",e.playerName??e.playerId??"--"),Ml("Speed",id(e.shot.ball_speed)),Ml("Toward goal",id(e.shot.ball_speed_toward_goal)),Ml("Touch",f9(e.shot.shot_touch_position??e.shot.ball_position)),Ml("Save",e.shot.resulting_save?Lw(e.shot.resulting_save.time):"--")),this.renderThreeScene(e)}renderThreeScene(e){const t=this.ensureRenderer(),i=this.scene,s=this.camera;i.clear(),i.add(new Pc(16777215,1.2));const a=new Ko(16777215,1.7);a.position.set(18,28,22),i.add(a);const r=new Se(new Nn(Q_*2*ts,xr*2*ts),new je({color:1520422,side:ut}));r.rotation.x=-Math.PI/2,i.add(r);const o=new Pt({color:14280674,transparent:!0,opacity:.55});i.add(new Fn(new hf(r.geometry),o)),i.add(Pw(!0)),i.add(Pw(!1));const l=Iw(e.shot.shot_touch_position??e.shot.ball_position),c=Iw(e.shot.target_goal_position),u=e.shot.ball_velocity,d=u?l.clone().add(h9(u).normalize().multiplyScalar(22)):c.clone(),h=new Pg([l,l.clone().lerp(d,.45).setY(Math.max(l.y,d.y)+2.8),d]),f=new $e().setFromPoints(h.getPoints(36));i.add(new On(f,new Pt({color:e.shot.resulting_save?15909198:6476450,linewidth:2})));const p=new Se(new vn(.9,24,16),new kn({color:16317180,roughness:.36}));p.position.copy(l),i.add(p);const g=new Se(new oi(1.05,1.45,32),new je({color:8892372,side:ut}));g.position.copy(c),g.rotation.y=Math.PI/2,i.add(g),s.position.set(0,54,72),s.lookAt(0,0,0),t.render(i,s)}ensureRenderer(){if(this.renderer&&this.scene&&this.camera)return this.resizeThreeScene(),this.renderer;const e=new Jg({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return e.setPixelRatio(window.devicePixelRatio||1),this.sceneRoot.replaceChildren(e.domElement),this.renderer=e,this.scene=new Tc,this.scene.background=new de(463132),this.camera=new Qt(42,1,.1,500),this.resizeObserver=new ResizeObserver(()=>{this.resizeThreeScene();const t=this.shotEvents().find(i=>i.id===this.selectedShotId)??null;t&&this.renderThreeScene(t)}),this.resizeObserver.observe(this.sceneRoot),this.resizeThreeScene(),e}resizeThreeScene(){if(!this.renderer||!this.camera)return;const e=this.sceneRoot.getBoundingClientRect(),t=Math.max(240,Math.round(e.width)),i=Math.max(170,Math.round(e.height));this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.renderer.setSize(t,i,!1)}clearThreeScene(){this.sceneRoot.replaceChildren(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}handleChartClick(e){const t=this.shotEvents(),i=this.chartCanvas.getBoundingClientRect(),s={x:e.clientX-i.left,y:e.clientY-i.top};let a=null,r=Number.POSITIVE_INFINITY;for(const o of t){const l=Ah(o.shot.shot_touch_position??o.shot.ball_position,i.width,i.height),c=Math.hypot(l.x-s.x,l.y-s.y);c`${this.shotKey(t,i)}:${t.time}:${t.shot.ball_speed}`).join("|")}}function u9(n){return n.kind==="shot"&&!!n.shot}function Um(n,e){return e!==null&&Math.abs(e-n.time)<1.5}function d9(n,e,t){n.fillStyle="#0f2b24",n.fillRect(0,0,e,t),n.strokeStyle="rgba(226, 241, 236, 0.74)",n.lineWidth=1.2,n.strokeRect(18,18,e-36,t-36),n.beginPath(),n.moveTo(18,t/2),n.lineTo(e-18,t/2),n.stroke(),n.beginPath(),n.arc(e/2,t/2,34,0,Math.PI*2),n.stroke();const s=Ah({x:0,y:-xr},e,t),a=Ah({x:0,y:xr},e,t);n.fillStyle="#4fa3ff",n.fillRect(s.x-28,s.y-4,56,8),n.fillStyle="#ff8a4c",n.fillRect(a.x-28,a.y-4,56,8)}function Ah(n,e,t){const s=e-36,a=t-36;return{x:18+(n.x+Q_)/(Q_*2)*s,y:18+(1-(n.y+xr)/(xr*2))*a}}function Pw(n){const e=new Et,t=new Pt({color:n?16747084:5219327}),i=(n?xr:-xr)*ts,s=o9*ts,a=l9*ts,r=[new T(-s,0,i),new T(-s,a,i),new T(s,a,i),new T(s,0,i)];return e.add(new On(new $e().setFromPoints(r),t)),e}function Iw(n){return new T(n.x*ts,n.z*ts,n.y*ts)}function h9(n){return new T(n.x*ts,n.z*ts,n.y*ts)}function Ml(n,e){const t=document.createElement("div"),i=document.createElement("dt");i.textContent=n;const s=document.createElement("dd");return s.textContent=e,t.append(i,s),t}function Lw(n){return Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function id(n){return Number.isFinite(n)?`${Math.round(n)} uu/s`:"--"}function f9(n){return n?`${Math.round(n.x)}, ${Math.round(n.y)}, ${Math.round(n.z)}`:"--"}const p9=4,m9=100;let lt=null,Sy=null,Rh=null,To=null,Mo=null,Ph=null,kw=0,ja=null;const Of=b1({refreshTimelineRanges(){Oh()},rerenderCurrentState(){lt&<.setBoostPickupAnimationEnabled(lt.getState().boostPickupAnimationEnabled)},requestConfigSync(){_n()}}),Rd=lW({rerenderCurrentState(){if(!lt)return;const n=lt.getState();kc(n.frameIndex)},refreshTimelineRanges(){Oh()},requestConfigSync(){_n()}},{boostPickupFilters:Of}),gn=C6({modules:Rd,boostPickupFilters:Of,getContext:Co,getReplayPlayer:()=>lt,getTimelineOverlay:()=>Sy,getEventTimelineSources:Ty,withTimelineEventSeekTimes:Q1,renderModuleSummary:rr,renderModuleSettings:or,renderStatsWindows(){lt&&kc(lt.getState().frameIndex)},renderTimelineEventCount:uo,requestConfigSync:_n}),Fl=s9({goalWatchLeadSeconds:p9,getReplayPlayer:()=>lt,getCameraControlsController:()=>Wi,getMechanicsReviewController:()=>Xi,getSkipPostGoalTransitions:()=>Za,getSkipKickoffs:()=>Ja,syncBoostPadOverlayPlugin:J1,setupActiveModules:Dh,renderModuleSummary:rr,renderModuleSettings:or,renderStatsWindows(n){kc(n)},scheduleConfigUrlUpdate:_n}),Ei=r9({getFloatingWindowController:()=>fa,getLauncherMenu:()=>ng,getLauncherToggle:()=>tg,getFileInput:()=>Ih});let Nl=null,Ih,q1,eg,Dw,tg,ng,Ow,Fw,Nw,Uw,Bw,zw,Bm,zm,Hm,Vm,sd,ad,Hw,Vw,Gw,$w,la,Y1,j1,ig,Za,co=null,Ja,Ul,Bl,rd=null,sg=zo(null),Wi=null,zl=null,Ww=null,Eo=null,gc=null,yc=null,Lh=null,Xi=null,fa=null,ag=null,kh=null,Pd=null,ua=null,rg=null,Os=null;function _9(n){return gn.getActiveCapabilityIds(n)}function g9(){}function Co(){return!lt||!To||!Mo?null:{player:lt,replay:lt.replay,statsTimeline:To,statsFrameLookup:Mo,fieldScale:1}}function Dh(){gn.setupActiveModules()}function Z1(){gn.teardownActiveModules()}function Xw(n,e,t){gn.toggleCapability(n,e,t)}function y9(){gn.clearTimelineEventSources()}function v9(){gn.clearTimelineRangeSources()}function b9(){gn.clearStandalonePlugins()}function J1(){gn.syncBoostPadOverlayPlugin()}function Kw(){gn.syncTimelineEvents()}function Oh(){gn.syncTimelineRanges()}function uo(){const n=Co();if(!n){ig.textContent="--";return}ig.textContent=`${x9(n)}`}function x9(n){return yc?.countVisibleSources(n)??0}function re(n,e){const t=n.querySelector(e);if(!(t instanceof HTMLElement))throw new Error(`Missing element for selector: ${e}`);return t}function w9(n){if(!fa)throw new Error("Floating windows are not initialized.");return fa.readPlacement(n)}function S9(n,e){fa?.applyPlacement(n,e)}function kc(n=lt?.getState().frameIndex??0,e={}){Eo?.render(n,e)}function T9(n){Eo?.create(n)}function M9(){Eo?.clear()}function _n(){ua?.scheduleConfigUrlUpdate()}function E9(n){ua?.applyConfigToStaticControls(n)}function Q1(n){return n.map(e=>({...e,seekTime:ny(e)}))}function rr(){Lh?.renderSummary()}function eC(){yc?.render()}function Ty(n){return yc?.getSources(n)??[]}function C9(){const n=Co();return VW(n,Ty(n))}function My(){gc?.render()}function Ey(n){const e=Nl?.querySelector(`[data-window-id="${n}"]`);return!!(e&&!e.hidden)}function Cy(n,e={}){!e.forceScroll&&!Ey("event-playlist")||gc?.syncTimeline(n,e)}function tC(){gc?.reset()}function A9(n){const e=H6(n);e&&(gn.activateMechanicTimelineKind(e),eC())}function R9(n){return Xi?.enforceClipBoundary(n)??!1}function or(){Lh?.renderSettings()}function Ay(n=lt?.getState().frameIndex??0){ag?.render(n)}function nC(n=lt?.getState()??null){Ey("shot-visualization")&&Pd?.render(n)}function P9(n){if(Ei.toggleWindow(n),!!Ey(n)){if(n==="event-playlist"){My();const e=lt?.getState();e&&Cy(e,{forceScroll:!0})}n==="shot-visualization"&&nC(lt?.getState()??null)}}function I9(n){kh?.setTransportEnabled(n,lt?.getState())}function iC(n=Rh?.getStatus()??null){zl?.sync(n)}function L9(n){if(R9(n))return;const e=performance.now();n.playing&&e-kwU8(n,e=>{la.textContent=jo(e),co?.update(e)})))}async function og(n,e){await Z8(n,e,{elements:{fileInput:Ih,viewport:q1,emptyState:eg,statusReadout:la,playersReadout:Y1,framesReadout:j1,skipPostGoalTransitions:Za,skipKickoffs:Ja,hitboxWireframes:Ul,hitboxOnlyMode:Bl},getReplayLoadModal:()=>co,getReplayPlayer:()=>lt,setReplayPlayer(t){lt=t,ja?.syncSource()},getUnsubscribe:()=>Ph,setUnsubscribe(t){Ph=t},setCanvasRecorder(t){Rh=t},setLoadedReplayName(t){rg=t},setTimelineOverlay(t){Sy=t},setStatsTimeline(t){To=t,ja?.syncSource()},setStatsFrameLookup(t){Mo=t},setStatRegistry(t){sg=t},getInitialConfig:()=>Os,setApplyingConfig(t){ua?.setApplyingConfig(t)},getReplayTimelineEvents(t){return A4(t,gn.getActiveTimelineEventSourceIds())},withTimelineEventSeekTimes:Q1,includeBoostPickupAnimationPickup:k9,syncRecordingWindow:iC,setTransportEnabled:I9,teardownActiveModules:Z1,clearTimelineEventSources:y9,clearTimelineRangeSources:v9,clearStandalonePlugins:b9,clearRenderCaches:g9,resetEventPlaylistWindow:tC,renderModuleSummary:rr,renderScoreboard:Ay,renderTimelineEventCount:uo,renderMechanicsTimelineControls:eC,renderEventPlaylistWindow:My,renderModuleSettings:or,syncBoostPadOverlayPlugin:J1,setupActiveModules:Dh,renderSnapshot:L9,applyConfigToReplayPlayer:Fl.applyConfigToReplayPlayer,renderStatsWindows:kc,syncEventPlaylistTimeline:Cy,getCameraControlsController:()=>Wi})}function D9(n,e={}){rd?.(),n.innerHTML=hU(),Nl=n,co=IH(n),fa=k8({getRoot:()=>Nl??document,requestConfigSync:_n}),Ih=re(n,"#replay-file"),q1=re(n,"#viewport"),eg=re(n,"#empty-state"),Dw=re(n,"#empty-load-replay"),tg=re(n,"#launcher-toggle"),ng=re(n,"#launcher-menu"),Ow=re(n,"#load-replay-action"),Fw=re(n,"#floating-window-layer"),ag=l6({body:re(n,"#scoreboard-window-body"),getReplayPlayer:()=>lt,getStatsFrameLookup:()=>Mo});const t=re(n,"#mechanics-timeline-window-body");yc=KW({body:t,modules:Rd,getContext:Co,getActiveTimelineEventSourceIds:()=>gn.getActiveTimelineEventSourceIds(),getActiveMechanicTimelineKinds:()=>gn.getActiveMechanicTimelineKinds(),toggleEventSource(d,h){Xw(d,"events",h)},setMechanicTimelineKind(d,h){gn.setMechanicTimelineKind(d,h)},setupActiveModules:Dh,syncTimelineEvents:Kw,syncTimelineRanges:Oh,renderModuleSummary:rr,renderModuleSettings:or,renderTimelineEventCount:uo,requestConfigSync:_n}),Nw=re(n,"#event-playlist-window-body"),gc=O8({body:Nw,getReplayPlayer:()=>lt,getSources:C9,cueTimelineEvent:Fl.cueTimelineEvent,formatTime:ds}),Pd=new c9({body:re(n,"#shot-visualization-window-body"),getReplayPlayer:()=>lt,cueTimelineEvent:Fl.cueTimelineEvent}),Uw=re(n,"#replay-loading-summary"),Bw=re(n,"#replay-loading-active"),zw=re(n,"#replay-loading-list");const i=$6({elements:{reviewSummary:re(n,"#mechanics-review-replay-load-summary"),loadingSummary:Uw,loadingActive:Bw,loadingList:zw},isActiveReview(d){return Xi?.review===d},onActiveLoadProgress(d){la.textContent=jo(d),co?.update(d)}});Xi=K6({elements:{file:re(n,"#mechanics-review-file"),url:re(n,"#mechanics-review-url"),loadUrl:re(n,"#mechanics-review-load-url"),status:re(n,"#mechanics-review-status"),index:re(n,"#mechanics-review-index"),title:re(n,"#mechanics-review-title"),mechanic:re(n,"#mechanics-review-mechanic"),player:re(n,"#mechanics-review-player"),clip:re(n,"#mechanics-review-clip"),event:re(n,"#mechanics-review-event"),reason:re(n,"#mechanics-review-reason"),previous:re(n,"#mechanics-review-prev"),replay:re(n,"#mechanics-review-replay"),next:re(n,"#mechanics-review-next"),confirm:re(n,"#mechanics-review-confirm"),reject:re(n,"#mechanics-review-reject"),uncertain:re(n,"#mechanics-review-uncertain"),count:re(n,"#mechanics-review-count"),list:re(n,"#mechanics-review-list")},replayLoads:i,getReplayPlayer:()=>lt,resetReplayTransitionControls(){Za.checked=!1,Ja.checked=!1},activateTimelineSource:A9,loadReplayBundleForDisplay:og,applyClipPerspective(d){Wi?.followPlayerWithReplayCamera(d.playerId,{ballCam:d.ballCam,usePlayerCameraSettings:d.usePlayerCameraSettings})},showReplayLoadingWindow(){Ei.showWindow("replay-loading")}});const s=re(n,"#boost-pickup-filters-window-body"),a=re(n,"#touch-controls-window-body");Bm=re(n,"#stats-window-layer"),Eo=xW({layer:Bm,getReplayPlayer:()=>lt,getStatsTimeline:()=>To,getStatsFrameLookup:()=>Mo,getStatRegistry:()=>sg,readWindowPlacement:w9,applyWindowPlacement:S9,bringWindowToFront:Ei.bringWindowToFront,setLauncherOpen:Ei.setLauncherOpen,requestConfigSync:_n,watchGoalReplay:Fl.watchGoalReplay,cueGoalReplay:Fl.cueGoalReplay}),zm=re(n,"#toggle-playback"),Hm=re(n,"#previous-frame"),Vm=re(n,"#next-frame"),sd=re(n,"#playback-rate"),Wi=kH({elements:{attachedPlayer:re(n,"#attached-player"),cameraViewFreeButton:re(n,"#camera-view-free"),cameraViewFollowButton:re(n,"#camera-view-follow"),cameraViewAutoPossession:re(n,"#camera-view-auto-possession"),cameraViewOverheadButton:re(n,"#camera-view-overhead"),cameraViewSideButton:re(n,"#camera-view-side"),usePlayerCameraSettings:re(n,"#use-player-camera-settings"),cameraSettingsControls:re(n,"#camera-settings-controls"),customCameraFov:re(n,"#custom-camera-fov"),customCameraHeight:re(n,"#custom-camera-height"),customCameraPitch:re(n,"#custom-camera-pitch"),customCameraDistance:re(n,"#custom-camera-distance"),customCameraStiffness:re(n,"#custom-camera-stiffness"),customCameraSwivelSpeed:re(n,"#custom-camera-swivel-speed"),customCameraTransitionSpeed:re(n,"#custom-camera-transition-speed"),customCameraFovReadout:re(n,"#custom-camera-fov-readout"),customCameraHeightReadout:re(n,"#custom-camera-height-readout"),customCameraPitchReadout:re(n,"#custom-camera-pitch-readout"),customCameraDistanceReadout:re(n,"#custom-camera-distance-readout"),customCameraStiffnessReadout:re(n,"#custom-camera-stiffness-readout"),customCameraSwivelSpeedReadout:re(n,"#custom-camera-swivel-speed-readout"),customCameraTransitionSpeedReadout:re(n,"#custom-camera-transition-speed-readout"),ballCamOffButton:re(n,"#ball-cam-off"),ballCamOnButton:re(n,"#ball-cam-on"),ballCamPlayerButton:re(n,"#ball-cam-player"),nameplateLift:re(n,"#custom-nameplate-lift"),nameplateLiftReadout:re(n,"#custom-nameplate-lift-readout"),cameraProfileReadout:re(n,"#camera-profile-readout"),cameraFovReadout:re(n,"#camera-fov-readout"),cameraHeightReadout:re(n,"#camera-height-readout"),cameraPitchReadout:re(n,"#camera-pitch-readout"),cameraBaseDistanceReadout:re(n,"#camera-base-distance-readout"),cameraStiffnessReadout:re(n,"#camera-stiffness-readout")},getReplayPlayer:()=>lt,requestConfigSync:_n,onAutoPossessionChange(d){ja?.syncSource(),d&&ja?.syncCurrentFrame()}}),ja=rV({getReplayPlayer:()=>lt,getStatsTimeline:()=>To,getCameraControlsController:()=>Wi}),S1(re(n,"#touch-color-legend-body"),["team"]),Lh=ZW({elements:{summary:re(n,"#module-summary"),settings:re(n,"#module-settings"),boostPickupFilters:s,touchControls:a},modules:Rd,boostPickupFilters:Of,getContext:Co,getTimelineSources:()=>Ty(Co()),getActiveModules:()=>gn.getActiveModules(),getActiveCapabilityIds:_9,getBoostPickupAnimationEnabled:()=>lt?.getState().boostPickupAnimationEnabled??!1,toggleCapability:Xw,toggleBoostPickupAnimation(){const d=!(lt?.getState().boostPickupAnimationEnabled??!1);lt?.setBoostPickupAnimationEnabled(d),Dh(),rr(),or(),_n()},syncTimelineEvents:Kw,syncTimelineRanges:Oh,renderTimelineEventCount:uo,requestConfigSync:_n}),Hw=re(n,"#time-readout"),Vw=re(n,"#frame-readout"),Gw=re(n,"#duration-readout"),$w=re(n,"#playback-status-readout"),la=re(n,"#status-readout"),Y1=re(n,"#players-readout"),j1=re(n,"#frames-readout"),ig=re(n,"#events-readout"),ad=re(n,"#playback-rate-readout"),Za=re(n,"#skip-post-goal-transitions"),Ja=re(n,"#skip-kickoffs"),Ul=re(n,"#hitbox-wireframes"),Bl=re(n,"#hitbox-only-mode"),kh=u6({elements:{togglePlayback:zm,previousFrame:Hm,nextFrame:Vm,playbackRate:sd,playbackRateReadout:ad,skipPostGoalTransitions:Za,skipKickoffs:Ja,hitboxWireframes:Ul,hitboxOnlyMode:Bl,emptyState:eg,timeReadout:Hw,frameReadout:Vw,durationReadout:Gw,playbackStatusReadout:$w},getFrameCount:()=>lt?.replay.frameCount??0,getCameraControlsController:()=>Wi}),zl=s6({elements:{fps:re(n,"#recording-fps"),playbackRate:re(n,"#recording-playback-rate"),start:re(n,"#recording-start"),fullReplay:re(n,"#recording-full-replay"),stop:re(n,"#recording-stop"),download:re(n,"#recording-download"),clear:re(n,"#recording-clear"),status:re(n,"#recording-status"),elapsed:re(n,"#recording-elapsed"),size:re(n,"#recording-size"),type:re(n,"#recording-type")},getCanvasRecorder:()=>Rh,getReplayPlayer:()=>lt,getLoadedReplayName:()=>rg,setStatus(d){la.textContent=d},requestConfigSync:_n}),Ww=M6({elements:{mechanic:re(n,"#missed-event-mechanic"),capture:re(n,"#missed-event-capture"),list:re(n,"#missed-event-list"),export:re(n,"#missed-event-export"),upload:re(n,"#missed-event-upload"),clear:re(n,"#missed-event-clear"),status:re(n,"#missed-event-status")},getReplayPlayer:()=>lt,showWindow:()=>Ei.showWindow("missed-events")}),ua=a9({modules:Rd,playbackRate:sd,playbackRateReadout:ad,skipPostGoalTransitions:Za,skipKickoffs:Ja,hitboxWireframes:Ul,hitboxOnlyMode:Bl,getReplayPlayer:()=>lt,getCameraControlsController:()=>Wi,getRecordingWindowController:()=>zl,getFloatingWindowController:()=>fa,getStatsWindowsController:()=>Eo,getActiveModulesRuntime:()=>gn,getInitialConfig:()=>Os,renderModuleSummary:rr,renderModuleSettings:or,renderTimelineEventCount:uo});const r=B1(window.location),o=g8(window.location);let l=null;if(e.initialConfig!==void 0)Os=e.initialConfig;else{try{Os=_8(window.location)}catch(d){l=d,console.error("Invalid stats player config:",d),la.textContent=d instanceof Error?d.message:"Invalid stats player config",Os=null}o&&j8(r,Os,l)}const c=new AbortController;Ei.installWindowDragging(Fw,c.signal),Ei.installWindowDragging(Bm,c.signal);const u=()=>{c.abort(),Ph?.(),Ph=null,Z1(),lt?.destroy(),lt=null,Rh=null,Sy=null,To=null,Mo=null,sg=zo(null),M9(),Eo=null,gn.reset(),co?.destroy(),co=null,tC(),yc=null,gc=null,Xi?.reset(),Xi=null,rg=null,ja?.reset(),ja=null,Wi=null,zl=null,Lh=null,ag=null,kh=null,Pd?.destroy(),Pd=null,Os=null,ua?.reset(),ua=null,fa?.reset(),fa=null,Nl===n&&(Nl=null,n.replaceChildren()),rd===u&&(rd=null)};if(rd=u,Os){ua?.setApplyingConfig(!0);try{E9(Os)}finally{ua?.setApplyingConfig(!1)}}return d6({elements:{root:n,launcherToggle:tg,launcherMenu:ng,loadReplayAction:Ow,emptyLoadReplay:Dw,fileInput:Ih,togglePlayback:zm,previousFrame:Hm,nextFrame:Vm,playbackRate:sd,playbackRateReadout:ad,skipPostGoalTransitions:Za,skipKickoffs:Ja,hitboxWireframes:Ul,hitboxOnlyMode:Bl},signal:c.signal,setLauncherOpen:Ei.setLauncherOpen,openReplayFilePicker:Ei.openReplayFilePicker,getElementWindowId:Ei.getElementWindowId,toggleWindow:P9,hideWindow:Ei.hideWindow,createStatsWindow:T9,async loadReplayFile(d){try{Xi?.clearCurrentClip({resetReplayId:!0,render:!0}),await qw(F8(d))}catch(h){console.error("Failed to load replay:",h),la.textContent=h instanceof Error?h.message:"Failed to load replay"}},togglePlayback(){lt?.togglePlayback(),_n()},stepFrames(d){lt?.stepFrames(d),_n()},setPlaybackRate(d){lt?.setPlaybackRate(d),_n()},setSkipPostGoalTransitionsEnabled(d){lt?.setSkipPostGoalTransitionsEnabled(d),_n()},setSkipKickoffsEnabled(d){lt?.setSkipKickoffsEnabled(d),_n()},setHitboxWireframesEnabled(d){lt?.setHitboxWireframesEnabled(d),_n()},setHitboxOnlyModeEnabled(d){lt?.setHitboxOnlyModeEnabled(d),_n()}}),Xi?.installEventListeners(c.signal),zl?.installEventListeners(c.signal),Ww?.installEventListeners(c.signal),Wi?.installEventListeners(c.signal),p6({getReplayPlayer:()=>lt,signal:c.signal}),window.addEventListener("message",d=>{if(d.origin!==window.location.origin)return;const h=d.data;!h||typeof h!="object"||h.source!=="rocket-sense"||h.type==="activateReviewItem"&&typeof h.index=="number"&&Number.isInteger(h.index)&&Xi?.activateItem(h.index)},{signal:c.signal}),rr(),or(),Ay(),Wi?.renderProfile(),Wi?.syncModeButtons(),iC(),uo(),Xi?.render(),My(),i9({signal:c.signal,location:window.location,statusReadout:la,initialBundle:e.initialBundle,initialReplayName:e.initialReplayName,loadFromLocation:e.loadFromLocation,loadReplay:qw,loadReplayBundleForDisplay:og,getMechanicsReviewController:()=>Xi,showMechanicsReviewWindow(){Ei.showWindow("mechanics-review")}}),{root:n,destroy:u}}const In=["#58a6ff","#f39a37"],Yw=["#58a6ff","#f39a37","#65d6ad","#d2a8ff","#ff7b72","#f2cc60","#79c0ff","#ffa657"],El={zero:"#ff7b72",low:"#f39a37",midLow:"#f2cc60",midHigh:"#65d6ad",high:"#58a6ff"},jw={big:"#f39a37",small:"#65d6ad"},sC=[{id:"overview",label:"Overview"},{id:"goals",label:"Goals"},{id:"boost",label:"Boost"},{id:"territory",label:"Possession & territory"},{id:"involvement",label:"Player involvement"},{id:"dump",label:"All stats"}],O9=[{statId:"player:core.score",kind:"bar",title:"Score by player"},{statId:"player:core.shots",kind:"bar",title:"Shots by player"},{statId:"player:touch.touch_count",kind:"bar",title:"Touches by player"},{statId:"team:core.shots",kind:"pie",title:"Shot share"},{statId:"team:possession.possession_time",kind:"pie",title:"Possession share"},{statId:"team:ball_half.offensive_pressure_time",kind:"bar",title:"Offensive pressure"}],F9=[{statId:"player:touch.touch_count",kind:"bar",title:"Touches"},{statId:"player:touch.control_touch_count",kind:"bar",title:"Control touches"},{statId:"player:touch.hard_hit_count",kind:"bar",title:"Hard hits"},{statId:"player:demo.demos_inflicted",kind:"bar",title:"Demos inflicted"},{statId:"player:fifty_fifty.wins",kind:"bar",title:"50/50 wins"},{statId:"player:powerslide.total_duration",kind:"bar",title:"Powerslide time"}];function te(n,e={}){const t=document.createElement(n);return e.className&&(t.className=e.className),e.id&&(t.id=e.id),e.text!==void 0&&(t.textContent=e.text),t}function aC(n,e,t){return e==="player"?n.name||`Player ${t+1}`:t===0?"Blue":"Orange"}function Fh(n){return n?Ct(n):null}function ao(n,e){const t=Fh(e);return t?n.players.find(i=>Fh(i.player_id)===t)?.name??t:"--"}function lg(n){return n===!0?"Blue":n===!1?"Orange":"--"}function rC(n,e){return e==="player"?n.players:[n.team_zero,n.team_one]}function oC(n){return n.is_team_0?In[0]:In[1]}function N9(n,e,t){return e==="player"?oC(n):In[t%In.length]}function U9(n,e){const t=n.frames.at(-1);return t?e.get(t.frame_number)??null:null}function B9(n,e){const t=n.read(e);return typeof t=="number"&&Number.isFinite(t)?t:null}function wr(n){return n==null||!Number.isFinite(n)?"--":`${Number(n.toFixed(1))}s`}function z9(n){return n==null||!Number.isFinite(n)?"--":`${Number(n.toFixed(1))}%`}function Ai(n,e){return e>0?`${wr(n)} (${z9(n/e*100)})`:"--"}function Id(n){return n?`x ${Math.round(n.x)}, y ${Math.round(n.y)}, z ${Math.round(n.z)}`:"--"}function es(n){return n==null||!Number.isFinite(n)?"--":`${Number(Ys(n).toFixed(0))}`}function Jl(n){if(n==null||!Number.isFinite(n))return"--";const e=Math.max(0,n),t=Math.floor(e/60),i=e-t*60;return`${t}:${i.toFixed(1).padStart(4,"0")}`}function H9(n,e,t){if(!n||e==null||!Number.isFinite(e))return null;const i=Fh(t),s=new URL("../",window.location.href);return s.searchParams.set("replayUrl",n.href),z1(s,lC(e,i)).href}function V9(n,e,t){if(e==null||!Number.isFinite(e))return null;const i=Fh(t);return{config:lC(e,i),href:H9(n,e,t),goalTime:e,playerId:i}}function lC(n,e){return{version:Eh,playback:{currentTime:Math.max(0,n-4),playing:!0,rate:1,skipPostGoalTransitions:!1,skipKickoffs:!1},camera:e?{mode:"follow",attachedPlayerId:e,ballCam:!0}:{mode:"free"},overlays:{timelineEvents:["core"],timelineRanges:[],mechanics:[],renderEffects:[],followedPlayerHud:!1,boostPads:!0,boostPickupAnimation:!1,hitboxWireframes:!1,hitboxOnlyMode:!1},recording:{},singletonWindows:[],statsWindows:[],moduleConfigs:{}}}function cC(n,e){return e>0?`${Number((Ys(n)/e*60).toFixed(1))}/min`:"--"}function G9(n){const e=new Map;for(const t of n){const i=`${t.scope}:${t.category}`,s=e.get(i);s?s.push(t):e.set(i,[t])}return new Map([...e].sort(([t],[i])=>t.localeCompare(i)))}function uC(n){const[e,t]=n.split(":"),i=(t??"").replace(/_/g," ").replace(/\b\w/g,s=>s.toUpperCase());return`${e==="player"?"Player":"Team"} ${i}`}function dC(n){return`stats-${n.replace(/[^a-z0-9]+/gi,"-").toLowerCase()}`}function $9(n){return n.path.slice(1).join(".")||n.label}function W9(n){return!n.path.includes("entries")}function Tn(n,e,t){const i=te("section",{className:"stats-report-summary-card"});return i.append(te("span",{text:n}),te("strong",{text:e})),t&&i.append(te("small",{text:t})),i}function X9(n,e){const t=te("section",{className:"stats-report-summary"}),i=e.time>0?wr(e.time):"--";return t.append(Tn("Replay",n.fileName),Tn("Frames",n.statsTimeline.frames.length.toLocaleString()),Tn("Duration",i),Tn("Players",e.players.length.toLocaleString())),t}function Jo(n,e){const t=te("section",{className:"stats-report-page-intro"});return t.append(te("h2",{text:n}),te("p",{text:e})),t}function K9(n,e,t){const i=e[0]?.scope??"player",s=rC(t,i),a=te("section",{className:"stats-report-section",id:dC(n)}),r=te("header");r.append(te("h2",{text:uC(n)}),te("span",{text:`${e.length} stats`}));const o=te("div",{className:"stats-report-table-wrap"}),l=te("table",{className:"stats-report-table"}),c=te("thead"),u=te("tr");u.append(te("th",{text:"Statistic"})),s.forEach((h,f)=>{u.append(te("th",{text:aC(h,i,f)}))}),c.append(u);const d=te("tbody");return e.forEach(h=>{const f=te("tr");f.append(te("td",{text:$9(h)})),s.forEach(p=>{f.append(te("td",{text:h.format(h.read(p))}))}),d.append(f)}),l.append(c,d),o.append(l),a.append(r,o),a}function Ry(n,e){return rC(e,n.scope).map((t,i)=>({label:aC(t,n.scope,i),value:B9(n,t)??0,color:N9(t,n.scope,i)})).filter(t=>t.value>0)}function Ql(n,e){const t=Math.max(...n.map(s=>s.value),1),i=te("div",{className:"stats-report-bar-chart"});return n.forEach(s=>{const a=te("div",{className:"stats-report-bar-row"});a.style.setProperty("--bar-color",s.color),a.style.setProperty("--bar-width",`${Math.max(2,s.value/t*100)}%`),a.append(te("span",{className:"stats-report-bar-label",text:s.label}),te("span",{className:"stats-report-bar-track"}),te("strong",{text:s.formatted??e(s.value)})),i.append(a)}),i}function hC(n,e){const t=n.path.join(".");return n.category==="boost"&&(t.includes("amount_")||t.includes("overfill")||t.includes("boost_integral"))?es(e):t.endsWith("_time")||t.startsWith("time_")||t.includes(".time_")||t.endsWith("_duration")||t==="active_game_time"||t==="tracked_time"?wr(e):n.format(e)}function q9(n,e){return Ql(Ry(n,e),t=>hC(n,t))}function Y9(n){const e=n.reduce((i,s)=>i+s.value,0);if(e<=0)return"conic-gradient(rgba(255,255,255,0.12) 0 360deg)";let t=0;return`conic-gradient(${n.map(i=>{const s=t;return t+=i.value/e*360,`${i.color} ${s}deg ${t}deg`}).join(", ")})`}function Nh(n,e){const t=n.reduce((r,o)=>r+o.value,0),i=te("div",{className:"stats-report-pie-chart"}),s=te("div",{className:"stats-report-pie"});s.style.background=Y9(n);const a=te("div",{className:"stats-report-pie-legend"});return n.forEach(r=>{const o=te("div");o.style.setProperty("--legend-color",r.color);const l=t>0?`${Math.round(r.value/t*100)}%`:"--";o.append(te("span",{text:r.label}),te("strong",{text:`${r.formatted??e(r.value)} (${l})`})),a.append(o)}),i.append(s,a),i}function j9(n,e){return Nh(Ry(n,e),t=>hC(n,t))}function fC(n,e="Territory share"){return ai(e,Nh([{label:"Blue half",value:n.team_zero.ball_half.defensive_half_time,color:In[0]},{label:"Neutral",value:n.team_zero.ball_half.neutral_time,color:"#65d6ad"},{label:"Orange half",value:n.team_zero.ball_half.offensive_half_time,color:In[1]}],wr))}function ai(n,e,t){const i=te("section",{className:"stats-report-chart-card"});return i.append(te("h3",{text:n})),i.append(e),i}function pC(n,e,t){return Ry(e,t).length===0?null:ai(n.title,n.kind==="pie"?j9(e,t):q9(e,t))}function mC(n,e,t){const i=new Map(n.map(a=>[a.id,a])),s=te("section",{className:"stats-report-charts"});return t.forEach(a=>{const r=i.get(a.statId);if(!r)return;const o=pC(a,r,e);o&&s.append(o)}),s.childElementCount>0?s:null}function Ho(n,e){const t=te("div",{className:"stats-report-stacked-chart"});return n.forEach(i=>{const s=i.segments.reduce((l,c)=>l+Math.max(0,c.value),0),a=te("div",{className:"stats-report-stacked-row"}),r=te("div",{className:"stats-report-stacked-track"});i.segments.forEach(l=>{const c=te("span");c.style.setProperty("--segment-color",l.color),c.style.setProperty("--segment-width",`${s>0?Math.max(1.5,l.value/s*100):0}%`),c.title=`${l.label}: ${e(l.value,s)}`,r.append(c)});const o=te("div",{className:"stats-report-stacked-legend"});i.segments.forEach(l=>{const c=te("span",{text:`${l.label}: ${e(l.value,s)}`});c.style.setProperty("--legend-color",l.color),o.append(c)}),a.append(te("strong",{text:i.label}),r,o),t.append(a)}),t}function Ff(n){const e=te("section",{className:"stats-report-metric-grid"});return e.append(...n),e}function lr(n,e,t){const i=[...n].sort((a,r)=>e(r)-e(a))[0],s=i?e(i):0;return Tn(i?.name??"--",t(s))}function Z9(n,e){const t=te("div",{className:"stats-report-page"});t.append(Jo("All stats dump","Everything emitted by the current stats timeline, including experimental mechanic counters and low-level breakdowns."));const i=te("nav",{className:"stats-report-jump-nav"});for(const a of n.keys()){const r=te("a",{text:uC(a)});r.setAttribute("href",`#${dC(a)}`),i.append(r)}t.append(i);const s=te("div",{className:"stats-report-grid"});for(const[a,r]of n)s.append(K9(a,r,e));return t.append(s),t}let Ld=null,vc={};function J9(n,e,t){const i=te("div",{className:"stats-report-page"});i.append(X9(n,e)),i.append(Jo("Featured stats","A shorter readout of stable scoreboard, touch, boost, possession, and pressure signals. The raw export remains available in All stats."));const s=`${e.team_zero.core.goals}-${e.team_one.core.goals}`;i.append(Ff([Tn("Final score",s,"Blue - Orange"),lr(e.players,r=>r.touch.touch_count,r=>`${r} touches`),lr(e.players,r=>r.boost.tracked_time>0?Ys(r.boost.boost_integral/r.boost.tracked_time):0,r=>`${Number(r.toFixed(0))} avg boost`),lr(e.players,r=>r.core.score,r=>`${r} score`)]));const a=mC(t,e,O9)??te("section",{className:"stats-report-charts"});return a.append(fC(e)),i.append(a),i}function Q9(n){return[...n??[]].sort((e,t)=>e.kind.localeCompare(t.kind)||t.metadata.confidence-e.metadata.confidence)}function Zw(n){const e=new Map;for(const t of n)e.set(t.kind,(e.get(t.kind)??0)+1);return[...e.entries()].sort(([t,i],[s,a])=>a-i||Dn(t).localeCompare(Dn(s))).map(([t,i],s)=>({label:Dn(t),value:i,color:Yw[s%Yw.length],formatted:i.toLocaleString()}))}function e7(n){const e=te("dl",{className:"stats-report-detail-list"});for(const t of n){const i=te("div",{className:"stats-report-detail-item"});i.append(te("dt",{text:t.label}),te("dd",{text:t.value})),e.append(i)}return e}function t7(n){const e=te("div",{className:"stats-report-goal-tags"});if(n.length===0)return e.append(te("span",{className:"stats-report-goal-tag stats-report-goal-tag-empty",text:"Unlabeled"})),e;for(const t of n){const i=t.metadata,s=r1(t),a=s?` - ${s}`:"";e.append(te("span",{className:"stats-report-goal-tag",text:`${Dn(t.kind)} ${Math.round(i.confidence*100)}%${a}`}))}return e}function n7(n,e){if(e.length===0)return null;const t=te("div",{className:"stats-report-goal-subsection"});t.append(te("h3",{text:"Player context"}));const i=te("div",{className:"stats-report-table-wrap"}),s=te("table",{className:"stats-report-table"}),a=te("thead"),r=te("tr");["Player","Team","Boost","Leadup avg","Leadup min","Role","Position"].forEach(l=>{r.append(te("th",{text:l}))}),a.append(r);const o=te("tbody");for(const l of e){const c=te("tr");c.append(te("td",{text:ao(n,l.player)}),te("td",{text:lg(l.is_team_0)}),te("td",{text:es(l.boost_amount)}),te("td",{text:es(l.average_boost_in_leadup)}),te("td",{text:es(l.min_boost_in_leadup)}),te("td",{text:l.is_most_back?"Most back":"--"}),te("td",{text:Id(l.position)})),o.append(c)}return s.append(a,o),i.append(s),t.append(i),t}function i7(n,e,t,i,s){const a=i?.scoring_team_is_team_0??null,r=i?.scorer??null,o=i?.time??null,l=i?.frame??null,c=V9(e,o,r),u=te("section",{className:"stats-report-goal-card"});a!==null&&(u.dataset.team=a?"blue":"orange");const d=te("header"),h=te("div",{className:"stats-report-goal-heading"});if(h.append(te("h2",{text:`Goal ${t+1}`}),te("span",{text:`${lg(a)} - ${ao(n,r)} - ${Jl(o)}`})),d.append(h),c){if(vc.onWatchGoal){const g=te("button",{className:"stats-report-goal-watch",text:"Watch"});g.type="button",g.addEventListener("click",()=>{vc.onWatchGoal?.(c)}),d.append(g)}else if(c.href){const g=te("a",{className:"stats-report-goal-watch",text:"Watch"});g.setAttribute("href",c.href),g.setAttribute("target","_blank"),g.setAttribute("rel","noreferrer"),d.append(g)}}u.append(d),u.append(t7(s));const f=[{label:"Scoring team",value:lg(a)},{label:"Scorer",value:ao(n,r)},{label:"Time",value:Jl(o)},{label:"Frame",value:l==null?"--":l.toLocaleString()},{label:"Scorer last touch",value:i?.scorer_last_touch?`${ao(n,i.scorer_last_touch.player)} at ${Jl(i.scorer_last_touch.time)}`:"--"},{label:"Scoring most back",value:ao(n,i?.scoring_team_most_back_player)},{label:"Defending most back",value:ao(n,i?.defending_team_most_back_player)},{label:"Ball position",value:Id(i?.ball_position)},{label:"Last touch ball",value:Id(i?.scorer_last_touch?.ball_position)},{label:"Last touch player",value:Id(i?.scorer_last_touch?.player_position)}];u.append(e7(f));const p=n7(n,i?.players??[]);return p&&u.append(p),u}function s7(n,e){const t=te("div",{className:"stats-report-page"});t.append(Jo("Goal metadata","Goal-by-goal scorer, timing, context, tag confidence, and lead-up player state from the stats timeline event stream."));const i=[...be(n.statsTimeline,"goal_context")].sort((p,g)=>p.time-g.time),s=i.flatMap(p=>p.tags??[]),a=s.filter(T4),r=s.filter(M4),o=i.map((p,g)=>g),l=i.filter(p=>(p.tags??[]).length>0).length,c=Zw(a),u=Zw(r),d=c[0];if(t.append(Ff([Tn("Goals found",o.length.toLocaleString()),Tn("Tagged goals",l.toLocaleString()),Tn("Scorer goal tags",a.length.toLocaleString()),Tn("Assist goal tags",r.length.toLocaleString()),Tn("Top tag",d?`${d.label} (${d.value})`:"--")])),o.length===0)return t.append(te("section",{className:"stats-report-empty",text:"No goal metadata was emitted for this replay."})),t;const h=te("section",{className:"stats-report-charts"});h.append(ai("Scorer goal tags by type",c.length>0?Ql(c,p=>p.toLocaleString()):te("p",{className:"stats-report-note",text:"No scorer goal tags emitted."})),ai("Assist goal tags by type",u.length>0?Ql(u,p=>p.toLocaleString()):te("p",{className:"stats-report-note",text:"No assist goal tags emitted."})),ai("Goal timing",Ql(o.map(p=>{const g=i[p]??null,_=g?.time??0,m=g?.scoring_team_is_team_0??!0;return{label:`Goal ${p+1}`,value:_,color:m?In[0]:In[1],formatted:Jl(_)}}),Jl))),t.append(h);const f=te("div",{className:"stats-report-goal-list"});for(const p of o)f.append(i7(e,n.replayUrl,p,i[p]??null,Q9(i[p]?.tags)));return t.append(f),t}function a7(n,e){const t=te("div",{className:"stats-report-page"});t.append(Jo("Boost economy","A focused view of boost usage, collection, pad mix, starvation, and waste. Values are shown in normal 0-100 boost units.")),t.append(Ff([lr(n.players,a=>a.boost.amount_used,a=>`${es(a)} used`),lr(n.players,a=>a.boost.amount_stolen,a=>`${es(a)} stolen`),lr(n.players,a=>a.boost.overfill_total,a=>`${es(a)} overfill`),lr(n.players,a=>a.boost.time_zero_boost,a=>`${wr(a)} at zero`)]));const i=te("section",{className:"stats-report-charts"});i.append(ai("Boost used per minute",Ql(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,value:a.boost.tracked_time>0?Ys(a.boost.amount_used)/a.boost.tracked_time*60:0,color:oC(a),formatted:cC(a.boost.amount_used,a.boost.tracked_time)})),a=>`${Number(a.toFixed(1))}/min`)),ai("Pad collection mix",Ho(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"Big",value:a.boost.amount_collected_big,color:jw.big},{label:"Small",value:a.boost.amount_collected_small,color:jw.small}]})),a=>es(a))),ai("Boost tank time",Ho(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"0",value:a.boost.time_zero_boost,color:El.zero},{label:"0-25",value:a.boost.time_boost_0_25,color:El.low},{label:"25-50",value:a.boost.time_boost_25_50,color:El.midLow},{label:"50-75",value:a.boost.time_boost_50_75,color:El.midHigh},{label:"75-100",value:a.boost.time_boost_75_100+a.boost.time_hundred_boost,color:El.high}]})),Ai)));const s=new Map(e.map(a=>[a.id,a]));for(const a of[{statId:"player:boost.amount_used",kind:"bar",title:"Total boost used"},{statId:"player:boost.overfill_total",kind:"bar",title:"Boost overfill"},{statId:"player:boost.amount_stolen",kind:"bar",title:"Stolen boost"}]){const r=s.get(a.statId),o=r?pC(a,r,n):null;o&&i.append(o)}return t.append(i),t.append(r7(n)),t}function r7(n){const e=te("section",{className:"stats-report-section"}),t=te("header");t.append(te("h2",{text:"Boost scorecard"}),te("span",{text:"display units"}));const i=[{label:"Average boost",read(c){return c.boost.tracked_time>0?`${Number(Ys(c.boost.boost_integral/c.boost.tracked_time).toFixed(0))}`:"--"}},{label:"Used per minute",read(c){return cC(c.boost.amount_used,c.boost.tracked_time)}},{label:"Collected",read(c){return es(c.boost.amount_collected)}},{label:"Stolen",read(c){return es(c.boost.amount_stolen)}},{label:"Overfill",read(c){return es(c.boost.overfill_total)}},{label:"Big pads",read(c){return`${c.boost.big_pads_collected}`}},{label:"Small pads",read(c){return`${c.boost.small_pads_collected}`}},{label:"Time at zero",read(c){return Ai(c.boost.time_zero_boost,c.boost.tracked_time)}}],s=te("div",{className:"stats-report-table-wrap"}),a=te("table",{className:"stats-report-table"}),r=te("thead"),o=te("tr");o.append(te("th",{text:"Metric"})),n.players.forEach((c,u)=>{o.append(te("th",{text:c.name||`Player ${u+1}`}))}),r.append(o);const l=te("tbody");return i.forEach(c=>{const u=te("tr");u.append(te("td",{text:c.label})),n.players.forEach(d=>{u.append(te("td",{text:c.read(d)}))}),l.append(u)}),a.append(r,l),s.append(a),e.append(t,s),e}function o7(n){const e=te("div",{className:"stats-report-page"});e.append(Jo("Possession & territory","Team control, field-half pressure, and where each player spent time relative to the field and the ball."));const t=n.team_zero.possession.tracked_time,i=n.team_zero.ball_half.tracked_time,s=n.team_zero.ball_third.tracked_time;e.append(Ff([Tn("Blue possession",Ai(n.team_zero.possession.possession_time,t)),Tn("Orange possession",Ai(n.team_zero.possession.opponent_possession_time,t)),Tn("Blue pressure",Ai(n.team_zero.ball_half.offensive_half_time,i),"Time in Orange half"),Tn("Orange pressure",Ai(n.team_zero.ball_half.defensive_half_time,i),"Time in Blue half"),Tn("Blue final third",Ai(n.team_zero.ball_third.offensive_third_time,s),"Time in Orange third"),Tn("Orange final third",Ai(n.team_zero.ball_third.defensive_third_time,s),"Time in Blue third")]));const a=te("section",{className:"stats-report-charts"});return a.append(ai("Possession split",Nh([{label:"Blue control",value:n.team_zero.possession.possession_time,color:In[0]},{label:"Neutral",value:n.team_zero.possession.neutral_time,color:"#65d6ad"},{label:"Orange control",value:n.team_zero.possession.opponent_possession_time,color:In[1]}],wr)),fC(n,"Field half pressure"),ai("Ball third control",Nh([{label:"Blue third",value:n.team_zero.ball_third.defensive_third_time,color:In[0]},{label:"Neutral third",value:n.team_zero.ball_third.neutral_third_time,color:"#65d6ad"},{label:"Orange third",value:n.team_zero.ball_third.offensive_third_time,color:In[1]}],wr)),ai("Player field thirds",Ho(n.players.map((r,o)=>({label:r.name||`Player ${o+1}`,segments:[{label:"Def",value:r.positioning.time_defensive_third,color:r.is_team_0?In[0]:In[1]},{label:"Mid",value:r.positioning.time_neutral_third,color:"#65d6ad"},{label:"Off",value:r.positioning.time_offensive_third,color:r.is_team_0?In[1]:In[0]}]})),Ai)),ai("Role time",Ho(n.players.map((r,o)=>({label:r.name||`Player ${o+1}`,segments:[{label:"Most back",value:r.positioning.time_most_back,color:"#58a6ff"},{label:"Mid",value:r.positioning.time_mid_role,color:"#65d6ad"},{label:"Most forward",value:r.positioning.time_most_forward,color:"#f39a37"},{label:"Other",value:r.positioning.time_other_role,color:"rgba(255,255,255,0.22)"}]})),Ai))),e.append(a),e}function l7(n,e){const t=te("div",{className:"stats-report-page"});t.append(Jo("Player involvement","Interaction stats that are usually easier to trust at a glance: touches, hits, demos, 50/50 outcomes, movement, and powerslide usage."));const i=mC(e,n,F9);i&&t.append(i);const s=te("section",{className:"stats-report-charts"});return s.append(ai("Speed bands",Ho(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"Slow",value:a.movement.time_slow_speed,color:"#58a6ff"},{label:"Boost",value:a.movement.time_boost_speed,color:"#f2cc60"},{label:"Supersonic",value:a.movement.time_supersonic_speed,color:"#f39a37"}]})),Ai)),ai("Aerial profile",Ho(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"Ground",value:a.movement.time_on_ground,color:"#65d6ad"},{label:"Low air",value:a.movement.time_low_air,color:"#58a6ff"},{label:"High air",value:a.movement.time_high_air,color:"#d2a8ff"}]})),Ai))),t.append(s),t.append(te("p",{className:"stats-report-note",text:"Experimental event detectors such as speed flips, dodge refreshes, and ceiling shots are kept in All stats until their precision is stronger."})),t}function _C(){const n=window.location.hash.replace(/^#/,"");return sC.some(e=>e.id===n)?n:"overview"}function c7(n,e,t){const i=te("nav",{className:"stats-report-tabs"});return sC.forEach(s=>{const a=te("button",{text:s.label});a.type="button",a.dataset.active=s.id===n?"true":"false",a.addEventListener("click",()=>{_C()!==s.id&&window.history.replaceState(null,"",`#${s.id}`),Uh(e,t)}),i.append(a)}),i}function Py(n){const e=te("header",{className:"stats-report-header"}),t=te("div",{className:"stats-report-title"});if(t.append(te("h1",{text:"Replay Stats"}),te("p",{text:n??"Load a Rocket League replay to review curated stats pages, comparison graphs, and the complete raw stat dump."})),vc.showStandaloneActions!==!1){const i=te("div",{className:"stats-report-actions"}),s=te("label",{className:"stats-report-file-label",text:"Load replay"}),a=te("input");a.type="file",a.accept=".replay",a.addEventListener("change",async()=>{const o=a.files?.[0],l=Ld;o&&l instanceof HTMLElement&&await u7(l,o)}),s.append(a);const r=te("a",{className:"stats-report-link",text:"Open player"});r.setAttribute("href","../"),i.append(s,r),e.append(t,i)}else e.append(t);return e}function Uh(n,e){const t=U9(e.statsTimeline,e.statsFrameLookup);if(!t){n.replaceChildren(te("main",{className:"stats-report-empty",text:"The replay did not produce any stats frames."}));return}const i=zo(t).filter(W9),s=G9(i),a=_C(),r=te("main",{className:"stats-report"});r.append(Py()),r.append(c7(a,n,e)),a==="goals"?r.append(s7(e,t)):a==="boost"?r.append(a7(t,i)):a==="territory"?r.append(o7(t)):a==="involvement"?r.append(l7(t,i)):a==="dump"?r.append(Z9(s,t)):r.append(J9(e,t,i)),n.replaceChildren(r)}function Jw(n){return{...n,statsFrameLookup:n.statsFrameLookup??OE(n.statsTimeline)}}function bc(n,e){const t=te("main",{className:"stats-report"});t.append(Py(e)),t.append(te("p",{className:"stats-report-status",text:e})),n.replaceChildren(t)}async function gC(n,e,t,i){bc(n,`Loading ${t}...`);const s=await Cf(e,{onProgress(a){bc(n,jo(a))}});Uh(n,{fileName:t,replayUrl:i,statsTimeline:s.statsTimeline,statsFrameLookup:s.statsFrameLookup})}async function u7(n,e){try{await gC(n,new Uint8Array(await e.arrayBuffer()),e.name,null)}catch(t){bc(n,t instanceof Error?t.message:String(t))}}async function d7(n,e){try{bc(n,`Fetching ${e}...`);const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch replay: ${t.status} ${t.statusText}`);const i=new URL(e,window.location.href).pathname,s=decodeURIComponent(i.split("/").pop()||"remote replay");await gC(n,new Uint8Array(await t.arrayBuffer()),s,t.url?new URL(t.url):new URL(e,window.location.href))}catch(t){bc(n,t instanceof Error?t.message:String(t))}}function h7(n,e={}){if(Ld=n,vc=e,e.initialData)Uh(n,Jw(e.initialData));else{const i=te("main",{className:"stats-report"});i.append(Py()),i.append(te("section",{className:"stats-report-empty",text:"Load a replay to generate the stats report."})),n.replaceChildren(i)}const t=new URL(window.location.href).searchParams.get("replayUrl");return!e.initialData&&t&&d7(n,t),{root:n,render(i){Uh(n,Jw(i))},destroy(){Ld===n&&(Ld=null,vc={}),n.replaceChildren()}}}const od="replay-review-document",Qw="replay-review-root";function _i(n,e={}){const t=document.createElement(n);return e.className&&(t.className=e.className),e.id&&(t.id=e.id),e.text!==void 0&&(t.textContent=e.text),t}function yC(n,e={}){let t=null;const i=async()=>n instanceof Uint8Array?n:await n(),s=a=>(t||(t=i().then(r=>Cf(r,{reportEveryNFrames:100,onProgress:a}))),t);return{replayName:e.replayName,replayUrl:e.replayUrl??null,async getStatsTimeline(a){return(await s(a)).statsTimeline},getReplayBundle:s}}function f7(n=window.location){const e=K1(n.search,n.href);return e?yC(async()=>{const t=await fetch(e.url,e.fetchInit);if(!t.ok){const i=t.statusText?` ${t.statusText}`:"";throw new Error(`Failed to fetch replay: ${t.status}${i}`)}return new Uint8Array(await t.arrayBuffer())},{replayName:e.name,replayUrl:e.url}):null}function p7(n){return n||(new URL(window.location.href).searchParams.get("mode")==="viewer"?"viewer":"report")}function m7(n){const e=new URL(window.location.href);n==="report"?e.searchParams.delete("mode"):e.searchParams.set("mode",n),window.history.replaceState(null,"",e)}function _7(n,e={}){document.documentElement.classList.add(od),document.body.classList.add(od),n.classList.add(Qw);let t=e.provider??null,i=p7(e.initialMode),s=null,a=null,r=null,o=null,l=null,c=!1;const u=_i("main",{className:"replay-review-shell"}),d=_i("div",{className:"replay-review-toolbar"}),h=_i("div",{className:"replay-review-status"}),f=_i("button",{text:"Stats"}),p=_i("button",{text:"Viewer"}),g=_i("label",{className:"replay-review-file",text:"Load replay"}),_=_i("input"),m=_i("section",{className:"replay-review-pane"}),v=_i("section",{className:"replay-review-pane"});_.type="file",_.accept=".replay",g.append(_),d.append(h,g,f,p),u.append(d,m,v),n.replaceChildren(u);const y=L=>{h.textContent=L},b=L=>{y(jo(L))},S=()=>{s?.destroy(),s=null,a?.destroy(),a=null,r=null,o=null,l=null},x=()=>t?.getReplayBundle?(o||(o=t.getReplayBundle(b)),o):null,M=()=>t?(r||(r=t.getStatsTimeline?t.getStatsTimeline(b):x()?.then(L=>L.statsTimeline)??null),r):null,C=()=>{m.replaceChildren(_i("section",{className:"replay-review-empty",text:"Load a replay to review stats and playback."}))},w=async()=>{if(s)return;const L=M(),O=x();if(!L&&!O){C(),y("No replay loaded");return}m.replaceChildren(_i("section",{className:"replay-review-empty",text:"Loading stats..."}));const D=await O,U=D?.statsTimeline??(L?await L:null);if(!U){C(),y("No replay loaded");return}const F={fileName:t?.replayName??"replay",replayUrl:t?.replayUrl??null,statsTimeline:U,statsFrameLookup:D?.statsFrameLookup};c||(s=h7(m,{initialData:F,showStandaloneActions:!1,onWatchGoal(W){l=W.config,a?.destroy(),a=null,i="viewer",R()}}),y(`Loaded ${F.fileName}`))},E=async()=>{if(a)return;const L=x();if(!L){v.replaceChildren(_i("section",{className:"replay-review-empty",text:"Replay playback is not available for this data source."})),y("Viewer unavailable");return}v.replaceChildren(_i("section",{className:"replay-review-empty",text:"Loading viewer..."}));const O=await L;c||(a=D9(v,{initialBundle:O,initialConfig:l,initialReplayName:t?.replayName,loadFromLocation:!1}),l=null,y(`Loaded ${t?.replayName??"replay"}`))},R=()=>{f.dataset.active=String(i==="report"),p.dataset.active=String(i==="viewer"),m.hidden=i!=="report",v.hidden=i!=="viewer",m7(i),(i==="report"?w():E()).catch(L=>{console.error("Failed to render replay review mode:",L),y(L instanceof Error?L.message:"Failed to load replay review")})};return f.addEventListener("click",()=>{i="report",R()}),p.addEventListener("click",()=>{i="viewer",R()}),_.addEventListener("change",()=>{const L=_.files?.[0];L&&(t=yC(async()=>new Uint8Array(await L.arrayBuffer()),{replayName:L.name,replayUrl:null}),S(),R())}),R(),{root:n,setMode(L){i=L,R()},setProvider(L,O={}){t=L,O.mode&&(i=O.mode),S(),R()},destroy(){c=!0,S(),n.classList.remove(Qw),document.documentElement.classList.remove(od),document.body.classList.remove(od),n.replaceChildren()}}}const vC=document.querySelector("#app");if(!(vC instanceof HTMLElement))throw new Error("Missing #app mount element");let bC=null;try{bC=f7(window.location)}catch(n){console.error("Invalid replay URL:",n)}_7(vC,{provider:bC}); + `,this.chartCanvas=this.mustElement("#shot-chart-canvas"),this.shotList=this.mustElement("#shot-list"),this.summary=this.mustElement("#shot-visualization-summary"),this.details=this.mustElement("#shot-details"),this.sceneRoot=this.mustElement("#shot-demo-scene"),this.emptyState=this.mustElement("#shot-visualization-empty"),this.chartCanvas.addEventListener("click",t=>this.handleChartClick(t))}chartCanvas;shotList;summary;details;sceneRoot;emptyState;renderer=null;scene=null;camera=null;resizeObserver=null;selectedShotId=null;cachedReplay=null;cachedShots=[];lastShotsSignature="";lastListSelectionKey=null;lastSelectedShotKey=null;shotButtons=new Map;destroy(){this.resizeObserver?.disconnect(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}render(e=this.options.getReplayPlayer()?.getState()??null){const t=this.shotEvents(),i=e?.currentTime??null;this.findSelectedShot(t)||(this.selectedShotId=t[0]?this.shotKey(t[0],0):null);const s=this.findSelectedShot(t),a=s?.key??null,r=this.shotsSignature(t),o=r!==this.lastShotsSignature;this.emptyState.hidden=t.length>0,o&&(this.summary.textContent=this.summaryText(t)),o||a!==this.lastListSelectionKey?(this.renderShotList(t,i,a),this.lastListSelectionKey=a):this.updateShotListActiveState(t,i),this.renderChart(t,i),(o||a!==this.lastSelectedShotKey)&&(this.renderSelectedShot(s?.shot??null),this.lastSelectedShotKey=a),this.lastShotsSignature=r}shotEvents(){const e=this.options.getReplayPlayer()?.replay;return e?e===this.cachedReplay?this.cachedShots:(this.cachedReplay=e,this.cachedShots=e.timelineEvents.filter(q9),this.cachedShots):(this.cachedReplay=null,this.cachedShots=[],[])}summaryText(e){if(e.length===0)return"No shots";const t=e.filter(a=>a.shot.resulting_save).length,i=e.map(a=>a.shot.ball_speed).filter(a=>Number.isFinite(a)),s=i.length===0?null:i.reduce((a,r)=>a+r,0)/i.length;return`${e.length} shots | ${t} saved | avg ${od(s)}`}renderShotList(e,t,i){this.shotButtons.clear(),this.shotList.replaceChildren(...e.map((s,a)=>{const r=this.shotKey(s,a),o=document.createElement("button");o.type="button",o.className="shot-list-item",o.dataset.selected=String(r===i),o.dataset.active=String(Wm(s,t)),o.addEventListener("click",()=>{this.selectedShotId=r,this.options.cueTimelineEvent(s),this.render()});const l=document.createElement("span");l.className="shot-list-title",l.textContent=s.playerName??s.playerId??`Shot ${a+1}`;const c=document.createElement("span");return c.className="shot-list-meta",c.textContent=`${Hw(s.time)} | ${od(s.shot.ball_speed)} | ${s.shot.resulting_save?"saved":"unsaved"}`,o.append(l,c),this.shotButtons.set(r,o),o}))}updateShotListActiveState(e,t){e.forEach((i,s)=>{const a=this.shotButtons.get(this.shotKey(i,s));a&&(a.dataset.active=String(Wm(i,t)))})}renderChart(e,t){const i=this.chartCanvas.getContext("2d");if(!i)return;const s=window.devicePixelRatio||1,a=this.chartCanvas.getBoundingClientRect(),r=Math.max(320,Math.round(a.width*s)),o=Math.max(220,Math.round(a.height*s));(this.chartCanvas.width!==r||this.chartCanvas.height!==o)&&(this.chartCanvas.width=r,this.chartCanvas.height=o),i.setTransform(s,0,0,s,0,0);const l=r/s,c=o/s;i.clearRect(0,0,l,c),Y9(i,l,c),e.forEach((u,d)=>{const h=u.shot.shot_touch_position??u.shot.ball_position,f=Dh(h,l,c),p=!!u.shot.resulting_save,g=Wm(u,t),_=this.shotKey(u,d)===this.selectedShotId,m=_?6:g?5:4;i.beginPath(),i.arc(f.x,f.y,m,0,Math.PI*2),i.fillStyle=p?"#f2c14e":"#62d2a2",i.fill(),i.lineWidth=_?2.5:1.25,i.strokeStyle=_?"#f8fafc":g?"#e11d48":"rgba(4, 12, 20, 0.85)",i.stroke()})}renderSelectedShot(e){if(!e){this.details.replaceChildren(),this.clearThreeScene();return}this.details.replaceChildren(Al("Player",e.playerName??e.playerId??"--"),Al("Speed",od(e.shot.ball_speed)),Al("Toward goal",od(e.shot.ball_speed_toward_goal)),Al("Touch",Z9(e.shot.shot_touch_position??e.shot.ball_position)),Al("Save",e.shot.resulting_save?Hw(e.shot.resulting_save.time):"--")),this.renderThreeScene(e)}renderThreeScene(e){const t=this.ensureRenderer(),i=this.scene,s=this.camera;i.clear(),i.add(new Dc(16777215,1.2));const a=new jo(16777215,1.7);a.position.set(18,28,22),i.add(a);const r=new Se(new Nn(rg*2*ns,wr*2*ns),new je({color:1520422,side:ut}));r.rotation.x=-Math.PI/2,i.add(r);const o=new Pt({color:14280674,transparent:!0,opacity:.55});i.add(new Fn(new yf(r.geometry),o)),i.add(Bw(!0)),i.add(Bw(!1));const l=zw(e.shot.shot_touch_position??e.shot.ball_position),c=zw(e.shot.target_goal_position),u=e.shot.ball_velocity,d=u?l.clone().add(j9(u).normalize().multiplyScalar(22)):c.clone(),h=new Ng([l,l.clone().lerp(d,.45).setY(Math.max(l.y,d.y)+2.8),d]),f=new $e().setFromPoints(h.getPoints(36));i.add(new On(f,new Pt({color:e.shot.resulting_save?15909198:6476450,linewidth:2})));const p=new Se(new vn(.9,24,16),new kn({color:16317180,roughness:.36}));p.position.copy(l),i.add(p);const g=new Se(new oi(1.05,1.45,32),new je({color:8892372,side:ut}));g.position.copy(c),g.rotation.y=Math.PI/2,i.add(g),s.position.set(0,54,72),s.lookAt(0,0,0),t.render(i,s)}ensureRenderer(){if(this.renderer&&this.scene&&this.camera)return this.resizeThreeScene(),this.renderer;const e=new ay({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});return e.setPixelRatio(window.devicePixelRatio||1),this.sceneRoot.replaceChildren(e.domElement),this.renderer=e,this.scene=new Ac,this.scene.background=new de(463132),this.camera=new Qt(42,1,.1,500),this.resizeObserver=new ResizeObserver(()=>{this.resizeThreeScene();const t=this.shotEvents().find(i=>i.id===this.selectedShotId)??null;t&&this.renderThreeScene(t)}),this.resizeObserver.observe(this.sceneRoot),this.resizeThreeScene(),e}resizeThreeScene(){if(!this.renderer||!this.camera)return;const e=this.sceneRoot.getBoundingClientRect(),t=Math.max(240,Math.round(e.width)),i=Math.max(170,Math.round(e.height));this.camera.aspect=t/i,this.camera.updateProjectionMatrix(),this.renderer.setSize(t,i,!1)}clearThreeScene(){this.sceneRoot.replaceChildren(),this.renderer?.dispose(),this.renderer=null,this.scene=null,this.camera=null}handleChartClick(e){const t=this.shotEvents(),i=this.chartCanvas.getBoundingClientRect(),s={x:e.clientX-i.left,y:e.clientY-i.top};let a=null,r=Number.POSITIVE_INFINITY;for(const o of t){const l=Dh(o.shot.shot_touch_position??o.shot.ball_position,i.width,i.height),c=Math.hypot(l.x-s.x,l.y-s.y);c`${this.shotKey(t,i)}:${t.time}:${t.shot.ball_speed}`).join("|")}}function q9(n){return n.kind==="shot"&&!!n.shot}function Wm(n,e){return e!==null&&Math.abs(e-n.time)<1.5}function Y9(n,e,t){n.fillStyle="#0f2b24",n.fillRect(0,0,e,t),n.strokeStyle="rgba(226, 241, 236, 0.74)",n.lineWidth=1.2,n.strokeRect(18,18,e-36,t-36),n.beginPath(),n.moveTo(18,t/2),n.lineTo(e-18,t/2),n.stroke(),n.beginPath(),n.arc(e/2,t/2,34,0,Math.PI*2),n.stroke();const s=Dh({x:0,y:-wr},e,t),a=Dh({x:0,y:wr},e,t);n.fillStyle="#4fa3ff",n.fillRect(s.x-28,s.y-4,56,8),n.fillStyle="#ff8a4c",n.fillRect(a.x-28,a.y-4,56,8)}function Dh(n,e,t){const s=e-36,a=t-36;return{x:18+(n.x+rg)/(rg*2)*s,y:18+(1-(n.y+wr)/(wr*2))*a}}function Bw(n){const e=new Et,t=new Pt({color:n?16747084:5219327}),i=(n?wr:-wr)*ns,s=W9*ns,a=X9*ns,r=[new T(-s,0,i),new T(-s,a,i),new T(s,a,i),new T(s,0,i)];return e.add(new On(new $e().setFromPoints(r),t)),e}function zw(n){return new T(n.x*ns,n.z*ns,n.y*ns)}function j9(n){return new T(n.x*ns,n.z*ns,n.y*ns)}function Al(n,e){const t=document.createElement("div"),i=document.createElement("dt");i.textContent=n;const s=document.createElement("dd");return s.textContent=e,t.append(i,s),t}function Hw(n){return Number.isFinite(n)?`${n.toFixed(2)}s`:"--"}function od(n){return Number.isFinite(n)?`${Math.round(n)} uu/s`:"--"}function Z9(n){return n?`${Math.round(n.x)}, ${Math.round(n.y)}, ${Math.round(n.z)}`:"--"}const J9=4,Q9=100;let at=null,Py=null,Oh=null,Co=null,Ao=null,Fh=null,Vw=0,Za=null;const Hf=I1({refreshTimelineRanges(){Hh()},rerenderCurrentState(){at&&at.setBoostPickupAnimationEnabled(at.getState().boostPickupAnimationEnabled)},requestConfigSync(){_n()}}),Dd=VW({rerenderCurrentState(){if(!at)return;const n=at.getState();Nc(n.frameIndex)},refreshTimelineRanges(){Hh()},requestConfigSync(){_n()}},{boostPickupFilters:Hf}),gn=d9({modules:Dd,boostPickupFilters:Hf,getContext:Po,getReplayPlayer:()=>at,getTimelineOverlay:()=>Py,getEventTimelineSources:Iy,withTimelineEventSeekTimes:uC,renderModuleSummary:or,renderModuleSettings:lr,renderStatsWindows(){at&&Nc(at.getState().frameIndex)},renderTimelineEventCount:fo,requestConfigSync:_n}),Bl=V9({goalWatchLeadSeconds:J9,getReplayPlayer:()=>at,getCameraControlsController:()=>Xi,getMechanicsReviewController:()=>Ki,getSkipPostGoalTransitions:()=>Ja,getSkipKickoffs:()=>Qa,syncBoostPadOverlayPlugin:cC,setupActiveModules:zh,renderModuleSummary:or,renderModuleSettings:lr,renderStatsWindows(n){Nc(n)},scheduleConfigUrlUpdate:_n}),Ei=$9({getFloatingWindowController:()=>pa,getLauncherMenu:()=>cg,getLauncherToggle:()=>lg,getFileInput:()=>Nh});let zl=null,Nh,aC,og,Gw,lg,cg,$w,Ww,Xw,Kw,qw,Yw,Xm,Km,qm,Ym,ld,cd,jw,Zw,Jw,Qw,la,rC,oC,ug,Ja,ho=null,Qa,Hl,Vl,ud=null,dg=Go(null),Xi=null,Gl=null,eS=null,Od=null,Ro=null,xc=null,wc=null,Uh=null,Ki=null,pa=null,hg=null,Bh=null,Fd=null,da=null,fg=null,Os=null;function e7(n){return gn.getActiveCapabilityIds(n)}function t7(){}function Po(){return!at||!Co||!Ao?null:{player:at,replay:at.replay,statsTimeline:Co,statsFrameLookup:Ao,fieldScale:1}}function zh(){gn.setupActiveModules()}function lC(){gn.teardownActiveModules()}function tS(n,e,t){gn.toggleCapability(n,e,t)}function n7(){gn.clearTimelineEventSources()}function i7(){gn.clearTimelineRangeSources()}function s7(){gn.clearStandalonePlugins()}function cC(){gn.syncBoostPadOverlayPlugin()}function nS(){gn.syncTimelineEvents()}function Hh(){gn.syncTimelineRanges()}function fo(){const n=Po();if(!n){ug.textContent="--";return}ug.textContent=`${a7(n)}`}function a7(n){return wc?.countVisibleSources(n)??0}function ae(n,e){const t=n.querySelector(e);if(!(t instanceof HTMLElement))throw new Error(`Missing element for selector: ${e}`);return t}function r7(n){if(!pa)throw new Error("Floating windows are not initialized.");return pa.readPlacement(n)}function o7(n,e){pa?.applyPlacement(n,e)}function Nc(n=at?.getState().frameIndex??0,e={}){Ro?.render(n,e)}function l7(n){Ro?.create(n)}function c7(){Ro?.clear()}function _n(){da?.scheduleConfigUrlUpdate()}function u7(n){da?.applyConfigToStaticControls(n)}function uC(n){return n.map(e=>({...e,seekTime:cy(e)}))}function or(){Uh?.renderSummary()}function dC(){wc?.render()}function Iy(n){return wc?.getSources(n)??[]}function d7(){const n=Po();return w8(n,Iy(n))}function Ly(){xc?.render()}function ky(n){const e=zl?.querySelector(`[data-window-id="${n}"]`);return!!(e&&!e.hidden)}function Dy(n,e={}){!e.forceScroll&&!ky("event-playlist")||xc?.syncTimeline(n,e)}function hC(){xc?.reset()}function h7(n){const e=M9(n);e&&(gn.activateMechanicTimelineKind(e),dC())}function f7(n){return Ki?.enforceClipBoundary(n)??!1}function lr(){Uh?.renderSettings()}function Oy(n=at?.getState().frameIndex??0){hg?.render(n)}function fC(n=at?.getState()??null){ky("shot-visualization")&&Fd?.render(n)}function p7(n){if(Ei.toggleWindow(n),!!ky(n)){if(n==="event-playlist"){Ly();const e=at?.getState();e&&Dy(e,{forceScroll:!0})}n==="shot-visualization"&&fC(at?.getState()??null)}}function m7(n){Bh?.setTransportEnabled(n,at?.getState())}function pC(n=Oh?.getStatus()??null){Gl?.sync(n),Od?.sync()}function _7(n){if(f7(n))return;const e=performance.now();n.playing&&e-Vwy6(n,e=>{la.textContent=Qo(e),ho?.update(e)})))}async function pg(n,e){await I6(n,e,{elements:{fileInput:Nh,viewport:aC,emptyState:og,statusReadout:la,playersReadout:rC,framesReadout:oC,skipPostGoalTransitions:Ja,skipKickoffs:Qa,hitboxWireframes:Hl,hitboxOnlyMode:Vl},getReplayLoadModal:()=>ho,getReplayPlayer:()=>at,setReplayPlayer(t){at=t,Za?.syncSource()},getUnsubscribe:()=>Fh,setUnsubscribe(t){Fh=t},setCanvasRecorder(t){Oh=t},setLoadedReplayName(t){fg=t},setTimelineOverlay(t){Py=t},setStatsTimeline(t){Co=t,Za?.syncSource()},setStatsFrameLookup(t){Ao=t},setStatRegistry(t){dg=t},getInitialConfig:()=>Os,setApplyingConfig(t){da?.setApplyingConfig(t)},getReplayTimelineEvents(t){return lG(t,gn.getActiveTimelineEventSourceIds())},withTimelineEventSeekTimes:uC,includeBoostPickupAnimationPickup:g7,syncRecordingWindow:pC,setTransportEnabled:m7,teardownActiveModules:lC,clearTimelineEventSources:n7,clearTimelineRangeSources:i7,clearStandalonePlugins:s7,clearRenderCaches:t7,resetEventPlaylistWindow:hC,renderModuleSummary:or,renderScoreboard:Oy,renderTimelineEventCount:fo,renderMechanicsTimelineControls:dC,renderEventPlaylistWindow:Ly,renderModuleSettings:lr,syncBoostPadOverlayPlugin:cC,setupActiveModules:zh,renderSnapshot:_7,applyConfigToReplayPlayer:Bl.applyConfigToReplayPlayer,renderStatsWindows:Nc,syncEventPlaylistTimeline:Dy,getCameraControlsController:()=>Xi})}function y7(n,e={}){ud?.(),n.innerHTML=X3(),zl=n,ho=dV(n),pa=f6({getRoot:()=>zl??document,requestConfigSync:_n}),Nh=ae(n,"#replay-file"),aC=ae(n,"#viewport"),og=ae(n,"#empty-state"),Gw=ae(n,"#empty-load-replay"),lg=ae(n,"#launcher-toggle"),cg=ae(n,"#launcher-menu"),$w=ae(n,"#load-replay-action"),Ww=ae(n,"#floating-window-layer"),hg=V6({body:ae(n,"#scoreboard-window-body"),getReplayPlayer:()=>at,getStatsFrameLookup:()=>Ao});const t=ae(n,"#mechanics-timeline-window-body");wc=C8({body:t,modules:Dd,getContext:Po,getActiveTimelineEventSourceIds:()=>gn.getActiveTimelineEventSourceIds(),getActiveMechanicTimelineKinds:()=>gn.getActiveMechanicTimelineKinds(),toggleEventSource(d,h){tS(d,"events",h)},setMechanicTimelineKind(d,h){gn.setMechanicTimelineKind(d,h)},setupActiveModules:zh,syncTimelineEvents:nS,syncTimelineRanges:Hh,renderModuleSummary:or,renderModuleSettings:lr,renderTimelineEventCount:fo,requestConfigSync:_n}),Xw=ae(n,"#event-playlist-window-body"),xc=m6({body:Xw,getReplayPlayer:()=>at,getSources:d7,cueTimelineEvent:Bl.cueTimelineEvent,formatTime:Ai}),Fd=new K9({body:ae(n,"#shot-visualization-window-body"),getReplayPlayer:()=>at,cueTimelineEvent:Bl.cueTimelineEvent}),Kw=ae(n,"#replay-loading-summary"),qw=ae(n,"#replay-loading-active"),Yw=ae(n,"#replay-loading-list");const i=A9({elements:{reviewSummary:ae(n,"#mechanics-review-replay-load-summary"),loadingSummary:Kw,loadingActive:qw,loadingList:Yw},isActiveReview(d){return Ki?.review===d},onActiveLoadProgress(d){la.textContent=Qo(d),ho?.update(d)}});Ki=I9({elements:{file:ae(n,"#mechanics-review-file"),url:ae(n,"#mechanics-review-url"),loadUrl:ae(n,"#mechanics-review-load-url"),status:ae(n,"#mechanics-review-status"),index:ae(n,"#mechanics-review-index"),title:ae(n,"#mechanics-review-title"),mechanic:ae(n,"#mechanics-review-mechanic"),player:ae(n,"#mechanics-review-player"),clip:ae(n,"#mechanics-review-clip"),event:ae(n,"#mechanics-review-event"),reason:ae(n,"#mechanics-review-reason"),previous:ae(n,"#mechanics-review-prev"),replay:ae(n,"#mechanics-review-replay"),next:ae(n,"#mechanics-review-next"),confirm:ae(n,"#mechanics-review-confirm"),reject:ae(n,"#mechanics-review-reject"),uncertain:ae(n,"#mechanics-review-uncertain"),count:ae(n,"#mechanics-review-count"),list:ae(n,"#mechanics-review-list")},replayLoads:i,getReplayPlayer:()=>at,resetReplayTransitionControls(){Ja.checked=!1,Qa.checked=!1},activateTimelineSource:h7,loadReplayBundleForDisplay:pg,applyClipPerspective(d){Xi?.followPlayerWithReplayCamera(d.playerId,{ballCam:d.ballCam,usePlayerCameraSettings:d.usePlayerCameraSettings})},showReplayLoadingWindow(){Ei.showWindow("replay-loading")}});const s=ae(n,"#boost-pickup-filters-window-body"),a=ae(n,"#touch-controls-window-body");Xm=ae(n,"#stats-window-layer"),Ro=t8({layer:Xm,getReplayPlayer:()=>at,getStatsTimeline:()=>Co,getStatsFrameLookup:()=>Ao,getStatRegistry:()=>dg,readWindowPlacement:r7,applyWindowPlacement:o7,bringWindowToFront:Ei.bringWindowToFront,setLauncherOpen:Ei.setLauncherOpen,requestConfigSync:_n,watchGoalReplay:Bl.watchGoalReplay,cueGoalReplay:Bl.cueGoalReplay}),Km=ae(n,"#toggle-playback"),qm=ae(n,"#previous-frame"),Ym=ae(n,"#next-frame"),ld=ae(n,"#playback-rate"),Xi=fV({elements:{attachedPlayer:ae(n,"#attached-player"),cameraViewFreeButton:ae(n,"#camera-view-free"),cameraViewFollowButton:ae(n,"#camera-view-follow"),cameraViewAutoPossession:ae(n,"#camera-view-auto-possession"),cameraViewOverheadButton:ae(n,"#camera-view-overhead"),cameraViewSideButton:ae(n,"#camera-view-side"),usePlayerCameraSettings:ae(n,"#use-player-camera-settings"),cameraSettingsControls:ae(n,"#camera-settings-controls"),customCameraFov:ae(n,"#custom-camera-fov"),customCameraHeight:ae(n,"#custom-camera-height"),customCameraPitch:ae(n,"#custom-camera-pitch"),customCameraDistance:ae(n,"#custom-camera-distance"),customCameraStiffness:ae(n,"#custom-camera-stiffness"),customCameraSwivelSpeed:ae(n,"#custom-camera-swivel-speed"),customCameraTransitionSpeed:ae(n,"#custom-camera-transition-speed"),customCameraFovReadout:ae(n,"#custom-camera-fov-readout"),customCameraHeightReadout:ae(n,"#custom-camera-height-readout"),customCameraPitchReadout:ae(n,"#custom-camera-pitch-readout"),customCameraDistanceReadout:ae(n,"#custom-camera-distance-readout"),customCameraStiffnessReadout:ae(n,"#custom-camera-stiffness-readout"),customCameraSwivelSpeedReadout:ae(n,"#custom-camera-swivel-speed-readout"),customCameraTransitionSpeedReadout:ae(n,"#custom-camera-transition-speed-readout"),ballCamOffButton:ae(n,"#ball-cam-off"),ballCamOnButton:ae(n,"#ball-cam-on"),ballCamPlayerButton:ae(n,"#ball-cam-player"),nameplateLift:ae(n,"#custom-nameplate-lift"),nameplateLiftReadout:ae(n,"#custom-nameplate-lift-readout"),cameraProfileReadout:ae(n,"#camera-profile-readout"),cameraFovReadout:ae(n,"#camera-fov-readout"),cameraHeightReadout:ae(n,"#camera-height-readout"),cameraPitchReadout:ae(n,"#camera-pitch-readout"),cameraBaseDistanceReadout:ae(n,"#camera-base-distance-readout"),cameraStiffnessReadout:ae(n,"#camera-stiffness-readout")},getReplayPlayer:()=>at,requestConfigSync:_n,onAutoPossessionChange(d){Za?.syncSource(),d&&Za?.syncCurrentFrame()}}),Za=zV({getReplayPlayer:()=>at,getStatsTimeline:()=>Co,getCameraControlsController:()=>Xi}),D1(ae(n,"#touch-color-legend-body"),["team"]),Uh=I8({elements:{summary:ae(n,"#module-summary"),settings:ae(n,"#module-settings"),boostPickupFilters:s,touchControls:a},modules:Dd,boostPickupFilters:Hf,getContext:Po,getTimelineSources:()=>Iy(Po()),getActiveModules:()=>gn.getActiveModules(),getActiveCapabilityIds:e7,getBoostPickupAnimationEnabled:()=>at?.getState().boostPickupAnimationEnabled??!1,toggleCapability:tS,toggleBoostPickupAnimation(){const d=!(at?.getState().boostPickupAnimationEnabled??!1);at?.setBoostPickupAnimationEnabled(d),zh(),or(),lr(),_n()},syncTimelineEvents:nS,syncTimelineRanges:Hh,renderTimelineEventCount:fo,requestConfigSync:_n}),jw=ae(n,"#time-readout"),Zw=ae(n,"#frame-readout"),Jw=ae(n,"#duration-readout"),Qw=ae(n,"#playback-status-readout"),la=ae(n,"#status-readout"),rC=ae(n,"#players-readout"),oC=ae(n,"#frames-readout"),ug=ae(n,"#events-readout"),cd=ae(n,"#playback-rate-readout"),Ja=ae(n,"#skip-post-goal-transitions"),Qa=ae(n,"#skip-kickoffs"),Hl=ae(n,"#hitbox-wireframes"),Vl=ae(n,"#hitbox-only-mode"),Bh=$6({elements:{togglePlayback:Km,previousFrame:qm,nextFrame:Ym,playbackRate:ld,playbackRateReadout:cd,skipPostGoalTransitions:Ja,skipKickoffs:Qa,hitboxWireframes:Hl,hitboxOnlyMode:Vl,emptyState:og,timeReadout:jw,frameReadout:Zw,durationReadout:Jw,playbackStatusReadout:Qw},getFrameCount:()=>at?.replay.frameCount??0,getCameraControlsController:()=>Xi}),Gl=U6({elements:{fps:ae(n,"#recording-fps"),playbackRate:ae(n,"#recording-playback-rate"),start:ae(n,"#recording-start"),fullReplay:ae(n,"#recording-full-replay"),stop:ae(n,"#recording-stop"),download:ae(n,"#recording-download"),clear:ae(n,"#recording-clear"),status:ae(n,"#recording-status"),elapsed:ae(n,"#recording-elapsed"),size:ae(n,"#recording-size"),type:ae(n,"#recording-type")},getCanvasRecorder:()=>Oh,getReplayPlayer:()=>at,getLoadedReplayName:()=>fg,setStatus(d){la.textContent=d},requestConfigSync:_n}),eS=a9({elements:{mechanic:ae(n,"#missed-event-mechanic"),capture:ae(n,"#missed-event-capture"),list:ae(n,"#missed-event-list"),export:ae(n,"#missed-event-export"),upload:ae(n,"#missed-event-upload"),clear:ae(n,"#missed-event-clear"),status:ae(n,"#missed-event-status")},getReplayPlayer:()=>at,showWindow:()=>Ei.showWindow("missed-events")}),Od=c9({elements:{name:ae(n,"#training-pack-name"),creator:ae(n,"#training-pack-creator"),description:ae(n,"#training-pack-description"),difficulty:ae(n,"#training-pack-difficulty"),shooter:ae(n,"#training-pack-shooter"),timeLimit:ae(n,"#training-pack-time-limit"),capture:ae(n,"#training-pack-capture"),load:ae(n,"#training-pack-load"),loadInput:ae(n,"#training-pack-load-input"),newPack:ae(n,"#training-pack-new"),download:ae(n,"#training-pack-download"),shotList:ae(n,"#training-pack-shots"),status:ae(n,"#training-pack-status")},getReplayPlayer:()=>at}),da=G9({modules:Dd,playbackRate:ld,playbackRateReadout:cd,skipPostGoalTransitions:Ja,skipKickoffs:Qa,hitboxWireframes:Hl,hitboxOnlyMode:Vl,getReplayPlayer:()=>at,getCameraControlsController:()=>Xi,getRecordingWindowController:()=>Gl,getFloatingWindowController:()=>pa,getStatsWindowsController:()=>Ro,getActiveModulesRuntime:()=>gn,getInitialConfig:()=>Os,renderModuleSummary:or,renderModuleSettings:lr,renderTimelineEventCount:fo});const r=j1(window.location),o=Z8(window.location);let l=null;if(e.initialConfig!==void 0)Os=e.initialConfig;else{try{Os=j8(window.location)}catch(d){l=d,console.error("Invalid stats player config:",d),la.textContent=d instanceof Error?d.message:"Invalid stats player config",Os=null}o&&P6(r,Os,l)}const c=new AbortController;Ei.installWindowDragging(Ww,c.signal),Ei.installWindowDragging(Xm,c.signal);const u=()=>{c.abort(),Fh?.(),Fh=null,lC(),at?.destroy(),at=null,Oh=null,Py=null,Co=null,Ao=null,dg=Go(null),c7(),Ro=null,gn.reset(),ho?.destroy(),ho=null,hC(),wc=null,xc=null,Ki?.reset(),Ki=null,fg=null,Za?.reset(),Za=null,Xi=null,Gl=null,Od=null,Uh=null,hg=null,Bh=null,Fd?.destroy(),Fd=null,Os=null,da?.reset(),da=null,pa?.reset(),pa=null,zl===n&&(zl=null,n.replaceChildren()),ud===u&&(ud=null)};if(ud=u,Os){da?.setApplyingConfig(!0);try{u7(Os)}finally{da?.setApplyingConfig(!1)}}return W6({elements:{root:n,launcherToggle:lg,launcherMenu:cg,loadReplayAction:$w,emptyLoadReplay:Gw,fileInput:Nh,togglePlayback:Km,previousFrame:qm,nextFrame:Ym,playbackRate:ld,playbackRateReadout:cd,skipPostGoalTransitions:Ja,skipKickoffs:Qa,hitboxWireframes:Hl,hitboxOnlyMode:Vl},signal:c.signal,setLauncherOpen:Ei.setLauncherOpen,openReplayFilePicker:Ei.openReplayFilePicker,getElementWindowId:Ei.getElementWindowId,toggleWindow:p7,hideWindow:Ei.hideWindow,createStatsWindow:l7,async loadReplayFile(d){try{Ki?.clearCurrentClip({resetReplayId:!0,render:!0}),await iS(_6(d))}catch(h){console.error("Failed to load replay:",h),la.textContent=h instanceof Error?h.message:"Failed to load replay"}},togglePlayback(){at?.togglePlayback(),_n()},stepFrames(d){at?.stepFrames(d),_n()},setPlaybackRate(d){at?.setPlaybackRate(d),_n()},setSkipPostGoalTransitionsEnabled(d){at?.setSkipPostGoalTransitionsEnabled(d),_n()},setSkipKickoffsEnabled(d){at?.setSkipKickoffsEnabled(d),_n()},setHitboxWireframesEnabled(d){at?.setHitboxWireframesEnabled(d),_n()},setHitboxOnlyModeEnabled(d){at?.setHitboxOnlyModeEnabled(d),_n()}}),Ki?.installEventListeners(c.signal),Gl?.installEventListeners(c.signal),eS?.installEventListeners(c.signal),Od?.installEventListeners(c.signal),Xi?.installEventListeners(c.signal),q6({getReplayPlayer:()=>at,signal:c.signal}),window.addEventListener("message",d=>{if(d.origin!==window.location.origin)return;const h=d.data;!h||typeof h!="object"||h.source!=="rocket-sense"||h.type==="activateReviewItem"&&typeof h.index=="number"&&Number.isInteger(h.index)&&Ki?.activateItem(h.index)},{signal:c.signal}),or(),lr(),Oy(),Xi?.renderProfile(),Xi?.syncModeButtons(),pC(),fo(),Ki?.render(),Ly(),H9({signal:c.signal,location:window.location,statusReadout:la,initialBundle:e.initialBundle,initialReplayName:e.initialReplayName,loadFromLocation:e.loadFromLocation,loadReplay:iS,loadReplayBundleForDisplay:pg,getMechanicsReviewController:()=>Ki,showMechanicsReviewWindow(){Ei.showWindow("mechanics-review")}}),{root:n,destroy:u}}const In=["#58a6ff","#f39a37"],sS=["#58a6ff","#f39a37","#65d6ad","#d2a8ff","#ff7b72","#f2cc60","#79c0ff","#ffa657"],Rl={zero:"#ff7b72",low:"#f39a37",midLow:"#f2cc60",midHigh:"#65d6ad",high:"#58a6ff"},aS={big:"#f39a37",small:"#65d6ad"},mC=[{id:"overview",label:"Overview"},{id:"goals",label:"Goals"},{id:"boost",label:"Boost"},{id:"territory",label:"Possession & territory"},{id:"involvement",label:"Player involvement"},{id:"dump",label:"All stats"}],v7=[{statId:"player:core.score",kind:"bar",title:"Score by player"},{statId:"player:core.shots",kind:"bar",title:"Shots by player"},{statId:"player:touch.touch_count",kind:"bar",title:"Touches by player"},{statId:"team:core.shots",kind:"pie",title:"Shot share"},{statId:"team:possession.possession_time",kind:"pie",title:"Possession share"},{statId:"team:ball_half.offensive_pressure_time",kind:"bar",title:"Offensive pressure"}],b7=[{statId:"player:touch.touch_count",kind:"bar",title:"Touches"},{statId:"player:touch.control_touch_count",kind:"bar",title:"Control touches"},{statId:"player:touch.hard_hit_count",kind:"bar",title:"Hard hits"},{statId:"player:demo.demos_inflicted",kind:"bar",title:"Demos inflicted"},{statId:"player:fifty_fifty.wins",kind:"bar",title:"50/50 wins"},{statId:"player:powerslide.total_duration",kind:"bar",title:"Powerslide time"}];function te(n,e={}){const t=document.createElement(n);return e.className&&(t.className=e.className),e.id&&(t.id=e.id),e.text!==void 0&&(t.textContent=e.text),t}function _C(n,e,t){return e==="player"?n.name||`Player ${t+1}`:t===0?"Blue":"Orange"}function Vh(n){return n?Ct(n):null}function oo(n,e){const t=Vh(e);return t?n.players.find(i=>Vh(i.player_id)===t)?.name??t:"--"}function mg(n){return n===!0?"Blue":n===!1?"Orange":"--"}function gC(n,e){return e==="player"?n.players:[n.team_zero,n.team_one]}function yC(n){return n.is_team_0?In[0]:In[1]}function x7(n,e,t){return e==="player"?yC(n):In[t%In.length]}function w7(n,e){const t=n.frames.at(-1);return t?e.get(t.frame_number)??null:null}function S7(n,e){const t=n.read(e);return typeof t=="number"&&Number.isFinite(t)?t:null}function Sr(n){return n==null||!Number.isFinite(n)?"--":`${Number(n.toFixed(1))}s`}function T7(n){return n==null||!Number.isFinite(n)?"--":`${Number(n.toFixed(1))}%`}function Ri(n,e){return e>0?`${Sr(n)} (${T7(n/e*100)})`:"--"}function Nd(n){return n?`x ${Math.round(n.x)}, y ${Math.round(n.y)}, z ${Math.round(n.z)}`:"--"}function ts(n){return n==null||!Number.isFinite(n)?"--":`${Number(Ys(n).toFixed(0))}`}function nc(n){if(n==null||!Number.isFinite(n))return"--";const e=Math.max(0,n),t=Math.floor(e/60),i=e-t*60;return`${t}:${i.toFixed(1).padStart(4,"0")}`}function M7(n,e,t){if(!n||e==null||!Number.isFinite(e))return null;const i=Vh(t),s=new URL("../",window.location.href);return s.searchParams.set("replayUrl",n.href),Z1(s,vC(e,i)).href}function E7(n,e,t){if(e==null||!Number.isFinite(e))return null;const i=Vh(t);return{config:vC(e,i),href:M7(n,e,t),goalTime:e,playerId:i}}function vC(n,e){return{version:Lh,playback:{currentTime:Math.max(0,n-4),playing:!0,rate:1,skipPostGoalTransitions:!1,skipKickoffs:!1},camera:e?{mode:"follow",attachedPlayerId:e,ballCam:!0}:{mode:"free"},overlays:{timelineEvents:["core"],timelineRanges:[],mechanics:[],renderEffects:[],followedPlayerHud:!1,boostPads:!0,boostPickupAnimation:!1,hitboxWireframes:!1,hitboxOnlyMode:!1},recording:{},singletonWindows:[],statsWindows:[],moduleConfigs:{}}}function bC(n,e){return e>0?`${Number((Ys(n)/e*60).toFixed(1))}/min`:"--"}function C7(n){const e=new Map;for(const t of n){const i=`${t.scope}:${t.category}`,s=e.get(i);s?s.push(t):e.set(i,[t])}return new Map([...e].sort(([t],[i])=>t.localeCompare(i)))}function xC(n){const[e,t]=n.split(":"),i=(t??"").replace(/_/g," ").replace(/\b\w/g,s=>s.toUpperCase());return`${e==="player"?"Player":"Team"} ${i}`}function wC(n){return`stats-${n.replace(/[^a-z0-9]+/gi,"-").toLowerCase()}`}function A7(n){return n.path.slice(1).join(".")||n.label}function R7(n){return!n.path.includes("entries")}function Tn(n,e,t){const i=te("section",{className:"stats-report-summary-card"});return i.append(te("span",{text:n}),te("strong",{text:e})),t&&i.append(te("small",{text:t})),i}function P7(n,e){const t=te("section",{className:"stats-report-summary"}),i=e.time>0?Sr(e.time):"--";return t.append(Tn("Replay",n.fileName),Tn("Frames",n.statsTimeline.frames.length.toLocaleString()),Tn("Duration",i),Tn("Players",e.players.length.toLocaleString())),t}function tl(n,e){const t=te("section",{className:"stats-report-page-intro"});return t.append(te("h2",{text:n}),te("p",{text:e})),t}function I7(n,e,t){const i=e[0]?.scope??"player",s=gC(t,i),a=te("section",{className:"stats-report-section",id:wC(n)}),r=te("header");r.append(te("h2",{text:xC(n)}),te("span",{text:`${e.length} stats`}));const o=te("div",{className:"stats-report-table-wrap"}),l=te("table",{className:"stats-report-table"}),c=te("thead"),u=te("tr");u.append(te("th",{text:"Statistic"})),s.forEach((h,f)=>{u.append(te("th",{text:_C(h,i,f)}))}),c.append(u);const d=te("tbody");return e.forEach(h=>{const f=te("tr");f.append(te("td",{text:A7(h)})),s.forEach(p=>{f.append(te("td",{text:h.format(h.read(p))}))}),d.append(f)}),l.append(c,d),o.append(l),a.append(r,o),a}function Fy(n,e){return gC(e,n.scope).map((t,i)=>({label:_C(t,n.scope,i),value:S7(n,t)??0,color:x7(t,n.scope,i)})).filter(t=>t.value>0)}function ic(n,e){const t=Math.max(...n.map(s=>s.value),1),i=te("div",{className:"stats-report-bar-chart"});return n.forEach(s=>{const a=te("div",{className:"stats-report-bar-row"});a.style.setProperty("--bar-color",s.color),a.style.setProperty("--bar-width",`${Math.max(2,s.value/t*100)}%`),a.append(te("span",{className:"stats-report-bar-label",text:s.label}),te("span",{className:"stats-report-bar-track"}),te("strong",{text:s.formatted??e(s.value)})),i.append(a)}),i}function SC(n,e){const t=n.path.join(".");return n.category==="boost"&&(t.includes("amount_")||t.includes("overfill")||t.includes("boost_integral"))?ts(e):t.endsWith("_time")||t.startsWith("time_")||t.includes(".time_")||t.endsWith("_duration")||t==="active_game_time"||t==="tracked_time"?Sr(e):n.format(e)}function L7(n,e){return ic(Fy(n,e),t=>SC(n,t))}function k7(n){const e=n.reduce((i,s)=>i+s.value,0);if(e<=0)return"conic-gradient(rgba(255,255,255,0.12) 0 360deg)";let t=0;return`conic-gradient(${n.map(i=>{const s=t;return t+=i.value/e*360,`${i.color} ${s}deg ${t}deg`}).join(", ")})`}function Gh(n,e){const t=n.reduce((r,o)=>r+o.value,0),i=te("div",{className:"stats-report-pie-chart"}),s=te("div",{className:"stats-report-pie"});s.style.background=k7(n);const a=te("div",{className:"stats-report-pie-legend"});return n.forEach(r=>{const o=te("div");o.style.setProperty("--legend-color",r.color);const l=t>0?`${Math.round(r.value/t*100)}%`:"--";o.append(te("span",{text:r.label}),te("strong",{text:`${r.formatted??e(r.value)} (${l})`})),a.append(o)}),i.append(s,a),i}function D7(n,e){return Gh(Fy(n,e),t=>SC(n,t))}function TC(n,e="Territory share"){return ai(e,Gh([{label:"Blue half",value:n.team_zero.ball_half.defensive_half_time,color:In[0]},{label:"Neutral",value:n.team_zero.ball_half.neutral_time,color:"#65d6ad"},{label:"Orange half",value:n.team_zero.ball_half.offensive_half_time,color:In[1]}],Sr))}function ai(n,e,t){const i=te("section",{className:"stats-report-chart-card"});return i.append(te("h3",{text:n})),i.append(e),i}function MC(n,e,t){return Fy(e,t).length===0?null:ai(n.title,n.kind==="pie"?D7(e,t):L7(e,t))}function EC(n,e,t){const i=new Map(n.map(a=>[a.id,a])),s=te("section",{className:"stats-report-charts"});return t.forEach(a=>{const r=i.get(a.statId);if(!r)return;const o=MC(a,r,e);o&&s.append(o)}),s.childElementCount>0?s:null}function $o(n,e){const t=te("div",{className:"stats-report-stacked-chart"});return n.forEach(i=>{const s=i.segments.reduce((l,c)=>l+Math.max(0,c.value),0),a=te("div",{className:"stats-report-stacked-row"}),r=te("div",{className:"stats-report-stacked-track"});i.segments.forEach(l=>{const c=te("span");c.style.setProperty("--segment-color",l.color),c.style.setProperty("--segment-width",`${s>0?Math.max(1.5,l.value/s*100):0}%`),c.title=`${l.label}: ${e(l.value,s)}`,r.append(c)});const o=te("div",{className:"stats-report-stacked-legend"});i.segments.forEach(l=>{const c=te("span",{text:`${l.label}: ${e(l.value,s)}`});c.style.setProperty("--legend-color",l.color),o.append(c)}),a.append(te("strong",{text:i.label}),r,o),t.append(a)}),t}function Vf(n){const e=te("section",{className:"stats-report-metric-grid"});return e.append(...n),e}function cr(n,e,t){const i=[...n].sort((a,r)=>e(r)-e(a))[0],s=i?e(i):0;return Tn(i?.name??"--",t(s))}function O7(n,e){const t=te("div",{className:"stats-report-page"});t.append(tl("All stats dump","Everything emitted by the current stats timeline, including experimental mechanic counters and low-level breakdowns."));const i=te("nav",{className:"stats-report-jump-nav"});for(const a of n.keys()){const r=te("a",{text:xC(a)});r.setAttribute("href",`#${wC(a)}`),i.append(r)}t.append(i);const s=te("div",{className:"stats-report-grid"});for(const[a,r]of n)s.append(I7(a,r,e));return t.append(s),t}let Ud=null,Sc={};function F7(n,e,t){const i=te("div",{className:"stats-report-page"});i.append(P7(n,e)),i.append(tl("Featured stats","A shorter readout of stable scoreboard, touch, boost, possession, and pressure signals. The raw export remains available in All stats."));const s=`${e.team_zero.core.goals}-${e.team_one.core.goals}`;i.append(Vf([Tn("Final score",s,"Blue - Orange"),cr(e.players,r=>r.touch.touch_count,r=>`${r} touches`),cr(e.players,r=>r.boost.tracked_time>0?Ys(r.boost.boost_integral/r.boost.tracked_time):0,r=>`${Number(r.toFixed(0))} avg boost`),cr(e.players,r=>r.core.score,r=>`${r} score`)]));const a=EC(t,e,v7)??te("section",{className:"stats-report-charts"});return a.append(TC(e)),i.append(a),i}function N7(n){return[...n??[]].sort((e,t)=>e.kind.localeCompare(t.kind)||t.metadata.confidence-e.metadata.confidence)}function rS(n){const e=new Map;for(const t of n)e.set(t.kind,(e.get(t.kind)??0)+1);return[...e.entries()].sort(([t,i],[s,a])=>a-i||Dn(t).localeCompare(Dn(s))).map(([t,i],s)=>({label:Dn(t),value:i,color:sS[s%sS.length],formatted:i.toLocaleString()}))}function U7(n){const e=te("dl",{className:"stats-report-detail-list"});for(const t of n){const i=te("div",{className:"stats-report-detail-item"});i.append(te("dt",{text:t.label}),te("dd",{text:t.value})),e.append(i)}return e}function B7(n){const e=te("div",{className:"stats-report-goal-tags"});if(n.length===0)return e.append(te("span",{className:"stats-report-goal-tag stats-report-goal-tag-empty",text:"Unlabeled"})),e;for(const t of n){const i=t.metadata,s=g1(t),a=s?` - ${s}`:"";e.append(te("span",{className:"stats-report-goal-tag",text:`${Dn(t.kind)} ${Math.round(i.confidence*100)}%${a}`}))}return e}function z7(n,e){if(e.length===0)return null;const t=te("div",{className:"stats-report-goal-subsection"});t.append(te("h3",{text:"Player context"}));const i=te("div",{className:"stats-report-table-wrap"}),s=te("table",{className:"stats-report-table"}),a=te("thead"),r=te("tr");["Player","Team","Boost","Leadup avg","Leadup min","Role","Position"].forEach(l=>{r.append(te("th",{text:l}))}),a.append(r);const o=te("tbody");for(const l of e){const c=te("tr");c.append(te("td",{text:oo(n,l.player)}),te("td",{text:mg(l.is_team_0)}),te("td",{text:ts(l.boost_amount)}),te("td",{text:ts(l.average_boost_in_leadup)}),te("td",{text:ts(l.min_boost_in_leadup)}),te("td",{text:l.is_most_back?"Most back":"--"}),te("td",{text:Nd(l.position)})),o.append(c)}return s.append(a,o),i.append(s),t.append(i),t}function H7(n,e,t,i,s){const a=i?.scoring_team_is_team_0??null,r=i?.scorer??null,o=i?.time??null,l=i?.frame??null,c=E7(e,o,r),u=te("section",{className:"stats-report-goal-card"});a!==null&&(u.dataset.team=a?"blue":"orange");const d=te("header"),h=te("div",{className:"stats-report-goal-heading"});if(h.append(te("h2",{text:`Goal ${t+1}`}),te("span",{text:`${mg(a)} - ${oo(n,r)} - ${nc(o)}`})),d.append(h),c){if(Sc.onWatchGoal){const g=te("button",{className:"stats-report-goal-watch",text:"Watch"});g.type="button",g.addEventListener("click",()=>{Sc.onWatchGoal?.(c)}),d.append(g)}else if(c.href){const g=te("a",{className:"stats-report-goal-watch",text:"Watch"});g.setAttribute("href",c.href),g.setAttribute("target","_blank"),g.setAttribute("rel","noreferrer"),d.append(g)}}u.append(d),u.append(B7(s));const f=[{label:"Scoring team",value:mg(a)},{label:"Scorer",value:oo(n,r)},{label:"Time",value:nc(o)},{label:"Frame",value:l==null?"--":l.toLocaleString()},{label:"Scorer last touch",value:i?.scorer_last_touch?`${oo(n,i.scorer_last_touch.player)} at ${nc(i.scorer_last_touch.time)}`:"--"},{label:"Scoring most back",value:oo(n,i?.scoring_team_most_back_player)},{label:"Defending most back",value:oo(n,i?.defending_team_most_back_player)},{label:"Ball position",value:Nd(i?.ball_position)},{label:"Last touch ball",value:Nd(i?.scorer_last_touch?.ball_position)},{label:"Last touch player",value:Nd(i?.scorer_last_touch?.player_position)}];u.append(U7(f));const p=z7(n,i?.players??[]);return p&&u.append(p),u}function V7(n,e){const t=te("div",{className:"stats-report-page"});t.append(tl("Goal metadata","Goal-by-goal scorer, timing, context, tag confidence, and lead-up player state from the stats timeline event stream."));const i=[...be(n.statsTimeline,"goal_context")].sort((p,g)=>p.time-g.time),s=i.flatMap(p=>p.tags??[]),a=s.filter(sG),r=s.filter(aG),o=i.map((p,g)=>g),l=i.filter(p=>(p.tags??[]).length>0).length,c=rS(a),u=rS(r),d=c[0];if(t.append(Vf([Tn("Goals found",o.length.toLocaleString()),Tn("Tagged goals",l.toLocaleString()),Tn("Scorer goal tags",a.length.toLocaleString()),Tn("Assist goal tags",r.length.toLocaleString()),Tn("Top tag",d?`${d.label} (${d.value})`:"--")])),o.length===0)return t.append(te("section",{className:"stats-report-empty",text:"No goal metadata was emitted for this replay."})),t;const h=te("section",{className:"stats-report-charts"});h.append(ai("Scorer goal tags by type",c.length>0?ic(c,p=>p.toLocaleString()):te("p",{className:"stats-report-note",text:"No scorer goal tags emitted."})),ai("Assist goal tags by type",u.length>0?ic(u,p=>p.toLocaleString()):te("p",{className:"stats-report-note",text:"No assist goal tags emitted."})),ai("Goal timing",ic(o.map(p=>{const g=i[p]??null,_=g?.time??0,m=g?.scoring_team_is_team_0??!0;return{label:`Goal ${p+1}`,value:_,color:m?In[0]:In[1],formatted:nc(_)}}),nc))),t.append(h);const f=te("div",{className:"stats-report-goal-list"});for(const p of o)f.append(H7(e,n.replayUrl,p,i[p]??null,N7(i[p]?.tags)));return t.append(f),t}function G7(n,e){const t=te("div",{className:"stats-report-page"});t.append(tl("Boost economy","A focused view of boost usage, collection, pad mix, starvation, and waste. Values are shown in normal 0-100 boost units.")),t.append(Vf([cr(n.players,a=>a.boost.amount_used,a=>`${ts(a)} used`),cr(n.players,a=>a.boost.amount_stolen,a=>`${ts(a)} stolen`),cr(n.players,a=>a.boost.overfill_total,a=>`${ts(a)} overfill`),cr(n.players,a=>a.boost.time_zero_boost,a=>`${Sr(a)} at zero`)]));const i=te("section",{className:"stats-report-charts"});i.append(ai("Boost used per minute",ic(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,value:a.boost.tracked_time>0?Ys(a.boost.amount_used)/a.boost.tracked_time*60:0,color:yC(a),formatted:bC(a.boost.amount_used,a.boost.tracked_time)})),a=>`${Number(a.toFixed(1))}/min`)),ai("Pad collection mix",$o(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"Big",value:a.boost.amount_collected_big,color:aS.big},{label:"Small",value:a.boost.amount_collected_small,color:aS.small}]})),a=>ts(a))),ai("Boost tank time",$o(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"0",value:a.boost.time_zero_boost,color:Rl.zero},{label:"0-25",value:a.boost.time_boost_0_25,color:Rl.low},{label:"25-50",value:a.boost.time_boost_25_50,color:Rl.midLow},{label:"50-75",value:a.boost.time_boost_50_75,color:Rl.midHigh},{label:"75-100",value:a.boost.time_boost_75_100+a.boost.time_hundred_boost,color:Rl.high}]})),Ri)));const s=new Map(e.map(a=>[a.id,a]));for(const a of[{statId:"player:boost.amount_used",kind:"bar",title:"Total boost used"},{statId:"player:boost.overfill_total",kind:"bar",title:"Boost overfill"},{statId:"player:boost.amount_stolen",kind:"bar",title:"Stolen boost"}]){const r=s.get(a.statId),o=r?MC(a,r,n):null;o&&i.append(o)}return t.append(i),t.append($7(n)),t}function $7(n){const e=te("section",{className:"stats-report-section"}),t=te("header");t.append(te("h2",{text:"Boost scorecard"}),te("span",{text:"display units"}));const i=[{label:"Average boost",read(c){return c.boost.tracked_time>0?`${Number(Ys(c.boost.boost_integral/c.boost.tracked_time).toFixed(0))}`:"--"}},{label:"Used per minute",read(c){return bC(c.boost.amount_used,c.boost.tracked_time)}},{label:"Collected",read(c){return ts(c.boost.amount_collected)}},{label:"Stolen",read(c){return ts(c.boost.amount_stolen)}},{label:"Overfill",read(c){return ts(c.boost.overfill_total)}},{label:"Big pads",read(c){return`${c.boost.big_pads_collected}`}},{label:"Small pads",read(c){return`${c.boost.small_pads_collected}`}},{label:"Time at zero",read(c){return Ri(c.boost.time_zero_boost,c.boost.tracked_time)}}],s=te("div",{className:"stats-report-table-wrap"}),a=te("table",{className:"stats-report-table"}),r=te("thead"),o=te("tr");o.append(te("th",{text:"Metric"})),n.players.forEach((c,u)=>{o.append(te("th",{text:c.name||`Player ${u+1}`}))}),r.append(o);const l=te("tbody");return i.forEach(c=>{const u=te("tr");u.append(te("td",{text:c.label})),n.players.forEach(d=>{u.append(te("td",{text:c.read(d)}))}),l.append(u)}),a.append(r,l),s.append(a),e.append(t,s),e}function W7(n){const e=te("div",{className:"stats-report-page"});e.append(tl("Possession & territory","Team control, field-half pressure, and where each player spent time relative to the field and the ball."));const t=n.team_zero.possession.tracked_time,i=n.team_zero.ball_half.tracked_time,s=n.team_zero.ball_third.tracked_time;e.append(Vf([Tn("Blue possession",Ri(n.team_zero.possession.possession_time,t)),Tn("Orange possession",Ri(n.team_zero.possession.opponent_possession_time,t)),Tn("Blue pressure",Ri(n.team_zero.ball_half.offensive_half_time,i),"Time in Orange half"),Tn("Orange pressure",Ri(n.team_zero.ball_half.defensive_half_time,i),"Time in Blue half"),Tn("Blue final third",Ri(n.team_zero.ball_third.offensive_third_time,s),"Time in Orange third"),Tn("Orange final third",Ri(n.team_zero.ball_third.defensive_third_time,s),"Time in Blue third")]));const a=te("section",{className:"stats-report-charts"});return a.append(ai("Possession split",Gh([{label:"Blue control",value:n.team_zero.possession.possession_time,color:In[0]},{label:"Neutral",value:n.team_zero.possession.neutral_time,color:"#65d6ad"},{label:"Orange control",value:n.team_zero.possession.opponent_possession_time,color:In[1]}],Sr)),TC(n,"Field half pressure"),ai("Ball third control",Gh([{label:"Blue third",value:n.team_zero.ball_third.defensive_third_time,color:In[0]},{label:"Neutral third",value:n.team_zero.ball_third.neutral_third_time,color:"#65d6ad"},{label:"Orange third",value:n.team_zero.ball_third.offensive_third_time,color:In[1]}],Sr)),ai("Player field thirds",$o(n.players.map((r,o)=>({label:r.name||`Player ${o+1}`,segments:[{label:"Def",value:r.positioning.time_defensive_third,color:r.is_team_0?In[0]:In[1]},{label:"Mid",value:r.positioning.time_neutral_third,color:"#65d6ad"},{label:"Off",value:r.positioning.time_offensive_third,color:r.is_team_0?In[1]:In[0]}]})),Ri)),ai("Role time",$o(n.players.map((r,o)=>({label:r.name||`Player ${o+1}`,segments:[{label:"Most back",value:r.positioning.time_most_back,color:"#58a6ff"},{label:"Mid",value:r.positioning.time_mid_role,color:"#65d6ad"},{label:"Most forward",value:r.positioning.time_most_forward,color:"#f39a37"},{label:"Other",value:r.positioning.time_other_role,color:"rgba(255,255,255,0.22)"}]})),Ri))),e.append(a),e}function X7(n,e){const t=te("div",{className:"stats-report-page"});t.append(tl("Player involvement","Interaction stats that are usually easier to trust at a glance: touches, hits, demos, 50/50 outcomes, movement, and powerslide usage."));const i=EC(e,n,b7);i&&t.append(i);const s=te("section",{className:"stats-report-charts"});return s.append(ai("Speed bands",$o(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"Slow",value:a.movement.time_slow_speed,color:"#58a6ff"},{label:"Boost",value:a.movement.time_boost_speed,color:"#f2cc60"},{label:"Supersonic",value:a.movement.time_supersonic_speed,color:"#f39a37"}]})),Ri)),ai("Aerial profile",$o(n.players.map((a,r)=>({label:a.name||`Player ${r+1}`,segments:[{label:"Ground",value:a.movement.time_on_ground,color:"#65d6ad"},{label:"Low air",value:a.movement.time_low_air,color:"#58a6ff"},{label:"High air",value:a.movement.time_high_air,color:"#d2a8ff"}]})),Ri))),t.append(s),t.append(te("p",{className:"stats-report-note",text:"Experimental event detectors such as speed flips, dodge refreshes, and ceiling shots are kept in All stats until their precision is stronger."})),t}function CC(){const n=window.location.hash.replace(/^#/,"");return mC.some(e=>e.id===n)?n:"overview"}function K7(n,e,t){const i=te("nav",{className:"stats-report-tabs"});return mC.forEach(s=>{const a=te("button",{text:s.label});a.type="button",a.dataset.active=s.id===n?"true":"false",a.addEventListener("click",()=>{CC()!==s.id&&window.history.replaceState(null,"",`#${s.id}`),$h(e,t)}),i.append(a)}),i}function Ny(n){const e=te("header",{className:"stats-report-header"}),t=te("div",{className:"stats-report-title"});if(t.append(te("h1",{text:"Replay Stats"}),te("p",{text:n??"Load a Rocket League replay to review curated stats pages, comparison graphs, and the complete raw stat dump."})),Sc.showStandaloneActions!==!1){const i=te("div",{className:"stats-report-actions"}),s=te("label",{className:"stats-report-file-label",text:"Load replay"}),a=te("input");a.type="file",a.accept=".replay",a.addEventListener("change",async()=>{const o=a.files?.[0],l=Ud;o&&l instanceof HTMLElement&&await q7(l,o)}),s.append(a);const r=te("a",{className:"stats-report-link",text:"Open player"});r.setAttribute("href","../"),i.append(s,r),e.append(t,i)}else e.append(t);return e}function $h(n,e){const t=w7(e.statsTimeline,e.statsFrameLookup);if(!t){n.replaceChildren(te("main",{className:"stats-report-empty",text:"The replay did not produce any stats frames."}));return}const i=Go(t).filter(R7),s=C7(i),a=CC(),r=te("main",{className:"stats-report"});r.append(Ny()),r.append(K7(a,n,e)),a==="goals"?r.append(V7(e,t)):a==="boost"?r.append(G7(t,i)):a==="territory"?r.append(W7(t)):a==="involvement"?r.append(X7(t,i)):a==="dump"?r.append(O7(s,t)):r.append(F7(e,t,i)),n.replaceChildren(r)}function oS(n){return{...n,statsFrameLookup:n.statsFrameLookup??XE(n.statsTimeline)}}function Tc(n,e){const t=te("main",{className:"stats-report"});t.append(Ny(e)),t.append(te("p",{className:"stats-report-status",text:e})),n.replaceChildren(t)}async function AC(n,e,t,i){Tc(n,`Loading ${t}...`);const s=await kf(e,{onProgress(a){Tc(n,Qo(a))}});$h(n,{fileName:t,replayUrl:i,statsTimeline:s.statsTimeline,statsFrameLookup:s.statsFrameLookup})}async function q7(n,e){try{await AC(n,new Uint8Array(await e.arrayBuffer()),e.name,null)}catch(t){Tc(n,t instanceof Error?t.message:String(t))}}async function Y7(n,e){try{Tc(n,`Fetching ${e}...`);const t=await fetch(e);if(!t.ok)throw new Error(`Failed to fetch replay: ${t.status} ${t.statusText}`);const i=new URL(e,window.location.href).pathname,s=decodeURIComponent(i.split("/").pop()||"remote replay");await AC(n,new Uint8Array(await t.arrayBuffer()),s,t.url?new URL(t.url):new URL(e,window.location.href))}catch(t){Tc(n,t instanceof Error?t.message:String(t))}}function j7(n,e={}){if(Ud=n,Sc=e,e.initialData)$h(n,oS(e.initialData));else{const i=te("main",{className:"stats-report"});i.append(Ny()),i.append(te("section",{className:"stats-report-empty",text:"Load a replay to generate the stats report."})),n.replaceChildren(i)}const t=new URL(window.location.href).searchParams.get("replayUrl");return!e.initialData&&t&&Y7(n,t),{root:n,render(i){$h(n,oS(i))},destroy(){Ud===n&&(Ud=null,Sc={}),n.replaceChildren()}}}const dd="replay-review-document",lS="replay-review-root";function _i(n,e={}){const t=document.createElement(n);return e.className&&(t.className=e.className),e.id&&(t.id=e.id),e.text!==void 0&&(t.textContent=e.text),t}function RC(n,e={}){let t=null;const i=async()=>n instanceof Uint8Array?n:await n(),s=a=>(t||(t=i().then(r=>kf(r,{reportEveryNFrames:100,onProgress:a}))),t);return{replayName:e.replayName,replayUrl:e.replayUrl??null,async getStatsTimeline(a){return(await s(a)).statsTimeline},getReplayBundle:s}}function Z7(n=window.location){const e=sC(n.search,n.href);return e?RC(async()=>{const t=await fetch(e.url,e.fetchInit);if(!t.ok){const i=t.statusText?` ${t.statusText}`:"";throw new Error(`Failed to fetch replay: ${t.status}${i}`)}return new Uint8Array(await t.arrayBuffer())},{replayName:e.name,replayUrl:e.url}):null}function J7(n){return n||(new URL(window.location.href).searchParams.get("mode")==="viewer"?"viewer":"report")}function Q7(n){const e=new URL(window.location.href);n==="report"?e.searchParams.delete("mode"):e.searchParams.set("mode",n),window.history.replaceState(null,"",e)}function eX(n,e={}){document.documentElement.classList.add(dd),document.body.classList.add(dd),n.classList.add(lS);let t=e.provider??null,i=J7(e.initialMode),s=null,a=null,r=null,o=null,l=null,c=!1;const u=_i("main",{className:"replay-review-shell"}),d=_i("div",{className:"replay-review-toolbar"}),h=_i("div",{className:"replay-review-status"}),f=_i("button",{text:"Stats"}),p=_i("button",{text:"Viewer"}),g=_i("label",{className:"replay-review-file",text:"Load replay"}),_=_i("input"),m=_i("section",{className:"replay-review-pane"}),v=_i("section",{className:"replay-review-pane"});_.type="file",_.accept=".replay",g.append(_),d.append(h,g,f,p),u.append(d,m,v),n.replaceChildren(u);const y=L=>{h.textContent=L},b=L=>{y(Qo(L))},S=()=>{s?.destroy(),s=null,a?.destroy(),a=null,r=null,o=null,l=null},x=()=>t?.getReplayBundle?(o||(o=t.getReplayBundle(b)),o):null,M=()=>t?(r||(r=t.getStatsTimeline?t.getStatsTimeline(b):x()?.then(L=>L.statsTimeline)??null),r):null,C=()=>{m.replaceChildren(_i("section",{className:"replay-review-empty",text:"Load a replay to review stats and playback."}))},w=async()=>{if(s)return;const L=M(),O=x();if(!L&&!O){C(),y("No replay loaded");return}m.replaceChildren(_i("section",{className:"replay-review-empty",text:"Loading stats..."}));const D=await O,U=D?.statsTimeline??(L?await L:null);if(!U){C(),y("No replay loaded");return}const F={fileName:t?.replayName??"replay",replayUrl:t?.replayUrl??null,statsTimeline:U,statsFrameLookup:D?.statsFrameLookup};c||(s=j7(m,{initialData:F,showStandaloneActions:!1,onWatchGoal(W){l=W.config,a?.destroy(),a=null,i="viewer",R()}}),y(`Loaded ${F.fileName}`))},E=async()=>{if(a)return;const L=x();if(!L){v.replaceChildren(_i("section",{className:"replay-review-empty",text:"Replay playback is not available for this data source."})),y("Viewer unavailable");return}v.replaceChildren(_i("section",{className:"replay-review-empty",text:"Loading viewer..."}));const O=await L;c||(a=y7(v,{initialBundle:O,initialConfig:l,initialReplayName:t?.replayName,loadFromLocation:!1}),l=null,y(`Loaded ${t?.replayName??"replay"}`))},R=()=>{f.dataset.active=String(i==="report"),p.dataset.active=String(i==="viewer"),m.hidden=i!=="report",v.hidden=i!=="viewer",Q7(i),(i==="report"?w():E()).catch(L=>{console.error("Failed to render replay review mode:",L),y(L instanceof Error?L.message:"Failed to load replay review")})};return f.addEventListener("click",()=>{i="report",R()}),p.addEventListener("click",()=>{i="viewer",R()}),_.addEventListener("change",()=>{const L=_.files?.[0];L&&(t=RC(async()=>new Uint8Array(await L.arrayBuffer()),{replayName:L.name,replayUrl:null}),S(),R())}),R(),{root:n,setMode(L){i=L,R()},setProvider(L,O={}){t=L,O.mode&&(i=O.mode),S(),R()},destroy(){c=!0,S(),n.classList.remove(lS),document.documentElement.classList.remove(dd),document.body.classList.remove(dd),n.replaceChildren()}}}const PC=document.querySelector("#app");if(!(PC instanceof HTMLElement))throw new Error("Missing #app mount element");let IC=null;try{IC=Z7(window.location)}catch(n){console.error("Invalid replay URL:",n)}eX(PC,{provider:IC}); diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/replayLoader.worker-BOmyAjmY.js b/crates/rocket-sense-server/static/subtr-actor/stats/assets/replayLoader.worker-BOmyAjmY.js new file mode 100644 index 00000000..34a9e71b --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/stats/assets/replayLoader.worker-BOmyAjmY.js @@ -0,0 +1,2 @@ +(function(){"use strict";function be(e,t,n,r){const o=pe(e,u.__wbindgen_malloc),i=x,a=u.get_replay_bundle_json_parts_with_progress(o,i,t,k(n)?4294967297:n>>>0,k(r)?4294967297:r>>>0);if(a[2])throw G(a[1]);return G(a[0])}function ge(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(P(t,n))},__wbg_Number_04624de7d0e8332d:function(t){return Number(t)},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(t,n){const r=n,o=typeof r=="bigint"?r:void 0;y().setBigInt64(t+8,k(o)?BigInt(0):o,!0),y().setInt32(t+0,!k(o),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(t){const n=t,r=typeof n=="boolean"?n:void 0;return k(r)?16777215:r?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(t,n){const r=U(n),o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(t,n){return t in n},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(t){return typeof t=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(t){return typeof t=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(t){const n=t;return typeof n=="object"&&n!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(t){return t===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(t,n){return t===n},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(t,n){return t==n},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(t,n){const r=n,o=typeof r=="number"?r:void 0;y().setFloat64(t+8,k(o)?0:o,!0),y().setInt32(t+0,!k(o),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var i=k(o)?0:F(o,u.__wbindgen_malloc,u.__wbindgen_realloc),a=x;y().setInt32(t+4,a,!0),y().setInt32(t+0,i,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(P(t,n))},__wbg_call_389efe28435a9388:function(){return E(function(t,n){return t.call(n)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return E(function(t,n,r){return t.call(n,r)},arguments)},__wbg_done_57b39ecd9addfe81:function(t){return t.done},__wbg_entries_58c7934c745daac7:function(t){return Object.entries(t)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(P(t,n))}finally{u.__wbindgen_free(r,o,1)}},__wbg_get_9b94d73e6221f75c:function(t,n){return t[n>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return E(function(t,n){return Reflect.get(t,n)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(t,n){return t[n]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(t){let n;try{n=t instanceof ArrayBuffer}catch{n=!1}return n},__wbg_instanceof_Map_53af74335dec57f4:function(t){let n;try{n=t instanceof Map}catch{n=!1}return n},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(t){let n;try{n=t instanceof Uint8Array}catch{n=!1}return n},__wbg_isArray_d314bb98fcf08331:function(t){return Array.isArray(t)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(t){return Number.isSafeInteger(t)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(t){return t.length},__wbg_length_35a7bace40f36eac:function(t){return t.length},__wbg_log_f1a1b5cd3f9c7822:function(t,n){console.log(P(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(t){return new Uint8Array(t)},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(Z(t,n))},__wbg_next_3482f54c49e8af19:function(){return E(function(t){return t.next()},arguments)},__wbg_next_418f80d8f5303233:function(t){return t.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(t,n,r){Uint8Array.prototype.set.call(Z(t,n),r)},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return E(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=F(r,u.__wbindgen_malloc,u.__wbindgen_realloc),i=x;y().setInt32(t+4,i,!0),y().setInt32(t+0,o,!0)},__wbg_value_0546255b415e96c1:function(t){return t.value},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return P(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=u.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function ye(e){const t=u.__externref_table_alloc();return u.__wbindgen_externrefs.set(t,e),t}function U(e){const t=typeof e;if(t=="number"||t=="boolean"||e==null)return`${e}`;if(t=="string")return`"${e}"`;if(t=="symbol"){const o=e.description;return o==null?"Symbol":`Symbol(${o})`}if(t=="function"){const o=e.name;return typeof o=="string"&&o.length>0?`Function(${o})`:"Function"}if(Array.isArray(e)){const o=e.length;let i="[";o>0&&(i+=U(e[0]));for(let a=1;a1)r=n[1];else return toString.call(e);if(r=="Object")try{return"Object("+JSON.stringify(e)+")"}catch{return"Object"}return e instanceof Error?`${e.name}: ${e.message} +${e.stack}`:r}function Z(e,t){return e=e>>>0,O().subarray(e/1,e/1+t)}let T=null;function y(){return(T===null||T.buffer.detached===!0||T.buffer.detached===void 0&&T.buffer!==u.memory.buffer)&&(T=new DataView(u.memory.buffer)),T}function P(e,t){return e=e>>>0,we(e,t)}let B=null;function O(){return(B===null||B.byteLength===0)&&(B=new Uint8Array(u.memory.buffer)),B}function E(e,t){try{return e.apply(this,t)}catch(n){const r=ye(n);u.__wbindgen_exn_store(r)}}function k(e){return e==null}function pe(e,t){const n=t(e.length*1,1)>>>0;return O().set(e,n/1),x=e.length,n}function F(e,t,n){if(n===void 0){const s=D.encode(e),l=t(s.length,1)>>>0;return O().subarray(l,l+s.length).set(s),x=s.length,l}let r=e.length,o=t(r,1)>>>0;const i=O();let a=0;for(;a127)break;i[o+a]=s}if(a!==r){a!==0&&(e=e.slice(a)),o=n(o,r,r=a+e.length*3,1)>>>0;const s=O().subarray(o+a,o+r),l=D.encodeInto(e,s);a+=l.written,o=n(o,r,a,1)>>>0}return x=a,o}function G(e){const t=u.__wbindgen_externrefs.get(e);return u.__externref_table_dealloc(e),t}let z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});z.decode();const he=2146435072;let H=0;function we(e,t){return H+=t,H>=he&&(z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),z.decode(),H=t),z.decode(O().subarray(e,e+t))}const D=new TextEncoder;"encodeInto"in D||(D.encodeInto=function(e,t){const n=D.encode(e);return t.set(n),{read:e.length,written:n.length}});let x=0,u;function ke(e,t){return u=e.exports,T=null,B=null,u.__wbindgen_start(),u}async function xe(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Ae(e){if(u!==void 0)return u;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",self.location.href).href,self.location.href));const t=ge();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await xe(await e,t);return ke(n)}const q="octane",Te={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Se={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function ve(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Oe=ve([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function J(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Q(e){if(!e)return null;switch(J(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function ee(e){return e?Se[J(e)]??null:null}function Ie(e){return Q(e)??ee(e)}function Pe(e){return Te[e]}function Y(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),Y(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),Y(r[1],t))}}}function Be(e){const t=Q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const a=Oe[n];if(a)return a}const r=ee(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return q;const i=[];for(const[a,s]of Object.entries(o))i.push(a),Y(s,i);for(const a of i){const s=Ie(a);if(s)return s}return q}function A(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function N(e,t){return Math.max(0,e-t)}function te(e){return new Map(e.map(t=>[t.id,t]))}const p=70,ne=73,Ee=3072,De=4096,Ne=1792,Me=4184,Re=940,Fe=3308,ze=2816,re=3584,Ce=2484,je=1788,Le=2300,Ve=2048,Ue=1036,He=1024,Ye=1024,$e=4240,oe=34;function C(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function j(e,t,n,r,o){C(e,-t,n,r,o),C(e,t,n,r,o)}function $(e,t,n,r,o){C(e,t,-n,r,o),C(e,t,n,r,o)}function I(e,t,n,r,o){j(e,t,-n,r,o),j(e,t,n,r,o)}function Xe(){const e=[];return $(e,0,$e,p,"small"),I(e,Ne,Me,p,"small"),I(e,Ee,De,ne,"big"),I(e,Re,Fe,p,"small"),$(e,0,ze,p,"small"),I(e,re,Ce,p,"small"),I(e,je,Le,p,"small"),I(e,Ve,Ue,p,"small"),$(e,0,Ye,p,"small"),j(e,re,0,ne,"big"),j(e,He,0,p,"small"),e}function X(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function We(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ke(e){let t=null;for(const n of e){const r=X(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ze(e,t,n,r){const o=te(t),i=new Map;for(const c of e.boost_pad_events??[]){if(X(c.kind)===null){r?.advance();continue}const d=i.get(c.pad_id);d?d.push(c):i.set(c.pad_id,[c]),r?.advance()}const a=e.boost_pads;if(!a||a.length===0)return r?.advance(oe),Xe();const s=[...a].sort((c,f)=>c.index-f.index),l=new Array(s.length);for(let c=0;c=72?"big":"small"),h=g.sort((_,w)=>_.time-w.time),m=new Array(h.length);for(let _=0;_=0?e.frame:null}function Ge(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=W(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function qe(e,t){return`bookmark:${W(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Je(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const i=Ge(r,e);return i===null?[]:[{id:qe(r,o),description:r.description,frame:W(r),time:N(i,t)}]})}function Qe(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const S={distance:270,height:100,pitch:-4,fov:110},et=.005,tt=Number.POSITIVE_INFINITY,nt=!0,rt=.15,ot=10,at=.1,it=10;function ae(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function ie(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function se(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ce(e,t){const n=se(se(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function st(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:ie(t.rotation)}}function ue(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function le(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function de(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ct={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function ut(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ct};const t=e.Data.rigid_body,n=ie(t.rotation),r=n?ae(ce({x:1,y:0,z:0},n)):null,o=n?ae(ce({x:0,y:0,z:1},n)):null,i=e.Data.camera,a=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:le(i?.pitch),cameraYaw:le(i?.yaw),throttle:ue(a?.throttle),steer:ue(a?.steer),dodgeImpulse:de(a?.dodge_impulse),dodgeTorque:de(a?.dodge_torque)}}function lt(e){return e.position!==null}function dt(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function ft(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=M(t[r].position);for(let i=r+1;iat){o=M(s.position);continue}if(mt(o,s.position)>it){o=M(s.position);continue}const d={x:(a.linearVelocity.x+s.linearVelocity.x)/2,y:(a.linearVelocity.y+s.linearVelocity.y)/2,z:(a.linearVelocity.z+s.linearVelocity.z)/2},g={x:o.x+d.x*f,y:o.y+d.y*f,z:o.z+d.z*f},b=(i-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:g.x*(1-b)+s.position.x*b,y:g.y*(1-b)+s.position.y*b,z:g.z*(1-b)+s.position.z*b},s.position=M(o)}}function _t(e){return{motionSmoothing:e.motionSmoothing??nt,smoothingBlendFactor:e.smoothingBlendFactor??rt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??ot)}}function _e(){return typeof performance>"u"?Date.now():performance.now()}function bt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((a,[,s])=>a+s.frames.length,0),r=e.boost_pads?.length??oe,o=e.boost_pad_events?.length??0,i=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,i)].reduce((a,s)=>a+s,0)}function gt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=bt(e),o=gt(e);let i=0,a=0,s=-1,l=-1,c=_e();const f=n.yieldEveryMs??Number.POSITIVE_INFINITY,d=n.progressReportMinDelta??et,g=Math.max(1,n.progressReportFrameInterval??tt),b=()=>{if(!t)return!1;const m=Math.max(0,Math.min(1,i/r));if(m<=s)return!1;const w=a-l>=g;return m>=1||m-s>=d||w?(s=m,l=a,t(m,{progress:m,processedFrames:Math.min(a,o),totalFrames:o,processedUnits:i,totalUnits:r}),!0):!1},h=(m=!1)=>{const _=_e();return!m&&_-cr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=wt(e?.stats);return{fov:v(t,"CameraFOV")??S.fov,height:v(t,"CameraHeight")??S.height,pitch:v(t,"CameraPitch")??S.pitch,distance:v(t,"CameraDistance")??S.distance,stiffness:v(t,"CameraStiffness")??S.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??S.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??S.transitionSpeed}}function xt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const i of o)r.set(i.name,i),i.remote_id&&n.set(A(i.remote_id),i),t?.advance();return{byId:n,byName:r}}function At(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(A(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function Tt(e,t){const n=new Set(e.meta.team_zero.map(l=>l.name)),r=new Set(e.meta.team_one.map(l=>l.name)),o=xt(e,t),i=At(e),a=[];let s=0;for(const[l,c]of e.frame_data.players){const f=new Array(c.frames.length);let d;for(let m=0;mt.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Ot(e,t,n){const r=e.player?A(e.player):null,o=r?t.get(r)?.name??r:null,i=o?`${o} scored`:"Goal";return{id:K("goal",e.frame,r??"team"),time:N(e.time,n),frame:e.frame,kind:"goal",label:i,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function It(e,t,n){const r=A(e.player),o=t.get(r)?.name??r,i=e.kind.toLowerCase(),a=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:K(i,e.frame,r),time:N(e.time,n),frame:e.frame,kind:i,label:`${o} ${a}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Pt(e,t,n){const r=A(e.attacker),o=A(e.victim),i=t.get(r),a=t.get(o);return{id:K("demo",e.frame,`${r}:${o}`),time:N(e.time,n),frame:e.frame,kind:"demo",label:`${i?.name??r} demoed ${a?.name??o}`,shortLabel:"D",playerId:r,playerName:i?.name??r,secondaryPlayerId:o,secondaryPlayerName:a?.name??o,location:e.victim_location,isTeamZero:i?.isTeamZero??null}}function Bt(e,t,n,r,o){const i=te(t),a=[];for(const s of e.goal_events??[])a.push(Ot(s,i,r)),o?.advance();for(const s of e.player_stat_events??[])a.push(It(s,i,r)),o?.advance();for(const s of e.demolish_infos??[])a.push(Pt(s,i,r)),o?.advance();for(const s of n)a.push(Qe(s));return a.length===0&&o?.advance(),vt(a)}function Et(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=pt(e,n),i=Tt(e,n),a=St(e,n),s=_t(t);me(o,a,s);for(const d of i)me(o,d.frames,s);const l=Ze(e,i,r,n),c=Je(e,r,n),f=Bt(e,i,c,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:a,boostPads:l,players:i,tickMarks:c,timelineEvents:f,teamZeroNames:e.meta.team_zero.map(d=>d.name),teamOneNames:e.meta.team_one.map(d=>d.name)}}function L(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,L(n)]));if(Array.isArray(e))return e.map(t=>L(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=L(r);return t}return e}async function Dt(){const e=Ae;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Dt();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=be(t,c=>{R({type:"progress",progress:L(c)})},e.data.reportEveryNFrames,32*1024*1024);R({type:"progress",progress:{stage:"normalizing",progress:0}});const r=JSON.parse(new TextDecoder().decode(n.rawReplayData)),o=Et(r,{progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(c){R({type:"progress",progress:{stage:"normalizing",progress:c}})}}),i=new TextEncoder().encode(JSON.stringify(o)),a=n.rawReplayData,s=a.byteOffset===0&&a.byteLength===a.buffer.byteLength?a.buffer:a.slice().buffer,l=Array.from(n.statsTimelineParts.frameChunks,c=>c.buffer);self.postMessage({type:"done",replayBuffer:i.buffer,rawReplayBuffer:s,statsTimelineParts:{configBuffer:n.statsTimelineParts.config.buffer,replayMetaBuffer:n.statsTimelineParts.replayMeta.buffer,eventsBuffer:n.statsTimelineParts.events.buffer,activitySummaryBuffer:n.statsTimelineParts.activitySummary.buffer,positioningSummaryBuffer:n.statsTimelineParts.positioningSummary.buffer,accumulationTracksBuffer:n.statsTimelineParts.accumulationTracks.buffer,frameChunkBuffers:l}},[i.buffer,s,n.statsTimelineParts.config.buffer,n.statsTimelineParts.replayMeta.buffer,n.statsTimelineParts.events.buffer,n.statsTimelineParts.activitySummary.buffer,n.statsTimelineParts.positioningSummary.buffer,n.statsTimelineParts.accumulationTracks.buffer,...l])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/replayLoader.worker-D3pjMe81.js b/crates/rocket-sense-server/static/subtr-actor/stats/assets/replayLoader.worker-D3pjMe81.js deleted file mode 100644 index 1217437e..00000000 --- a/crates/rocket-sense-server/static/subtr-actor/stats/assets/replayLoader.worker-D3pjMe81.js +++ /dev/null @@ -1 +0,0 @@ -(function(){"use strict";function fe(e,t,n,r){const o=ge(e,m.__wbindgen_malloc),i=x,a=m.get_replay_bundle_json_parts_with_progress(o,i,t,L(n)?4294967297:n>>>0,L(r)?4294967297:r>>>0);if(a[2])throw K(a[1]);return K(a[0])}function be(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(I(t,n))},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=V(r,m.__wbindgen_malloc,m.__wbindgen_realloc),i=x;T().setInt32(t+4,i,!0),T().setInt32(t+0,o,!0)},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var i=L(o)?0:V(o,m.__wbindgen_malloc,m.__wbindgen_realloc),a=x;T().setInt32(t+4,a,!0),T().setInt32(t+0,i,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(I(t,n))},__wbg_call_4708e0c13bdc8e95:function(){return W(function(t,n,r){return t.call(n,r)},arguments)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(I(t,n))}finally{m.__wbindgen_free(r,o,1)}},__wbg_log_d095c16a726a937c:function(t,n){console.log(I(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(ye(t,n))},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return W(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=V(r,m.__wbindgen_malloc,m.__wbindgen_realloc),i=x;T().setInt32(t+4,i,!0),T().setInt32(t+0,o,!0)},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return I(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=m.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function _e(e){const t=m.__externref_table_alloc();return m.__wbindgen_externrefs.set(t,e),t}function ye(e,t){return e=e>>>0,S().subarray(e/1,e/1+t)}let w=null;function T(){return(w===null||w.buffer.detached===!0||w.buffer.detached===void 0&&w.buffer!==m.memory.buffer)&&(w=new DataView(m.memory.buffer)),w}function I(e,t){return e=e>>>0,he(e,t)}let P=null;function S(){return(P===null||P.byteLength===0)&&(P=new Uint8Array(m.memory.buffer)),P}function W(e,t){try{return e.apply(this,t)}catch(n){const r=_e(n);m.__wbindgen_exn_store(r)}}function L(e){return e==null}function ge(e,t){const n=t(e.length*1,1)>>>0;return S().set(e,n/1),x=e.length,n}function V(e,t,n){if(n===void 0){const s=B.encode(e),l=t(s.length,1)>>>0;return S().subarray(l,l+s.length).set(s),x=s.length,l}let r=e.length,o=t(r,1)>>>0;const i=S();let a=0;for(;a127)break;i[o+a]=s}if(a!==r){a!==0&&(e=e.slice(a)),o=n(o,r,r=a+e.length*3,1)>>>0;const s=S().subarray(o+a,o+r),l=B.encodeInto(e,s);a+=l.written,o=n(o,r,a,1)>>>0}return x=a,o}function K(e){const t=m.__wbindgen_externrefs.get(e);return m.__externref_table_dealloc(e),t}let M=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});M.decode();const pe=2146435072;let j=0;function he(e,t){return j+=t,j>=pe&&(M=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),M.decode(),j=t),M.decode(S().subarray(e,e+t))}const B=new TextEncoder;"encodeInto"in B||(B.encodeInto=function(e,t){const n=B.encode(e);return t.set(n),{read:e.length,written:n.length}});let x=0,m;function ke(e,t){return m=e.exports,w=null,P=null,m.__wbindgen_start(),m}async function we(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function xe(e){if(m!==void 0)return m;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-Xy9_Ya42.wasm",self.location.href).href,self.location.href));const t=be();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await we(await e,t);return ke(n)}const Z="octane",Ae={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},ve={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Te(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Se=Te([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function G(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function q(e){if(!e)return null;switch(G(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function J(e){return e?ve[G(e)]??null:null}function Oe(e){return q(e)??J(e)}function Ie(e){return Ae[e]}function H(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t))}}}function Pe(e){const t=q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const a=Se[n];if(a)return a}const r=J(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return Z;const i=[];for(const[a,s]of Object.entries(o))i.push(a),H(s,i);for(const a of i){const s=Oe(a);if(s)return s}return Z}function k(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function E(e,t){return Math.max(0,e-t)}function Q(e){return new Map(e.map(t=>[t.id,t]))}const g=70,ee=73,Be=3072,Ee=4096,De=1792,Re=4184,Me=940,Ne=3308,ze=2816,te=3584,Fe=2484,Ce=1788,Le=2300,Ve=2048,je=1036,He=1024,Ue=1024,Ye=4240,ne=34;function N(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function z(e,t,n,r,o){N(e,-t,n,r,o),N(e,t,n,r,o)}function U(e,t,n,r,o){N(e,t,-n,r,o),N(e,t,n,r,o)}function O(e,t,n,r,o){z(e,t,-n,r,o),z(e,t,n,r,o)}function $e(){const e=[];return U(e,0,Ye,g,"small"),O(e,De,Re,g,"small"),O(e,Be,Ee,ee,"big"),O(e,Me,Ne,g,"small"),U(e,0,ze,g,"small"),O(e,te,Fe,g,"small"),O(e,Ce,Le,g,"small"),O(e,Ve,je,g,"small"),U(e,0,Ue,g,"small"),z(e,te,0,ee,"big"),z(e,He,0,g,"small"),e}function Y(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function Xe(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function We(e){let t=null;for(const n of e){const r=Y(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ke(e,t,n,r){const o=Q(t),i=new Map;for(const c of e.boost_pad_events??[]){if(Y(c.kind)===null){r?.advance();continue}const u=i.get(c.pad_id);u?u.push(c):i.set(c.pad_id,[c]),r?.advance()}const a=e.boost_pads;if(!a||a.length===0)return r?.advance(ne),$e();const s=[...a].sort((c,d)=>c.index-d.index),l=new Array(s.length);for(let c=0;c=72?"big":"small"),p=y.sort((b,h)=>b.time-h.time),f=new Array(p.length);for(let b=0;b=0?e.frame:null}function Ze(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=$(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function Ge(e,t){return`bookmark:${$(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function qe(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const i=Ze(r,e);return i===null?[]:[{id:Ge(r,o),description:r.description,frame:$(r),time:E(i,t)}]})}function Je(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const A={distance:270,height:100,pitch:-4,fov:110},Qe=.005,et=Number.POSITIVE_INFINITY,tt=!0,nt=.15,rt=10,ot=.1,at=10;function re(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function oe(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function ae(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ie(e,t){const n=ae(ae(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function it(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:oe(t.rotation)}}function se(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function ce(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function le(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const st={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function ct(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...st};const t=e.Data.rigid_body,n=oe(t.rotation),r=n?re(ie({x:1,y:0,z:0},n)):null,o=n?re(ie({x:0,y:0,z:1},n)):null,i=e.Data.camera,a=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:ce(i?.pitch),cameraYaw:ce(i?.yaw),throttle:se(a?.throttle),steer:se(a?.steer),dodgeImpulse:le(a?.dodge_impulse),dodgeTorque:le(a?.dodge_torque)}}function lt(e){return e.position!==null}function ut(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=D(t[r].position);for(let i=r+1;iot){o=D(s.position);continue}if(dt(o,s.position)>at){o=D(s.position);continue}const u={x:(a.linearVelocity.x+s.linearVelocity.x)/2,y:(a.linearVelocity.y+s.linearVelocity.y)/2,z:(a.linearVelocity.z+s.linearVelocity.z)/2},y={x:o.x+u.x*d,y:o.y+u.y*d,z:o.z+u.z*d},_=(i-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:y.x*(1-_)+s.position.x*_,y:y.y*(1-_)+s.position.y*_,z:y.z*(1-_)+s.position.z*_},s.position=D(o)}}function ft(e){return{motionSmoothing:e.motionSmoothing??tt,smoothingBlendFactor:e.smoothingBlendFactor??nt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??rt)}}function de(){return typeof performance>"u"?Date.now():performance.now()}function bt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((a,[,s])=>a+s.frames.length,0),r=e.boost_pads?.length??ne,o=e.boost_pad_events?.length??0,i=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,i)].reduce((a,s)=>a+s,0)}function _t(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=bt(e),o=_t(e);let i=0,a=0,s=-1,l=-1,c=de();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,u=n.progressReportMinDelta??Qe,y=Math.max(1,n.progressReportFrameInterval??et),_=()=>{if(!t)return!1;const f=Math.max(0,Math.min(1,i/r));if(f<=s)return!1;const h=a-l>=y;return f>=1||f-s>=u||h?(s=f,l=a,t(f,{progress:f,processedFrames:Math.min(a,o),totalFrames:o,processedUnits:i,totalUnits:r}),!0):!1},p=(f=!1)=>{const b=de();return!f&&b-cr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=ht(e?.stats);return{fov:v(t,"CameraFOV")??A.fov,height:v(t,"CameraHeight")??A.height,pitch:v(t,"CameraPitch")??A.pitch,distance:v(t,"CameraDistance")??A.distance,stiffness:v(t,"CameraStiffness")??A.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??A.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??A.transitionSpeed}}function wt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const i of o)r.set(i.name,i),i.remote_id&&n.set(k(i.remote_id),i),t?.advance();return{byId:n,byName:r}}function xt(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(k(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function At(e,t){const n=new Set(e.meta.team_zero.map(l=>l.name)),r=new Set(e.meta.team_one.map(l=>l.name)),o=wt(e,t),i=xt(e),a=[];let s=0;for(const[l,c]of e.frame_data.players){const d=new Array(c.frames.length);let u;for(let f=0;ft.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function St(e,t,n){const r=e.player?k(e.player):null,o=r?t.get(r)?.name??r:null,i=o?`${o} scored`:"Goal";return{id:X("goal",e.frame,r??"team"),time:E(e.time,n),frame:e.frame,kind:"goal",label:i,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function Ot(e,t,n){const r=k(e.player),o=t.get(r)?.name??r,i=e.kind.toLowerCase(),a=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:X(i,e.frame,r),time:E(e.time,n),frame:e.frame,kind:i,label:`${o} ${a}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function It(e,t,n){const r=k(e.attacker),o=k(e.victim),i=t.get(r),a=t.get(o);return{id:X("demo",e.frame,`${r}:${o}`),time:E(e.time,n),frame:e.frame,kind:"demo",label:`${i?.name??r} demoed ${a?.name??o}`,shortLabel:"D",playerId:r,playerName:i?.name??r,secondaryPlayerId:o,secondaryPlayerName:a?.name??o,location:e.victim_location,isTeamZero:i?.isTeamZero??null}}function Pt(e,t,n,r,o){const i=Q(t),a=[];for(const s of e.goal_events??[])a.push(St(s,i,r)),o?.advance();for(const s of e.player_stat_events??[])a.push(Ot(s,i,r)),o?.advance();for(const s of e.demolish_infos??[])a.push(It(s,i,r)),o?.advance();for(const s of n)a.push(Je(s));return a.length===0&&o?.advance(),Tt(a)}function Bt(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=gt(e,n),i=At(e,n),a=vt(e,n),s=ft(t);me(o,a,s);for(const u of i)me(o,u.frames,s);const l=Ke(e,i,r,n),c=qe(e,r,n),d=Pt(e,i,c,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:a,boostPads:l,players:i,tickMarks:c,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(u=>u.name),teamOneNames:e.meta.team_one.map(u=>u.name)}}function F(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,F(n)]));if(Array.isArray(e))return e.map(t=>F(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=F(r);return t}return e}async function Et(){const e=xe;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Et();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=fe(t,c=>{R({type:"progress",progress:F(c)})},e.data.reportEveryNFrames,32*1024*1024);R({type:"progress",progress:{stage:"normalizing",progress:0}});const r=JSON.parse(new TextDecoder().decode(n.rawReplayData)),o=Bt(r,{progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(c){R({type:"progress",progress:{stage:"normalizing",progress:c}})}}),i=new TextEncoder().encode(JSON.stringify(o)),a=n.rawReplayData,s=a.byteOffset===0&&a.byteLength===a.buffer.byteLength?a.buffer:a.slice().buffer,l=Array.from(n.statsTimelineParts.frameChunks,c=>c.buffer);self.postMessage({type:"done",replayBuffer:i.buffer,rawReplayBuffer:s,statsTimelineParts:{configBuffer:n.statsTimelineParts.config.buffer,replayMetaBuffer:n.statsTimelineParts.replayMeta.buffer,eventsBuffer:n.statsTimelineParts.events.buffer,activitySummaryBuffer:n.statsTimelineParts.activitySummary.buffer,positioningSummaryBuffer:n.statsTimelineParts.positioningSummary.buffer,accumulationTracksBuffer:n.statsTimelineParts.accumulationTracks.buffer,frameChunkBuffers:l}},[i.buffer,s,n.statsTimelineParts.config.buffer,n.statsTimelineParts.replayMeta.buffer,n.statsTimelineParts.events.buffer,n.statsTimelineParts.activitySummary.buffer,n.statsTimelineParts.positioningSummary.buffer,n.statsTimelineParts.accumulationTracks.buffer,...l])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/rl_replay_subtr_actor-Cnltgw4Z.js b/crates/rocket-sense-server/static/subtr-actor/stats/assets/rl_replay_subtr_actor-Cnltgw4Z.js new file mode 100644 index 00000000..d2cb4f7d --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/stats/assets/rl_replay_subtr_actor-Cnltgw4Z.js @@ -0,0 +1,2 @@ +function U(r,n){var e=g(r)?0:k(r,_.__wbindgen_malloc),t=a,i=g(n)?0:k(n,_.__wbindgen_malloc),c=a;const o=_.get_column_headers(e,t,i,c);if(o[2])throw s(o[1]);return s(o[0])}function B(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_legacy_stats_timeline_json(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function D(r,n,e,t){const i=w(r,_.__wbindgen_malloc),c=a;var o=g(n)?0:k(n,_.__wbindgen_malloc),l=a,f=g(e)?0:k(e,_.__wbindgen_malloc),u=a;const p=_.get_ndarray_with_info(i,c,o,l,f,u,g(t)?4294967297:Math.fround(t));if(p[2])throw s(p[1]);return s(p[0])}function N(r,n,e,t){const i=w(r,_.__wbindgen_malloc),c=a,o=_.get_replay_bundle_json_parts_with_progress(i,c,n,g(e)?4294967297:e>>>0,g(t)?4294967297:t>>>0);if(o[2])throw s(o[1]);return s(o[0])}function L(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_bundle_json_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[2])throw s(c[1]);return s(c[0])}function $(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_replay_frames_data(n,e);if(t[2])throw s(t[1]);return s(t[0])}function V(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_frames_data_json_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[3])throw s(c[2]);var o=v(c[0],c[1]).slice();return _.__wbindgen_free(c[0],c[1]*1,1),o}function q(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a,c=_.get_replay_frames_data_with_progress(t,i,n,g(e)?4294967297:e>>>0);if(c[2])throw s(c[1]);return s(c[0])}function z(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_replay_info(n,e);if(t[2])throw s(t[1]);return s(t[0])}function C(r,n,e){const t=w(r,_.__wbindgen_malloc),i=a;var c=g(n)?0:k(n,_.__wbindgen_malloc),o=a,l=g(e)?0:k(e,_.__wbindgen_malloc),f=a;const u=_.get_replay_meta(t,i,c,o,l,f);if(u[2])throw s(u[1]);return s(u[0])}function J(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_stats_timeline(n,e);if(t[2])throw s(t[1]);return s(t[0])}function P(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.get_stats_timeline_json(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function H(r,n){const e=w(r,_.__wbindgen_malloc),t=a,i=_.get_stats_timeline_json_parts(e,t,g(n)?4294967297:n>>>0);if(i[2])throw s(i[1]);return s(i[0])}function K(){_.main()}function X(r){let n,e;try{const c=_.new_training_pack(r);var t=c[0],i=c[1];if(c[3])throw t=0,i=0,s(c[2]);return n=t,e=i,b(t,i)}finally{_.__wbindgen_free(n,e,1)}}function Y(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.parse_replay(n,e);if(t[2])throw s(t[1]);return s(t[0])}function G(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.parse_training_pack(n,e);if(t[2])throw s(t[1]);return s(t[0])}function Q(r){let n,e;try{const c=w(r,_.__wbindgen_malloc),o=a,l=_.parse_training_pack_lossless(c,o);var t=l[0],i=l[1];if(l[3])throw t=0,i=0,s(l[2]);return n=t,e=i,b(t,i)}finally{_.__wbindgen_free(n,e,1)}}function Z(r){const n=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),e=a,t=_.serialize_training_pack(n,e);if(t[3])throw s(t[2]);var i=v(t[0],t[1]).slice();return _.__wbindgen_free(t[0],t[1]*1,1),i}function nn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_add_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function en(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_add_round_archetype(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function tn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=d(n,_.__wbindgen_malloc,_.__wbindgen_realloc),u=a,p=_.training_pack_append_rounds(o,l,f,u);var i=p[0],c=p[1];if(p[3])throw i=0,c=0,s(p[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function rn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_duplicate_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function _n(r){const n=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),e=a,t=_.training_pack_from_lossless(n,e);if(t[2])throw s(t[1]);return s(t[0])}function cn(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_insert_round(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function on(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_move_round(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function sn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.training_pack_remove_round(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function an(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_remove_round_archetype(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function fn(r,n){const e=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),t=a,i=_.training_pack_round_archetypes(e,t,n);if(i[2])throw s(i[1]);return s(i[0])}function ln(r,n,e,t){let i,c;try{const f=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),u=a,p=_.training_pack_set_round_archetype(f,u,n,e,t);var o=p[0],l=p[1];if(p[3])throw o=0,l=0,s(p[2]);return i=o,c=l,b(o,l)}finally{_.__wbindgen_free(i,c,1)}}function un(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_set_round_ball(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function dn(r,n,e){let t,i;try{const l=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),f=a,u=_.training_pack_set_round_time_limit(l,f,n,e);var c=u[0],o=u[1];if(u[3])throw c=0,o=0,s(u[2]);return t=c,i=o,b(c,o)}finally{_.__wbindgen_free(t,i,1)}}function gn(r,n){let e,t;try{const o=d(r,_.__wbindgen_malloc,_.__wbindgen_realloc),l=a,f=_.update_training_pack_metadata(o,l,n);var i=f[0],c=f[1];if(f[3])throw i=0,c=0,s(f[2]);return e=i,t=c,b(i,c)}finally{_.__wbindgen_free(e,t,1)}}function bn(r){const n=w(r,_.__wbindgen_malloc),e=a,t=_.validate_replay(n,e);if(t[2])throw s(t[1]);return s(t[0])}function O(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(n,e){return Error(b(n,e))},__wbg_Number_04624de7d0e8332d:function(n){return Number(n)},__wbg_String_8f0eb39a4a4c2f66:function(n,e){const t=String(e),i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(n,e){const t=e,i=typeof t=="bigint"?t:void 0;y().setBigInt64(n+8,g(i)?BigInt(0):i,!0),y().setInt32(n+0,!g(i),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(n){const e=n,t=typeof e=="boolean"?e:void 0;return g(t)?16777215:t?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(n,e){const t=M(e),i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(n,e){return n in e},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(n){return typeof n=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(n){return typeof n=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(n){const e=n;return typeof e=="object"&&e!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(n){return typeof n=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(n){return n===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(n,e){return n===e},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(n,e){return n==e},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(n,e){const t=e,i=typeof t=="number"?t:void 0;y().setFloat64(n+8,g(i)?0:i,!0),y().setInt32(n+0,!g(i),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(n,e){const t=e,i=typeof t=="string"?t:void 0;var c=g(i)?0:d(i,_.__wbindgen_malloc,_.__wbindgen_realloc),o=a;y().setInt32(n+4,o,!0),y().setInt32(n+0,c,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(n,e){throw new Error(b(n,e))},__wbg_call_389efe28435a9388:function(){return A(function(n,e){return n.call(e)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return A(function(n,e,t){return n.call(e,t)},arguments)},__wbg_done_57b39ecd9addfe81:function(n){return n.done},__wbg_entries_58c7934c745daac7:function(n){return Object.entries(n)},__wbg_error_7534b8e9a36f1ab4:function(n,e){let t,i;try{t=n,i=e,console.error(b(n,e))}finally{_.__wbindgen_free(t,i,1)}},__wbg_get_9b94d73e6221f75c:function(n,e){return n[e>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return A(function(n,e){return Reflect.get(n,e)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(n,e){return n[e]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(n){let e;try{e=n instanceof ArrayBuffer}catch{e=!1}return e},__wbg_instanceof_Map_53af74335dec57f4:function(n){let e;try{e=n instanceof Map}catch{e=!1}return e},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(n){let e;try{e=n instanceof Uint8Array}catch{e=!1}return e},__wbg_isArray_d314bb98fcf08331:function(n){return Array.isArray(n)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(n){return Number.isSafeInteger(n)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(n){return n.length},__wbg_length_35a7bace40f36eac:function(n){return n.length},__wbg_log_f1a1b5cd3f9c7822:function(n,e){console.log(b(n,e))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(n){return new Uint8Array(n)},__wbg_new_from_slice_a3d2629dc1826784:function(n,e){return new Uint8Array(v(n,e))},__wbg_next_3482f54c49e8af19:function(){return A(function(n){return n.next()},arguments)},__wbg_next_418f80d8f5303233:function(n){return n.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(n,e,t){Uint8Array.prototype.set.call(v(n,e),t)},__wbg_push_8ffdcb2063340ba5:function(n,e){return n.push(e)},__wbg_set_1eb0999cf5d27fc8:function(n,e,t){return n.set(e,t)},__wbg_set_3f1d0b984ed272ed:function(n,e,t){n[e]=t},__wbg_set_6cb8631f80447a67:function(){return A(function(n,e,t){return Reflect.set(n,e,t)},arguments)},__wbg_set_f43e577aea94465b:function(n,e,t){n[e>>>0]=t},__wbg_stack_0ed75d68575b0f3c:function(n,e){const t=e.stack,i=d(t,_.__wbindgen_malloc,_.__wbindgen_realloc),c=a;y().setInt32(n+4,c,!0),y().setInt32(n+0,i,!0)},__wbg_value_0546255b415e96c1:function(n){return n.value},__wbindgen_cast_0000000000000001:function(n){return n},__wbindgen_cast_0000000000000002:function(n){return n},__wbindgen_cast_0000000000000003:function(n,e){return b(n,e)},__wbindgen_cast_0000000000000004:function(n){return BigInt.asUintN(64,n)},__wbindgen_init_externref_table:function(){const n=_.__wbindgen_externrefs,e=n.grow(4);n.set(0,void 0),n.set(e+0,void 0),n.set(e+1,null),n.set(e+2,!0),n.set(e+3,!1)}}}}function W(r){const n=_.__externref_table_alloc();return _.__wbindgen_externrefs.set(n,r),n}function M(r){const n=typeof r;if(n=="number"||n=="boolean"||r==null)return`${r}`;if(n=="string")return`"${r}"`;if(n=="symbol"){const i=r.description;return i==null?"Symbol":`Symbol(${i})`}if(n=="function"){const i=r.name;return typeof i=="string"&&i.length>0?`Function(${i})`:"Function"}if(Array.isArray(r)){const i=r.length;let c="[";i>0&&(c+=M(r[0]));for(let o=1;o1)t=e[1];else return toString.call(r);if(t=="Object")try{return"Object("+JSON.stringify(r)+")"}catch{return"Object"}return r instanceof Error?`${r.name}: ${r.message} +${r.stack}`:t}function v(r,n){return r=r>>>0,h().subarray(r/1,r/1+n)}let m=null;function y(){return(m===null||m.buffer.detached===!0||m.buffer.detached===void 0&&m.buffer!==_.memory.buffer)&&(m=new DataView(_.memory.buffer)),m}function b(r,n){return r=r>>>0,F(r,n)}let j=null;function h(){return(j===null||j.byteLength===0)&&(j=new Uint8Array(_.memory.buffer)),j}function A(r,n){try{return r.apply(this,n)}catch(e){const t=W(e);_.__wbindgen_exn_store(t)}}function g(r){return r==null}function w(r,n){const e=n(r.length*1,1)>>>0;return h().set(r,e/1),a=r.length,e}function k(r,n){const e=n(r.length*4,4)>>>0;for(let t=0;t>>0;return h().subarray(f,f+l.length).set(l),a=l.length,f}let t=r.length,i=n(t,1)>>>0;const c=h();let o=0;for(;o127)break;c[i+o]=l}if(o!==t){o!==0&&(r=r.slice(o)),i=e(i,t,t=o+r.length*3,1)>>>0;const l=h().subarray(i+o,i+t),f=x.encodeInto(r,l);o+=f.written,i=e(i,t,o,1)>>>0}return a=o,i}function s(r){const n=_.__wbindgen_externrefs.get(r);return _.__externref_table_dealloc(r),n}let I=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});I.decode();const T=2146435072;let S=0;function F(r,n){return S+=n,S>=T&&(I=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),I.decode(),S=n),I.decode(h().subarray(r,r+n))}const x=new TextEncoder;"encodeInto"in x||(x.encodeInto=function(r,n){const e=x.encode(r);return n.set(e),{read:r.length,written:e.length}});let a=0,_;function E(r,n){return _=r.exports,m=null,j=null,_.__wbindgen_start(),_}async function R(r,n){if(typeof Response=="function"&&r instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(r,n)}catch(i){if(r.ok&&e(r.type)&&r.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",i);else throw i}const t=await r.arrayBuffer();return await WebAssembly.instantiate(t,n)}else{const t=await WebAssembly.instantiate(r,n);return t instanceof WebAssembly.Instance?{instance:t,module:r}:t}function e(t){switch(t){case"basic":case"cors":case"default":return!0}return!1}}function wn(r){if(_!==void 0)return _;r!==void 0&&(Object.getPrototypeOf(r)===Object.prototype?{module:r}=r:console.warn("using deprecated parameters for `initSync()`; pass a single object instead"));const n=O();r instanceof WebAssembly.Module||(r=new WebAssembly.Module(r));const e=new WebAssembly.Instance(r,n);return E(e)}async function pn(r){if(_!==void 0)return _;r!==void 0&&(Object.getPrototypeOf(r)===Object.prototype?{module_or_path:r}=r:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),r===void 0&&(r=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",import.meta.url).href,import.meta.url));const n=O();(typeof r=="string"||typeof Request=="function"&&r instanceof Request||typeof URL=="function"&&r instanceof URL)&&(r=fetch(r));const{instance:e,module:t}=await R(await r,n);return E(e)}export{pn as default,U as get_column_headers,B as get_legacy_stats_timeline_json,D as get_ndarray_with_info,N as get_replay_bundle_json_parts_with_progress,L as get_replay_bundle_json_with_progress,$ as get_replay_frames_data,V as get_replay_frames_data_json_with_progress,q as get_replay_frames_data_with_progress,z as get_replay_info,C as get_replay_meta,J as get_stats_timeline,P as get_stats_timeline_json,H as get_stats_timeline_json_parts,wn as initSync,K as main,X as new_training_pack,Y as parse_replay,G as parse_training_pack,Q as parse_training_pack_lossless,Z as serialize_training_pack,nn as training_pack_add_round,en as training_pack_add_round_archetype,tn as training_pack_append_rounds,rn as training_pack_duplicate_round,_n as training_pack_from_lossless,cn as training_pack_insert_round,on as training_pack_move_round,sn as training_pack_remove_round,an as training_pack_remove_round_archetype,fn as training_pack_round_archetypes,ln as training_pack_set_round_archetype,un as training_pack_set_round_ball,dn as training_pack_set_round_time_limit,gn as update_training_pack_metadata,bn as validate_replay}; diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/rl_replay_subtr_actor_bg-Xy9_Ya42.wasm b/crates/rocket-sense-server/static/subtr-actor/stats/assets/rl_replay_subtr_actor_bg-BjSK7HJ9.wasm similarity index 50% rename from crates/rocket-sense-server/static/subtr-actor/stats/assets/rl_replay_subtr_actor_bg-Xy9_Ya42.wasm rename to crates/rocket-sense-server/static/subtr-actor/stats/assets/rl_replay_subtr_actor_bg-BjSK7HJ9.wasm index 28187c217632d571a5857f5a0f1fb0f6964e42af..140cd48935d815ae088e781af91126296cb6b31d 100644 GIT binary patch delta 1564516 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
UL>y9ajG{^(jK| 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 &6;lVZ3jlx`7VLIvx)4c$E)X!r{E@o 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­gd|zN8>R!+x-ml{ffpL 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 z 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≺sjBFN=XYQWnc%^+%M+<}_Yj7Mq@- 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
VUnz}0{lXDWTf!AstV%GL~&X8 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¥2M&rDef(~V#= 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

+6y5I69#ghF8$JX9n3Eh${asA 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

*~nY--&At)GjM5_u)} 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 MvW)8YnmzLW0B(eqx&QzG delta 1157678 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�D)&P&;7t*~EvGic*12Gpi4Jn0m�JDg9N&Ccn7rsf-A={n z$T`ktN8$p~Fyhnq}kU$FBoHrbw_JWVQ?*O)_lxqrz-m zeN@O6*V-7!3NRtTv5?Hifb7Ro>dWB7L>3+y;F;>HQLey=TX77WMc6OK(UII-;G9^B z93o2SKtwRkyvK#1f@`ONb1eA8krHeB{*p|)jUIKM^0CkX|3N0aGJRf9G(@&dN zsjU#ysK`$~DU>9v4AdbdP~%-419cHx)o>Waih5-!1u@tQ$UQVbjhMJTNJ)r=_TyS1 z19fJu3rAJ5o`Tqimm+q9tpLi9V3dsq3)|OYu+mRD;$)uuxq|h%!Q2hf&beN~=oi(&2JN>vDDvkqP*HBSup>_qf>l7W6el80guD&nkC13a@TwC!SSm zRe(30>>f8J``bLH9I+>mC!*wo61t=4O^^@~apBGI zMlUFpq#tG0`vqksuFu9h?P2W9bC@&Ke^L3H`jFZ$Df6WDq3qk2l=|h)c}Xpz=t(o3 z)bAda`m*vu$REqL+pu!+o{Mdtu2f>3hbiH#>FY|z&UiJ4L}&YB+1+?eXDFTd_C{pc zY_AdUI)HeCE|=n?3Gmu-0=PJUmR=_DczkY-&GyWaW;bs-MlsJsC4r55MQIvxZ9ZsL zC7LydDX$Ks{MY6OsK^GD(eK@j6+;V^i5y^1$+Er0=ehvsQ@CA=s8Tf`n0t{^DaSH>j^T5Et+XIg4w^ytnJa+teOv%FW_ zjac=GsP%V;gRz1IV62A0*yA;H#tIgc!q{N|gBUx(0RhHN@wk<-LJlz)!{Q!~X9lY0 z#t1NR=6x`cZZLtTp%nQ(Qj#<8m%_#G00wdK4+jLe82JGuuyQemLy|$24IT}hXfp~# zr%;u6i0HIY%B#JI-V}(fM0GGOON&mt%K-s;AMtpAUbbx+hq!ZbwGlN2`zSW#6(ydH z9}ThxsQm?#Jz!~ZrYar*FsPV6b3lOXIUcu?y}}_S$nJa%WItXAvK6VcLCyZ2)>Q6~ z7Y530Hu)6*1~vJ09AGezY1_o(@wu5)O3~V{y$(_n7ndmE#Ki#uW(nT{FsOvHIlv&0 zW&41~ttDK{Atg%Kcr3_{Bqd5IQNoTh#wl`3D&weva~uZ*NKE7LKsm9O!68Po$+XSq@l30zcZ~-d zyFLUPcNlEs-J!Fw>%&sSeGtGPaUbP?02{yXxRs6b9AdD6u7SsS>!n@*c7_9L=ypan z%zlrM4?hNDl?}!osH`*gA<9vrfi2;Mvox^P91vjaGak1xwwXgJnGJgMBnacvMW7kn z%Y3@16nYx~3=+gw91x(lgU7A(_H#%;5a05+#mN6O84O$@#V=XtD^S`Jg}%l$*;44y zONgrg6BBvd%EX%-5-4=`RM4D9=A^bE=)Bsxpy$C9l%Tng+XoBHEVQpJ^lu0Px}P4OZK+YJ}HIv+W-b>!+Z`1(Egam1GKYjD>%duN{($E zkN-<=TkkC}HhU=;E2X2Gy|fh0J^(O?v&9?`;A|C-TRB_DA%Tu=#B>ndK+;H{ntcl9*?(lYkY{ebOwkNEdh}ufU>|82tHWhc++sey)L^~HHy{kCc1-#8#GT+F*TQX7J5X<5I`tl2O5tr6gr|KFp7x%+hM4=h+fl*}JR$IPEDN6{nJz<5#~^$i ziLVaCS0~`%Tc0K5cO5yEQ&k<{}A-#1(Y{U}}IUs=>Cg|}}Io_;}i`gvH$d?mWn*4dXbKOB^~e^BQB#KgnI#3Nv0Kv_&s3hyI9 zcm@RF8Q@`WgNcEqnTSUybCaOV4U1XMhMs}NNejzK9S_-VPZO&6Ccwn;_@m!b{tc6FGnzA8F6>Nt*rL#``a&9 zT2g?uU#-;ef3-rvt1|%aTq(f**i}kBbU_<8Hg{{b+x%=EcDiZSA$Q@AG-)^}2DV#Q3UQ1NP1xd2{K za9&xwV*yMG8$2OBzB|#v^(}Rg1;6yb^q=sd;FNH!(+}kB4O$2urXZ*xcp-wA%9KVc z-YCM28&I5{NH?yd5BI<=I#Vi=*^tkbx~$V@%3v=4pN9p@f8S@y3l(s7z!NDjy`>6F zbnKV1)?*L&mAhDn6-uOBXnP`;UHV*!_279dd;i@x~VJEw}5wo?Y zK3CR|R#yH(c}3dqVto!ORoI>{l!v8j4puu~8DQVYj&4#?q?=r!8?mB%rD??HlG!MJ z7mCh?Z&Dt#?-Xed1z@qP-IsU}R9P^I${JGKd5e$(+U z{u+yu3%*iXNuN7d&VHqQsL}i`2Czo3Zkv&Jq=R+-8hL-Qeo?+w+S+HaPG5uRKLbcR z+gq{gl=!L+>#;@YY=4V=vIXfbb67)@RH2KxzCmj~;$ruGqwsg_qP8lzbn5)&tx64P zUS+mqt1>z3)V1cm5Vz}b*Oq8(m%tLhUrqBh&Gl;B4jG&SjUm?Ece2R3;q-WWo|+Pe)U{To~QJCu~TnF*%g3w3K0ZCInB+m*N~ zZxP~xAjAa$#0RX1S8a#0-F}WZOFH3V)pjWTA|~Oc1K&BGe~z2Y+Mx`ScE+%zol27Q zw~O7mQ)w8t+l?ee(I}*AIvrq`35ShIiER8%Y-L=O*}|PlhJ6j&Ls8s2d48wZ&{su$cXx*iOuUt{YAKl!cP#CCOO1)flR_5oy2DBR;Jkpv#dQzO=+J_Y}_8Dm;FQb z+aBn~@Mx;MY&LE$noIivc!7OqXHyHHNk8hTj}$27rSBuzs4G6L)e0YO5MmmV(D>E(ba9X5=;LU#3r)bZ$a!!{sEHOgT{?=sBHVUusAbV_#u4# zRnPXoAt=V!H1@(FrBeE*bm(VZ1d$pEj~+q8H{5y)AnD{6z=R0?b5=f@JocN1CX!%Fp3QVz$~Sa70ijUzu+ClyUQp{}zsn|~PFl;5jt z#P`risCA9+l?r&+#b7DghiC3x7xZ+eZ;?)1y)W<;-Xh&X6unT#_uDPfiL31ezEihI zC+?*e=|0la;Tn1>N3^vZYjId)B%5~_8@GS!$#8ExC8J*c%^#G$?RI-$vFL?W(e)x! z&f{`4MfGX84(6f?**Wnb5~+)8w}(=Od$_T37E}C#0ZnqUXOAck*xz6UN3hR5hPNKB z_)g|I3Iq6;#Bz_K&0Wy5_>U?bqze-B9R%=(4!rl6(j{qzYT6i$+ZfTj$?2BVc zdYC9J_T!IMVHb}naXO$P2e^)lf@U2rmh#durCgfG%2QIYDhi8@5Omj-e#qWzhD=qQs&;MCzXLlXaKqxa89XsqEVl3%bWdbEz_$yDwkgObY{H8n>cOKrO z@O#SjRiv%_O!}oOac1EZsNfw`2)+3wmiMGVoS`?YRcU1Y@VJDWA~qTi2EMbOt-H*KR1232phC%AzvS z@S4AHQ=mc3Cro#%(+Cx>{Uz6xaYljJY`fZ}6d?fv7ZNhZvBr}6I_2IXsU#^sYCMyK z#Ky@gFWWz|S{?HVjPY4sc4P%MOjW~KXGP_cjVBb9tNCn29YTVLQq>yt>r>T->34yu zR{DRMq&6F3p3!uRU`re+GPbo(f^~5qZtyb7_BxSoIRq|di487v|68j zcSWmr(ytbycBkJyF)BA*!(&v#bX_I*2eG2MzKvD6)oM{r@H(`d+MB)~D5uuuQ*2&e zuJUR&L7S8pC7V=Ur2eeD>Z?sRu)Sr6me5??=~2n2NL+U4m0Lzg5Hk*@&05`}t__b6 zQh4U-7VM5Vfw6C#z_=_%V=`?y!eJRXY#uK5Y<;R@;s zl6PFZp&a7HL)=OAK)gCaJbG<_yy5id^~D6WI!j7WzZ6wxd}L=5)GdT+Wg^Jq_s2wt z5szLcC#jR9BPncglG-A6>qUAg70y_AuEjUglk0jblsPJ@C#2OX`=z4FXV1|dwI)gE z@nkfn@hMDBQENL2mTzMXQq(HRTQVXvnuTtSgQDXV(4BEK9raChVO=JJjZ9G=j$LpF zMDUs`CvqyD6Ddkjzn6~3`wvu7CEgL`r>PYkXjCk^sv1w^46-de>J8}^H*4WlPsMH~ zRN*?Rc>-0FRCT=cNfovuRqdsnOK{@?)ha9}O`Sqmg3yNZM(ZOtL)ZdGy84nd*~2<} z)g!S5gcuLyaUONVgEGM5?+NVg%Ifo#KB1`)%DFH~tk@v9I0^#^V=8o_vRd(92>LSB z5z=37LGTA6=qiQa#RN8`iu!!mxylgZ@(?_WRh7$x4>Dz)`S5TyyNVjmI#pFY(!OZ+ zbXE0Yi5$Vjomx%pD9woWpQxs4_J2tmS6v+-ZHo2}tN!n4SLGlri}qKn@$YHxsfo02 zMElp*RAcSsPE!eo<5)uRq6Rar)KZ_87P#1pwbWOV&r_bM<#S!PnYnIl7>AEstXFOI znG8;6Y+SDEKgE(*2Ur%mn6HjHE%}$js5#6DD)IFf-(lEDC&q-fI zuz_{e`uB5-h!!c#o*Ce`ACFF{E6w!y4qU;zi*yGVTAyz-MXupLaYuL2@@+O>J$$?9 z&Gnt4$nq82=o>4ltNNs`qgaD_>Hyy?dgE<*f-Xl=US80t74*REmDp`<9Q0@;ZXUN3 zZCeyeyi3^M%InnHk z#%k+F&XN)qV!H8vT`<9xa7q((va~gtRcfkU9kkdDCN?Hx1>nEV%~se#ZY%yrs%cv^ z%lG|%$=Uia*0=e8kF&#uHT|EJ*|ZoYwN#tuo#6%!1F-)_wf+}aq@gYPU^m;`629?2 zMYCU9su%xvnK>M8>2)^5us*HTuKyo#v@wP?Y4hLXh=#zt)%_PM46}tSe@t7oib7LZ zRScOs1$EzWs5XWK6uQNj;Ffl|eh^YA%pFeiw7>(D3TH#@5%#AL<@j1t_`_x2kVVz>fPr-ZfXa?Y#zR>SK z_o<%}m&>}VNwlD_sizvtj(1mEQ)EzY6-y2Gt7|Fp#XX2b_E4vX@udYK#Z?1$7I?8#p0o^ zUqkdJs8T<%0`YS{bs`~p`r!Z~eJNwj!^UhCvo*dL;SFmU5y9F$g4t?*7fA71Pjv{p z+Fxxf>eWcbT0J6=qi9{&g9Fq_;+}U97nNuU=+%m>#wQA}_<`y*>8)fI_o&K*T+U%R ztsKc^{iA9ciR8qi>U;D%`Z0A5O5jh;RqwD%Ym-^`$JHJDtP80&v1})um$9VD*CrY~ zp)QrK#j~?dsB6U{6xEaB+bmY`@> zcuM_P9IJ^XQfNJPH$t-BfczDQs9hbz($hoLkx3&IGSxU3<-iUNeutw(xM*gGYl4$S zJ*y_zN3g7CRk5D;ywKfI&#E1gr~zw)A8Q2?g=9B92nV|%v6P`|BbND`I)zeUc5Coq zv+}|AJ*VF`o{C>CgOF|3u-H|$hX{~ukM0VeXWp7 zr_PHiUn}hRqPm!*1Wit017B3@vGy;iT}|oy_LAzdNC({OTnX-(>lL-UgtAwDMa`qS zUigYSh$<%jRkd9mDs(vy%oSE`c*)^l5hytXLfqR-?lJ9mA?wUnv0jAQQHL4YOey&~ z+TFtpZ8kvO*p?BY?06ouxpQA=b4s4NOenIEf_NY~YZiIo{Y)#ik zlxTAkMwV!ElST=1*KM>qmK(3*uZe2D`kH!YFDh}g2gg)hRAQB+g%B2YcwLj?;GA=s z4QEclo@gv31D2K*)YjP4*VPuuoAF|_2QL_iKX(Xd&`M*7kkF;q)!xnzc4KkIbv2T8 zAEP#Neu!8U#paJu8}XQ%V!s-(aulmNR{s`9vB5@+r(A8s66o7M6k7nCDHLlmPLD-X zY_t(err0(k#`8svS9?}ixl6n#AUKwWdc&}R4SP3yJl43*gtGleB<-rqYD`e8Q2fCO zYAaP_VhbmzJ|lc_f?9#E;bGBCyo*EPAnkh88w%%$q7}PX+C;TaNG#qvV$iD+mq68u=C+GEWVxz^>1MoLtm-`>QktB|Zayns4rdKtroB+tBs z#UQCD)&Ii`HOdYjud@s*m21LT(o7iXIXjteraB;QR5lg3h9@*!<}2HwoMZOcOw|*^ zmscFVI|bXJ#CG9Kb)K{(oMp~d`6kEix7Ce6J>ea!$pZEIchn3*{o_086FO=aP&=%s z`_IA{0H|J{6^yF?Y|)p$KU=LsO&yoayF-N<{W4q4k@m#+n*FXS zMb2$s558*ATtsu*`#+hlI?>mJvsLe@&C&V$|9(%k^Co@meKjqV59!=7EhA($b&h%u zTk^izfrbb>J`hXr^*$8K+mC&ywya_3HJWuOZ`M>ZV!0jq$E{{XG6qT5gGi*s^-av zmq34xr?sHJ!T|yF*LXaDKF2nCLVH&JW3@6%SO}yONY-Bk{jNCvlg03#E`k3d@IAUnT^;*g zhu6@y9aKM1BwG>UtjiL$JZrgF9TFqHI&-t>YqssmdmUK2C2A6VjAmCBt1XMCI4e@j zig_P+NrpHp$8XttzXK~;qWa21v)r^R;|=x2Ld|2_CXprSxD;#cP^0WmRqp%Pd6k;X za+ax41Z=uY?HYnEL0n$ypR-KOvP)lh+1BOiUVA6ekO|3-0U^R*lTP1qS zcUEC^iTFdS)w&JDum?Ct2hfit^pfyzqCpY97THbW*Wg|%h!?C@`QEs?2KMc*WHw-p z`XK#orr*M3=Jl(4_%4&|J78z?)~e-L#9H+ZqU~ENHn84VD>jHutyME4|4jDTJSqsn z2WGUL4Oyc$U_I8Um81*F{+HINciN>L$!yhnb+fcBnZ2|@ZQkbAz9m&nha)^i1J|O} zE$DbPh$$P@j?vgUtmCfkt{vE@?7vZL7`?kuosNwof8Ec>USkY1_X{jT zVdz#pA0P1hb-tQTPv0bAxbXoW2#e=$24h{kYCXpb^t=`x1H#KhaJo1Xp2$Y@vd6N_ zO=<$omH5+VHNrJKI;GZz^PSp`aPHcK{TuxD{!&e+F?_s2esGyjk5NE!NmWUyG`r^tIZC#D3^&EaJ~eWjDUY+Bu$}@omA3 z6tB;08lshBC$^{`Q|1ZZVDk$fpWLdBkqZ-HgumMc6V&GwO=hXvFcZVKHrud+hKz@{ zVbB0VwYQ56vVq&xM*PJd4A9XPW7OrLXMfz73*vHZr>};1VGJ%Qw0mgdQgNM6X5VgC zy~N-@+x5xj4r7cM%I6&zr(E7)>z>MLSb(Exd|uMy6!7pOU`eu28OSo)#@On{&R3-_wO zi-{Siivgt>044z`7GT@Y+-UqS63w~!FRC`eT z@<9l8YB`qitvZ2zKmAtiM8xGos{Xi|YLuhtA$6!=)dX!ir2bqCwDPbJ(Bt2s27&0G z??hK__h<&9hTp5hg+L4t%>tv?o*&d&%>IMAQJ^$Fvh6>ppAo8YN7Q|ZKgEa!yw#3L z8X9sw9esjndZ)7g*`w+lhmaUJ6!I|xz$PHY0?c<(of5H-?&QYJB3{{5kiw3h6dR3K zPpZEY;fp`2`rCu%YDxA_s{Zz%0rG$PlNw<+Sl8$1yM9)`BMb|FL4*1$jD7P921m0h zvx~pLN#a^E>+`GnY^f_KAD#YHwbv`4n_w|!bnyWAqkzkGUB;mEnvBJZzht~tScD0u z>jsUMugVys{4KK;Fcxwhp$RTfU2)qBZ`aT(o>!;P%!V448)-iR`Fo0#3 z3e_y;KLfRg+@sGLHAgSi@aEX*tWk3&=-^pZe>Kts?KvlOZt{7oO1%;5UvwU7O$7TF z3X^uRP(4qtZ5_L$R&+*qiL%)!MFe1crAxPvrVjV?*$j zZ^SqK9Rs>0zpK?l^sIkq>}Siz3arv)bZB@@?B2`h$UuJnWkG(30~WRE6?HVsvVY4J zHPTM@`P)BKpHL?hM5wz6u&RHm_ehsimiMQcVQ<40{E3bR=pz3Tc9x@C@s~QT2~Bgc z@oppEHZ1gU9pc?F#sIgYdM_5KU0kNVVSxZG%Ip8WNS$D}JK2DL;80TFWv~AOzaL2N z?|;-j#7EDoqFBFPRS!@Ta(ZNUf|!PUa}7&@2c67yU2R_OyVP)?#7$usjtE`YAHxP- zS6dR2rPnR8>2L!A!}Mv^4YXx^TzA8yP?bG(Q+*r2>7g3$o%8wr`dAZd>hCCD_Lr6^h$i*abZs278D z$Kp0DcN&ZKMe~7JoUEO+rtMG3z(zL1$q?=Vb-i}OTDJjrKPY3oSKgs(j2E|KDMbhr0<-X`PilodN4#Y zAKMfldgV-GeM7WbY(l6unzzX?Enb=v>#rK7^^gqX7i65-%m}TUv^I)ejL;IK%c(3h zQuC0@DqVUll_$agGQJSmT*;IE(rZiLXNv$I6 zqVHJl@Zt$4IGWIbAsA4-$cr7!6{RJ!5ErUo5l7T7=Hn<@738``BP3U0D*Mr;rH1Hv zj_7%+Mr)77%#R49O-9;Fscb>C;Cx%O*1Fp1lC0#*f|a#0u@Y*qvQZYS^oY@FNvmCK zatt1Hggsdvqh+HR9gETWdAM@8)m$&U@@!rw4R=(ZOm5y7_VCd=6gZ346H#i2prIHN zgf4`j8Q2IsjpDd?Mmr`~s^rUDxPkH)rdE$T? z&b{Q&ZgcHc{BKpzoMOP5py{r5=#_<`{V_o^_ZW20;6%;bW6(iQCu!tE<-e<S$zH{Y&a-*X*JM#oizN=(Bn#BRKuyPD7z8K&`o`9rX=`GC|Yo8wzED-n>gFRL=(5 zCI=BsX(H@lqb3^nF@36u*3$|<+eE9bZ&A_U;+;g6-c? ziZ<4OsWqOxcDJS#s80^Hs%z6IoMn6eP^)^q1fqIAHJ4cP))N`pw2YwDl6usf+qmny z>zNpJ2i>;l+udym;|jv)5aFd1=A7yFFzQ|{J`Y9E`S8J|*6pKQn|5$M5YDo#-_Z(h zMo>v{c+nl5aIK+772*XPLx;Bp=~aRrG3kYNH^|N$h3V%j5{fuWn0aY`NBONNLzs`GJvZj zD!pVt6(vw@6%yvCHW4b8-c`F&1Ete?Surrb-_yWsg0dboFq@!+UfPl*EI@_(u#AKE`NC-_D-}O?=3<_US@X$W+MPr? zskcEvH7NAxZBQ^l$9o$TOwgW(1n+ z&B#Kk{j~d}kzuTNKkaVUdeXTtp?V6e8e7{>jGR`aVh&c=PpeG4B|L2OSCP1YhRe0r z!ytc@+Ds$@xLh)l z=PxCIY89VK22da3Q^^2?AU+ifu;T+!HUC7iv`4jSNhNGGB(2+O_V}aPoqQnT@L&%% zipInkb=fF{MH18q>UYzl+5l-{7|VK0Snzg_VLY-alpV|EJt1qCt4*`UzkD2x=KG3l z;1k;9_`gGF?ny7(;T96EoHE>w^Kp^$lbEF($Y7aIYUfCc;s%MKK;1#qfQ{<=C00Kz)2X3m=RT_wpFlX0TQef0jn+H1Dz#)6uXt^RV1Q{ofF63Uz5% zLv@Fa4a@iCwTGKQB%AUwrYg>-v7CjOWfUuTS>rRymQQO;VktT%who?^b8-Hv74`e`|V!#3F5cC08XaWG4@le1`XzB)-jdBFNiQL zfQJu-j8NvvL$$_K=7B>sI@iXQ4%MbgzbCP#&uXa@f8<&1>y(>(58SO~Io8U}q%INE zEnwX$9~WZLkh{%un3>#!Yru0b3uC-2;d!kA#qWDwYf@=VIxST26-rRYscqMqN~kxV z6WO6*Y}NCaXF#k^zkqSL5Nj+8e^I-OyGfUK<7g-!#KQT2`;g1-ST3}1tP709taJE_ zT2k~`bP2T7j{gtSPHQ;(;uT2m{mSfzS2T?2U(}*WgwB_=f(pE1;T7@<)oVHA(ChW$ zOJebXuZ>TB8Dc^4cfSlV;rH~*S`+%M0<@@KLA)aC{|cte!PJ@&p-Qi6P3*JTL$7M} zVl2EZ=e#Ad^TU7@%zgE$_8OA49j4WZ6>RB+AeMl3+AvK0Ky}YBp$cb*X-UZEcjjpm z?Abv%NU&$ZBW!$c9&>zpr#u<&qJJCht@_arkIY8Ape3;HhHL!wd6Y4hwHcw^Bb^QN z&mN&Iu}fDHS-Vl%B589)Rx}F3PRuDPjMnN&r$boh(I9^|j6E@0+e^PqUeiwTrI{3# zJVgi~01Z@uFAwXuMXX z-0E~1HW*q+hiZR}X1|PwcrPch)CpRBJq1oRz|LwuJ;mS&T2(As`R7c~9^f@$sT>d0I3L?J43tfC|c2pors96%JOGxPBw>WX`L6| z2Vvl@${}8okPF-BJ3x#Mu!LsXPu+#Mmvz4#?wh{($|>^EI%rg-SXw?mo6) zp4N+vd`GLR6^i;}U%aEe?3jJ-Ue;(9y1k3tEY)Y9txa=mUnOePj~c~=Iq!61f6vh> z=DpL+9i>;NMgFf_z*r|U1Z)Lcs>2GlREHI8sSXoNWmh3)0N6Wowbab%-Sol(VitZk z=FX;yBK5rK-Tc4IrFr+vZtT*#P@$Q~rngxzWi*$K_*`io=GgjgjFC(iIeqUn4FD$Z#Q3i#I6lrigq(S!S8=h>)~)iUZJ9KICWMM1FTR1 zYb?;pldz4?kgCBc3B&+f3Sb3WG|CFLXp{-oi-))uE0EZ!qNy!T4mvwM&NeU5Vst4x zx!le221ywOhLqWmCE6qG;g7U2hE;T8t%R&1{aURe#mOp`28UHF4GgPT8W>iw6fk>i zp%#&#TSfYgc4tY(rYuA?kH3%EmuTf;4O2}ldeM*&XS)^#8@_7`gA5;1!SMO3evBnz zZuvS446VR&mTOTgez|rR+wciGtcCZnlb@iwU3lM&MOvI;x2O(b){Lrz6=XS!wDJ{n zyG3v`EAunE_^uXrzhNs0Y^iW7*izwEu%*IHuwLPavu%rlts2T%%&MVk$*Q5KL)gs4 z!m9OMsFkZ}Sfpa&wSvKuA$77>kaqbP-Rc>_CV1u&(~d#O05O%!YR4dRvSZM(DOM9! zo>g3`J<09Z#HHFqvSW$Mw1eDwnYH3atyHt;=na~9LTfTuLo4RyfZ`Bt06YWyN*ia= zPpmZ&X)+mul`FKWErc-u-=;A@^KtsJ+hGhNlpdx)*yZZJ>b?TQGQmolCWCoaYVU=^ zQjkX~7R8cUGtWm_Gk^4_uv*$w-EMeSX$|byk?6fzt5@+P-(-rwfn851?(DK-lPMg3 z7+kK2Vk=f_P2y-AuRC6bVH3-Xg+&_Ct826t(nn6#evQ_y+z$SdjzZfAV3sac*&D+a zt--1T_Cc%oF(k!rYrock?v}u^CwG1ZgW_(AkNjE|dA02GYjfy#$XboxND;D5Yegfc zF6+eD_Q`eHD-`dzUc|NaVnSlXbJuHGf&e%GZj-l-wFd4_YN zHqwf9;YN)KECqti2%XJ)J`-48{Y+q~__;PC#BkLqV9`AiQrMGzO=BlM*QSuWH*8Z- zK>@I_75SQ5e4HnkG*Xcx{%2okS?Y}pB((E{#B^l7Ah#qRwgB<{`9eC6Z_+B#D#o}? zLP~o#38|dlq&>?A!Z>`J>*daB-18YB!}FO9|57`S?FrWREA4WS#Eh~I+-yoLjxF4b zO$|_n*m%8c`x;Xk%*)cYXkAHiFKrQP&~IKim$0K063z#y2yt=I(kIGlxU1DnvlKHIdm;mA*~YzW0$y$xF}$icItl+Un7wqtNE ziaM6v+^%Va$hiYcPC!&+hsH1PIIu(GuC8|6k)!W(#O>7b#L|!ndT*z8xj1MSCbB@- zXSd+&rQOOQgm({R65KW{#K+_6UI4Rcq(u4TA}I~T#JSidP501ok~L;!Y$PpiUl&O$%r zPupPgBoAJga{AC@up466!Fz79u>S5OXSAy^{@labGQPW#^u3mv#Qmv}S4hMR zIC0zL^jXel$hQ;w^PujpV0WhSb=8KFQ{Qx?r-eCZFG)^))6oFUa5(iXI|IW0aX9&w z-8$JhjY`;FDS>CaQXCI+sU;AFY68(V%{iTGoU;U?xlZScV$0JY?{&9~h-Eh&&RXoj z5a((kTH_;22^A=hhB_}0%3Wbj-Mzp}5)$sz-3v_6#BitXUSNQTN;x(y98@+$IJtX) zFVfjPa(q&lJI0;pgIRQqPhtxqowbMq*<*KC75?PEMmnoV{uqBulykO2e8Z}t__nu# zvr70VyiG}a-Px|MqS>Vw=ZxD)l*9gxbq>6}l>5rvZpuaFZ#U)WxZ6$HtHSN3tQ&v3 zDWei@H|43@PPr-Zc5%Lwbh{~^sd&37+b7>{%Jh`mO?l(CQy!{x8#qU}Z&x+Pd2Rz8 zG`%|O>vg6{A6I5$yiUfSo`&m-ZnFL#1kgr>d88|P`3{7ehp-j#zYs{f9jdHpnzLQ( zAwF{Dwu##g*VHio+%)IIcIo$IzazuBjob6xm7Th)jM=@%WI9KZ(Xb2x=4U$pEC%`@ z%lTO{dK!)P$>w1%LZgi`+T?_pbGu!ChOuE)oLl}6dtU+_MX~*z>1@+I-IK|_kz{7F zO&~zn5_TAN5LpC46cp6wf+*rHPYnpNC)Bp?y7rlNn0{ln`+j>G_PhC8dEi5r-)}q zzd~cq_k&Ip8gsrMbhNsdpl8*vW|EzASq*D;2Lu)%RLW>op6# zfJ~@mUWmp^V?HYvu0A+4ZbNqNZdp&!2C7 z>scQU0+rXZeia1TR%|6hY2V-y>tIP5ud)jbtf!=(@#@piItCo-!xDSz{84`}#JqekW0hw#|j$HJk+` z_}S*xh6JwaMFn7WIn8UmhO}>b3u}g@Bd3V|s=pYaPC{LkZz{hk`5_jk6LuDpSX3+P zhtiG=_DL(S+%2=Kt*rg%&8J^$E4T3*(%Q;>FP65p;>h6)w!gKNHU4JK#;{_kh%e2D zdn3sYQ-UGOk`~SpxGCztWOzyVZMZvt4~mG#ysM^^5du8B>16bn4%XLLgSOTT`NU8J z;fZo=kD1)wn!%oHi`S9&eY4tH+gQ?kLx@9}MG%2yEdji;z&+vd^D46hGn=qAh}oWo zWWAE)O0+o>Y0oZ+oOE#)!F^oBOB^CZi=*HnF_;Z~4b1G0Q?f7ZCaYqp^VbA;T~YF9 zXa*&>$M|}7w5k^VWmCbL@4Ru=^qK`N54{;Z8KX$)WKAnBqr(Fu8itjLU}a=24(%b5 zH5T_bS3_PT-3Ag(NmaICAWDv2LBMN2IL< ztX3CmiaL9SDd*NM)+26|PH`nTlLINdLKIYkLRX!_Eug?CCq~b?^%m=qJWxo}OIMZ3 zEjZ4@(8$|_tLV5ryIGGk0B*V&x2ZSWRmJ}jj*tgb!j2L~SaqsUxMOlA8_?aFrS2Gs zY==&ebr;MtKoAz(*gFODW`5>J2sf5+kLIwcw~DG}qN-UsK6Ozv+d5*IOn4_{#(G$f zRE3Z(;CW$t<8;M4-GTV~&G^%M3f27cHft62H08wWl;++ha)$Oo&Na$O*K-#15cJl>dR!e4f~pfvUlPW(~CVYoLs9Q;93Ofv>l~t!c(> zOKOu$c)?8kNYFxrs=qA?i9GS%(!%JrO@u^w}9)?aX-3C;MO+dw)f*M zB-|_=_v5~z*3SpWjwH~hNN90pngm={2pkoCGH=W%X=_;WwKT*AK z$D~ZQ{U6q>)bWHwohY#1vP>3!ALjY31-?`FSzol!%_9$3*GqgrK4jhHvyQbMvDkk5 zvJAt`D>*LKU_ZWUEwT?g0007|;o=wp)8uj1tN^5*V6o6zt3kI_ zT#{OoLI~sRZHQ~;@DU0d91iFl{upP?4B(JGz5?m8j?{O25Yp)J6|&AdC}iCnjC9U~ zv{6T@@mdh2p08Ppj0znWNK}glc!lcI?EqA$LFfvtLt&#rV-5*1E(deSonS3$psQ@Y zKq9iEFdai@jp=@j1w5LB=J6_u8$5RCJa$a5Is=sUn+fT(j#TgUAf&#pS5O*rSV%h~ z7-_2sX|awJJu!$zh3IUVT!GAZY# z(8_rj#SP`G62;k~NkP(nVM02hBPC1@LTWa-g3@Ij>G@!!`6i@kUkMFE&Rg_km>e!Bql@_d!JDK_BeR z`(QZK+$Xe}GpAPYIH2?BJvB&>ktU>zI?|?Kq;n>uDc^`H)p#R_Qm;2E*sao$STNEj zCZv4=Y4V#vgsQz+LFl|r=)qv5i9j-RGp4+v3ku!fEdX7Rbn{SX-CQy8SS*UOM$>`> zxo=v9AiH&>dBI4#Oh_knByD;SrTWt=C=EX<6!=sy(rgpbJRRwqU?gQm1*MHTQo9*J z>>f8E9oLcG4MsX*LK<>R$dooSh*ImB6>6R)ka!m)!{pZ5bG!>iLe0;IR`b%C)>_6$ zU#s&t6U-xJRt3@l9jWImt29Bx9os3UC%MmlFgn)t1#Qq9>xlzPvuV7FLDdNUYl ziwS9mjubt|>bB3r!_7;6C5S5fmWP$hv1SLr-u18t=HLTpNIn}k$C?8RG<>a^=}2$@of(~ zZYFadktq*J=1UK&`L;>8dkFPhNYqa~Y_J)%FQE>>8cAj0)_d3{Gb*3f;jRz@b)|39LL|yA)%gw0G2o+JTLJ05?0;Zc$8xv|-NYwov)@GqeR{n;%J0$8$ z9`>3UwV0@uheTcEVMolUbqMubNYr&6mcK|ePv=EJ&9fAt-H_*Rp6Wzqd_<@!mwDJn zX4I;LIx8gVd)Q}OEI1Y|4&u1n!@42Q&oPI{l!YYo0RmB&QC)^&N-Bx_38uev;J^s!8j83Vpec+G)*WYj;?^5?tl3?Xae4hoQA zW-YUacUiTx&x45&fG=A91^=$B=WgrZ^us{seg)*H73Q{kli-AsB!c#w-fbO}fCc=j zeEr&O(crG-t%`+THfWFap1VH#rCp;iI@k_AI-7oJR}$tF_aD(c?H2(4KHWRS{Svyj ziufoprpK5z(F!5avO ze1=HS$`jkO&+1f1jzThyL>QgoyRy%En?;>UAX-3lyqL}UePO-3>b3$3hAtI^ms?$R z=z75Fs_U=mJA}{I$gui%<_qgx(zXKD=}QnVqa0&JZ19)XZfQCtT}NL~KGzX6a-wqn z88hYX2dwuH<<$qQIqHbfC~2&p{p&y_%Cjh+uNFeHJq}jNUqkuEy55G$`TP9zQNHL< zrSfOZ<)>H9ANexqYotTyL^&)ZA9xs&Pox}UL3ifiN|a|%zOgv09;uYSgz}A=KU+C} zGvymK{~r0tT<2cN<(3f2$$O0QbEy5he1#?&K}&p9MEkSnzOw#7Dt_i`>tNI3-=(ju zt@F1PpuzEGVYDEq8LV?S>jlJ%x&zz!4Oo9nNn?Th zk8iAZ)Cwr(U(ycuZYNCM?ei+SeV*ghOg5t2T1!4c*}O}am0KI6n5bZK7GosOF)owE z9<`Rp7YLbFQ(4!eR;SFya3NlHvcX3~2ws&7K9`WV;73tLT`kI>anWtHW7eJ-CYF)# z6XJz75tdAhh90vfNaHgZI|lwc37kUUFOPxN_mt#=4Yb0)wRU$0(DDzm^MuE{1v=!j z*T)++7I@hpPqO`ZeZ02`k8cBvPGSEzZoQ;b@MZnKvkta>Kp3239fZTNwu$Em_=G?g zFuDS3_r0}`Z4+VgI@DpyzqhumGR^}8^3@JiB<6(mc6l!qNpKvCV~?G%-kZw{&;#jD zOI|u*&6H12$#^R1K54zT<&U|fZ0Z%Y=s6rV08bs-Z{m+kLGG{U`nI05t`1i#YNg^q z`GYly%{y&PHLGRwX=|#&XW!=AAj)*v)jafB81{6y5B8dmEdH zoBpTfZVSUVt;Obb(Xq7TKeh@+WE9wE+;TljfOqTQF^dDh2Xt_zE5iGtK};_Z?T!GQ zB;=fi1U1iEAI$s)NA%(RK-#9pb+^TZSR@{4AI>ZFF2A&meQ?(5l19h+4xY8fS!lC1 z0-n>lP0ht0t$9}Ndq|jh=kVJH(#g-<;=NwEDkxVj${~DhZ4|+lCAKyDT(Ivl!ZvoBj4usK(({)k_?^#Bm+vpcR@wM5=R5p>vd3C2bQOc99Y^H&W+ zE2-=1)7U+yi>^4vVP=t zHu{=%CKNrXs@#z-&xp&XatG3WoJH9G>MS!O*sbh zYmYP$?82N?b#~EU$5uzk$E9N`n;9v$l#b-E2EAjm$7lDkR!3RzsVJV^S<=6fkxPOy;0>YG-%Q7Vt+g|W+<7^^!}3ZK=E z5$s2+Ts7&ysO@3i-^08UF)SP}SA%U%qT@rv$CTw%%*)hH=fYhG323LYy>F9cM9;}* zV`cdn{hG@P6`7w=Hb#-TtK~b2oLOahwo^n%12;s_bsWi|=>vn9Ug3`_vd6NODK>e6 znAGSbFFsW*u*pu9Y}&nLs(|db$&c`8v}9m`fW4y-jkc>Q|0{y5BO|bl9O3m0aKmVT z3`{%5%7fzpw*sCDz60Fp-1d_ljFtZ>3RH1s(%^QA$>hE`c~_(~G=-I<$hp!_5xzT9 zWQ0rEp3m-2m3L7L;QDFuSZQCD*WwWRtVxsgh4+wVZNOX=gqg6P+mmPM4iS)p4bGPP@^CQ{t*|<_ zMzQsIGC!B>8~u7EPv-H%n&!wn80lmB_3a$lSx7Gr5eO#YjzUp93V84)Zc`rtLvjk< z6h%FOzh50xTjDA80u{2*!?NHegKg|>*FyC*B&mF;eB-GvE zpblGn9t!nv zpKZRa1@Zxl{6(xQpJv4>Y-W)RNBAak6x&%%zMJNts!io;tWTkQJK6oLE|hiK{2XUC z|FUP73S~WZr2%rg>4?BrYsht2S#?>DU1?;p(KTdlgx#*D{0}mYTUJxngPs;PmEki{ zB-fKh#j+_y@($^2HoLEu%nxFmT}y67=@WX|U0b9ds4b7rAPchu@fM-Fv#BOw?i>mq zW^ufh%@XU#UpIO?njW{1LX4%#H`&zF=%qtgSecTnMqSLB=p*;k#URCXZe5vsX8c|k z%0xP;o}5WRUW@CAzI1;*(aqniCqMCj(U4Qf|Jmp#v-AY|iLY0&?B)iO&zBg@KvDL& zf#Am_a*K#F9yOeet1s)vTlh1()R&(Z?=@yneHPb1ev+DXbOSjjDF4F-vTkhdFVdu; ztRD;N2Q_Xaua7efFo)pnCC`~dFFi4hp&9tk7dDowQX}8iSRO4R+oF-HF-H^mK50V~ zd!~u(qU<-DV2&1jt(WvgBzvi;+*_KUvTvKpFH?G8GkG?T?iMNDJ>9M>r_B}Vq@yx0 z<#8RL9cnd4J5ir$E{_fD6Y!m)K4J6s35QocEWI7g&Uj^h&ZM)2%mbbeY#~2QO?tA0 zT)hW+f|U$xb@R@D>jq&)!{8HQbSG1iJ=9WuN}3nVzHKRAC2_xPCAxTKYnjKLc(ApQ zXt*6EAt4^z1!mL4(Y{u z`dC|xW~AG+6J2v~J3I{!Mfhg4lMBcc)wi|1T#esc=pdI#$YQH*mJ5@Qir9x!!oB2j zins46m>qGB<)xeD9Es)oT%F{_7CV1pYuNe`59`C7LR~MS8G?9k+tgVu5yv30zb;YKX!}2w{;Wv^ScRrZ+FaH(zlW9bPst-`n2k< zG(7DnBH<9c#h=Z^3kw$nwVl~h&NQk}j?Ge01?;9#754R%m*aR|--z4fbQAk^WkyeQUe4~0|nS(7N89F6eIxr#a)i;2|yU`7+nCTRwAL4#aRlL zTl_2?0W2MXEH9f`o<{&KVi^mTao1x>81C3gb(T=rsB$UQ`LbVtxBvm-AOLz$ERl&1 zBvT^Im;FRaq~+A`3D=V&fB;pU$~wV#xr`d~o{rB2(brf)f7#Q5_pl-GR`d6;i?TDG zDvVf~uB7WRA`EvTmy~7pmoq)+oM>bTg^dbReTSfL39d;7*Ny$4dyMxPo;Wb)^ORWo$R0`C_Obm9_yY^-OazkvE5b>9_CKtx!7Z&6_j)s`%kFO zavzpo_s>8kW$)Ac`YMr*XgU{nCP=ulbltg~E?2NrW<+-um*vl?qPC?jm#MNAP{k{O z(OMVdIWZE3+a1W9IspnBWZh08EGkmk%at7mx&YMOQOe>3%Z)nAUas5I#(e# zda@my^RHL+Pz0#zCK6Qji+(xsyqUylW0=ppHiS|F%A*BkrsQ8~3vs9sP=g=%oQyfBkB3f43VHX0;n zl!hu;g9;Xjg8DS&44M#}u3Eve>aEzOf>SMGNs~hn^{pbJT3c6Bi?EV#doT@>mg*QqcA={sl>$l+#^eyIQfqRpe2)Crs0phK$N1U+SEro{KKP}fN zjSzq9GjebKV$jZLs9Mj;sUaJx4HZLB35aBELQ> zbG8ST>n3MgSI6sVk1*Uf1<+|5q#sv^;-WK9I9ZZ_oqAS&j&6Jp4wf%P#iBLwSP5UH zIQh%{xiP*chsuY-9Ur!LMtipq{ zU}cmRShypN#VKL=h@E*mB86p+bjGo)cjSiBdKsI21{jgBZ>l$hW63+{* zzYC8OT`_JK)GN9PKECv`O6JpICKCLxlI3~=69Bt=k(|d*7J;`WQ0C)X|8tp5StL)8 z=0>x^#qwThQZ51n;cIqLJ}X%w_oX$3S(6mLZ?JNSTtLfU-zCsEsHIeKgz_HELL2LaU=n%B!qF=5V{zr+&JKV``EkkbF_4H z?p>Mt);{|lzHE`UtiS>emXZdqkl!OAYOFMbkPY$!R?2#41_MOzp)&jFeXLkkeP7l? zGZ>ld^!sAPa?uBJZp!jY9q2T2AB6iLNN}D&Gi!6col#2wx)SvH9y|Raqn!%CJAmnk|tN+1~YX4GMx8 z{s|V^ptbx@EAc_M>-xDo3zO*hD$MdSN3F=Oz| zbe6n8E@fRe%FTi>FoE!8_1>H0jCLm#8Z$VX8ga$wR4}YD;jBhu4yk;j@ARRgR1v;_ zQP_{6<;C@zg!JES!lv;r8LZZ)@=57j4olxGKMwC|-}ue)WE>%CW1g*;vdA%ft6ZI~ zPi;j(T;JF#S0j(`&0FQcw9QaJ3$Zz@>u!974%mkI1O0U8Ho26#QRnSOH&U=6#Fa93 zyU~sOp!gleeBlRapNYEf_zWAFXB1YrQ@(@dg3&v%l?4WlU2>ZL|~F zuz(b+t4nstsc~Y>U*xAC|4SD;uuFcFh;-O3CKyOreexdpf%fR7ILgF0bS~Oifagp& z53!5s)q)ykBA1qD5oyZE#nx$5rCj#z9yx(3zIl&alR_`0`N^{I&#@ACHP2V@xr}o= zujai|XRnw)>g|)aNE20dZJ!Xo*?zHUd;5Ouf38nvL-)%AN%24L$0G7{hcEXFxf2gU zu;UxKCY$#q_HoXoO+Fysio=F{JrBrPd{%nqASB@Z(Q2rE>6jq+Gy+ zMtvj29Yq%ht<=XkR^+qij>(1MAqb|%faQUU*B+Bw6!2|Y^aPP(+<;ar&5Fr50aZU& z(U= zl$>A^+?AD+s8N~3kR&!vQW9-`5^8l8D=BV+NE=-a?$XMMRIf~AK@#Kxym}ZGj0@@D zUz(Y{6*LP&(&QenoF>Wy*X=u^2{@-&Edxa5PE(l98E#FyT@R6*fODF#oU23=$E2CssFmJE z+)J0!Bx}2%zEVy!0p~RHE7N5CqAGVC?$XOCqC_yomy_AisDQ4M7a*3=g}GxdCz4m0 z$hAaP8XZ6+H-L!I|G48XCz4y4$P%g>;Jj`*mFuSB7%!8)44T|enA1d=;M%=P?Fu-j znH_>=c1W7st(en9nP8fyNlw5yO?L>I?vOOO7c!@bGQl)=5>3E4O;-q-u8=gj(=w-t zGQl+8BbtD7nsDf^)c>3TG>!hpeVjQ>lnJK!8qoxt)6A+&lXbOK?tk3vnNviGV2Y!Y z*&bU!*MUK=shN%b$K9eik<7|O{*}ZAssThY0*JKK#};>+=0q|Ai8#hn#Q@|Lt5UgQ zYLx(jM(5)$)|?>91Xt}6(FB~+Ob36;rvRaOZGN5ha2tj!0%s zM?f1V2Z&`f33ndnM3O5LIZk2$&c#ZqES8!Sk|y^k=QL3!Sg?ge6L3y5F$B%TkTkgi zI;V*;!8B(OO~5(Lgb*|nLek{^>YOIZ1k>C=Gy&%{<3rGl4@r}|w{w~(6HN1RB4`56 zY2sL^N^?wHNSfRmp3_8`V4Bm3Cg7ZAYzUgM0W^*7$i3$|O_T|yd5-E1IH!q#Lcwyf zqt7K&dgbD-_M9SxAPRaCuS{b7o=-5pa>WFQWz1XL;hqyA8@M1MuOzW+fkf;9M2tSY zyBz-AoQSb=_vbWGCYa`% z)CPcanzj%$Z6Rs$=m4B1$^_H=if97PX(}OTDj{j|U;>;b$^_H=jc5YSY2sTVxUZ;k z08OL+@z?{LCdvfUe2ZuT&S_dJ(`0*wR_=d1Pywfi62TN#C$X+C2K2w^0I`hz#{(H~ zBIHUK)c+&qKn$EF$^_HANTV5WP7^D^m1tT5Xm-=zYFN?^I)!7l1aUi9lQ5MB!!2n_zsR*bmQY{NSACO~uK;7dBVkyl{51o%;}sN+aF2I9FCcFIGU4TPxh6uCn~+Kj^c(cS~NAE3FkCEU{V} zr4R8WI6s<`LPWEnv3Ut>LmMTDvJSTqnoMh}aC_3W~vMk3QN^Bql07H3q2RL7c2)NO{J3snl@B4-e)>ENq`^H z!PPnl>_pb}8PQJEuj$}uEDBNIpkBfcF6yrL5}1;Eq}~Khpu4_0SWRGEdMG&0u7i*^ z^(MXfU(}obMZNj;bkkv?HnGGwp2;1RYE*Y)RIM8(M#SY|VnD6vsI;T}D;-6 zY~PzjdI-|IEwCyHi+a7Czr9(xiAoi95?Eb2iS%?m{ZS{;l2tkjVH|*Rd~Ynbb-eYu*i7Th&z* zJKB{CGWizKmd$Pva@~1L;5c4)i|8@sI$l;cf!DN~DEBRWL;mJcJR-s)8Qv+~=OX1>%u$_Pv1vRnJRRUB5@ z8BbCiY`TRr_r2R!X%N8+TX|vQTn#FG?Ot@Q zaG?5dL`NqnWja_Wh%nP0k3qV6mkYXV#e+&7RR?H&S)=|+X86f@-F?0LE4wVx)LU8g z0m}MlT?XH;1C$Jl^nG`M{KO+l995E+Jo$*SFnTx9#Q8f@2P#V}r9Y@?SdgAaZch$z zkHaU#JvNk)bvnF1w!!+R`_QBf6y#JwPddp{v8zhA>? zuY^maFI)TjHVsl%MM^)Ytn_INI9z8wjjH~j`ZhnUthFUieDg~ZHVg(~&d5%9lGDBg za^D!HRJW9#yLJGs-rlt@9Sn0Ur(+|R4?T#Gklr1BKsf=bc#rr2`-TBf>|Hy;C^Cis zCEmq;z$a6`4D(j^p7s|BgXOcw>z4%gda9IKoRnh#NKmAefV3Z7$Nsb2K-}NnfFx;x zGp`=j+s&j)y&*6%%^0B&0!V~H2(C^bMU#l7m1|D{jlGvib-cDFWZ?c;DoBes1UcM0 zhT25e8l|UEnsod{ad_R*=oi?A5z3P^aWou>5sT}cBb9sUx=~M`9I0f;SLbab_w+I8 z%sxtKbZcdIz6kFDnPQQ^tB)Q}M`YmwfZK8zJysn6=PWV7oRj;*$&b1&N}$LNc}kuHAGgZ zp(<2Bu8I-W!;Z+VT5R?fHImo)5GS4WoS-DK-D8xdF?E8Zg=p#Q(btrZgNi}Eg}P{MS+ z%DmFbO`NAU#k^>@(G>He%}tSuroaabtnx*Vtc7rWxSbV6{=%~&sg)wVQhO~-YEJKF z)x%as+aoMem<5Kj!R)ZTenb4&ZBrC%0wbo|6h+_CB$;^oo}Z%VK23hm(^D1Q(83RT zNx{_s7XziR_rG`hv9C2v z(T!guqk9dUrs&2me$cPe6y5m65BhPsvYH4ioS|f47;KxNydb@o&pOOh*3ng&r8KX} zH$5S+VWXhmfQEns-LPk8DLtsQ_skMsV`pY5jY`o=lc;UTHHj=S6uL94JXBZ^l;CUC zUE+inb)7-*%Ls!F0fvgP1^aK@a0NLg@v{IDNqO|o-kGfw;RRO+!H#|y8BZdfpRGKs zEwMTy(P*zs+2rSZxJp6#al5R{b62W9gWJ;BqKc$DHH9o;@%4zlxfn#}<(Y`SUdVPWR(j|B zDN)XTVj=6iL}^idVKoSO(vUVtY`+}5$fQEH?%ymjxsX*~s`UMLxUfR@;lEjAN+D~z zO!@ua;WD+5J-l3bs`y{jMpJD49sh01dtqmcDnp5`< zamhz4Up2bF0?3JMuSh4eDr?1vuDMp3DE(2zw`r~N4~w+P%?j5k1@aM?h9Ydw&OCPK zI;BO_sVuJrXF0Fmt|YOw>y#R%{9pX}ipcN!aX|j4kB#y+k^g;QenuJA_D*H7eq~C# zWIx+tX*gfM94^71qam|=tke}kXo84ieE^fT>kTG$k^fd;{t@I86Xz#NJCp2#J~4_p zM6q3;1dxr|VC2V&{ChV9 z9`(3kTLbbxL_TT#>ec|VowpgqvP7{Z+X9Lm_vbrBev9n^`Oj__WIx&-K-Rv)Ad5o> zNSXmVlp5D*9vBJxJ8HJTwtN=Ar2c0HwH%Q@IWYe-ZcPjO&Y#X+fB4eGY3SGNt zIUH83_{9s?S59{KPNk)MkTC4PV6|*a_A>b1U zo@8R2Dc}nU9&dtUz9xY_0=yJ$P@!t4$oPy3nA_eZ;D-rru9;iFeIo{~&mp z364+_#CRfgOaV_4oi0^mETxPpDBxSL2mMez{}npbW&AjP$!A07yOUKMz3f_r6cr&}FzGaQ<7ggOI(g7^WIv3R(QFzQ_4z`y4*Zj#pczk$CK$cudW52M0gWjSv;9)<4T22c{0W3)pgI4$zW7UDoGOA zNj9(Elsr2ToJ5QBWP;7;7(5woGdd7Y#@W1jKjX<*n^*6SJn66*y_P3qY+k){pDCqr z4#!h{6!2`ggz1BYCsmLZV~Qtjs01Zrh0u!47@<5@wt4lD%#&7|S0C^^8ErG>1)hwu zd5!slr{SoqPcuA;_%)_k>G)mGW`pWX^^Askt;{D34^wu+WzgR(fcfV3X=|K<2 zC$Ovg6+7P{;2q@6hvTzapo8F}+UOv7%QJNlycAY+5I+vzbfiv{qDRXR`b2{h4P`DzDn=;PSFFv_`NmW`c4@vmLU9~!ta&iL7RZH|$ zjrCHZ>;!Yi@Oa<%CzL}L%QUwBUs!Jj6Z@%3OuC#>28-h~4JNeaps`xtD~s63AC$V4 zGi{Vvjoo}g8IraGL+Sd=zp%8%`krGNsgB~w=Y+w{pt9xvUqaZDv&unfjGK-6QJE^A zn~$F4rbklMb6ClLJ&v_Kr_{-tumIpx>R=Y=Sb{R321~INp{5dhoL^^g0CyH} zK_rgoBz`9nTL_#NibOJzK)Z1gxBLVWZ(qc;l0_t5{Ygl%h`=X)1K0(y@5E1v(-OUd zJfOB0GW#z|My<0%KP?pf1YJX5u+V|I2mNb^#ht*GT~Mm9XMRx<^QQa`!Xaftq%Db# z8Q`+5_yt02BH3z^5I_C`A*$&@R8mYVJ*&x{+q;gaSECXQe>IEU?*dj*M=gZd1;}Jb za&Bl#E-8EKg3?5Om-2Hd{|AUGEp#yXH>HvM`5&Ok+v(=tgogV62H{>az`nPCGqd{X zqLLUxkvqb?=lv)E{)zlHk{_{Z!o2Ta(s}tB|6wNjLXE^E2loFcPUROQCTX9IzNEB? zDf|3WJkh)d=o0Q2%D%p&@Pn&=R*fjC2CejY_gpbZ-gFHms$Z|+C^Rc}CwR5a8QPyT#a5|Slg`*G zSITX%^^(>{v*#_go26y>2u5hT*%(!)tFm&*mgLYMruv}Lq3lk{7Hte315`kR;Dg$=0wo~CzG1FF9U>K#povRA{wMDJw=rv8Gd zcPs;{zmDpiM~6<1Kykgv0dhpxGK{7+${~~~y@Ke?t3%`H(3FZc#0!yy4Rs~NGZtZs zk&Z{Q`4Ld})@b%ygsn(=JBk%V+US|%yF1dxEYg?h>{67iKsk_(X9m_o4`2r%+QzL2 zdPm#7iMxo9qnO@hyjyocTy)39G58oy`%<>848otH*ghaqU2L}2k+k_?Vdb$l{;j{lW_y$#k%wY!8MN_=1!#Pa zC)wO=+!8!6Vw^VFz8fbMVxpC)0-!QZwdr1)aO)BR?Nx0<1y4VypJw|h2y~a-_9=;x zA7dLS!eABkN6b197AK&W#n|%5)8%B0Z9H8EJ8YxLA%>q(mf#}a=L zC289Uigb{?K`|v+P;8kjC>~1|6bGl+`o?qqn5@mUIFlj@q@;=hzEn}5bDHgWs>RMU z8;>b?D$UlN9G;q|+ZqeDE5j?;j!73(eCdKpk1B%7*($b|1l#$6Y)52>0`F#s0$nmi zfs>iGHpI3lOR(*jWqXo0o8<3#0nL;ss3R1zxl$!gLH%y0pl)#q>Qh~|o0<$Cxh>2w zw>G^TVW*$3@mIbf$3xxcDd2{=+_sj|uNmw0`1*jGQ>h8-Dn@uoR8eLsVYqWPeGF2|<((HbCkGWpS3@@#cj!(5y0 zM{8uV%el6X=v??ndIelXYn1RZ#Lp`D%AJC3(9k}XB=)a7R3H3o`IY#!&$sFOCw`K< z@@@M5i66ApW8;pHqY6L>j=~EIY$J(aovH@GWcu2rXrqIw8U+2I->Mn}{h*(!34+TD zZR6rjV_yXBX;t93ia9Qv+-Jwf}W(JpMX@yMTiKEa)TJ{i==mg71j9yh$p zI94K#6}hTL(9}bnh+I`aXk_D??1viRX|oHK=#6c;($C>+{1{tZ>0C5h{)}yu^adW3 z_t`qo)q6i4Ed!g_9uET6V6z6>9weY^oFDUtpfnCX`pmY^4BWHOR+n}8&^A8^SerQ? zvMsCx>^md`aMmQ-XC_P^Xue~~?BKNFjo9XOb=Jc1b?2SFl;W{_=i`ESzih}9+g4K{ zHuNRiH$mwl=GyRWBkC^|sl7ybqc@A%)O@Uwpdh2Q+&r0_F; z1BG|`Z&0}L&^)Ir{J;63+4(;};eYwiG!%a6Z=mol{|yQ^-co-18%!x({{s|$!*3}U z{{{-b<-bYczyA#s-tE6Z;l>>P>)&7w@BSa4@Ed+;{`5Cc_^tm<3jgJApzt354GK5j zQhxj!%;7!%0~G$3Zz;wc{>R^-hu`)epzuGL!+o9y)pw=HE%V{-$d2|_QrS4TIkLC` zYLoEOGrI|g$ma*B&BDLy?q<$M;Jb5RfErtoihNjggnzQ4GsjG%Gkv15i|0K)eSetu zGx)YS&gHV(9#-qBpY(9zSSwpi%kk;Avdm}HBMb;Mf2#oBgPom};Vi zlc`O_*e+x@H)UT(hEQM#As<}E+)DRrpyU3XURX|;ANtjXaog_D-K zBFY4~Id6C1-I74gRTN7hpxM8E`g+Y?{EYf&Maw|Frev zjLmy4sOMf^69GLJ#i{2)6LqP+4lJdZ%QniY7A%h`8>g}v#h|2dQFAPzOgrS-dK+_GgrZhHnq}q-R8LE0JXQr_9QR;i_ z%t6h{Mh#V+!UDl4&St-;F0aD3&#|Z4SBwhm(?omAaTsWt<5wGdc$nIhw&0cwQ;S65 zSf?Jc_|!1<$so{x;p#U+2m{OQXstQepy6swHs&SuIU=QuP_t-jwb}@^2F3imV}#0M zFwdNz7BCHUA*7xo4Ss%MCyq4u`9Vpe41NZPG-9Vp*JQ<`1;3S}5u9kXjeRj%{Z!hL z!DhUyZlUV~uc)VR_7t`saUf&@KcmpscZ}N6BAs=!rDN3;>3Fhl%UJa>zAf8$oT__R z(rJ}^1NiB2>SICye$a(+>X9JOH{;diRHN5kQ%kA3aT8REuk1s0=USwt`K;AMb%h8~ zY8=rB_ZuFf)HX?N9EI&oyDN(Au2wIRhbpn+v{^S!qDF{Q8{#&T;4m!s=Op!!ZhW&B znh=|`m2c1}BCGOEWn=+ijVG&nrSk~U$kg-Ful$clPgT>&d_sOh&8KVa zH&hUXR|1kMYHI<*N7=>fkq8$@+S?-%^Big}DaY@*4 z_xlp!&hRB<&%X(UQNNj{>NW%g&Z?pX+D%gj33dBHpN0e#v%%9<8&MfKU9CyiRnrY> zWL3)B^TKq5so`O44Uq4-8EPMk=+OquU6m|Hht5#zu*_NNuS6?xw)#(LgUlw(R+}Qs zgfo%3=BnJB=*(<2j~YF34jxZ%@SQRT-5b?DHb>=QFS6#UsdgAzO24G}j?P!@5(!I2 zA28UVjs43DQ3hA%B9+?!EM26M4S=uiVuYWk&d_6t+PoUnRK&48YVJQ}fUG4ePNRUO7g?>~5CC_QVc?>hvAB})JcQXs80-bmQS#Z7%hjEZiw4nefmsCx+S_!>2r@N8?<3l_3P3is}d?2pN~F;{EsI&>wdwZS^|4Z7}M zr*gZjejC(|zSSS2zmd&QxOY_~w;77kjmS_ef&I1~Qy|KuexlB&>xNI%Y1AYryTu}H zwve*gvd1>54RnpUaioq2>rLkdmq!YtW)1UAthf9M42|&g`hAm{X&KK_K2;yEe8h%+ zs;1>}TRJa%_V#56m8rtYfirpf!bK@Dc#IpIBx|Mf`0m}Iwz16iE!v@$SrU(bu+<+##p=~lY{*WvgR}+4 zsXNt&N#aJkj9JMq%d@+TS;-H&woBFRmi(aKck_1y->N<8T^4D)0*?G)g@ry^X&N} zU}hZSyjZ|-?~zt6Xw6Q2p}v&AN&s=Hm`5rT$jOAfQNVHUk#+!i@|Wt#gthZGg?abk z2fQH#8t1UaCLB<|ESOf^UDHe1j)f{RFX9l%>du_9YcjB=6pv6sk)4cGyaoX^bOtYFs21dAx z0G!7Yd+aN*v^q{jv5&t}J4+W+e2%Zx7z;*}^BdKr?EQ8Nj!pOC z!fyITb;jt1gX&7cGvy*W7{|n;@Ujv{23r7mC4|XwA;NVGg2;_Z)ap`9 zopp&?hv?|b!+BU07L%bhGD7G~BiQolVg3+0i~RsSgw9$&Ko6m_*dHKA51}*74?u0a z=7>2*D3DEhKp-0(p;QEPLH)IW5`m#&g6Re4ssUxgaDcg)`=15LDdi!1LSQ)mibNpK zN)!S_#CZmZ7*k_NLBvpMZv6W;XChQq@($4?P(Mt4fq8_|cz~q4v>qY`Qsq!XY?Mo@ z=Qu4e!)(I}rL5Al=b2+pope_Ie%_tdEf{F%1yy{V+*&$!xPB;GGdo;Q&qiD>xPX40 zt+h5e(-!6k@WVL);57gX&uEzq%0aJ6$knQwigm~}@)eOkH!%O8Ki?+uYv%=&e<05& zuZsNjf%(7r^EHv*B|o72hZ zR!7toUuIO-E7!xVVZx0SxMK>gL$|sKH%{QDR}H8`*Q$n$@gjd=V17CBsl{B?0-9!E zH34282)?R=n-vCNk1Z6~I|IR0sta(R>H*k`02Zo96(U8{2oSkp4I@8ILWWV1R=>dz9mch!IA z0uciDOf4;`bS{JM5chI*s+r_`gD-t@_NefD*5Npoh~P_R0iQb#>u{`e5&TnvbMIFj zZg@l!Je#~+b-3=Za)sdW+{0PV&|RX(&qjvZR6zHId5_@Sp;*V)J)$=foI4KdaNQ$% zFTuIrunyNfZH^P1yYCX5Je+mMoS%aW=q}O2=AZ!gaMlUw9?|0oZf2}|M9(C+SrfX) z&yDps$hLfu_=v*VXxoLDy=_zvo=dRm29o(em-@07>S`;Snmw8ED&niuRmH=Fg5HMNqg^f+B0jnBW{MY=#~fD_ z_GmqgyDn$xpk+LcLGUi#{y5nfmt6iJPGGvePr<@9GLY1 z$dhnj)(0w2!h!ja7|%Qj2WEZPpQ+jr%7h2AK0WYkI57MDl99_Dn2kp`wPic<`$Cf; z4llCtdaKVxa7XM?q9sW1VJ};gS4Bb#?>SQ~8DE<8ddVBz)WUdO4QOGuzC_EG_Bz=2 zC0Z-#7Y8e>ueFdiIM}0fJ?UU8>3YP$F4Fa!gEek|Yq^6Bq3ib!wvn#?axiN{Tz_}4 zj&vOv%f{37nuG15>mCP7X@u)V2kTAOpB-!#UB7g&<8&Ps%RG&7J?mft=z842meciw zgPo`Aj}BJ939jEc*mHEf>R@Gbz2IOGO>w>CVD0F-!@H3>v zatmC(aIjW%J>+1c==!aL?V#%}2XnN<^(zPKPS;HiHifRc9qb5QPdk{i6|Tn|>|VOQ z7|Z6<^%Dm>P1hl@tf)1vpF7wSblvY@tLXZfgI%WUHV13o2G@-aHoT42S$Z{>?Qf&i zi$BC8fHg*=TksMIw~fv5zKph7H;Xhsk3H5-%eK^FliO*ZD5t~vrODtWaz(z~}1D9H!i)6{P(>bR#~F9;K-T{-|ML-bjkfhA$ng zjNGK9%B!Z7A?a8X&j#M4bTewkOEB^{6xBlk5px_FOfS59eubBvC%xQEUHa zl*>OgQ9d62^R*4EOIJq{xn=ad5?6yg*-5)80c#mz`IG{Zdo5mC6=eH5X*W0f?3Z?p z!aS%@SV7pPU)q&~ImP`)bPpvG{C&C?hm(dap?jK80e|b4cC2q_ZE*M%Fui( zH<%6VqD9FkpkZ$m)!~IMT0D$4Qy3yG0u+`-T7_J6?9OcHOj_ z<<|*8alD6Zfo@s{c{(L+juTnzCnRI%Q__K4r&Lv1E4iF(W_K-zJ=$H%lvf#fjCDuJ zEtHIeAR;R`oWmq$*#{!eItjeG$vS-YA#d`wNwe;pI*dMH$*;uiPfeeR!MJER~lN zV>~6O9sQ}^e}#U+jQ+=8 zqF*C)u1Hk%g+AIHd@=UAdM~Fg!2A8RK3d1vN^RupeW#WqNm~opi+!~z(y1!GD*d#U z{5!kf-C9pQ{8og^N!=yPl_gfBvP@CB4&JR9QMy!@i$9n{q1}CtA1%Sz(a zsf}7FX7!wqj$nA)rClH1GF^LD#Drj@LU^}%WB<^ue@VNv5ZDxso4GZYrWd@ z*l_%qm*tq1+hV*x%#{+SQ=wKQu@;Hh2sw4|c8779BqAhyLgXl%4wE0ya_#<4f0W3w zG1tACi}iUxi<7RUut7kOFO#H*W?Plbd_e0(-`#&aprxCH&3q8DzcxaD$7S9JQOHk~ z4SZ0mPqY>gcs^lKtRD8|gIcdVUKM`eRB%-gGN^(?kN#RM6UFiUp&W>@ufJvvE|>d| z06+Lp0Qf^4d^HfA~SKC2`xhC=$Fk@c^rpQw>}{HQFf&I7K05T73oGW;t|hwC52BdL-3SDFsj zKZqH@`G>C#*FT8gB6yr54WHiPoSmI`MMPk@(S8grvtB zQt_Rn4>w(0?>g#-{3A1qzI;ZJa??dC;>+g@<%(n}BI0}ZQkn;<$x`v@qt}VIIX-=K zT0DtQpRY*){G%#M#i!3sO7h@US=hYw>gwUh`0~-!$dmZ;(Y4K!5wPBRX={$ZaJbE@ zHy+Q1;gjCR7)&oeu63o2hOZtM$C_B4&?@3Lb$UXxQ|6sIkUb%g*68W;dOGDvQK;*a zn!6(2)1XCACqAa8KdB{GH6F>8b&j`I(J)4Qr>~#X_z4pKqesYS&uIU9gbbaB^B;GF z42(6@blMG@to-lsD;R8a{7O1>;($)D(%=qroRhJe_rHgr{C_Vsop@8i z6O!$nqq(H-HFjZ+HcFa<1)RCs8}!**Wggyb0DpR(R#1E8*k0an`m)C<>|+n&6TUgD zZlb(pVf~Ax2fQl*!qP&N_aq)YqlUuBVPZD>e4gfxs~iu7MZKlv)gWV$1jATF7=nzy z*uEtE0dYTt?jIHRh=#&$e@pXNhOuF9Y3-%8ZnpC+tz-O0IJKJ&_jZ;brU_6X7pwj@ z5I&7$&%BM3WN=;ZwwCW$Jhm5oy-Ce!7kv5HUab6Wt*J1Sc@33SgY3eJC&-6p#J}Mo6&2LU+8e04*)K(PcXO`6^LD;)ljBYZyAO^ z2Ta%6FTwK@*CDs$^xRVIU&4ya0P&FdZ0J(08k@6B;~{3MEyq6gw0K{?<=P30 z<$c!vJ*{mN=O(e)<8h9|qW82+!OI`+|BLsu7lJ_jR%qV~5FHH2CF;IXTMO$FU)=jz zT?;=>2%Gk-=>2AiUi$EhBGVckwGh%7rY!ydFTsZbfT|hCH}?arwuS5{=`azPag&vd z?^~a?!jcMLk~d+1JBkCb+=QhvyaO(*?pwB6+ZiF9vHD8aX+tFGC&g!3ueFPmcIC61 zKGgu6#vtpaIZiI0f7<5hBqUF)G#TL9a z{g~mKv<1DMtZLS5)pX0jI43r8$c*Rrt(tD@=LeN;({!sEKj_)*8n?WyzXR{)Fj>8Q zhlX=5;@O!U+8Db2^D``iz$|XzXJ|s0_tn{{O(KTdc2+RddxdqErW+o`86D-7UD`3x zD+~}>uWD@kF0F_y+pWDoZB}y+_QLv(73Z>G#)DxypYg=#s5~=an<5PBaomtC#XmPy zL~6pZ0+h`oH95pR%}u*M*G7}%ckDGJk2l1ey4O&ZAC$GvP?aB)x?lUK8ce2mc&71K zn~#KrJ$}ZE@Jtw!BJdF`V(>ZvomsvBN9b(K7utT(_di#eo)3?(V9mNqu+pIts|PdbQN|T zqPz#7Sr}lp(KLQg1v-G}|t&8_eefm5{l=P>7at(-=Dgew|Vq476qkG()0CQjvs zP#d6a$zGQ|^{e*M4IvJ?aD#{ge!D@$`!C)g;@!XBAYz|CZV>UdOE-wv?eYyGcDizd zi0!Z5AY!X)H-o+o;$cPzzWtq8MS|xNSnC@rhOcqo%BM?Uy89TW~Jx4Js zgvI38`FW|g=h*rAu)}ifeMshGIrh?uDn}Vrek@m1d1|hxa#0?yvTsA4UE!x|?aH^; z25Voq$3Bn0$1EtYHxS~6W1{EpF+UdAUkn1hP}Tl(5a{`8LMzP+?LP@u6A&;SNOZ$m zS4USwHP=<=JlW6H?Y$^{a}81bVKwaUNXP7~u%_Kh*YQp5N$jPX_S-3Ow5FXq?NlqW zHxZmwv@e(M$s)V{f@**!*9rlt&o4>vwn#9)Bv*)m-_3T!v*s6N=yQH-0G1RQoo->x>t+FT!NWRJ9vWHTDuZ-;9H8B~CYP(;uTOKM{0$2K=^0%jOX z1Dn|SDauQl*quv$-+@VKiZTiW@- zJS$q-k5NTgD?_7r4HFtY+{)eWlL|e*JP(U*xw7nUvQIsDdhI` z>S#}wq{%9Ks+0XU>E|@xz|Qt{61}$8yagi(*L!ZUUn8yG+s*!e*n1Q3D2lCrIMXxP zlkV!yzLA*;kOaaG0R@#&kbP5eMZg_{3MeXi(F6rWc4R386c7|tWD#^gwy+08hzJOR zEDDOU1x3UQ;`cjM-JMA?puX?D|L6Js-xqkMt4^IdRduSmx|XwCzIIxjW@Nq|W6&iQ znkY8@rurt+t{t4);)8GL?sb*b`OnE(FU z@$~*g_LHGLrm&w@GLu(3jj3XPGp9=}`t%<%-j_8zrm!s#%) zUNG>AUlOcuLOB4s)?O~sY?~!6K?~)Fm-yWLYHcDPgUqr-PKFIlTdLWW1+6@B~g#|QpZr1fxXpN zsM9a?R_iLX*~xUf@$o|KaF(>piBEriQ)jW0w7J4_oy87MzT4yW(&w%F1L|8u;nxRL zp|mslLG@ZP<(vX7OMpus1atBH`9XCeJ%>M}j-t0B@nO7~Gj#sm!|GVAOmK;0_PZ7^ zY@FIWqV~-`9t)vr?CJV?;mpn*(IL$Tffk448atBhu8tpQ=kl?Ss0sY^BWiTYaopF4 z%~%AokX946laP;@lFf}i>TNq>ktA0702CVNAd3E%az#CWvz%Bvc9s8@z(?tS`CItYAMUkQKBz8HR&+f0b zRz6etPyN*=mCND&o&(f-9EHbXJ=XzegR{U(xDYsF09}t@DL}4r&K@1KC_4r3v)IQWoQXx26~>m) z4!6dsoCUubgUSlGp^m0KAo8}wVVN2BKlZfxu+nLI9ryKk1>85#PfPmo(a(+aa})iv zqMsD{$)uk+`e{u+H`7lW`e{o)?eOEz9HjPg(eza`SiRlx8~#6TFV2uPI{vwyyP1JGYmw7Nw4+K7gS+wyxNOuR!ksm-swd($%05y{eeSg zzLQ>5h41wHPGQV{^`aVk6MdFKJWzjjM?U2XX^R5F-KY=gwd54|0?8sFHF!m{3nlfA zg_8Png=$(f5st!%MvOa>A32l|&zBUcH`Or-lJk=aJZS1{R-wdZf&*Da_!OerU5eBM z4-t$6!N@d=Bgx(<;z%r+5g?8XD^mMbEg@ENId};fLu3j1Fg1Z*%icpIQwxWv9W54$ z%JPLTs|glF)~@trnU}q+rc>U!FU!S5pO@4w7Une~a><5$dyl)%+{4&i~>_b(A9x6N^~D zIQD;!Zy2lIqR@wR!g$qmBB8snh@hS0?(wR5Y;S{lysny#h-^@&3F?v*e7K#aBO)iQ zltSpo$%e)GQzoiMlmu}Mfh=-qX9oC8jxEz+u7>g2Ts`AFwz`C8Oi`=pXI7*78l7v0 zdvqUFyyF!0TIcs0O89G(erf~KqbWTM4HoS|dY!MS)e&G1+$V&D_d9|%m<_~5B(3(-9*rmEif4l|8p`!na_RMnHLEw9nNrSqFFc6)#zBj=ilB4)EF8{2M!Nso$Sl?8@Qv|q{_$*eWm?h94Om%V#p}ip4)MZt4VkZLm&Wk%9W_UN z7*fN(%u!o8s=q>rq{2&w?;+k$Uk27%83GaJZxHG0j^-`bx;=dGyJ`zu)h&Nl{XS+k za=}*?giT*d<{!*eFGg>L!%%SnvNe}4o~J$^vw0d&VhQD|2;THP^}#%Wg6lUHfJ??2 zB*&e;bwtz>>)iaFdfQ*-*hM)~Ofl0o@BfV)rzl5;nPc>7N+V!ZXEz5WY})f0~9r)r?_LJ2$q3c!0qr1b;pTYAZ^UX5x? z)mqn$9YUkN$SJspc`QIL!Bj3Na@xuT*dUW~LAk2Ju%+rD=hPt^cyYc%r~njxtiGH! z7c|`wG`3@CY{&SLu+&bHFTvqY)Ykm|Pt*tg3ajgNi(V1ai3=@slxs_vwVLM=wJM{D zW05PMT0S_mq1oYazuMOE7XQSrx*c!%zw)bhJJMED#bN_0rlMl1tXRk8>fNdT9$n6j zipBEcG}8q_h|| zHq(D_wHo6{mGijh4r+LyuFCnf>h1jC3`3`e_gYszkE7p+jfHE~c6`S=H8LAwU_wLX z9QCT4*#jsNK^e1vm&O@lW*215nZ2Csy{X&8@D3nC05AirM76}1(#!F08Ni28`QR`TXN-SkQ}HW>YuPt9VE;WiQ&q& zuoLu zn_Z`YpotwPt$4i7E{G)ZSvJ49CkfIhA+cqP7%59U;EMy#5wdT38D4l_Gg;Dqo9aA@>>L zo2T#wThwHe@JviX(^Gk!t&(uRtu|pCXs~IpD~1#^=U%7CNmaYJRc%JkCZDMdMXHnS zHh90!a2yG!``5ZDamA66DL6v%xdvi(M8dAmWHv(J+1pgzss&uO?>Bg>ZRPp-WF!-@ z_qGM(xnu&h&&z>v#R*kQdO84smwYZs?GFUj-LC2hlJCd$0yZfX-8bAQV53v{ZQBFt z@hBq{`r-TKj4-XgV-M+B%AFhyIiuA7xz6$A7=|8_vt7XeZ7Nc$B zsgZ{fc#{Gb)B?88Kwyei!1jRsI|G_Md8f(#o#mY7mrS7cWjQcznHGfo0SLV0OOyRy zs_%rqofhyKP2Gj#6jXD~E~Lx~OnGs)OqspAyd-{pwSFO|T z00f@%mEHSAaRqE9@ncFv0UMLbJAWm4H|{ID*UDnyrO@D?eigu=n7y*x%)RB6X;vIt zrCc03`4*vw8C1k^1jdQ7;tSX)(FrJYb}D~=uPpTBUc1m@plnLziTl)>oX5xC#e3{i zZ*(3-VAej|TpSp?4|XNV@XgV&`}om)YEAda@ppBK4ReP;p%0T1vUo#UQ@js0KE7>Z z_VHR@t6w-NaQSQXBSC7(ezlEB3PxxIsqh18o=D3-pw>$VP2rx8D4rXCmq#o^C_)t( zazIV4g#dC68sL*PQas^uiXAk-t4J6mQY7j12h@f&L4{7M^A(ULiNFxEvc4C|c~|2R5g(s}ejHB0cL!9jJi2wXgdi`z7lCkp+ zs1jt{9B8WZnStJLQg?@psXP41eBu?r7aZk03X?nn$YxTQ$)wwls1GzEwxe&m#G=L2 z_%a#qfR7AqzfW&wz_z_q1c0@T0)qAEND&6}QI)a)_)!r)Dc~0Za88Qwxk8apG>!;Kq;n$Sl7J5v z@N*)3Nx+AWqXNbWxWpMM!lMLyiU>=bQ6fB1z-I>FOcdei0zPkCAr&l5RID@AyvfR_Y>H;C|tar+9^eMAbdcC4+!{i5k4xyWdZP`B79Q7F9hJ6M7R)siA6#Y4IiIGIwz1W3HWdUmpGRM zeCT-51p+Q{hKleg0iPnm5@(bMPZaQ(0XP#ycsjugm3aY3(?xiW$grp!Ntq+U^96ia z0M2|7UMk?l0XR!Vc%^`s1mLU`;SB;_D#G_jqzxjnO(g6MK-wn4y9E4j0M0H7& zpy?;XH>kjii3V>Mcqp+CU}o8VOigs+eda$LQ!|`HU%!iof3Mcf5U(7)Z*Ck$h<6Q< zNV;R8xAKV0wWcc+3n}d5hf`d&t6{{XxB*VX}(|ob32FKd8xhG__$RVNY!# zLO54~zyk42@IcU5%)p-G>f;(Je=|hG#WxDGF@N*8T1|O5p07Ht`lt|c5iRE>(B|ro zW+AZQW*6f0C^UZx5R~p^A+*k_@eRjsRE!TDbGer!O8)`$@f~i6CQkEIxJ?IiLc$uQ@}LKU*mGgSW^^ zUGdsaYDNe2FdQEerZpDid`?BcNE`4#0|E&6PPou2iHL$_{ZStik*aw1CpEhca$q8N zb`l>L1p3k_yIO6Y7nQVf?!jYU4JmqC7Cz zN8)R!EX1?uevIzxV(j}damj{+Xw(*ul%`IS;!3vDvDv|fvFFJO_j$>c?(=4ylvgIj zC)KRHz>7do#L??j2y3V0{afQx_U)eV*f|XFe@1DSNeMT3)wusvH8zKq$+#Wt>w(e% z-Oj{F+kKj8xUbS3U+>duo^{_LZyw8jR^u&*WW%!4k_}OkU@|F1;M|dHv(s+q;%Ui- z)HCY+R>mulns-LtI+gw^Z=Ft@k$I!a)FywGx5ZhRx6fI5Sp3Rac^S0-f01|o*}pC~ z_Gek{H9yO8@Az4k`@+xaBY#zA_DhBPtYmpprdu~R~t5{L@SowcDxH$A!l*n zzTafe%|9=>uoL7ea)JGZZF}IgF~3sYw|=Xf_du1rjti25bVh;EY;w@PYixBvR-@p8 z`fy&QR$aY8f3s_P{;tk;T#MNTmwJ(INBN~5M4xCC>l{cnA+4SYa>LjBqB>LgJ>CD! zMKxB~95{JNz00;afb&}%6ME8U%5-?r0yN4W{zL6&qQ!V%w1ebWf}ou*M~n9et57T$ z+AEiBYUvQx0JY>`Xo-K?Xw^M#LURX0d$$}d&*LGqoFHhE@-?dkjXlB~Lj7P^n{2EW z9$^ikSr9CKyF=@5vZIv;MnH3vmch_|C`aokts}GzhBipCsomxgR<*hYLyL6UXgxgH zROp?-(59B7J?Md*(j29CFtpk(?fN9!WI(<$2d9s)5Uc<3&1OI5!4*u7(kB?{TSK+$1I!Oh4b_DCfrFviU^DkXPc6#bKUnU6h1ty< z?5Ry?gMy*OgloAOCywJnR2Upci%F(q)Oo_-KoL&%pzwc7xOP+IiZRe97uFaWL>mcu zRjdu+TI<5uKY&mu8Bt4v`lg+{sRS2R=?G2+`b>Lxizy*7pa9bz-e!UeyLTob(;nX83WPw14DMkW^&7#H z1L&9r{l-#%1kxu13DuF|9ZHA_$Y5GvSV-^~!1?=;+P`B04I=O%^SsH?=N&A@?Zi1;++^cLmeb%E9_+qr^%952r(%%PB22G5d`jz)=~-qhMhUHB$x|GgW(CQ zLLv%_2xi4a6qe)6_K7Gg$C+#pQCN;Mxh0~o9A`3BL}5O`WWI>Pe8TWT;*~+>6w=6i zg4vfM3iAnOmy0OOCzvBcL}5O`96=%q^9kla6H%B?Fvp{a!hC``Y(*626U@Pz2TsaDeny|j01aPbgY&_#OB3n)fydcOpAWfrK7b!iT5r0cQI`&955SB z8=CTe=ujza@_Ve-JabhT$)t-*<{}3fN=IHA4MM98)NfU_oP=<3rv{-%5~6GBM3o@+ z$H%E!V*2kBijkQH2^QXzHJv0A@%dp(>+o4|T0&!5*NUvnUz2W?kvN=`N@NvrS+cZ_ z7pv|IAc{p%BwN_n8_5?YXsOEFT6|oRmdtO^w5Z35vgKSe)Ir*`Q4Dc+1f4I23t4Rp zOWL_%6($iP2?6maGcGb9jx5-Knpp@zsL)FmU>||a#HfqK+-+z{;qTq>_DtpvWv|YH8HLD--{hUC^*X7eFvrb^&z@)c`XIx&UWrq6;D*+`q6f|1d#I zH#@-lh-762*191O2sWAmfsi&v%cD(RN1ME_kOApJhS17F8G^7qUHMOQoZ4%@6(vDA z{${+^FnSw=yFB^!urB1us))k^>ixo4_S|PYUU8!9*iMg z@s>bGH=oaq*BU72Gyhv0ftRfE!ANz%E%wz1DB|s3=GC_Q8npQ&?F|??{;=D;eSctQ9Et4wQ zAYIF8ga+bBE?5JdW&@q#yBF#k0?xw*7rwEh(zWVgb8FG}U4AXMr)yCiF%EF3N1sC2 zDMcPM6Kskxsl=EQbVaIk(*>?tA3@Qxj6Q(XGqkKiYQA70K5oE-rhwokX`X=-Ld^#d znJAVMV6{wy`ViZY;)A3t(C~G+SQC^`n=7JMu4Wjjok(B(FwuGko1BG#i20heCRyXm_-qnakf{#RGi>Ip#sIr#s`;=flzrvW21QyY;5rFV2Oq<87+H5^Ow*Of5GXh-7;bh*)O9IEV)xw#d537hklwHUyroa6%rk<%>4FLzb4$ zJGnKc3{B^~+*+1Y`yy;1Bs|uwbyY^|{0NfrE=Q5{E!K%k&D9%%%dFKKouxvY#9qMH z_h=~{!3G*ENPzOIZ%FB8h>n3Ttbomr_qxC|kwC0-(@%9a#}Mm69Gm#U=*7XnphMD7 zb~%bq@@O7-n~F*2+iT(FIgrDD@@PJ)ov$|D9bk0xYDut_BdY@C7jrK$zJ``WEPTI) z)`V~NYC7>z>XQ;5$&O1%y^tB3+B6R#-#p;yH1P4Fw=y52uFA)oiG>rgs<3c<))iP7 zO7DPVVW=G0l~~xjmX<>LNfrZ%Me+2L3_kJkwX{TP^oP|o54Enex>lcK$7GC>5fkxXS-rN-=X}R<};>Iu?s)TqjuZvVQH8wuWKjRuL-x0BYIgSIrT3*7xxfZnE$>v&fEhD^?pe4(B zqvo2Y0!lI;*c@{t@J2P)@)F+3CJoQ|3T!sP%NcAc`3{5B=alONk@x|z^Ubx|lp(8y z)-2)_K^^QZ{y+98d@T9VicBKZ?Vk=b+|!0X-#eB zS6Lyion3Fx8u7s`wU>#M!>0{X)@1vK`!tw0!+gHxM$Ie4?eKlu9hnp-KLq$_;6wsT zC+cU|rPtDGh%qZoL}BpS0VfF_k!lDo=*GHv*PAfUUI^tyH);7XrF(DmxUmLs?%jJM zUw4z%`ueLIR;q3rR>Ft6sk1HaGCWP4T`|r;gUl(lZlx`Bgz;ZnX^WKeQU1BDwbKq| zgw98_#kXKv8;lVd`4&izx5HWo(zm19Y1#S5Hy6_?V5U6eP<&e~GxF);_y-5<zNy zuZ&}piFuen|39~icsDsv!I{%RlS}V%b1t*rY-a*~) zCSM5kf6!42cPOuV`O;1}RtJ(*iy+ASzRud|!XO+kchv~TW^^eo&05t0_r2Adl8GzH zadaOU+7sMI4>olUl410OH&>jQDehWu*62`Lx}7+~E%*9p_LnEu*HIGpR7W%1AbzJW z#2whppwl~`G<3N+USz*h!(&iI7bYv%Q%~)xy#OWsDP6T@&CL}{jxy0)+8G9FeNG~q2k2GFms*5=XOv}(k?+Vlk74&Ag=O$=~|QNX31*gFmEhBd($ zH$Tu#8&3W8@GaUclv1 zG~iy|H|4u^(nOzc9zrnPf0zIxYy0QkszoZ!aU<^HOS)?foO4F(^Z(FYI~MAkIpQw= zj(fC;&eVCMAgzdfD%}J^^aP=|XJSROXw*LbLNBecbKa=C{7ZXj zU(rlYy`;7yCZXS7(fZ4;qYZlIRqg9apnHddwNSNk(R^5+oa?%L^&uXsd$LeE)|rb! z@oKqXkHJAZSoV#RH-1gKgO7eqyNxRF9i9%=-)w{y?Z8>RJK6*DB-m+%cr)moM976# zj3z3v3!t3<=%%^T`}!QDlkB2xl$$mX5e4iO9AMT7=|M{{+EQi0aHTf`#yB#4N;~WT zk@lGCQk)J2TaZ|fQ0tN`icljQO0p|iNlxZZP0+kOP!rXzNm}dJ1X&X}1VT+lWLAoZxkG3?c`F}tFT80Ru14_cw-a!qQli) zeD*6^LYU!(?Q_uuUjFAuEv6EOlSgU&<;-vOgST4i*l0dvv{sLA8Ku2j34ict?fq1% zNAARA?t{#`#i2DxyyX~e4|RF+SnIoE(dD;~)l36_Ht4`u?Nrs$WB8G=`0l9VwIM`m z{CMp#WllE#bG$Zzo)cf!+TMZ#6i|_$?|&2k^{DgIuLBF=7-Gl5<4V-~18ndMBlqn&~eWXn7Q$NlP^pw7fuj#Mub_ruf`2vIk9x82;rm|xeoW!2IP;4MJ;PkEz!wj zgD*ljk8uDS^<_xLyoEC_MDR>Df&A6}+9{Ome`bI-$dO*5O=`t9`O&6Z9KFR-*yVG> zF)Y@^E?;#kupz_>nkzh!sSAGRo8u9MSwV&wC zFrC?~S*QJHo!Kn=R2vdg!HG@l6X7P2-hXn*@;v zHE}HYe75!?AGZ=;)A7~#yp>v?>SlhD55;w);?|qeU8p|SLt8Cu$nr52^2V#Q+&X(L z^+zG+ha-bncTAlSAwVvx7sFnMgiW20lZq#n=dISRzPV*RmV}t%K3%VwhRPzv4Gs3O zm)C2ip)wmZYJ+APDziajHfo!Qz_!n|bY2u6?c&dD(y|CLZIfo2PKdEcezQq?UVd0D z5Q#g&TyBY0n@`-VEtQ{jE0K3E(LNzkv0JpcWZvkLE!t>9nm1A*a@m#48^wl3^Km1a zWKX_UiQ&VyVj4dl%a?4$rVY>UwrU-SK>g3G=HZq_F7*a}rVWvGu|PC-7?1p1tIL~g z)7HtlSc%;Ax!uqkM4h%*A=z!a#W6eAq3ssOY|xP%lF)mlT5dGfj5_VvYJX>-vyb;-fRiW>-D;BQIuuSA# z_G&4aw2;Aq1Scu9G8D=9eEhrsbm|hFmb?EJ9dXoe(eba^t=-^IW=HYMd$gaGucP?S zUukU;tJWsbs)pFrdQb)4e=klZkn_M^t&OrHir3huHKyl1`?PKis#2&<>s@j2iY3}2 z2gZ`U*7Xv(Z}w?jaxu-*?hXqQoL0chnOH`{D7h1}W>XHb}l0 zHfY{q?PMj;tRvcTBGBVoZJIJYoB#f;_7Ocl{7&mA54n(AjzSsWu}3k&|BU97k7A32 z=gFgZf&U%F(~oJ-QJf#sI@9xqV-lY9z1EQmb$PJn63piPzt?IhZ-36Ge-9L(Zu?%l zou1Wy&~_-FF#hWg+OssJn&?j-$K40e-#Cux3TUg3<7jM(#>zVb)y8OJC5 z%yBJ~-|~}otredClXfqxmirtY+*JzBz+eG3Scsun+V8} z=Xi-XJE`@{5V=E58y{W+tA6G&=nT~$3L8#hA%vXTDIB55+GX;=r?mFL$hJPM4JY`H z(~?PCdC3{Ak%c1d+j!$eRp47E)E!S%NiNfR z5cOxuux-Zkk20L@$SPIi51rL+wgy)`R+s#fvs#WtP+Gk7CW2tN2M&}%-HAl-;#o}6 zJG1>Yf7TohVHr!@Y<+6*hQA;MBk|r}v^vVxFkWwHVzy%e?|*$pW95@rp6Xyjl;P3* zO$U31o(T$jMZ^`hn4b5w^Ct3#ooqQpJTCSoJ&Vm}uTUAk9LhEU?w|a-#vSmoQ1>D( zxlq=#5o|T#pFOXo@@|o^vyI5O-w-J?BlRvIGB!%4#79dq^Dk?29o4snk-V9X{&d}cOop={j8vHYiBu&+dskDt>-3G6Ik_e_-7ml7rRjHC+K+n^^dvB&cD$?TM} zFy8-B3hNz86Hx%S0=leAGt!JMSK+hKC4QN@~X=ceyz^lppwSb2v!1K?i9ESBUI>sn zT$|ltjDQgc9G{AB7=GD^G~O@XdqTccq;*2-~uaPyP;4ffZGX3s&458Yk6b)gVuU4)jI6&*ZQ6+wZ`F!&#oY9Eh@L2P{lW<1?GET#8ify-P$sv=SfOd~`m`HYr1{)x}1{gZnDK zZw~fB0Yo84(^OWyD&>ij{~3q9RX9vXNEJBDOPjIelq+^PcU;4&2XE$7s*LOJH8Uni zGmEahQZwHo%F0zKLl8zXkT+P6CdQ-HDPjC_bJl>W9IWdX*_FO(*Jtv^*U5Ly9ybv< z7Du6YCr4fvFlcs~c%pcAJxeXzU)$rPGg7F3n6Gx6+ zyRro9$Wi7V(3Q30Uv* (nF)kq9__6J0$9{9kXD>7ZUbPO$#Xkvm1!jw?yl0Va_`~?@2*nya$n=u+*5^j$6iO($BdZv(YmkQ>l?>h>WmZ*1kuT#ByiS?;sIQqx~m(u-XnBMEYkv!IBgj!EU)WT-%?$ zK~eLj>EsaBHSnfs)c}@D$>vSdnE|YMg`1{T!&q+MO;g!0R^W`stxgEtG=;<@i3!%l zE=2MtUSny5YThF8A$?c}L)=NhAVN9~X)M-YYrX6>e0cC2`y3lbPtWu0HCph_f1WiI z3*YD2v>QODzGwhlM&bI24ryMedDYaQFMG7+*%(w4 zS4|-?I1msd=!S&>tjHY^7H4N;{Kb8lLaTRwrx(~jhk~Yb9LrK#{}1ntDqa`)J%w0x z{h#lTfB)apA85+|`}^bK|2_SIrci%${*SyLSfJq(76PYgEta!k;%q#ecY3X!u(12> za%?RpXY-DqvSo2Y+j^4d$QLH2`g+Z~holwk9-1-+u3(MjGAc>P;o~^s;}y&lN3cQ7 zSF-OaVbxy6J|qJB*Rqy8bv5fkzF(?gtA*;)HGteQsd9kNDy|#PuV0T@6i0jyuV>fL zbJlt$c(!UiyN;H?m)5iP#Jjc|SUVC(HqQ{D%|N~^A!5GxG{pAdLW9B!PPgGpH?TTn z)ezPbllT*f(aDoHGGTze+D1wFP-0jM{>(;}7!t7LLnps5sEegNtgt|G0hKwK$1}IFuFA`G z_<(I}f^s2-hked&qs#XmpR;S4U3j&a@TW-mLYF09=z=VV5D(}t6Kw%Qmyk%qV*T^a zS$=n+OQ5tYm&>alOc$&bActLy5YU6nn}`Sry_sf&geC9X&W1w{^2m1fK8Z#4E@hc~ z{tot$8QGb60e4Da?r6LL(IosY{Gh;diY4Lb@Ad_b6bQS=muxR}SpF{7Rvt*j3%3Gm<}x#j3K3RQM2|nUn>A=j zH#y`i5?d6qv<~4oQ7!RW_=dd-1E_JnWki}}s8CPHSJL*joXXMNtZ^go5PM9Q&)gxo zdGr5Gv6v(b)BlvTaJcd}|x)xKiMR#7C3D2uAeAN`6kV(q`aVhiaV$=l0J zA4;)!p~URdZ!a@_C|Mw{M$%nn`&d1mw~v`Vl&nO4Vjm+PN_^VaEQP$Qe)2VI)Fs&4 z0ht|`!wM^x08O-B61;F2Uh_U~)zn#Eh8Iz|nF+_>YPO$cX~p0;ZlnOMU%)no@`C;B zTPnHp0cPH13paaspZK@~tWeI%HYoiY_Df~ZK_KN`e86|?Q{{AZzWsZ4ErB0B${JV_>ZW`>dI$yZ1xML5WN3ek zs+cmbvqo1B@+ccyu*cOr-vXsI( zGCZHcZW*3K;ba+}PGKg)6Db@a!=or1f-Mf@?CIfv2$~dAI!x-_>|_4KfcQiF{?lwg zfNkajr&$}?Ytp%!PgZySBcPjHL*>s?R5a~tirRZ_f6ZUnBuAW>D@@)iBtX0+mv2AM`b8IgfNx$n zPJS=c<@yDd!~6fnLJbod;(L{nquGi&{MFxBhIi*Xh`QJ*a?m!aA#7VH8 zRN(QT1=bH%V6A^wE|6WhzyD-03JxULerc=OD+BvT?2gUlmqk zLldOw7pl}m_+bgo>w8Ev-DWn{(NvQ-vnD;Pn%wzUHNh$~NKH0fG)L6M$|LF$t80y@ zFyBckGl}@!?GnqVS*4jY%~b8-iI*ht)t4$0$5>0g5ZJ76-;@tgL=+W~`A4uKup$al z#QlF%?o%vSuQZ5~p~YX$$q3&vDpIE+PyN9%tG230OyQNsZNtl~7QKW$F9&NCmiOgF zK(C96(5Q$tmxC1ndEg+ea{VcbsQ+iBBD(!q-Yc;2vH-+sO!D!61|yCQQ4r#LK)m9M z4s#S&V%fdR0^1Yqn@2^)ph$WRR$`XGVjH1l(38FTivZ=^s&$z(Pp?!J+%sLND#;~* zRf+MHP*ub%*TkU*={+2WS1pl0@2FfPuCcCEBtPTO!>qR;)_0Oh6rCBa1S_#LXo($_ z$|d5GENF?BSZ-2a8&%)9g(#8Ub-piXiHC!hSj}0vL|nlIEm6FOfkkS*WmIG&75RZP zSR>1V7FkxMNZjyUu}D%Sv1c^q+iMs3f-6{&*mr?e<@a!%OBe6qX_sE*W0;dn$NY8? zy6*xNAqGpA&|pQ33tGg)P+3HAXr&^KgzEO}X!xct0&#jNxF;+aamZ@~ssF=alKAUk zdds%K_Fm=r}gpA#7euD&2G8Jc6nStv?8MveGcp2ae-y7UZhDf0WKby&9>E z+!0%){5N9tn`?szsh9vooYs&jhp-!q@W+}$f?i68S{05`^{1qep;bF?3<((`M!T+= zOwZ&WtGY(*E@k>nJW|uOSd@TMEsI7CO@E%!XKDJg<};snWqQ-A6RvC0yrmMkdb&+6 zpC63W^Z8r49&Hmo5u-;I!nujfKbw6HVjoT%0@CPAMDUjVME31qFPO9&y>xmL6O9uS zbi3TWRt-oF;0!icKyXJKxyjux&fY2nxDuz|>lnj($LXJwaCN5?|KsS2RhT4iSEJd0D0dKY3vsvm$`MOV;+r8n;=su&v^2c9(3}9MG$+FlmX$c zz(tlh(9P^r2H%;WlaV?9`2_t#r*bTczmuZ3S5AfVvnl#h^n5r~_b97e{Iygt`c$|- zG)=F88~Sj6UWR^$l2Q8J#t?R*E()XzB#b~8TLnFS7$Sz+7=$rW68s-$>JK@T?<0A- zM}PL#IrBD#kSdZFwr}Z^hevyuz#~gDsGZ`QSDp^-vJe5AUk-E0JgyFKLoGI5i{@?Q z-+S~d&r%b~O>Tr~OSYTwwUt zDDiN4Djk@Cz|mP7`4X>Qlbxj`i)&u zU|eh?8jk^p@Jb5zkqG0%;UfYxV37ADZFx9xrFqaEw}U95o|bH&tM5 zP6z$>t9g506~&cZKuk;r4B_b%PL}C+o9QcwV{jf$>2oMd2SG4a)eO~vMaIT% ze!i}*Dl1}nSUvsTn9J2LCkfsG(yyN0HbZQkQ7t(wSpf+9ld>M)RZn021f95BZ4g>Z zu*gMi2({Y~D%$|die?)iiEXw4oo2Q{D1(}95b2@~)Ty!!B7M%AlN;!s>sQ3O!#yr{ ziYLyU;E5-_D_J2-5-#X;GNdKo-XolpCovN6(L&4Ujm4-y%X&4?Cy}X(^9}R>Qy1dc z-!^rT9GwZa;fh75L&D}oRtkNq$n~MyqtYdc1NvN25S|Ziq*u0o@n<8wvi*zmjdgJ_ zy0i)AHEI8%7H^ub_qUE1O$8Ry2*!$hy}q)^HiE%n1f!0>NmKncT!3fskBknjX>WqwA2H6eud}LYgWkVRH|aQnvmFPe_v~W^FYAhx7?dB=yXkf4*`b@B zL(iwp_?&L|jv>C&j5}`8pP=}FTO|I>TlCi`Ui((P5j}g~sy{~0?PlD0n_fWiez(c= zIcA)7m+{u!^_i6ZgN*yrZ`VgU9FzIHJM=<==iVvtdfut`rTAwuKKU;FQHu7xOD4}W z8I*oR#{G%+=u;eV+l1`7hVPawSkFD9qT}L`fRSEN!rp(p2lWjmqto~5 zrkuC!khgJ9-IVjTK;Af#^WM=*ugfp=)J-{WE0J&QrIVbue?o74w4mv|znrGIM(uOI zK2%PhP&k&u>i7Hg3za~ZACQzbKd3hplrBDGQHm4x0dSk(d)TU-1@gjX9peWcLG3~x zv1(@}@~<8dH2KUvdVghM7&ji(uc2qBNA*1Y5R{sI@Gl0Q9fhy3LrMM-kLqom?Zp^G z1LYVD2$%~kG{Q4I*ENT-T;pqxxRSWD zpZ<88s#;W)u~-l0F1 z`cP+ow7=e+)R&6;>xl}|_x9I6ru4A`P!*&v9w5^rp2X4$ReRw{J;zZ=HN_)TQ#_=a z;z2|Cx~KHc%BvbT2I}w7U|c>>e>RHNfT*Vn#`|U##>P`~yFQJz4W3Uwt$W*2da^sT zfWG=6WOomCb7_r8cgpzg+3iTAb+OCszBXhI>@v{WRW#34OX=v%W^cyuLrxD<=CRM}P2(X>ir%Q0fiKPqkLQm)i@6oA)~nCzro|)J5SC+p z{j=6oYJ+YbWXFOE z?G^vRO8s&UZ#!5oqN;2iY;Ce^<;s{BFgYP>>gIWa?|fNrp-ia3*-%}$ zXzVgnPw-$I!~!qZ+0}y;2-zm4bL}wN@t9xLVMBFO1;Z|X%TT?tiYl&(<9W|lFe!`} zrdL)`z3UZyD>c5xt9myfk`lp-HieT3KmWv6^>im}jle?*4N@nK9)zR~Fan2>#$ojk zoa~}_!F(*vDrt)T9f+OX4lK%aW)wPJjC>)>UvH$oO>pp!QP%f35y~K#xo~jb?cAP*-Iwt_hF0(6}bX$B6X24&y$QP<=0IZNnRRdL#Z3w0bT99L( z1P6p((o<=RbtWFIJbd_6y;l6LELtF9or*!D_)47x?4u;UX{tVuxZ7fy_2Ob(D!c#1 zY5Mb$fi|eY+v!bti|P7@mEh;6>r2w{`Z;MEC$_?LTMzkZq+g2jZ+uhlqR@h{ zceAu=yzxxDkcjv$r8VR4&jjmGg&${HRgfl7@eQs$%c_D6`e>GZSe8y60_FbbZGCA{ zmD0_E3uf!R6emowaYw6^1kN5%Ret6jU8fS2cl9Q6{K!uOWOAS%tns`*(jYDIu6|Rn z#IJ%?qpnt0WNNgRBl}ebHJ&|w4LOsQyOpoS! z7NMg~L~{_jj^DCae+xkW&x`diC$;k5OT|G7ulBM2J;lR5(Mhb#U-uJiaw9p}8^%_X zamS~+hr5@{ul2N#+ccoBxlBYKQQ|B!ano|W0a5yWxh{;BwfPk5Qp5*;s&}R5_D}W3 zq^v447dvF`x+_Gv{Pq=kW5OD>LSi2@ulsY?6}kI=nD@IbX+YA@!qyRNY-E0%dFuW%CqwQ8)VH+Y^ahWk1Fxj z#&TpRD+zO?6Wg(ujdj11XPS_iI@&=E_#NM2f(cTbBf{->T<2(s>`GDCaeJOx7QY z9ulv##Au3RLtu5{GyQR8e>flXnSM?D77xvx32yi{LEYz(qC|p!<7b%b+h6_U-D{t` zD|EtMdZ2Yv=RBf;$X<%TWPym#+570v^_Qsm`gUtU7insv^G@5X1)U8l-EJ-DY|!Q% z`bsxuLUEjS95q&i#;2$;!r(a@AIE2xVzGw3c#SXgb`E;+`|s4#YKrw9xFcs7kPI5& zi+AdylpS&WhA**~Jek4ge<|K%{}*5CuP8eD17@B=dAy=};8*$`rjH(%2fHF*dlJE1oL3|UxPuz`z5cj~7UM}Kw1{A6DL>d~@gCuZg#|;K z3pC|&GC#6UPb~KvH2G@@?e}#cl#c<}EILn$rRD^q+3iP}yZFZnxeuA(&OcQEKmL>c zgh{lObV$`Q7|~1RXdOLnYIfUTXd_S9)Nb>52(4={wA7O}S`Uwx(C!R|_Fg&KgC60M zs&_E7W~Xdwk9mYksy@NcHlNaSBTt@y?nWH^&2accO63O+=}`*&C1sx0TNh6H5osE^ z;Yoyuh(gXsgg>7-1Q-5)OgK)j$j{HJ%5c*Y(jJ1R1<)})A)T!Z$2kDe8TFIEFDx(E z^n^5*5`aTP~JNnuOzg1=vj7nbQMWO749;c`eat&m(0CE_y4XEIkr;d99B0}+MKA+xVU6h4Q{E)`Mu95Q=e zMB#JD93UbJpF`$25>ZkUrLCQ8F)K?-C*AG~4%6q5ITSHWPoKrn1U`B2F_gl4{;Wrq z^RM5}l7HiW){|<1FJfA)%0C>TSKuFi^C)J%qKyB4=Ch}b|1ZpZw!^p}Ghew6ICJ7K zXTEYDa3V$eG$dXXEswrG4q++5K+v0l4<2LpUGU2jG52u z0};i{XZDqdV&*fuR75LyTT6sbtN?Foi4fPdy{*v{TWRJiN`e+?z|2?fZSB7>^X>du zZ?55}50|yh$GmWQMhp1#U-V_PxZU%Mb*iRYrM(@n*8 zE0NFtRVT%Ef8X=^AaQtg>^F-hoTSTwCfzT$UD^Z9@4 zm%^Hv=kn&6CkmE}VPIb&00~=4;tL$cDCKxM|Kg7LTKr+fc%Rn1hST_)Yu=iCk<)1N z_ZGf2`SmUv_iC%(cU?yC)o&8-5Ng~`3*)Lw;3U2;)TmLuSmxnjhH$cZILt`o_k|e^ z1Jb6Kr?m|LHwX{NGBUhEmQ8_a?uZI$_e2Eb`?z9SSzucG$O`#}MF!+MR52|zDj;oO zRE2yC1Jfd-jm*djvv?LQU2l&z0-bo8)04Si`;)wc3eS=iC*H#oFm2I-4KJiv>YDTJ zC4$EVz|95WYqWGFPm~tEIUm3M2Jm%ue|dsAAupkXz!~41c#8=h89>OKsK1^FxV;p` zylZ|r&Jmm@d_FkFD6P7(EF`tN_iND-=P|j#N2os*i>`q_Y5tSkF)G+RgC^#g95p;C zDaoOPB;hnr!8sr;HsLiBCdZI5k4Pj?s6I%DD;cpUm1qlV+BjlON;ri9i&C?$VoJo+ zY&JjCWAy2Q?toP5yjMO@>@i)CN;Z7L@_g)y+_eP9NGHJUKYuinkNvC zAvZ>yg{k=^*+(LZsrl>_r0OyiQ}aQJ(uN4gVrrIhu`ptBTr5eKSxZuTVg@3uG=-FG zB0s4b;!0brPrGPF!1{E+lH^QU-w)A@q+Dx#T7{Kjc}lD_Imy>*My_-JysK&GOuYTB$th8gRV8}JtlLnkGi zafXo^`}&q*RD_fQNIOm6ketrHpKZALqX~w}55&dC@|LaQUA$AgAylGVML5Xm zI6NdC5}mJXqr$dUE|&mMhmhq8y&qAesrOS}WcA7Y3nuT*Le z0VD&^o_|c&sy>cBA^M?^6H8J3;>y)00Ok->KQhq}hEqiKO{J%*)sJ!uW4mrgu9JQ0 zNvGFL@_#GUH-eN;!jp_Pw%rPuxSL9$L^rf)$KH{@UE8c)QCD$k@eK+>BU9v<4tc#u|&eOno(II?{i^68y4lExEPmRgS9zHqnWcHOIG-0Dm#AmimEO-**%bS<1Oj5UMb)h7y_C4gDBb5B)FO zeRv|=Z3KOv%2SFa!8Jz{-!eRcx4Rrww!6$GIu9YVyOaQb(eAwyfLh--+(Px008p{r zQz*@PpKA0p8fOoMA6y@lli0*ecLWpyg=@+X3c_T3IE3rv2_QeRBr=V&WsxpEqo?r= zjoTM{S>smRh0wmPxR>#)ypXj)CB2P&{(Nu4R~6ops6^do)Td{Q`z&fCQY!9pU%byS z#X>BQKk9zt0f(ey!=8V@$P+uic@G-TDPKnNtcQ&2ab)L?_CPs?udUf4jy~uwK4esH z_FW9!2Q|iqlD>H{o>YIZ81+!5Ab%4jps&Bg5(lA|R=d19GyBPXE^r8Dm5t z1&VBQ+3`E$n0(*B>*62+0P~ zT5I-j(yg7CJ;)>gc(>#+<9c`;5jGH@l`Oo2{P~#C$)TL_^3G2f$;x+0{yt9_GaRwF zaZ15_c@Fepk|VyqkwvCCuIX=ZdhYCRj3XvIIKb$poKNNc0mcjT%zx788i}l#Flr36 zu}>PAguduWV*))}KV^)f1`c|ojIy;=hMao2#fk}dB#}i5HdM2{H-mj=#9)lMsuoK zk3q&g^jtp3XeVY_NC?4l1kJLwh)<+L;I1Y4g(NIb2D6plftB_v~P3+$3k6g)rSa?WLu+ZDwh z8f?_RS}nxsJLQH%nc*Xykk}UtVQ_!)3&w|1WF99jeAXr{j`w`gNR%(0^kt1nX~>Jl zGg5fN0(lc5S~|JNXvA9-8m2i5D~(?)G=%8$@*<;l1{?s8-5#`sp{re}cSHfMeX-SN z2b|n7#F!1;6#u(JjF%j+5D#4xc%Km>ToE)hga{YOxZxENQhHDL!xMSGmyJjoe9ymZ zm=3P&vOj*=FdZvdAQHih;?;&3_4va>4b!obmB>?u8N$#|$uKM>7DLeJ6{D!Nm@$AN z=Lb8Gj;edp-4U4726!UKEfE>hsElPn__%AYN#qw_F%py!soZ$gI88RGmEkx&!gIiI zV@dSzXlT`lO@1VVehn}0_8R6dq>g?KY{9eP2&0&u=SIj}4~#UHP&|2*@en-=M`1>U zIqce_jZ_B#E{-)a_=97NDHORp#<*w#m(la%amF5cjvjBkLC>7m(NFI--(U?ci9TTxS0`*rX8B;@DYhCUL?mJaIkvE@aY*yB~xNEvmi=OqT8*2#v z>~v!XJ=eWylo5RCTS)(S3P1c7W@qeK&(1L7;?Vo9Cw->rigEaAV&|GU!|0GHw{XR@ z8J!0WJ=1ta`97{ozj!wu6kA>FRFJ?Qa4SZ4QxPm0^n2$*@M-nSK?pQC^B2@ zE}`hLf!eyWGJOKz5bAGLuM2NJ+lWa$RG9_=BPP78o$L1e*>wOiHI6=joVVUnszd&`<%Y% zl%7Djk5uOqke(#cp`8|IS;y`W+(py^O zR6*_xr6(f4RAP&TN|nz+x>g7|JSuJIWxa+?1)@QQGV zphWNcRdOz(L}7p9O(dqt$|>ZB+CwI$oxb-*0)Z;X(?2k7h+IkdDTw+X{J?m`5xX^) zsyNO`+7aLKz4MKil%GO*{{@DdIao0Xywe#MIa1FjXpYOtR>g`CKm4KLQYI_q5yuqX zZ-J336Lvyx6Zj(H7);?j$NS~!jv)czo61p@iQyE<^xwRYzID68c=ts{Z9M%iEi#fE zBF_l&vkAH+!8Ybz`C33;Sml)mtey%Rdjhp$@kBtt0 zKT9{i@%rD#Mgb!oqxk;i#=TU_YdxyZ7 z%%?_m54n7y1G(cNm!jZ13kQzoDn^i^@9&qN8rjXNe)wVb@=5yk<9yPT_(F)R$=Kh1 zCvy86t}u=(2^SXakUl7}Ow@hD7mFCLx7sMUZJvza%z%=X*|A8sPQDWH@RbAteS2+M zsYp9+#|U$ZN%_=jqfYo05}pC~bEh*u=sH&jUG<%w5h_7+2!+1s+kc%5F6d$$^6 zXz-odY7AFqW&5A~%%~|`{La{B2;*0!+YDjq@ANjKjVbU>MP|~f68@oubZ|K7ykU8T zJs5tm2b<1#|IdxHv|}6nr6G(D7H&6$o2YHutp!sUdPQsz!*^HAfD4N&Dkvx_K3V?XGjnfplawdF-+R0t|Np=Gq4(Z1XU?pdnRDhW z2j17^K4H+eA7hu#tyBCo%lXh*N1S8zL=y9)vL8NnF3aLSaG`KbS1kDH`k?6I7%ztc zAK|u%%B#0OuDn6}om#{%Bgu3kSz8pk{9`ANKWX;s7z{O9>5eN8g*_#QUirlNvAJ;A zk8fhBsgJb;YUrhSocVzO#gHd-AoUyEbj*=MD?W4Pm@lUQ*%hd|Dws@mT;B zM~LJq4mq23UQ7`nHk&Z_$sqVaFZM0R;uKu5V=>SS1TXxBISxDDlD^Al2M#+Qpl6rQ zodfB)Nqg4&LVVBp!ud$+@A7F8eIGYsI9wG=`^a>m6KJ4}wBivaU* z@dc8}hcQ@r{B44O!-edIFR_i`x%^9K9-H>1Q_(&y)1Dso$Cu8B_$}{OPOr^KmQDG} zc>|?`f6A@7yiN0;vm z=<^7;)yqQPIR{Cvds(gTo%IV}tVJ=&JU$!b6WSFi1~7;TW*F2^`S)4vY%4@}yXpoEC(acLQbMImzfa29}u?Op1l!1{F(wbY93V zQp#h2xJ=EAh2cik84JU;svHZ$-Kr7`!v(7=7KTe!w+1UiuZW3{t5!7@5%;a0SQsu{ zvtnVmdCiW6C8PztQ83o^2QaZ`18mF>&fex1LqGh0Yj?7jZ*bh%nVv(BJMVWNKXXl> zbc8P_Xelc(nIN$-{R{}3chc!)c_*AHu0QaZ`!Em^%IGL>s$)8L<{H-QgmW0t*m%O( z3D1!2C+GW|_~$?4Mi+q6lg?su${*wz6{l`?>}SwBc*1FALw|7w2x0y&&Ryn)Gho6< zzRy$fz*;)0kUxECj+wZ2Cs}4e00x_gQcN5KVLD)h^!#tm4)y*((Cdf&VkP?{o8+Td z4S`RqHQq|39K?Abi*W}R^0BN_sOeJp7Cz;CM_ro?>TqR2hs1<3zr_N^z;VdKI{)r0 z@Ce%r?n?s#LPP4P-<>>a*s9;14U-Rfuyb!VvBU4S@}^06PZBx<%=J$k&tazD=AX`h z_sF@e*e<4;xo`n%Fe1i~4mp-OGb{fmm}QLthZ84az!(10+14Av)wJ&C0p&+|j!gQ) z*|$&+WkF7J$$2Wjr3N#vG2R-jaep|wyG0}l?lZ#ZLh{@n&UWV|qw(GmGFP)@r=9G= z<56_}w?k1pe%2WmiejjB6y5SB5l7C>Ih&HtcrD5;d5ygGKj<}b@-;GoP^|7R-)FXs zqe40Jjaasa%yM74;^Zz$PI2~nwzzu!ttfQ6Bo8#(7SeYn@z22jz#{ND7bEZ^v2VL3 z$Q_87AyJdE;4*l5g4{MHQPTuKD2cShxWw=cIJ+lN?m*Yb2C|<~ofPeQ{IukUW>liA zvONj1o&A(3XT_kOAaqv*J+st-; z?&NCOWVxpIg%iZs9jWpcan34-y{Y1sc%2;Tm?FQuYm1WA!qq8()-(`XvibB42thrNmTBoB|u{P@EO?1jdRK;~pxjy~28i<4Z zNvB*|zUQY7O-=Q&$YFoj{u8{al2IhyH`2RLyuV8Cv?v0;jNTpMeIdQ4i1*p_ZbI0k z;8JR=C%6p{IKIZc{N5G(9+N9pQRnT4T%*J?)C?ao5_{1u*J3+mIW3=N6pjxK1SiA$ z8T&${>wcEe;pnxNip-s6%v9uut@<=Hv)k*)erc8?G^CE)j9-GSt1D}wYg)rOC-!Sy zSrc9BpaAS>Q(4dYay_=Fo~((k^+eXazRWqX)CTfsX>n0#N&~sISzJy7N2@4*Vc%UQ zx2J9M^2_DLxQPjUcDX!9lC~zXA&um}lkw7-M)E6?N^E6P5PoYQgIeQ}?B&vs8nBZH z_4CUfsrFC{=GRm#K4?A6U6<9Nsfl1MHhNB#$n`vDnP4QvUaTRPOGgV?tpcc&FeYS|e!|ZrDi+Kz2tLI8sVk3iJ8~7M1mKMV@&1buhbuE;e z-}nX$3h3HuF``h>b1t5QG)W48otsKu$@D!H#=Q5H!L1SDp#}Jh);K6TwV(oi>!Cb` z(U*o=*r7tXZ8^vUXG&Zl0Iqz=w#=7YBAIlXvqsV?0@+?};~VKq#f~V%#G;E}Jc0ri zV@54idF6R0!ND1RrKHn0Q)+7Bs!QbPhwr2!A8miswWvqAX_nO3LfwuJ(*nF#XzwrM zeZ2O*N@{Fkc;{n)u^`fzyry6&RbV}Q)^6kCC_#l;8k^=&tue{RTet&s{$61TWPqlY zGSm`qG`7^NF#Ay35@cv>D&VhhnBLfwi`R_CCKn!##wI(fT_k&@sWn)KBKb1n;LB^n z>SJ<|%-y6fDw4VK83+EV0aHum7BSPn&&HO@R>~ebN0Lh9VzRU${XMEprPg42f6>qp z(ddj`Nz??rL58NHvv?PTTQ*d*k~i&f(WXJ7g#*xwh|q~??Jf&`DS8n{QF6>= z^4Xf2`m?lBx%mY*WMM7d5QuItx3QB2mwyKJorb|L@etB831bBxUl`4pA6kh8Kd=l` z2RG^xeqd!_8%f59dSD<=p%?m#*W-BYC0>u<^;Tqo`)R^M-$3Dyb*?Sf*9M6nDwouj zxf$@m+A{zC9}NwD)>%!@`}3tA-AwJbjn}#OspujclCJKxu+WuqAp#zJcBNe4{1IL; zp)EmIKQx&eW+pMYsazBbZvuFyrg8)KkBJbiL)E~Lr@2V;vSm$Ww?Kfu2LnO@5I$}y z=f@H)1w5@;JiHk2=FQ~7Oi{UpTHSI0eyExJn7I@Cu9^IV^kX9H*IW*uC8L_l8?uS@ zkPw%mSUMunwoSqrw95gsUM;W?Lz47j3t4kA63}f@ziJ_CZl%JY{w-zAtyCD)vz5HQ z9z;jUbdP@sKM9zZ^DayEJCKZS!P&=DI$_(iW8Ix`UI zt5lyi)6V`9l=HQwi*ZTyWdpo09-Ia6hw)$!z)5Z5h^PQJY9lvtVGK=vgaOruDAngi z(y;g(E`V3WgB5@e$Ae{nGp~v()(LPh9-ImAAb>H9p@~cJI#X5F?&fLnx0`6mstIZ7+YI7l|&HZe)3=eH%3p>dH z%QJY{-AT^MoEX|>@>{X+1rrhU;oPg+*e{*r=9ZaAZ`fI`nK_rzQz$*jpB$V5@Vx++ zve#%884O_?yuLkxhqV#3%PqkrKo=@`8A2uRv(4MshR$*z<>Y1@rH|r^E8$hzLZ>^+ zQ?#>0tPi1oT& z@3*iT(7fwqu8w!x4e|}NMlHKR<^da^de^2(tvlB6M%iy!H!Grc{lJZpqdfV4li71O z%57>2ev}lR`L9K=w**8a)!jJN7fWL#e*$Z@M{%>`H_7?o7>O-!0zHj074&-CEVp5u zQgUsq@+LVsOK{CPWn;93y*J5R@tBj)c;qmNn+=-a>u;7jAogJ5E%G|EmxAc|Y|xD% zse%dSJ{dS?W{5Bf<_&?)DbxTfF?scGlV?ybo!hRspax|#v#uYdc-Yz76Tu0N1&k|fZ8}w{oR_Qxv@!R-uhS)VkHQ~KNZ5RC8`~XY8 zQ*Ig4D?bQ|(1z}FXIz7Sr9=m5bFYn097$zoP-13JxixXobd=HtaI#)8x_7^~r`#nb zeIBK!5tohh_mNIqc4061Iyn$@88r~&GY_i-m7fgN^Elg&=%ixD#>0Pq! z48SJb6{J*!*0fI;O%d)2995z1h@j;NcLkoR&~EMn|&pLwfw_r$})) z_S6IsC%*Q01gGg1w_C>1iJT=3)2j_*rCau0=BH5oGG2dWdKsG zs|ndf$UpXrlxBkrI-HM{-6Q8&cM+mWh!gHXzDVk(d*sGM?i7I!6ILE!)$AW8ry8*5 z^#`qUVXPeyEX4-db%g9y1LP|V`GyTZ7ojiqE|e9ve}L?_ZutR4DOA*nQ>k(~Cf+{& z`^R+)48aP@B6ud* zW9=!EbF8zdMg{l`{ahwn%!MaE!}n?Y;SzG3nCW8GXY%3ToPg>s#zF-*0N(p#gByV6 z_u;?*Goc>$$=nS9S1@Tp>!(9lTs0@FEXaO}(VVcE5XL{KO)=hBNa(f7@EHgBgjQAl z39-D^BK`@9yw-6331Pg}KehQcw}T3I?Kj*GYM*WgrS&idA@6=jgs^MC^eGUr%Aaw+ zoZki(Wh7oB{X_l!jOxxU%J_;A*FJC`QSD==@0ahV!@#`*^}|4-F5Y-~pxlYPZKFrQ z#E_qCwq>F>HY{HP5Em*%n`XM7sv6K7!6t}pI6d&hwGQaXP>BtSh&=&|%7U1Ddxlfp4 z%oVyMrt4zti=vwNOn3-lm#Xe}r^}&P56ihyJt0ogr8KA;Ka~eby@v~pVj!V!AC+fI z6a&$Q=>#=Oel6ixRm7$Zmb=Lx1!zT2AYPAG#<4n|of#~zpkrF)CnRJnmxg_)2BFRH-~O;dC9N(qQ>nw%pHMuIyK zxpsCQ>U#t)2ffq}@XmyOXfRg3i|Fa?9yeXiW_!lU+zVFPbh%GVA|Hhf)8*a-ANCX^ zzjz*hQjE@nGveUcEMunZ)aylMX0tjo=93hIDFe|#=fM>J1v%^JISj!y0dReF0vfe3^1muo6YK}f9P{cFY=!>~XdMA&K zMH1C(&`2>V<420QQ9bFZCmo;n)swDzrThQfN=LpJ(@tecdF2xOu^0I0Wxeco*~A$Q zEE6ij_1Q@1%jFKRfYCl1g%ssQ^i%G4Spd^t)bsbr^NbIp(V`^qcs=K z;hI#1HfcWY6(cOi{`p}Z!_6*VAomTsg5w&rt*aujW`V4GjOzp&AylYCRcP%OMwK*X zVYs9#qPAo$XvZd7k>=9>L zwVLuzFk)JR_$Sn?w06^HIk{BR`iCb&yGrXu{t32C>u&xDwoMxq{t32C8$A9AwoMyj z{t32Cn+p8Xz_p1LfiCczVZJTwzk(fKB1c@R^?FG*x~zB!Jp^8K)}!`_OSSkO;>?<% zhuHfs(Sni6u3CyqS{%;$EtS7D7lgXLEH{y)-BvbwxxB$Vo^_~{e~{pNvdIehZSpp1 z2~Nr)(cc=CdmDAXA~z$J?}k@!6^7@8SLBmLmbTj1;Z^brxo1;-ia*n5rXWO?;QJstD-SOf{DsY1EsvtYOJ9|}Fam>Zm;+uh zE!^SqMs~}q@-f@&A_}gG!oWJQt|2*>A9F3i#diEEz3lOjd_{u|u*wP^f4t1WU;b7W zFgvy-Vyfa=%0yF)TbhC64^GX{taT5D+bUz6dCdphLq=|b-Q=_Yw-W;k{*Ej0YL;DPs)5*7N{lW1;`%AZgRqxocEbH?TR?)nev zhKY#6beAha31jhu5M_0!-WK_0vyE;I!rEdJUYC24@R)0h36Xk4`zv{?5FQ&6XO2MT zERql38K1bC5;G}rb$sG>O5_25ZQJ6=zE6oZ2MMg>6Aw{h5+$xhB4oNjg@T2LF$B`ZP_l@w*K@Aj|2Fu zlMUK|h)4i;drK~0SG_4alRl~KH`y{+=59F<#y?B=nT{BI4{nf2p}+#Q54z<6|Iah0 zM`s?lvdY3X?a&Lujij-#8H68K82kH9hzCBY%_i)WYlbVfv})STb_v`ry9~HPsS$~> zjbOiPxc1!!+!0lGP-wSaXKQqwClG#W4DCjuFH@pXXAr722DN~_)3v5(-qkfD&6`iS z330e%y9wNR-3+*kC@OPW9PaWxqAPk{Z@}G9Rdoy4p-zJCuy+hyv4*-hJ&JDonvG~A zDp%K!RQ0X6s`kE7pbdJUw<|RM=o_v{k8e94v zChv9&OaB(qtr>P^`v+9E5W3}=f5=1WX@6gS3eV88gV1~=z}yey4PwbaB5~je&6dA?|U;4839mg~ZgyEwTexP*;f# zM#QFkCO6RQx8vWd-y0XZesBJJ_1k_i>bK`-Xxu>e?)RVN6pQp$I8LP5Jh0yZ_xD=Xms_FFz*Z;eGBjG;wyPRp3 z-cDkp|0zF45eEQh84CV^J9b+sZCg{5#W8K}8M%h-xD`709D)7a%g)<)8N>{!rU zG^1KBmYJY5q$@JC&dqX?qKMy;WGHw=blOp4TD#<^e8Z9r`94Wj@^cm}=iC=(G7!m~ zUt{5~hjXg#6y+-G%CB+lWuuEZcolcC$5NDZ=`$aDIz?$){=-*1jdQCRblTOq)t5n4 z6V{e~Zh6L{WQ7b^> zZkH3B`^44Y8n^m3!8Pud)6uxz?_%*auD61^D~!)}S(UBv94o6#RT5G{K4{6pKOBt?++L2 z_lMeiz+Cw_P2qfK1DisTUfGHdQr+xco5DFrTq-JV?zlsZm}+Ugb!cT>-dpBXbyaY3 zLI*+bEjF*RF83LeWmih1HM7sh-VCuToiz3aQ7wZA=@if29I-20@1|S2;?bQ#;N(c$ zNskPrBiod&xHQH_r(tAlj-?C6hG*9_euE688VN7~0sPagZ>| zO4~exrVd?T3mUsfk%NpeSf-*}9ab(8i3cdr<$#UHeesDuQ(`vdd^0|A>>MO|xKjj| z(kF)O0!mD$#F_DlzdwaUnG)UZxST5~r%GjxcgNLsmmrJ8?~xc*?-5N2Gb}#%r`jgL zC*wPcQoue*kX_l(IncFV1oA$j&*}KYL*&Sl`%k>Zqg+i&F|$0% zDKp7sS+>%Tp69ZaEZb3oF(51ODt(I1@&FvAWMEJ%6$i~_=@yHWfb*3(7=^qnf?VJS z>w#6ofGkBLH_1`@P?@uGV#|Cz2R{d-)Xt4f>6)vwiLT%5T%`ly9?4Z6q-Xa$rJ?z0 z*5LOXnQeZmMJ8LBr_?PPUr3ed3clXb-i}FHEZqnbNelTnjA}qizS2N?zK}J`k1e?u zQo>|1W67jOlUbvY`96+}!)G9)#FDW^lj#p+vf-WKi>=LOA~Qm3lq)DjH!3}v420*L z%(Z@{D7y28_?2QRV6k6mnl_>knd?w-<^E39&70P>-if?wX`Hd8R z?woIM#$x#6OZJkWBR$xQ)_Mx94%`0E8!5BTqk%iAi88_??EBM$kCegi2LF@Qzf2bR z4X(rlLzmCHQtxtI`IbQ+7fw|!Q?RIZlVvwn6*~T#DR^?UcJ4Bk+f32C78td2S0*Z4 zd-($WW!7iUH^&hP{>HX8S4L3``s-RKw^Xgk`&tVn-*RT6(Bv%+i+obJ#D|;qY(`8; zsHbX{tBavfk4?|hQt4_?r5)6gw&c*-mdY@*b=U-~-+cGEy0tQacH0?2B^y>w;_Lxm zJLv9lgv9;!qy!^K#x40YnPZ48`4qj1d=Z6Ol<8t8gG!x;XAU{Q`bfY*c0vN!*LEQ7!ToPbG+nZmaD;-=&7P15%bQw;uAG*%{UiqiBF7Jjr!WglO2hE<$jaP z;}auRqX*&>$C9gLz9+Y67f1F5O0?64Ju^P>6iGpO&OhQ4pQYWLpMScyk0V_s($Lzvj2B(hS zWpcc#1T0v$rQlM01V;86TGxE;6?lg6TO^)Wh_XGT#!dLh&^Id!Vy-#UpZI--b- zpYSKGq$)bXL~3>xL^7g?thx{)km;hGRFl0RLO-z+ofW^{RiFMD3F__M*NNVK;yO_a zdsHndCSE{OAndKOw{6th++H%=+qNj`i!X$_E!@UET|^brqKNFh5F%+|B7?gMBB@bC zPF@I+)bq5{O6^2kLfVp{lt{D68by8Ta~IHy5I<{U`Bpbk#gr%_Yc7Nc1k)Okzg#bf zBu5eX^g@Uvhl%)Z5VIR-rkY!y z@T@XNQD6FJ)M+5hZ5r~$G+6&?zCN_L1qaz*d5oD?NftTkRwZJ}aDF8m^KD91N;u=6veDg@%SbS|vAbea z#Xrzp$+JH-9LQuW07;F^%)Rne=DS@;i+wBTB9JudxrO^5uW#onf z({ER9>nQvqRYI#9;n8WztRkUgl+l8s87&~ii^HK^7%ij=qlLvpj++-Wze6dEDn3&y ze*7Jx_!od+U2_D7Ty7=t?j6c)fvSs-vSR4eLopf@jP4;Mn+TMnu+Mua4GrCyf2Ses zu{)#ERvFW5J)_b(_B7<1*HiHubbH81fgR|n*eFcR(Vj}sZ`9~9S|==~^E=5f*>$~? zrq+GbGd!H&gkH+Ac7I}2K)TZ4*DwGTW}$$9*D+?=`gJ7&E@RA_AY_cKCI}fL7v=g4 zGR6YRjX>29B^YFk@I$0cLN1bpQ1MMM5d0HD#SiII6Tm{KxQQyyqeUtdn?-92pKXvS zYN@yKZwM8&%={BVMU6E7giulI7yikGifgz~(Fd*J^8{yM|F}!hjS{k0t3HZBxut6# z(E)?{C=s!t-U000iC9%h3fV{5m40X$oDmj7xXPUohDP;O3KKlDZYm3;1&^CMLQ+A` z;8aRpSHiaU2fKdiW_G+kBnL<4-xz8*K>5NfO}i>p;j_flYk173P zYO85&AaUwraXH_d!7GGB=U}Bzn6VIKznX}|RLv@H++gK~nDiehJzYybjr5q3Bht%$ zj|;A(@^R&_W>PsAWJzt2;IiNfjD5&@dy%-HQPLgMzd&$MRnY{T)8scNF*Lzx7-(Lt)$>T0Ciw!X ziYDNkCSNI|X|ltAQwsE!*VHJES*o`jIpQg@-hWqIX_2Oa?J!hJCsG+ELXLyts>RMl z6M;&Jfrvf^`@%%Xb}o(x#sF~MHg0Ve-8LIIkt%2oe_3xG@>EF^a88pmD={>|e^fzp zewZfmR7n$XPLpeP#?S;iQU%So!Zhgyv#PcO&S`SKHijm+lPYK)57R`RDro}FX>tZ8 zh9-Ct15JJYO{1f0|4r}G$^<|vwa%NK`fl44v{Gy&%{A!CYb`IeE&H0ewZ z%NUt8?E@PKTsw&@l_9u zR*DUz=Z;pmZS(%oN~v}DY+!i_EBzUT8)kEYu4sZ|o>6@1a|kt8t3`yZvO+2rDVu62 zGk>u?!0w!slbq(E^9dO}!k9XLj8bX~^Ekj{Gr@GRzm35qk!Xq0e*C>L%9Vy%^9}*l zmU~n;>pM1z?TJeJ>AY!qtm0Ypd8D7B@}-YEKh2rr6nDor0s*D1J=tgSDbz{|MnR60 z2SFHV3WoWfa1w3_L{gab(UaJL0cvelbG)KhKczk;6%lsTc;&TdC5jby(2C!#Nxb3%wZf*}`G7n9Oz zKoXD?10exHc${!y0s?=a;R*=|bkkwWDtJW!;Y<-G5T+5BqASjDuBbn5?xeHsJSt40bI;2gGJ`Wk<3etnc1)@N=}v0iz1z#p|?=)ayy9Y zM#esL;vukC4i+G=|l^tsN<0~umcR&<6!K)(-dwr z-gKIh&BjiJ%>#f7rp6_5pJw+>Qy!x9L(>!=_ic~>H)*W(G(}-K(?!;X(<3N^x@)?^ zv!0%=O0QRA3wwU1(o^qV zt*7>BJ=J`c=&2iLDG#3qMVc*8vS(v(UX-m)5bCoCP z*VJDYw$|^5>O4^qi_a&peMc2zu9xUr@>sJIp*~Mo|uHyFeLENV^w^Ooa=T zUiAI6_WX9C@&aXgc9AmL97Nr)cR;3sC2R2uZ)+hoO!$Ih%doOGu%Jvd2I+7eK9$f$ z*G_}-Lvql;?p&=Dc$fZ0Zf$p%X^|km6-MXKvsOcCPP<~KGY$kjudjxn=J)}T2YVLu zNpyi0L4`D@@KxwMK^isoRV7PTy3_Knd{x<&e-fBJJ9qSqwYm~xr&4?xezbezJlW^o(jM;?urS$F-@AK*1Bi?7yyFfj@@c>0rZ+XrQiS4mRRyAwiQL8@XthCAb#7!`nnV@kz6vh1MvmNueUx_-Z*h zfg~TB9jxLtrL}n`+xePODm|CWetS)+Z`oV9lhsmR`yxmJiC>(+@iP(!fF?Lg@bl_; zKV}#^@w#$_2-Y?CRu7jYUi&&^iJHt4<0lPRIP4F3^bG!9Ja_h!jcWv6rwLwz0DgDgWg9PSYyfyIVH z^0(}-fYwMlMcf&+%n~F3_!+n>M(JGl^7xw(VdxQ|b%6$GvA1v7q0}teS%U1OIAzep zB<@*IJVg{8WcxIChtdIor=yT{tO~er7v@tbJI{|biLkhu#e@F>DceiT#9?K{C|Sz)CapSLoii zlmfG~aNPOyg~z<^53sp*C6WE~wo-VZhLMffGkb7{h2<>XI7GE3Suk`4Oat7Z7n@~gX2Hyte$26LxHz?1_Q(_ z2KDD1EbD#cZ?-5)#Ch*41FR9-L-_-xvvt)th^8fy!k@0?$z~sZpg7s|3<^0B)=!~q6g!?%B^^eTV*=MK%VE6_RK^v2Iv z<$dCP1HF61`)Yc3i1(N2U7Y((3+Ua1eKout__)k-JedBMOXQk(Y{th*I2^YIs{C5{Qs_h`!8Db-44?On@@ls3XbS8p91?)76w)fk zZ_d!5BZ?$hW=`A6{_>sTOI|q*KcttYF~>n%X+g)Z^{)mU!$i?u(8defcSw1P+(-2| ztaPQ#Z~5W4DxNs3D{$)d2_%zu&w*b+fphWax&o)3$Oe2N6gd4~;^2hkc6qxJ9-J!k zxY9=DeJ#pHr|T~ly^l_5eN_AK@;9*T--;eYfKoDM>J`YiN?F#vRj)uIv@`o6;S^AU z$CtmsG7l>9rPY19N@dg-hC1z6(k|ls`bnQ(KfJbs9XX)*Q%0=C(di7n{@>C=C;w2g zEYj;mEaRNAQ#z9s`uLpkfSF#dHM{OIJ2$B~I;NC?ok|Eo{nYVG65AxXT1cy(RddLjkUb6(qTCsBzw8E)BtPbL?$w zdXlR^I-JHfC%IZnr{*&$*;Oz7g^{~4J%>{SF}$)?$*v;l{ZiIH*_GciKAa$rv1=>S zq6sSjCsif^7I{8r#KC?7xphNG!Z(s#w^H<1{{df3cSU)bAB-8D@gX7FltQlU{a$u_ zczzLkGR4(Q`XP^14)f%(JgY0&`a_=G;&TO0nV5O7+K?SeaU}pDRAhCnNie_64%uCw z;ITg4Ra<%)7XerL5Y-~Xb$|VFQ#K>&b8sJ5;l+>Li<^0e@IxyJcu+$*BD8#m4s+L~ zO|f#An+pJT40Gqv5+XZXqZ`CiO9@Ub|5xPpI9#0ES%-_0`~FEmu2H7zCseq^>8kA= zh8tA4Vwb97k{)on!Vz>TMGdDoU2XFt5p;sE$-!O|6Gf+`$E7ll;zBUal^H7QD!ce0 z<2nW8v;#3t+jJlvExUSVi*qmq(c$Eb2Vsli;@%f{R_zQN$=Z=^R9wc}|NV-K)S?3} z*N1;@q{Mout|a0h`m3(R`uRAlHBAk(1S27F(57oZdX&e7AT&`yYb@C=9<)Z>-Scdb zqri}CS40t6&>T;9*4$0)XW1^ptv}B>hY}rhJ%6PaJ*}%Si=4|Tk&dKf^0U<9ms!y3 zDqz>RJT5Q1Ero4<1onEu=8C{4Kq_)E&db?Li4=o|by3$DXw^Obw*^C!(0-pQ z%WT(j5=(-t=lm|04%#6={(!4i6Hv<()Vc;_qUQF&Jd(?7GKsQRPi`WTU0QPJseo&v z`9ECoodvGq3#hoSW=zF#p#f>KPYGAt6;*Mb?ADS)Pu6smB5*bqwIbI;NfmhkhZp=p zz;zw_OR?))3Xa{o#D!qlIqYkH{C4?A4TWw;reQrq>H8eegPE}I|s@VH%rDHQkE z1!tjQKfvj%eyK}gFV}YUA{rT`MjEVcX_!ckpDQSMsv_bLM0&2v%VH->UG4p%+yXey zLAkyvvamzz@@lb>bzA{yat>Qk$903WyojBvw5Ymk5vMt<%Yau>((&JbsO?>tvkY>$LqR=NYA_2gY{rQwI!LYtcOBB^0JTWVY@`3 z?)um+zf5G0)OU52b|$m!^ zU3}BP^?poZHamEkOQ}s8DlFk}=r!T!OQz_Uzvzu#Gzlz0qY@s=yWFLwyir>-M{RMr zi<_g~31|tsiN|lmg9aI6}x(v0_yh^dzm%BXuKJrp1A+7Pyb2FoKgVB@? zDsoy!RgnmVIjv`_NQC;FHVU}DY+d_Gh1G9}r33S?MMGB|ebkWla6?zKD!U}&(|6EH z4{zbH3@2|PUx(vb2oX#rGnQzQ>aJz}l;DmeHgAWkv3W7;_Nc3oG#ffPJ6*DkulsQCz?c1b|A;`u z9@5}|s|KB`{7b|S&EMOl(BRG6>2gQsJ-jM5@1RYtT9mh28;1_Gak6e-izNC7VB> zz>i*%13tBSz%SN-AG;(6d`9(vU#tQD;gTHiS=9r6u?GCdOLD-cRS)>Z8t~(nZ8t`8( z$pK$fJ>VB>z<<3Y2Yh_>fM2Wu|Lu|-@Cnreez6Ap)FnCK3#teFVh#B3m*jvyUp?R# zYry|`Ne(!x9`K7b;D20_13smCz%SN-pS~mq{Ke`4zgPo)=8_!n`PBn{u?GC?B{|?P zRS)>Z8t`-fM+0tO0uQyxK?GTV3!)ipZ?da%*!jnJ&H2ZnDx81JdBWXHIwqWdINjdqWrd=Ee4 zo^3AJm_lZwsoZQd>;p2!+aoi#%vF*%!XXs-d@P#pt|5(B!VU(6-@I-M+;WC7mLfNx zeb3!8Kwgf74-@iZwz#UmC0pKe-^^MraC65cpp<15j!THfif`T5vM!%`Q*w!r@Lr-5 zGCD6oEE4X#gl8AdODOw<@7!(K{hL0( z*zJqmL&=%iP>af)spXByJs^EBl${-u%fEa7?!Le3Iy|_<-LCJySvEDXjhD5a=8~T#_c(j+bzb$q5^ui;G6v-2Iv_g*GS^gt%i|qT_ zT|*0iY(Sj31pZDE$-Ci+WVJ))$37~S$LkpnPc-jlhn|1geU&+b`&*%4p_((fJy)pz zS!Z%B8>!jkCT-|)_w~|lGkbrz`qeY>=-D75%BcLMiJxooXFTZWGdIJH2G6$FaK4B_5gK3VJb7IL3yC|T4x z{9^GTj(91Y6TrXII3M$_bGM=ptaq$)^AM~DoJ~rYW4-$c>V+}u-7Q3QlM%3;x8TF| zSVVbP*f8k+4eqlspurp6+lfHyP3}F?QG_?%?0(KiF=?+xUE%$=c|f8^{XhyFkHd#V z{W8ad8f@!k_x|FEg>d5l2UCDn@UTA<{XTNA1ylZ@bdnAV!G4lQAOJof`bNiA<;K$cU>d(5(cgyfLIpv%?%cl9>6&@RUzvphF zIj!vfFIHq8O6mv7t$C3Wxv?JKqJ@&ub62$t^NeB{)*MA(B|Z?h2xm*`c^2WvCAHnZ zz5bq+)c@uByW$7;zhC^+L^VhEo%vf)2rKPv=IB-S#2@Zn7qrS2kxQuyUSekkLf53I z8UMv4w)YXYzk2FL+<(HA-~T_S-V4=JZ~JEWKdN5!$T9YRb=6x@J@u-m-v7;p`%?AP ztDbuQH&bs(_0+4LdjB_5Z{>e=>e)#&vDa8?6mh*tntDqWK?gINs5RM#X=-~)%eO@ZBy4F@@AseOepeL{kkH|G3cst)h~HKA zRs=1_?8>NC6I!Fq;z64H@9imMK8!YI8!AS}fg2E?~KL-CH4hBEg%D$6tpV<%pkHj>Nt8 z5|ZX8)`kG=S`Fak)oDWjcCDiP69L$@_V7;xVAq;WpXC&RUF#p73}3TaH}X$-m(_Zk zf5M-vHYofP9%Qw#~#t~+kv&;oQya2F-1G)>AJM+(_*ezj)CVS>qk4NWd{R1~w)0Dvb6 zr~o(|z^98@Zvs{f-GUAUa2$YB^4SyuP9k6?fa3vV`7C`~R=`PREuaJn{o*Tgd|SxQ z0XcoOjtn6=%Kr;+Wy0M~@ND3Y0+D64*b+VA5G6Q~a0o7Ve<@@Kwq<3pS8J$p+E0{{ zj_~#06teegs0HamhXIfUR0zEf7qX-RwJ>8E!Q6mt#$^U7(X;?HUQR&j1afi<-~$BQ zuIDCa?Z`f#fCmXk)uOu)VD2a2?*t^5+2o)ZjYuy9aMF_iQsKu1=Fsh0%U-4gB5_J! z4<_t4b?l*74MF#10v;lu9heZ$Qw{Rp)JPno1YA7^rwZ)S!3Cn%exn4qvJK7^3BC1% zkxyxbE*1&HYJ&b;0#dyz0Ytrb>)7ikp#TY^dFM}gTqA#w;5mR-B=NrY6@khh1WX2S z0+46svoam~$>B(#u6{-g;T%0-DkadYS)*AMNjwMot4i^9yd}W1myt7 zZ-s1&rBo!$rUWYa5F(*b!kBs@VJRih4|g9(&COx{gi@9DI#kO__1a8{^i%(mCruB-!gyCUQ7<#3eIH5dU;q!j(vaojE2FZwni|p`Xd0Ea#F&=QEGn&4 zGef><(P{4+)9N;l$~U07A>Y>Mw6n&vTU)64F}#GsK`IB>Ch!+`j$kSlv;b4_#&bA( zry0)V8dI^C;6^4vV=4|2JjZ~qo#9UtTsFWpW@FqWz?}xT#%#a!?;UUNJnsi*Y5ud?X2wHj#EQD4bKc9nz(5l5haeCKk&p*LJXpQ8b;2^Zl z;Gf_iv_89)e}je4`j&r!h0un8e}aY3Mv8xO79u>xCwa8;3Y~+{h8htmjC^}$VP*sVE;;e(-0n9hBu1Xo-391b;)@nfwZl$0G&;!Y6qh4ixjosHt zZ6wV|W6!iv{jtFXR0@t0A6(#ku??DcRtqkW1VS9-vC&tlHd4b{(HTq!s;S30INn*U zeSviTMVx~?w)r|WK16}%d@%)Tw^h0F*@Im~Z3ebgd3@}#ZPo5^kqORAC8M2MD*@4d z(%6cDE}2?&Z&ywyG^m|gD4EBz%Ip6pweofpwd!?)sMVbv1+~9-RO?AiF{YS9F_8{@ z6t=k75Vjat2wOaB8T66l;9@)wwwQf=t$KOYb7D>PoFI)EQjGfV%!vt?%A7cNllmxe zfb6@`UeJPWlLwAp=SnWeQ)kc+HDSq zyk5I3kkr zso*Eo>UKyc*4x=Vw?mwQ`o40z+E_?6QuO$pzuvA6b8=lP9Yi}pI(w#vT9<|HP+yP1 zAK63YT36TIslJ@KT!9>A8}{Dh;OQY?RuyLJsg9SPva#7cAv8q|zUiqJ(9_-vt0$fV z9?i;gTY;bO2pS3nrAV9EM^89RDFVV!Kz0|y*7Q!=G$YIdi z`~~qe9gahnBd8~uD3an{G#qwqZ=An=%V8PgbFx^*@R~MurnkCQlk+C{owQe){0TzN zn_!Uh?z<~2B(?b!LQC<>0!=oc-P1>{V_p6d-@~zE&FZ5T7!G9(2B=M>ib6JF6tpF? z`>G!6n}nL}0BWTPt!TRui{r9(HAxUCCl!^;4UL8w8=IfedSVk9wt{ z61-o~_AU3Q*H#U7v-ELF3cJ5Qx;NZ%X2|DeGYR33e}OP;fa>OF?g6T|AS{)pCZ&>C z8oy>pby3a5-=HxrI)d#Rpti7nMx8_AUzS&Y{63vo?gxt` zA{N$UpWLr574e!9g)R-GhS8A=^~g_&TI8pd1JxorRP}gB&1Sz2R7*WV%N2nPwa|l^ zT5LhK?jf};D}O*;u172+xfpi6%@3=wK@595s9sJ~Cq5|Fy)_StW5`DjstwHlvkEqR zC|tpIadmSV>UQeStM&QAqFU-BqFOB;5ofkL9#MBmALOv&N7aY$49$F0ZEj9kc$q2f zO<8iX2CwB8vhk(9LNd?@KIhD3pA65pvg;pHAFx%V1<#oW1r+>k$F`)n@{_PxIV#fF zPmf{guSg3u8>~)Cl-4D&t`+%hm}iJOi#|d_a8ASXiy>-%V6o2S>OJ&)wOsvz;4_Be z^cS+T%sUDd_Tf;qMyslV%NFyW&e~iGDO(yyB*kRB)yJl0yHD&Z*qBJpiRiLThGB;o zl^NG%$C#hcCmX$s`pXS{*kKJOj}@r zKN(uyv^O(zh1y+!Y`#R+M0Abn|P_EBifs7&^kQR<=c(@S=lf{js;Vu+j_pLy`+ zXoTN)g3r|i+R;+*?FB%%%z%*Sb3iRPjaHjGM8o>~-Lxh=%Cj`&?^6(_t zF9(nmcVs>w;I$l2=d%ry)f$xd-3poS;^UuDyVG~?Nn-lcWoj0iIYpefn~jM}tZNem zE(W>fDmy+#y@ImOVQNEq_86-+pyzn)X)c#@*uk-?hk%2oip0`q#j~gO+*>XyEN_~q zK#OT2@j>lbdz{)pD|04V$!f4e)6^Wj76Rg%Cg(tXnmS@f0-8xZa0D-(da2`FnXcBS@4t@6O;R*Gn~j};eFMNc6Vx8`Y&8)VxP&wjD@*H{BJogsVtu_{ zC=LNj!SgK5frgPMGwqH(zZM{7D-f_K_lf{3sBf6qg6ivs^`(->Us3Pn@2Q# zcFj?*NqHd&NAYCG3!$93>LN2)mc21g4e*z5pI6tI)27!7xWKNb-|KU+J@eE&wrjq6 zmhg5hQ19S)#fwxkf2qA#z1~b=a?4-Ds)Dt5^^5Ae(zr}ku|#cTMzr)LSi=?+u`idX zP4JoflDaKrbY{T6Xb_@`pIc#dvvV)0Z=?d0Pat1DJ1j{u>pD3pfqk`9T~~F=mY3B{ z=ILzMGIfwnEmcs%PkE~a)YzsMRWCcSTz#FIy}DAZl{qRCYj;7JW3z(OiR3^Xk5^*t z+))HuBDD)DcgqSj4^|lLu@!1f=hUY+n}AP?GXgQE1b3R*@)c^9eblo8jx`l$knEMJ zpZ&T*Rd{6g46=Pp_hkfg#5Tx{0I*4|+V{H2v95&Gc||QiIoH1;`sA@!)P~kdq+u7E zoy1C4zyb=z?0rR5FaJp^Ml0Tzk17=NkmftgqFRt12IDHz7~(}RTE$YOIgm_y7+zPI z>F`Y49x~z@h_)=Bglf$d)iR}xa$C~N6Ni}phO6tL3HJu10#b^`Zh4YIj}Me6 zoXs`YF~MAn?x!VOHBoeUyc{?4n$4Ab65G2{O|fe>EOSLH^RHH_QK8Z4PCPC&ddF4R zyV3cxR;%Gy=%7oTynmG%6$_p68|_%GUk(0R&#Kw6M6&W&=(Y@zX%gCk8*W&;6~C%d zMD#(gs`r_#2hVOLrIrY|-Ws(HH^7=3RJhP@^lR!*(#%P0$XZoR!tWzJ=wuJ9$KbDD ztFHB)LVjO5cvBIGI}tZ%_}9_vz*%&{I(3tG8On`9$OJ;BK)83kdNV~^-@0DyTVrPl z^(RJM4{$E(z5g64nBjOb-vPvHHmH5m42bNt4eF1!V~E&`ZoyW%&dwg|Ri{SiqmAlT ztF$bcWxl5tOKTHYv-fZU*qqAF?0^~tsjOKJ}26 zf*afYsF#Ko0@{7%X3LUEREXl=^jc`N7htzaQnj=k_Q50a^KUYh1bWZ8n&m-uRKlIJ# zYL?U#eS^7_R>fTM7^V`i;-*rl=~wEDNx8>TxFo5q9s5PGtkQqGzLHYNJx3P-01GW4_*=Y|O0DMQVg#XzDT5YG&so z50jp%6Pov!_ZBnzF~O5<9>sdMt?_;6mqgE&1SGLxtvto-P^zav?%sw{YpmocB(zM! zqKs9C$H)frakP}3XyrM?(rq3qZOr}_*&EqMHqX7Z6Oc@RSam2(f!@0ZvkKW`c0>#R zdIX#Bw&JGMw9@X$vWkVA7UB2oo=%!2ViVN5vMSr~=II{3hL6ecc%@!;dJxD|1x`m>&?9ti*Uj{>T)P||tm3RPB{wVdn8UNo z>>d6jR$7~3Db7GcGsH@3-Vo@VLN&M2GCJAmSwM$_bK4bHSf34+vrDm!1<8K8k+hgz zDT9Rrpyq@!|0;XhQ0+F!o^1QXoj49iq|v0cGKYQrg44(L$Vy?JSi`Ypn*9l3LYqMu z`dqK%vbz<})nqEjZ^J|>yC^Zu@l8J49H00BC8khLuglXuCg)EhkSII8v$Drso<1>& zBSs=IlM;W9PyCF?Dn#~vcU*-|P@; z&Js4uqYMunQ$25|(gAUOz~h&`o*wo>5Hr8LH9WedYcKRwMOE`_?@h9g&8XpNPu;(z z0P{2Ad*JXoxee>J!);|<*2y-_>Q$#?oLr6HQTXKI`Nia-p+o-mtX84tS<6r7wz96> z9B$f~dYy6BWt~D9=P`WkRnyb%>i>Y{e=@u7UFA{B8I*kXdQo!vIp-4@)C-oNX8(_= zch7rD({zYKgb_XoEfd(Bak;*`)}HLp*i;uQlc~hCirz_%iT9=S?i26x>78_k0G~>!5(QgA#j7!n<;*}?7p6KrFN=k92$*a@%8J;Sq2)Hm#V zfGw!yX&saJ+jPvCG@4MSkrpYr!fG}vwbso(< zKp6B^7Z1Ovn$*?PPa5rIr@MMiNtF-+_Pa!=U-spKIlluf1jvq%t@O|trK;L_#hkFG0{YK9W%0A^L zbS1Laz1h2)h3pRb$zAK!xp#kT-L`5wR2>}zXbfFlNlk1|9vT7 z$7r+W558+B4+^AU&ranRTJ*5AMuXsk2X~Lf(o_p%o+7Ct8TlOZJmn7%CO@Opsa=DStZAsgMFF+6-AHy!z0sB_6n&t7jf>@!NeV zCUr9Yv#9Qy_tMMPy9nMF-MJw(3iQRKX8*6O%uc)xX+P`zjqPDL5F~&UO+tpt*iV|2f%m|HHkmbT>$&{?@9IJUd$<|> zj_ESAh$O>y?c1(>JG5^HefzAage5%Uq7)i`Ujh}E>QBdONACNFUe01N6-TNc=_DJJfd?n{C1pg8Wrf%$QPbQo+Mim zpB?Th37CL|77x-`03DE{DPo)*Sn2pSL24M6^X-+Sb{71GOvR=z zK4{&@RFB?EOrL(xn$C3m{e61(iTAhY-6P(&(K|V+F_pA2t)~x2c`5TMddC(Kyxg$@ zKP`IU^1%4Y7}hrS!?hlds;zl(vpTnvC$|gCI+8Gf`HJMj3W6~!HK8m3wv0}<$Uvfq z2JG)nCwHM1{LUNZBKHY-De60~1Bq*4(qjskXkWt{`j(Fx9ZWb&nFP|QjijSg#B<tQllosxtMAo{eC#e`GVYsh>rIKT&tu=P{7_s4#nZjsDhoFiaau^Wmf ziz{}R96uMaEBku7Yv_FgwAll_mxi7Nbo|JS=<6fscLb~g{Zi`o|LL+doXGAm9*$d>SG6V+*E66Z#J5M5yBckGG+* z(OA)Oh_yvwi&b7Q%o44CjuC}y>HtqUQOGK*l0y2QQ|Mpjd73Dk0EOs|_xwNX{Rezh z#ri*vXV0c>vPm}moIQKaZWc(R1w^{QBKCU`I~Eia5z(tyuh*7;U<6M9ett|9~l z7ZoKaLWC$mQ6n`7NPqwVQ2_(|-p|b0l7bDspX=X0@-jQmGtcxnQ=WOs1M*E2bKTU& zi5(-r#I)7T4RwsKi^EP7T*r@8w&DS~uY_OyLAiDE>)EcP%VNS^DXt`+l%O@74f#1e zDIQ|sA+>U2qaKt`Sqm}${FBhHS^Kt&75xhr%+qe~u7Am$OwvZh>v~wej9v}deS_t% z2+`#cc?ysD`ce4<2^co{3Hi#1(ziY(#y{KrggjrGmB_|EDfg6yyVD^ve1 z4sl%#<%D`ZBE)Yx|rDB8QC=L=O8V@Ep9BiE_3Hl`0=8-}X`+2&ywu%&G2 zi|C`JY{!f81YfTjL-pKC^@eKBOL9{hs?T4NuTZd=;;@5TOR40Jro)WlBAbyIxfa9a zPa7DyAurV*xtC-$A(=9%klZn@WLJz}D&I7sP65fHfMi~Pci9NpZ9=WvyevB(}IWy^So zAKFN+bm3V=YV$UER&L&Q~{A~&}jAgTnS>Ny2N0}0OxCMQ8VB}lgQ(TvG#em{Nco7Z4E_tj#Ep zo5Td=XpLbz3uHHYrasx=fdMG&!~nt6~lQU~5h@;q1ocEkj&jtkPRRKDLK?#s|{g!V?TM?9)DwxtwYY zE!9HUPUs0WBbG0Y%Oq?U&=Z1UkTKxgm;!WtJ{SGPL8$r|Rr9I(7_mN8AEO-sRUc@_ zx+Dk5r|skdrOSP~K0X=JY}R(Bd>t)(un?fIzHiGxx;~G*EgCT-E+Mt0PuHhjBf!e7 z)d*^7nTd6JSso`H`ak+gJ|IcrB$`#f_LXcTsuZI7jjv=c5vCI1@Ayhi6S0Gcf8{Hg zMsmeE5&f>O#4qOk7ye58qSF71uf!N|-&f)n}Muf(XD?<+B4f5%sH=zsE+?D{|Y zN>)wg>l!BEuYDz75*7cJe(NhC!sOrimDCV1-zI+LE15C{MEq0wU0=zCz2rCc5@W!9 zU&;B}OLqNFzLKHZ|ILZ3Z~`V_JWcCg`%0D&6+cM*##geM2>IvqJNA-tB36E5FF8U) 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

OQ-xFlYo0a_U1P-#lc5gWJ|;jSq323 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≻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�SU%F}3Hlc}572XLRFvPC2Mg3!?IH~whYIo~ zC3aOEtE*o7RF59rdbCf+Iz4u{pye&sC!gu68tiO+tvc5};&B`)h)8JS2GycN#P2v- z5GTvm^a}Oh;ie(=bq8Wh#|oOLZbylkdSZM!UeHX=aW3})7BGhY=KX5&J?KI>qH+Wfqj-o(>c;! zdZdwnp}+-apI%nRIa`id1FS;2_MjmGfj@0I^-FLuB!Ezmy9@@;+j1Dt*^$_nge}Ey zT+ni%Ri-waRwX#Xq>}p-X08iECJ0n%mw*ez=G@no!&yp!E};yPSO7v^D3#Mt32R*F z%OIBU_Os>euDo7pqk`J|2%f(<7sujqq!C$2Ym&!pZQWk@4!lE{UuWC7XSSbd83kpx0ZkVsx za-ImFQ{pM47NPNY-IkN#Vyh5>K0L-?a)>Rb{s;OEt8q4z62?$ljxj;eErFf@jbvi+ zVYVFH9y5?BNErlWVdExJ4fzNLIn{WDs=?!t4o=h#HUJ(7x`*v&gchTR0!(fB z4-7Tlk@_q_$c}(i1Bt^v02!xjIo1c82j#MCA`s$@vgN?9#SOy;#%}d{N854?0K#R` z%_c~Q)<4FU!`Q)-1olf@iLTmXZ8?=e6ndi=5R;=Er{%=rfIm~OO<_Dyqu6*`&TdM2 zmG=&B60C3&Y&mI7{B#Hl@L z;%!?lo(nC-z{3XwhB;Nsc{X%Nl&)RG72u$mX3HV95Y7|~H=tc+VESKj4rexlNuleM zcSfPQqc?X+RZ<)hG%PE+4W)cDwV0$YKoBOe1?n%JrNvYz6C)t!1?weP%y(=t#2g?y z!4pfDgyPv+jJ+xi!U=k!z5{_d`c`m_*v0^c0oJ8sRBEm*Ck4tp_HCvm>)!Kg2jt% zIh?F41u%9JMlbR&(Q=Eb6}KDa102j$Y^g1mZm_U$<9ETKLp`4@m$FOfi*QU}{tNk* z+j95Yk=q}0iryP=y5@Yz>$H#+Jj7ggt|y0NoMJ z-fk@?*aH%u(oeSHP~7X^qviM(?9I5x=q}j&ynFe@Z}PKncW{_ti zujPc8a5khT5}B<_ZG2^av^W+9SqN*phIr_3Q8-fPvwI+JXm=o-*rJbawN6NL-pTCZD!)IXyC zh$)FO!kRo;xUkGQxXh($%h*WF4T_O`9FK|O8Qy66m%_!F6P$9IcGE zE?B8wQFOyvH58E9rHZ4fs?hkzGepW5%g8&q|Cj6Ol{qil(@lca+3E7(`diy$@yPD-4C`Y=?*3jpPJL>{amFhJ}s2#CRm$NG6G zPeF>c0Zk&Cp6m#T7rmK94TFmCNg)S44Rzp4T8>F0^}>XxSruf?`fE9DSb`+*2vms? zmNW)vxfF^+OH1N_mPt(5ftH-b2s1SG-6V1;{s2gi zZwY^W`c?0A8NEeym>y~8!ps0u3x5c(MAX`AUTYos)grTXOKS;G^MV>9pTOpbwd{S} zJ_77yb+zlkmW{2$gxO1)pc12yu0!b|-r1RZ06^(f-;cBoqc=2B6<&#`2Cz`cp_!v@ zQB9w2@t}1c2vdluqt>OvGz)T=cY&P8RIi@`rMP@fBnk~aDJM8~*-7zliry%5L>1L# zZY1R{!sBA!V4p#=5p^A&IpiL-cYW*oGq(#&m@uQ5a6&g`j__Iw`xf=`IPeogrbqJK zPy_?9Beg|&3Kg)4kzQ*}`xQ9NryzX7aKx=9WKU`-WvDWvpg83&pqE5#K#LVe`Sa#R zd6&yi8D-r7Mv#>HO0RDSoPw#*-VcPjsj)gZ4+R*Y_6Ws`W&;|DnKi~s#nOt%z3TQ@ z_#x~2(r1s|RS1(|CNhF!Il?0Uf`sf*W(37~RQU=c28nEQ9HY=iHCBZSBAwlo$4DlZ zw6zpUrj7C5m6`7zUl4iBO`L#o0h!ALsxfLO*rO1SwUKMP;Nk`tAtmV~YJqM~^a?rJ z0###Fq+&JZGoU__w6PoN*!g>bRSU1YYSj0p} zu+K??$IL0#*g|S_sq>%{B|JP7cpJetGv85z7e~6$ONm$t6m8fE0JD6-x4dgJk8$~o zRuSt#NfiTc5!+napaqj}XO6gAK`R#Jh*~c2;%q0(ej#6qC8yd4KrPnYjn^Sf%_y&= zaV7EaY4#|zV)FG|H$h!?Q%DWO@WQ5^&JjH8Cc-F|c0tx64J}!HSg52HXL!}|<&pQ? zLZ~KGjhGlDuHx~TUQONxomkt370+N~jaQxcjI(9M92i-ve-J5>a^VGrKGZ`P+vOq&46V~cq<+hJ z>I{9vEBZ-%i}JoYBkT1@mY2=Q$9g2opJwC}J(A^7GxDjvg>2`Up$+y>mOsqUXQe~s zU1EkdmJXHoiW%CZZ4bCSSraG|2*KbKE81+!(V1l5C9?pyEA882%Ox+zuFW2f*Anz^ z)pBMmAt?H5kf#J%RQ$PDJzh2XfRl_$`% zf1}R=0DuxYumJ4Bk_y^w%h@++T8|@72ApTNN6Sf3kr5$2&7)xZitp8O97|&AB)51F zP&6mLwdFz}4pK;LI*9f{`)oN>t=tU_7eJX2#@lbnA83+! z%-s=wl$PVE?=A6zHRyebvcW~Ak3n(p2g|~1Cc${jOlAgtEr7uEkG7neLe38>4wa@b z9{i-`L=d%QiPUeloQ$RrgaR^vK&v=(O3S6& zl!V0bOM%z<{lD9CqU{8WSpaum#U*F&j8hWh$Rpw%|X`d9Ab$)scUCRfRPGUZIa70*U_&3X(X~ zc~*=xCJ&P9r7E9vDh?A4?gg}Z|2~ z$E2JdZb57Xte_XP9Nq(B&wy5W8SvK!`uQ@RC99njA|M(R2npsF5r2oni3(t8!y*7_ z7gp9w`Ydo9V=@Sv57(y&M}J?&0?5utp+E=tGJ9iI{)3T$dL%1z!N?$AW^d$)m(3P1 z^0FSu$`>&5iXO?z3@|cS-&`Uq=FHHmdI%nma$!t{Uh`!XGmHV?iHL4VnOWR;U5mk( zP}vTi1QQT!(GY%%gu;kF5~{+J1T79QC z8A6GK#>sQzvIVASIpAQlD}Vwrq=Y--Z)&-TF$DV`9AlW5EQq(XoP(v(77LY?gTeo{ zEf?B4HXqzd()qsRR9g%pBk;zG;@66-D@h^cNMoCb~Q|-Cj9aIap@k3_V2R zq+D8+p_zI}f{kVKatzJld5HCxmBC`<9X*nj!(wE%Pi(}PyL`5afjRm*{El*&BZlU( z-ZpWatmF|R^Z2D=2449r^7QLP8#;-$G4HO6P~ri7kX7-7?*=|uqw9ep=|U9Lpzv4;-_Zi{u%j_ zrz%<_E04{{SNe3>$!3OjY88-`C}w1rH4<}kyJd3141BG>l9d)_%NW)wp_R=Qk2Q3F$ z!3KjfDV+<@K|k7-fRzTongHxf_~<8nIGYn!6WlDEVyxB!wj6axt}sDn4Hqbw{Fz@X zwg90XSY9cNfhY%D_CdW^n8`c`S|6YyNM9L;Y&oSILQRT$BbIjJu$D6?rA~%Gru2C$ z4js{Q2qHz4<}NBK$T$+$Bvg*I{)S;o=9|T-!t}9swcJl!1hp*0s|tJLg>HXjoJJ^ks77X32SdhCs;$Ir2KSGB;X1 zr;j1@+6~n8wfI_J!*U~3R6e|5s4lglf6wV>yfM$r&3VxfT%PH8$>?QqJ6;5-K!2mV z{M{}CF&ki5m#P#f8E6F6)wQF3DFhv4sDIRrUYYZH7ZxQm4wVl_2r-7h(9Gk2 zl@0yMvc$C{xsr|#%Usfh4ai!+4Z?7t7%BONmQzl{VuL4Nh*`1AhZ}13Rng95CFu1B z){Qa?y61$<5!Q9dzUag-b*@TL0{W@?ngj&ee-Pm^0Q; zPc(>L?-*xXulD`YG`D6)_DW`=kQNc5#}OOPQ?!V;Z#mPnidue6)ajVOD}nU>a#j7- zhpVeD*G8*3CK}gS+z*%ac#ht=n9b?()QB!(UnkdWpKOAt#w)lvu-R zNW>!P2{dN_DjsEQnx=G9f1?VuERvm}9-^sCxdUXmv;}nAjiz zgpW>`z~?fZ+Hw9fH$~mDjO5?jNWqoh^p2hO8Nwk1bRmLM+t{r(wJ|k z$&I2t-PFTTlnF5+=um*WzIP3+y=KLum%Blm;QCO|<;BA$612eRuV}N-%T4@)2onJ% zB6c#D7aBA&OGGc;MoLLKxug)mrr z!S{IV`O)5Plph=rByFVX2kYW}V`%1E4-`Z%ccIVW12IV05rUy5`eMDPz>HH507@EK zTQBvBOAOV!FnXh7sZk&k@rFySX_87VGn!`JzW1)EFK4--w%ipR=OWo62ocbd#SrKj z-Vb=G4IkR5nl+AAC4&f}2Vkm6%_7~0Ln~O9_eF1Vg8U`ZO`!@YIXJaeYB8B1FB>}E zC%Da!v5I%tm7^&TAf-p4r_{iPLaVK#Z*)OMj^4rlgaFtP^Aeagz8tE$6WV<`8QFCy?#>BU{b`q>mTWq+~vc z6t6ebzK+}`g)OA6K;42=B0TglhYQvjhFtDmfPw5|1X4fIr;&&q_O1L78rnX#Ubr z6C~dW^pVL zCMxcdUu!vUfqMi)Lf{5$Sn)U3L%7KaQ7^%5HX%~AWB_;TXCr!$qA;vgioil~bB~ro zoCmQY6#*DQOv(6OeK*BSa$x0<*~30)~pg!%xr z?ze9e?~h0=?IWbuQIYwbzA8QpY?f52$0?_TkL-Ibr{xy&P4eGFFo+8OpyhxwLO9|? zxg_)%2>z($fSaj*!kEN|1H+a0$(B?3L$w}$GdWgL^#^P@^BC(7^fRpAJdU5WoNYi_ za--ZqX`-_ZX5{XaH^c;^NmByvkm{d9#xAvQK$~k-pCMQe^`^ASRegSI6_Afr)psqT z|8y0BE@h6f08E}{$~cVG^H6k;OJa7IAyz<>uuAL*Pe^nM)&Jmjgd86zX|U+1z9Ciw z@h|Brh}jF0=9rcPv`mriM497BGc%6s2TeAH8XQ^kLL_a*Pw4l>ArQQ<^4C>}@kW4nc3(sE`P6Pwf(coEXuvHr;Kiaz8R;GZnYwLm?(Fq*5X zb`*kf%03DDGnMh%Sos6>DG1)fPl{Cv#DKhBVvv^OSPI=L^O&;2crfv@mh+mWgaPD1 zkbrO^`HDZY-H;*U?K6{bKJilrXAXB#(IpenVCJzB{mEC=z9{q0MR{#d~mW1)$$;CHhv>{ z2vU~-o`z{TaA1)B&|^_PjLs>3L(7R9!y#ee;DBfPLc@6-qUwqCQGY7but0c8qK(jU z@Q!F!XqM4DG>i_6)N*VfiIza{OT-6-qinf^2f%lc^9tgWo1?UxO%<(*7Z2(exJ6*J zmgA>jl3`w09G{`U7%dm{O)+%saPt#LOc-PRnOP|A-NxRFI;)RrxWy3;L-905^MBL||l6X=YZOoTTM!Js=i~ zDcwdZm;v8pE$2}Yu_RzAz;g866fGxk2#yxk27J3B@L6wax%lrSDWP%l zv;Q3}r@#&N9MTbVze1;_W?OPp2#gRI16X)MHSV9I#dwfBEh+rP@K5^Y>a&pIpl}_2 z5+)m5dH#7BIW5~L=pp1H*$#HxGzka2->vt1xgzL=A=i*|J}%f&pD9t+?l{l!cC(wn*~ zC07JrvHGEa2K`{fmvVgjXg3!bTyz+mBg8VcAQ|XeFf{@+YfAhv1*%)UgGwll>p5WcI262YkcT`*>cpb z`~SFsoN}H2FS^Dm>ai5=AX_A;f?{ZCaZ@p5Kk}=gspxaHvfV_!z1}}0;}O1^=6z)Q ziyZK=e|Y8qaT#l6yNn$0iT^2akK3s^k3=taflb4V6vVqgM|{3dQ5kndo0AgXz=N0E zH`#LLG7FCgDClhCvy5C7KTU9KqqRAyN9FHLnZGCScg|-0Wx$2xz-cH=wh)UazQvL^ zRF^zMuwkn{(?6c!8=vcM2rz=c5c?6?8r+&~`k-lY&=>l{H}YY-Up@X@^mY|^Hd>Oi zLx1?kpjK`*<6qI6)vAAU%$Jt<4&{C>+BWAazpC+kbYjj6(|iQa>8LEd`6+eOftbR5L%N;eI^118bFgHtVMDD zNT=X|ks4#U@FnA@K9A3!vL1^A&>pL&Px|btawr#fQwFPxs<(0FI0@!H1&T)zw1o{Qwb{p)QB{b0qpUI z{#DrZ6dU5u6ZVlk=(Imm?*#e+^B0}~oE|c2XRO;)^ zAyEZc6bzixcY~!tPJ_}HaGTWA1pl<}9{T~1xWH{;olO>>&pgZOSaQHbz@R{0%|FUF zF!C_b6`XC%9CGlKj{DPnRE0r+kGl_vx~mabz*Xio0)z7VMh>D$Fmk6$^0Hv|iQUkQ zg=O}FsXcpqP0%#bcAb!kKhQ5DugPhtePAj`n-lmvUNrR#t4PBocsvJzN})|E;9o!w zT#!U%s(BHg>U$x)fTIOoo-8sm#Xl$` zcLJ;hZ6@RbxT-wum#xe5lek5ujkI)-eeD%}8sdhSo`B$B5`)$$G}zP*ByW`v3ke^( zWd-7|YB8n{P-#(zM3MsO*Eox~E3&N%UpPi8FFcWYUCX&e_Avl^G2?8Kmb$#4P_e?yDYWRCD3h%UjJl}ryW zeQd58(hP{8KeTOZMn!=Ur9(~^zzN(rfgYoD$*Pa!;#S;-ytoA11e%O{U@9%A>YC|^ ziIBpcr9f_!X{ih+fe>L7lPoWYl~`bO=C1fa0TaeQO9?;LH%7#5YT$i=uEF`HlMGm< zv86ZUssXnQxhKue@!Fq0?5nRMr*EOCdRo4?s__ou``G znz6qA&A4bCH;r;BesnQecl6b+QjF;(Yj(I$?$W}uX0@-nq|8VQbhCW&c)_ z0oEsYC#$I4)5$}@dM!BSS*dX7cr z?eghH_3%v2_n!HrP_tjFM$U}3sQSKnQS6CWS0laHe7rPUbH9qrW0PHCf-QBye|h#@ zj5rBjgL`DVAJYF;Hu$lkYJjh_7Mn6YnIV3TNI5Ub@9iO#chR zMMzST=6Geo4B|_yG^OoKW7T4AcucwcDA~YtBnsfztUoCW@eFi!IeX|Q*vUg zV~Ox{AFqY60_uan2X_sxe~NE^WJ1kezfI$jcelLkayaliN&{r+AtxIrN-@nb>&=l9 zTim1Sb!l-^F3vHf*yKW(yu>-Y41dh?g6msNdY;}cG|hJBQZX&Q6<7~in=q+4=o5XA z)#qt%=Qfp9m$zD8a)n%x>PFT%jU%iD6E`^e)67%8Th(70tyhbkNC<$iMM$kf2+jc; zOe;rYIU$*MoSXHIIp{OfYP5Te+O#xU#ktX}nCR9sy~(UdW2^KQ^Hz&;L{(izK6k6B zPAre!PmG;zYFIS@dv8HWWPDvTtoF5P@z+zC%UuZdyHnI>f zKhgU{(hS?RocJXn9a0N~ndr0W-C@c9$BCy-U=_a^i<1(BFVUkb35J1s1e9)dDS;;| znD|P|spX`89%yVF$Av)1PFqgTCXmrU!=;OIs%V#%<1$IPFb^8e0C0X^YdOVz28d2J zULT<8bl{te+|A2}`%JomqmOX&cbmm({Ho~HYW~XT6*+rMwQ*&%p<}Okop8g{R2Q#8 z+k9(YuZG4b7V1bD3Wz+n@Nqk1>ZW_2`?T4qg25vq ztD7#qu}a&K$H#7ebDvtdzkeuJWyXSu2aavq+G)jY6}uhUzxtoUKe)g5_BBnHHGk?z z&5k#WcYn0@rdJ;HZSFAbHqu*94|@ELdd)kotKTxOrfPHf#gS_ts4>GidqtDJ>!0s1 z{#2h%eTyo!8&mh<;TxWNt6N}f-7h~q*yOR7e7hd2JhkE8s~0_A<&FF?AGUq8WtXX; z_tt#eYiQo%m)0MnEy26P;i+okJEof`iw z+_$;A!Oxer+F0|c&F}cD&J4cPuu{pyX-SvjH zoYivo{R3|t;U3WOtNl~X^t$iBH9z0kv&N{AGh7c;ShPRBq4AfMg4b0aaOV3Hf6LF` z(zfwzP;JjC+9W&TlZ&cTzdWJZRrXN@AcNIHh4j`wZ9Io+vT?W zi^3)EE-5VjlFCCzA@bE-oU~;|LE~<{Yx**X~49Y&Bom4H!KR@e)GSc|NF?1$$xBX-Rp{jwSL~dXNGIeumPQ3@;)#z zcjgBbl0S4$p1SdYach?6TuYKOG`pHr8nSbWZE$IEX-aRiF`+S9iJ)RAXt$ai1 zwMKsoE~?o%ci#`ac5LkVmAQZV$xT&zUH#%?*B;x{zT&n24t5$<;JS11_xp+}JZ+5Z za6rvyHP<V^N)MBEgP`b zb;qBzZX2}w!gG_pJ$~qqXA9eZ=R4QYS+eTK-H$rj->|dF`O{UFy!Pw>_5Hf2`hR?0 B7(M_1 diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/wasm.worker-Bj4v8ZR2.js b/crates/rocket-sense-server/static/subtr-actor/stats/assets/wasm.worker-Bj4v8ZR2.js deleted file mode 100644 index 5e7d7d50..00000000 --- a/crates/rocket-sense-server/static/subtr-actor/stats/assets/wasm.worker-Bj4v8ZR2.js +++ /dev/null @@ -1 +0,0 @@ -(function(){"use strict";function ge(e,t,n){const r=G(e,c.__wbindgen_malloc),o=w,a=c.get_replay_frames_data_json_with_progress(r,o,t,Z(n)?4294967297:n>>>0);if(a[3])throw V(a[2]);var i=W(a[0],a[1]).slice();return c.__wbindgen_free(a[0],a[1]*1,1),i}function be(e){const t=G(e,c.__wbindgen_malloc),n=w,r=c.validate_replay(t,n);if(r[2])throw V(r[1]);return V(r[0])}function ye(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(I(t,n))},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=L(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=w;O().setInt32(t+4,a,!0),O().setInt32(t+0,o,!0)},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var a=Z(o)?0:L(o,c.__wbindgen_malloc,c.__wbindgen_realloc),i=w;O().setInt32(t+4,i,!0),O().setInt32(t+0,a,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(I(t,n))},__wbg_call_4708e0c13bdc8e95:function(){return K(function(t,n,r){return t.call(n,r)},arguments)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(I(t,n))}finally{c.__wbindgen_free(r,o,1)}},__wbg_log_d095c16a726a937c:function(t,n){console.log(I(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(W(t,n))},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return K(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=L(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=w;O().setInt32(t+4,a,!0),O().setInt32(t+0,o,!0)},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return I(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=c.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function pe(e){const t=c.__externref_table_alloc();return c.__wbindgen_externrefs.set(t,e),t}function W(e,t){return e=e>>>0,S().subarray(e/1,e/1+t)}let x=null;function O(){return(x===null||x.buffer.detached===!0||x.buffer.detached===void 0&&x.buffer!==c.memory.buffer)&&(x=new DataView(c.memory.buffer)),x}function I(e,t){return e=e>>>0,we(e,t)}let E=null;function S(){return(E===null||E.byteLength===0)&&(E=new Uint8Array(c.memory.buffer)),E}function K(e,t){try{return e.apply(this,t)}catch(n){const r=pe(n);c.__wbindgen_exn_store(r)}}function Z(e){return e==null}function G(e,t){const n=t(e.length*1,1)>>>0;return S().set(e,n/1),w=e.length,n}function L(e,t,n){if(n===void 0){const s=D.encode(e),f=t(s.length,1)>>>0;return S().subarray(f,f+s.length).set(s),w=s.length,f}let r=e.length,o=t(r,1)>>>0;const a=S();let i=0;for(;i127)break;a[o+i]=s}if(i!==r){i!==0&&(e=e.slice(i)),o=n(o,r,r=i+e.length*3,1)>>>0;const s=S().subarray(o+i,o+r),f=D.encodeInto(e,s);i+=f.written,o=n(o,r,i,1)>>>0}return w=i,o}function V(e){const t=c.__wbindgen_externrefs.get(e);return c.__externref_table_dealloc(e),t}let R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});R.decode();const he=2146435072;let j=0;function we(e,t){return j+=t,j>=he&&(R=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),R.decode(),j=t),R.decode(S().subarray(e,e+t))}const D=new TextEncoder;"encodeInto"in D||(D.encodeInto=function(e,t){const n=D.encode(e);return t.set(n),{read:e.length,written:n.length}});let w=0,c;function ke(e,t){return c=e.exports,x=null,E=null,c.__wbindgen_start(),c}async function xe(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function Ae(e){if(c!==void 0)return c;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-Xy9_Ya42.wasm",self.location.href).href,self.location.href));const t=ye();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await xe(await e,t);return ke(n)}const q="octane",ve={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Oe={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Se(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Te=Se([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function J(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function Q(e){if(!e)return null;switch(J(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function ee(e){return e?Oe[J(e)]??null:null}function Ie(e){return Q(e)??ee(e)}function Ee(e){return ve[e]}function H(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),H(r[1],t))}}}function De(e){const t=Q(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const i=Te[n];if(i)return i}const r=ee(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return q;const a=[];for(const[i,s]of Object.entries(o))a.push(i),H(s,a);for(const i of a){const s=Ie(i);if(s)return s}return q}function k(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function B(e,t){return Math.max(0,e-t)}function te(e){return new Map(e.map(t=>[t.id,t]))}const y=70,ne=73,Be=3072,Pe=4096,Ne=1792,Re=4184,ze=940,Me=3308,Fe=2816,re=3584,Ce=2484,Le=1788,Ve=2300,je=2048,He=1036,Ue=1024,Ye=1024,$e=4240,oe=34;function z(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function M(e,t,n,r,o){z(e,-t,n,r,o),z(e,t,n,r,o)}function U(e,t,n,r,o){z(e,t,-n,r,o),z(e,t,n,r,o)}function T(e,t,n,r,o){M(e,t,-n,r,o),M(e,t,n,r,o)}function Xe(){const e=[];return U(e,0,$e,y,"small"),T(e,Ne,Re,y,"small"),T(e,Be,Pe,ne,"big"),T(e,ze,Me,y,"small"),U(e,0,Fe,y,"small"),T(e,re,Ce,y,"small"),T(e,Le,Ve,y,"small"),T(e,je,He,y,"small"),U(e,0,Ye,y,"small"),M(e,re,0,ne,"big"),M(e,Ue,0,y,"small"),e}function Y(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function We(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ke(e){let t=null;for(const n of e){const r=Y(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ze(e,t,n,r){const o=te(t),a=new Map;for(const l of e.boost_pad_events??[]){if(Y(l.kind)===null){r?.advance();continue}const u=a.get(l.pad_id);u?u.push(l):a.set(l.pad_id,[l]),r?.advance()}const i=e.boost_pads;if(!i||i.length===0)return r?.advance(oe),Xe();const s=[...i].sort((l,d)=>l.index-d.index),f=new Array(s.length);for(let l=0;l=72?"big":"small"),p=b.sort((_,h)=>_.time-h.time),m=new Array(p.length);for(let _=0;_=0?e.frame:null}function Ge(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=$(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function qe(e,t){return`bookmark:${$(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Je(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const a=Ge(r,e);return a===null?[]:[{id:qe(r,o),description:r.description,frame:$(r),time:B(a,t)}]})}function Qe(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const A={distance:270,height:100,pitch:-4,fov:110},et=.005,tt=Number.POSITIVE_INFINITY,nt=!0,rt=.15,ot=10,at=.1,it=10;function ae(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function ie(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function se(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ce(e,t){const n=se(se(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function st(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:ie(t.rotation)}}function le(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function ue(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function de(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ct={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function lt(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ct};const t=e.Data.rigid_body,n=ie(t.rotation),r=n?ae(ce({x:1,y:0,z:0},n)):null,o=n?ae(ce({x:0,y:0,z:1},n)):null,a=e.Data.camera,i=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:ue(a?.pitch),cameraYaw:ue(a?.yaw),throttle:le(i?.throttle),steer:le(i?.steer),dodgeImpulse:de(i?.dodge_impulse),dodgeTorque:de(i?.dodge_torque)}}function ut(e){return e.position!==null}function dt(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=P(t[r].position);for(let a=r+1;aat){o=P(s.position);continue}if(ft(o,s.position)>it){o=P(s.position);continue}const u={x:(i.linearVelocity.x+s.linearVelocity.x)/2,y:(i.linearVelocity.y+s.linearVelocity.y)/2,z:(i.linearVelocity.z+s.linearVelocity.z)/2},b={x:o.x+u.x*d,y:o.y+u.y*d,z:o.z+u.z*d},g=(a-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:b.x*(1-g)+s.position.x*g,y:b.y*(1-g)+s.position.y*g,z:b.z*(1-g)+s.position.z*g},s.position=P(o)}}function _t(e){return{motionSmoothing:e.motionSmoothing??nt,smoothingBlendFactor:e.smoothingBlendFactor??rt,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??ot)}}function _e(){return typeof performance>"u"?Date.now():performance.now()}function gt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((i,[,s])=>i+s.frames.length,0),r=e.boost_pads?.length??oe,o=e.boost_pad_events?.length??0,a=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,a)].reduce((i,s)=>i+s,0)}function bt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function yt(e,t,n={}){const r=gt(e),o=bt(e);let a=0,i=0,s=-1,f=-1,l=_e();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,u=n.progressReportMinDelta??et,b=Math.max(1,n.progressReportFrameInterval??tt),g=()=>{if(!t)return!1;const m=Math.max(0,Math.min(1,a/r));if(m<=s)return!1;const h=i-f>=b;return m>=1||m-s>=u||h?(s=m,f=i,t(m,{progress:m,processedFrames:Math.min(i,o),totalFrames:o,processedUnits:a,totalUnits:r}),!0):!1},p=(m=!1)=>{const _=_e();return!m&&_-lr===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function kt(e){const t=wt(e?.stats);return{fov:v(t,"CameraFOV")??A.fov,height:v(t,"CameraHeight")??A.height,pitch:v(t,"CameraPitch")??A.pitch,distance:v(t,"CameraDistance")??A.distance,stiffness:v(t,"CameraStiffness")??A.stiffness,swivelSpeed:v(t,"CameraSwivelSpeed")??A.swivelSpeed,transitionSpeed:v(t,"CameraTransitionSpeed")??A.transitionSpeed}}function xt(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const a of o)r.set(a.name,a),a.remote_id&&n.set(k(a.remote_id),a),t?.advance();return{byId:n,byName:r}}function At(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(k(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function vt(e,t){const n=new Set(e.meta.team_zero.map(f=>f.name)),r=new Set(e.meta.team_one.map(f=>f.name)),o=xt(e,t),a=At(e),i=[];let s=0;for(const[f,l]of e.frame_data.players){const d=new Array(l.frames.length);let u;for(let m=0;mt.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Tt(e,t,n){const r=e.player?k(e.player):null,o=r?t.get(r)?.name??r:null,a=o?`${o} scored`:"Goal";return{id:X("goal",e.frame,r??"team"),time:B(e.time,n),frame:e.frame,kind:"goal",label:a,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function It(e,t,n){const r=k(e.player),o=t.get(r)?.name??r,a=e.kind.toLowerCase(),i=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:X(a,e.frame,r),time:B(e.time,n),frame:e.frame,kind:a,label:`${o} ${i}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Et(e,t,n){const r=k(e.attacker),o=k(e.victim),a=t.get(r),i=t.get(o);return{id:X("demo",e.frame,`${r}:${o}`),time:B(e.time,n),frame:e.frame,kind:"demo",label:`${a?.name??r} demoed ${i?.name??o}`,shortLabel:"D",playerId:r,playerName:a?.name??r,secondaryPlayerId:o,secondaryPlayerName:i?.name??o,location:e.victim_location,isTeamZero:a?.isTeamZero??null}}function Dt(e,t,n,r,o){const a=te(t),i=[];for(const s of e.goal_events??[])i.push(Tt(s,a,r)),o?.advance();for(const s of e.player_stat_events??[])i.push(It(s,a,r)),o?.advance();for(const s of e.demolish_infos??[])i.push(Et(s,a,r)),o?.advance();for(const s of n)i.push(Qe(s));return i.length===0&&o?.advance(),St(i)}function Bt(e,t={}){const n=yt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=pt(e,n),a=vt(e,n),i=Ot(e,n),s=_t(t);fe(o,i,s);for(const u of a)fe(o,u.frames,s);const f=Ze(e,a,r,n),l=Je(e,r,n),d=Dt(e,a,l,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:i,boostPads:f,players:a,tickMarks:l,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(u=>u.name),teamOneNames:e.meta.team_one.map(u=>u.name)}}function F(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,F(n)]));if(Array.isArray(e))return e.map(t=>F(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=F(r);return t}return e}async function Pt(){const e=Ae;typeof e=="function"&&await e()}function N(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Pt();const t=new Uint8Array(e.data.bytes);N({type:"progress",progress:{stage:"validating",progress:0}});const n=F(be(t));if(!n.valid)throw new Error(n.error??"Replay validation failed");const r=ge(t,s=>{N({type:"progress",progress:s})},e.data.reportEveryNFrames);N({type:"progress",progress:{stage:"normalizing",progress:0}});const o=JSON.parse(new TextDecoder().decode(r)),a=Bt(o,{motionSmoothing:e.data.motionSmoothing,smoothingBlendFactor:e.data.smoothingBlendFactor,smoothingAnchorInterval:e.data.smoothingAnchorInterval,progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(s){N({type:"progress",progress:{stage:"normalizing",progress:s}})}}),i=new TextEncoder().encode(JSON.stringify(a));self.postMessage({type:"done",rawBuffer:r.buffer,replayBuffer:i.buffer},[r.buffer,i.buffer])}catch(t){N({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/assets/wasm.worker-zm5sJFWS.js b/crates/rocket-sense-server/static/subtr-actor/stats/assets/wasm.worker-zm5sJFWS.js new file mode 100644 index 00000000..1f671e38 --- /dev/null +++ b/crates/rocket-sense-server/static/subtr-actor/stats/assets/wasm.worker-zm5sJFWS.js @@ -0,0 +1,2 @@ +(function(){"use strict";function ge(e,t,n){const r=q(e,c.__wbindgen_malloc),o=p,a=c.get_replay_frames_data_json_with_progress(r,o,t,v(n)?4294967297:n>>>0);if(a[3])throw Y(a[2]);var i=H(a[0],a[1]).slice();return c.__wbindgen_free(a[0],a[1]*1,1),i}function ye(e){const t=q(e,c.__wbindgen_malloc),n=p,r=c.validate_replay(t,n);if(r[2])throw Y(r[1]);return Y(r[0])}function pe(){return{__proto__:null,"./rl_replay_subtr_actor_bg.js":{__proto__:null,__wbg_Error_8c4e43fe74559d73:function(t,n){return Error(E(t,n))},__wbg_Number_04624de7d0e8332d:function(t){return Number(t)},__wbg_String_8f0eb39a4a4c2f66:function(t,n){const r=String(n),o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_bigint_get_as_i64_8fcf4ce7f1ca72a2:function(t,n){const r=n,o=typeof r=="bigint"?r:void 0;y().setBigInt64(t+8,v(o)?BigInt(0):o,!0),y().setInt32(t+0,!v(o),!0)},__wbg___wbindgen_boolean_get_bbbb1c18aa2f5e25:function(t){const n=t,r=typeof n=="boolean"?n:void 0;return v(r)?16777215:r?1:0},__wbg___wbindgen_debug_string_0bc8482c6e3508ae:function(t,n){const r=U(n),o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg___wbindgen_in_47fa6863be6f2f25:function(t,n){return t in n},__wbg___wbindgen_is_bigint_31b12575b56f32fc:function(t){return typeof t=="bigint"},__wbg___wbindgen_is_function_0095a73b8b156f76:function(t){return typeof t=="function"},__wbg___wbindgen_is_object_5ae8e5880f2c1fbd:function(t){const n=t;return typeof n=="object"&&n!==null},__wbg___wbindgen_is_string_cd444516edc5b180:function(t){return typeof t=="string"},__wbg___wbindgen_is_undefined_9e4d92534c42d778:function(t){return t===void 0},__wbg___wbindgen_jsval_eq_11888390b0186270:function(t,n){return t===n},__wbg___wbindgen_jsval_loose_eq_9dd77d8cd6671811:function(t,n){return t==n},__wbg___wbindgen_number_get_8ff4255516ccad3e:function(t,n){const r=n,o=typeof r=="number"?r:void 0;y().setFloat64(t+8,v(o)?0:o,!0),y().setInt32(t+0,!v(o),!0)},__wbg___wbindgen_string_get_72fb696202c56729:function(t,n){const r=n,o=typeof r=="string"?r:void 0;var a=v(o)?0:M(o,c.__wbindgen_malloc,c.__wbindgen_realloc),i=p;y().setInt32(t+4,i,!0),y().setInt32(t+0,a,!0)},__wbg___wbindgen_throw_be289d5034ed271b:function(t,n){throw new Error(E(t,n))},__wbg_call_389efe28435a9388:function(){return D(function(t,n){return t.call(n)},arguments)},__wbg_call_4708e0c13bdc8e95:function(){return D(function(t,n,r){return t.call(n,r)},arguments)},__wbg_done_57b39ecd9addfe81:function(t){return t.done},__wbg_entries_58c7934c745daac7:function(t){return Object.entries(t)},__wbg_error_7534b8e9a36f1ab4:function(t,n){let r,o;try{r=t,o=n,console.error(E(t,n))}finally{c.__wbindgen_free(r,o,1)}},__wbg_get_9b94d73e6221f75c:function(t,n){return t[n>>>0]},__wbg_get_b3ed3ad4be2bc8ac:function(){return D(function(t,n){return Reflect.get(t,n)},arguments)},__wbg_get_with_ref_key_1dc361bd10053bfe:function(t,n){return t[n]},__wbg_instanceof_ArrayBuffer_c367199e2fa2aa04:function(t){let n;try{n=t instanceof ArrayBuffer}catch{n=!1}return n},__wbg_instanceof_Map_53af74335dec57f4:function(t){let n;try{n=t instanceof Map}catch{n=!1}return n},__wbg_instanceof_Uint8Array_9b9075935c74707c:function(t){let n;try{n=t instanceof Uint8Array}catch{n=!1}return n},__wbg_isArray_d314bb98fcf08331:function(t){return Array.isArray(t)},__wbg_isSafeInteger_bfbc7332a9768d2a:function(t){return Number.isSafeInteger(t)},__wbg_iterator_6ff6560ca1568e55:function(){return Symbol.iterator},__wbg_length_32ed9a279acd054c:function(t){return t.length},__wbg_length_35a7bace40f36eac:function(t){return t.length},__wbg_log_f1a1b5cd3f9c7822:function(t,n){console.log(E(t,n))},__wbg_new_361308b2356cecd0:function(){return new Object},__wbg_new_3eb36ae241fe6f44:function(){return new Array},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_new_dca287b076112a51:function(){return new Map},__wbg_new_dd2b680c8bf6ae29:function(t){return new Uint8Array(t)},__wbg_new_from_slice_a3d2629dc1826784:function(t,n){return new Uint8Array(H(t,n))},__wbg_next_3482f54c49e8af19:function(){return D(function(t){return t.next()},arguments)},__wbg_next_418f80d8f5303233:function(t){return t.next},__wbg_prototypesetcall_bdcdcc5842e4d77d:function(t,n,r){Uint8Array.prototype.set.call(H(t,n),r)},__wbg_push_8ffdcb2063340ba5:function(t,n){return t.push(n)},__wbg_set_1eb0999cf5d27fc8:function(t,n,r){return t.set(n,r)},__wbg_set_3f1d0b984ed272ed:function(t,n,r){t[n]=r},__wbg_set_6cb8631f80447a67:function(){return D(function(t,n,r){return Reflect.set(t,n,r)},arguments)},__wbg_set_f43e577aea94465b:function(t,n,r){t[n>>>0]=r},__wbg_stack_0ed75d68575b0f3c:function(t,n){const r=n.stack,o=M(r,c.__wbindgen_malloc,c.__wbindgen_realloc),a=p;y().setInt32(t+4,a,!0),y().setInt32(t+0,o,!0)},__wbg_value_0546255b415e96c1:function(t){return t.value},__wbindgen_cast_0000000000000001:function(t){return t},__wbindgen_cast_0000000000000002:function(t){return t},__wbindgen_cast_0000000000000003:function(t,n){return E(t,n)},__wbindgen_cast_0000000000000004:function(t){return BigInt.asUintN(64,t)},__wbindgen_init_externref_table:function(){const t=c.__wbindgen_externrefs,n=t.grow(4);t.set(0,void 0),t.set(n+0,void 0),t.set(n+1,null),t.set(n+2,!0),t.set(n+3,!1)}}}}function he(e){const t=c.__externref_table_alloc();return c.__wbindgen_externrefs.set(t,e),t}function U(e){const t=typeof e;if(t=="number"||t=="boolean"||e==null)return`${e}`;if(t=="string")return`"${e}"`;if(t=="symbol"){const o=e.description;return o==null?"Symbol":`Symbol(${o})`}if(t=="function"){const o=e.name;return typeof o=="string"&&o.length>0?`Function(${o})`:"Function"}if(Array.isArray(e)){const o=e.length;let a="[";o>0&&(a+=U(e[0]));for(let i=1;i1)r=n[1];else return toString.call(e);if(r=="Object")try{return"Object("+JSON.stringify(e)+")"}catch{return"Object"}return e instanceof Error?`${e.name}: ${e.message} +${e.stack}`:r}function H(e,t){return e=e>>>0,I().subarray(e/1,e/1+t)}let A=null;function y(){return(A===null||A.buffer.detached===!0||A.buffer.detached===void 0&&A.buffer!==c.memory.buffer)&&(A=new DataView(c.memory.buffer)),A}function E(e,t){return e=e>>>0,ke(e,t)}let B=null;function I(){return(B===null||B.byteLength===0)&&(B=new Uint8Array(c.memory.buffer)),B}function D(e,t){try{return e.apply(this,t)}catch(n){const r=he(n);c.__wbindgen_exn_store(r)}}function v(e){return e==null}function q(e,t){const n=t(e.length*1,1)>>>0;return I().set(e,n/1),p=e.length,n}function M(e,t,n){if(n===void 0){const s=N.encode(e),m=t(s.length,1)>>>0;return I().subarray(m,m+s.length).set(s),p=s.length,m}let r=e.length,o=t(r,1)>>>0;const a=I();let i=0;for(;i127)break;a[o+i]=s}if(i!==r){i!==0&&(e=e.slice(i)),o=n(o,r,r=i+e.length*3,1)>>>0;const s=I().subarray(o+i,o+r),m=N.encodeInto(e,s);i+=m.written,o=n(o,r,i,1)>>>0}return p=i,o}function Y(e){const t=c.__wbindgen_externrefs.get(e);return c.__externref_table_dealloc(e),t}let z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});z.decode();const we=2146435072;let $=0;function ke(e,t){return $+=t,$>=we&&(z=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),z.decode(),$=t),z.decode(I().subarray(e,e+t))}const N=new TextEncoder;"encodeInto"in N||(N.encodeInto=function(e,t){const n=N.encode(e);return t.set(n),{read:e.length,written:n.length}});let p=0,c;function xe(e,t){return c=e.exports,A=null,B=null,c.__wbindgen_start(),c}async function Ae(e,t){if(typeof Response=="function"&&e instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(e,t)}catch(o){if(e.ok&&n(e.type)&&e.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",o);else throw o}const r=await e.arrayBuffer();return await WebAssembly.instantiate(r,t)}else{const r=await WebAssembly.instantiate(e,t);return r instanceof WebAssembly.Instance?{instance:r,module:e}:r}function n(r){switch(r){case"basic":case"cors":case"default":return!0}return!1}}async function ve(e){if(c!==void 0)return c;e!==void 0&&(Object.getPrototypeOf(e)===Object.prototype?{module_or_path:e}=e:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),e===void 0&&(e=new URL(""+new URL("rl_replay_subtr_actor_bg-BjSK7HJ9.wasm",self.location.href).href,self.location.href));const t=pe();(typeof e=="string"||typeof Request=="function"&&e instanceof Request||typeof URL=="function"&&e instanceof URL)&&(e=fetch(e));const{instance:n,module:r}=await Ae(await e,t);return xe(n)}const J="octane",Se={breakout:{kind:"breakout",label:"Breakout",length:131.4924,width:80.521,height:30.3,slopeDegrees:-.9795,groundHeightFront:43.8976,groundHeightBack:46.1454,offset:13.88,elevation:17.05},dominus:{kind:"dominus",label:"Dominus",length:127.9268,width:83.27995,height:31.3,slopeDegrees:-.9635,groundHeightFront:47.2238,groundHeightBack:49.3749,offset:13.88,elevation:17.05},hybrid:{kind:"hybrid",label:"Hybrid",length:127.0192,width:82.18787,height:34.15907,slopeDegrees:-.5499,groundHeightFront:54.0982,groundHeightBack:55.3173,offset:13.88,elevation:17.05},merc:{kind:"merc",label:"Merc",length:120.72,width:76.71,height:41.66,slopeDegrees:.28,groundHeightFront:60.76,groundHeightBack:61.35,offset:13.88,elevation:17.05},octane:{kind:"octane",label:"Octane",length:118.0074,width:84.19941,height:36.15907,slopeDegrees:-.5518,groundHeightFront:55.1449,groundHeightBack:56.2814,offset:13.88,elevation:17.05},plank:{kind:"plank",label:"Plank",length:128.8198,width:84.67036,height:29.3944,slopeDegrees:-.3447,groundHeightFront:44.998,groundHeightBack:45.773,offset:13.88,elevation:17.05}},Oe={"16batmobile":"plank","70dodgechargerrt":"dominus","89batmobile":"dominus","99nissanskylinegtrr34":"hybrid",aftershock:"dominus",animusgp:"breakout",artemis:"plank",artemisg1:"plank",artemisgxt:"plank",astonmartinvalhalla:"breakout",backfire:"octane",backtothefuturetimemachine:"dominus",batmobile1989:"dominus",battlebus:"merc",breakout:"breakout",breakouttypes:"breakout",centio:"plank",centiov17:"plank",cyclone:"breakout",deloreantimemachine:"dominus",diestro:"dominus",dominus:"dominus",dominusgt:"dominus",endo:"hybrid",esper:"hybrid",fast4wd:"octane",fennec:"octane",gazellagt:"dominus",gizmo:"octane",grog:"octane",guardian:"dominus",guardiang1:"dominus",guardiangxt:"dominus",hotshot:"dominus",icecharger:"dominus",imperatordt5:"dominus",jager619rs:"hybrid",jurassicjeepwrangler:"octane",mantis:"plank",marauder:"octane",masamune:"dominus",maverick:"dominus",maverickg1:"dominus",maverickgxt:"dominus",mclaren570s:"dominus",merc:"merc",mr11:"dominus",nimbus:"hybrid",octane:"octane",octanezsr:"octane",paladin:"plank",proteus:"octane",ripper:"dominus",roadhog:"octane",roadhogxl:"octane",samurai:"breakout",scarab:"octane",takumi:"octane",takumirxt:"octane",thedarkknightstumbler:"octane",thedarkknightrisestumbler:"octane",triton:"octane",twinmilliii:"plank",twinzer:"octane",venom:"hybrid",vulcan:"octane",werewolf:"dominus",xdevil:"hybrid",xdevilmk2:"hybrid",zippy:"octane","1966cadillacdeville":"breakout",ace:"breakout",admiral:"dominus",azura:"breakout",behemoth:"merc",beskar:"hybrid",bmwm3e30:"dominus",bmwm2racing:"dominus",bmwm4gt3evo:"dominus",bmw1series:"octane",bmw1seriesrle:"octane",bmwm240i:"dominus",bugatticentodieci:"plank",bumblebee:"dominus",bumblebeecar:"dominus",chevroletastro:"merc",chevroletcorvettestingray:"breakout",chevroletcorvettezr1:"breakout",chryslerpacifica:"hybrid",corlay:"octane",cyberpunkquadra:"breakout",defenderd7xr:"merc",diesel:"breakout",dodgechargerdaytonascatpack:"dominus",dodgerchargerdaytonascatpack:"dominus",dominusneon:"dominus",emperor:"breakout",emperorii:"breakout",emperoriifrozen:"breakout",emperoriiscorched:"breakout",fastfuriousdodgecharger:"dominus",fastandfuriousdodgecharger:"dominus",fastandfuriousdodgechargersrthellcat:"dominus",fastfuriousmazdarx7:"breakout",fastandfuriousmazdarx7:"breakout",fastfuriousnissanskyline:"hybrid",fastandfuriousnissanskyline:"hybrid",fastfuriouspontiacfiero:"hybrid",fastandfuriouspontiacfiero:"hybrid",fenneczrf:"octane",ferrari296gtb:"dominus",ferrarif40:"breakout",fordbroncoraptorrle:"merc",fordf150rle:"octane",fordmustanggtd:"dominus",fordmustangshelbygt500:"dominus",fordmustangmacherle:"octane",fordmustangshelbygt350rrle:"dominus",formula12021:"plank",formula12022:"plank",fuse:"breakout",havoc:"breakout",hearse:"hybrid",homerscar:"dominus",hondacivictyper:"octane",hondacivictyperle:"octane",jackal:"octane",jeepwranglerrubicon:"octane",kitt:"dominus",knightindustries2000:"dominus",komodo:"breakout",lamborghinicountachlpi8004:"dominus",lamborghinihuracansto:"dominus",lamborghiniurus:"hybrid",lamborghiniurusse:"hybrid",lightningmcqueen:"dominus",lightningmcqueencar:"dominus",lockjaw:"dominus",luiginsr:"octane",maestro:"dominus",magnifique:"dominus",magnifiquegxt:"dominus",mako:"breakout",mamba:"dominus",mario:"octane",marionsr:"octane",maven:"dominus",mclaren765lt:"dominus",mclarenp1:"dominus",mclarensenna:"breakout",megastar:"breakout",mercedesamggt63s:"dominus",mercedesbenzcla:"dominus",mudcat:"octane",mudcatg1:"octane",mudcatgxt:"octane",nissan350z:"dominus",nissanfairladyz:"dominus",nissanfairladyzrle:"dominus",nissansilvia:"hybrid",nissansilviarle:"hybrid",nissanskylinegtr:"hybrid",nissanskylinegtrr32:"hybrid",nissanzperformance:"dominus",nissanzperformancecar:"dominus",outlaw:"octane",outlawgxt:"octane",pattywagon:"octane",pizzaplanetdeliverytruck:"merc",pontiacfirebird:"breakout",porsche918spyder:"breakout",porsche911gt3rs:"dominus",porsche911turbo:"dominus",porsche911turborle:"dominus",primo:"hybrid",psyclops:"octane",quadraturbor:"breakout",ram1500rho:"hybrid",recoilav:"merc",redline:"breakout",revolver:"breakout",rivianr1s:"hybrid",scorpion:"dominus",shokunin:"octane",shokuningxt:"octane",stampede:"merc",teslacybertruck:"hybrid",themysterymachine:"merc",theincredibile:"breakout",turtlevan:"merc",voidburn:"hybrid",volkswagengolfgti:"octane",volkswagengolfgtirle:"octane",xentari:"octane",zefira:"dominus",breakoutx:"breakout",nexus:"breakout",nexussc:"breakout",whiplash:"breakout","007sastonmartindbs":"dominus","007sastonmartinvalhalla":"dominus",batmobile2022:"dominus",chikara:"dominus",chikarag1:"dominus",chikaragxt:"dominus",ecto1:"dominus",ecto1ghostbusters:"dominus",fastfuriousdodgechargersrthellcat:"dominus",gazellagthotwheels:"dominus",kittknightrider:"dominus",lamborghinihuracnsto:"dominus",mr11hotwheels:"dominus",nascarchevroletcamaro:"dominus",nascarfordmustang:"dominus",nascartoyotacamry:"dominus",nascarnextgenchevroletcamaro:"dominus",nascarnextgenchevroletcamaro2022:"dominus",nascarnextgenfordmustang:"dominus",nascarnextgenfordmustang2022:"dominus",nascarnextgentoyotacamry:"dominus",nascarnextgentoyotacamry2022:"dominus",nemesis:"dominus",peregrinett:"dominus",perigrinett:"dominus",ronin:"dominus",roning1:"dominus",roningxt:"dominus",samusgunship:"dominus",samusgunshipnintendoexclusive:"dominus",tyranno:"dominus",tyrannogxt:"dominus",insidio:"hybrid",jager619:"hybrid",jger619:"hybrid",jger619rs:"hybrid",r3mx:"hybrid",r3mxgxt:"hybrid",tygris:"hybrid",nomad:"merc",nomadgxt:"merc","007sastonmartindb5":"octane",armadillo:"octane",armadilloxboxexclusive:"octane",boneshaker:"octane",dingo:"octane",fast4wdhotwheels:"octane",harbinger:"octane",harbingergxt:"octane",hogsticker:"octane",hogstickerxboxexclusive:"octane",sweettooth:"octane",sweettoothplaystationexclusive:"octane",thedarkknighttumbler:"octane",batmobile2016:"plank",sentinel:"plank"};function Ie(e){const t={};for(const[n,r]of e)for(const o of n)t[o]=r;return t}const Te=Ie([[[22,1416,1894,1932,3031,3311,6243,6489,7651,7696,7890,7901,8006,8360,8361,8565,8566,8669,9357,10697,10698,10817,10822,11038,11394,11505,11677,11800,11933,11949,12173,12315,12361,12484],"breakout"],[[29,403,597,600,1018,1171,1286,1675,1689,1883,2070,2268,2666,2950,2951,3155,3156,3157,3265,3426,3875,3879,3880,4014,4155,4367,4472,4473,4745,4770,4781,4861,4864,5709,5773,5823,5858,5964,5979,6122,6244,6247,6260,6836,7211,7337,7338,7341,7343,7415,7512,7532,7593,7772,8454,9053,9088,9089,9140,9388,9894,10094,10440,10441,10694,10695,11016,11095,11315,11336,11534,11941,11996,12106,12142,12262,12286,12325,12382,12563,12669],"dominus"],[[28,31,1159,1317,1624,1856,2269,3451,3582,3702,5470,5488,5879,7012,9084,9085,9427,10044,10805,11138,11141,11379,11932,12569,12652],"hybrid"],[[30,4780,7336,7477,7815,7979,10689,11098,11736,11905,11950,12318,12335],"merc"],[[21,23,25,26,27,402,404,523,607,625,723,1172,1295,1300,1475,1478,1533,1568,1623,2665,2853,2919,2949,4284,4318,4319,4320,4782,4906,5020,5039,5188,5361,5547,5713,5837,5951,6939,7947,7948,8383,8806,8807,10896,10897,10900,10901,11314,11603,12104,12105],"octane"],[[24,803,1603,1691,1919,3594,3614,3622,4268,5265,7052,8524],"plank"]]);function Q(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"")}function ee(e){if(!e)return null;switch(Q(e)){case"breakout":return"breakout";case"dominus":return"dominus";case"hybrid":return"hybrid";case"merc":return"merc";case"octane":return"octane";case"batmobile":case"plank":return"plank";default:return null}}function te(e){return e?Oe[Q(e)]??null:null}function Ee(e){return ee(e)??te(e)}function Be(e){return Se[e]}function X(e,t){if(!(!e||typeof e!="object")){if("Str"in e&&typeof e.Str=="string"){t.push(e.Str);return}if("Name"in e&&typeof e.Name=="string"){t.push(e.Name);return}if("Byte"in e&&e.Byte&&typeof e.Byte=="object"){const n=e.Byte;typeof n.kind=="string"&&t.push(n.kind),typeof n.value=="string"&&t.push(n.value);return}if("Struct"in e&&e.Struct&&typeof e.Struct=="object"){const n=e.Struct;if(typeof n.name=="string"&&t.push(n.name),Array.isArray(n.fields))for(const r of n.fields)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),X(r[1],t));return}if("Array"in e&&Array.isArray(e.Array)){for(const n of e.Array)if(Array.isArray(n))for(const r of n)Array.isArray(r)&&(typeof r[0]=="string"&&t.push(r[0]),X(r[1],t))}}}function De(e){const t=ee(e?.car_hitbox_family);if(t)return t;const n=e?.car_body_id;if(typeof n=="number"){const i=Te[n];if(i)return i}const r=te(e?.car_body_name);if(r)return r;const o=e?.stats;if(!o)return J;const a=[];for(const[i,s]of Object.entries(o))a.push(i),X(s,a);for(const i of a){const s=Ee(i);if(s)return s}return J}function x(e){const[t,n]=Object.entries(e)[0]??["Unknown","unknown"];return typeof n=="string"||typeof n=="number"?`${t}:${n}`:n&&typeof n=="object"?`${t}:${JSON.stringify(n)}`:`${t}:${JSON.stringify(n)}`}function P(e,t){return Math.max(0,e-t)}function ne(e){return new Map(e.map(t=>[t.id,t]))}const h=70,re=73,Ne=3072,Pe=4096,Fe=1792,Re=4184,Me=940,ze=3308,Ce=2816,oe=3584,je=2484,Le=1788,Ve=2300,Ue=2048,He=1036,Ye=1024,$e=1024,Xe=4240,ae=34;function C(e,t,n,r,o){e.push({index:e.length,padId:null,size:o,position:{x:t,y:n,z:r},events:[]})}function j(e,t,n,r,o){C(e,-t,n,r,o),C(e,t,n,r,o)}function W(e,t,n,r,o){C(e,t,-n,r,o),C(e,t,n,r,o)}function T(e,t,n,r,o){j(e,t,-n,r,o),j(e,t,n,r,o)}function We(){const e=[];return W(e,0,Xe,h,"small"),T(e,Fe,Re,h,"small"),T(e,Ne,Pe,re,"big"),T(e,Me,ze,h,"small"),W(e,0,Ce,h,"small"),T(e,oe,je,h,"small"),T(e,Le,Ve,h,"small"),T(e,Ue,He,h,"small"),W(e,0,$e,h,"small"),j(e,oe,0,re,"big"),j(e,Ye,0,h,"small"),e}function K(e){if(e==="Available")return!0;if(e&&typeof e=="object"){if("Available"in e)return!0;if("PickedUp"in e)return!1;const t=e.kind;if(t==="Available")return!0;if(t==="PickedUp")return!1}return null}function Ke(e){return e==="big"||e==="Big"?"big":e==="small"||e==="Small"?"small":null}function Ze(e){let t=null;for(const n of e){const r=K(n.kind);if(r===!1){t=n.time;continue}if(r===!0&&t!==null)return n.time-t>=7?"big":"small"}return null}function Ge(e,t,n,r){const o=ne(t),a=new Map;for(const u of e.boost_pad_events??[]){if(K(u.kind)===null){r?.advance();continue}const l=a.get(u.pad_id);l?l.push(u):a.set(u.pad_id,[u]),r?.advance()}const i=e.boost_pads;if(!i||i.length===0)return r?.advance(ae),We();const s=[...i].sort((u,d)=>u.index-d.index),m=new Array(s.length);for(let u=0;u=72?"big":"small"),w=g.sort((_,k)=>_.time-k.time),f=new Array(w.length);for(let _=0;_=0?e.frame:null}function qe(e,t){if(typeof e.time=="number"&&Number.isFinite(e.time))return e.time;const n=Z(e);if(n===null)return null;const r=t.frame_data.metadata_frames[n]?.time;return typeof r=="number"&&Number.isFinite(r)?r:null}function Je(e,t){return`bookmark:${Z(e)??"unknown"}:${e.description||"tick-mark"}:${t}`}function Qe(e,t,n){return(e.replay_tick_marks??[]).flatMap((r,o)=>{n?.advance();const a=qe(r,e);return a===null?[]:[{id:Je(r,o),description:r.description,frame:Z(r),time:P(a,t)}]})}function et(e){const t=e.description.trim()||"Replay bookmark";return{id:e.id,time:e.time,seekTime:e.time,frame:e.frame??void 0,kind:"bookmark",label:t,shortLabel:"BM",iconName:"bookmark"}}const S={distance:270,height:100,pitch:-4,fov:110},tt=.005,nt=Number.POSITIVE_INFINITY,rt=!0,ot=.15,at=10,it=.1,st=10;function ie(e){const t=Math.hypot(e.x,e.y,e.z);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t}}function se(e){const t=Math.hypot(e.x,e.y,e.z,e.w);return t<1e-6?null:{x:e.x/t,y:e.y/t,z:e.z/t,w:e.w/t}}function ce(e,t){return{w:e.w*t.w-e.x*t.x-e.y*t.y-e.z*t.z,x:e.w*t.x+e.x*t.w+e.y*t.z-e.z*t.y,y:e.w*t.y-e.x*t.z+e.y*t.w+e.z*t.x,z:e.w*t.z+e.x*t.y-e.y*t.x+e.z*t.w}}function ue(e,t){const n=ce(ce(t,{x:e.x,y:e.y,z:e.z,w:0}),{x:-t.x,y:-t.y,z:-t.z,w:t.w});return{x:n.x,y:n.y,z:n.z}}function ct(e){if(e==="Empty")return{position:null,linearVelocity:null,angularVelocity:null,rotation:null};const t=e.Data.rigid_body;return{position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:se(t.rotation)}}function le(e){return e==null?null:Math.max(-1,Math.min(1,(e-128)/128))}function de(e){return e==null?null:(e>127?e-256:e)*Math.PI/128}function fe(e){return e?{x:e[0],y:e[1],z:e[2]}:null}const ut={cameraPitch:null,cameraYaw:null,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null};function lt(e){if(e==="Empty")return{isPresent:!1,position:null,linearVelocity:null,angularVelocity:null,rotation:null,forward:null,up:null,boostAmount:0,boostFraction:0,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,...ut};const t=e.Data.rigid_body,n=se(t.rotation),r=n?ie(ue({x:1,y:0,z:0},n)):null,o=n?ie(ue({x:0,y:0,z:1},n)):null,a=e.Data.camera,i=e.Data.input;return{isPresent:!0,position:t.location,linearVelocity:t.linear_velocity??null,angularVelocity:t.angular_velocity??null,rotation:n,forward:r,up:o,boostAmount:e.Data.boost_amount,boostFraction:Math.max(0,Math.min(1,e.Data.boost_amount/255)),boostActive:e.Data.boost_active,powerslideActive:e.Data.powerslide_active,jumpActive:e.Data.jump_active,doubleJumpActive:e.Data.double_jump_active,dodgeActive:e.Data.dodge_active,cameraPitch:de(a?.pitch),cameraYaw:de(a?.yaw),throttle:le(i?.throttle),steer:le(i?.steer),dodgeImpulse:fe(i?.dodge_impulse),dodgeTorque:fe(i?.dodge_torque)}}function dt(e){return e.position!==null}function ft(e){return{...e,isPresent:!1,linearVelocity:null,angularVelocity:null,boostActive:!1,powerslideActive:!1,jumpActive:!1,doubleJumpActive:!1,dodgeActive:!1,throttle:null,steer:null,dodgeImpulse:null,dodgeTorque:null}}function mt(e){let t=null,n=null;for(let r=0;r=t.length-1)return;let o=F(t[r].position);for(let a=r+1;ait){o=F(s.position);continue}if(_t(o,s.position)>st){o=F(s.position);continue}const l={x:(i.linearVelocity.x+s.linearVelocity.x)/2,y:(i.linearVelocity.y+s.linearVelocity.y)/2,z:(i.linearVelocity.z+s.linearVelocity.z)/2},g={x:o.x+l.x*d,y:o.y+l.y*d,z:o.z+l.z*d},b=(a-r)%n.smoothingAnchorInterval===0?.5:n.smoothingBlendFactor;o={x:g.x*(1-b)+s.position.x*b,y:g.y*(1-b)+s.position.y*b,z:g.z*(1-b)+s.position.z*b},s.position=F(o)}}function bt(e){return{motionSmoothing:e.motionSmoothing??rt,smoothingBlendFactor:e.smoothingBlendFactor??ot,smoothingAnchorInterval:Math.max(1,e.smoothingAnchorInterval??at)}}function be(){return typeof performance>"u"?Date.now():performance.now()}function gt(e){const t=e.meta.team_zero.length+e.meta.team_one.length,n=e.frame_data.players.reduce((i,[,s])=>i+s.frames.length,0),r=e.boost_pads?.length??ae,o=e.boost_pad_events?.length??0,a=(e.goal_events?.length??0)+(e.player_stat_events?.length??0)+(e.demolish_infos?.length??0)+(e.replay_tick_marks?.length??0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,n),Math.max(1,e.frame_data.ball_data.frames.length),Math.max(1,r+o),Math.max(1,a)].reduce((i,s)=>i+s,0)}function yt(e){const t=e.frame_data.players.reduce((n,[,r])=>n+r.frames.length,0);return[Math.max(1,e.frame_data.metadata_frames.length),Math.max(1,t),Math.max(1,e.frame_data.ball_data.frames.length)].reduce((n,r)=>n+r,0)}function pt(e,t,n={}){const r=gt(e),o=yt(e);let a=0,i=0,s=-1,m=-1,u=be();const d=n.yieldEveryMs??Number.POSITIVE_INFINITY,l=n.progressReportMinDelta??tt,g=Math.max(1,n.progressReportFrameInterval??nt),b=()=>{if(!t)return!1;const f=Math.max(0,Math.min(1,a/r));if(f<=s)return!1;const k=i-m>=g;return f>=1||f-s>=l||k?(s=f,m=i,t(f,{progress:f,processedFrames:Math.min(i,o),totalFrames:o,processedUnits:a,totalUnits:r}),!0):!1},w=(f=!1)=>{const _=be();return!f&&_-ur===t)?.[1];return typeof n=="number"&&Number.isFinite(n)?n:void 0}function xt(e){const t=kt(e?.stats);return{fov:O(t,"CameraFOV")??S.fov,height:O(t,"CameraHeight")??S.height,pitch:O(t,"CameraPitch")??S.pitch,distance:O(t,"CameraDistance")??S.distance,stiffness:O(t,"CameraStiffness")??S.stiffness,swivelSpeed:O(t,"CameraSwivelSpeed")??S.swivelSpeed,transitionSpeed:O(t,"CameraTransitionSpeed")??S.transitionSpeed}}function At(e,t){const n=new Map,r=new Map,o=[...e.meta.team_zero,...e.meta.team_one];if(o.length===0)return t?.advance(),{byId:n,byName:r};for(const a of o)r.set(a.name,a),a.remote_id&&n.set(x(a.remote_id),a),t?.advance();return{byId:n,byName:r}}function vt(e){const t=new Map;for(const[n,r]of e.player_camera_events??[])t.set(x(n),r.map(o=>({frame:o.frame,ballCamActive:o.ball_cam_active,behindViewActive:o.behind_view_active,driving:o.driving})));return t}function St(e,t){const n=new Set(e.meta.team_zero.map(m=>m.name)),r=new Set(e.meta.team_one.map(m=>m.name)),o=At(e,t),a=vt(e),i=[];let s=0;for(const[m,u]of e.frame_data.players){const d=new Array(u.frames.length);let l;for(let f=0;ft.time!==n.time?t.time-n.time:(t.frame??0)-(n.frame??0))}function Tt(e,t,n){const r=e.player?x(e.player):null,o=r?t.get(r)?.name??r:null,a=o?`${o} scored`:"Goal";return{id:G("goal",e.frame,r??"team"),time:P(e.time,n),frame:e.frame,kind:"goal",label:a,shortLabel:"G",playerId:r,playerName:o,isTeamZero:e.scoring_team_is_team_0}}function Et(e,t,n){const r=x(e.player),o=t.get(r)?.name??r,a=e.kind.toLowerCase(),i=e.kind==="Shot"?"shot":e.kind==="Save"?"save":"assist",s=e.kind==="Shot"?"SH":e.kind==="Save"?"SV":"A";return{id:G(a,e.frame,r),time:P(e.time,n),frame:e.frame,kind:a,label:`${o} ${i}`,shortLabel:s,playerId:r,playerName:o,location:e.shot?.shot_touch_position??e.shot?.ball_position??null,shot:e.shot??null,isTeamZero:e.is_team_0}}function Bt(e,t,n){const r=x(e.attacker),o=x(e.victim),a=t.get(r),i=t.get(o);return{id:G("demo",e.frame,`${r}:${o}`),time:P(e.time,n),frame:e.frame,kind:"demo",label:`${a?.name??r} demoed ${i?.name??o}`,shortLabel:"D",playerId:r,playerName:a?.name??r,secondaryPlayerId:o,secondaryPlayerName:i?.name??o,location:e.victim_location,isTeamZero:a?.isTeamZero??null}}function Dt(e,t,n,r,o){const a=ne(t),i=[];for(const s of e.goal_events??[])i.push(Tt(s,a,r)),o?.advance();for(const s of e.player_stat_events??[])i.push(Et(s,a,r)),o?.advance();for(const s of e.demolish_infos??[])i.push(Bt(s,a,r)),o?.advance();for(const s of n)i.push(et(s));return i.length===0&&o?.advance(),It(i)}function Nt(e,t={}){const n=pt(e,t.onProgress,{progressReportMinDelta:t.progressReportMinDelta,progressReportFrameInterval:t.progressReportFrameInterval}),r=e.frame_data.metadata_frames[0]?.time??0,o=ht(e,n),a=St(e,n),i=Ot(e,n),s=bt(t);_e(o,i,s);for(const l of a)_e(o,l.frames,s);const m=Ge(e,a,r,n),u=Qe(e,r,n),d=Dt(e,a,u,r,n);return n.finish(),{frameCount:o.length,duration:o.at(-1)?.time??0,rawStartTime:r,frames:o,ballFrames:i,boostPads:m,players:a,tickMarks:u,timelineEvents:d,teamZeroNames:e.meta.team_zero.map(l=>l.name),teamOneNames:e.meta.team_one.map(l=>l.name)}}function L(e){if(e instanceof Map)return Object.fromEntries(Array.from(e.entries()).map(([t,n])=>[t,L(n)]));if(Array.isArray(e))return e.map(t=>L(t));if(e&&typeof e=="object"){const t={};for(const[n,r]of Object.entries(e))t[n]=L(r);return t}return e}async function Pt(){const e=ve;typeof e=="function"&&await e()}function R(e){self.postMessage(e)}self.onmessage=async e=>{if(e.data.type==="load-replay")try{await Pt();const t=new Uint8Array(e.data.bytes);R({type:"progress",progress:{stage:"validating",progress:0}});const n=L(ye(t));if(!n.valid)throw new Error(n.error??"Replay validation failed");const r=ge(t,s=>{R({type:"progress",progress:s})},e.data.reportEveryNFrames);R({type:"progress",progress:{stage:"normalizing",progress:0}});const o=JSON.parse(new TextDecoder().decode(r)),a=Nt(o,{motionSmoothing:e.data.motionSmoothing,smoothingBlendFactor:e.data.smoothingBlendFactor,smoothingAnchorInterval:e.data.smoothingAnchorInterval,progressReportFrameInterval:e.data.reportEveryNFrames,onProgress(s){R({type:"progress",progress:{stage:"normalizing",progress:s}})}}),i=new TextEncoder().encode(JSON.stringify(a));self.postMessage({type:"done",rawBuffer:r.buffer,replayBuffer:i.buffer},[r.buffer,i.buffer])}catch(t){R({type:"error",error:t instanceof Error?t.message:String(t)})}}})(); diff --git a/crates/rocket-sense-server/static/subtr-actor/stats/index.html b/crates/rocket-sense-server/static/subtr-actor/stats/index.html index 056c1e7c..8c5b99d5 100644 --- a/crates/rocket-sense-server/static/subtr-actor/stats/index.html +++ b/crates/rocket-sense-server/static/subtr-actor/stats/index.html @@ -5,8 +5,8 @@ subtr-actor stats report - - + +
diff --git a/flake.lock b/flake.lock index 9f2e2db2..c7d81eeb 100644 --- a/flake.lock +++ b/flake.lock @@ -314,10 +314,10 @@ "uv2nix": "uv2nix" }, "locked": { - "lastModified": 1783320330, - "narHash": "sha256-gjP5C28tzPvOsfGcKLQFl7r7EXAXb1t928vdazfKiFE=", - "rev": "20eb0589911ea98e72fcaf55866b909e2af96a1c", - "revCount": 1859, + "lastModified": 1783582235, + "narHash": "sha256-Wamx7YkeTbpHOKVJ+Bi0VhUlEbQVktddW6ejJEMa58s=", + "rev": "db683e302b9028e5add304e449cb89d1f80702af", + "revCount": 1880, "type": "git", "url": "file:./vendor/subtr-actor" }, diff --git a/migrations/0086_leaderboard_player_window_cache.sql b/migrations/0089_leaderboard_player_window_cache.sql similarity index 100% rename from migrations/0086_leaderboard_player_window_cache.sql rename to migrations/0089_leaderboard_player_window_cache.sql diff --git a/vendor/subtr-actor b/vendor/subtr-actor index 20eb0589..db683e30 160000 --- a/vendor/subtr-actor +++ b/vendor/subtr-actor @@ -1 +1 @@ -Subproject commit 20eb0589911ea98e72fcaf55866b909e2af96a1c +Subproject commit db683e302b9028e5add304e449cb89d1f80702af diff --git a/web/package-lock.json b/web/package-lock.json index b8b854a2..0962de84 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -3047,10 +3047,10 @@ } }, "vendor/@rlrml/player": { - "version": "1.1.0", + "version": "1.2.0", "license": "MIT", "dependencies": { - "@rlrml/subtr-actor": "1.1.0", + "@rlrml/subtr-actor": "1.2.0", "camera-controls": "^2.10.1" }, "peerDependencies": { @@ -3058,7 +3058,7 @@ } }, "vendor/@rlrml/subtr-actor": { - "version": "1.1.0", + "version": "1.2.0", "license": "MIT" }, "vendor/@rlrml/viewer": { diff --git a/web/vendor/@rlrml/.subtr-actor-rev b/web/vendor/@rlrml/.subtr-actor-rev index c7ba6c66..34837e84 100644 --- a/web/vendor/@rlrml/.subtr-actor-rev +++ b/web/vendor/@rlrml/.subtr-actor-rev @@ -1 +1 @@ -20eb0589911ea98e72fcaf55866b909e2af96a1c +db683e302b9028e5add304e449cb89d1f80702af diff --git a/web/vendor/@rlrml/player/package.json b/web/vendor/@rlrml/player/package.json index 078d7159..f57ace9b 100644 --- a/web/vendor/@rlrml/player/package.json +++ b/web/vendor/@rlrml/player/package.json @@ -1,6 +1,6 @@ { "name": "@rlrml/player", - "version": "1.1.0", + "version": "1.2.0", "description": "High-fidelity replay player library for subtr-actor Rocket League replay workflows", "type": "module", "main": "./dist/index.js", @@ -56,6 +56,6 @@ }, "dependencies": { "camera-controls": "^2.10.1", - "@rlrml/subtr-actor": "1.1.0" + "@rlrml/subtr-actor": "1.2.0" } } diff --git a/web/vendor/@rlrml/subtr-actor/package.json b/web/vendor/@rlrml/subtr-actor/package.json index d8d36c88..d52b3e3c 100644 --- a/web/vendor/@rlrml/subtr-actor/package.json +++ b/web/vendor/@rlrml/subtr-actor/package.json @@ -1,6 +1,6 @@ { "name": "@rlrml/subtr-actor", - "version": "1.1.0", + "version": "1.2.0", "description": "WebAssembly bindings for subtr-actor - Rocket League replay processing and analysis", "type": "module", "repository": { diff --git a/web/vendor/@rlrml/viewer/package.json b/web/vendor/@rlrml/viewer/package.json index 078d7159..f57ace9b 100644 --- a/web/vendor/@rlrml/viewer/package.json +++ b/web/vendor/@rlrml/viewer/package.json @@ -1,6 +1,6 @@ { "name": "@rlrml/player", - "version": "1.1.0", + "version": "1.2.0", "description": "High-fidelity replay player library for subtr-actor Rocket League replay workflows", "type": "module", "main": "./dist/index.js", @@ -56,6 +56,6 @@ }, "dependencies": { "camera-controls": "^2.10.1", - "@rlrml/subtr-actor": "1.1.0" + "@rlrml/subtr-actor": "1.2.0" } }

9v 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

9v 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

9v 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