diff --git a/6_number.jl b/6_number.jl index e08719c5ed9c044bac26b823703d21eb42d9042a..bb6bc036769e7a62f2f2c328d846dfef0ebda2f7 100644 --- a/6_number.jl +++ b/6_number.jl @@ -15,7 +15,7 @@ macro bind(def, element) end # â•”â•â•¡ 06679a09-47d7-4024-8232-4954c08747a0 -using PlutoUI, Primes, DataFrames +using PlutoUI, Primes, DataFrames, Luxor, Colors, LinearAlgebra # â•”â•â•¡ 1b1d5c9b-5fc7-480e-9649-e9c44a49c38d include("utils.jl") @@ -369,18 +369,189 @@ prime_list = primes(3, primes_upper) # â•”â•â•¡ 61462af5-69bd-42be-8918-7992c79ee00d qa(md"Comment savoir si `prime_list` contient assez de nombres pour avoir la bonne réponse ?", md"On a la bonne réponse modulo `prod(prime_list)` donc si `prod(prime_list) > 2^power`, on a la bonne réponse.") +# â•”â•â•¡ 592ae01b-2819-402d-9538-17018df5c34b +frametitle("Fibonacci sequence") + +# â•”â•â•¡ 594829e2-585b-4d48-bb6e-b35d9543cfbe +frametitle("Fast powering for matrices") + +# â•”â•â•¡ 72ec8410-05d9-475a-93d4-47153cc0ce31 +fib_rec(n) = (n == 0 ? 0 : (n == 1 ? 1 : fib_rec(n - 1) + fib_rec(n - 2))) + +# â•”â•â•¡ 027fe67c-d2f0-49f6-b894-959795551d27 +@time fib_rec(32) + +# â•”â•â•¡ 462fa407-d973-4e9e-8512-b7cd3bb98b7b +function fib_seq(n) + f = zeros(BigInt, n + 1) + f[2] = 1 + for k in 2:n + f[k + 1] = f[k] + f[k - 1] + end + return f[end] +end + +# â•”â•â•¡ 3cd40d9e-fcea-427d-9877-cea65e7ea413 +@time fib_seq(20000) + +# â•”â•â•¡ 38744170-9af6-44b5-a0be-46a83da3253e +function fib_pow(n) + A = BigInt[1 1 + 1 0] + x = A^(n-1) * [1, 0] + return x[1] +end + +# â•”â•â•¡ a1081bb2-2186-4b19-b667-0c246155f360 +@time fib_pow(20000) + +# â•”â•â•¡ 4714b7d7-32ee-42a1-bfa5-93eafda739d3 +frametitle("Diagonalization to speed up powering") + +# â•”â•â•¡ b5f3620d-0942-41bb-80b0-d2ddcfe65090 +E = eigen([1 1; 1 0]) + +# â•”â•â•¡ 19ef447f-9fdf-49e1-8d1a-7860b4d4e9ba +D = Diagonal([(1 - √big(5)) / 2, (1 + √big(5)) / 2]) + +# â•”â•â•¡ 6cf004be-5205-429e-8131-ef607cebeaec +E.vectors + +# â•”â•â•¡ f6e22fc3-382e-4548-bc59-8f944e06d237 +E.vectors * Diagonal(E.values) * inv(E.vectors) + +# â•”â•â•¡ d830fffd-3781-40ca-85cb-c242f99667ce +function fib_diag(n) + x = E.vectors * D^(n - 1) * (E.vectors \ [1, 0]) + return x[1] +end + +# â•”â•â•¡ ac5e1516-1574-4893-a965-f799947076cb +@time fib_diag(20000) + +# â•”â•â•¡ 4cb070de-e8bf-4a1d-9625-043c19466c46 +@time fib_pow(20000) + +# â•”â•â•¡ 6c3bca1a-3109-4e48-97e1-e0ed4599ffb2 +frametitle("Closed form solution") + +# â•”â•â•¡ 1ca71c26-f98c-4126-a1c5-98786fde7e9b +md""" +Trouver ``b`` tel que ``x_k`` est solution: +```math +x_k = b^k +\quad \to \quad b^{k+1} = b^k + b^{k-1} +\quad \to \quad b^2 - b - 1 = 0 +\quad \to \quad b = \frac{1 \pm \sqrt{5}}{2} +``` +On a donc une famille de solutions: +```math +x_k = a_1 +\left(\frac{1 - \sqrt5}{2}\right)^k + +a_2 +\left(\frac{1 + \sqrt5}{2}\right)^k +``` +Il reste à trouver ``a_1`` et ``a_2`` tels que ``x_0 = 0`` et ``x_1 = 1``. Ça correspond à calculer `E.vectors \ [1, 0]`, etc... +```math +\begin{align} + x_0 & = 0 & a_1 + a_2 & = 0\\ + x_1 & = 1 & a_1 \frac{1 - \sqrt5}{2} + a_2 \frac{1 + \sqrt5}{2} & = 1 +\end{align} +``` +Donc ``a_1 = -1/\sqrt5`` et ``a_2 = 1/\sqrt5``. +""" + +# â•”â•â•¡ 535f4bc1-e88c-47c7-990b-e3c8b5054acc +fib_closed(n) = (((1 + √big(5)) / 2)^n - ((1 - √big(5)) / 2)^n) / √big(5) + +# â•”â•â•¡ 9b9fc5e6-1a41-43c5-ba43-2c93bc3ef66b +@time fib_closed(20000) + +# â•”â•â•¡ d882afdd-eb85-467c-bf18-525c0c5da5e7 +@time fib_diag(20000) + +# â•”â•â•¡ 192f608c-0563-4179-903f-49fad2db4c74 +@time fib_pow(20000) + # â•”â•â•¡ 8f6ba1c4-a971-4dc4-ac5d-2f30790aecde frametitle("Fermat’s Little Theorem") +# â•”â•â•¡ bc58ba24-90f0-4913-8f66-10bb6cb54076 +md""" +**Définition** ``g`` est une *racine primitive* modulo ``p`` si ``g^k`` prend toutes les valeurs ``1, 2, ..., p - 1``. + +```math +\text{Si } \quad p \nmid b,\quad \text{ alors } \quad +b^{p - 1} \equiv 1 \pmod{p} +``` +""" + # â•”â•â•¡ 82ba8fe1-435e-422b-abb7-cb50a7a85e1e frametitle("Dicrete logarithm") +# â•”â•â•¡ 8b16a522-9be4-4286-b64d-3d1bbdef7142 +md""" +Étant donné un nombre premier ``p`` et une racine primitive ``g`` modulo ``p`` et un entier ``a`` tel que ``p \nmid a``, le *Discrete logarithme problem* consiste à retrouver ``x`` tel que ``g^x \equiv a \pmod{p}``. +""" + +# â•”â•â•¡ ec14d629-b720-47cd-bc08-ff96f49271ab +function discrete_log(a, g, p) + gx = one(a) + for x = 0:(p-2) + if a == gx + return x + end + gx = mod(gx * g, p) + end +end + +# â•”â•â•¡ ee43c389-55f4-4cf9-a8db-ce37d1b89db4 +frametitle("Shanks's Babystep–Giantstep Algorithm") + +# â•”â•â•¡ 4853f4ef-fbb8-48c3-9523-13ab4969d097 +function baby_steps(g, n, p) + steps = [one(g)] + for i in 1:n + push!(steps, mod(steps[end] * g, p)) + end + return steps +end + +# â•”â•â•¡ 3026f9c5-81d3-443a-940a-f22fef9754af +function giant_steps(g, n, p) + gn = fast_mod_power(g, n, p) + return baby_steps.(modinv(gn, p), n, p) +end + +# â•”â•â•¡ 6e5e3ec6-c96a-4a4a-bf4d-4b115f9b0d82 +function collision(a, b) + d = Dict(a[i] => i for i in eachindex(a)) + for j in eachindex(b) + if haskey(d, b[j]) + return d[b[j]], j + end + end +end + +# â•”â•â•¡ 7330af43-bec3-460c-94f6-768ac2975b00 +function shanks_discrete_log(a, g, p) + n = isqrt(p) + 1 + i, j = collision(baby_steps(g, n, p), mod.(a .* giant_steps(g, n, p), p)) + return i - 1 + (j - 1) * n +end + +# â•”â•â•¡ 1e27eedc-5308-4608-863f-fb81d60acdf0 +qa(md"Quelle est la complexité?", md"???") + # â•”â•â•¡ a293bb0e-078d-4335-a446-3096a79c03bc frametitle("Diffie-Hellman") # â•”â•â•¡ 3da58487-192f-458a-9d47-7a4ce98b6da3 section("Utils") +# â•”â•â•¡ 7f9bd301-355b-43f5-b168-22fac9e52511 +Primes.primes(10) + # â•”â•â•¡ bafc9870-3823-4d1d-b0b7-94c69ee764d5 import DocumenterCitations @@ -457,6 +628,167 @@ chinese_remainder_theorem(big.(fast_mod_power.(2, power, prime_list)), big.(prim # â•”â•â•¡ e9633e3f-376d-413d-bc19-d015f6ce76e5 big(2)^power +# â•”â•â•¡ 8315b53f-abca-483d-bbf6-7e9193e751c9 +function draw_fib(n, size = 400) + f = [0, 1, 1] + for i in 3:(n+1) + push!(f, f[end] + f[end - 1]) + end + scale = div(size, 2maximum(f[end-1])) + #Luxor.scale(scale) + colors = distinguishable_colors(n) + if iseven(n) + Δx = f[end] + Δy = f[end - 1] + else + Δx = f[end - 1] + Δy = f[end] + end + left_most = sum(f[i] for i in 1:(n+1) if mod(i, 4) == 1; init = 0) + up_most = sum(f[i] for i in 1:(n+1) if mod(i, 4) == 0; init = 0) + shift = Point(left_most - Δx / 2, up_most - Δy / 2) + pos(x, y) = scale * (Point(x, y) + shift) + @draw begin + x = 0 + y = 0 + j = 1 + for i in 2:(n+1) + left = x + if isodd(i) + if iseven(div(i - 1, 2)) + left -= f[i] + else + left += f[i - 1] + end + end + up = y + if iseven(i) + if iseven(div(i, 2)) + up -= f[i] + else + up += f[i-1] + end + end + sethue(colors[i - 1]) + setopacity(0.6) + rect(pos(left, up), scale * f[i], scale * f[i], action=:fill) + setopacity(1) + sethue("black") + fontsize(div(scale * f[i], 2)) + text(string(f[i]), pos(left + f[i] / 2, up + f[i] / 2), halign = :center, valign = :middle) + x = min(x, left) + y = min(y, up) + end + end Δx * scale Δy * scale +end + +# â•”â•â•¡ 0c8ab02e-80b0-44d6-a4a8-c813aac38209 +fib_picker = @bind fib_n Slider(1:12, default = 10, show_value = true) + +# â•”â•â•¡ 708c442b-cbff-4e1a-b70d-e704453cfd3d +HAlign( +md""" +Équation de récurrence: +```math +x_{k+1} = x_k + x_{k-1} +``` +Reformulation sans ``(k-1)`` +```math +\begin{align} +x_{k+1} & = x_k + y_{k}\\ +y_{k+1} & = x_k +\end{align} +``` +Forme matricielle: +```math +\begin{bmatrix} +x_{k+1}\\ +y_{k+1} +\end{bmatrix} += +\begin{bmatrix} +1 & 1\\ +1 & 0 +\end{bmatrix} +\begin{bmatrix} +x_{k}\\ +y_{k} +\end{bmatrix} +``` +Matrix power: +```math +\begin{bmatrix} +x_n\\ +y_n +\end{bmatrix} += +\begin{bmatrix} +1 & 1\\ +1 & 0 +\end{bmatrix}^n +\begin{bmatrix} +x_0\\ +y_0 +\end{bmatrix} +``` +""", +md""" +`n` = $(fib_picker)\ + +$(draw_fib(fib_n)) +""", +) + +# â•”â•â•¡ 57816e2c-a675-43e7-b674-2877ffcf1415 +p_picker = @bind p Slider(primes(20), default = 11, show_value = true) + +# â•”â•â•¡ 0e3fb524-bea1-4ef0-9589-36230a84e949 +gp_picker = HAlign( + md"`g` = $(@bind g Slider(2:(p-1), default = 2, show_value = true))", + md"`p` = $p_picker", +) + +# â•”â•â•¡ 4cff1d10-422f-4b12-b790-a589c972fbb7 +gp_picker + +# â•”â•â•¡ 59ac02af-7b54-44d4-b5f4-a0f60d4458a1 +all_powers = fast_mod_power.(g, 1:(p-1), p) + +# â•”â•â•¡ 9f55cad1-b01a-45e3-93df-a4349e2dfbd3 +sort(all_powers) + +# â•”â•â•¡ e2a3842d-4e07-4703-ab47-a5140649dd6a +unique(sort(all_powers)) + +# â•”â•â•¡ 08dcbbd3-a531-4f74-a724-1cae8fae1636 +if length(unique(sort(all_powers))) == p - 1 + md"Le nombre $g **est** une racine primitive modulo $p" +else + md"Le nombre $g **n'est pas** une racine primitive modulo $p" +end + +# â•”â•â•¡ 059b0ada-2442-48e4-82dd-489cb97e5dcc +gp_picker + +# â•”â•â•¡ 4be6cea4-13a2-4bcb-b849-14eef57ab604 +if length(unique(sort(all_powers))) == p - 1 + md"Le nombre $g **est** une racine primitive modulo $p" +else + md"Le nombre $g **n'est pas** une racine primitive modulo $p" +end + +# â•”â•â•¡ 9efb7a71-9a03-4716-8d34-aae233e9b898 +x = discrete_log(3, g, p) + +# â•”â•â•¡ 9bdb30ba-48a7-4e1b-96c2-ea0e059d5253 +fast_mod_power(g, x, p) + +# â•”â•â•¡ 59254bfd-48f2-4585-9ba5-e4c809421072 +shanks_x = shanks_discrete_log(3, g, p) + +# â•”â•â•¡ ab467d70-ceb1-40e5-b8fe-82e2f1bd95fd +fast_mod_power(g, shanks_x, p) + # â•”â•â•¡ ba16d83d-21a5-4f0c-807b-674a167da4dc biblio = load_biblio!() @@ -466,11 +798,40 @@ cite(args...) = bibcite(biblio, args...) # â•”â•â•¡ 3df688c8-1c52-462d-88be-daa153333c60 md""" * Théorie des nombres: $(cite("hoffstein2014Introduction", "1.2, 1.3, 1.4, 1.5, 2.2, 2.3")) -* Diffie-Hellman: $(cite("hoffstein2014Introduction", "2.2, 2.3")) +* Discrete Logarithme Problem et Diffie-Hellman: $(cite("hoffstein2014Introduction", "2.2, 2.3, 2.6, 2.7, 2.8")) +""" + +# â•”â•â•¡ a7afc0cb-a980-4f4f-b782-9791d932ee52 +md""" +Voir $(cite("hoffstein2014Introduction", "Section 2.8")). """ # â•”â•â•¡ ed023033-1044-4d48-aab1-39e9300043f7 -cite("hoffstein2014Introduction", "Theorem 1.24") +md""" +**Fermat's little theorem** $(cite("hoffstein2014Introduction", "Theorem 1.24")) + +```math +\text{Si} \quad p \text{ est premier}\quad \text{et} \quad p \nmid g,\quad \text{alors} \quad +g^{p - 1} \equiv 1 \pmod{p}. +``` +""" + +# â•”â•â•¡ bcf73ad7-a08b-4cbb-bcd2-d0abc002e7e2 +qa(md"Quelle est la complexité spatiale et temporelle de `discrete_log` ?", md""" +``\mathcal{O}(p)`` temporelle et ``\Omega(1)`` spatiale. Voir $(cite("hoffstein2014Introduction", "Proposition 2.19")). +""") + +# â•”â•â•¡ bc9a718f-4b97-4e15-acf8-d180abc5b6d5 +qa(md"Est-ce une complexité linéaire ou exponentielle en fonction de la taille de l'input", +md""" +La taille est proportionnelle à ``\log_2(p)`` donc on être linéaire en ``p`` c'est être proportionnel à ``2^{\log_2(p)}`` et donc la complexité est exponentielle en la taille de l'input ! $(cite("hoffstein2014Introduction", "Section 2.6")) +""") + +# â•”â•â•¡ 1072a756-5026-4de9-93a8-f942d54c474a +md"""Voir $(cite("hoffstein2014Introduction", "Section 2.7"))""" + +# â•”â•â•¡ 35b7b8b7-bff6-4f64-91b9-b65035162365 +md"""Voir $(cite("hoffstein2014Introduction", "Section 2.3"))""" # â•”â•â•¡ 8a5a251f-5373-445a-97b1-4d652c6b7ba8 refs(keys) = bibrefs(biblio, keys) @@ -481,14 +842,19 @@ refs(["hoffstein2014Introduction"]) # â•”â•â•¡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] +Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" DocumenterCitations = "daee34ce-89f3-4625-b898-19384cb65244" +LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +Luxor = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" PlutoUI = "7f904dfe-b85e-4ff6-b463-dae2292396a8" Primes = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" [compat] +Colors = "~0.12.11" DataFrames = "~1.7.0" DocumenterCitations = "~1.3.5" +Luxor = "~4.1.0" PlutoUI = "~0.7.60" Primes = "~0.5.6" """ @@ -499,7 +865,7 @@ PLUTO_MANIFEST_TOML_CONTENTS = """ julia_version = "1.11.1" manifest_format = "2.0" -project_hash = "39cd322a83db7ad72fd4bf305476ad8bef3b75b5" +project_hash = "ac1471e25fb09e7b5045e691de8d2b60f0992157" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" @@ -547,6 +913,24 @@ git-tree-sha1 = "520c679daed011ce835d9efa7778863aad6687ed" uuid = "f1be7e48-bf82-45af-a471-ae754a193061" version = "0.2.20" +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "8873e196c2eb87962a2048b3b8e08946535864a1" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+2" + +[[deps.Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "71aa551c5c33f1a4415867fe06b7844faadb0ae9" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.1.1" + +[[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 = "009060c9a6168704143100f36ab08f06c2af4642" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.2+1" + [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "bce6804e5e6044c6daab27bb533d1295e4a2e759" @@ -559,6 +943,12 @@ git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" version = "0.11.5" +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + [[deps.Compat]] deps = ["TOML", "UUIDs"] git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" @@ -635,6 +1025,18 @@ git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" version = "2.6.2+0" +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "53ebe7511fa11d33bec688a9178fac4e49eeee00" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.2" + +[[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 = "466d45dc38e15794ec7d5d63ec03d776a9aff36e" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.4.4+1" + [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] git-tree-sha1 = "91e0e5c68d02bcdaae76d3c8ceb4361e8f28d2e9" @@ -651,11 +1053,35 @@ 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.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.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" version = "1.11.0" +[[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.Git]] deps = ["Git_jll"] git-tree-sha1 = "04eff47b1354d702c3a85e8ab23d539bb7d5957e" @@ -668,6 +1094,30 @@ git-tree-sha1 = "ea372033d09e4552a04fd38361cd019f9003f4f4" uuid = "f8c6e375-362e-5223-8a59-34ff63f689eb" version = "2.46.2+0" +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "674ff0db93fffcd11a3573986e550d66cd4fd71f" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.5+0" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "a641238db938fff9b2f60d08ed9030387daf428c" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.3" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "401e4f3f30f43af2c8478fc008da50096ea5240f" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "8.3.1+0" + [[deps.Hyperscript]] deps = ["Test"] git-tree-sha1 = "179267cfa5e712760cd43dcae385d7ea90cc25a4" @@ -749,6 +1199,36 @@ git-tree-sha1 = "243f1cdb476835d7c249deb9f29ad6b7827da7d3" uuid = "7d188eb4-7ad8-530c-ae41-71a32a6d4692" version = "1.4.1" +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "25ee0be4d43d0269027024d75a24c24d6c6e590c" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.4+0" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "36bdbc52f13a7d1dcb0f3cd694e01677a515655b" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "4.0.0+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "78211fb6cbc872f77cad3fc0b6cf647d923f4929" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "18.1.7+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "854a9c268c43b77b0a27f22d7fab8d33cdb3a731" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+1" + [[deps.LaTeXStrings]] git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" @@ -788,12 +1268,54 @@ version = "1.11.0+1" uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" version = "1.11.0" +[[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 = "8be878062e0ffa2c3f67bb58a595375eda5de80b" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.11.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c6ce1e19f3aec9b59186bdf06cdf3c4fc5f5f3e6" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.50.0+0" + [[deps.Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "61dfdba58e585066d8bce214c5a51eaa0539f269" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" version = "1.17.0+1" +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Librsvg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pango_jll", "Pkg", "gdk_pixbuf_jll"] +git-tree-sha1 = "ae0923dab7324e6bc980834f709c4cd83dd797ed" +uuid = "925c91fb-5dd6-59dd-8e8c-345e74382d89" +version = "2.54.5+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "b404131d06f7886402758c9ce2214b636eb4d54a" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.7.0+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" @@ -803,6 +1325,19 @@ version = "1.11.0" uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" version = "1.11.0" +[[deps.Luxor]] +deps = ["Base64", "Cairo", "Colors", "DataStructures", "Dates", "FFMPEG", "FileIO", "PolygonAlgorithms", "PrecompileTools", "Random", "Rsvg"] +git-tree-sha1 = "134570038473304d709de27384621bd0810d23fa" +uuid = "ae8d54c2-7ccd-5906-9d76-62fc9837b5bc" +version = "4.1.0" + + [deps.Luxor.extensions] + LuxorExtLatex = ["LaTeXStrings", "MathTeXEngine"] + + [deps.Luxor.weakdeps] + LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" + MathTeXEngine = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" + [[deps.MIMEs]] git-tree-sha1 = "65f28ad4b594aebe22157d6fac869786a255b7eb" uuid = "6c6e2e6c-3030-632d-7369-2d6c69616d65" @@ -838,21 +1373,44 @@ version = "1.11.0" uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2023.12.12" +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" +[[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.27+1" +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "7493f61f55a6cce7325f197443aa80d32554ba10" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "3.0.15+1" +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6703a85cb3781bd5909d48730a67205f3f31a575" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.3+0" + [[deps.OrderedCollections]] git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" @@ -863,12 +1421,24 @@ deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" version = "10.42.0+1" +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e127b609fb9ecba6f201ba7ab753d5a605d53801" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.54.1+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", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" @@ -884,6 +1454,11 @@ git-tree-sha1 = "eba4810d5e6a01f612b948c9fa94f905b49087b0" uuid = "7f904dfe-b85e-4ff6-b463-dae2292396a8" version = "0.7.60" +[[deps.PolygonAlgorithms]] +git-tree-sha1 = "a5ded6396172cff3bacdd1354d190b93cb667c4b" +uuid = "32a0d02f-32d9-4438-b5ed-3a2932b48f96" +version = "0.2.0" + [[deps.PooledArrays]] deps = ["DataAPI", "Future"] git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" @@ -946,6 +1521,12 @@ git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" +[[deps.Rsvg]] +deps = ["Cairo", "Glib_jll", "Librsvg_jll"] +git-tree-sha1 = "3d3dc66eb46568fb3a5259034bfc752a0eb0c686" +uuid = "c4c386cf-5103-5370-be45-f3a111cca3b8" +version = "1.0.0" + [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" @@ -1060,6 +1641,72 @@ version = "1.11.0" uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" version = "1.11.0" +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "a2fccc6559132927d4c5dc183e3e01048c6dcbd6" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.13.5+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "a54ee957f4c86b526460a720dbc882fa5edcbefc" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.41+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "15e637a697345f6743674f1322beefbc5dcd5cfc" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.6.3+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.YAML]] deps = ["Base64", "Dates", "Printf", "StringEncodings"] git-tree-sha1 = "dea63ff72079443240fbd013ba006bcbc8a9ac00" @@ -1071,11 +1718,53 @@ deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" version = "1.2.13+1" +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "555d1076590a6cc2fdee2ef1469451f872d8b41b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+1" + +[[deps.gdk_pixbuf_jll]] +deps = ["Artifacts", "Glib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Xorg_libX11_jll", "libpng_jll"] +git-tree-sha1 = "86e7731be08b12fa5e741f719603ae740e16b666" +uuid = "da03df04-f53b-5353-a52f-6a8b0620ced0" +version = "2.42.10+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", "Zlib_jll"] +git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.2+0" + [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" version = "5.11.0+0" +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.3+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "b70c870239dc3d7bc094eb2d6be9b73d27bef280" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.44+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+2" + [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" @@ -1085,6 +1774,18 @@ version = "1.59.0+0" 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: @@ -1111,7 +1812,7 @@ version = "17.4.0+2" # ╟─03e49669-cdee-4241-862d-33ee91214455 # ╟─0ee6972c-5069-4ba0-887f-be64c7d000d0 # ╟─f4f49568-dcf2-4c76-ba66-065d2fda7a4a -# ╟─d81bbd74-42df-4bb2-a045-9c2642cc19e5 +# â• â•d81bbd74-42df-4bb2-a045-9c2642cc19e5 # â• â•31388128-33a3-4443-835e-74b91bf48268 # â• â•87fdefa1-3bbd-4b69-ad3a-72baca6e55ee # ╟─09f44611-ba21-4982-ba1b-0691124642fc @@ -1158,7 +1859,7 @@ version = "17.4.0+2" # â• â•3c198d79-c46a-4781-8bd1-b6b68f06c31f # ╟─a4698418-ebf7-4992-a3ba-a15ff282bf87 # ╟─59817f59-429b-4f17-a46a-185571fd1e5a -# â• â•8670abc2-63e6-496a-b20c-812197acd9ad +# ╟─8670abc2-63e6-496a-b20c-812197acd9ad # ╟─1b2245f8-2f02-4c4d-b6d2-e65af1f2a21e # â• â•77093b36-c232-4477-be49-845f1a631829 # ╟─9722971a-16f1-4f28-ba31-c12b673b8a30 @@ -1168,25 +1869,78 @@ version = "17.4.0+2" # â• â•9cef898e-192c-418a-bec6-511f8b6da179 # â• â•6f10de7b-ce05-4f82-82e7-4110be44e8cc # ╟─c2fab245-8a98-4b41-ade2-c5b16e9c39f9 -# â• â•821de132-559b-4420-b866-e97134c5bd9a +# ╟─a7afc0cb-a980-4f4f-b782-9791d932ee52 +# ╟─821de132-559b-4420-b866-e97134c5bd9a # â• â•ec25ce2a-de8a-4b69-a3f3-b47cd58ec986 # ╟─67093a35-8e1b-4cd3-b11b-c7ff601f802e # â• â•16b677e4-c467-462a-b770-b7a31160e129 # â• â•191f8429-cbbb-44aa-8beb-271a94293e4b # â• â•e9633e3f-376d-413d-bc19-d015f6ce76e5 # ╟─61462af5-69bd-42be-8918-7992c79ee00d +# ╟─592ae01b-2819-402d-9538-17018df5c34b +# ╟─708c442b-cbff-4e1a-b70d-e704453cfd3d +# ╟─594829e2-585b-4d48-bb6e-b35d9543cfbe +# â• â•72ec8410-05d9-475a-93d4-47153cc0ce31 +# â• â•027fe67c-d2f0-49f6-b894-959795551d27 +# â• â•462fa407-d973-4e9e-8512-b7cd3bb98b7b +# â• â•3cd40d9e-fcea-427d-9877-cea65e7ea413 +# â• â•38744170-9af6-44b5-a0be-46a83da3253e +# â• â•a1081bb2-2186-4b19-b667-0c246155f360 +# ╟─4714b7d7-32ee-42a1-bfa5-93eafda739d3 +# â• â•b5f3620d-0942-41bb-80b0-d2ddcfe65090 +# â• â•19ef447f-9fdf-49e1-8d1a-7860b4d4e9ba +# â• â•6cf004be-5205-429e-8131-ef607cebeaec +# â• â•f6e22fc3-382e-4548-bc59-8f944e06d237 +# â• â•d830fffd-3781-40ca-85cb-c242f99667ce +# â• â•ac5e1516-1574-4893-a965-f799947076cb +# â• â•4cb070de-e8bf-4a1d-9625-043c19466c46 +# ╟─6c3bca1a-3109-4e48-97e1-e0ed4599ffb2 +# ╟─1ca71c26-f98c-4126-a1c5-98786fde7e9b +# â• â•535f4bc1-e88c-47c7-990b-e3c8b5054acc +# â• â•9b9fc5e6-1a41-43c5-ba43-2c93bc3ef66b +# â• â•d882afdd-eb85-467c-bf18-525c0c5da5e7 +# â• â•192f608c-0563-4179-903f-49fad2db4c74 # ╟─8f6ba1c4-a971-4dc4-ac5d-2f30790aecde # ╟─ed023033-1044-4d48-aab1-39e9300043f7 +# ╟─bc58ba24-90f0-4913-8f66-10bb6cb54076 +# ╟─4cff1d10-422f-4b12-b790-a589c972fbb7 +# â• â•59ac02af-7b54-44d4-b5f4-a0f60d4458a1 +# â• â•9f55cad1-b01a-45e3-93df-a4349e2dfbd3 +# â• â•e2a3842d-4e07-4703-ab47-a5140649dd6a +# ╟─08dcbbd3-a531-4f74-a724-1cae8fae1636 # ╟─82ba8fe1-435e-422b-abb7-cb50a7a85e1e +# ╟─8b16a522-9be4-4286-b64d-3d1bbdef7142 +# â• â•ec14d629-b720-47cd-bc08-ff96f49271ab +# ╟─059b0ada-2442-48e4-82dd-489cb97e5dcc +# ╟─4be6cea4-13a2-4bcb-b849-14eef57ab604 +# â• â•9efb7a71-9a03-4716-8d34-aae233e9b898 +# â• â•9bdb30ba-48a7-4e1b-96c2-ea0e059d5253 +# ╟─bcf73ad7-a08b-4cbb-bcd2-d0abc002e7e2 +# ╟─bc9a718f-4b97-4e15-acf8-d180abc5b6d5 +# ╟─ee43c389-55f4-4cf9-a8db-ce37d1b89db4 +# ╟─1072a756-5026-4de9-93a8-f942d54c474a +# â• â•3026f9c5-81d3-443a-940a-f22fef9754af +# â• â•4853f4ef-fbb8-48c3-9523-13ab4969d097 +# â• â•6e5e3ec6-c96a-4a4a-bf4d-4b115f9b0d82 +# â• â•7330af43-bec3-460c-94f6-768ac2975b00 +# â• â•59254bfd-48f2-4585-9ba5-e4c809421072 +# â• â•ab467d70-ceb1-40e5-b8fe-82e2f1bd95fd +# ╟─1e27eedc-5308-4608-863f-fb81d60acdf0 # ╟─a293bb0e-078d-4335-a446-3096a79c03bc +# ╟─35b7b8b7-bff6-4f64-91b9-b65035162365 # ╟─3da58487-192f-458a-9d47-7a4ce98b6da3 +# â• â•7f9bd301-355b-43f5-b168-22fac9e52511 # â• â•06679a09-47d7-4024-8232-4954c08747a0 # â• â•bafc9870-3823-4d1d-b0b7-94c69ee764d5 # â• â•b57adc77-3783-4958-91a0-e90782338755 # â• â•18031ccb-657f-409a-9080-9a0ada3ae8b5 # â• â•256c8009-4d2b-42f8-adaa-6f238ef22c6d # ╟─4e35d650-b9a6-4668-90f0-f27a50af29ad +# â• â•0e3fb524-bea1-4ef0-9589-36230a84e949 # â• â•2381babe-0777-45db-acff-cc647a8a68d3 +# â• â•8315b53f-abca-483d-bbf6-7e9193e751c9 +# â• â•0c8ab02e-80b0-44d6-a4a8-c813aac38209 +# â• â•57816e2c-a675-43e7-b674-2877ffcf1415 # â• â•1b1d5c9b-5fc7-480e-9649-e9c44a49c38d # â• â•ba16d83d-21a5-4f0c-807b-674a167da4dc # â• â•6c3595d2-4f68-44da-90e7-dc9c68479bcf