diff --git a/docs/src/demos/.gitignore b/docs/src/demos/.gitignore
index 7fd9a44..f332f54 100644
--- a/docs/src/demos/.gitignore
+++ b/docs/src/demos/.gitignore
@@ -1,2 +1,4 @@
*.md
-!main.md
\ No newline at end of file
+!main.md
+monkey-bmi-cache/data.mat
+monkey-bmi-cache/
\ No newline at end of file
diff --git a/docs/src/demos/04NBADemo.jl b/docs/src/demos/04NBADemo.jl
new file mode 100644
index 0000000..650574f
--- /dev/null
+++ b/docs/src/demos/04NBADemo.jl
@@ -0,0 +1,2627 @@
+### A Pluto.jl notebook ###
+# v0.19.42
+
+using Markdown
+using InteractiveUtils
+
+# ╔═╡ 2ab7e40d-57cd-4f3d-90ad-ec32c69b37fb
+using CSV, TensorCore, GCPDecompositions, LinearAlgebra, CairoMakie, DataFrames, Statistics, Polynomials, CacheVariables
+
+# ╔═╡ 6c5957c0-baec-42af-94ac-24064e1f6581
+using Downloads, ColorSchemes, DataFramesMeta, Cascadia,HTTP,Gumbo
+
+# ╔═╡ 8e067b40-3e2b-11ef-1ef3-a574b6ca03c4
+md"""
+# NBA Full History
+scraped data from the landofbasketball
+
+
+**only records between active teams**
+
+"""
+
+# ╔═╡ 7cdd2f4a-a3e9-4a9b-a009-b31ab0e856de
+html"""
+
+
+
+
+
+
+ Source: Paolo Uggetti,
+ The Ringer, 2021.
+
+
+
+"""
+
+# ╔═╡ 02f06782-a038-4d4f-bd37-f4a31212907a
+md"""
+## Scrape and Create DataFrame
+"""
+
+# ╔═╡ 42e0beef-000b-41a1-b6cb-6456a5da5eb5
+active_team_names = ["Atlanta Hawks","Boston Celtics",
+ "Cleveland Cavaliers",
+ "New Orleans Pelicans",
+ "Chicago Bulls",
+ "Dallas Mavericks",
+ "Denver Nuggets",
+ "Golden State Warriors",
+ "Houston Rockets",
+ "Los Angeles Clippers",
+ "Los Angeles Lakers",
+ "Miami Heat",
+ "Milwaukee Bucks",
+ "Minnesota Timberwolves",
+ "Brooklyn Nets",
+ "New York Knicks",
+ "Orlando Magic",
+ "Indiana Pacers",
+ "Philadelphia 76ers",
+ "Phoenix Suns",
+ "Portland Trail Blazers",
+ "Sacramento Kings",
+ "San Antonio Spurs",
+ "Oklahoma City Thunder",
+ "Toronto Raptors",
+ "Utah Jazz",
+ "Memphis Grizzlies",
+ "Washington Wizards",
+ "Detroit Pistons",
+ "Charlotte Hornets"]
+
+
+# ╔═╡ 74cb492d-7b9a-49e8-a8e3-16ac2e3448ca
+num_teams = length(active_team_names)
+
+# ╔═╡ eaa32830-0a48-4124-8088-f5bc7a9b4ff3
+num_years = length(1946:2023)
+
+# ╔═╡ 60fda4f4-4c0a-4c24-bf6c-a6944d00c5a7
+year_range = 1946:2023
+
+# ╔═╡ 4bcc5961-f328-40aa-a0dc-f1755fa58e72
+active_team_ids = [1610612737, 1610612738, 1610612739, 1610612740, 1610612741, 1610612742, 1610612743, 1610612744, 1610612745, 1610612746, 1610612747, 1610612748, 1610612749, 1610612750, 1610612751, 1610612752, 1610612753, 1610612754, 1610612755, 1610612756, 1610612757, 1610612758, 1610612759, 1610612760, 1610612761, 1610612762, 1610612763, 1610612764, 1610612765, 1610612766]
+
+# ╔═╡ 2e4faef9-d8a2-4a8f-8e83-a9c5b280d174
+id_team_dict = Dict(zip(active_team_ids, active_team_names))
+
+# ╔═╡ 7a20002f-5724-46dc-b147-af0d42c8523c
+team_id_dict = Dict(zip(active_team_names, active_team_ids))
+
+# ╔═╡ d20c9cd7-6726-4431-98d7-4ca07bc70b5a
+old_names = Dict(
+ "Buffalo Braves" => "Los Angeles Clippers",
+ "New Orleans Jazz" => "Utah Jazz",
+ "Seattle Supersonics" => "Oklahoma City Thunder",
+ "Washington Bullets" => "Washington Wizards",
+ "Baltimore Bullets" => "Washington Wizards",
+ "Cincinnati Royals" => "Sacramento Kings",
+ "San Francisco Warriors" => "Golden State Warriors",
+ "Philadelphia Warriors" => "Golden State Warriors",
+ "St. Louis Hawks" => "Atlanta Hawks",
+ "San Diego Rockets" => "Houston Rockets",
+ "Minneapolis Lakers" => "Los Angeles Lakers",
+ "Syracuse Nationals" => "Philadelphia 76ers",
+ "New Jersey Americans" => "Brooklyn Nets",
+ "Milwaukee Hawks" => "Atlanta Hawks",
+ "Chicago Zephyrs" => "Washington Wizards",
+ "Tri-Cities Blackhawks" => "Atlanta Hawks",
+ "Fort Wayne Pistons" => "Detroit Pistons",
+ "Kansas City-Omaha Kings" => "Sacramento Kings",
+ "New York Nets" => "Brooklyn Nets",
+ "New Jersey Nets" => "Brooklyn Nets",
+ "San Diego Clippers" => "Los Angeles Clippers",
+ "Kansas City Kings" => "Sacramento Kings",
+ "Vancouver Grizzlies" => "Memphis Grizzlies",
+ "New Orleans Hornets" => "New Orleans Pelicans",
+ "New Orleans/Oklahoma City Hornets" => "New Orleans Pelicans",
+ "Charlotte Bobcats" => "Charlotte Hornets",
+ "Chicago Packers" => "Washington Wizards",
+ "Capital Bullets" => "Washington Wizards",
+ "Rochester Royals" => "Sacramento Kings")
+
+# ╔═╡ 2d3441eb-3cf9-49c0-b09e-52f5e235c8ca
+all_games = with_theme() do
+ function scrape_season_data(start_year::Int, end_year::Int, active_team_names::Vector{String}, team_id_dict::Dict{String, Int}, old_names::Dict{String, String})
+
+ # Create an empty DataFrame for looping
+ full_df = DataFrame(
+ season_id = Int[],
+ team_id_home = Int[],
+ team_name_home = String[],
+ wl_home = String[],
+ team_id_away = Int[],
+ team_name_away = String[],
+ plus_minus_home = Int[])
+
+ # Loop through each season
+ for year in start_year:end_year
+ url = "https://www.landofbasketball.com/results/$(year)_$(year+1)_scores_full.htm"
+
+ # Get content
+ response = HTTP.get(url)
+ html_content = String(response.body)
+
+ parsed_html = parsehtml(html_content)
+
+ # Find tables with scores
+ table_selector = Selector("table")
+ tables = eachmatch(table_selector, parsed_html.root)
+
+ # Create empty arrays to push to
+ dates = String[]
+ home_teams = String[]
+ home_scores = String[]
+ away_teams = String[]
+ away_scores = String[]
+
+ for table in tables
+ # Loop through each row in the table
+ row_selector = Selector("tr")
+ rows = eachmatch(row_selector, table)[2:end]
+
+ # Skip the titles
+ for row in rows
+ column_selector = Selector("td div.left")
+ columns = eachmatch(column_selector, row)
+
+ # Choose the columns
+ if length(columns) >= 4
+ home_team = strip(Gumbo.text(columns[2]))
+ home_score = strip(Gumbo.text(columns[3]))
+ away_team = strip(Gumbo.text(columns[6]))
+ away_score = strip(Gumbo.text(columns[7]))
+ score_match = match(r"^\d+", away_score)
+ if score_match !== nothing
+ away_score = score_match.match
+ else
+ away_score = ""
+ end
+ # Append stats
+ push!(home_teams, home_team)
+ push!(home_scores, home_score)
+ push!(away_teams, away_team)
+ push!(away_scores, away_score)
+ end
+ end
+ end
+
+ # Create a DataFrame for the current season
+ df = DataFrame(
+ season_id = fill(year, length(home_teams)),
+ Home_Team = home_teams,
+ Home_Score = home_scores,
+ Away_Team = away_teams,
+ Away_Score = away_scores
+ )
+
+ # Convert scores to integers
+ df[!, :Home_Score] .= [parse(Int, x) for x in df[!, :Home_Score]]
+ df[!, :Away_Score] .= [parse(Int, x) for x in df[!, :Away_Score]]
+
+ # Rename teams to updated/current name
+ function rename_teams!(df::DataFrame, mapping::Dict{String, String})
+ for row in eachrow(df)
+ if haskey(mapping, row.Home_Team)
+ row.Home_Team = mapping[row.Home_Team]
+ end
+ if haskey(mapping, row.Away_Team)
+ row.Away_Team = mapping[row.Away_Team]
+ end
+ end
+ end
+
+ rename_teams!(df, old_names)
+
+ # Filter the DataFrame to include only active teams
+ filtered_df = filter(row -> row.Home_Team in active_team_names && row.Away_Team in active_team_names, df)
+
+ # Create stat columns from website data
+ filtered_df[!, :team_id_home] = [team_id_dict[row.Home_Team] for row in eachrow(filtered_df)]
+ filtered_df[!, :team_id_away] = [team_id_dict[row.Away_Team] for row in eachrow(filtered_df)]
+
+
+ filtered_df[!, :wl_home] = [row.Home_Score > row.Away_Score ? "W" : "L" for row in eachrow(filtered_df)]
+
+
+ filtered_df[!, :plus_minus_home] = [row.Home_Score - row.Away_Score for row in eachrow(filtered_df)]
+ filtered_df[!, :season_id] .= year
+
+ rename!(filtered_df, :Home_Team => :team_name_home, :Away_Team => :team_name_away)
+
+ # Select columns in order and put into big DataFrame
+ append!(full_df, select(filtered_df, [:season_id, :team_id_home, :team_name_home, :wl_home, :team_id_away, :team_name_away, :plus_minus_home]))
+ end
+
+ return full_df
+end
+
+ # Scraping function
+ full_season_46_to_23 = scrape_season_data(1946, 2023, active_team_names, team_id_dict, old_names)
+end
+
+# ╔═╡ 1eaa449c-4a13-4225-8d5a-7c9a2cdf2949
+md"""
+There are 68,761 games in all of NBA history between the current 30 teams. Not including playoffs, (to showcase some predictive power) there have been 64,400 regular season games.
+"""
+
+# ╔═╡ 9c87cbe5-9f4a-476f-870f-8f6c4fe8e58c
+reg_season = with_theme() do
+ function scrape_season_data(start_year::Int, end_year::Int, active_team_names::Vector{String}, team_id_dict::Dict{String, Int}, old_names::Dict{String, String})
+
+ # Create an empty DataFrame for looping
+ full_df = DataFrame(
+ season_id = Int[],
+ team_id_home = Int[],
+ team_name_home = String[],
+ wl_home = String[],
+ team_id_away = Int[],
+ team_name_away = String[],
+ plus_minus_home = Int[]
+ )
+
+ # Loop through each season
+ for year in start_year:end_year
+ url = "https://www.landofbasketball.com/results/$(year)_$(year+1)_scores_full.htm"
+
+ # Get content
+ response = HTTP.get(url)
+ html_content = String(response.body)
+ parsed_html = parsehtml(html_content)
+
+ # Create empty arrays to push to
+ home_teams = String[]
+ home_scores = String[]
+ away_teams = String[]
+ away_scores = String[]
+
+ # Track whether we are processing playoff tables
+ processing_playoffs = false
+
+ # Find tables only before playoffs
+ function process_node(node)
+ if typeof(node) <: Gumbo.HTMLElement
+ tagname = Gumbo.tag(node)
+ if tagname == :h3 && strip(Gumbo.text(node)) == "Full List - NBA Playoffs"
+ processing_playoffs = true
+ elseif tagname == :table && !processing_playoffs
+ process_table(node)
+ end
+ end
+
+ for child in Gumbo.children(node)
+ process_node(child)
+ end
+ end
+
+ function process_table(table)
+
+ # Loop through each row in the table
+ rows = eachmatch(Selector("tr"), table)[2:end]
+
+ for row in rows
+ columns = eachmatch(Selector("td div.left"), row)
+
+ # Choose the columns
+ if length(columns) >= 4
+ home_team = strip(Gumbo.text(columns[2]))
+ home_score = strip(Gumbo.text(columns[3]))
+ away_team = strip(Gumbo.text(columns[6]))
+ away_score = strip(Gumbo.text(columns[7]))
+ score_match = match(r"^\d+", away_score)
+
+ if score_match !== nothing
+ away_score = score_match.match
+ else
+ away_score = ""
+ end
+
+ # Append stats
+ push!(home_teams, home_team)
+ push!(home_scores, home_score)
+ push!(away_teams, away_team)
+ push!(away_scores, away_score)
+ end
+ end
+ end
+
+ process_node(parsed_html.root)
+
+ # Create a DataFrame for the current season
+ df = DataFrame(
+ season_id = fill(year, length(home_teams)),
+ Home_Team = home_teams,
+ Home_Score = home_scores,
+ Away_Team = away_teams,
+ Away_Score = away_scores
+ )
+
+ # Convert scores to integers
+ df[!, :Home_Score] .= [parse(Int, x) for x in df[!, :Home_Score]]
+ df[!, :Away_Score] .= [parse(Int, x) for x in df[!, :Away_Score]]
+
+ # Rename teams to updated/current name
+ function rename_teams!(df::DataFrame, mapping::Dict{String, String})
+ for row in eachrow(df)
+ if haskey(mapping, row.Home_Team)
+ row.Home_Team = mapping[row.Home_Team]
+ end
+ if haskey(mapping, row.Away_Team)
+ row.Away_Team = mapping[row.Away_Team]
+ end
+ end
+ end
+
+ rename_teams!(df, old_names)
+
+ # Only include active teams
+ filtered_df = filter(row -> row.Home_Team in active_team_names && row.Away_Team in active_team_names, df)
+
+ # Create stat columns from website data
+ filtered_df[!, :team_id_home] = [team_id_dict[row.Home_Team] for row in eachrow(filtered_df)]
+ filtered_df[!, :team_id_away] = [team_id_dict[row.Away_Team] for row in eachrow(filtered_df)]
+ filtered_df[!, :wl_home] = [row.Home_Score > row.Away_Score ? "W" : "L" for row in eachrow(filtered_df)]
+ filtered_df[!, :plus_minus_home] = [row.Home_Score - row.Away_Score for row in eachrow(filtered_df)]
+ filtered_df[!, :season_id] .= year
+
+ rename!(filtered_df, :Home_Team => :team_name_home, :Away_Team => :team_name_away)
+
+ # Select columns and put into big DataFrame
+ append!(full_df, select(filtered_df, [:season_id, :team_id_home, :team_name_home, :wl_home, :team_id_away, :team_name_away, :plus_minus_home]))
+ end
+
+ return full_df
+ end
+
+ # Scraping function
+ full_season_46_to_23 = scrape_season_data(1946, 2023, active_team_names, team_id_dict, old_names)
+end
+
+# ╔═╡ 0b298b6a-f736-4c66-a8d0-bb1b3bda0f6a
+colors = [:orangered, :green3, :red4, :navy, :firebrick2,:steelblue2,:gold,:deepskyblue3,:firebrick3,:royalblue1,:mediumorchid4,:firebrick4,:darkgreen,:chartreuse3,:black,:chocolate1,:deepskyblue2,:yellow2,:crimson,:darkorange1,:red3,:rebeccapurple,:gray69,:salmon,:firebrick,:green,:cornflowerblue,:navyblue,:red,:darkcyan]
+
+# ╔═╡ be70f54d-ce70-4886-a4e2-5d5734d79f61
+scheme = ColorSchemes.distinguishable_colors(30)
+
+# ╔═╡ 37889ed2-104f-4441-b85a-47c2d03adf0e
+md"""
+# Regular Season Games
+"""
+
+# ╔═╡ 52358d59-c78d-465a-8d2b-bbc6f3e31a78
+begin
+X = zeros(Int, num_teams, num_teams, num_years);
+for row in eachrow(reg_season)
+ i_home = findfirst(x -> x == row.team_id_home, active_team_ids)
+ j_away = findfirst(x -> x == row.team_id_away, active_team_ids)
+ k = findfirst(x -> x == row.season_id, year_range)
+
+ if row.wl_home == "W"
+ # Home team won
+ X[i_home, j_away, k] += 1
+ else
+ # Away team won
+ X[j_away, i_home, k] += 1
+ end
+end
+
+ X = Int.(X)
+end;
+
+# ╔═╡ c867179d-efdb-4bb5-84f6-92fb6b400232
+md"""
+## Data Visualization
+"""
+
+# ╔═╡ 9c959be1-8bbb-4dc3-9da7-370927d18e38
+@cache "records-bargraph.bson" with_theme() do
+ fig = Figure(size = (1000,3000))
+ axes = []
+
+ n_cols = 2
+
+ # Set super title
+ fig[0, 1:n_cols] = Label(fig,"NBA Team Performance Over the Years", fontsize = 25, halign = :center,tellwidth = false, tellheight = true, font = "Bold Arial")
+
+
+ # Loop through each team
+ for idx in 1:length(active_team_names)
+
+ # Calculate the team's record for each year
+ team_performance = sum(X[idx, :, :], dims = 1)[:]
+
+ # Determine subplot position
+ row = div(idx - 1, n_cols) + 1
+ col = (idx - 1) % n_cols + 1
+
+ # Create a bar plot for the team
+ ax = Axis(fig[row, col], xticks = 1946:20:2026,
+ title = active_team_names[idx], xlabel = "Start of Season Year", ylabel = "Record")
+ push!(axes,ax)
+ barplot!(ax, 1946:2023, team_performance; color = colors[idx])
+
+ # Make middle graphs unlabeled
+ if fldmod1(idx, n_cols)[2] != 1 && fldmod1(idx, n_cols)[2] != n_cols
+ ax.ylabelvisible = false
+ end
+
+ if fldmod1(idx, n_cols)[1] != 15
+ ax.xlabelvisible = false
+ ax.xticklabelsvisible = false
+ end
+
+ # Flip and switch y-axis of last column
+ if fldmod1(idx, n_cols)[2] == n_cols
+ ax.yaxisposition = :right
+ ax.ylabelrotation = 3pi/2
+ end
+
+ # Link y axes
+
+ linkyaxes!(axes...)
+ end
+
+ HTML(repr("text/html", fig))
+end
+
+# ╔═╡ d9507fad-dedd-44a2-b60f-cf91bebcc2ba
+md"""
+These bar graphs show when teams were inaugurated, re-franchised (Charlotte), and their records throughout the years.
+"""
+
+# ╔═╡ 24a3e00b-bc95-42a6-99da-a7bdcb6fd23b
+html"""
+
+
+
+
+
+
+ Source:
+NBA License,
+ NBA, 2021.
+
+
+
+
+"""
+
+# ╔═╡ 9ea3a825-7239-42de-ba57-09ddd49af582
+@cache "record-linegraph.bson" with_theme() do
+
+ fig = Figure(size = (900, 800))
+
+ ax = Axis(fig[1, 1], title = "NBA Team Trends", xlabel = "Start of Season Year", ylabel = "Record", titlesize = 25, ylabelsize = 18, xlabelsize = 18, xticks = 1946:20:2026)
+
+ # Loop through each team and plot their performance
+ for idx in 1:length(active_team_names)
+
+ # Calculate record per year
+ team_performance = sum(X[idx, :, :], dims = 1)[:]
+
+ # Filter out the years where the team's record is zero
+ valid_indices = findall(x -> x != 0, team_performance)
+
+ if length(valid_indices) > 0
+ filtered_years = year_range[valid_indices]
+ filtered_performance = team_performance[valid_indices]
+
+ # Fit linearly
+ p = fit(filtered_years, filtered_performance, 1)
+
+ # Get points on line
+ poly_years = range(minimum(filtered_years), stop=maximum(filtered_years), length=100)
+ poly_vals = p.(poly_years)
+
+ # Plot trendline
+ lines!(ax, poly_years, poly_vals, label = active_team_names[idx], color = colors[idx], linewidth=2)
+
+ # Add a dot at the start and arrows at the end
+ scatter!(ax, [filtered_years[1]], [p(filtered_years[1])], color = colors[idx], markersize=10, marker=:circle)
+
+ dx = poly_years[end] - poly_years[end-1]
+ dy = poly_vals[end] - poly_vals[end-1]
+
+ arrows!(ax, [poly_years[end-1]], [poly_vals[end-1]], [dx], [dy], color=colors[idx])
+ end
+ end
+
+ # Add a legend
+ Legend(fig[1, 2], ax, "Teams", position = :rb)
+
+ HTML(repr("text/html", fig))
+end
+
+# ╔═╡ f38f5ea4-ec79-4cac-b391-df1eb54fd551
+md"""
+This line graph shows the overall trend of each team's performance (fit to a first degree polynomial).
+"""
+
+# ╔═╡ 1eeea4cd-e91d-4689-9f04-7dd988ced77c
+@cache "record-heatmap.bson" with_theme() do
+ teams = 1:length(active_team_names)
+ performance_data = [sum(X[team, :, :], dims = 1)[:] for team in teams]
+
+ # Combine the performance data into a matrix
+ performance_matrix = hcat(performance_data...)
+
+ # Create the heatmap
+ fig = Figure(size = (1200, 1000))
+
+ ax = Axis(fig[1, 1],
+ title = "NBA Team History",
+ xlabel = "Start of Season Year",
+ ylabel = "Teams",
+ xticks = (1:10:length(year_range), string.(year_range[1:10:end])),
+ yticks = (1:length(active_team_names), active_team_names),
+ xticklabelrotation = pi/4; titlesize = 30, ylabelsize = 24, xlabelsize = 24,
+ xticklabelsize = 20, yticklabelsize = 15
+ )
+
+ heatmap!(ax, performance_matrix; colormap = (:plasma))
+
+ Colorbar(fig[:, end+1], label = "Performance", vertical = true,colormap = :plasma, labelsize = 20)
+
+ HTML(repr("text/html", fig))
+end
+
+# ╔═╡ cb4387d8-1bee-464f-8fc1-1322a276c473
+md"""
+This heatmap is a visually easier graph for determining the prime eras for each team and their inaugural years.
+"""
+
+# ╔═╡ 1aca785f-c8a7-4619-8985-557ad275092b
+md"""
+## Third Order Tensor Decomposition
+"""
+
+# ╔═╡ c1fc702b-0fb0-48c5-af4d-79bfeb95c908
+M = gcp(X,12;loss = GCPLosses.NonnegativeLeastSquares())
+
+# ╔═╡ 729caa2a-0a5d-471d-a75f-6b4a51c50808
+@cache "thirdorder-decomp.bson" with_theme() do
+ fig = Figure(size = (2000, 4100))
+
+ # Set up axes and plot each factor matrix
+ for row in 1:ncomponents(M)
+ ax1 = Axis(fig[row+1, 1])
+ data1 = LinearAlgebra.normalize(M.U[1][:, row], Inf)
+ sorted_indices1 = sortperm(data1, rev=true)
+ bar_colors1 = fill(:dodgerblue, length(data1))
+
+ # Change color for the three tallest bars
+ bar_colors1[sorted_indices1[1:2]] .= :navy
+
+ # Plot and adjust tick labels
+ barplot!(ax1, 1:size(X, 1), data1; color = bar_colors1)
+ ax1.xticks = (1:length(active_team_names), active_team_names)
+ ax1.xticklabelrotation = pi/4
+
+ ax2 = Axis(fig[row+1, 2])
+ data2 = LinearAlgebra.normalize(M.U[2][:, row], Inf)
+ sorted_indices2 = sortperm(data2, rev=true)
+ bar_colors2 = fill(:indianred1, length(data2))
+
+ # Change color for the three tallest bars
+ bar_colors2[sorted_indices2[1:2]] .= :darkred
+
+ # Plot and adjust tick labels
+ barplot!(ax2, 1:size(X, 2), data2; color = bar_colors2)
+ ax2.xticks = (1:length(active_team_names), active_team_names)
+ ax2.xticklabelrotation = pi/4
+
+ # Plot third matrix
+ ax3 = Axis(fig[row+1, 3], xticks = (0:20:80, ["1946", "1966", "1986", "2006", "2026"]))
+ lines!(ax3, 1:size(X, 3), LinearAlgebra.normalize(M.U[3][:, row], Inf))
+ end
+
+ # Link and hide axes
+ for axis in 1:3
+ linkxaxes!(contents(fig[:, axis])...)
+ linkyaxes!(contents(fig[:, axis])...)
+ end
+
+ # Add labels and super title
+ labels = ["Power Teams", "Weak Teams", "Year"]
+ for i in 1:3
+ Label(fig[1, i], labels[i]; tellwidth = false, fontsize = 35, font = "Bold Arial")
+ end
+
+ fig[0, 1:3] = Label(fig, "NBA Regular Season Tensor Decomposition", fontsize = 60, halign = :center, valign = :bottom, tellwidth = false, font = "Bold Arial")
+ HTML(repr("text/html", fig))
+
+end
+
+# ╔═╡ 9627bf54-da57-4c89-afa4-f994341cf27c
+md"""
+This tensor decomposition accurately predicts the NBA champions throughout the years. It captures the Bull's dominance in the 90s, Heat short after, Celtics in the 60s and currently, Lakers in the 2000s, 80s, and 50s, Warriors in the late 2010s, and the upcoming Nuggets, Mavericks, etc.
+"""
+
+# ╔═╡ be21b5a6-17db-4675-86e1-25051f9ad26b
+md"""
+# Fourth Order Tensor
+"""
+
+# ╔═╡ 0b43b746-74ca-4df4-bd03-1c8335dc2def
+begin
+ Y = zeros(Int, num_teams, num_teams, num_years, 2)
+
+ for row in eachrow(reg_season)
+ i_home = findfirst(x -> x == row.team_id_home, active_team_ids)
+ j_away = findfirst(x -> x == row.team_id_away, active_team_ids)
+ k = findfirst(x -> x == row.season_id, year_range)
+
+ if row.wl_home == "W"
+ # Home team won
+ Y[i_home, j_away, k, 1] += 1
+
+ # Point differential
+ Y[i_home, j_away, k, 2] += row.plus_minus_home
+ else
+ # Away team won
+ Y[j_away, i_home, k, 1] += 1
+
+ # Point differential
+ Y[j_away, i_home, k, 2] -= row.plus_minus_home
+ end
+ end
+
+
+ Y = Int.(Y)
+end;
+
+# ╔═╡ 73eb1b18-55c7-4385-9993-b71675f11443
+md"""
+## Data Visualization
+"""
+
+# ╔═╡ 29b56156-58d6-4ea9-9075-40c2c5474636
+@cache "margin-heatmap.bson" with_theme() do
+ # Find total point differentials for each team per year
+ team_point_differentials = zeros(Int, num_teams, num_years)
+
+ for i in 1:num_teams
+ for k in 1:num_years
+ team_point_differentials[i, k] = sum(Y[i, :, k, 2]) - sum(Y[:, i, k, 2])
+ end
+ end
+
+ # Create the heatmap
+ fig = Figure(size = (1200, 1000))
+
+ ax = Axis(fig[1, 1],
+ title = "NBA Team Point Differentials",
+ ylabel = "Start of Season Year",
+ xlabel = "Teams",
+ yticks = (1:10:length(year_range), string.(year_range[1:10:end])),
+ xticks = (1:length(active_team_names), active_team_names),
+ xticklabelrotation = pi/4; titlesize = 30, ylabelsize = 20, xlabelsize = 20
+ )
+
+ heatmap!(ax, team_point_differentials; colormap = (:viridis))
+
+ Colorbar(fig[:, end+1], label = "Margin", vertical = true,colormap = :viridis, labelsize = 20)
+
+ HTML(repr("text/html", fig))
+end
+
+
+
+# ╔═╡ 29d68c9b-1fb8-4c6f-b991-59175b0d89de
+md"""
+This heatmap shows the overall point differentials per team over the years (ex. bright yellow representing a huge winning margin).
+"""
+
+# ╔═╡ 9a1d6cca-3ff3-4a56-b82d-3b0fd3daee0a
+@cache "margin-linegraph.bson" with_theme() do
+ fig = Figure(size = (900, 800))
+
+ ax = Axis(fig[1, 1], title = "NBA Point Margin Trend", xlabel = "Start of Season Year", ylabel = "Point Differential", titlesize = 25, ylabelsize = 18, xlabelsize = 18, xticks = 1946:10:2026)
+
+ # Loop through each team and plot their pd
+ for idx in 1:length(active_team_names)
+
+ # Calculate the team's pd for each year
+ team_point_differentials = [sum(Y[idx, :, k, 2]) - sum(Y[:, idx, k, 2]) for k in 1:num_years]
+
+ years = 1946:2023
+
+ # Filter out the years where the team's record is zero
+ valid_indices = findall(x -> x != 0, team_point_differentials)
+ if length(valid_indices) > 0
+ filtered_years = years[valid_indices]
+ filtered_pd = team_point_differentials[valid_indices]
+
+ # Fit a polynomial to the filtered pd data
+ p = fit(filtered_years, filtered_pd, 1)
+
+ # Get datapoints for trendline
+ poly_years = range(minimum(filtered_years), stop=maximum(filtered_years), length=100)
+ poly_vals = p.(poly_years)
+
+ # Plot the polynomial trendline
+ lines!(ax, poly_years, poly_vals, label = active_team_names[idx], color = colors[idx], linewidth=2)
+
+ # Give lines a start and end marker
+ scatter!(ax, [filtered_years[1]], [p(filtered_years[1])], color = colors[idx], markersize=10, marker=:circle)
+
+ dx = poly_years[end] - poly_years[end-1]
+ dy = poly_vals[end] - poly_vals[end-1]
+
+
+ arrows!(ax, [poly_years[end-1]], [poly_vals[end-1]], [dx], [dy], color=colors[idx])
+ end
+ end
+
+ # Add a legend
+ Legend(fig[1, 2], ax, "Teams", position = :rb)
+
+ HTML(repr("text/html", fig))
+end
+
+# ╔═╡ 7c87de40-919f-445b-a767-d0ef1f14e44a
+md"""
+This line graph shows the trend of how badly teams either win or lose throughout the years (fit to a first degree polynomial).
+"""
+
+# ╔═╡ 7d3b3c72-0ac3-4cb8-a430-04a1ea12ad0f
+@cache "margin-bargraphs.bson" with_theme() do
+ fig = Figure(size = (1000,3000))
+ axes = []
+
+ n_cols = 2
+
+ # Set super title
+ fig[0, 1:n_cols] = Label(fig,"NBA Point Margins Over the Years", fontsize = 25, halign = :center,tellwidth = false, tellheight = true, font = "Bold Arial")
+
+ # Loop through each team
+ for idx in 1:length(active_team_names)
+
+ # Calculate the total point differential per year
+ team_point_differentials = [sum(Y[idx, :, k, 2]) - sum(Y[:, idx, k, 2]) for k in 1:num_years]
+
+ # Determine subplot position
+ row = div(idx - 1, n_cols) + 1
+ col = (idx - 1) % n_cols + 1
+
+ # Create a bar plot for the team
+ ax = Axis(fig[row, col], xticks = 1946:20:2026, title = active_team_names[idx], xlabel = "Start of Season Year", ylabel = "Total Point Differential")
+
+ push!(axes,ax)
+ barplot!(ax, 1946:2023, team_point_differentials; color = colors[idx])
+
+ # Make middle graphs unlabeled
+ if fldmod1(idx, n_cols)[2] != 1 && fldmod1(idx, n_cols)[2] != n_cols
+ ax.ylabelvisible = false
+ end
+
+ if fldmod1(idx, n_cols)[1] != 15
+ ax.xlabelvisible = false
+ ax.xticklabelsvisible = false
+ end
+
+ # Flip and switch y-axis of last column
+ if fldmod1(idx, n_cols)[2] == n_cols
+ ax.ylabelvisible = false
+ ax.yticklabelsvisible = false
+ end
+
+ # Link y axes
+ linkyaxes!(axes...)
+ end
+
+ HTML(repr("text/html", fig))
+end
+
+# ╔═╡ 3265f499-c53d-49d2-8826-499b656013e7
+md"""
+These bar graphs are another representation of the point margins throughout the years, but with an emphasis on each team individually (not for easy comparison).
+"""
+
+# ╔═╡ a1fce48b-79f3-4f19-b488-2b6a5d5b25e6
+md"""
+## Fourth Order Tensor Decomposition
+
+"""
+
+# ╔═╡ 1a8401dc-0950-40d8-99c8-4440fd43483f
+# rank 11 works well
+M_fourth = gcp(Y,11;loss = GCPLosses.NonnegativeLeastSquares())
+
+# ╔═╡ e271d658-6147-4671-81cc-9e76c205d0b2
+@cache "fourthorder-decomp.bson" with_theme() do
+ fig = Figure(size = (2500, 3500))
+ years = 1946:2023
+ # Set up axes and plot
+ for row in 1:ncomponents(M_fourth)
+ ax1 = Axis(fig[row+1, 1])
+ data1 = LinearAlgebra.normalize(M_fourth.U[1][:, row], Inf)
+ sorted_indices1 = sortperm(data1, rev=true)
+ bar_colors1 = fill(:dodgerblue, length(data1))
+ bar_colors1[sorted_indices1[1:3]] .= :navy # Change color for the three tallest bars
+ barplot!(ax1, 1:size(Y, 1), data1; color = bar_colors1)
+ ax1.xticks = (1:length(active_team_names), active_team_names)
+ ax1.xticklabelrotation = pi/4
+
+ ax2 = Axis(fig[row+1, 2])
+ data2 = LinearAlgebra.normalize(M_fourth.U[2][:, row], Inf)
+ sorted_indices2 = sortperm(data2, rev=true)
+ bar_colors2 = fill(:indianred1, length(data2))
+ bar_colors2[sorted_indices2[1:3]] .= :darkred # Change color for the three tallest bars
+ barplot!(ax2, 1:size(Y, 2), data2; color = bar_colors2)
+ ax2.xticks = (1:length(active_team_names), active_team_names)
+ ax2.xticklabelrotation = pi/4
+
+ ax3 = Axis(fig[row+1, 3], xticks = (0:20:80, ["1946", "1966", "1986", "2006", "2026"]))
+
+ lines!(ax3, 1:size(Y, 3), LinearAlgebra.normalize(M_fourth.U[3][:, row], Inf), color = :indianred1)
+ ax4 = Axis(fig[row+1, 4])
+ total = sum(M_fourth.U[4][2,:])
+ ax4.xticklabelsvisible = false
+ ax4.yticklabelsvisible = false
+ ax4.xticksvisible = false
+ ax4.yticksvisible = false
+ pd_percent = M_fourth.U[4][2, row] * 100
+ pie!(ax4, [pd_percent, 100 - pd_percent], label=["$(round(pd_percent, digits=1))%", ""],color = [:dodgerblue, :lightgrey])
+ end
+
+ # Link and hide axes
+ for axis in 1:4
+ linkxaxes!(contents(fig[:, axis])...)
+ linkyaxes!(contents(fig[:, axis])...)
+ end
+
+ # Add labels and super title
+ labels = ["Power Teams", "Weak Teams", "Year","Point Differential"]
+ for i in 1:4
+ Label(fig[1, i], labels[i]; tellwidth = false, fontsize = 35, font = "Bold Arial")
+ end
+
+ fig[0, 1:4] = Label(fig, "Four Way NBA Tensor Decomposition", fontsize = 60, halign = :center, valign = :bottom, tellwidth = false, font = "Bold Arial")
+
+ HTML(repr("text/html", fig))
+end
+
+# ╔═╡ a6f55950-d1bd-4a3c-89b3-712c02d19e1e
+md"""
+This tensor decomposition shows the dominance of power teams throughout the years, but it adds a fourth component of the point differentials. The pie charts show how much these teams contribute to huge point differentials (huge percentages for the Celtics and Lakers in the corresponding eras).
+"""
+
+# ╔═╡ 4eca0dde-4557-4c7d-a49a-96a664bd3aba
+md"""
+## References
+1. "Land of Basketball", LandOfBasketball.com, 2024. [https://www.landofbasketball.com/](https://www.landofbasketball.com/)
+
+
+2. "NBA Official Site", NBA.com, 2024. [https://www.nba.com/](https://www.nba.com/)
+
+"""
+
+# ╔═╡ 00000000-0000-0000-0000-000000000001
+PLUTO_PROJECT_TOML_CONTENTS = """
+[deps]
+CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
+CacheVariables = "9a355d7c-ffe9-11e8-019f-21dae27d1722"
+CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
+Cascadia = "54eefc05-d75b-58de-a785-1a3403f0919f"
+ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
+DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+DataFramesMeta = "1313f7d8-7da2-5740-9ea0-a2ca25f37964"
+Downloads = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
+GCPDecompositions = "f59fb95b-1bc8-443b-b347-5e445a549f37"
+Gumbo = "708ec375-b3d6-5a57-a7ce-8257bf98657a"
+HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3"
+LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+Polynomials = "f27b6e38-b328-58d1-80ce-0feddd5e7a45"
+Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+TensorCore = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
+
+[compat]
+CSV = "~0.10.14"
+CacheVariables = "~0.1.4"
+CairoMakie = "~0.12.3"
+Cascadia = "~1.0.2"
+ColorSchemes = "~3.25.0"
+DataFrames = "~1.6.1"
+DataFramesMeta = "~0.15.2"
+GCPDecompositions = "~0.2.0"
+Gumbo = "~0.8.2"
+HTTP = "~1.10.8"
+Polynomials = "~4.0.11"
+TensorCore = "~0.1.1"
+"""
+
+# ╔═╡ 00000000-0000-0000-0000-000000000002
+PLUTO_MANIFEST_TOML_CONTENTS = """
+# This file is machine-generated - editing it directly is not advised
+
+julia_version = "1.10.2"
+manifest_format = "2.0"
+project_hash = "afd4f2fa389a258d829cf0ed4acbb9eb8f3797fb"
+
+[[deps.AbstractFFTs]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef"
+uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c"
+version = "1.5.0"
+weakdeps = ["ChainRulesCore", "Test"]
+
+ [deps.AbstractFFTs.extensions]
+ AbstractFFTsChainRulesCoreExt = "ChainRulesCore"
+ AbstractFFTsTestExt = "Test"
+
+[[deps.AbstractTrees]]
+git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177"
+uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c"
+version = "0.4.5"
+
+[[deps.Adapt]]
+deps = ["LinearAlgebra", "Requires"]
+git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099"
+uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
+version = "4.0.4"
+weakdeps = ["StaticArrays"]
+
+ [deps.Adapt.extensions]
+ AdaptStaticArraysExt = "StaticArrays"
+
+[[deps.AliasTables]]
+deps = ["PtrArrays", "Random"]
+git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff"
+uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8"
+version = "1.1.3"
+
+[[deps.Animations]]
+deps = ["Colors"]
+git-tree-sha1 = "e81c509d2c8e49592413bfb0bb3b08150056c79d"
+uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340"
+version = "0.4.1"
+
+[[deps.ArgTools]]
+uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f"
+version = "1.1.1"
+
+[[deps.Artifacts]]
+uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
+
+[[deps.Automa]]
+deps = ["PrecompileTools", "TranscodingStreams"]
+git-tree-sha1 = "588e0d680ad1d7201d4c6a804dcb1cd9cba79fbb"
+uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b"
+version = "1.0.3"
+
+[[deps.AxisAlgorithms]]
+deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"]
+git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712"
+uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950"
+version = "1.1.0"
+
+[[deps.AxisArrays]]
+deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"]
+git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f"
+uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9"
+version = "0.4.7"
+
+[[deps.BSON]]
+git-tree-sha1 = "4c3e506685c527ac6a54ccc0c8c76fd6f91b42fb"
+uuid = "fbb218c0-5317-5bc6-957e-2ee96dd4b1f0"
+version = "0.3.9"
+
+[[deps.Base64]]
+uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
+
+[[deps.BitFlags]]
+git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d"
+uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35"
+version = "0.1.9"
+
+[[deps.Bzip2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd"
+uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0"
+version = "1.0.8+1"
+
+[[deps.CEnum]]
+git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc"
+uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82"
+version = "0.5.0"
+
+[[deps.CRC32c]]
+uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc"
+
+[[deps.CRlibm_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc"
+uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0"
+version = "1.0.1+0"
+
+[[deps.CSV]]
+deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"]
+git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab"
+uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"
+version = "0.10.14"
+
+[[deps.CacheVariables]]
+deps = ["BSON", "Logging"]
+git-tree-sha1 = "0e74f35a57b1ebd6f622e47a18d92255cbd45b91"
+uuid = "9a355d7c-ffe9-11e8-019f-21dae27d1722"
+version = "0.1.4"
+
+[[deps.Cairo]]
+deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"]
+git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b"
+uuid = "159f3aea-2a34-519c-b102-8c37f9878175"
+version = "1.0.5"
+
+[[deps.CairoMakie]]
+deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"]
+git-tree-sha1 = "3441d68ea63944a2b9b6de76603ec1c8b0fd4e3e"
+uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
+version = "0.12.3"
+
+[[deps.Cairo_jll]]
+deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"]
+git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd"
+uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a"
+version = "1.18.0+2"
+
+[[deps.Calculus]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad"
+uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9"
+version = "0.5.1"
+
+[[deps.Cascadia]]
+deps = ["AbstractTrees", "Gumbo"]
+git-tree-sha1 = "c0769cbd930aea932c0912c4d2749c619a263fc1"
+uuid = "54eefc05-d75b-58de-a785-1a3403f0919f"
+version = "1.0.2"
+
+[[deps.Chain]]
+git-tree-sha1 = "9ae9be75ad8ad9d26395bf625dea9beac6d519f1"
+uuid = "8be319e6-bccf-4806-a6f7-6fae938471bc"
+version = "0.6.0"
+
+[[deps.ChainRulesCore]]
+deps = ["Compat", "LinearAlgebra"]
+git-tree-sha1 = "71acdbf594aab5bbb2cec89b208c41b4c411e49f"
+uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+version = "1.24.0"
+weakdeps = ["SparseArrays"]
+
+ [deps.ChainRulesCore.extensions]
+ ChainRulesCoreSparseArraysExt = "SparseArrays"
+
+[[deps.CodecZlib]]
+deps = ["TranscodingStreams", "Zlib_jll"]
+git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73"
+uuid = "944b1d66-785c-5afd-91f1-9de20f533193"
+version = "0.7.4"
+
+[[deps.ColorBrewer]]
+deps = ["Colors", "JSON", "Test"]
+git-tree-sha1 = "61c5334f33d91e570e1d0c3eb5465835242582c4"
+uuid = "a2cac450-b92f-5266-8821-25eda20663c8"
+version = "0.4.0"
+
+[[deps.ColorSchemes]]
+deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"]
+git-tree-sha1 = "4b270d6465eb21ae89b732182c20dc165f8bf9f2"
+uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
+version = "3.25.0"
+
+[[deps.ColorTypes]]
+deps = ["FixedPointNumbers", "Random"]
+git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d"
+uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f"
+version = "0.11.5"
+
+[[deps.ColorVectorSpace]]
+deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"]
+git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249"
+uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4"
+version = "0.10.0"
+weakdeps = ["SpecialFunctions"]
+
+ [deps.ColorVectorSpace.extensions]
+ SpecialFunctionsExt = "SpecialFunctions"
+
+[[deps.Colors]]
+deps = ["ColorTypes", "FixedPointNumbers", "Reexport"]
+git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0"
+uuid = "5ae59095-9a9b-59fe-a467-6f913c188581"
+version = "0.12.11"
+
+[[deps.CommonSubexpressions]]
+deps = ["MacroTools", "Test"]
+git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7"
+uuid = "bbf7d656-a473-5ed7-a52c-81e309532950"
+version = "0.3.0"
+
+[[deps.Compat]]
+deps = ["TOML", "UUIDs"]
+git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248"
+uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
+version = "4.15.0"
+weakdeps = ["Dates", "LinearAlgebra"]
+
+ [deps.Compat.extensions]
+ CompatLinearAlgebraExt = "LinearAlgebra"
+
+[[deps.CompilerSupportLibraries_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae"
+version = "1.1.0+0"
+
+[[deps.ConcurrentUtilities]]
+deps = ["Serialization", "Sockets"]
+git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1"
+uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb"
+version = "2.4.1"
+
+[[deps.ConstructionBase]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2"
+uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
+version = "1.5.5"
+weakdeps = ["IntervalSets", "StaticArrays"]
+
+ [deps.ConstructionBase.extensions]
+ ConstructionBaseIntervalSetsExt = "IntervalSets"
+ ConstructionBaseStaticArraysExt = "StaticArrays"
+
+[[deps.Contour]]
+git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8"
+uuid = "d38c429a-6771-53c6-b99e-75d170b6e991"
+version = "0.6.3"
+
+[[deps.Crayons]]
+git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15"
+uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f"
+version = "4.1.1"
+
+[[deps.DataAPI]]
+git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe"
+uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a"
+version = "1.16.0"
+
+[[deps.DataFrames]]
+deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"]
+git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8"
+uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0"
+version = "1.6.1"
+
+[[deps.DataFramesMeta]]
+deps = ["Chain", "DataFrames", "MacroTools", "OrderedCollections", "Reexport", "TableMetadataTools"]
+git-tree-sha1 = "f912a2126c99ff9783273efa38b0181bfbf9d322"
+uuid = "1313f7d8-7da2-5740-9ea0-a2ca25f37964"
+version = "0.15.2"
+
+[[deps.DataStructures]]
+deps = ["Compat", "InteractiveUtils", "OrderedCollections"]
+git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82"
+uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8"
+version = "0.18.20"
+
+[[deps.DataValueInterfaces]]
+git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6"
+uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464"
+version = "1.0.0"
+
+[[deps.Dates]]
+deps = ["Printf"]
+uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
+
+[[deps.DelaunayTriangulation]]
+deps = ["EnumX", "ExactPredicates", "Random"]
+git-tree-sha1 = "1755070db557ec2c37df2664c75600298b0c1cfc"
+uuid = "927a84f5-c5f4-47a5-9785-b46e178433df"
+version = "1.0.3"
+
+[[deps.DiffResults]]
+deps = ["StaticArraysCore"]
+git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621"
+uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5"
+version = "1.1.0"
+
+[[deps.DiffRules]]
+deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"]
+git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272"
+uuid = "b552c78f-8df3-52c6-915a-8e097449b14b"
+version = "1.15.1"
+
+[[deps.Distributed]]
+deps = ["Random", "Serialization", "Sockets"]
+uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
+
+[[deps.Distributions]]
+deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"]
+git-tree-sha1 = "9c405847cc7ecda2dc921ccf18b47ca150d7317e"
+uuid = "31c24e10-a181-5473-b8eb-7969acd0382f"
+version = "0.25.109"
+
+ [deps.Distributions.extensions]
+ DistributionsChainRulesCoreExt = "ChainRulesCore"
+ DistributionsDensityInterfaceExt = "DensityInterface"
+ DistributionsTestExt = "Test"
+
+ [deps.Distributions.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d"
+ Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[deps.DocStringExtensions]]
+deps = ["LibGit2"]
+git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d"
+uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
+version = "0.9.3"
+
+[[deps.Downloads]]
+deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"]
+uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6"
+version = "1.6.0"
+
+[[deps.DualNumbers]]
+deps = ["Calculus", "NaNMath", "SpecialFunctions"]
+git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566"
+uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74"
+version = "0.6.8"
+
+[[deps.EarCut_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053"
+uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5"
+version = "2.2.4+0"
+
+[[deps.EnumX]]
+git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237"
+uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56"
+version = "1.0.4"
+
+[[deps.ExactPredicates]]
+deps = ["IntervalArithmetic", "Random", "StaticArrays"]
+git-tree-sha1 = "b3f2ff58735b5f024c392fde763f29b057e4b025"
+uuid = "429591f6-91af-11e9-00e2-59fbe8cec110"
+version = "2.2.8"
+
+[[deps.ExceptionUnwrapping]]
+deps = ["Test"]
+git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a"
+uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4"
+version = "0.1.10"
+
+[[deps.Expat_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7"
+uuid = "2e619515-83b5-522b-bb60-26c02a35a201"
+version = "2.6.2+0"
+
+[[deps.Extents]]
+git-tree-sha1 = "94997910aca72897524d2237c41eb852153b0f65"
+uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910"
+version = "0.1.3"
+
+[[deps.FFMPEG_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"]
+git-tree-sha1 = "ab3f7e1819dba9434a3a5126510c8fda3a4e7000"
+uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5"
+version = "6.1.1+0"
+
+[[deps.FFTW]]
+deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"]
+git-tree-sha1 = "4820348781ae578893311153d69049a93d05f39d"
+uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
+version = "1.8.0"
+
+[[deps.FFTW_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea"
+uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a"
+version = "3.3.10+0"
+
+[[deps.FileIO]]
+deps = ["Pkg", "Requires", "UUIDs"]
+git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322"
+uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549"
+version = "1.16.3"
+
+[[deps.FilePaths]]
+deps = ["FilePathsBase", "MacroTools", "Reexport", "Requires"]
+git-tree-sha1 = "919d9412dbf53a2e6fe74af62a73ceed0bce0629"
+uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824"
+version = "0.8.3"
+
+[[deps.FilePathsBase]]
+deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"]
+git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa"
+uuid = "48062228-2e41-5def-b9a4-89aafe57970f"
+version = "0.9.21"
+
+[[deps.FileWatching]]
+uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee"
+
+[[deps.FillArrays]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57"
+uuid = "1a297f60-69ca-5386-bcde-b61e274b549b"
+version = "1.11.0"
+weakdeps = ["PDMats", "SparseArrays", "Statistics"]
+
+ [deps.FillArrays.extensions]
+ FillArraysPDMatsExt = "PDMats"
+ FillArraysSparseArraysExt = "SparseArrays"
+ FillArraysStatisticsExt = "Statistics"
+
+[[deps.FixedPointNumbers]]
+deps = ["Statistics"]
+git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172"
+uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93"
+version = "0.8.5"
+
+[[deps.Fontconfig_jll]]
+deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"]
+git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23"
+uuid = "a3f928ae-7b40-5064-980b-68af3947d34b"
+version = "2.13.96+0"
+
+[[deps.Format]]
+git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc"
+uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8"
+version = "1.3.7"
+
+[[deps.ForwardDiff]]
+deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"]
+git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad"
+uuid = "f6369f11-7733-5829-9624-2563aa707210"
+version = "0.10.36"
+weakdeps = ["StaticArrays"]
+
+ [deps.ForwardDiff.extensions]
+ ForwardDiffStaticArraysExt = "StaticArrays"
+
+[[deps.FreeType]]
+deps = ["CEnum", "FreeType2_jll"]
+git-tree-sha1 = "907369da0f8e80728ab49c1c7e09327bf0d6d999"
+uuid = "b38be410-82b0-50bf-ab77-7b57e271db43"
+version = "4.1.1"
+
+[[deps.FreeType2_jll]]
+deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc"
+uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7"
+version = "2.13.2+0"
+
+[[deps.FreeTypeAbstraction]]
+deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"]
+git-tree-sha1 = "2493cdfd0740015955a8e46de4ef28f49460d8bc"
+uuid = "663a7486-cb36-511b-a19d-713bb74d65c9"
+version = "0.10.3"
+
+[[deps.FriBidi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2"
+uuid = "559328eb-81f9-559d-9380-de523a88c83c"
+version = "1.0.14+0"
+
+[[deps.Future]]
+deps = ["Random"]
+uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820"
+
+[[deps.GCPDecompositions]]
+deps = ["Compat", "ForwardDiff", "IntervalSets", "LBFGSB", "LinearAlgebra", "Random"]
+git-tree-sha1 = "c29269f9bd5f2617e517fa26fc1ea5f314efa486"
+uuid = "f59fb95b-1bc8-443b-b347-5e445a549f37"
+version = "0.2.0"
+
+ [deps.GCPDecompositions.extensions]
+ LossFunctionsExt = "LossFunctions"
+
+ [deps.GCPDecompositions.weakdeps]
+ LossFunctions = "30fc2ffe-d236-52d8-8643-a9d8f7c094a7"
+
+[[deps.GeoInterface]]
+deps = ["Extents"]
+git-tree-sha1 = "801aef8228f7f04972e596b09d4dba481807c913"
+uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f"
+version = "1.3.4"
+
+[[deps.GeometryBasics]]
+deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"]
+git-tree-sha1 = "b62f2b2d76cee0d61a2ef2b3118cd2a3215d3134"
+uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326"
+version = "0.4.11"
+
+[[deps.Gettext_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"]
+git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046"
+uuid = "78b55507-aeef-58d4-861c-77aaff3498b1"
+version = "0.21.0+0"
+
+[[deps.Glib_jll]]
+deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"]
+git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba"
+uuid = "7746bdde-850d-59dc-9ae8-88ece973131d"
+version = "2.80.2+0"
+
+[[deps.Graphics]]
+deps = ["Colors", "LinearAlgebra", "NaNMath"]
+git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd"
+uuid = "a2bd30eb-e257-5431-a919-1863eab51364"
+version = "1.1.2"
+
+[[deps.Graphite2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011"
+uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472"
+version = "1.3.14+0"
+
+[[deps.GridLayoutBase]]
+deps = ["GeometryBasics", "InteractiveUtils", "Observables"]
+git-tree-sha1 = "fc713f007cff99ff9e50accba6373624ddd33588"
+uuid = "3955a311-db13-416c-9275-1d80ed98e5e9"
+version = "0.11.0"
+
+[[deps.Grisu]]
+git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2"
+uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe"
+version = "1.0.2"
+
+[[deps.Gumbo]]
+deps = ["AbstractTrees", "Gumbo_jll", "Libdl"]
+git-tree-sha1 = "a1a138dfbf9df5bace489c7a9d5196d6afdfa140"
+uuid = "708ec375-b3d6-5a57-a7ce-8257bf98657a"
+version = "0.8.2"
+
+[[deps.Gumbo_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "29070dee9df18d9565276d68a596854b1764aa38"
+uuid = "528830af-5a63-567c-a44a-034ed33b8444"
+version = "0.10.2+0"
+
+[[deps.HTTP]]
+deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"]
+git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed"
+uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3"
+version = "1.10.8"
+
+[[deps.HarfBuzz_jll]]
+deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"]
+git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3"
+uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566"
+version = "2.8.1+1"
+
+[[deps.HypergeometricFunctions]]
+deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"]
+git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685"
+uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a"
+version = "0.3.23"
+
+[[deps.ImageAxes]]
+deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"]
+git-tree-sha1 = "2e4520d67b0cef90865b3ef727594d2a58e0e1f8"
+uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac"
+version = "0.6.11"
+
+[[deps.ImageBase]]
+deps = ["ImageCore", "Reexport"]
+git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909"
+uuid = "c817782e-172a-44cc-b673-b171935fbb9e"
+version = "0.1.7"
+
+[[deps.ImageCore]]
+deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"]
+git-tree-sha1 = "b2a7eaa169c13f5bcae8131a83bc30eff8f71be0"
+uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534"
+version = "0.10.2"
+
+[[deps.ImageIO]]
+deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs"]
+git-tree-sha1 = "437abb322a41d527c197fa800455f79d414f0a3c"
+uuid = "82e4d734-157c-48bb-816b-45c225c6df19"
+version = "0.6.8"
+
+[[deps.ImageMetadata]]
+deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"]
+git-tree-sha1 = "355e2b974f2e3212a75dfb60519de21361ad3cb7"
+uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49"
+version = "0.9.9"
+
+[[deps.Imath_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52"
+uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1"
+version = "3.1.11+0"
+
+[[deps.IndirectArrays]]
+git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f"
+uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959"
+version = "1.0.0"
+
+[[deps.Inflate]]
+git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d"
+uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9"
+version = "0.1.5"
+
+[[deps.InlineStrings]]
+deps = ["Parsers"]
+git-tree-sha1 = "86356004f30f8e737eff143d57d41bd580e437aa"
+uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48"
+version = "1.4.1"
+
+ [deps.InlineStrings.extensions]
+ ArrowTypesExt = "ArrowTypes"
+
+ [deps.InlineStrings.weakdeps]
+ ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd"
+
+[[deps.IntelOpenMP_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "be50fe8df3acbffa0274a744f1a99d29c45a57f4"
+uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0"
+version = "2024.1.0+0"
+
+[[deps.InteractiveUtils]]
+deps = ["Markdown"]
+uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
+
+[[deps.Interpolations]]
+deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"]
+git-tree-sha1 = "88a101217d7cb38a7b481ccd50d21876e1d1b0e0"
+uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59"
+version = "0.15.1"
+weakdeps = ["Unitful"]
+
+ [deps.Interpolations.extensions]
+ InterpolationsUnitfulExt = "Unitful"
+
+[[deps.IntervalArithmetic]]
+deps = ["CRlibm_jll", "MacroTools", "RoundingEmulator"]
+git-tree-sha1 = "433b0bb201cd76cb087b017e49244f10394ebe9c"
+uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253"
+version = "0.22.14"
+weakdeps = ["DiffRules", "ForwardDiff", "RecipesBase"]
+
+ [deps.IntervalArithmetic.extensions]
+ IntervalArithmeticDiffRulesExt = "DiffRules"
+ IntervalArithmeticForwardDiffExt = "ForwardDiff"
+ IntervalArithmeticRecipesBaseExt = "RecipesBase"
+
+[[deps.IntervalSets]]
+git-tree-sha1 = "dba9ddf07f77f60450fe5d2e2beb9854d9a49bd0"
+uuid = "8197267c-284f-5f27-9208-e0e47529a953"
+version = "0.7.10"
+weakdeps = ["Random", "RecipesBase", "Statistics"]
+
+ [deps.IntervalSets.extensions]
+ IntervalSetsRandomExt = "Random"
+ IntervalSetsRecipesBaseExt = "RecipesBase"
+ IntervalSetsStatisticsExt = "Statistics"
+
+[[deps.InvertedIndices]]
+git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038"
+uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f"
+version = "1.3.0"
+
+[[deps.IrrationalConstants]]
+git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2"
+uuid = "92d709cd-6900-40b7-9082-c6be49f344b6"
+version = "0.2.2"
+
+[[deps.Isoband]]
+deps = ["isoband_jll"]
+git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137"
+uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4"
+version = "0.1.1"
+
+[[deps.IterTools]]
+git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023"
+uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e"
+version = "1.10.0"
+
+[[deps.IteratorInterfaceExtensions]]
+git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856"
+uuid = "82899510-4779-5014-852e-03e436cf321d"
+version = "1.0.0"
+
+[[deps.JLLWrappers]]
+deps = ["Artifacts", "Preferences"]
+git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca"
+uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210"
+version = "1.5.0"
+
+[[deps.JSON]]
+deps = ["Dates", "Mmap", "Parsers", "Unicode"]
+git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a"
+uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
+version = "0.21.4"
+
+[[deps.JpegTurbo]]
+deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"]
+git-tree-sha1 = "fa6d0bcff8583bac20f1ffa708c3913ca605c611"
+uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0"
+version = "0.1.5"
+
+[[deps.JpegTurbo_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637"
+uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8"
+version = "3.0.3+0"
+
+[[deps.KernelDensity]]
+deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"]
+git-tree-sha1 = "7d703202e65efa1369de1279c162b915e245eed1"
+uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b"
+version = "0.6.9"
+
+[[deps.LAME_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd"
+uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d"
+version = "3.100.2+0"
+
+[[deps.LBFGSB]]
+deps = ["L_BFGS_B_jll"]
+git-tree-sha1 = "e2e6f53ee20605d0ea2be473480b7480bd5091b5"
+uuid = "5be7bae1-8223-5378-bac3-9e7378a2f6e6"
+version = "0.4.1"
+
+[[deps.LLVMOpenMP_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713"
+uuid = "1d63c593-3942-5779-bab2-d838dc0a180e"
+version = "15.0.7+0"
+
+[[deps.LZO_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d"
+uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac"
+version = "2.10.2+0"
+
+[[deps.L_BFGS_B_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "77feda930ed3f04b2b0fbb5bea89e69d3677c6b0"
+uuid = "81d17ec3-03a1-5e46-b53e-bddc35a13473"
+version = "3.0.1+0"
+
+[[deps.LaTeXStrings]]
+git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec"
+uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f"
+version = "1.3.1"
+
+[[deps.LazyArtifacts]]
+deps = ["Artifacts", "Pkg"]
+uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3"
+
+[[deps.LazyModules]]
+git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e"
+uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e"
+version = "0.3.1"
+
+[[deps.LibCURL]]
+deps = ["LibCURL_jll", "MozillaCACerts_jll"]
+uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21"
+version = "0.6.4"
+
+[[deps.LibCURL_jll]]
+deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"]
+uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0"
+version = "8.4.0+0"
+
+[[deps.LibGit2]]
+deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"]
+uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
+
+[[deps.LibGit2_jll]]
+deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"]
+uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5"
+version = "1.6.4+0"
+
+[[deps.LibSSH2_jll]]
+deps = ["Artifacts", "Libdl", "MbedTLS_jll"]
+uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8"
+version = "1.11.0+1"
+
+[[deps.Libdl]]
+uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
+
+[[deps.Libffi_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290"
+uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490"
+version = "3.2.2+1"
+
+[[deps.Libgcrypt_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"]
+git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673"
+uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4"
+version = "1.8.11+0"
+
+[[deps.Libgpg_error_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed"
+uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8"
+version = "1.49.0+0"
+
+[[deps.Libiconv_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175"
+uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
+version = "1.17.0+0"
+
+[[deps.Libmount_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e"
+uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9"
+version = "2.40.1+0"
+
+[[deps.Libuuid_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807"
+uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700"
+version = "2.40.1+0"
+
+[[deps.LinearAlgebra]]
+deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"]
+uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+
+[[deps.LogExpFunctions]]
+deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"]
+git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea"
+uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688"
+version = "0.3.28"
+
+ [deps.LogExpFunctions.extensions]
+ LogExpFunctionsChainRulesCoreExt = "ChainRulesCore"
+ LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables"
+ LogExpFunctionsInverseFunctionsExt = "InverseFunctions"
+
+ [deps.LogExpFunctions.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0"
+ InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
+
+[[deps.Logging]]
+uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
+
+[[deps.LoggingExtras]]
+deps = ["Dates", "Logging"]
+git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075"
+uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36"
+version = "1.0.3"
+
+[[deps.MKL_jll]]
+deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"]
+git-tree-sha1 = "80b2833b56d466b3858d565adcd16a4a05f2089b"
+uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7"
+version = "2024.1.0+0"
+
+[[deps.MacroTools]]
+deps = ["Markdown", "Random"]
+git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df"
+uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
+version = "0.5.13"
+
+[[deps.Makie]]
+deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageIO", "InteractiveUtils", "IntervalSets", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "MakieCore", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"]
+git-tree-sha1 = "e11b0666b457e3bb60119f2ed4d063d2b68954d3"
+uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
+version = "0.21.3"
+
+[[deps.MakieCore]]
+deps = ["ColorTypes", "GeometryBasics", "IntervalSets", "Observables"]
+git-tree-sha1 = "638bc817096742e8302f7b0b972ee5701fe00e97"
+uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b"
+version = "0.8.3"
+
+[[deps.MappedArrays]]
+git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e"
+uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900"
+version = "0.4.2"
+
+[[deps.Markdown]]
+deps = ["Base64"]
+uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
+
+[[deps.MathTeXEngine]]
+deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"]
+git-tree-sha1 = "1865d0b8a2d91477c8b16b49152a32764c7b1f5f"
+uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53"
+version = "0.6.0"
+
+[[deps.MbedTLS]]
+deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"]
+git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf"
+uuid = "739be429-bea8-5141-9913-cc70e7f3736d"
+version = "1.1.9"
+
+[[deps.MbedTLS_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1"
+version = "2.28.2+1"
+
+[[deps.Missings]]
+deps = ["DataAPI"]
+git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d"
+uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28"
+version = "1.2.0"
+
+[[deps.Mmap]]
+uuid = "a63ad114-7e13-5084-954f-fe012c677804"
+
+[[deps.MosaicViews]]
+deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"]
+git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe"
+uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389"
+version = "0.3.4"
+
+[[deps.MozillaCACerts_jll]]
+uuid = "14a3606d-f60d-562e-9121-12d972cd8159"
+version = "2023.1.10"
+
+[[deps.NaNMath]]
+deps = ["OpenLibm_jll"]
+git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4"
+uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3"
+version = "1.0.2"
+
+[[deps.Netpbm]]
+deps = ["FileIO", "ImageCore", "ImageMetadata"]
+git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd"
+uuid = "f09324ee-3d7c-5217-9330-fc30815ba969"
+version = "1.1.1"
+
+[[deps.NetworkOptions]]
+uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
+version = "1.2.0"
+
+[[deps.Observables]]
+git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225"
+uuid = "510215fc-4207-5dde-b226-833fc4488ee2"
+version = "0.5.5"
+
+[[deps.OffsetArrays]]
+git-tree-sha1 = "e64b4f5ea6b7389f6f046d13d4896a8f9c1ba71e"
+uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881"
+version = "1.14.0"
+weakdeps = ["Adapt"]
+
+ [deps.OffsetArrays.extensions]
+ OffsetArraysAdaptExt = "Adapt"
+
+[[deps.Ogg_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f"
+uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051"
+version = "1.3.5+1"
+
+[[deps.OpenBLAS_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"]
+uuid = "4536629a-c528-5b80-bd46-f80d51c5b363"
+version = "0.3.23+4"
+
+[[deps.OpenEXR]]
+deps = ["Colors", "FileIO", "OpenEXR_jll"]
+git-tree-sha1 = "327f53360fdb54df7ecd01e96ef1983536d1e633"
+uuid = "52e1d378-f018-4a11-a4be-720524705ac7"
+version = "0.3.2"
+
+[[deps.OpenEXR_jll]]
+deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "8292dd5c8a38257111ada2174000a33745b06d4e"
+uuid = "18a262bb-aa17-5467-a713-aee519bc75cb"
+version = "3.2.4+0"
+
+[[deps.OpenLibm_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "05823500-19ac-5b8b-9628-191a04bc5112"
+version = "0.8.1+2"
+
+[[deps.OpenSSL]]
+deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"]
+git-tree-sha1 = "38cb508d080d21dc1128f7fb04f20387ed4c0af4"
+uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c"
+version = "1.4.3"
+
+[[deps.OpenSSL_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5"
+uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
+version = "3.0.14+0"
+
+[[deps.OpenSpecFun_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1"
+uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e"
+version = "0.5.5+0"
+
+[[deps.Opus_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720"
+uuid = "91d4177d-7536-5919-b921-800302f37372"
+version = "1.3.2+0"
+
+[[deps.OrderedCollections]]
+git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5"
+uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
+version = "1.6.3"
+
+[[deps.PCRE2_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15"
+version = "10.42.0+1"
+
+[[deps.PDMats]]
+deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"]
+git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65"
+uuid = "90014a1f-27ba-587c-ab20-58faa44d9150"
+version = "0.11.31"
+
+[[deps.PNGFiles]]
+deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"]
+git-tree-sha1 = "67186a2bc9a90f9f85ff3cc8277868961fb57cbd"
+uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883"
+version = "0.4.3"
+
+[[deps.Packing]]
+deps = ["GeometryBasics"]
+git-tree-sha1 = "ec3edfe723df33528e085e632414499f26650501"
+uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566"
+version = "0.5.0"
+
+[[deps.PaddedViews]]
+deps = ["OffsetArrays"]
+git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f"
+uuid = "5432bcbf-9aad-5242-b902-cca2824c8663"
+version = "0.5.12"
+
+[[deps.Pango_jll]]
+deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "cb5a2ab6763464ae0f19c86c56c63d4a2b0f5bda"
+uuid = "36c8627f-9965-5494-a995-c6b170f724f3"
+version = "1.52.2+0"
+
+[[deps.Parsers]]
+deps = ["Dates", "PrecompileTools", "UUIDs"]
+git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821"
+uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0"
+version = "2.8.1"
+
+[[deps.Pixman_jll]]
+deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"]
+git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b"
+uuid = "30392449-352a-5448-841d-b1acce4e97dc"
+version = "0.43.4+0"
+
+[[deps.Pkg]]
+deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"]
+uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
+version = "1.10.0"
+
+[[deps.PkgVersion]]
+deps = ["Pkg"]
+git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da"
+uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688"
+version = "0.3.3"
+
+[[deps.PlotUtils]]
+deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"]
+git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5"
+uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043"
+version = "1.4.1"
+
+[[deps.PolygonOps]]
+git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6"
+uuid = "647866c9-e3ac-4575-94e7-e3d426903924"
+version = "0.1.2"
+
+[[deps.Polynomials]]
+deps = ["LinearAlgebra", "RecipesBase", "Requires", "Setfield", "SparseArrays"]
+git-tree-sha1 = "1a9cfb2dc2c2f1bd63f1906d72af39a79b49b736"
+uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45"
+version = "4.0.11"
+
+ [deps.Polynomials.extensions]
+ PolynomialsChainRulesCoreExt = "ChainRulesCore"
+ PolynomialsFFTWExt = "FFTW"
+ PolynomialsMakieCoreExt = "MakieCore"
+ PolynomialsMutableArithmeticsExt = "MutableArithmetics"
+
+ [deps.Polynomials.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
+ MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b"
+ MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0"
+
+[[deps.PooledArrays]]
+deps = ["DataAPI", "Future"]
+git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3"
+uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720"
+version = "1.4.3"
+
+[[deps.PrecompileTools]]
+deps = ["Preferences"]
+git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f"
+uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
+version = "1.2.1"
+
+[[deps.Preferences]]
+deps = ["TOML"]
+git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6"
+uuid = "21216c6a-2e73-6563-6e65-726566657250"
+version = "1.4.3"
+
+[[deps.PrettyTables]]
+deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"]
+git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7"
+uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d"
+version = "2.3.2"
+
+[[deps.Printf]]
+deps = ["Unicode"]
+uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+
+[[deps.ProgressMeter]]
+deps = ["Distributed", "Printf"]
+git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad"
+uuid = "92933f4c-e287-5a05-a399-4b506db050ca"
+version = "1.10.0"
+
+[[deps.PtrArrays]]
+git-tree-sha1 = "f011fbb92c4d401059b2212c05c0601b70f8b759"
+uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d"
+version = "1.2.0"
+
+[[deps.QOI]]
+deps = ["ColorTypes", "FileIO", "FixedPointNumbers"]
+git-tree-sha1 = "18e8f4d1426e965c7b532ddd260599e1510d26ce"
+uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65"
+version = "1.0.0"
+
+[[deps.QuadGK]]
+deps = ["DataStructures", "LinearAlgebra"]
+git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e"
+uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc"
+version = "2.9.4"
+
+[[deps.REPL]]
+deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"]
+uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
+
+[[deps.Random]]
+deps = ["SHA"]
+uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
+
+[[deps.RangeArrays]]
+git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5"
+uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d"
+version = "0.3.2"
+
+[[deps.Ratios]]
+deps = ["Requires"]
+git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b"
+uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439"
+version = "0.4.5"
+weakdeps = ["FixedPointNumbers"]
+
+ [deps.Ratios.extensions]
+ RatiosFixedPointNumbersExt = "FixedPointNumbers"
+
+[[deps.RecipesBase]]
+deps = ["PrecompileTools"]
+git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff"
+uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01"
+version = "1.3.4"
+
+[[deps.Reexport]]
+git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b"
+uuid = "189a3867-3050-52da-a836-e630ba90ab69"
+version = "1.2.2"
+
+[[deps.RelocatableFolders]]
+deps = ["SHA", "Scratch"]
+git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864"
+uuid = "05181044-ff0b-4ac5-8273-598c1e38db00"
+version = "1.0.1"
+
+[[deps.Requires]]
+deps = ["UUIDs"]
+git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7"
+uuid = "ae029012-a4dd-5104-9daa-d747884805df"
+version = "1.3.0"
+
+[[deps.Rmath]]
+deps = ["Random", "Rmath_jll"]
+git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b"
+uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa"
+version = "0.7.1"
+
+[[deps.Rmath_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "d483cd324ce5cf5d61b77930f0bbd6cb61927d21"
+uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f"
+version = "0.4.2+0"
+
+[[deps.RoundingEmulator]]
+git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b"
+uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705"
+version = "0.2.1"
+
+[[deps.SHA]]
+uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
+version = "0.7.0"
+
+[[deps.SIMD]]
+deps = ["PrecompileTools"]
+git-tree-sha1 = "2803cab51702db743f3fda07dd1745aadfbf43bd"
+uuid = "fdea26ae-647d-5447-a871-4b548cad5224"
+version = "3.5.0"
+
+[[deps.Scratch]]
+deps = ["Dates"]
+git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386"
+uuid = "6c6a2e73-6563-6170-7368-637461726353"
+version = "1.2.1"
+
+[[deps.SentinelArrays]]
+deps = ["Dates", "Random"]
+git-tree-sha1 = "90b4f68892337554d31cdcdbe19e48989f26c7e6"
+uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c"
+version = "1.4.3"
+
+[[deps.Serialization]]
+uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
+
+[[deps.Setfield]]
+deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"]
+git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac"
+uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46"
+version = "1.1.1"
+
+[[deps.ShaderAbstractions]]
+deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays", "StructArrays", "Tables"]
+git-tree-sha1 = "79123bc60c5507f035e6d1d9e563bb2971954ec8"
+uuid = "65257c39-d410-5151-9873-9b3e5be5013e"
+version = "0.4.1"
+
+[[deps.SharedArrays]]
+deps = ["Distributed", "Mmap", "Random", "Serialization"]
+uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
+
+[[deps.Showoff]]
+deps = ["Dates", "Grisu"]
+git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de"
+uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f"
+version = "1.0.3"
+
+[[deps.SignedDistanceFields]]
+deps = ["Random", "Statistics", "Test"]
+git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9"
+uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96"
+version = "0.4.0"
+
+[[deps.SimpleBufferStream]]
+git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1"
+uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7"
+version = "1.1.0"
+
+[[deps.SimpleTraits]]
+deps = ["InteractiveUtils", "MacroTools"]
+git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231"
+uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d"
+version = "0.9.4"
+
+[[deps.Sixel]]
+deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"]
+git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6"
+uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47"
+version = "0.1.3"
+
+[[deps.Sockets]]
+uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
+
+[[deps.SortingAlgorithms]]
+deps = ["DataStructures"]
+git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085"
+uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c"
+version = "1.2.1"
+
+[[deps.SparseArrays]]
+deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"]
+uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+version = "1.10.0"
+
+[[deps.SpecialFunctions]]
+deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"]
+git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14"
+uuid = "276daf66-3868-5448-9aa4-cd146d93841b"
+version = "2.4.0"
+weakdeps = ["ChainRulesCore"]
+
+ [deps.SpecialFunctions.extensions]
+ SpecialFunctionsChainRulesCoreExt = "ChainRulesCore"
+
+[[deps.StackViews]]
+deps = ["OffsetArrays"]
+git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c"
+uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15"
+version = "0.1.1"
+
+[[deps.StaticArrays]]
+deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"]
+git-tree-sha1 = "20833c5b7f7edf0e5026f23db7f268e4f23ec577"
+uuid = "90137ffa-7385-5640-81b9-e52037218182"
+version = "1.9.6"
+weakdeps = ["ChainRulesCore", "Statistics"]
+
+ [deps.StaticArrays.extensions]
+ StaticArraysChainRulesCoreExt = "ChainRulesCore"
+ StaticArraysStatisticsExt = "Statistics"
+
+[[deps.StaticArraysCore]]
+git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682"
+uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c"
+version = "1.4.3"
+
+[[deps.Statistics]]
+deps = ["LinearAlgebra", "SparseArrays"]
+uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+version = "1.10.0"
+
+[[deps.StatsAPI]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed"
+uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0"
+version = "1.7.0"
+
+[[deps.StatsBase]]
+deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"]
+git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21"
+uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
+version = "0.34.3"
+
+[[deps.StatsFuns]]
+deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"]
+git-tree-sha1 = "cef0472124fab0695b58ca35a77c6fb942fdab8a"
+uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c"
+version = "1.3.1"
+
+ [deps.StatsFuns.extensions]
+ StatsFunsChainRulesCoreExt = "ChainRulesCore"
+ StatsFunsInverseFunctionsExt = "InverseFunctions"
+
+ [deps.StatsFuns.weakdeps]
+ ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4"
+ InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
+
+[[deps.StringManipulation]]
+deps = ["PrecompileTools"]
+git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5"
+uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e"
+version = "0.3.4"
+
+[[deps.StructArrays]]
+deps = ["ConstructionBase", "DataAPI", "Tables"]
+git-tree-sha1 = "f4dc295e983502292c4c3f951dbb4e985e35b3be"
+uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a"
+version = "0.6.18"
+
+ [deps.StructArrays.extensions]
+ StructArraysAdaptExt = "Adapt"
+ StructArraysGPUArraysCoreExt = "GPUArraysCore"
+ StructArraysSparseArraysExt = "SparseArrays"
+ StructArraysStaticArraysExt = "StaticArrays"
+
+ [deps.StructArrays.weakdeps]
+ Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e"
+ GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
+ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+ StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
+
+[[deps.SuiteSparse]]
+deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"]
+uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9"
+
+[[deps.SuiteSparse_jll]]
+deps = ["Artifacts", "Libdl", "libblastrampoline_jll"]
+uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c"
+version = "7.2.1+1"
+
+[[deps.TOML]]
+deps = ["Dates"]
+uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
+version = "1.0.3"
+
+[[deps.TableMetadataTools]]
+deps = ["DataAPI", "Dates", "TOML", "Tables", "Unitful"]
+git-tree-sha1 = "c0405d3f8189bb9a9755e429c6ea2138fca7e31f"
+uuid = "9ce81f87-eacc-4366-bf80-b621a3098ee2"
+version = "0.1.0"
+
+[[deps.TableTraits]]
+deps = ["IteratorInterfaceExtensions"]
+git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39"
+uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c"
+version = "1.0.1"
+
+[[deps.Tables]]
+deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"]
+git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d"
+uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c"
+version = "1.11.1"
+
+[[deps.Tar]]
+deps = ["ArgTools", "SHA"]
+uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e"
+version = "1.10.0"
+
+[[deps.TensorCore]]
+deps = ["LinearAlgebra"]
+git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6"
+uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50"
+version = "0.1.1"
+
+[[deps.Test]]
+deps = ["InteractiveUtils", "Logging", "Random", "Serialization"]
+uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[deps.TiffImages]]
+deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "SIMD", "UUIDs"]
+git-tree-sha1 = "bc7fd5c91041f44636b2c134041f7e5263ce58ae"
+uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69"
+version = "0.10.0"
+
+[[deps.TranscodingStreams]]
+git-tree-sha1 = "d73336d81cafdc277ff45558bb7eaa2b04a8e472"
+uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa"
+version = "0.10.10"
+weakdeps = ["Random", "Test"]
+
+ [deps.TranscodingStreams.extensions]
+ TestExt = ["Test", "Random"]
+
+[[deps.TriplotBase]]
+git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b"
+uuid = "981d1d27-644d-49a2-9326-4793e63143c3"
+version = "0.1.0"
+
+[[deps.URIs]]
+git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b"
+uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4"
+version = "1.5.1"
+
+[[deps.UUIDs]]
+deps = ["Random", "SHA"]
+uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
+
+[[deps.Unicode]]
+uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
+
+[[deps.UnicodeFun]]
+deps = ["REPL"]
+git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf"
+uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1"
+version = "0.4.1"
+
+[[deps.Unitful]]
+deps = ["Dates", "LinearAlgebra", "Random"]
+git-tree-sha1 = "dd260903fdabea27d9b6021689b3cd5401a57748"
+uuid = "1986cc42-f94f-5a68-af5c-568840ba703d"
+version = "1.20.0"
+
+ [deps.Unitful.extensions]
+ ConstructionBaseUnitfulExt = "ConstructionBase"
+ InverseFunctionsUnitfulExt = "InverseFunctions"
+
+ [deps.Unitful.weakdeps]
+ ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9"
+ InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112"
+
+[[deps.WeakRefStrings]]
+deps = ["DataAPI", "InlineStrings", "Parsers"]
+git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23"
+uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5"
+version = "1.4.2"
+
+[[deps.WoodburyMatrices]]
+deps = ["LinearAlgebra", "SparseArrays"]
+git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511"
+uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6"
+version = "1.0.0"
+
+[[deps.WorkerUtilities]]
+git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7"
+uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60"
+version = "1.6.1"
+
+[[deps.XML2_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"]
+git-tree-sha1 = "52ff2af32e591541550bd753c0da8b9bc92bb9d9"
+uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a"
+version = "2.12.7+0"
+
+[[deps.XSLT_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"]
+git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a"
+uuid = "aed1982a-8fda-507f-9586-7b0439959a61"
+version = "1.1.34+0"
+
+[[deps.Xorg_libX11_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"]
+git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495"
+uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc"
+version = "1.8.6+0"
+
+[[deps.Xorg_libXau_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8"
+uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec"
+version = "1.0.11+0"
+
+[[deps.Xorg_libXdmcp_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7"
+uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05"
+version = "1.1.4+0"
+
+[[deps.Xorg_libXext_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85"
+uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3"
+version = "1.3.6+0"
+
+[[deps.Xorg_libXrender_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"]
+git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe"
+uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa"
+version = "0.9.11+0"
+
+[[deps.Xorg_libpthread_stubs_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9"
+uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74"
+version = "0.1.1+0"
+
+[[deps.Xorg_libxcb_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"]
+git-tree-sha1 = "bcd466676fef0878338c61e655629fa7bbc69d8e"
+uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b"
+version = "1.17.0+0"
+
+[[deps.Xorg_xtrans_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77"
+uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10"
+version = "1.5.0+0"
+
+[[deps.Zlib_jll]]
+deps = ["Libdl"]
+uuid = "83775a58-1f1d-513f-b197-d71354ab007a"
+version = "1.2.13+1"
+
+[[deps.isoband_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c"
+uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4"
+version = "0.2.3+0"
+
+[[deps.libaom_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d"
+uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b"
+version = "3.9.0+0"
+
+[[deps.libass_jll]]
+deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"]
+git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47"
+uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0"
+version = "0.15.1+0"
+
+[[deps.libblastrampoline_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "8e850b90-86db-534c-a0d3-1478176c7d93"
+version = "5.8.0+1"
+
+[[deps.libfdk_aac_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55"
+uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280"
+version = "2.0.2+0"
+
+[[deps.libpng_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"]
+git-tree-sha1 = "d7015d2e18a5fd9a4f47de711837e980519781a4"
+uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f"
+version = "1.6.43+1"
+
+[[deps.libsixel_jll]]
+deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "libpng_jll"]
+git-tree-sha1 = "d4f63314c8aa1e48cd22aa0c17ed76cd1ae48c3c"
+uuid = "075b6546-f08a-558a-be8f-8157d0f608a5"
+version = "1.10.3+0"
+
+[[deps.libvorbis_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"]
+git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c"
+uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a"
+version = "1.3.7+1"
+
+[[deps.nghttp2_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d"
+version = "1.52.0+1"
+
+[[deps.oneTBB_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl"]
+git-tree-sha1 = "7d0ea0f4895ef2f5cb83645fa689e52cb55cf493"
+uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e"
+version = "2021.12.0+0"
+
+[[deps.p7zip_jll]]
+deps = ["Artifacts", "Libdl"]
+uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0"
+version = "17.4.0+2"
+
+[[deps.x264_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2"
+uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a"
+version = "2021.5.5+0"
+
+[[deps.x265_jll]]
+deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"]
+git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9"
+uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76"
+version = "3.5.0+0"
+"""
+
+# ╔═╡ Cell order:
+# ╟─8e067b40-3e2b-11ef-1ef3-a574b6ca03c4
+# ╟─7cdd2f4a-a3e9-4a9b-a009-b31ab0e856de
+# ╠═2ab7e40d-57cd-4f3d-90ad-ec32c69b37fb
+# ╠═6c5957c0-baec-42af-94ac-24064e1f6581
+# ╟─02f06782-a038-4d4f-bd37-f4a31212907a
+# ╟─42e0beef-000b-41a1-b6cb-6456a5da5eb5
+# ╠═74cb492d-7b9a-49e8-a8e3-16ac2e3448ca
+# ╠═eaa32830-0a48-4124-8088-f5bc7a9b4ff3
+# ╠═60fda4f4-4c0a-4c24-bf6c-a6944d00c5a7
+# ╟─4bcc5961-f328-40aa-a0dc-f1755fa58e72
+# ╠═2e4faef9-d8a2-4a8f-8e83-a9c5b280d174
+# ╠═7a20002f-5724-46dc-b147-af0d42c8523c
+# ╟─d20c9cd7-6726-4431-98d7-4ca07bc70b5a
+# ╟─2d3441eb-3cf9-49c0-b09e-52f5e235c8ca
+# ╟─1eaa449c-4a13-4225-8d5a-7c9a2cdf2949
+# ╟─9c87cbe5-9f4a-476f-870f-8f6c4fe8e58c
+# ╟─0b298b6a-f736-4c66-a8d0-bb1b3bda0f6a
+# ╟─be70f54d-ce70-4886-a4e2-5d5734d79f61
+# ╟─37889ed2-104f-4441-b85a-47c2d03adf0e
+# ╠═52358d59-c78d-465a-8d2b-bbc6f3e31a78
+# ╟─c867179d-efdb-4bb5-84f6-92fb6b400232
+# ╠═9c959be1-8bbb-4dc3-9da7-370927d18e38
+# ╟─d9507fad-dedd-44a2-b60f-cf91bebcc2ba
+# ╟─24a3e00b-bc95-42a6-99da-a7bdcb6fd23b
+# ╠═9ea3a825-7239-42de-ba57-09ddd49af582
+# ╟─f38f5ea4-ec79-4cac-b391-df1eb54fd551
+# ╠═1eeea4cd-e91d-4689-9f04-7dd988ced77c
+# ╟─cb4387d8-1bee-464f-8fc1-1322a276c473
+# ╟─1aca785f-c8a7-4619-8985-557ad275092b
+# ╠═c1fc702b-0fb0-48c5-af4d-79bfeb95c908
+# ╟─729caa2a-0a5d-471d-a75f-6b4a51c50808
+# ╟─9627bf54-da57-4c89-afa4-f994341cf27c
+# ╟─be21b5a6-17db-4675-86e1-25051f9ad26b
+# ╠═0b43b746-74ca-4df4-bd03-1c8335dc2def
+# ╟─73eb1b18-55c7-4385-9993-b71675f11443
+# ╟─29b56156-58d6-4ea9-9075-40c2c5474636
+# ╟─29d68c9b-1fb8-4c6f-b991-59175b0d89de
+# ╟─9a1d6cca-3ff3-4a56-b82d-3b0fd3daee0a
+# ╟─7c87de40-919f-445b-a767-d0ef1f14e44a
+# ╠═7d3b3c72-0ac3-4cb8-a430-04a1ea12ad0f
+# ╟─3265f499-c53d-49d2-8826-499b656013e7
+# ╟─a1fce48b-79f3-4f19-b488-2b6a5d5b25e6
+# ╠═1a8401dc-0950-40d8-99c8-4440fd43483f
+# ╟─e271d658-6147-4671-81cc-9e76c205d0b2
+# ╟─a6f55950-d1bd-4a3c-89b3-712c02d19e1e
+# ╟─4eca0dde-4557-4c7d-a49a-96a664bd3aba
+# ╟─00000000-0000-0000-0000-000000000001
+# ╟─00000000-0000-0000-0000-000000000002