From 74fb335d917f814906992dd90af7ba592cc2b4d2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 29 Jan 2024 11:51:15 +0000 Subject: [PATCH] deploy: 06a1e388513e5474c70996f7bba056df6a3f1421 --- 404.html | 6 +- .../postcondition-ambiguity/index.html | 6 +- .../algorithms-and-correctness/index.html | 6 +- .../index.html | 6 +- algorithms/category/graphs/index.html | 6 +- algorithms/category/hash-tables/index.html | 6 +- .../category/paths-in-graphs/index.html | 6 +- algorithms/category/recursion/index.html | 6 +- .../category/red-black-trees/index.html | 6 +- algorithms/graphs/bfs-tree/index.html | 22 +- .../graphs/iterative-and-iterators/index.html | 6 +- algorithms/hash-tables/breaking/index.html | 6 +- .../breaking/mitigations/index.html | 6 +- .../hash-tables/breaking/python/index.html | 6 +- algorithms/index.html | 8 +- algorithms/paths/bf-to-astar/astar/index.html | 6 +- algorithms/paths/bf-to-astar/bf/index.html | 6 +- .../paths/bf-to-astar/dijkstra/index.html | 8 +- algorithms/paths/bf-to-astar/index.html | 6 +- algorithms/rb-trees/applications/index.html | 6 +- algorithms/rb-trees/rules/index.html | 22 +- algorithms/recursion/karel/index.html | 10 +- .../recursion/karel/solution/index.html | 6 +- .../bottom-up-dp/index.html | 6 +- .../pyramid-slide-down/greedy/index.html | 6 +- .../recursion/pyramid-slide-down/index.html | 6 +- .../pyramid-slide-down/naive/index.html | 6 +- .../pyramid-slide-down/top-down-dp/index.html | 6 +- algorithms/tags/a-star/index.html | 6 +- algorithms/tags/applications/index.html | 6 +- algorithms/tags/astar/index.html | 6 +- algorithms/tags/backtracking/index.html | 6 +- algorithms/tags/balanced-trees/index.html | 6 +- algorithms/tags/bellman-ford/index.html | 6 +- algorithms/tags/bfs/index.html | 6 +- algorithms/tags/bottom-up-dp/index.html | 6 +- algorithms/tags/brute-force/index.html | 6 +- algorithms/tags/c/index.html | 6 +- algorithms/tags/cpp/index.html | 6 +- algorithms/tags/csharp/index.html | 6 +- algorithms/tags/dijkstra/index.html | 6 +- algorithms/tags/dynamic-array/index.html | 6 +- .../tags/dynamic-programming/index.html | 6 +- algorithms/tags/exponential/index.html | 6 +- algorithms/tags/graphs/index.html | 6 +- algorithms/tags/greedy/index.html | 6 +- algorithms/tags/hash-tables/index.html | 6 +- algorithms/tags/index.html | 6 +- algorithms/tags/iterative/index.html | 6 +- algorithms/tags/iterators/index.html | 6 +- algorithms/tags/java/index.html | 6 +- algorithms/tags/karel/index.html | 6 +- algorithms/tags/postconditions/index.html | 6 +- algorithms/tags/python/index.html | 6 +- algorithms/tags/recursion/index.html | 6 +- algorithms/tags/red-black-trees/index.html | 6 +- algorithms/tags/solution/index.html | 6 +- algorithms/tags/sorting/index.html | 6 +- algorithms/tags/testing/index.html | 6 +- algorithms/tags/time-complexity/index.html | 6 +- algorithms/tags/top-down-dp/index.html | 6 +- algorithms/time-complexity/extend/index.html | 10 +- ...85c17.9b387ded.js => 01a85c17.c2d2d974.js} | 2 +- assets/js/0816068a.4a65af0e.js | 1 + ...e45d5.143f3da4.js => 0bfe45d5.278d3d58.js} | 2 +- .../js/{130.b07e32e5.js => 130.a26578f7.js} | 2 +- assets/js/1325.f9a9e4dd.js | 2 - ...b3368.1936981e.js => 14eb3368.0d563596.js} | 2 +- assets/js/1535ede8.6aa7ffe0.js | 1 - assets/js/1535ede8.cf110382.js | 1 + ...96441.2ef23eb3.js => 17896441.274cea2b.js} | 2 +- assets/js/182b5a8d.a8e28604.js | 1 + ...e3797.3807d38b.js => 1a4e3797.d45f2a37.js} | 4 +- ...E.txt => 1a4e3797.d45f2a37.js.LICENSE.txt} | 0 assets/js/22a175ec.297fea32.js | 1 + assets/js/22a175ec.92356088.js | 1 - assets/js/257fa000.c32606de.js | 1 + ...0c009.9d2dcf9d.js => 3720c009.37c59b49.js} | 2 +- assets/js/4200b1a9.9d505c0f.js | 1 + assets/js/4200b1a9.d764baec.js | 1 - assets/js/595c7293.8ff94b95.js | 1 - assets/js/595c7293.e8aa1f47.js | 1 + assets/js/66d5ef6c.f31d2aab.js | 1 + assets/js/66d5ef6c.fc107ca5.js | 1 - ...5c492.5be02386.js => 6875c492.70016d14.js} | 2 +- assets/js/7052c0bc.61d77968.js | 1 + assets/js/7052c0bc.dcbef1c6.js | 1 - assets/js/794ef108.8d36eaa9.js | 1 + assets/js/794ef108.d7e12b89.js | 1 - assets/js/7a5bb070.3ea6a8e5.js | 1 + assets/js/84d1e0d8.985692bf.js | 1 - assets/js/84d1e0d8.f337d099.js | 1 + ...7eafd.7613dea7.js => 9287eafd.6a3e2a56.js} | 2 +- assets/js/9365.b3ca15d6.js | 2 + ...CENSE.txt => 9365.b3ca15d6.js.LICENSE.txt} | 0 assets/js/95b96bb9.ce1e4720.js | 1 + assets/js/95b96bb9.f1e9070e.js | 1 - ...087bc.c1ded62d.js => 9e4087bc.1ba69630.js} | 2 +- ...98721.33f429e4.js => a7098721.3c1f60c5.js} | 2 +- ...703ab.efd630be.js => a94703ab.41c675cc.js} | 2 +- ...b72a7.37a3aa6c.js => af8b72a7.b40642af.js} | 2 +- assets/js/b1288602.19054c2d.js | 1 + assets/js/b1288602.cc4934c1.js | 1 - assets/js/b5a32f14.68cedca8.js | 1 - assets/js/b5a32f14.b58aa0f1.js | 1 + assets/js/c90b7ff3.66a8d664.js | 1 + ...49370.78004ce5.js => ccc49370.b0a72ab4.js} | 2 +- assets/js/d05e838c.642ce149.js | 1 + assets/js/d05e838c.ce5946c6.js | 1 - ...03c0f.a5b6acbb.js => df203c0f.f951d8f1.js} | 2 +- assets/js/f44abc07.3c3d35fa.js | 1 + assets/js/f71d1f68.da144fe6.js | 1 + assets/js/f7d29e9b.8fd5a1ab.js | 1 + assets/js/main.034f2fcf.js | 2 - assets/js/main.5d53fbfc.js | 2 + ...CENSE.txt => main.5d53fbfc.js.LICENSE.txt} | 0 assets/js/runtime~main.55537369.js | 1 + assets/js/runtime~main.b2040362.js | 1 - blog/2023/08/02/copr/index.html | 10 +- blog/2024/01/28/rust-opinion/index.html | 289 ++++++++++++++++++ blog/aoc-2022/1st-week/index.html | 8 +- blog/aoc-2022/2nd-week/index.html | 10 +- blog/aoc-2022/3rd-week/index.html | 8 +- blog/aoc-2022/4th-week/index.html | 10 +- blog/aoc-2022/intro/index.html | 8 +- blog/archive/index.html | 8 +- blog/atom.xml | 287 ++++++++++++++++- blog/feed.json | 22 +- blog/index.html | 16 +- blog/leetcode/sort-diagonally/index.html | 10 +- blog/rss.xml | 283 ++++++++++++++++- blog/tags/admin/index.html | 8 +- blog/tags/advent-of-code-2022/index.html | 8 +- blog/tags/advent-of-code/index.html | 8 +- blog/tags/copr/index.html | 8 +- blog/tags/cpp/index.html | 8 +- blog/tags/cult/index.html | 31 ++ blog/tags/hype/index.html | 31 ++ blog/tags/index.html | 8 +- blog/tags/iterators/index.html | 8 +- blog/tags/leetcode/index.html | 8 +- blog/tags/memory-safety/index.html | 31 ++ blog/tags/red-hat/index.html | 8 +- blog/tags/rust/index.html | 18 +- blog/tags/vps/index.html | 8 +- blog/tags/🏭/index.html | 8 +- c/bonuses/seminar-03/index.html | 6 +- c/bonuses/seminar-04/index.html | 6 +- c/bonuses/seminar-05-06/index.html | 8 +- c/bonuses/seminar-08/index.html | 10 +- c/bonuses/seminar-10/index.html | 10 +- c/category/bonuses/index.html | 6 +- c/category/practice-exams/index.html | 6 +- c/index.html | 8 +- c/mr/index.html | 8 +- c/pexam/cams/index.html | 6 +- c/pexam/garbage_collect/index.html | 6 +- contributions/index.html | 8 +- cpp/category/exceptions-and-raii/index.html | 6 +- cpp/environment/index.html | 6 +- .../placeholders/index.html | 6 +- cpp/index.html | 8 +- .../graphs/iterative-and-iterators.tar.bz2 | Bin 1943 -> 1934 bytes .../graphs/iterative-and-iterators.tar.gz | Bin 1936 -> 1943 bytes files/algorithms/paths/bf-to-astar.tar.bz2 | Bin 3171 -> 3166 bytes files/algorithms/paths/bf-to-astar.tar.gz | Bin 2995 -> 2994 bytes files/algorithms/recursion/karel-1.tar.bz2 | Bin 5878 -> 5882 bytes files/algorithms/recursion/karel-1.tar.gz | Bin 6584 -> 6583 bytes .../recursion/pyramid-slide-down.tar.bz2 | Bin 1545 -> 1548 bytes .../recursion/pyramid-slide-down.tar.gz | Bin 1423 -> 1423 bytes .../algorithms/time-complexity/extend.tar.bz2 | Bin 4061 -> 4069 bytes .../algorithms/time-complexity/extend.tar.gz | Bin 3913 -> 3912 bytes files/c/bonuses/03.tar.bz2 | Bin 2650 -> 2647 bytes files/c/bonuses/03.tar.gz | Bin 2337 -> 2337 bytes files/c/bonuses/04.tar.bz2 | Bin 2528 -> 2531 bytes files/c/bonuses/04.tar.gz | Bin 2501 -> 2499 bytes files/c/bonuses/05-06.tar.bz2 | Bin 3650 -> 3632 bytes files/c/bonuses/05-06.tar.gz | Bin 3488 -> 3487 bytes files/c/bonuses/08.tar.bz2 | Bin 73546 -> 73707 bytes files/c/bonuses/08.tar.gz | Bin 106235 -> 106322 bytes files/c/bonuses/10.tar.bz2 | Bin 234873 -> 234832 bytes files/c/bonuses/10.tar.gz | Bin 230123 -> 230127 bytes index.html | 6 +- search/index.html | 6 +- sitemap.xml | 2 +- talks/index.html | 6 +- 186 files changed, 1387 insertions(+), 405 deletions(-) rename assets/js/{01a85c17.9b387ded.js => 01a85c17.c2d2d974.js} (96%) create mode 100644 assets/js/0816068a.4a65af0e.js rename assets/js/{0bfe45d5.143f3da4.js => 0bfe45d5.278d3d58.js} (73%) rename assets/js/{130.b07e32e5.js => 130.a26578f7.js} (97%) delete mode 100644 assets/js/1325.f9a9e4dd.js rename assets/js/{14eb3368.1936981e.js => 14eb3368.0d563596.js} (97%) delete mode 100644 assets/js/1535ede8.6aa7ffe0.js create mode 100644 assets/js/1535ede8.cf110382.js rename assets/js/{17896441.2ef23eb3.js => 17896441.274cea2b.js} (98%) create mode 100644 assets/js/182b5a8d.a8e28604.js rename assets/js/{1a4e3797.3807d38b.js => 1a4e3797.d45f2a37.js} (99%) rename assets/js/{1a4e3797.3807d38b.js.LICENSE.txt => 1a4e3797.d45f2a37.js.LICENSE.txt} (100%) create mode 100644 assets/js/22a175ec.297fea32.js delete mode 100644 assets/js/22a175ec.92356088.js create mode 100644 assets/js/257fa000.c32606de.js rename assets/js/{3720c009.9d2dcf9d.js => 3720c009.37c59b49.js} (97%) create mode 100644 assets/js/4200b1a9.9d505c0f.js delete mode 100644 assets/js/4200b1a9.d764baec.js delete mode 100644 assets/js/595c7293.8ff94b95.js create mode 100644 assets/js/595c7293.e8aa1f47.js create mode 100644 assets/js/66d5ef6c.f31d2aab.js delete mode 100644 assets/js/66d5ef6c.fc107ca5.js rename assets/js/{6875c492.5be02386.js => 6875c492.70016d14.js} (98%) create mode 100644 assets/js/7052c0bc.61d77968.js delete mode 100644 assets/js/7052c0bc.dcbef1c6.js create mode 100644 assets/js/794ef108.8d36eaa9.js delete mode 100644 assets/js/794ef108.d7e12b89.js create mode 100644 assets/js/7a5bb070.3ea6a8e5.js delete mode 100644 assets/js/84d1e0d8.985692bf.js create mode 100644 assets/js/84d1e0d8.f337d099.js rename assets/js/{9287eafd.7613dea7.js => 9287eafd.6a3e2a56.js} (69%) create mode 100644 assets/js/9365.b3ca15d6.js rename assets/js/{1325.f9a9e4dd.js.LICENSE.txt => 9365.b3ca15d6.js.LICENSE.txt} (100%) create mode 100644 assets/js/95b96bb9.ce1e4720.js delete mode 100644 assets/js/95b96bb9.f1e9070e.js rename assets/js/{9e4087bc.c1ded62d.js => 9e4087bc.1ba69630.js} (96%) rename assets/js/{a7098721.33f429e4.js => a7098721.3c1f60c5.js} (72%) rename assets/js/{a94703ab.efd630be.js => a94703ab.41c675cc.js} (99%) rename assets/js/{af8b72a7.37a3aa6c.js => af8b72a7.b40642af.js} (60%) create mode 100644 assets/js/b1288602.19054c2d.js delete mode 100644 assets/js/b1288602.cc4934c1.js delete mode 100644 assets/js/b5a32f14.68cedca8.js create mode 100644 assets/js/b5a32f14.b58aa0f1.js create mode 100644 assets/js/c90b7ff3.66a8d664.js rename assets/js/{ccc49370.78004ce5.js => ccc49370.b0a72ab4.js} (99%) create mode 100644 assets/js/d05e838c.642ce149.js delete mode 100644 assets/js/d05e838c.ce5946c6.js rename assets/js/{df203c0f.a5b6acbb.js => df203c0f.f951d8f1.js} (99%) create mode 100644 assets/js/f44abc07.3c3d35fa.js create mode 100644 assets/js/f71d1f68.da144fe6.js create mode 100644 assets/js/f7d29e9b.8fd5a1ab.js delete mode 100644 assets/js/main.034f2fcf.js create mode 100644 assets/js/main.5d53fbfc.js rename assets/js/{main.034f2fcf.js.LICENSE.txt => main.5d53fbfc.js.LICENSE.txt} (100%) create mode 100644 assets/js/runtime~main.55537369.js delete mode 100644 assets/js/runtime~main.b2040362.js create mode 100644 blog/2024/01/28/rust-opinion/index.html create mode 100644 blog/tags/cult/index.html create mode 100644 blog/tags/hype/index.html create mode 100644 blog/tags/memory-safety/index.html diff --git a/404.html b/404.html index 915f353..6c2e9b0 100644 --- a/404.html +++ b/404.html @@ -2,7 +2,7 @@ - + Page Not Found | mf @@ -14,8 +14,8 @@ - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

diff --git a/algorithms/algorithms-correctness/postcondition-ambiguity/index.html b/algorithms/algorithms-correctness/postcondition-ambiguity/index.html index 1bde907..d8b8044 100644 --- a/algorithms/algorithms-correctness/postcondition-ambiguity/index.html +++ b/algorithms/algorithms-correctness/postcondition-ambiguity/index.html @@ -2,7 +2,7 @@ - + Vague postconditions and proving correctness of algorithms | mf @@ -16,8 +16,8 @@ - - + +
Skip to main content

Vague postconditions and proving correctness of algorithms

Introduction

diff --git a/algorithms/category/algorithms-and-correctness/index.html b/algorithms/category/algorithms-and-correctness/index.html index f4121da..ba4cecf 100644 --- a/algorithms/category/algorithms-and-correctness/index.html +++ b/algorithms/category/algorithms-and-correctness/index.html @@ -2,7 +2,7 @@ - + Algorithms and Correctness | mf - - + +

Algorithms and Correctness

Materials related to basic ideas behind algorithms and proofs of their diff --git a/algorithms/category/asymptotic-notation-and-time-complexity/index.html b/algorithms/category/asymptotic-notation-and-time-complexity/index.html index 0719d32..4f050f4 100644 --- a/algorithms/category/asymptotic-notation-and-time-complexity/index.html +++ b/algorithms/category/asymptotic-notation-and-time-complexity/index.html @@ -2,7 +2,7 @@ - + Asymptotic Notation and Time Complexity | mf @@ -16,8 +16,8 @@ - - + +

Asymptotic Notation and Time Complexity

Materials related to asymptotic notation and time complexity. diff --git a/algorithms/category/graphs/index.html b/algorithms/category/graphs/index.html index e88389c..e76d81b 100644 --- a/algorithms/category/graphs/index.html +++ b/algorithms/category/graphs/index.html @@ -2,7 +2,7 @@ - + Graphs | mf @@ -16,8 +16,8 @@ - - + +

Graphs

Materials related to basic graph algorithms and graph problems. diff --git a/algorithms/category/hash-tables/index.html b/algorithms/category/hash-tables/index.html index 0d9b51c..09de777 100644 --- a/algorithms/category/hash-tables/index.html +++ b/algorithms/category/hash-tables/index.html @@ -2,7 +2,7 @@ - + Hash Tables | mf @@ -16,8 +16,8 @@ - - + +

Hash Tables

Materials related to hash tables. diff --git a/algorithms/category/paths-in-graphs/index.html b/algorithms/category/paths-in-graphs/index.html index 6b72df4..ac0d488 100644 --- a/algorithms/category/paths-in-graphs/index.html +++ b/algorithms/category/paths-in-graphs/index.html @@ -2,7 +2,7 @@ - + Paths in Graphs | mf @@ -16,8 +16,8 @@ - - + +

Paths in Graphs

Materials related to finding paths in graphs. diff --git a/algorithms/category/recursion/index.html b/algorithms/category/recursion/index.html index 52d0958..5ecbe0a 100644 --- a/algorithms/category/recursion/index.html +++ b/algorithms/category/recursion/index.html @@ -2,7 +2,7 @@ - + Recursion | mf @@ -16,8 +16,8 @@ - - + +

Recursion

Materials related to recursive algorithms and their time complexity. diff --git a/algorithms/category/red-black-trees/index.html b/algorithms/category/red-black-trees/index.html index 6eb02c9..479b1c1 100644 --- a/algorithms/category/red-black-trees/index.html +++ b/algorithms/category/red-black-trees/index.html @@ -2,7 +2,7 @@ - + Red-Black Trees | mf @@ -16,8 +16,8 @@ - - + +

Red-Black Trees

Materials related to red-black trees. diff --git a/algorithms/graphs/bfs-tree/index.html b/algorithms/graphs/bfs-tree/index.html index 29dc08b..5bdb394 100644 --- a/algorithms/graphs/bfs-tree/index.html +++ b/algorithms/graphs/bfs-tree/index.html @@ -2,7 +2,7 @@ - + Distance boundaries from BFS tree on undirected graphs | mf @@ -16,8 +16,8 @@ - - + +

Distance boundaries from BFS tree on undirected graphs

Introduction

@@ -28,11 +28,11 @@

Lower bound

Consider the following graph:

-

-

+

+

We run BFS from the vertex aa and obtain the following BFS tree:

-

-

+

+

Let's consider pair of vertices ee and hh. For them we can safely lay, from the BFS tree, following properties:

  • lower bound: 22
  • @@ -42,12 +42,12 @@

    Proof by contradiction

    Let's keep the same graph, but break the lower bound, i.e. I have gotten a lower bound 22, but “there must be a shorter path”! ;)

    Now the more important question, is there a shorter path in that graph? The answer is no, there's no shorter path than the one with length 22. So what can we do about it? We'll add an edge to have a shorter path. Now we have gotten a lower bound of 22, which means the only shorter path we can construct has 11 edge and that is ‹e,he, h› (no intermediary vertices). Let's do this!

    -

    -

    +

    +

    Okay, so we have a graph that breaks the rule we have laid. However, we need to run BFS to obtain the new BFS tree, since we have changed the graph.

    tip

    Do we need to run BFS after every change?

    ­I am leaving that as an exercise ;)

    -

    -

    +

    +

    Oops, we have gotten a new BFS tree, that has a height difference of 1.

    tip

    Try to think about a way this can be generalized for shortening of minimal length 3 to minimal length 2 ;)

diff --git a/algorithms/graphs/iterative-and-iterators/index.html b/algorithms/graphs/iterative-and-iterators/index.html index de7c7b7..0298c95 100644 --- a/algorithms/graphs/iterative-and-iterators/index.html +++ b/algorithms/graphs/iterative-and-iterators/index.html @@ -2,7 +2,7 @@ - + Iterative algorithms via iterators | mf @@ -16,8 +16,8 @@ - - + +

Iterative algorithms via iterators

Introduction

diff --git a/algorithms/hash-tables/breaking/index.html b/algorithms/hash-tables/breaking/index.html index 9f78f55..b906f2e 100644 --- a/algorithms/hash-tables/breaking/index.html +++ b/algorithms/hash-tables/breaking/index.html @@ -2,7 +2,7 @@ - + Breaking Hash Table | mf @@ -16,8 +16,8 @@ - - + +

Breaking Hash Table

We will try to break a hash table and discuss possible ways how to prevent such diff --git a/algorithms/hash-tables/breaking/mitigations/index.html b/algorithms/hash-tables/breaking/mitigations/index.html index f9e0f6c..0d747f9 100644 --- a/algorithms/hash-tables/breaking/mitigations/index.html +++ b/algorithms/hash-tables/breaking/mitigations/index.html @@ -2,7 +2,7 @@ - + Possible Mitigations | mf @@ -16,8 +16,8 @@ - - + +

Possible Mitigations

There are multiple ways the issues created above can be mitigated. Still we can diff --git a/algorithms/hash-tables/breaking/python/index.html b/algorithms/hash-tables/breaking/python/index.html index 8842389..374e4a9 100644 --- a/algorithms/hash-tables/breaking/python/index.html +++ b/algorithms/hash-tables/breaking/python/index.html @@ -2,7 +2,7 @@ - + Breaking Python | mf @@ -16,8 +16,8 @@ - - + +

Breaking the Hash Table in Python

diff --git a/algorithms/index.html b/algorithms/index.html index dd9e99f..b770774 100644 --- a/algorithms/index.html +++ b/algorithms/index.html @@ -2,7 +2,7 @@ - + Introduction | mf @@ -14,8 +14,8 @@ - - + +

Introduction

In this part you can find “random” additional materials I have written over the @@ -23,6 +23,6 @@ course of teaching Algorithms and data structures I.

It is a various mix of stuff that may have been produced as a follow-up on some question asked at the seminar or spontanously.

If you have some ideas for posts, please do not hesitate to submit them as issues -in the linked GitLab.

+in the linked GitLab.

\ No newline at end of file diff --git a/algorithms/paths/bf-to-astar/astar/index.html b/algorithms/paths/bf-to-astar/astar/index.html index be0723c..76ced05 100644 --- a/algorithms/paths/bf-to-astar/astar/index.html +++ b/algorithms/paths/bf-to-astar/astar/index.html @@ -2,7 +2,7 @@ - + A* algorithm | mf @@ -16,8 +16,8 @@ - - + +

A* algorithm

Intro

diff --git a/algorithms/paths/bf-to-astar/bf/index.html b/algorithms/paths/bf-to-astar/bf/index.html index 290417e..6cbc407 100644 --- a/algorithms/paths/bf-to-astar/bf/index.html +++ b/algorithms/paths/bf-to-astar/bf/index.html @@ -2,7 +2,7 @@ - + BF | mf - - + +

BF

Basic idea

diff --git a/algorithms/paths/bf-to-astar/dijkstra/index.html b/algorithms/paths/bf-to-astar/dijkstra/index.html index 2b264d3..2b6e909 100644 --- a/algorithms/paths/bf-to-astar/dijkstra/index.html +++ b/algorithms/paths/bf-to-astar/dijkstra/index.html @@ -2,7 +2,7 @@ - + Dijkstra's algorithm | mf @@ -16,8 +16,8 @@ - - + +

Dijkstra's algorithm

Intro

@@ -37,7 +37,7 @@ Would that be even possible?

Yes, it would! And that's when Dijkstra's algorithm comes in.

Dijkstra's algorithm

I'll start with a well-known meme about Dijkstra's algorithm: -Dijkstra&#39;s algorithm meme

+Dijkstra&#39;s algorithm meme

And then follow up on that with the actual backstory from Dijkstra himself:

What is the shortest way to travel from Rotterdam to Groningen, in general: diff --git a/algorithms/paths/bf-to-astar/index.html b/algorithms/paths/bf-to-astar/index.html index b9bf28a..013cf61 100644 --- a/algorithms/paths/bf-to-astar/index.html +++ b/algorithms/paths/bf-to-astar/index.html @@ -2,7 +2,7 @@ - + From BF to A* | mf @@ -16,8 +16,8 @@ - - + +

From BF to A*

Intro

diff --git a/algorithms/rb-trees/applications/index.html b/algorithms/rb-trees/applications/index.html index ad3d439..6aaa4ba 100644 --- a/algorithms/rb-trees/applications/index.html +++ b/algorithms/rb-trees/applications/index.html @@ -2,7 +2,7 @@ - + Použití červeno-černých stromů | mf @@ -16,8 +16,8 @@ - - + +

Použití červeno-černých stromů

Použití

diff --git a/algorithms/rb-trees/rules/index.html b/algorithms/rb-trees/rules/index.html index a6266c2..c96fc73 100644 --- a/algorithms/rb-trees/rules/index.html +++ b/algorithms/rb-trees/rules/index.html @@ -2,7 +2,7 @@ - + On the rules of the red-black tree | mf @@ -16,8 +16,8 @@ - - + +

On the rules of the red-black tree

Introduction

@@ -54,8 +54,8 @@ it means that there was no black node added on the path between us and therefore my child would be colored red.

Example of a red-black tree that keeps count of black nodes on paths to the leaves follows:

-

Red-black tree with black height -Red-black tree with black height

+

Red-black tree with black height +Red-black tree with black height

We mark the black heights in superscript. You can see that all leaves have the black height equal to 11. Let's take a look at some of the interesting cases:

    @@ -101,14 +101,14 @@ both relying on the invariant in the algorithm and afterwards by enforcing the black root property.

    If we decide to omit this condition, we need to address it in the pseudocodes accordingly.

    -
    Usual algorithm with black rootAllowing red root
    1ª insertion1ª insertion1ª insertion1ª insertion
    2ª insertion2ª insertion2ª insertion2ª insertion
    3ª insertion3ª insertion3ª insertion3ª insertion
    4ª insertion4ª insertion4ª insertion4ª insertion
    5ª insertion5ª insertion5ª insertion5ª insertion
    6ª insertion6ª insertion6ª insertion6ª insertion
    7ª insertion7ª insertion7ª insertion7ª insertion
    8ª insertion8ª insertion8ª insertion8ª insertion
    9ª insertion9ª insertion9ª insertion9ª insertion
    +
    Usual algorithm with black rootAllowing red root
    1ª insertion1ª insertion1ª insertion1ª insertion
    2ª insertion2ª insertion2ª insertion2ª insertion
    3ª insertion3ª insertion3ª insertion3ª insertion
    4ª insertion4ª insertion4ª insertion4ª insertion
    5ª insertion5ª insertion5ª insertion5ª insertion
    6ª insertion6ª insertion6ª insertion6ª insertion
    7ª insertion7ª insertion7ª insertion7ª insertion
    8ª insertion8ª insertion8ª insertion8ª insertion
    9ª insertion9ª insertion9ª insertion9ª insertion

    3ª Every leaf (nil) is black.

    Now, this rule is a funny one. What does this imply and can I interpret this in some other way? Let's go through some of the possible ways I can look at this and how would they affect the other rules and balancing.

    We will experiment with the following tree: - -

    + +

    We should start by counting the black nodes from root to the nil leaves based on the rules. We have multiple similar paths, so we will pick only the interesting ones.

    @@ -160,9 +160,9 @@ further.

    balancing of the tree below.

    -

    -

    +

    +

    We can create a big subtree with only red nodes and even when keeping the rest of the rules maintained, it will break the time complexity. It stops us from “hacking” the black height requirement laid by the 5th rule.

    diff --git a/algorithms/recursion/karel/index.html b/algorithms/recursion/karel/index.html index 41b4d68..efad64f 100644 --- a/algorithms/recursion/karel/index.html +++ b/algorithms/recursion/karel/index.html @@ -2,7 +2,7 @@ - + Recursion and backtracking with Robot Karel | mf @@ -16,8 +16,8 @@ - - + +

    Recursion and backtracking with Robot Karel

      @@ -66,13 +66,13 @@ current location

      Problem

      Your task is to decide whether there is an exit from the maze or not. You can see an example of a maze here:

      -

      Image of the maze

      +

      Image of the maze

      Simple problem to get familiar with the robot

      If you feel completely lost after the previous description, let me start you off with a simpler problem.

      You are standing in front of the stairs, your task is to walk up the stairs.

      You can see an example of such map here:

      -

      Image of the stairs

      +

      Image of the stairs

      Brainstorm the idea

      As a first step write down any ideas and things that you have noticed or came to your mind. Ideally:

      diff --git a/algorithms/recursion/karel/solution/index.html b/algorithms/recursion/karel/solution/index.html index e326772..fd3d00d 100644 --- a/algorithms/recursion/karel/solution/index.html +++ b/algorithms/recursion/karel/solution/index.html @@ -2,7 +2,7 @@ - + Solution to the problem | mf @@ -16,8 +16,8 @@ - - + +

      Solving the maze problem

      diff --git a/algorithms/recursion/pyramid-slide-down/bottom-up-dp/index.html b/algorithms/recursion/pyramid-slide-down/bottom-up-dp/index.html index e3f2cdc..7067c4b 100644 --- a/algorithms/recursion/pyramid-slide-down/bottom-up-dp/index.html +++ b/algorithms/recursion/pyramid-slide-down/bottom-up-dp/index.html @@ -2,7 +2,7 @@ - + Bottom-up DP solution | mf @@ -16,8 +16,8 @@ - - + +

      Bottom-up dynamic programming

      diff --git a/algorithms/recursion/pyramid-slide-down/greedy/index.html b/algorithms/recursion/pyramid-slide-down/greedy/index.html index 1e8dc4e..b7a0c54 100644 --- a/algorithms/recursion/pyramid-slide-down/greedy/index.html +++ b/algorithms/recursion/pyramid-slide-down/greedy/index.html @@ -2,7 +2,7 @@ - + Greedy solution | mf @@ -16,8 +16,8 @@ - - + +

      Greedy solution

      We will try to optimize it a bit. Let's start with a relatively simple greedy diff --git a/algorithms/recursion/pyramid-slide-down/index.html b/algorithms/recursion/pyramid-slide-down/index.html index 49b9b0a..d264368 100644 --- a/algorithms/recursion/pyramid-slide-down/index.html +++ b/algorithms/recursion/pyramid-slide-down/index.html @@ -2,7 +2,7 @@ - + Introduction to dynamic programming | mf @@ -16,8 +16,8 @@ - - + +

      Introduction to dynamic programming

      In this series we will try to solve one problem in different ways.

      diff --git a/algorithms/recursion/pyramid-slide-down/naive/index.html b/algorithms/recursion/pyramid-slide-down/naive/index.html index 6f1d528..adafdeb 100644 --- a/algorithms/recursion/pyramid-slide-down/naive/index.html +++ b/algorithms/recursion/pyramid-slide-down/naive/index.html @@ -2,7 +2,7 @@ - + Naïve solution | mf @@ -16,8 +16,8 @@ - - + +

      Naïve solution

      Our naïve solution consists of trying out all the possible slides and finding diff --git a/algorithms/recursion/pyramid-slide-down/top-down-dp/index.html b/algorithms/recursion/pyramid-slide-down/top-down-dp/index.html index 0aec925..2415276 100644 --- a/algorithms/recursion/pyramid-slide-down/top-down-dp/index.html +++ b/algorithms/recursion/pyramid-slide-down/top-down-dp/index.html @@ -2,7 +2,7 @@ - + Top-down DP solution | mf @@ -16,8 +16,8 @@ - - + +

      Top-down dynamic programming

      diff --git a/algorithms/tags/a-star/index.html b/algorithms/tags/a-star/index.html index a8c7f44..c1e11e5 100644 --- a/algorithms/tags/a-star/index.html +++ b/algorithms/tags/a-star/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "a star" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "a star"

      View All Tags

      From BF to A*

      Figuring out shortest-path problem from the BF to the A* algorithm. diff --git a/algorithms/tags/applications/index.html b/algorithms/tags/applications/index.html index 0f0b696..459a6d0 100644 --- a/algorithms/tags/applications/index.html +++ b/algorithms/tags/applications/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "applications" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "applications"

      View All Tags

      Použití červeno-černých stromů

      Ukázka použití červeno-černých stromů v standardních knižnicích známých jazyků. diff --git a/algorithms/tags/astar/index.html b/algorithms/tags/astar/index.html index 8ed249b..c91db5d 100644 --- a/algorithms/tags/astar/index.html +++ b/algorithms/tags/astar/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "astar" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "astar"

      View All Tags

      A* algorithm

      Moving from Dijkstra's algorithm into the A* algorithm. diff --git a/algorithms/tags/backtracking/index.html b/algorithms/tags/backtracking/index.html index 531f991..c419164 100644 --- a/algorithms/tags/backtracking/index.html +++ b/algorithms/tags/backtracking/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "backtracking" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "backtracking"

      View All Tags

      Recursion and backtracking with Robot Karel

      A problem with too many restrictions. diff --git a/algorithms/tags/balanced-trees/index.html b/algorithms/tags/balanced-trees/index.html index 1d44146..ceead8f 100644 --- a/algorithms/tags/balanced-trees/index.html +++ b/algorithms/tags/balanced-trees/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "balanced trees" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "balanced trees"

      View All Tags

      On the rules of the red-black tree

      Shower thoughts on the rules of the red-black tree. diff --git a/algorithms/tags/bellman-ford/index.html b/algorithms/tags/bellman-ford/index.html index cbe5771..36490a0 100644 --- a/algorithms/tags/bellman-ford/index.html +++ b/algorithms/tags/bellman-ford/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "bellman ford" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "bellman ford"

      View All Tags

      BF

      Solving the shortest path problem with a naïve approach that turns into diff --git a/algorithms/tags/bfs/index.html b/algorithms/tags/bfs/index.html index 629b536..445f0a3 100644 --- a/algorithms/tags/bfs/index.html +++ b/algorithms/tags/bfs/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "bfs" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "bfs"

      View All Tags

      Distance boundaries from BFS tree on undirected graphs

      Short explanation of distance boundaries deduced from a BFS tree. diff --git a/algorithms/tags/bottom-up-dp/index.html b/algorithms/tags/bottom-up-dp/index.html index 8531042..8f9bad0 100644 --- a/algorithms/tags/bottom-up-dp/index.html +++ b/algorithms/tags/bottom-up-dp/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "bottom-up-dp" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "bottom-up-dp"

      View All Tags

      Bottom-up DP solution

      Bottom-up DP solution of the Pyramid Slide Down. diff --git a/algorithms/tags/brute-force/index.html b/algorithms/tags/brute-force/index.html index b489d86..89a4e4f 100644 --- a/algorithms/tags/brute-force/index.html +++ b/algorithms/tags/brute-force/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "brute force" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "brute force"

      View All Tags

      BF

      Solving the shortest path problem with a naïve approach that turns into diff --git a/algorithms/tags/c/index.html b/algorithms/tags/c/index.html index 5aa1223..5ab3997 100644 --- a/algorithms/tags/c/index.html +++ b/algorithms/tags/c/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "c" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "c"

      View All Tags

      Time complexity of ‹extend›

      How to make inefficient algorithm unknowingly. diff --git a/algorithms/tags/cpp/index.html b/algorithms/tags/cpp/index.html index 3693f12..d59f9e2 100644 --- a/algorithms/tags/cpp/index.html +++ b/algorithms/tags/cpp/index.html @@ -2,7 +2,7 @@ - + 7 docs tagged with "cpp" | mf @@ -14,8 +14,8 @@ - - + +

      7 docs tagged with "cpp"

      View All Tags

      A* algorithm

      Moving from Dijkstra's algorithm into the A* algorithm. diff --git a/algorithms/tags/csharp/index.html b/algorithms/tags/csharp/index.html index 1395dea..e88123e 100644 --- a/algorithms/tags/csharp/index.html +++ b/algorithms/tags/csharp/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "csharp" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "csharp"

      View All Tags

      Iterative algorithms via iterators

      Iterative DFS using iterators. diff --git a/algorithms/tags/dijkstra/index.html b/algorithms/tags/dijkstra/index.html index 114f5b7..3984a65 100644 --- a/algorithms/tags/dijkstra/index.html +++ b/algorithms/tags/dijkstra/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "dijkstra" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "dijkstra"

      View All Tags

      Dijkstra's algorithm

      Moving from Bellman-Ford into the Dijsktra's algorithm. diff --git a/algorithms/tags/dynamic-array/index.html b/algorithms/tags/dynamic-array/index.html index ea39229..20f9d3b 100644 --- a/algorithms/tags/dynamic-array/index.html +++ b/algorithms/tags/dynamic-array/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "dynamic array" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "dynamic array"

      View All Tags

      Time complexity of ‹extend›

      How to make inefficient algorithm unknowingly. diff --git a/algorithms/tags/dynamic-programming/index.html b/algorithms/tags/dynamic-programming/index.html index 24e8eba..aba0075 100644 --- a/algorithms/tags/dynamic-programming/index.html +++ b/algorithms/tags/dynamic-programming/index.html @@ -2,7 +2,7 @@ - + 7 docs tagged with "dynamic programming" | mf @@ -14,8 +14,8 @@ - - + +

      7 docs tagged with "dynamic programming"

      View All Tags

      A* algorithm

      Moving from Dijkstra's algorithm into the A* algorithm. diff --git a/algorithms/tags/exponential/index.html b/algorithms/tags/exponential/index.html index ac613e1..748b4e0 100644 --- a/algorithms/tags/exponential/index.html +++ b/algorithms/tags/exponential/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "exponential" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "exponential"

      View All Tags

      Introduction to dynamic programming

      Solving a problem in different ways. diff --git a/algorithms/tags/graphs/index.html b/algorithms/tags/graphs/index.html index f25e174..31e8b3e 100644 --- a/algorithms/tags/graphs/index.html +++ b/algorithms/tags/graphs/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "graphs" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "graphs"

      View All Tags

      Distance boundaries from BFS tree on undirected graphs

      Short explanation of distance boundaries deduced from a BFS tree. diff --git a/algorithms/tags/greedy/index.html b/algorithms/tags/greedy/index.html index 18df5a2..39da3f8 100644 --- a/algorithms/tags/greedy/index.html +++ b/algorithms/tags/greedy/index.html @@ -2,7 +2,7 @@ - + 4 docs tagged with "greedy" | mf @@ -14,8 +14,8 @@ - - + +

      4 docs tagged with "greedy"

      View All Tags

      Dijkstra's algorithm

      Moving from Bellman-Ford into the Dijsktra's algorithm. diff --git a/algorithms/tags/hash-tables/index.html b/algorithms/tags/hash-tables/index.html index 5dd90b4..c28a4b6 100644 --- a/algorithms/tags/hash-tables/index.html +++ b/algorithms/tags/hash-tables/index.html @@ -2,7 +2,7 @@ - + 3 docs tagged with "hash-tables" | mf @@ -14,8 +14,8 @@ - - + +

      3 docs tagged with "hash-tables"

      View All Tags

      Breaking Hash Table

      How to get the linear time complexity in a hash table. diff --git a/algorithms/tags/index.html b/algorithms/tags/index.html index ef2dbe5..16708fb 100644 --- a/algorithms/tags/index.html +++ b/algorithms/tags/index.html @@ -2,7 +2,7 @@ - + Tags | mf @@ -14,8 +14,8 @@ - - + +

      diff --git a/algorithms/tags/iterative/index.html b/algorithms/tags/iterative/index.html index e6a98a6..db6d878 100644 --- a/algorithms/tags/iterative/index.html +++ b/algorithms/tags/iterative/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "iterative" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "iterative"

      View All Tags

      Iterative algorithms via iterators

      Iterative DFS using iterators. diff --git a/algorithms/tags/iterators/index.html b/algorithms/tags/iterators/index.html index 550d1ef..fb6bb64 100644 --- a/algorithms/tags/iterators/index.html +++ b/algorithms/tags/iterators/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "iterators" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "iterators"

      View All Tags

      Iterative algorithms via iterators

      Iterative DFS using iterators. diff --git a/algorithms/tags/java/index.html b/algorithms/tags/java/index.html index bf13822..82dda72 100644 --- a/algorithms/tags/java/index.html +++ b/algorithms/tags/java/index.html @@ -2,7 +2,7 @@ - + 5 docs tagged with "java" | mf @@ -14,8 +14,8 @@ - - + +

      5 docs tagged with "java"

      View All Tags

      Bottom-up DP solution

      Bottom-up DP solution of the Pyramid Slide Down. diff --git a/algorithms/tags/karel/index.html b/algorithms/tags/karel/index.html index 6e72795..ae74d24 100644 --- a/algorithms/tags/karel/index.html +++ b/algorithms/tags/karel/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "karel" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "karel"

      View All Tags

      Recursion and backtracking with Robot Karel

      A problem with too many restrictions. diff --git a/algorithms/tags/postconditions/index.html b/algorithms/tags/postconditions/index.html index d8f96ba..1e2ffca 100644 --- a/algorithms/tags/postconditions/index.html +++ b/algorithms/tags/postconditions/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "postconditions" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "postconditions"

      View All Tags

      Vague postconditions and proving correctness of algorithms

      Debugging and testing with precise postconditions. diff --git a/algorithms/tags/python/index.html b/algorithms/tags/python/index.html index a7b39cc..e70f482 100644 --- a/algorithms/tags/python/index.html +++ b/algorithms/tags/python/index.html @@ -2,7 +2,7 @@ - + 7 docs tagged with "python" | mf @@ -14,8 +14,8 @@ - - + +

      7 docs tagged with "python"

      View All Tags

      Breaking Hash Table

      How to get the linear time complexity in a hash table. diff --git a/algorithms/tags/recursion/index.html b/algorithms/tags/recursion/index.html index 2677789..1cc5613 100644 --- a/algorithms/tags/recursion/index.html +++ b/algorithms/tags/recursion/index.html @@ -2,7 +2,7 @@ - + 5 docs tagged with "recursion" | mf @@ -14,8 +14,8 @@ - - + +

      5 docs tagged with "recursion"

      View All Tags

      Introduction to dynamic programming

      Solving a problem in different ways. diff --git a/algorithms/tags/red-black-trees/index.html b/algorithms/tags/red-black-trees/index.html index fae94d1..1930e5c 100644 --- a/algorithms/tags/red-black-trees/index.html +++ b/algorithms/tags/red-black-trees/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "red-black trees" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "red-black trees"

      View All Tags

      On the rules of the red-black tree

      Shower thoughts on the rules of the red-black tree. diff --git a/algorithms/tags/solution/index.html b/algorithms/tags/solution/index.html index 50c4c08..f468c4d 100644 --- a/algorithms/tags/solution/index.html +++ b/algorithms/tags/solution/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "solution" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "solution"

      View All Tags

      Solution to the problem

      Solving the problem introduced in the previous post. diff --git a/algorithms/tags/sorting/index.html b/algorithms/tags/sorting/index.html index 16ac0f0..7b7ea65 100644 --- a/algorithms/tags/sorting/index.html +++ b/algorithms/tags/sorting/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "sorting" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "sorting"

      View All Tags

      Vague postconditions and proving correctness of algorithms

      Debugging and testing with precise postconditions. diff --git a/algorithms/tags/testing/index.html b/algorithms/tags/testing/index.html index 8ddeed2..72e8c4d 100644 --- a/algorithms/tags/testing/index.html +++ b/algorithms/tags/testing/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "testing" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "testing"

      View All Tags

      Vague postconditions and proving correctness of algorithms

      Debugging and testing with precise postconditions. diff --git a/algorithms/tags/time-complexity/index.html b/algorithms/tags/time-complexity/index.html index edb8d03..c432205 100644 --- a/algorithms/tags/time-complexity/index.html +++ b/algorithms/tags/time-complexity/index.html @@ -2,7 +2,7 @@ - + One doc tagged with "time complexity" | mf @@ -14,8 +14,8 @@ - - + +

      One doc tagged with "time complexity"

      View All Tags

      Time complexity of ‹extend›

      How to make inefficient algorithm unknowingly. diff --git a/algorithms/tags/top-down-dp/index.html b/algorithms/tags/top-down-dp/index.html index 4212445..8e31fec 100644 --- a/algorithms/tags/top-down-dp/index.html +++ b/algorithms/tags/top-down-dp/index.html @@ -2,7 +2,7 @@ - + 2 docs tagged with "top-down-dp" | mf @@ -14,8 +14,8 @@ - - + +

      2 docs tagged with "top-down-dp"

      View All Tags

      Introduction to dynamic programming

      Solving a problem in different ways. diff --git a/algorithms/time-complexity/extend/index.html b/algorithms/time-complexity/extend/index.html index 220a67b..cc9e3d3 100644 --- a/algorithms/time-complexity/extend/index.html +++ b/algorithms/time-complexity/extend/index.html @@ -2,7 +2,7 @@ - + Time complexity of ‹extend› | mf @@ -16,8 +16,8 @@ - - + +

      Time complexity of ‹extend›

      Introduction

      @@ -56,8 +56,8 @@ elements from b.

      Example #2

      As we could observe in the example above, extend iterates over all of the elements that it adds. In case of recursive calls, it results in iterating over the same elements multiple times.

      Consider constructing of this list:

      -

      Rendered construction of the list -Rendered construction of the list

      +

      Rendered construction of the list +Rendered construction of the list

      Let us assume that you extend the result with the list that you get from the recursive call.

      • diff --git a/assets/js/01a85c17.9b387ded.js b/assets/js/01a85c17.c2d2d974.js similarity index 96% rename from assets/js/01a85c17.9b387ded.js rename to assets/js/01a85c17.c2d2d974.js index bb5ad69..ee2699b 100644 --- a/assets/js/01a85c17.9b387ded.js +++ b/assets/js/01a85c17.c2d2d974.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4013],{61460:(e,t,s)=>{s.d(t,{Z:()=>v});var a=s(67294),i=s(36905),r=s(80647),l=s(87524),n=s(39960),c=s(95999),o=s(16550),m=s(48596);function d(e){const{pathname:t}=(0,o.TH)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var g=s(85893);function h(e){let{sidebar:t}=e;const s=d(t.items);return(0,g.jsx)("aside",{className:"col col--3",children:(0,g.jsxs)("nav",{className:(0,i.Z)(u.sidebar,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,g.jsx)("div",{className:(0,i.Z)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,g.jsx)("ul",{className:(0,i.Z)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,g.jsx)("li",{className:u.sidebarItem,children:(0,g.jsx)(n.Z,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var b=s(13102);function p(e){let{sidebar:t}=e;const s=d(t.items);return(0,g.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,g.jsx)("li",{className:"menu__list-item",children:(0,g.jsx)(n.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,g.jsx)(b.Zo,{component:p,props:e})}function x(e){let{sidebar:t}=e;const s=(0,l.i)();return t?.items.length?"mobile"===s?(0,g.jsx)(j,{sidebar:t}):(0,g.jsx)(h,{sidebar:t}):null}function v(e){const{sidebar:t,toc:s,children:a,...l}=e,n=t&&t.items.length>0;return(0,g.jsx)(r.Z,{...l,children:(0,g.jsx)("div",{className:"container margin-vert--lg",children:(0,g.jsxs)("div",{className:"row",children:[(0,g.jsx)(x,{sidebar:t}),(0,g.jsx)("main",{className:(0,i.Z)("col",{"col--7":n,"col--9 col--offset-1":!n}),itemScope:!0,itemType:"https://schema.org/Blog",children:a}),s&&(0,g.jsx)("div",{className:"col col--2",children:s})]})})})}},24524:(e,t,s)=>{s.r(t),s.d(t,{default:()=>u});s(67294);var a=s(36905),i=s(35155),r=s(10833),l=s(35281),n=s(61460),c=s(26090),o=s(90197),m=s(92503),d=s(85893);function u(e){let{tags:t,sidebar:s}=e;const u=(0,i.M)();return(0,d.jsxs)(r.FG,{className:(0,a.Z)(l.k.wrapper.blogPages,l.k.page.blogTagsListPage),children:[(0,d.jsx)(r.d,{title:u}),(0,d.jsx)(o.Z,{tag:"blog_tags_list"}),(0,d.jsxs)(n.Z,{sidebar:s,children:[(0,d.jsx)(m.Z,{as:"h1",children:u}),(0,d.jsx)(c.Z,{tags:t})]})]})}},13008:(e,t,s)=>{s.d(t,{Z:()=>n});s(67294);var a=s(36905),i=s(39960);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=s(85893);function n(e){let{permalink:t,label:s,count:n}=e;return(0,l.jsxs)(i.Z,{href:t,className:(0,a.Z)(r.tag,n?r.tagWithCount:r.tagRegular),children:[s,n&&(0,l.jsx)("span",{children:n})]})}},26090:(e,t,s)=>{s.d(t,{Z:()=>o});s(67294);var a=s(35155),i=s(13008),r=s(92503);const l={tag:"tag_Nnez"};var n=s(85893);function c(e){let{letterEntry:t}=e;return(0,n.jsxs)("article",{children:[(0,n.jsx)(r.Z,{as:"h2",id:t.letter,children:t.letter}),(0,n.jsx)("ul",{className:"padding--none",children:t.tags.map((e=>(0,n.jsx)("li",{className:l.tag,children:(0,n.jsx)(i.Z,{...e})},e.permalink)))}),(0,n.jsx)("hr",{})]})}function o(e){let{tags:t}=e;const s=(0,a.P)(t);return(0,n.jsx)("section",{className:"margin-vert--lg",children:s.map((e=>(0,n.jsx)(c,{letterEntry:e},e.letter)))})}},35155:(e,t,s)=>{s.d(t,{M:()=>i,P:()=>r});var a=s(95999);const i=()=>(0,a.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function r(e){const t={};return Object.values(e).forEach((e=>{const s=function(e){return e[0].toUpperCase()}(e.label);t[s]??=[],t[s].push(e)})),Object.entries(t).sort(((e,t)=>{let[s]=e,[a]=t;return s.localeCompare(a)})).map((e=>{let[t,s]=e;return{letter:t,tags:s.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4013],{61460:(e,t,s)=>{s.d(t,{Z:()=>v});var a=s(67294),i=s(36905),r=s(80647),l=s(87524),n=s(33692),c=s(95999),o=s(16550),m=s(48596);function d(e){const{pathname:t}=(0,o.TH)();return(0,a.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var g=s(85893);function h(e){let{sidebar:t}=e;const s=d(t.items);return(0,g.jsx)("aside",{className:"col col--3",children:(0,g.jsxs)("nav",{className:(0,i.Z)(u.sidebar,"thin-scrollbar"),"aria-label":(0,c.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,g.jsx)("div",{className:(0,i.Z)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,g.jsx)("ul",{className:(0,i.Z)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,g.jsx)("li",{className:u.sidebarItem,children:(0,g.jsx)(n.Z,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var b=s(13102);function p(e){let{sidebar:t}=e;const s=d(t.items);return(0,g.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,g.jsx)("li",{className:"menu__list-item",children:(0,g.jsx)(n.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function j(e){return(0,g.jsx)(b.Zo,{component:p,props:e})}function x(e){let{sidebar:t}=e;const s=(0,l.i)();return t?.items.length?"mobile"===s?(0,g.jsx)(j,{sidebar:t}):(0,g.jsx)(h,{sidebar:t}):null}function v(e){const{sidebar:t,toc:s,children:a,...l}=e,n=t&&t.items.length>0;return(0,g.jsx)(r.Z,{...l,children:(0,g.jsx)("div",{className:"container margin-vert--lg",children:(0,g.jsxs)("div",{className:"row",children:[(0,g.jsx)(x,{sidebar:t}),(0,g.jsx)("main",{className:(0,i.Z)("col",{"col--7":n,"col--9 col--offset-1":!n}),itemScope:!0,itemType:"https://schema.org/Blog",children:a}),s&&(0,g.jsx)("div",{className:"col col--2",children:s})]})})})}},24524:(e,t,s)=>{s.r(t),s.d(t,{default:()=>u});s(67294);var a=s(36905),i=s(35155),r=s(10833),l=s(35281),n=s(61460),c=s(26090),o=s(90197),m=s(92503),d=s(85893);function u(e){let{tags:t,sidebar:s}=e;const u=(0,i.M)();return(0,d.jsxs)(r.FG,{className:(0,a.Z)(l.k.wrapper.blogPages,l.k.page.blogTagsListPage),children:[(0,d.jsx)(r.d,{title:u}),(0,d.jsx)(o.Z,{tag:"blog_tags_list"}),(0,d.jsxs)(n.Z,{sidebar:s,children:[(0,d.jsx)(m.Z,{as:"h1",children:u}),(0,d.jsx)(c.Z,{tags:t})]})]})}},13008:(e,t,s)=>{s.d(t,{Z:()=>n});s(67294);var a=s(36905),i=s(33692);const r={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var l=s(85893);function n(e){let{permalink:t,label:s,count:n}=e;return(0,l.jsxs)(i.Z,{href:t,className:(0,a.Z)(r.tag,n?r.tagWithCount:r.tagRegular),children:[s,n&&(0,l.jsx)("span",{children:n})]})}},26090:(e,t,s)=>{s.d(t,{Z:()=>o});s(67294);var a=s(35155),i=s(13008),r=s(92503);const l={tag:"tag_Nnez"};var n=s(85893);function c(e){let{letterEntry:t}=e;return(0,n.jsxs)("article",{children:[(0,n.jsx)(r.Z,{as:"h2",id:t.letter,children:t.letter}),(0,n.jsx)("ul",{className:"padding--none",children:t.tags.map((e=>(0,n.jsx)("li",{className:l.tag,children:(0,n.jsx)(i.Z,{...e})},e.permalink)))}),(0,n.jsx)("hr",{})]})}function o(e){let{tags:t}=e;const s=(0,a.P)(t);return(0,n.jsx)("section",{className:"margin-vert--lg",children:s.map((e=>(0,n.jsx)(c,{letterEntry:e},e.letter)))})}},35155:(e,t,s)=>{s.d(t,{M:()=>i,P:()=>r});var a=s(95999);const i=()=>(0,a.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function r(e){const t={};return Object.values(e).forEach((e=>{const s=function(e){return e[0].toUpperCase()}(e.label);t[s]??=[],t[s].push(e)})),Object.entries(t).sort(((e,t)=>{let[s]=e,[a]=t;return s.localeCompare(a)})).map((e=>{let[t,s]=e;return{letter:t,tags:s.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/0816068a.4a65af0e.js b/assets/js/0816068a.4a65af0e.js new file mode 100644 index 0000000..91cb8a9 --- /dev/null +++ b/assets/js/0816068a.4a65af0e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2948],{17702:e=>{e.exports=JSON.parse('{"label":"hype","permalink":"/blog/tags/hype","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/0bfe45d5.143f3da4.js b/assets/js/0bfe45d5.278d3d58.js similarity index 73% rename from assets/js/0bfe45d5.143f3da4.js rename to assets/js/0bfe45d5.278d3d58.js index 3914bb5..bdf0360 100644 --- a/assets/js/0bfe45d5.143f3da4.js +++ b/assets/js/0bfe45d5.278d3d58.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4269],{13847:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/rust","page":1,"postsPerPage":10,"totalPages":1,"totalCount":5,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4269],{13847:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/rust","page":1,"postsPerPage":10,"totalPages":1,"totalCount":6,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/130.b07e32e5.js b/assets/js/130.a26578f7.js similarity index 97% rename from assets/js/130.b07e32e5.js rename to assets/js/130.a26578f7.js index c382071..e46dd75 100644 --- a/assets/js/130.b07e32e5.js +++ b/assets/js/130.a26578f7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[130],{61460:(e,t,s)=>{s.d(t,{Z:()=>b});var r=s(67294),a=s(36905),n=s(80647),l=s(87524),i=s(39960),o=s(95999),c=s(16550),m=s(48596);function d(e){const{pathname:t}=(0,c.TH)();return(0,r.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=s(85893);function g(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,a.Z)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,a.Z)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,a.Z)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var p=s(13102);function x(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function f(e){return(0,h.jsx)(p.Zo,{component:x,props:e})}function j(e){let{sidebar:t}=e;const s=(0,l.i)();return t?.items.length?"mobile"===s?(0,h.jsx)(f,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function b(e){const{sidebar:t,toc:s,children:r,...l}=e,i=t&&t.items.length>0;return(0,h.jsx)(n.Z,{...l,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(j,{sidebar:t}),(0,h.jsx)("main",{className:(0,a.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"https://schema.org/Blog",children:r}),s&&(0,h.jsx)("div",{className:"col col--2",children:s})]})})})}},30390:(e,t,s)=>{s.d(t,{Z:()=>L});s(67294);var r=s(36905),a=s(9460),n=s(44996),l=s(85893);function i(e){let{children:t,className:s}=e;const{frontMatter:r,assets:i,metadata:{description:o}}=(0,a.C)(),{withBaseUrl:c}=(0,n.C)(),m=i.image??r.image,d=r.keywords??[];return(0,l.jsxs)("article",{className:s,itemProp:"blogPost",itemScope:!0,itemType:"https://schema.org/BlogPosting",children:[o&&(0,l.jsx)("meta",{itemProp:"description",content:o}),m&&(0,l.jsx)("link",{itemProp:"image",href:c(m,{absolute:!0})}),d.length>0&&(0,l.jsx)("meta",{itemProp:"keywords",content:d.join(",")}),t]})}var o=s(39960);const c={title:"title_f1Hy"};function m(e){let{className:t}=e;const{metadata:s,isBlogPostPage:n}=(0,a.C)(),{permalink:i,title:m}=s,d=n?"h1":"h2";return(0,l.jsx)(d,{className:(0,r.Z)(c.title,t),itemProp:"headline",children:n?m:(0,l.jsx)(o.Z,{itemProp:"url",to:i,children:m})})}var d=s(95999),u=s(88824);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const s=function(){const{selectMessage:e}=(0,u.c)();return t=>{const s=Math.ceil(t);return e(s,(0,d.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:s}))}}();return(0,l.jsx)(l.Fragment,{children:s(t)})}function p(e){let{date:t,formattedDate:s}=e;return(0,l.jsx)("time",{dateTime:t,itemProp:"datePublished",children:s})}function x(){return(0,l.jsx)(l.Fragment,{children:" \xb7 "})}function f(e){let{className:t}=e;const{metadata:s}=(0,a.C)(),{date:n,formattedDate:i,readingTime:o}=s;return(0,l.jsxs)("div",{className:(0,r.Z)(h.container,"margin-vert--md",t),children:[(0,l.jsx)(p,{date:n,formattedDate:i}),void 0!==o&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{}),(0,l.jsx)(g,{readingTime:o})]})]})}function j(e){return e.href?(0,l.jsx)(o.Z,{...e}):(0,l.jsx)(l.Fragment,{children:e.children})}function b(e){let{author:t,className:s}=e;const{name:a,title:n,url:i,imageURL:o,email:c}=t,m=i||c&&`mailto:${c}`||void 0;return(0,l.jsxs)("div",{className:(0,r.Z)("avatar margin-bottom--sm",s),children:[o&&(0,l.jsx)(j,{href:m,className:"avatar__photo-link",children:(0,l.jsx)("img",{className:"avatar__photo",src:o,alt:a,itemProp:"image"})}),a&&(0,l.jsxs)("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person",children:[(0,l.jsx)("div",{className:"avatar__name",children:(0,l.jsx)(j,{href:m,itemProp:"url",children:(0,l.jsx)("span",{itemProp:"name",children:a})})}),n&&(0,l.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:n})]})]})}const v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function P(e){let{className:t}=e;const{metadata:{authors:s},assets:n}=(0,a.C)();if(0===s.length)return null;const i=s.every((e=>{let{name:t}=e;return!t}));return(0,l.jsx)("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:s.map(((e,t)=>(0,l.jsx)("div",{className:(0,r.Z)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,l.jsx)(b,{author:{...e,imageURL:n.authorsImageUrls[t]??e.imageURL}})},t)))})}function N(){return(0,l.jsxs)("header",{children:[(0,l.jsx)(m,{}),(0,l.jsx)(f,{}),(0,l.jsx)(P,{})]})}var _=s(18780),k=s(27779);function Z(e){let{children:t,className:s}=e;const{isBlogPostPage:n}=(0,a.C)();return(0,l.jsx)("div",{id:n?_.blogPostContainerID:void 0,className:(0,r.Z)("markdown",s),itemProp:"articleBody",children:(0,l.jsx)(k.Z,{children:t})})}var I=s(84881),C=s(71526);function w(){return(0,l.jsx)("b",{children:(0,l.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function T(e){const{blogPostTitle:t,...s}=e;return(0,l.jsx)(o.Z,{"aria-label":(0,d.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...s,children:(0,l.jsx)(w,{})})}const y={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_mRVl"};function F(){const{metadata:e,isBlogPostPage:t}=(0,a.C)(),{tags:s,title:n,editUrl:i,hasTruncateMarker:o}=e,c=!t&&o,m=s.length>0;return m||c||i?(0,l.jsxs)("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&y.blogPostFooterDetailsFull),children:[m&&(0,l.jsx)("div",{className:(0,r.Z)("col",{"col--9":c}),children:(0,l.jsx)(C.Z,{tags:s})}),t&&i&&(0,l.jsx)("div",{className:"col margin-top--sm",children:(0,l.jsx)(I.Z,{editUrl:i})}),c&&(0,l.jsx)("div",{className:(0,r.Z)("col text--right",{"col--3":m}),children:(0,l.jsx)(T,{blogPostTitle:n,to:e.permalink})})]}):null}function L(e){let{children:t,className:s}=e;const n=function(){const{isBlogPostPage:e}=(0,a.C)();return e?void 0:"margin-bottom--xl"}();return(0,l.jsxs)(i,{className:(0,r.Z)(n,s),children:[(0,l.jsx)(N,{}),(0,l.jsx)(Z,{children:t}),(0,l.jsx)(F,{})]})}},9460:(e,t,s)=>{s.d(t,{C:()=>o,n:()=>i});var r=s(67294),a=s(902),n=s(85893);const l=r.createContext(null);function i(e){let{children:t,content:s,isBlogPostPage:a=!1}=e;const i=function(e){let{content:t,isBlogPostPage:s}=e;return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:a});return(0,n.jsx)(l.Provider,{value:i,children:t})}function o(){const e=(0,r.useContext)(l);if(null===e)throw new a.i6("BlogPostProvider");return e}},88824:(e,t,s)=>{s.d(t,{c:()=>c});var r=s(67294),a=s(52263);const n=["zero","one","two","few","many","other"];function l(e){return n.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.Z)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const r=e.split("|");if(1===r.length)return r[0];r.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const a=s.select(t),n=s.pluralForms.indexOf(a);return r[Math.min(n,r.length-1)]}(s,t,e)}}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[130],{61460:(e,t,s)=>{s.d(t,{Z:()=>b});var r=s(67294),a=s(36905),n=s(80647),l=s(87524),i=s(33692),o=s(95999),c=s(16550),m=s(48596);function d(e){const{pathname:t}=(0,c.TH)();return(0,r.useMemo)((()=>e.filter((e=>function(e,t){return!(e.unlisted&&!(0,m.Mg)(e.permalink,t))}(e,t)))),[e,t])}const u={sidebar:"sidebar_re4s",sidebarItemTitle:"sidebarItemTitle_pO2u",sidebarItemList:"sidebarItemList_Yudw",sidebarItem:"sidebarItem__DBe",sidebarItemLink:"sidebarItemLink_mo7H",sidebarItemLinkActive:"sidebarItemLinkActive_I1ZP"};var h=s(85893);function g(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("aside",{className:"col col--3",children:(0,h.jsxs)("nav",{className:(0,a.Z)(u.sidebar,"thin-scrollbar"),"aria-label":(0,o.I)({id:"theme.blog.sidebar.navAriaLabel",message:"Blog recent posts navigation",description:"The ARIA label for recent posts in the blog sidebar"}),children:[(0,h.jsx)("div",{className:(0,a.Z)(u.sidebarItemTitle,"margin-bottom--md"),children:t.title}),(0,h.jsx)("ul",{className:(0,a.Z)(u.sidebarItemList,"clean-list"),children:s.map((e=>(0,h.jsx)("li",{className:u.sidebarItem,children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:u.sidebarItemLink,activeClassName:u.sidebarItemLinkActive,children:e.title})},e.permalink)))})]})})}var p=s(13102);function x(e){let{sidebar:t}=e;const s=d(t.items);return(0,h.jsx)("ul",{className:"menu__list",children:s.map((e=>(0,h.jsx)("li",{className:"menu__list-item",children:(0,h.jsx)(i.Z,{isNavLink:!0,to:e.permalink,className:"menu__link",activeClassName:"menu__link--active",children:e.title})},e.permalink)))})}function f(e){return(0,h.jsx)(p.Zo,{component:x,props:e})}function j(e){let{sidebar:t}=e;const s=(0,l.i)();return t?.items.length?"mobile"===s?(0,h.jsx)(f,{sidebar:t}):(0,h.jsx)(g,{sidebar:t}):null}function b(e){const{sidebar:t,toc:s,children:r,...l}=e,i=t&&t.items.length>0;return(0,h.jsx)(n.Z,{...l,children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsxs)("div",{className:"row",children:[(0,h.jsx)(j,{sidebar:t}),(0,h.jsx)("main",{className:(0,a.Z)("col",{"col--7":i,"col--9 col--offset-1":!i}),itemScope:!0,itemType:"https://schema.org/Blog",children:r}),s&&(0,h.jsx)("div",{className:"col col--2",children:s})]})})})}},30390:(e,t,s)=>{s.d(t,{Z:()=>L});s(67294);var r=s(36905),a=s(9460),n=s(44996),l=s(85893);function i(e){let{children:t,className:s}=e;const{frontMatter:r,assets:i,metadata:{description:o}}=(0,a.C)(),{withBaseUrl:c}=(0,n.C)(),m=i.image??r.image,d=r.keywords??[];return(0,l.jsxs)("article",{className:s,itemProp:"blogPost",itemScope:!0,itemType:"https://schema.org/BlogPosting",children:[o&&(0,l.jsx)("meta",{itemProp:"description",content:o}),m&&(0,l.jsx)("link",{itemProp:"image",href:c(m,{absolute:!0})}),d.length>0&&(0,l.jsx)("meta",{itemProp:"keywords",content:d.join(",")}),t]})}var o=s(33692);const c={title:"title_f1Hy"};function m(e){let{className:t}=e;const{metadata:s,isBlogPostPage:n}=(0,a.C)(),{permalink:i,title:m}=s,d=n?"h1":"h2";return(0,l.jsx)(d,{className:(0,r.Z)(c.title,t),itemProp:"headline",children:n?m:(0,l.jsx)(o.Z,{itemProp:"url",to:i,children:m})})}var d=s(95999),u=s(88824);const h={container:"container_mt6G"};function g(e){let{readingTime:t}=e;const s=function(){const{selectMessage:e}=(0,u.c)();return t=>{const s=Math.ceil(t);return e(s,(0,d.I)({id:"theme.blog.post.readingTime.plurals",description:'Pluralized label for "{readingTime} min read". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One min read|{readingTime} min read"},{readingTime:s}))}}();return(0,l.jsx)(l.Fragment,{children:s(t)})}function p(e){let{date:t,formattedDate:s}=e;return(0,l.jsx)("time",{dateTime:t,itemProp:"datePublished",children:s})}function x(){return(0,l.jsx)(l.Fragment,{children:" \xb7 "})}function f(e){let{className:t}=e;const{metadata:s}=(0,a.C)(),{date:n,formattedDate:i,readingTime:o}=s;return(0,l.jsxs)("div",{className:(0,r.Z)(h.container,"margin-vert--md",t),children:[(0,l.jsx)(p,{date:n,formattedDate:i}),void 0!==o&&(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{}),(0,l.jsx)(g,{readingTime:o})]})]})}function j(e){return e.href?(0,l.jsx)(o.Z,{...e}):(0,l.jsx)(l.Fragment,{children:e.children})}function b(e){let{author:t,className:s}=e;const{name:a,title:n,url:i,imageURL:o,email:c}=t,m=i||c&&`mailto:${c}`||void 0;return(0,l.jsxs)("div",{className:(0,r.Z)("avatar margin-bottom--sm",s),children:[o&&(0,l.jsx)(j,{href:m,className:"avatar__photo-link",children:(0,l.jsx)("img",{className:"avatar__photo",src:o,alt:a,itemProp:"image"})}),a&&(0,l.jsxs)("div",{className:"avatar__intro",itemProp:"author",itemScope:!0,itemType:"https://schema.org/Person",children:[(0,l.jsx)("div",{className:"avatar__name",children:(0,l.jsx)(j,{href:m,itemProp:"url",children:(0,l.jsx)("span",{itemProp:"name",children:a})})}),n&&(0,l.jsx)("small",{className:"avatar__subtitle",itemProp:"description",children:n})]})]})}const v={authorCol:"authorCol_Hf19",imageOnlyAuthorRow:"imageOnlyAuthorRow_pa_O",imageOnlyAuthorCol:"imageOnlyAuthorCol_G86a"};function P(e){let{className:t}=e;const{metadata:{authors:s},assets:n}=(0,a.C)();if(0===s.length)return null;const i=s.every((e=>{let{name:t}=e;return!t}));return(0,l.jsx)("div",{className:(0,r.Z)("margin-top--md margin-bottom--sm",i?v.imageOnlyAuthorRow:"row",t),children:s.map(((e,t)=>(0,l.jsx)("div",{className:(0,r.Z)(!i&&"col col--6",i?v.imageOnlyAuthorCol:v.authorCol),children:(0,l.jsx)(b,{author:{...e,imageURL:n.authorsImageUrls[t]??e.imageURL}})},t)))})}function N(){return(0,l.jsxs)("header",{children:[(0,l.jsx)(m,{}),(0,l.jsx)(f,{}),(0,l.jsx)(P,{})]})}var _=s(18780),k=s(97917);function Z(e){let{children:t,className:s}=e;const{isBlogPostPage:n}=(0,a.C)();return(0,l.jsx)("div",{id:n?_.blogPostContainerID:void 0,className:(0,r.Z)("markdown",s),itemProp:"articleBody",children:(0,l.jsx)(k.Z,{children:t})})}var I=s(84881),C=s(71526);function w(){return(0,l.jsx)("b",{children:(0,l.jsx)(d.Z,{id:"theme.blog.post.readMore",description:"The label used in blog post item excerpts to link to full blog posts",children:"Read More"})})}function T(e){const{blogPostTitle:t,...s}=e;return(0,l.jsx)(o.Z,{"aria-label":(0,d.I)({message:"Read more about {title}",id:"theme.blog.post.readMoreLabel",description:"The ARIA label for the link to full blog posts from excerpts"},{title:t}),...s,children:(0,l.jsx)(w,{})})}const y={blogPostFooterDetailsFull:"blogPostFooterDetailsFull_mRVl"};function F(){const{metadata:e,isBlogPostPage:t}=(0,a.C)(),{tags:s,title:n,editUrl:i,hasTruncateMarker:o}=e,c=!t&&o,m=s.length>0;return m||c||i?(0,l.jsxs)("footer",{className:(0,r.Z)("row docusaurus-mt-lg",t&&y.blogPostFooterDetailsFull),children:[m&&(0,l.jsx)("div",{className:(0,r.Z)("col",{"col--9":c}),children:(0,l.jsx)(C.Z,{tags:s})}),t&&i&&(0,l.jsx)("div",{className:"col margin-top--sm",children:(0,l.jsx)(I.Z,{editUrl:i})}),c&&(0,l.jsx)("div",{className:(0,r.Z)("col text--right",{"col--3":m}),children:(0,l.jsx)(T,{blogPostTitle:n,to:e.permalink})})]}):null}function L(e){let{children:t,className:s}=e;const n=function(){const{isBlogPostPage:e}=(0,a.C)();return e?void 0:"margin-bottom--xl"}();return(0,l.jsxs)(i,{className:(0,r.Z)(n,s),children:[(0,l.jsx)(N,{}),(0,l.jsx)(Z,{children:t}),(0,l.jsx)(F,{})]})}},9460:(e,t,s)=>{s.d(t,{C:()=>o,n:()=>i});var r=s(67294),a=s(902),n=s(85893);const l=r.createContext(null);function i(e){let{children:t,content:s,isBlogPostPage:a=!1}=e;const i=function(e){let{content:t,isBlogPostPage:s}=e;return(0,r.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:s})),[t,s])}({content:s,isBlogPostPage:a});return(0,n.jsx)(l.Provider,{value:i,children:t})}function o(){const e=(0,r.useContext)(l);if(null===e)throw new a.i6("BlogPostProvider");return e}},88824:(e,t,s)=>{s.d(t,{c:()=>c});var r=s(67294),a=s(52263);const n=["zero","one","two","few","many","other"];function l(e){return n.filter((t=>e.includes(t)))}const i={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function o(){const{i18n:{currentLocale:e}}=(0,a.Z)();return(0,r.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:l(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),i}}),[e])}function c(){const e=o();return{selectMessage:(t,s)=>function(e,t,s){const r=e.split("|");if(1===r.length)return r[0];r.length>s.pluralForms.length&&console.error(`For locale=${s.locale}, a maximum of ${s.pluralForms.length} plural forms are expected (${s.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const a=s.select(t),n=s.pluralForms.indexOf(a);return r[Math.min(n,r.length-1)]}(s,t,e)}}}}]); \ No newline at end of file diff --git a/assets/js/1325.f9a9e4dd.js b/assets/js/1325.f9a9e4dd.js deleted file mode 100644 index e272103..0000000 --- a/assets/js/1325.f9a9e4dd.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 1325.f9a9e4dd.js.LICENSE.txt */ -(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1325],{17967:(t,e)=>{"use strict";e.Nm=e.Rq=void 0;var i=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,n=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;var l,c=(l=t,l.replace(o,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!c)return e.Rq;if(function(t){return s.indexOf(t[0])>-1}(c))return c;var h=c.match(a);if(!h)return c;var u=h[0];return i.test(u)?e.Rq:c}},59047:(t,e,i)=>{"use strict";i.d(e,{Z:()=>A});var r=i(67294),n=i(85893);function o(t){const{mdxAdmonitionTitle:e,rest:i}=function(t){const e=r.Children.toArray(t),i=e.find((t=>r.isValidElement(t)&&"mdxAdmonitionTitle"===t.type)),o=e.filter((t=>t!==i)),a=i?.props.children;return{mdxAdmonitionTitle:a,rest:o.length>0?(0,n.jsx)(n.Fragment,{children:o}):null}}(t.children),o=t.title??e;return{...t,...o&&{title:o},children:i}}var a=i(36905),s=i(95999),l=i(35281);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function h(t){let{type:e,className:i,children:r}=t;return(0,n.jsx)("div",{className:(0,a.Z)(l.k.common.admonition,l.k.common.admonitionType(e),c.admonition,i),children:r})}function u(t){let{icon:e,title:i}=t;return(0,n.jsxs)("div",{className:c.admonitionHeading,children:[(0,n.jsx)("span",{className:c.admonitionIcon,children:e}),i]})}function d(t){let{children:e}=t;return e?(0,n.jsx)("div",{className:c.admonitionContent,children:e}):null}function f(t){const{type:e,icon:i,title:r,children:o,className:a}=t;return(0,n.jsxs)(h,{type:e,className:a,children:[(0,n.jsx)(u,{title:r,icon:i}),(0,n.jsx)(d,{children:o})]})}function p(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const g={icon:(0,n.jsx)(p,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function m(t){return(0,n.jsx)(f,{...g,...t,className:(0,a.Z)("alert alert--secondary",t.className),children:t.children})}function y(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const x={icon:(0,n.jsx)(y,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function C(t){return(0,n.jsx)(f,{...x,...t,className:(0,a.Z)("alert alert--success",t.className),children:t.children})}function b(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const _={icon:(0,n.jsx)(b,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function v(t){return(0,n.jsx)(f,{..._,...t,className:(0,a.Z)("alert alert--info",t.className),children:t.children})}function k(t){return(0,n.jsx)("svg",{viewBox:"0 0 16 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const T={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function w(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const S={icon:(0,n.jsx)(w,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const B={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const F={...{note:m,tip:C,info:v,warning:function(t){return(0,n.jsx)(f,{...T,...t,className:(0,a.Z)("alert alert--warning",t.className),children:t.children})},danger:function(t){return(0,n.jsx)(f,{...S,...t,className:(0,a.Z)("alert alert--danger",t.className),children:t.children})}},...{secondary:t=>(0,n.jsx)(m,{title:"secondary",...t}),important:t=>(0,n.jsx)(v,{title:"important",...t}),success:t=>(0,n.jsx)(C,{title:"success",...t}),caution:function(t){return(0,n.jsx)(f,{...B,...t,className:(0,a.Z)("alert alert--warning",t.className),children:t.children})}}};function A(t){const e=o(t),i=(r=e.type,F[r]||(console.warn(`No admonition component found for admonition type "${r}". Using Info as fallback.`),F.info));var r;return(0,n.jsx)(i,{...e})}},84881:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});i(67294);var r=i(95999),n=i(35281),o=i(39960),a=i(36905);const s={iconEdit:"iconEdit_Z9Sw"};var l=i(85893);function c(t){let{className:e,...i}=t;return(0,l.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,a.Z)(s.iconEdit,e),"aria-hidden":"true",...i,children:(0,l.jsx)("g",{children:(0,l.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function h(t){let{editUrl:e}=t;return(0,l.jsxs)(o.Z,{to:e,className:n.k.common.editThisPage,children:[(0,l.jsx)(c,{}),(0,l.jsx)(r.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}},27779:(t,e,i)=>{"use strict";i.d(e,{Z:()=>ft});var r=i(67294),n=i(11151),o=i(35742),a=i(72389),s=i(36905),l=i(92949),c=i(86668);function h(){const{prism:t}=(0,c.L)(),{colorMode:e}=(0,l.I)(),i=t.theme,r=t.darkTheme||i;return"dark"===e?r:i}var u=i(35281),d=i(87594),f=i.n(d);const p=/title=(?["'])(?.*?)\1/,g=/\{(?<range>[\d,-]+)\}/,m={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"},lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""}};function y(t,e){const i=t.map((t=>{const{start:i,end:r}=m[t];return`(?:${i}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${i})\\s*$`)}function x(t,e){let i=t.replace(/\n$/,"");const{language:r,magicComments:n,metastring:o}=e;if(o&&g.test(o)){const t=o.match(g).groups.range;if(0===n.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=n[0].className,r=f()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(r),code:i}}if(void 0===r)return{lineClassNames:{},code:i};const a=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return y(["js","jsBlock"],e);case"jsx":case"tsx":return y(["js","jsBlock","jsx"],e);case"html":return y(["js","jsBlock","html"],e);case"python":case"py":case"bash":return y(["bash"],e);case"markdown":case"md":return y(["html","jsx","bash"],e);case"tex":case"latex":case"matlab":return y(["tex"],e);case"lua":case"haskell":case"sql":return y(["lua"],e);case"wasm":return y(["wasm"],e);default:return y(Object.keys(m).filter((t=>!["lua","wasm","tex","latex","matlab"].includes(t))),e)}}(r,n),s=i.split("\n"),l=Object.fromEntries(n.map((t=>[t.className,{start:0,range:""}]))),c=Object.fromEntries(n.filter((t=>t.line)).map((t=>{let{className:e,line:i}=t;return[i,e]}))),h=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.start,e]}))),u=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.end,e]})));for(let f=0;f<s.length;){const t=s[f].match(a);if(!t){f+=1;continue}const e=t.slice(1).find((t=>void 0!==t));c[e]?l[c[e]].range+=`${f},`:h[e]?l[h[e]].start=f:u[e]&&(l[u[e]].range+=`${l[u[e]].start}-${f-1},`),s.splice(f,1)}i=s.join("\n");const d={};return Object.entries(l).forEach((t=>{let[e,{range:i}]=t;f()(i).forEach((t=>{d[t]??=[],d[t].push(e)}))})),{lineClassNames:d,code:i}}const C={codeBlockContainer:"codeBlockContainer_Ckt0"};var b=i(85893);function _(t){let{as:e,...i}=t;const r=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},i={};return Object.entries(t.plain).forEach((t=>{let[r,n]=t;const o=e[r];o&&"string"==typeof n&&(i[o]=n)})),i}(h());return(0,b.jsx)(e,{...i,style:r,className:(0,s.Z)(i.className,C.codeBlockContainer,u.k.common.codeBlock)})}const v={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function k(t){let{children:e,className:i}=t;return(0,b.jsx)(_,{as:"pre",tabIndex:0,className:(0,s.Z)(v.codeBlockStandalone,"thin-scrollbar",i),children:(0,b.jsx)("code",{className:v.codeBlockLines,children:e})})}var T=i(902);const w={attributes:!0,characterData:!0,childList:!0,subtree:!0};function S(t,e){const[i,n]=(0,r.useState)(),o=(0,r.useCallback)((()=>{n(t.current?.closest("[role=tabpanel][hidden]"))}),[t,n]);(0,r.useEffect)((()=>{o()}),[o]),function(t,e,i){void 0===i&&(i=w);const n=(0,T.zX)(e),o=(0,T.Ql)(i);(0,r.useEffect)((()=>{const e=new MutationObserver(n);return t&&e.observe(t,o),()=>e.disconnect()}),[t,n,o])}(i,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var B=i(14965);const F={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function A(t){let{line:e,classNames:i,showLineNumbers:r,getLineProps:n,getTokenProps:o}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=n({line:e,className:(0,s.Z)(i,r&&F.codeLine)}),l=e.map(((t,e)=>(0,b.jsx)("span",{...o({token:t,key:e})},e)));return(0,b.jsxs)("span",{...a,children:[r?(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:F.codeLineNumber}),(0,b.jsx)("span",{className:F.codeLineContent,children:l})]}):l,(0,b.jsx)("br",{})]})}var L=i(95999);function M(t){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,b.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function E(t){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,b.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const Z={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function N(t){let{code:e,className:i}=t;const[n,o]=(0,r.useState)(!1),a=(0,r.useRef)(void 0),l=(0,r.useCallback)((()=>{!function(t,e){let{target:i=document.body}=void 0===e?{}:e;if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const o=document.getSelection(),a=o.rangeCount>0&&o.getRangeAt(0);i.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let s=!1;try{s=document.execCommand("copy")}catch{}r.remove(),a&&(o.removeAllRanges(),o.addRange(a)),n&&n.focus()}(e),o(!0),a.current=window.setTimeout((()=>{o(!1)}),1e3)}),[e]);return(0,r.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,b.jsx)("button",{type:"button","aria-label":n?(0,L.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,L.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,L.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",i,Z.copyButton,n&&Z.copyButtonCopied),onClick:l,children:(0,b.jsxs)("span",{className:Z.copyButtonIcons,"aria-hidden":"true",children:[(0,b.jsx)(M,{className:Z.copyButtonIcon}),(0,b.jsx)(E,{className:Z.copyButtonSuccessIcon})]})})}function O(t){return(0,b.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,b.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const I={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function j(t){let{className:e,onClick:i,isEnabled:r}=t;const n=(0,L.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,b.jsx)("button",{type:"button",onClick:i,className:(0,s.Z)("clean-btn",e,r&&I.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,b.jsx)(O,{className:I.wordWrapButtonIcon,"aria-hidden":"true"})})}function q(t){let{children:e,className:i="",metastring:n,title:o,showLineNumbers:a,language:l}=t;const{prism:{defaultLanguage:u,magicComments:d}}=(0,c.L)(),f=function(t){return t?.toLowerCase()}(l??function(t){const e=t.split(" ").find((t=>t.startsWith("language-")));return e?.replace(/language-/,"")}(i)??u),g=h(),m=function(){const[t,e]=(0,r.useState)(!1),[i,n]=(0,r.useState)(!1),o=(0,r.useRef)(null),a=(0,r.useCallback)((()=>{const i=o.current.querySelector("code");t?i.removeAttribute("style"):(i.style.whiteSpace="pre-wrap",i.style.overflowWrap="anywhere"),e((t=>!t))}),[o,t]),s=(0,r.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=o.current,i=t>e||o.current.querySelector("code").hasAttribute("style");n(i)}),[o]);return S(o,s),(0,r.useEffect)((()=>{s()}),[t,s]),(0,r.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:o,isEnabled:t,isCodeScrollable:i,toggle:a}}(),y=function(t){return t?.match(p)?.groups.title??""}(n)||o,{lineClassNames:C,code:k}=x(e,{metastring:n,language:f,magicComments:d}),T=a??function(t){return Boolean(t?.includes("showLineNumbers"))}(n);return(0,b.jsxs)(_,{as:"div",className:(0,s.Z)(i,f&&!i.includes(`language-${f}`)&&`language-${f}`),children:[y&&(0,b.jsx)("div",{className:v.codeBlockTitle,children:y}),(0,b.jsxs)("div",{className:v.codeBlockContent,children:[(0,b.jsx)(B.y$,{theme:g,code:k,language:f??"text",children:t=>{let{className:e,style:i,tokens:r,getLineProps:n,getTokenProps:o}=t;return(0,b.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,v.codeBlock,"thin-scrollbar"),style:i,children:(0,b.jsx)("code",{className:(0,s.Z)(v.codeBlockLines,T&&v.codeBlockLinesWithNumbering),children:r.map(((t,e)=>(0,b.jsx)(A,{line:t,getLineProps:n,getTokenProps:o,classNames:C[e],showLineNumbers:T},e)))})})}}),(0,b.jsxs)("div",{className:v.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,b.jsx)(j,{className:v.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,b.jsx)(N,{className:v.codeButton,code:k})]})]})]})}function D(t){let{children:e,...i}=t;const n=(0,a.Z)(),o=function(t){return r.Children.toArray(t).some((t=>(0,r.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),s="string"==typeof o?q:k;return(0,b.jsx)(s,{...i,children:o},String(n))}var $=i(39960);var z=i(788),P=i(86043);const R={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function W(t){return!!t&&("SUMMARY"===t.tagName||W(t.parentElement))}function H(t,e){return!!t&&(t===e||H(t.parentElement,e))}function U(t){let{summary:e,children:i,...n}=t;const o=(0,a.Z)(),s=(0,r.useRef)(null),{collapsed:l,setCollapsed:c}=(0,P.u)({initialState:!n.open}),[h,u]=(0,r.useState)(n.open),d=r.isValidElement(e)?e:(0,b.jsx)("summary",{children:e??"Details"});return(0,b.jsxs)("details",{...n,ref:s,open:h,"data-collapsed":l,className:(0,z.Z)(R.details,o&&R.isBrowser,n.className),onMouseDown:t=>{W(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;W(e)&&H(e,s.current)&&(t.preventDefault(),l?(c(!1),u(!0)):c(!0))},children:[d,(0,b.jsx)(P.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{c(t),u(!t)},children:(0,b.jsx)("div",{className:R.collapsibleContent,children:i})})]})}const Y={details:"details_b_Ee"},V="alert alert--info";function G(t){let{...e}=t;return(0,b.jsx)(U,{...e,className:(0,s.Z)(V,Y.details,e.className)})}function X(t){const e=r.Children.toArray(t.children),i=e.find((t=>r.isValidElement(t)&&"summary"===t.type)),n=(0,b.jsx)(b.Fragment,{children:e.filter((t=>t!==i))});return(0,b.jsx)(G,{...t,summary:i,children:n})}var Q=i(92503);function J(t){return(0,b.jsx)(Q.Z,{...t})}const K={containsTaskList:"containsTaskList_mC6p"};function tt(t){if(void 0!==t)return(0,s.Z)(t,t?.includes("contains-task-list")&&K.containsTaskList)}const et={img:"img_ev3q"};var it=i(59047),rt=i(44763),nt=i(69690),ot=i(85322);const at="docusaurus-mermaid-container";function st(){const{colorMode:t}=(0,l.I)(),e=(0,c.L)().mermaid,i=e.theme[t],{options:n}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...n,theme:i})),[i,n])}function lt(t){let{text:e,config:i}=t;const[n,o]=(0,r.useState)(null),a=(0,r.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,s=st(),l=i??s;return(0,r.useEffect)((()=>{(async function(t){let{id:e,text:i,config:r}=t;ot.L.mermaidAPI.initialize(r);try{return await ot.L.render(e,i)}catch(n){throw document.querySelector(`#d${e}`)?.remove(),n}})({id:a,text:e,config:l}).then(o).catch((t=>{o((()=>{throw t}))}))}),[a,e,l]),n}const ct={container:"container_lyt7"};function ht(t){let{renderResult:e}=t;const i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{const t=i.current;e.bindFunctions?.(t)}),[e]),(0,b.jsx)("div",{ref:i,className:`${at} ${ct.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function ut(t){let{value:e}=t;const i=lt({text:e});return null===i?null:(0,b.jsx)(ht,{renderResult:i})}const dt={Head:o.Z,details:X,Details:X,code:function(t){return r.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")))?(0,b.jsx)("code",{...t}):(0,b.jsx)(D,{...t})},a:function(t){return(0,b.jsx)($.Z,{...t})},pre:function(t){return(0,b.jsx)(b.Fragment,{children:t.children})},ul:function(t){return(0,b.jsx)("ul",{...t,className:tt(t.className)})},img:function(t){return(0,b.jsx)("img",{loading:"lazy",...t,className:(e=t.className,(0,s.Z)(e,et.img))});var e},h1:t=>(0,b.jsx)(J,{as:"h1",...t}),h2:t=>(0,b.jsx)(J,{as:"h2",...t}),h3:t=>(0,b.jsx)(J,{as:"h3",...t}),h4:t=>(0,b.jsx)(J,{as:"h4",...t}),h5:t=>(0,b.jsx)(J,{as:"h5",...t}),h6:t=>(0,b.jsx)(J,{as:"h6",...t}),admonition:it.Z,mermaid:function(t){return(0,b.jsx)(rt.Z,{fallback:t=>(0,b.jsx)(nt.Ac,{...t}),children:(0,b.jsx)(ut,{...t})})}};function ft(t){let{children:e}=t;return(0,b.jsx)(n.Z,{components:dt,children:e})}},32244:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});i(67294);var r=i(36905),n=i(39960),o=i(85893);function a(t){const{permalink:e,title:i,subLabel:a,isNext:s}=t;return(0,o.jsxs)(n.Z,{className:(0,r.Z)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e,children:[a&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,o.jsx)("div",{className:"pagination-nav__label",children:i})]})}},13008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});i(67294);var r=i(36905),n=i(39960);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var a=i(85893);function s(t){let{permalink:e,label:i,count:s}=t;return(0,a.jsxs)(n.Z,{href:e,className:(0,r.Z)(o.tag,s?o.tagWithCount:o.tagRegular),children:[i,s&&(0,a.jsx)("span",{children:s})]})}},71526:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});i(67294);var r=i(36905),n=i(95999),o=i(13008);const a={tags:"tags_jXut",tag:"tag_QGVx"};var s=i(85893);function l(t){let{tags:e}=t;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("b",{children:(0,s.jsx)(n.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,s.jsx)("ul",{className:(0,r.Z)(a.tags,"padding--none","margin-left--sm"),children:e.map((t=>{let{label:e,permalink:i}=t;return(0,s.jsx)("li",{className:a.tag,children:(0,s.jsx)(o.Z,{label:e,permalink:i})},i)}))})]})}},27484:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,i=36e5,r="millisecond",n="second",o="minute",a="hour",s="day",l="week",c="month",h="quarter",u="year",d="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},y=function(t,e,i){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(i)+t},x={s:y,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),r=Math.floor(i/60),n=i%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(n,2,"0")},m:function t(e,i){if(e.date()<i.date())return-t(i,e);var r=12*(i.year()-e.year())+(i.month()-e.month()),n=e.clone().add(r,c),o=i-n<0,a=e.clone().add(r+(o?-1:1),c);return+(-(r+(i-n)/(o?n-a:a-n))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:u,w:l,d:s,D:d,h:a,m:o,s:n,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},C="en",b={};b[C]=m;var _="$isDayjsObject",v=function(t){return t instanceof S||!(!t||!t[_])},k=function t(e,i,r){var n;if(!e)return C;if("string"==typeof e){var o=e.toLowerCase();b[o]&&(n=o),i&&(b[o]=i,n=o);var a=e.split("-");if(!n&&a.length>1)return t(a[0])}else{var s=e.name;b[s]=e,n=s}return!r&&n&&(C=n),n||!r&&C},T=function(t,e){if(v(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new S(i)},w=x;w.l=k,w.i=v,w.w=function(t,e){return T(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var S=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[_]=!0}var y=m.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(w.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(p);if(r){var n=r[2]-1||0,o=(r[7]||"0").substring(0,3);return i?new Date(Date.UTC(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return w},y.isValid=function(){return!(this.$d.toString()===f)},y.isSame=function(t,e){var i=T(t);return this.startOf(e)<=i&&i<=this.endOf(e)},y.isAfter=function(t,e){return T(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<T(t)},y.$g=function(t,e,i){return w.u(t)?this[e]:this.set(i,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var i=this,r=!!w.u(e)||e,h=w.p(t),f=function(t,e){var n=w.w(i.$u?Date.UTC(i.$y,e,t):new Date(i.$y,e,t),i);return r?n:n.endOf(s)},p=function(t,e){return w.w(i.toDate()[t].apply(i.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),i)},g=this.$W,m=this.$M,y=this.$D,x="set"+(this.$u?"UTC":"");switch(h){case u:return r?f(1,0):f(31,11);case c:return r?f(1,m):f(0,m+1);case l:var C=this.$locale().weekStart||0,b=(g<C?g+7:g)-C;return f(r?y-b:y+(6-b),m);case s:case d:return p(x+"Hours",0);case a:return p(x+"Minutes",1);case o:return p(x+"Seconds",2);case n:return p(x+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var i,l=w.p(t),h="set"+(this.$u?"UTC":""),f=(i={},i[s]=h+"Date",i[d]=h+"Date",i[c]=h+"Month",i[u]=h+"FullYear",i[a]=h+"Hours",i[o]=h+"Minutes",i[n]=h+"Seconds",i[r]=h+"Milliseconds",i)[l],p=l===s?this.$D+(e-this.$W):e;if(l===c||l===u){var g=this.clone().set(d,1);g.$d[f](p),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](p);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[w.p(t)]()},y.add=function(r,h){var d,f=this;r=Number(r);var p=w.p(h),g=function(t){var e=T(f);return w.w(e.date(e.date()+Math.round(t*r)),f)};if(p===c)return this.set(c,this.$M+r);if(p===u)return this.set(u,this.$y+r);if(p===s)return g(1);if(p===l)return g(7);var m=(d={},d[o]=e,d[a]=i,d[n]=t,d)[p]||1,y=this.$d.getTime()+r*m;return w.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,i=this.$locale();if(!this.isValid())return i.invalidDate||f;var r=t||"YYYY-MM-DDTHH:mm:ssZ",n=w.z(this),o=this.$H,a=this.$m,s=this.$M,l=i.weekdays,c=i.months,h=i.meridiem,u=function(t,i,n,o){return t&&(t[i]||t(e,r))||n[i].slice(0,o)},d=function(t){return w.s(o%12||12,t,"0")},p=h||function(t,e,i){var r=t<12?"AM":"PM";return i?r.toLowerCase():r};return r.replace(g,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return w.s(e.$y,4,"0");case"M":return s+1;case"MM":return w.s(s+1,2,"0");case"MMM":return u(i.monthsShort,s,c,3);case"MMMM":return u(c,s);case"D":return e.$D;case"DD":return w.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(i.weekdaysMin,e.$W,l,2);case"ddd":return u(i.weekdaysShort,e.$W,l,3);case"dddd":return l[e.$W];case"H":return String(o);case"HH":return w.s(o,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return p(o,a,!0);case"A":return p(o,a,!1);case"m":return String(a);case"mm":return w.s(a,2,"0");case"s":return String(e.$s);case"ss":return w.s(e.$s,2,"0");case"SSS":return w.s(e.$ms,3,"0");case"Z":return n}return null}(t)||n.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,d,f){var p,g=this,m=w.p(d),y=T(r),x=(y.utcOffset()-this.utcOffset())*e,C=this-y,b=function(){return w.m(g,y)};switch(m){case u:p=b()/12;break;case c:p=b();break;case h:p=b()/3;break;case l:p=(C-x)/6048e5;break;case s:p=(C-x)/864e5;break;case a:p=C/i;break;case o:p=C/e;break;case n:p=C/t;break;default:p=C}return f?p:w.a(p)},y.daysInMonth=function(){return this.endOf(c).$D},y.$locale=function(){return b[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var i=this.clone(),r=k(t,e,!0);return r&&(i.$L=r),i},y.clone=function(){return w.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},m}(),B=S.prototype;return T.prototype=B,[["$ms",r],["$s",n],["$m",o],["$H",a],["$W",s],["$M",c],["$y",u],["$D",d]].forEach((function(t){B[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),T.extend=function(t,e){return t.$i||(t(e,S,T),t.$i=!0),T},T.locale=k,T.isDayjs=v,T.unix=function(t){return T(1e3*t)},T.en=b[C],T.Ls=b,T.p={},T}()},27856:function(t){t.exports=function(){"use strict";const{entries:t,setPrototypeOf:e,isFrozen:i,getPrototypeOf:r,getOwnPropertyDescriptor:n}=Object;let{freeze:o,seal:a,create:s}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(t){return t}),a||(a=function(t){return t}),l||(l=function(t,e,i){return t.apply(e,i)}),c||(c=function(t,e){return new t(...e)});const h=_(Array.prototype.forEach),u=_(Array.prototype.pop),d=_(Array.prototype.push),f=_(String.prototype.toLowerCase),p=_(String.prototype.toString),g=_(String.prototype.match),m=_(String.prototype.replace),y=_(String.prototype.indexOf),x=_(String.prototype.trim),C=_(RegExp.prototype.test),b=v(TypeError);function _(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return l(t,e,r)}}function v(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return c(t,i)}}function k(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f;e&&e(t,null);let o=r.length;for(;o--;){let e=r[o];if("string"==typeof e){const t=n(e);t!==e&&(i(r)||(r[o]=t),e=t)}t[e]=!0}return t}function T(e){const i=s(null);for(const[r,o]of t(e))void 0!==n(e,r)&&(i[r]=o);return i}function w(t,e){for(;null!==t;){const i=n(t,e);if(i){if(i.get)return _(i.get);if("function"==typeof i.value)return _(i.value)}t=r(t)}function i(t){return console.warn("fallback value for",t),null}return i}const S=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),B=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),F=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),A=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),L=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),M=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),E=o(["#text"]),Z=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),N=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),O=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),I=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),j=a(/\{\{[\w\W]*|[\w\W]*\}\}/gm),q=a(/<%[\w\W]*|[\w\W]*%>/gm),D=a(/\${[\w\W]*}/gm),$=a(/^data-[\-\w.\u00B7-\uFFFF]/),z=a(/^aria-[\-\w]+$/),P=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),R=a(/^(?:\w+script|data):/i),W=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),H=a(/^html$/i);var U=Object.freeze({__proto__:null,MUSTACHE_EXPR:j,ERB_EXPR:q,TMPLIT_EXPR:D,DATA_ATTR:$,ARIA_ATTR:z,IS_ALLOWED_URI:P,IS_SCRIPT_OR_DATA:R,ATTR_WHITESPACE:W,DOCTYPE_NAME:H});const Y=function(){return"undefined"==typeof window?null:window},V=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let i=null;const r="data-tt-policy-suffix";e&&e.hasAttribute(r)&&(i=e.getAttribute(r));const n="dompurify"+(i?"#"+i:"");try{return t.createPolicy(n,{createHTML:t=>t,createScriptURL:t=>t})}catch(o){return console.warn("TrustedTypes policy "+n+" could not be created."),null}};function G(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Y();const i=t=>G(t);if(i.version="3.0.6",i.removed=[],!e||!e.document||9!==e.document.nodeType)return i.isSupported=!1,i;let{document:r}=e;const n=r,a=n.currentScript,{DocumentFragment:l,HTMLTemplateElement:c,Node:_,Element:v,NodeFilter:j,NamedNodeMap:q=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:D,DOMParser:$,trustedTypes:z}=e,R=v.prototype,W=w(R,"cloneNode"),X=w(R,"nextSibling"),Q=w(R,"childNodes"),J=w(R,"parentNode");if("function"==typeof c){const t=r.createElement("template");t.content&&t.content.ownerDocument&&(r=t.content.ownerDocument)}let K,tt="";const{implementation:et,createNodeIterator:it,createDocumentFragment:rt,getElementsByTagName:nt}=r,{importNode:ot}=n;let at={};i.isSupported="function"==typeof t&&"function"==typeof J&&et&&void 0!==et.createHTMLDocument;const{MUSTACHE_EXPR:st,ERB_EXPR:lt,TMPLIT_EXPR:ct,DATA_ATTR:ht,ARIA_ATTR:ut,IS_SCRIPT_OR_DATA:dt,ATTR_WHITESPACE:ft}=U;let{IS_ALLOWED_URI:pt}=U,gt=null;const mt=k({},[...S,...B,...F,...L,...E]);let yt=null;const xt=k({},[...Z,...N,...O,...I]);let Ct=Object.seal(s(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),bt=null,_t=null,vt=!0,kt=!0,Tt=!1,wt=!0,St=!1,Bt=!1,Ft=!1,At=!1,Lt=!1,Mt=!1,Et=!1,Zt=!0,Nt=!1;const Ot="user-content-";let It=!0,jt=!1,qt={},Dt=null;const $t=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let zt=null;const Pt=k({},["audio","video","img","source","image","track"]);let Rt=null;const Wt=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ht="http://www.w3.org/1998/Math/MathML",Ut="http://www.w3.org/2000/svg",Yt="http://www.w3.org/1999/xhtml";let Vt=Yt,Gt=!1,Xt=null;const Qt=k({},[Ht,Ut,Yt],p);let Jt=null;const Kt=["application/xhtml+xml","text/html"],te="text/html";let ee=null,ie=null;const re=r.createElement("form"),ne=function(t){return t instanceof RegExp||t instanceof Function},oe=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ie||ie!==t){if(t&&"object"==typeof t||(t={}),t=T(t),Jt=Jt=-1===Kt.indexOf(t.PARSER_MEDIA_TYPE)?te:t.PARSER_MEDIA_TYPE,ee="application/xhtml+xml"===Jt?p:f,gt="ALLOWED_TAGS"in t?k({},t.ALLOWED_TAGS,ee):mt,yt="ALLOWED_ATTR"in t?k({},t.ALLOWED_ATTR,ee):xt,Xt="ALLOWED_NAMESPACES"in t?k({},t.ALLOWED_NAMESPACES,p):Qt,Rt="ADD_URI_SAFE_ATTR"in t?k(T(Wt),t.ADD_URI_SAFE_ATTR,ee):Wt,zt="ADD_DATA_URI_TAGS"in t?k(T(Pt),t.ADD_DATA_URI_TAGS,ee):Pt,Dt="FORBID_CONTENTS"in t?k({},t.FORBID_CONTENTS,ee):$t,bt="FORBID_TAGS"in t?k({},t.FORBID_TAGS,ee):{},_t="FORBID_ATTR"in t?k({},t.FORBID_ATTR,ee):{},qt="USE_PROFILES"in t&&t.USE_PROFILES,vt=!1!==t.ALLOW_ARIA_ATTR,kt=!1!==t.ALLOW_DATA_ATTR,Tt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,wt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,St=t.SAFE_FOR_TEMPLATES||!1,Bt=t.WHOLE_DOCUMENT||!1,Lt=t.RETURN_DOM||!1,Mt=t.RETURN_DOM_FRAGMENT||!1,Et=t.RETURN_TRUSTED_TYPE||!1,At=t.FORCE_BODY||!1,Zt=!1!==t.SANITIZE_DOM,Nt=t.SANITIZE_NAMED_PROPS||!1,It=!1!==t.KEEP_CONTENT,jt=t.IN_PLACE||!1,pt=t.ALLOWED_URI_REGEXP||P,Vt=t.NAMESPACE||Yt,Ct=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ct.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ct.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Ct.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),St&&(kt=!1),Mt&&(Lt=!0),qt&&(gt=k({},[...E]),yt=[],!0===qt.html&&(k(gt,S),k(yt,Z)),!0===qt.svg&&(k(gt,B),k(yt,N),k(yt,I)),!0===qt.svgFilters&&(k(gt,F),k(yt,N),k(yt,I)),!0===qt.mathMl&&(k(gt,L),k(yt,O),k(yt,I))),t.ADD_TAGS&&(gt===mt&&(gt=T(gt)),k(gt,t.ADD_TAGS,ee)),t.ADD_ATTR&&(yt===xt&&(yt=T(yt)),k(yt,t.ADD_ATTR,ee)),t.ADD_URI_SAFE_ATTR&&k(Rt,t.ADD_URI_SAFE_ATTR,ee),t.FORBID_CONTENTS&&(Dt===$t&&(Dt=T(Dt)),k(Dt,t.FORBID_CONTENTS,ee)),It&&(gt["#text"]=!0),Bt&&k(gt,["html","head","body"]),gt.table&&(k(gt,["tbody"]),delete bt.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');K=t.TRUSTED_TYPES_POLICY,tt=K.createHTML("")}else void 0===K&&(K=V(z,a)),null!==K&&"string"==typeof tt&&(tt=K.createHTML(""));o&&o(t),ie=t}},ae=k({},["mi","mo","mn","ms","mtext"]),se=k({},["foreignobject","desc","title","annotation-xml"]),le=k({},["title","style","font","a","script"]),ce=k({},B);k(ce,F),k(ce,A);const he=k({},L);k(he,M);const ue=function(t){let e=J(t);e&&e.tagName||(e={namespaceURI:Vt,tagName:"template"});const i=f(t.tagName),r=f(e.tagName);return!!Xt[t.namespaceURI]&&(t.namespaceURI===Ut?e.namespaceURI===Yt?"svg"===i:e.namespaceURI===Ht?"svg"===i&&("annotation-xml"===r||ae[r]):Boolean(ce[i]):t.namespaceURI===Ht?e.namespaceURI===Yt?"math"===i:e.namespaceURI===Ut?"math"===i&&se[r]:Boolean(he[i]):t.namespaceURI===Yt?!(e.namespaceURI===Ut&&!se[r])&&!(e.namespaceURI===Ht&&!ae[r])&&!he[i]&&(le[i]||!ce[i]):!("application/xhtml+xml"!==Jt||!Xt[t.namespaceURI]))},de=function(t){d(i.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){t.remove()}},fe=function(t,e){try{d(i.removed,{attribute:e.getAttributeNode(t),from:e})}catch(r){d(i.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!yt[t])if(Lt||Mt)try{de(e)}catch(r){}else try{e.setAttribute(t,"")}catch(r){}},pe=function(t){let e=null,i=null;if(At)t="<remove></remove>"+t;else{const e=g(t,/^[\r\n\t ]+/);i=e&&e[0]}"application/xhtml+xml"===Jt&&Vt===Yt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");const n=K?K.createHTML(t):t;if(Vt===Yt)try{e=(new $).parseFromString(n,Jt)}catch(a){}if(!e||!e.documentElement){e=et.createDocument(Vt,"template",null);try{e.documentElement.innerHTML=Gt?tt:n}catch(a){}}const o=e.body||e.documentElement;return t&&i&&o.insertBefore(r.createTextNode(i),o.childNodes[0]||null),Vt===Yt?nt.call(e,Bt?"html":"body")[0]:Bt?e.documentElement:o},ge=function(t){return it.call(t.ownerDocument||t,t,j.SHOW_ELEMENT|j.SHOW_COMMENT|j.SHOW_TEXT,null)},me=function(t){return t instanceof D&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof q)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},ye=function(t){return"function"==typeof _&&t instanceof _},xe=function(t,e,r){at[t]&&h(at[t],(t=>{t.call(i,e,r,ie)}))},Ce=function(t){let e=null;if(xe("beforeSanitizeElements",t,null),me(t))return de(t),!0;const r=ee(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:r,allowedTags:gt}),t.hasChildNodes()&&!ye(t.firstElementChild)&&C(/<[/\w]/g,t.innerHTML)&&C(/<[/\w]/g,t.textContent))return de(t),!0;if(!gt[r]||bt[r]){if(!bt[r]&&_e(r)){if(Ct.tagNameCheck instanceof RegExp&&C(Ct.tagNameCheck,r))return!1;if(Ct.tagNameCheck instanceof Function&&Ct.tagNameCheck(r))return!1}if(It&&!Dt[r]){const e=J(t)||t.parentNode,i=Q(t)||t.childNodes;if(i&&e)for(let r=i.length-1;r>=0;--r)e.insertBefore(W(i[r],!0),X(t))}return de(t),!0}return t instanceof v&&!ue(t)?(de(t),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!C(/<\/no(script|embed|frames)/i,t.innerHTML)?(St&&3===t.nodeType&&(e=t.textContent,h([st,lt,ct],(t=>{e=m(e,t," ")})),t.textContent!==e&&(d(i.removed,{element:t.cloneNode()}),t.textContent=e)),xe("afterSanitizeElements",t,null),!1):(de(t),!0)},be=function(t,e,i){if(Zt&&("id"===e||"name"===e)&&(i in r||i in re))return!1;if(kt&&!_t[e]&&C(ht,e));else if(vt&&C(ut,e));else if(!yt[e]||_t[e]){if(!(_e(t)&&(Ct.tagNameCheck instanceof RegExp&&C(Ct.tagNameCheck,t)||Ct.tagNameCheck instanceof Function&&Ct.tagNameCheck(t))&&(Ct.attributeNameCheck instanceof RegExp&&C(Ct.attributeNameCheck,e)||Ct.attributeNameCheck instanceof Function&&Ct.attributeNameCheck(e))||"is"===e&&Ct.allowCustomizedBuiltInElements&&(Ct.tagNameCheck instanceof RegExp&&C(Ct.tagNameCheck,i)||Ct.tagNameCheck instanceof Function&&Ct.tagNameCheck(i))))return!1}else if(Rt[e]);else if(C(pt,m(i,ft,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==y(i,"data:")||!zt[t])if(Tt&&!C(dt,m(i,ft,"")));else if(i)return!1;return!0},_e=function(t){return t.indexOf("-")>0},ve=function(t){xe("beforeSanitizeAttributes",t,null);const{attributes:e}=t;if(!e)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:yt};let n=e.length;for(;n--;){const a=e[n],{name:s,namespaceURI:l,value:c}=a,d=ee(s);let f="value"===s?c:x(c);if(r.attrName=d,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,xe("uponSanitizeAttribute",t,r),f=r.attrValue,r.forceKeepAttr)continue;if(fe(s,t),!r.keepAttr)continue;if(!wt&&C(/\/>/i,f)){fe(s,t);continue}St&&h([st,lt,ct],(t=>{f=m(f,t," ")}));const p=ee(t.nodeName);if(be(p,d,f)){if(!Nt||"id"!==d&&"name"!==d||(fe(s,t),f=Ot+f),K&&"object"==typeof z&&"function"==typeof z.getAttributeType)if(l);else switch(z.getAttributeType(p,d)){case"TrustedHTML":f=K.createHTML(f);break;case"TrustedScriptURL":f=K.createScriptURL(f)}try{l?t.setAttributeNS(l,s,f):t.setAttribute(s,f),u(i.removed)}catch(o){}}}xe("afterSanitizeAttributes",t,null)},ke=function t(e){let i=null;const r=ge(e);for(xe("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)xe("uponSanitizeShadowNode",i,null),Ce(i)||(i.content instanceof l&&t(i.content),ve(i));xe("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(Gt=!t,Gt&&(t="\x3c!--\x3e"),"string"!=typeof t&&!ye(t)){if("function"!=typeof t.toString)throw b("toString is not a function");if("string"!=typeof(t=t.toString()))throw b("dirty is not a string, aborting")}if(!i.isSupported)return t;if(Ft||oe(e),i.removed=[],"string"==typeof t&&(jt=!1),jt){if(t.nodeName){const e=ee(t.nodeName);if(!gt[e]||bt[e])throw b("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof _)r=pe("\x3c!----\x3e"),o=r.ownerDocument.importNode(t,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!Lt&&!St&&!Bt&&-1===t.indexOf("<"))return K&&Et?K.createHTML(t):t;if(r=pe(t),!r)return Lt?null:Et?tt:""}r&&At&&de(r.firstChild);const c=ge(jt?t:r);for(;a=c.nextNode();)Ce(a)||(a.content instanceof l&&ke(a.content),ve(a));if(jt)return t;if(Lt){if(Mt)for(s=rt.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(yt.shadowroot||yt.shadowrootmode)&&(s=ot.call(n,s,!0)),s}let u=Bt?r.outerHTML:r.innerHTML;return Bt&>["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&C(H,r.ownerDocument.doctype.name)&&(u="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+u),St&&h([st,lt,ct],(t=>{u=m(u,t," ")})),K&&Et?K.createHTML(u):u},i.setConfig=function(){oe(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},i.clearConfig=function(){ie=null,Ft=!1},i.isValidAttribute=function(t,e,i){ie||oe({});const r=ee(t),n=ee(e);return be(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(at[t]=at[t]||[],d(at[t],e))},i.removeHook=function(t){if(at[t])return u(at[t])},i.removeHooks=function(t){at[t]&&(at[t]=[])},i.removeAllHooks=function(){at={}},i}return G()}()},87594:(t,e)=>{function i(t){let e,i=[];for(let r of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(r))i.push(parseInt(r,10));else if(e=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,r,n,o]=e;if(r&&o){r=parseInt(r),o=parseInt(o);const t=r<o?1:-1;"-"!==n&&".."!==n&&"\u2025"!==n||(o+=t);for(let e=r;e!==o;e+=t)i.push(e)}}return i}e.default=i,t.exports=i},18464:(t,e,i)=>{"use strict";function r(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var n=r.reduce((function(t,e){var i=e.match(/\n([\t ]+|(?!\s).)/g);return i?t.concat(i.map((function(t){var e,i;return null!==(i=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==i?i:0}))):t}),[]);if(n.length){var o=new RegExp("\n[\t ]{"+Math.min.apply(Math,n)+"}","g");r=r.map((function(t){return t.replace(o,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var a=r[0];return e.forEach((function(t,e){var i=a.match(/(?:^|\n)( *)$/),n=i?i[1]:"",o=t;"string"==typeof t&&t.includes("\n")&&(o=String(t).split("\n").map((function(t,e){return 0===e?t:""+n+t})).join("\n")),a+=o+r[e+1]})),a}i.d(e,{Z:()=>r})},11151:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s,a:()=>a});var r=i(67294);const n={},o=r.createContext(n);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),r.createElement(o.Provider,{value:e},t.children)}},64218:(t,e,i)=>{"use strict";function r(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i<r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i<n||void 0===i&&n>=n)&&(i=n)}return i}function n(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i>r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i>n||void 0===i&&n>=n)&&(i=n)}return i}function o(t){return t}i.d(e,{Nb1:()=>cs,LLu:()=>x,F5q:()=>y,$0Z:()=>vs,Dts:()=>Ts,WQY:()=>Ss,qpX:()=>Fs,u93:()=>As,tFB:()=>Ms,YY7:()=>Ns,OvA:()=>Is,dCK:()=>qs,zgE:()=>zs,fGX:()=>Rs,$m7:()=>Hs,c_6:()=>ds,fxm:()=>Ys,FdL:()=>el,ak_:()=>il,SxZ:()=>ol,eA_:()=>sl,jsv:()=>cl,iJ:()=>ll,JHv:()=>pr,jvg:()=>gs,Fp7:()=>r,VV$:()=>n,ve8:()=>xs,tiA:()=>kr,BYU:()=>mn,PKp:()=>vr,Xf:()=>Za,K2I:()=>Na,Ys:()=>Oa,td_:()=>Ia,YPS:()=>Yi,rr1:()=>Zn,i$Z:()=>uo,y2j:()=>Pn,WQD:()=>Mn,U8T:()=>Bn,Z_i:()=>An,Ox9:()=>qn,F0B:()=>Jn,LqH:()=>Rn,S1K:()=>Fn,Zyz:()=>jn,Igq:()=>zn,YDX:()=>Dn,EFj:()=>$n});var a=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function f(t){return e=>+t(e)}function p(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),i=>+t(i)+e}function g(){return!this.__axis}function m(t,e){var i=[],r=null,n=null,m=6,y=6,x=3,C="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,b=t===a||t===c?-1:1,_=t===c||t===s?"x":"y",v=t===a||t===l?u:d;function k(u){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,k=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,T=Math.max(m,0)+x,w=e.range(),S=+w[0]+C,B=+w[w.length-1]+C,F=(e.bandwidth?p:f)(e.copy(),C),A=u.selection?u.selection():u,L=A.selectAll(".domain").data([null]),M=A.selectAll(".tick").data(d,e).order(),E=M.exit(),Z=M.enter().append("g").attr("class","tick"),N=M.select("line"),O=M.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),M=M.merge(Z),N=N.merge(Z.append("line").attr("stroke","currentColor").attr(_+"2",b*m)),O=O.merge(Z.append("text").attr("fill","currentColor").attr(_,b*T).attr("dy",t===a?"0em":t===l?"0.71em":"0.32em")),u!==A&&(L=L.transition(u),M=M.transition(u),N=N.transition(u),O=O.transition(u),E=E.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=F(t))?v(t+C):this.getAttribute("transform")})),Z.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:F(t))+C)}))),E.remove(),L.attr("d",t===c||t===s?y?"M"+b*y+","+S+"H"+C+"V"+B+"H"+b*y:"M"+C+","+S+"V"+B:y?"M"+S+","+b*y+"V"+C+"H"+B+"V"+b*y:"M"+S+","+C+"H"+B),M.attr("opacity",1).attr("transform",(function(t){return v(F(t)+C)})),N.attr(_+"2",b*m),O.attr(_,b*T).text(k),A.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===c?"end":"middle"),A.each((function(){this.__axis=F}))}return k.scale=function(t){return arguments.length?(e=t,k):e},k.ticks=function(){return i=Array.from(arguments),k},k.tickArguments=function(t){return arguments.length?(i=null==t?[]:Array.from(t),k):i.slice()},k.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),k):r&&r.slice()},k.tickFormat=function(t){return arguments.length?(n=t,k):n},k.tickSize=function(t){return arguments.length?(m=y=+t,k):m},k.tickSizeInner=function(t){return arguments.length?(m=+t,k):m},k.tickSizeOuter=function(t){return arguments.length?(y=+t,k):y},k.tickPadding=function(t){return arguments.length?(x=+t,k):x},k.offset=function(t){return arguments.length?(C=+t,k):C},k}function y(t){return m(a,t)}function x(t){return m(l,t)}function C(){}function b(t){return null==t?C:function(){return this.querySelector(t)}}function _(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function v(){return[]}function k(t){return null==t?v:function(){return this.querySelectorAll(t)}}function T(t){return function(){return this.matches(t)}}function w(t){return function(e){return e.matches(t)}}var S=Array.prototype.find;function B(){return this.firstElementChild}var F=Array.prototype.filter;function A(){return Array.from(this.children)}function L(t){return new Array(t.length)}function M(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function E(t,e,i,r,n,o){for(var a,s=0,l=e.length,c=o.length;s<c;++s)(a=e[s])?(a.__data__=o[s],r[s]=a):i[s]=new M(t,o[s]);for(;s<l;++s)(a=e[s])&&(n[s]=a)}function Z(t,e,i,r,n,o,a){var s,l,c,h=new Map,u=e.length,d=o.length,f=new Array(u);for(s=0;s<u;++s)(l=e[s])&&(f[s]=c=a.call(l,l.__data__,s,e)+"",h.has(c)?n[s]=l:h.set(c,l));for(s=0;s<d;++s)c=a.call(t,o[s],s,o)+"",(l=h.get(c))?(r[s]=l,l.__data__=o[s],h.delete(c)):i[s]=new M(t,o[s]);for(s=0;s<u;++s)(l=e[s])&&h.get(f[s])===l&&(n[s]=l)}function N(t){return t.__data__}function O(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function I(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}M.prototype={constructor:M,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var j="http://www.w3.org/1999/xhtml";const q={svg:"http://www.w3.org/2000/svg",xhtml:j,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function D(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),q.hasOwnProperty(e)?{space:q[e],local:t}:t}function $(t){return function(){this.removeAttribute(t)}}function z(t){return function(){this.removeAttributeNS(t.space,t.local)}}function P(t,e){return function(){this.setAttribute(t,e)}}function R(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function W(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttribute(t):this.setAttribute(t,i)}}function H(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,i)}}function U(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Y(t){return function(){this.style.removeProperty(t)}}function V(t,e,i){return function(){this.style.setProperty(t,e,i)}}function G(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function X(t,e){return t.style.getPropertyValue(e)||U(t).getComputedStyle(t,null).getPropertyValue(e)}function Q(t){return function(){delete this[t]}}function J(t,e){return function(){this[t]=e}}function K(t,e){return function(){var i=e.apply(this,arguments);null==i?delete this[t]:this[t]=i}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new it(t)}function it(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function rt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.add(e[r])}function nt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.remove(e[r])}function ot(t){return function(){rt(this,t)}}function at(t){return function(){nt(this,t)}}function st(t,e){return function(){(e.apply(this,arguments)?rt:nt)(this,t)}}function lt(){this.textContent=""}function ct(t){return function(){this.textContent=t}}function ht(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function dt(t){return function(){this.innerHTML=t}}function ft(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function pt(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mt(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===j&&e.documentElement.namespaceURI===j?e.createElement(t):e.createElementNS(i,t)}}function yt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function xt(t){var e=D(t);return(e.local?yt:mt)(e)}function Ct(){return null}function bt(){var t=this.parentNode;t&&t.removeChild(this)}function _t(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function vt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(t){return function(){var e=this.__on;if(e){for(var i,r=0,n=-1,o=e.length;r<o;++r)i=e[r],t.type&&i.type!==t.type||i.name!==t.name?e[++n]=i:this.removeEventListener(i.type,i.listener,i.options);++n?e.length=n:delete this.__on}}}function Tt(t,e,i){return function(){var r,n=this.__on,o=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(n)for(var a=0,s=n.length;a<s;++a)if((r=n[a]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=i),void(r.value=e);this.addEventListener(t.type,o,i),r={type:t.type,name:t.name,value:e,listener:o,options:i},n?n.push(r):this.__on=[r]}}function wt(t,e,i){var r=U(t),n=r.CustomEvent;"function"==typeof n?n=new n(e,i):(n=r.document.createEvent("Event"),i?(n.initEvent(e,i.bubbles,i.cancelable),n.detail=i.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function St(t,e){return function(){return wt(this,t,e)}}function Bt(t,e){return function(){return wt(this,t,e.apply(this,arguments))}}it.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Ft=[null];function At(t,e){this._groups=t,this._parents=e}function Lt(){return new At([[document.documentElement]],Ft)}At.prototype=Lt.prototype={constructor:At,select:function(t){"function"!=typeof t&&(t=b(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a,s=e[n],l=s.length,c=r[n]=new Array(l),h=0;h<l;++h)(o=s[h])&&(a=t.call(o,o.__data__,h,s))&&("__data__"in o&&(a.__data__=o.__data__),c[h]=a);return new At(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return _(t.apply(this,arguments))}}(t):k(t);for(var e=this._groups,i=e.length,r=[],n=[],o=0;o<i;++o)for(var a,s=e[o],l=s.length,c=0;c<l;++c)(a=s[c])&&(r.push(t.call(a,a.__data__,c,s)),n.push(a));return new At(r,n)},selectChild:function(t){return this.select(null==t?B:function(t){return function(){return S.call(this.children,t)}}("function"==typeof t?t:w(t)))},selectChildren:function(t){return this.selectAll(null==t?A:function(t){return function(){return F.call(this.children,t)}}("function"==typeof t?t:w(t)))},filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new At(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,N);var i,r=e?Z:E,n=this._parents,o=this._groups;"function"!=typeof t&&(i=t,t=function(){return i});for(var a=o.length,s=new Array(a),l=new Array(a),c=new Array(a),h=0;h<a;++h){var u=n[h],d=o[h],f=d.length,p=O(t.call(u,u&&u.__data__,h,n)),g=p.length,m=l[h]=new Array(g),y=s[h]=new Array(g);r(u,d,m,y,c[h]=new Array(f),p,e);for(var x,C,b=0,_=0;b<g;++b)if(x=m[b]){for(b>=_&&(_=b+1);!(C=y[_])&&++_<g;);x._next=C||null}}return(s=new At(s,n))._enter=l,s._exit=c,s},enter:function(){return new At(this._enter||this._groups.map(L),this._parents)},exit:function(){return new At(this._exit||this._groups.map(L),this._parents)},join:function(t,e,i){var r=this.enter(),n=this,o=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(n=e(n))&&(n=n.selection()),null==i?o.remove():i(o),r&&n?r.merge(n).order():n},merge:function(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,a=Math.min(n,o),s=new Array(n),l=0;l<a;++l)for(var c,h=i[l],u=r[l],d=h.length,f=s[l]=new Array(d),p=0;p<d;++p)(c=h[p]||u[p])&&(f[p]=c);for(;l<n;++l)s[l]=i[l];return new At(s,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,i=t.length;++e<i;)for(var r,n=t[e],o=n.length-1,a=n[o];--o>=0;)(r=n[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function e(e,i){return e&&i?t(e.__data__,i.__data__):!e-!i}t||(t=I);for(var i=this._groups,r=i.length,n=new Array(r),o=0;o<r;++o){for(var a,s=i[o],l=s.length,c=n[o]=new Array(l),h=0;h<l;++h)(a=s[h])&&(c[h]=a);c.sort(e)}return new At(n,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r=t[e],n=0,o=r.length;n<o;++n){var a=r[n];if(a)return a}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,i=0,r=e.length;i<r;++i)for(var n,o=e[i],a=0,s=o.length;a<s;++a)(n=o[a])&&t.call(n,n.__data__,a,o);return this},attr:function(t,e){var i=D(t);if(arguments.length<2){var r=this.node();return i.local?r.getAttributeNS(i.space,i.local):r.getAttribute(i)}return this.each((null==e?i.local?z:$:"function"==typeof e?i.local?H:W:i.local?R:P)(i,e))},style:function(t,e,i){return arguments.length>1?this.each((null==e?Y:"function"==typeof e?G:V)(t,e,null==i?"":i)):X(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Q:"function"==typeof e?K:J)(t,e)):this.node()[t]},classed:function(t,e){var i=tt(t+"");if(arguments.length<2){for(var r=et(this.node()),n=-1,o=i.length;++n<o;)if(!r.contains(i[n]))return!1;return!0}return this.each(("function"==typeof e?st:e?ot:at)(i,e))},text:function(t){return arguments.length?this.each(null==t?lt:("function"==typeof t?ht:ct)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?ft:dt)(t)):this.node().innerHTML},raise:function(){return this.each(pt)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:xt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var i="function"==typeof t?t:xt(t),r=null==e?Ct:"function"==typeof e?e:b(e);return this.select((function(){return this.insertBefore(i.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(bt)},clone:function(t){return this.select(t?vt:_t)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,i){var r,n,o=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");return i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),{type:t,name:e}}))}(t+""),a=o.length;if(!(arguments.length<2)){for(s=e?Tt:kt,r=0;r<a;++r)this.each(s(o[r],e,i));return this}var s=this.node().__on;if(s)for(var l,c=0,h=s.length;c<h;++c)for(r=0,l=s[c];r<a;++r)if((n=o[r]).type===l.type&&n.name===l.name)return l.value},dispatch:function(t,e){return this.each(("function"==typeof e?Bt:St)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r,n=t[e],o=0,a=n.length;o<a;++o)(r=n[o])&&(yield r)}};const Mt=Lt;var Et={value:()=>{}};function Zt(){for(var t,e=0,i=arguments.length,r={};e<i;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Nt(r)}function Nt(t){this._=t}function Ot(t,e){for(var i,r=0,n=t.length;r<n;++r)if((i=t[r]).name===e)return i.value}function It(t,e,i){for(var r=0,n=t.length;r<n;++r)if(t[r].name===e){t[r]=Et,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=i&&t.push({name:e,value:i}),t}Nt.prototype=Zt.prototype={constructor:Nt,on:function(t,e){var i,r,n=this._,o=(r=n,(t+"").trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");if(i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,s=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=o[a]).type)n[i]=It(n[i],t.name,e);else if(null==e)for(i in n)n[i]=It(n[i],t.name,null);return this}for(;++a<s;)if((i=(t=o[a]).type)&&(i=Ot(n[i],t.name)))return i},copy:function(){var t={},e=this._;for(var i in e)t[i]=e[i].slice();return new Nt(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var i,r,n=new Array(i),o=0;o<i;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,i=(r=this._[t]).length;o<i;++o)r[o].value.apply(e,n)},apply:function(t,e,i){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],n=0,o=r.length;n<o;++n)r[n].value.apply(e,i)}};const jt=Zt;var qt,Dt,$t=0,zt=0,Pt=0,Rt=1e3,Wt=0,Ht=0,Ut=0,Yt="object"==typeof performance&&performance.now?performance:Date,Vt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gt(){return Ht||(Vt(Xt),Ht=Yt.now()+Ut)}function Xt(){Ht=0}function Qt(){this._call=this._time=this._next=null}function Jt(t,e,i){var r=new Qt;return r.restart(t,e,i),r}function Kt(){Ht=(Wt=Yt.now())+Ut,$t=zt=0;try{!function(){Gt(),++$t;for(var t,e=qt;e;)(t=Ht-e._time)>=0&&e._call.call(void 0,t),e=e._next;--$t}()}finally{$t=0,function(){var t,e,i=qt,r=1/0;for(;i;)i._call?(r>i._time&&(r=i._time),t=i,i=i._next):(e=i._next,i._next=null,i=t?t._next=e:qt=e);Dt=t,ee(r)}(),Ht=0}}function te(){var t=Yt.now(),e=t-Wt;e>Rt&&(Ut-=e,Wt=t)}function ee(t){$t||(zt&&(zt=clearTimeout(zt)),t-Ht>24?(t<1/0&&(zt=setTimeout(Kt,t-Yt.now()-Ut)),Pt&&(Pt=clearInterval(Pt))):(Pt||(Wt=Yt.now(),Pt=setInterval(te,Rt)),$t=1,Vt(Kt)))}function ie(t,e,i){var r=new Qt;return e=null==e?0:+e,r.restart((i=>{r.stop(),t(i+e)}),e,i),r}Qt.prototype=Jt.prototype={constructor:Qt,restart:function(t,e,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?Gt():+i)+(null==e?0:+e),this._next||Dt===this||(Dt?Dt._next=this:qt=this,Dt=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=jt("start","end","cancel","interrupt"),ne=[],oe=0,ae=1,se=2,le=3,ce=4,he=5,ue=6;function de(t,e,i,r,n,o){var a=t.__transition;if(a){if(i in a)return}else t.__transition={};!function(t,e,i){var r,n=t.__transition;function o(t){i.state=ae,i.timer.restart(a,i.delay,i.time),i.delay<=t&&a(t-i.delay)}function a(o){var c,h,u,d;if(i.state!==ae)return l();for(c in n)if((d=n[c]).name===i.name){if(d.state===le)return ie(a);d.state===ce?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete n[c]):+c<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete n[c])}if(ie((function(){i.state===le&&(i.state=ce,i.timer.restart(s,i.delay,i.time),s(o))})),i.state=se,i.on.call("start",t,t.__data__,i.index,i.group),i.state===se){for(i.state=le,r=new Array(u=i.tween.length),c=0,h=-1;c<u;++c)(d=i.tween[c].value.call(t,t.__data__,i.index,i.group))&&(r[++h]=d);r.length=h+1}}function s(e){for(var n=e<i.duration?i.ease.call(null,e/i.duration):(i.timer.restart(l),i.state=he,1),o=-1,a=r.length;++o<a;)r[o].call(t,n);i.state===he&&(i.on.call("end",t,t.__data__,i.index,i.group),l())}function l(){for(var r in i.state=ue,i.timer.stop(),delete n[e],n)return;delete t.__transition}n[e]=i,i.timer=Jt(o,0,i.time)}(t,i,{name:e,index:r,group:n,on:re,tween:ne,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:oe})}function fe(t,e){var i=ge(t,e);if(i.state>oe)throw new Error("too late; already scheduled");return i}function pe(t,e){var i=ge(t,e);if(i.state>le)throw new Error("too late; already running");return i}function ge(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function me(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var ye,xe=180/Math.PI,Ce={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function be(t,e,i,r,n,o){var a,s,l;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(l=t*i+e*r)&&(i-=t*l,r-=e*l),(s=Math.sqrt(i*i+r*r))&&(i/=s,r/=s,l/=s),t*r<e*i&&(t=-t,e=-e,l=-l,a=-a),{translateX:n,translateY:o,rotate:Math.atan2(e,t)*xe,skewX:Math.atan(l)*xe,scaleX:a,scaleY:s}}function _e(t,e,i,r){function n(t){return t.length?t.pop()+" ":""}return function(o,a){var s=[],l=[];return o=t(o),a=t(a),function(t,r,n,o,a,s){if(t!==n||r!==o){var l=a.push("translate(",null,e,null,i);s.push({i:l-4,x:me(t,n)},{i:l-2,x:me(r,o)})}else(n||o)&&a.push("translate("+n+e+o+i)}(o.translateX,o.translateY,a.translateX,a.translateY,s,l),function(t,e,i,o){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),o.push({i:i.push(n(i)+"rotate(",null,r)-2,x:me(t,e)})):e&&i.push(n(i)+"rotate("+e+r)}(o.rotate,a.rotate,s,l),function(t,e,i,o){t!==e?o.push({i:i.push(n(i)+"skewX(",null,r)-2,x:me(t,e)}):e&&i.push(n(i)+"skewX("+e+r)}(o.skewX,a.skewX,s,l),function(t,e,i,r,o,a){if(t!==i||e!==r){var s=o.push(n(o)+"scale(",null,",",null,")");a.push({i:s-4,x:me(t,i)},{i:s-2,x:me(e,r)})}else 1===i&&1===r||o.push(n(o)+"scale("+i+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,l),o=a=null,function(t){for(var e,i=-1,r=l.length;++i<r;)s[(e=l[i]).i]=e.x(t);return s.join("")}}}var ve=_e((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Ce:be(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),ke=_e((function(t){return null==t?Ce:(ye||(ye=document.createElementNS("http://www.w3.org/2000/svg","g")),ye.setAttribute("transform",t),(t=ye.transform.baseVal.consolidate())?be((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):Ce)}),", ",")",")");function Te(t,e){var i,r;return function(){var n=pe(this,t),o=n.tween;if(o!==i)for(var a=0,s=(r=i=o).length;a<s;++a)if(r[a].name===e){(r=r.slice()).splice(a,1);break}n.tween=r}}function we(t,e,i){var r,n;if("function"!=typeof i)throw new Error;return function(){var o=pe(this,t),a=o.tween;if(a!==r){n=(r=a).slice();for(var s={name:e,value:i},l=0,c=n.length;l<c;++l)if(n[l].name===e){n[l]=s;break}l===c&&n.push(s)}o.tween=n}}function Se(t,e,i){var r=t._id;return t.each((function(){var t=pe(this,r);(t.value||(t.value={}))[e]=i.apply(this,arguments)})),function(t){return ge(t,r).value[e]}}function Be(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function Fe(t,e){var i=Object.create(t.prototype);for(var r in e)i[r]=e[r];return i}function Ae(){}var Le=.7,Me=1/Le,Ee="\\s*([+-]?\\d+)\\s*",Ze="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ne="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Oe=/^#([0-9a-f]{3,8})$/,Ie=new RegExp(`^rgb\\(${Ee},${Ee},${Ee}\\)$`),je=new RegExp(`^rgb\\(${Ne},${Ne},${Ne}\\)$`),qe=new RegExp(`^rgba\\(${Ee},${Ee},${Ee},${Ze}\\)$`),De=new RegExp(`^rgba\\(${Ne},${Ne},${Ne},${Ze}\\)$`),$e=new RegExp(`^hsl\\(${Ze},${Ne},${Ne}\\)$`),ze=new RegExp(`^hsla\\(${Ze},${Ne},${Ne},${Ze}\\)$`),Pe={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Re(){return this.rgb().formatHex()}function We(){return this.rgb().formatRgb()}function He(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=Oe.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?Ue(e):3===i?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ye(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ye(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ie.exec(t))?new Xe(e[1],e[2],e[3],1):(e=je.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=qe.exec(t))?Ye(e[1],e[2],e[3],e[4]):(e=De.exec(t))?Ye(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=$e.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=ze.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):Pe.hasOwnProperty(t)?Ue(Pe[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function Ue(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function Ye(t,e,i,r){return r<=0&&(t=e=i=NaN),new Xe(t,e,i,r)}function Ve(t){return t instanceof Ae||(t=He(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,i,r){return 1===arguments.length?Ve(t):new Xe(t,e,i,null==r?1:r)}function Xe(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}function Qe(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}`}function Je(){const t=Ke(this.opacity);return`${1===t?"rgb(":"rgba("}${ti(this.r)}, ${ti(this.g)}, ${ti(this.b)}${1===t?")":`, ${t})`}`}function Ke(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ti(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ei(t){return((t=ti(t))<16?"0":"")+t.toString(16)}function ii(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new ni(t,e,i,r)}function ri(t){if(t instanceof ni)return new ni(t.h,t.s,t.l,t.opacity);if(t instanceof Ae||(t=He(t)),!t)return new ni;if(t instanceof ni)return t;var e=(t=t.rgb()).r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(a=e===o?(i-r)/s+6*(i<r):i===o?(r-e)/s+2:(e-i)/s+4,s/=l<.5?o+n:2-o-n,a*=60):s=l>0&&l<1?0:a,new ni(a,s,l,t.opacity)}function ni(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}function oi(t){return(t=(t||0)%360)<0?t+360:t}function ai(t){return Math.max(0,Math.min(1,t||0))}function si(t,e,i){return 255*(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)}function li(t,e,i,r,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*i+(1+3*t+3*o-3*a)*r+a*n)/6}Be(Ae,He,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Re,formatHex:Re,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:We,toString:We}),Be(Xe,Ge,Fe(Ae,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Xe(ti(this.r),ti(this.g),ti(this.b),Ke(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Qe,formatHex:Qe,formatHex8:function(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}${ei(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Je,toString:Je})),Be(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Fe(Ae,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new ni(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new ni(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new Xe(si(t>=240?t-240:t+120,n,r),si(t,n,r),si(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new ni(oi(this.h),ai(this.s),ai(this.l),Ke(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ke(this.opacity);return`${1===t?"hsl(":"hsla("}${oi(this.h)}, ${100*ai(this.s)}%, ${100*ai(this.l)}%${1===t?")":`, ${t})`}`}}));const ci=t=>()=>t;function hi(t,e){return function(i){return t+i*e}}function ui(t){return 1==(t=+t)?di:function(e,i){return i-e?function(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}(e,i,t):ci(isNaN(e)?i:e)}}function di(t,e){var i=e-t;return i?hi(t,i):ci(isNaN(t)?e:t)}const fi=function t(e){var i=ui(e);function r(t,e){var r=i((t=Ge(t)).r,(e=Ge(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),a=di(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=n(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function pi(t){return function(e){var i,r,n=e.length,o=new Array(n),a=new Array(n),s=new Array(n);for(i=0;i<n;++i)r=Ge(e[i]),o[i]=r.r||0,a[i]=r.g||0,s[i]=r.b||0;return o=t(o),a=t(a),s=t(s),r.opacity=1,function(t){return r.r=o(t),r.g=a(t),r.b=s(t),r+""}}}pi((function(t){var e=t.length-1;return function(i){var r=i<=0?i=0:i>=1?(i=1,e-1):Math.floor(i*e),n=t[r],o=t[r+1],a=r>0?t[r-1]:2*n-o,s=r<e-1?t[r+2]:2*o-n;return li((i-r/e)*e,a,n,o,s)}})),pi((function(t){var e=t.length;return function(i){var r=Math.floor(((i%=1)<0?++i:i)*e),n=t[(r+e-1)%e],o=t[r%e],a=t[(r+1)%e],s=t[(r+2)%e];return li((i-r/e)*e,n,o,a,s)}}));var gi=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mi=new RegExp(gi.source,"g");function yi(t,e){var i,r,n,o=gi.lastIndex=mi.lastIndex=0,a=-1,s=[],l=[];for(t+="",e+="";(i=gi.exec(t))&&(r=mi.exec(e));)(n=r.index)>o&&(n=e.slice(o,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(r=r[0])?s[a]?s[a]+=r:s[++a]=r:(s[++a]=null,l.push({i:a,x:me(i,r)})),o=mi.lastIndex;return o<e.length&&(n=e.slice(o),s[a]?s[a]+=n:s[++a]=n),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var i,r=0;r<e;++r)s[(i=l[r]).i]=i.x(t);return s.join("")})}function xi(t,e){var i;return("number"==typeof e?me:e instanceof He?fi:(i=He(e))?(e=i,fi):yi)(t,e)}function Ci(t){return function(){this.removeAttribute(t)}}function bi(t){return function(){this.removeAttributeNS(t.space,t.local)}}function _i(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttribute(t);return a===o?null:a===r?n:n=e(r=a,i)}}function vi(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===r?n:n=e(r=a,i)}}function ki(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttribute(t))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttribute(t)}}function Ti(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttributeNS(t.space,t.local))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttributeNS(t.space,t.local)}}function wi(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttributeNS(t.space,t.local,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Si(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttribute(t,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Bi(t,e){return function(){fe(this,t).delay=+e.apply(this,arguments)}}function Fi(t,e){return e=+e,function(){fe(this,t).delay=e}}function Ai(t,e){return function(){pe(this,t).duration=+e.apply(this,arguments)}}function Li(t,e){return e=+e,function(){pe(this,t).duration=e}}var Mi=Mt.prototype.constructor;function Ei(t){return function(){this.style.removeProperty(t)}}var Zi=0;function Ni(t,e,i,r){this._groups=t,this._parents=e,this._name=i,this._id=r}function Oi(){return++Zi}var Ii=Mt.prototype;Ni.prototype=function(t){return Mt().transition(t)}.prototype={constructor:Ni,select:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=b(t));for(var r=this._groups,n=r.length,o=new Array(n),a=0;a<n;++a)for(var s,l,c=r[a],h=c.length,u=o[a]=new Array(h),d=0;d<h;++d)(s=c[d])&&(l=t.call(s,s.__data__,d,c))&&("__data__"in s&&(l.__data__=s.__data__),u[d]=l,de(u[d],e,i,d,u,ge(s,i)));return new Ni(o,this._parents,e,i)},selectAll:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=k(t));for(var r=this._groups,n=r.length,o=[],a=[],s=0;s<n;++s)for(var l,c=r[s],h=c.length,u=0;u<h;++u)if(l=c[u]){for(var d,f=t.call(l,l.__data__,u,c),p=ge(l,i),g=0,m=f.length;g<m;++g)(d=f[g])&&de(d,e,i,g,f,p);o.push(f),a.push(l)}return new Ni(o,a,e,i)},selectChild:Ii.selectChild,selectChildren:Ii.selectChildren,filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new Ni(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,i=t._groups,r=e.length,n=i.length,o=Math.min(r,n),a=new Array(r),s=0;s<o;++s)for(var l,c=e[s],h=i[s],u=c.length,d=a[s]=new Array(u),f=0;f<u;++f)(l=c[f]||h[f])&&(d[f]=l);for(;s<r;++s)a[s]=e[s];return new Ni(a,this._parents,this._name,this._id)},selection:function(){return new Mi(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,i=Oi(),r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)if(a=s[c]){var h=ge(a,e);de(a,t,i,c,s,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Ni(r,this._parents,t,i)},call:Ii.call,nodes:Ii.nodes,node:Ii.node,size:Ii.size,empty:Ii.empty,each:Ii.each,on:function(t,e){var i=this._id;return arguments.length<2?ge(this.node(),i).on.on(t):this.each(function(t,e,i){var r,n,o=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?fe:pe;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}(i,t,e))},attr:function(t,e){var i=D(t),r="transform"===i?ke:xi;return this.attrTween(t,"function"==typeof e?(i.local?Ti:ki)(i,r,Se(this,"attr."+t,e)):null==e?(i.local?bi:Ci)(i):(i.local?vi:_i)(i,r,e))},attrTween:function(t,e){var i="attr."+t;if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;var r=D(t);return this.tween(i,(r.local?wi:Si)(r,e))},style:function(t,e,i){var r="transform"==(t+="")?ve:xi;return null==e?this.styleTween(t,function(t,e){var i,r,n;return function(){var o=X(this,t),a=(this.style.removeProperty(t),X(this,t));return o===a?null:o===i&&a===r?n:n=e(i=o,r=a)}}(t,r)).on("end.style."+t,Ei(t)):"function"==typeof e?this.styleTween(t,function(t,e,i){var r,n,o;return function(){var a=X(this,t),s=i(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=X(this,t)),a===l?null:a===r&&l===n?o:(n=l,o=e(r=a,s))}}(t,r,Se(this,"style."+t,e))).each(function(t,e){var i,r,n,o,a="style."+e,s="end."+a;return function(){var l=pe(this,t),c=l.on,h=null==l.value[a]?o||(o=Ei(e)):void 0;c===i&&n===h||(r=(i=c).copy()).on(s,n=h),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,i){var r,n,o=i+"";return function(){var a=X(this,t);return a===o?null:a===r?n:n=e(r=a,i)}}(t,r,e),i).on("end.style."+t,null)},styleTween:function(t,e,i){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,i){var r,n;function o(){var o=e.apply(this,arguments);return o!==n&&(r=(n=o)&&function(t,e,i){return function(r){this.style.setProperty(t,e.call(this,r),i)}}(t,o,i)),r}return o._value=e,o}(t,e,null==i?"":i))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Se(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,i;function r(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var i=this._id;if(t+="",arguments.length<2){for(var r,n=ge(this.node(),i).tween,o=0,a=n.length;o<a;++o)if((r=n[o]).name===t)return r.value;return null}return this.each((null==e?Te:we)(i,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bi:Fi)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Ai:Li)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){pe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var i=e.apply(this,arguments);if("function"!=typeof i)throw new Error;pe(this,t).ease=i}}(this._id,t))},end:function(){var t,e,i=this,r=i._id,n=i.size();return new Promise((function(o,a){var s={value:a},l={value:function(){0==--n&&o()}};i.each((function(){var i=pe(this,r),n=i.on;n!==t&&((e=(t=n).copy())._.cancel.push(s),e._.interrupt.push(s),e._.end.push(l)),i.on=e})),0===n&&o()}))},[Symbol.iterator]:Ii[Symbol.iterator]};var ji={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function qi(t,e){for(var i;!(i=t.__transition)||!(i=i[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return i}Mt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var i,r,n,o=t.__transition,a=!0;if(o){for(n in e=null==e?null:e+"",o)(i=o[n]).name===e?(r=i.state>se&&i.state<he,i.state=ue,i.timer.stop(),i.on.call(r?"interrupt":"cancel",t,t.__data__,i.index,i.group),delete o[n]):a=!1;a&&delete t.__transition}}(this,t)}))},Mt.prototype.transition=function(t){var e,i;t instanceof Ni?(e=t._id,t=t._name):(e=Oi(),(i=ji).time=Gt(),t=null==t?null:t+"");for(var r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)(a=s[c])&&de(a,t,e,c,s,i||qi(a,e));return new Ni(r,this._parents,t,e)};const{abs:Di,max:$i,min:zi}=Math;function Pi(t){return[+t[0],+t[1]]}function Ri(t){return[Pi(t[0]),Pi(t[1])]}["w","e"].map(Wi),["n","s"].map(Wi),["n","w","e","s","nw","ne","sw","se"].map(Wi);function Wi(t){return{type:t}}function Hi(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Ui(t){return(e,i)=>function(t,e){return fetch(t,e).then(Hi)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Ui("application/xml");Ui("text/html");var Yi=Ui("image/svg+xml");const Vi=Math.PI/180,Gi=180/Math.PI,Xi=.96422,Qi=1,Ji=.82521,Ki=4/29,tr=6/29,er=3*tr*tr,ir=tr*tr*tr;function rr(t){if(t instanceof nr)return new nr(t.l,t.a,t.b,t.opacity);if(t instanceof ur)return dr(t);t instanceof Xe||(t=Ve(t));var e,i,r=lr(t.r),n=lr(t.g),o=lr(t.b),a=or((.2225045*r+.7168786*n+.0606169*o)/Qi);return r===n&&n===o?e=i=a:(e=or((.4360747*r+.3850649*n+.1430804*o)/Xi),i=or((.0139322*r+.0971045*n+.7141733*o)/Ji)),new nr(116*a-16,500*(e-a),200*(a-i),t.opacity)}function nr(t,e,i,r){this.l=+t,this.a=+e,this.b=+i,this.opacity=+r}function or(t){return t>ir?Math.pow(t,1/3):t/er+Ki}function ar(t){return t>tr?t*t*t:er*(t-Ki)}function sr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function lr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function cr(t){if(t instanceof ur)return new ur(t.h,t.c,t.l,t.opacity);if(t instanceof nr||(t=rr(t)),0===t.a&&0===t.b)return new ur(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Gi;return new ur(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function hr(t,e,i,r){return 1===arguments.length?cr(t):new ur(t,e,i,null==r?1:r)}function ur(t,e,i,r){this.h=+t,this.c=+e,this.l=+i,this.opacity=+r}function dr(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Vi;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fr(t){return function(e,i){var r=t((e=hr(e)).h,(i=hr(i)).h),n=di(e.c,i.c),o=di(e.l,i.l),a=di(e.opacity,i.opacity);return function(t){return e.h=r(t),e.c=n(t),e.l=o(t),e.opacity=a(t),e+""}}}Be(nr,(function(t,e,i,r){return 1===arguments.length?rr(t):new nr(t,e,i,null==r?1:r)}),Fe(Ae,{brighter(t){return new nr(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new nr(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,i=isNaN(this.b)?t:t-this.b/200;return new Xe(sr(3.1338561*(e=Xi*ar(e))-1.6168667*(t=Qi*ar(t))-.4906146*(i=Ji*ar(i))),sr(-.9787684*e+1.9161415*t+.033454*i),sr(.0719453*e-.2289914*t+1.4052427*i),this.opacity)}})),Be(ur,hr,Fe(Ae,{brighter(t){return new ur(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new ur(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return dr(this).rgb()}}));const pr=fr((function(t,e){var i=e-t;return i?hi(t,i>180||i<-180?i-360*Math.round(i/360):i):ci(isNaN(t)?e:t)}));fr(di);function gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class mr extends Map{constructor(t,e=br){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[i,r]of t)this.set(i,r)}get(t){return super.get(yr(this,t))}has(t){return super.has(yr(this,t))}set(t,e){return super.set(xr(this,t),e)}delete(t){return super.delete(Cr(this,t))}}function yr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):i}function xr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):(t.set(r,i),i)}function Cr({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function br(t){return null!==t&&"object"==typeof t?t.valueOf():t}const _r=Symbol("implicit");function vr(){var t=new mr,e=[],i=[],r=_r;function n(n){let o=t.get(n);if(void 0===o){if(r!==_r)return r;t.set(n,o=e.push(n)-1)}return i[o%i.length]}return n.domain=function(i){if(!arguments.length)return e.slice();e=[],t=new mr;for(const r of i)t.has(r)||t.set(r,e.push(r)-1);return n},n.range=function(t){return arguments.length?(i=Array.from(t),n):i.slice()},n.unknown=function(t){return arguments.length?(r=t,n):r},n.copy=function(){return vr(e,i).unknown(r)},gr.apply(n,arguments),n}function kr(){var t,e,i=vr().unknown(void 0),r=i.domain,n=i.range,o=0,a=1,s=!1,l=0,c=0,h=.5;function u(){var i=r().length,u=a<o,d=u?a:o,f=u?o:a;t=(f-d)/Math.max(1,i-l+2*c),s&&(t=Math.floor(t)),d+=(f-d-t*(i-l))*h,e=t*(1-l),s&&(d=Math.round(d),e=Math.round(e));var p=function(t,e,i){t=+t,e=+e,i=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+i;for(var r=-1,n=0|Math.max(0,Math.ceil((e-t)/i)),o=new Array(n);++r<n;)o[r]=t+r*i;return o}(i).map((function(e){return d+t*e}));return n(u?p.reverse():p)}return delete i.unknown,i.domain=function(t){return arguments.length?(r(t),u()):r()},i.range=function(t){return arguments.length?([o,a]=t,o=+o,a=+a,u()):[o,a]},i.rangeRound=function(t){return[o,a]=t,o=+o,a=+a,s=!0,u()},i.bandwidth=function(){return e},i.step=function(){return t},i.round=function(t){return arguments.length?(s=!!t,u()):s},i.padding=function(t){return arguments.length?(l=Math.min(1,c=+t),u()):l},i.paddingInner=function(t){return arguments.length?(l=Math.min(1,t),u()):l},i.paddingOuter=function(t){return arguments.length?(c=+t,u()):c},i.align=function(t){return arguments.length?(h=Math.max(0,Math.min(1,t)),u()):h},i.copy=function(){return kr(r(),[o,a]).round(s).paddingInner(l).paddingOuter(c).align(h)},gr.apply(u(),arguments)}const Tr=Math.sqrt(50),wr=Math.sqrt(10),Sr=Math.sqrt(2);function Br(t,e,i){const r=(e-t)/Math.max(0,i),n=Math.floor(Math.log10(r)),o=r/Math.pow(10,n),a=o>=Tr?10:o>=wr?5:o>=Sr?2:1;let s,l,c;return n<0?(c=Math.pow(10,-n)/a,s=Math.round(t*c),l=Math.round(e*c),s/c<t&&++s,l/c>e&&--l,c=-c):(c=Math.pow(10,n)*a,s=Math.round(t/c),l=Math.round(e/c),s*c<t&&++s,l*c>e&&--l),l<s&&.5<=i&&i<2?Br(t,e,2*i):[s,l,c]}function Fr(t,e,i){return Br(t=+t,e=+e,i=+i)[2]}function Ar(t,e,i){i=+i;const r=(e=+e)<(t=+t),n=r?Fr(e,t,i):Fr(t,e,i);return(r?-1:1)*(n<0?1/-n:n)}function Lr(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Mr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Er(t){let e,i,r;function n(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<0?n=e+1:o=e}while(n<o)}return n}return 2!==t.length?(e=Lr,i=(e,i)=>Lr(t(e),i),r=(e,i)=>t(e)-i):(e=t===Lr||t===Mr?t:Zr,i=t,r=t),{left:n,center:function(t,e,i=0,o=t.length){const a=n(t,e,i,o-1);return a>i&&r(t[a-1],e)>-r(t[a],e)?a-1:a},right:function(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<=0?n=e+1:o=e}while(n<o)}return n}}}function Zr(){return 0}const Nr=Er(Lr),Or=Nr.right,Ir=(Nr.left,Er((function(t){return null===t?NaN:+t})).center,Or);function jr(t,e){var i,r=e?e.length:0,n=t?Math.min(r,t.length):0,o=new Array(n),a=new Array(r);for(i=0;i<n;++i)o[i]=zr(t[i],e[i]);for(;i<r;++i)a[i]=e[i];return function(t){for(i=0;i<n;++i)a[i]=o[i](t);return a}}function qr(t,e){var i=new Date;return t=+t,e=+e,function(r){return i.setTime(t*(1-r)+e*r),i}}function Dr(t,e){var i,r={},n={};for(i in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)i in t?r[i]=zr(t[i],e[i]):n[i]=e[i];return function(t){for(i in r)n[i]=r[i](t);return n}}function $r(t,e){e||(e=[]);var i,r=t?Math.min(e.length,t.length):0,n=e.slice();return function(o){for(i=0;i<r;++i)n[i]=t[i]*(1-o)+e[i]*o;return n}}function zr(t,e){var i,r,n=typeof e;return null==e||"boolean"===n?ci(e):("number"===n?me:"string"===n?(i=He(e))?(e=i,fi):yi:e instanceof He?fi:e instanceof Date?qr:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?jr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Dr:me:$r))(t,e)}function Pr(t,e){return t=+t,e=+e,function(i){return Math.round(t*(1-i)+e*i)}}function Rr(t){return+t}var Wr=[0,1];function Hr(t){return t}function Ur(t,e){return(e-=t=+t)?function(i){return(i-t)/e}:(i=isNaN(e)?NaN:.5,function(){return i});var i}function Yr(t,e,i){var r=t[0],n=t[1],o=e[0],a=e[1];return n<r?(r=Ur(n,r),o=i(a,o)):(r=Ur(r,n),o=i(o,a)),function(t){return o(r(t))}}function Vr(t,e,i){var r=Math.min(t.length,e.length)-1,n=new Array(r),o=new Array(r),a=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<r;)n[a]=Ur(t[a],t[a+1]),o[a]=i(e[a],e[a+1]);return function(e){var i=Ir(t,e,1,r)-1;return o[i](n[i](e))}}function Gr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Xr(){var t,e,i,r,n,o,a=Wr,s=Wr,l=zr,c=Hr;function h(){var t,e,i,l=Math.min(a.length,s.length);return c!==Hr&&(t=a[0],e=a[l-1],t>e&&(i=t,t=e,e=i),c=function(i){return Math.max(t,Math.min(e,i))}),r=l>2?Vr:Yr,n=o=null,u}function u(e){return null==e||isNaN(e=+e)?i:(n||(n=r(a.map(t),s,l)))(t(c(e)))}return u.invert=function(i){return c(e((o||(o=r(s,a.map(t),me)))(i)))},u.domain=function(t){return arguments.length?(a=Array.from(t,Rr),h()):a.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),h()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=Pr,h()},u.clamp=function(t){return arguments.length?(c=!!t||Hr,h()):c!==Hr},u.interpolate=function(t){return arguments.length?(l=t,h()):l},u.unknown=function(t){return arguments.length?(i=t,u):i},function(i,r){return t=i,e=r,h()}}function Qr(){return Xr()(Hr,Hr)}var Jr,Kr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tn(t){if(!(e=Kr.exec(t)))throw new Error("invalid format: "+t);var e;return new en({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function en(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function rn(t,e){if((i=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var i,r=t.slice(0,i);return[r.length>1?r[0]+r.slice(2):r,+t.slice(i+1)]}function nn(t){return(t=rn(Math.abs(t)))?t[1]:NaN}function on(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+r:r.length>n+1?r.slice(0,n+1)+"."+r.slice(n+1):r+new Array(n-r.length+2).join("0")}tn.prototype=en.prototype,en.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const an={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>on(100*t,e),r:on,s:function(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1],o=n-(Jr=3*Math.max(-8,Math.min(8,Math.floor(n/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+rn(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function sn(t){return t}var ln,cn,hn,un=Array.prototype.map,dn=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function fn(t){var e,i,r=void 0===t.grouping||void 0===t.thousands?sn:(e=un.call(t.grouping,Number),i=t.thousands+"",function(t,r){for(var n=t.length,o=[],a=0,s=e[0],l=0;n>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(t.substring(n-=s,n+s)),!((l+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(i)}),n=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?sn:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(un.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=tn(t)).fill,i=t.align,u=t.sign,d=t.symbol,f=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,x=t.type;"n"===x?(g=!0,x="g"):an[x]||(void 0===m&&(m=12),y=!0,x="g"),(f||"0"===e&&"="===i)&&(f=!0,e="0",i="=");var C="$"===d?n:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",b="$"===d?o:/[%p]/.test(x)?l:"",_=an[x],v=/[defgprs%]/.test(x);function k(t){var n,o,l,d=C,k=b;if("c"===x)k=_(t)+k,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:_(Math.abs(t),m),y&&(t=function(t){t:for(var e,i=t.length,r=1,n=-1;r<i;++r)switch(t[r]){case".":n=e=r;break;case"0":0===n&&(n=r),e=r;break;default:if(!+t[r])break t;n>0&&(n=0)}return n>0?t.slice(0,n)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==u&&(T=!1),d=(T?"("===u?u:c:"-"===u||"("===u?"":u)+d,k=("s"===x?dn[8+Jr/3]:"")+k+(T&&"("===u?")":""),v)for(n=-1,o=t.length;++n<o;)if(48>(l=t.charCodeAt(n))||l>57){k=(46===l?a+t.slice(n+1):t.slice(n))+k,t=t.slice(0,n);break}}g&&!f&&(t=r(t,1/0));var w=d.length+t.length+k.length,S=w<p?new Array(p-w+1).join(e):"";switch(g&&f&&(t=r(S+t,S.length?p-k.length:1/0),S=""),i){case"<":t=d+t+k+S;break;case"=":t=d+S+t+k;break;case"^":t=S.slice(0,w=S.length>>1)+d+t+k+S.slice(w);break;default:t=S+d+t+k}return s(t)}return m=void 0===m?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:u,formatPrefix:function(t,e){var i=u(((t=tn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3))),n=Math.pow(10,-r),o=dn[8+r/3];return function(t){return i(n*t)+o}}}}function pn(t,e,i,r){var n,o=Ar(t,e,i);switch((r=tn(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(n=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3)))-nn(Math.abs(t)))}(o,a))||(r.precision=n),hn(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(n=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,nn(e)-nn(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=n-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(n=function(t){return Math.max(0,-nn(Math.abs(t)))}(o))||(r.precision=n-2*("%"===r.type))}return cn(r)}function gn(t){var e=t.domain;return t.ticks=function(t){var i=e();return function(t,e,i){if(!((i=+i)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[n,o,a]=r?Br(e,t,i):Br(t,e,i);if(!(o>=n))return[];const s=o-n+1,l=new Array(s);if(r)if(a<0)for(let c=0;c<s;++c)l[c]=(o-c)/-a;else for(let c=0;c<s;++c)l[c]=(o-c)*a;else if(a<0)for(let c=0;c<s;++c)l[c]=(n+c)/-a;else for(let c=0;c<s;++c)l[c]=(n+c)*a;return l}(i[0],i[i.length-1],null==t?10:t)},t.tickFormat=function(t,i){var r=e();return pn(r[0],r[r.length-1],null==t?10:t,i)},t.nice=function(i){null==i&&(i=10);var r,n,o=e(),a=0,s=o.length-1,l=o[a],c=o[s],h=10;for(c<l&&(n=l,l=c,c=n,n=a,a=s,s=n);h-- >0;){if((n=Fr(l,c,i))===r)return o[a]=l,o[s]=c,e(o);if(n>0)l=Math.floor(l/n)*n,c=Math.ceil(c/n)*n;else{if(!(n<0))break;l=Math.ceil(l*n)/n,c=Math.floor(c*n)/n}r=n}return t},t}function mn(){var t=Qr();return t.copy=function(){return Gr(t,mn())},gr.apply(t,arguments),gn(t)}ln=fn({thousands:",",grouping:[3],currency:["$",""]}),cn=ln.format,hn=ln.formatPrefix;const yn=1e3,xn=6e4,Cn=36e5,bn=864e5,_n=6048e5,vn=2592e6,kn=31536e6,Tn=new Date,wn=new Date;function Sn(t,e,i,r){function n(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return n.floor=e=>(t(e=new Date(+e)),e),n.ceil=i=>(t(i=new Date(i-1)),e(i,1),t(i),i),n.round=t=>{const e=n(t),i=n.ceil(t);return t-e<i-t?e:i},n.offset=(t,i)=>(e(t=new Date(+t),null==i?1:Math.floor(i)),t),n.range=(i,r,o)=>{const a=[];if(i=n.ceil(i),o=null==o?1:Math.floor(o),!(i<r&&o>0))return a;let s;do{a.push(s=new Date(+i)),e(i,o),t(i)}while(s<i&&i<r);return a},n.filter=i=>Sn((e=>{if(e>=e)for(;t(e),!i(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!i(t););else for(;--r>=0;)for(;e(t,1),!i(t););})),i&&(n.count=(e,r)=>(Tn.setTime(+e),wn.setTime(+r),t(Tn),t(wn),Math.floor(i(Tn,wn))),n.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?n.filter(r?e=>r(e)%t==0:e=>n.count(0,e)%t==0):n:null)),n}const Bn=Sn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Bn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Sn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Bn:null);Bn.range;const Fn=Sn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yn)}),((t,e)=>(e-t)/yn),(t=>t.getUTCSeconds())),An=(Fn.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getMinutes()))),Ln=(An.range,Sn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getUTCMinutes()))),Mn=(Ln.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn-t.getMinutes()*xn)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getHours()))),En=(Mn.range,Sn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCHours()))),Zn=(En.range,Sn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/bn),(t=>t.getDate()-1))),Nn=(Zn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bn),(t=>t.getUTCDate()-1))),On=(Nn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bn),(t=>Math.floor(t/bn))));On.range;function In(t){return Sn((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/_n))}const jn=In(0),qn=In(1),Dn=In(2),$n=In(3),zn=In(4),Pn=In(5),Rn=In(6);jn.range,qn.range,Dn.range,$n.range,zn.range,Pn.range,Rn.range;function Wn(t){return Sn((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/_n))}const Hn=Wn(0),Un=Wn(1),Yn=Wn(2),Vn=Wn(3),Gn=Wn(4),Xn=Wn(5),Qn=Wn(6),Jn=(Hn.range,Un.range,Yn.range,Vn.range,Gn.range,Xn.range,Qn.range,Sn((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Kn=(Jn.range,Sn((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),to=(Kn.range,Sn((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));to.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,i)=>{e.setFullYear(e.getFullYear()+i*t)})):null;to.range;const eo=Sn((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));eo.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,i)=>{e.setUTCFullYear(e.getUTCFullYear()+i*t)})):null;eo.range;function io(t,e,i,r,n,o){const a=[[Fn,1,yn],[Fn,5,5e3],[Fn,15,15e3],[Fn,30,3e4],[o,1,xn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[n,1,Cn],[n,3,108e5],[n,6,216e5],[n,12,432e5],[r,1,bn],[r,2,1728e5],[i,1,_n],[e,1,vn],[e,3,7776e6],[t,1,kn]];function s(e,i,r){const n=Math.abs(i-e)/r,o=Er((([,,t])=>t)).right(a,n);if(o===a.length)return t.every(Ar(e/kn,i/kn,r));if(0===o)return Bn.every(Math.max(Ar(e,i,r),1));const[s,l]=a[n/a[o-1][2]<a[o][2]/n?o-1:o];return s.every(l)}return[function(t,e,i){const r=e<t;r&&([t,e]=[e,t]);const n=i&&"function"==typeof i.range?i:s(t,e,i),o=n?n.range(t,+e+1):[];return r?o.reverse():o},s]}const[ro,no]=io(eo,Kn,Hn,On,En,Ln),[oo,ao]=io(to,Jn,jn,Zn,Mn,An);function so(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function lo(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function co(t,e,i){return{y:t,m:e,d:i,H:0,M:0,S:0,L:0}}var ho,uo,fo={"-":"",_:" ",0:"0"},po=/^\s*\d+/,go=/^%/,mo=/[\\^$*+?|[\]().{}]/g;function yo(t,e,i){var r=t<0?"-":"",n=(r?-t:t)+"",o=n.length;return r+(o<i?new Array(i-o+1).join(e)+n:n)}function xo(t){return t.replace(mo,"\\$&")}function Co(t){return new RegExp("^(?:"+t.map(xo).join("|")+")","i")}function bo(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function _o(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.w=+r[0],i+r[0].length):-1}function vo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.u=+r[0],i+r[0].length):-1}function ko(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.U=+r[0],i+r[0].length):-1}function To(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.V=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function So(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function Bo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),i+r[0].length):-1}function Fo(t,e,i){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(i,i+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),i+r[0].length):-1}function Ao(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.q=3*r[0]-3,i+r[0].length):-1}function Lo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.m=r[0]-1,i+r[0].length):-1}function Mo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.d=+r[0],i+r[0].length):-1}function Eo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.m=0,t.d=+r[0],i+r[0].length):-1}function Zo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.H=+r[0],i+r[0].length):-1}function No(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function Oo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.S=+r[0],i+r[0].length):-1}function Io(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.L=+r[0],i+r[0].length):-1}function jo(t,e,i){var r=po.exec(e.slice(i,i+6));return r?(t.L=Math.floor(r[0]/1e3),i+r[0].length):-1}function qo(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function Do(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function $o(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function zo(t,e){return yo(t.getDate(),e,2)}function Po(t,e){return yo(t.getHours(),e,2)}function Ro(t,e){return yo(t.getHours()%12||12,e,2)}function Wo(t,e){return yo(1+Zn.count(to(t),t),e,3)}function Ho(t,e){return yo(t.getMilliseconds(),e,3)}function Uo(t,e){return Ho(t,e)+"000"}function Yo(t,e){return yo(t.getMonth()+1,e,2)}function Vo(t,e){return yo(t.getMinutes(),e,2)}function Go(t,e){return yo(t.getSeconds(),e,2)}function Xo(t){var e=t.getDay();return 0===e?7:e}function Qo(t,e){return yo(jn.count(to(t)-1,t),e,2)}function Jo(t){var e=t.getDay();return e>=4||0===e?zn(t):zn.ceil(t)}function Ko(t,e){return t=Jo(t),yo(zn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ta(t){return t.getDay()}function ea(t,e){return yo(qn.count(to(t)-1,t),e,2)}function ia(t,e){return yo(t.getFullYear()%100,e,2)}function ra(t,e){return yo((t=Jo(t)).getFullYear()%100,e,2)}function na(t,e){return yo(t.getFullYear()%1e4,e,4)}function oa(t,e){var i=t.getDay();return yo((t=i>=4||0===i?zn(t):zn.ceil(t)).getFullYear()%1e4,e,4)}function aa(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+yo(e/60|0,"0",2)+yo(e%60,"0",2)}function sa(t,e){return yo(t.getUTCDate(),e,2)}function la(t,e){return yo(t.getUTCHours(),e,2)}function ca(t,e){return yo(t.getUTCHours()%12||12,e,2)}function ha(t,e){return yo(1+Nn.count(eo(t),t),e,3)}function ua(t,e){return yo(t.getUTCMilliseconds(),e,3)}function da(t,e){return ua(t,e)+"000"}function fa(t,e){return yo(t.getUTCMonth()+1,e,2)}function pa(t,e){return yo(t.getUTCMinutes(),e,2)}function ga(t,e){return yo(t.getUTCSeconds(),e,2)}function ma(t){var e=t.getUTCDay();return 0===e?7:e}function ya(t,e){return yo(Hn.count(eo(t)-1,t),e,2)}function xa(t){var e=t.getUTCDay();return e>=4||0===e?Gn(t):Gn.ceil(t)}function Ca(t,e){return t=xa(t),yo(Gn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function ba(t){return t.getUTCDay()}function _a(t,e){return yo(Un.count(eo(t)-1,t),e,2)}function va(t,e){return yo(t.getUTCFullYear()%100,e,2)}function ka(t,e){return yo((t=xa(t)).getUTCFullYear()%100,e,2)}function Ta(t,e){return yo(t.getUTCFullYear()%1e4,e,4)}function wa(t,e){var i=t.getUTCDay();return yo((t=i>=4||0===i?Gn(t):Gn.ceil(t)).getUTCFullYear()%1e4,e,4)}function Sa(){return"+0000"}function Ba(){return"%"}function Fa(t){return+t}function Aa(t){return Math.floor(+t/1e3)}function La(t){return new Date(t)}function Ma(t){return t instanceof Date?+t:+new Date(+t)}function Ea(t,e,i,r,n,o,a,s,l,c){var h=Qr(),u=h.invert,d=h.domain,f=c(".%L"),p=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),x=c("%b %d"),C=c("%B"),b=c("%Y");function _(t){return(l(t)<t?f:s(t)<t?p:a(t)<t?g:o(t)<t?m:r(t)<t?n(t)<t?y:x:i(t)<t?C:b)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?d(Array.from(t,Ma)):d().map(La)},h.ticks=function(e){var i=d();return t(i[0],i[i.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?_:c(e)},h.nice=function(t){var i=d();return t&&"function"==typeof t.range||(t=e(i[0],i[i.length-1],null==t?10:t)),t?d(function(t,e){var i,r=0,n=(t=t.slice()).length-1,o=t[r],a=t[n];return a<o&&(i=r,r=n,n=i,i=o,o=a,a=i),t[r]=e.floor(o),t[n]=e.ceil(a),t}(i,t)):h},h.copy=function(){return Gr(h,Ea(t,e,i,r,n,o,a,s,l,c))},h}function Za(){return gr.apply(Ea(oo,ao,to,Jn,jn,Zn,Mn,An,Fn,uo).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){ho=function(t){var e=t.dateTime,i=t.date,r=t.time,n=t.periods,o=t.days,a=t.shortDays,s=t.months,l=t.shortMonths,c=Co(n),h=bo(n),u=Co(o),d=bo(o),f=Co(a),p=bo(a),g=Co(s),m=bo(s),y=Co(l),x=bo(l),C={a:function(t){return a[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:zo,e:zo,f:Uo,g:ra,G:oa,H:Po,I:Ro,j:Wo,L:Ho,m:Yo,M:Vo,p:function(t){return n[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Fa,s:Aa,S:Go,u:Xo,U:Qo,V:Ko,w:ta,W:ea,x:null,X:null,y:ia,Y:na,Z:aa,"%":Ba},b={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:sa,e:sa,f:da,g:ka,G:wa,H:la,I:ca,j:ha,L:ua,m:fa,M:pa,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Fa,s:Aa,S:ga,u:ma,U:ya,V:Ca,w:ba,W:_a,x:null,X:null,y:va,Y:Ta,Z:Sa,"%":Ba},_={a:function(t,e,i){var r=f.exec(e.slice(i));return r?(t.w=p.get(r[0].toLowerCase()),i+r[0].length):-1},A:function(t,e,i){var r=u.exec(e.slice(i));return r?(t.w=d.get(r[0].toLowerCase()),i+r[0].length):-1},b:function(t,e,i){var r=y.exec(e.slice(i));return r?(t.m=x.get(r[0].toLowerCase()),i+r[0].length):-1},B:function(t,e,i){var r=g.exec(e.slice(i));return r?(t.m=m.get(r[0].toLowerCase()),i+r[0].length):-1},c:function(t,i,r){return T(t,e,i,r)},d:Mo,e:Mo,f:jo,g:Bo,G:So,H:Zo,I:Zo,j:Eo,L:Io,m:Lo,M:No,p:function(t,e,i){var r=c.exec(e.slice(i));return r?(t.p=h.get(r[0].toLowerCase()),i+r[0].length):-1},q:Ao,Q:Do,s:$o,S:Oo,u:vo,U:ko,V:To,w:_o,W:wo,x:function(t,e,r){return T(t,i,e,r)},X:function(t,e,i){return T(t,r,e,i)},y:Bo,Y:So,Z:Fo,"%":qo};function v(t,e){return function(i){var r,n,o,a=[],s=-1,l=0,c=t.length;for(i instanceof Date||(i=new Date(+i));++s<c;)37===t.charCodeAt(s)&&(a.push(t.slice(l,s)),null!=(n=fo[r=t.charAt(++s)])?r=t.charAt(++s):n="e"===r?" ":"0",(o=e[r])&&(r=o(i,n)),a.push(r),l=s+1);return a.push(t.slice(l,s)),a.join("")}}function k(t,e){return function(i){var r,n,o=co(1900,void 0,1);if(T(o,t,i+="",0)!=i.length)return null;if("Q"in o)return new Date(o.Q);if("s"in o)return new Date(1e3*o.s+("L"in o?o.L:0));if(e&&!("Z"in o)&&(o.Z=0),"p"in o&&(o.H=o.H%12+12*o.p),void 0===o.m&&(o.m="q"in o?o.q:0),"V"in o){if(o.V<1||o.V>53)return null;"w"in o||(o.w=1),"Z"in o?(n=(r=lo(co(o.y,0,1))).getUTCDay(),r=n>4||0===n?Un.ceil(r):Un(r),r=Nn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(n=(r=so(co(o.y,0,1))).getDay(),r=n>4||0===n?qn.ceil(r):qn(r),r=Zn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),n="Z"in o?lo(co(o.y,0,1)).getUTCDay():so(co(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(n+5)%7:o.w+7*o.U-(n+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,lo(o)):so(o)}}function T(t,e,i,r){for(var n,o,a=0,s=e.length,l=i.length;a<s;){if(r>=l)return-1;if(37===(n=e.charCodeAt(a++))){if(n=e.charAt(a++),!(o=_[n in fo?e.charAt(a++):n])||(r=o(t,i,r))<0)return-1}else if(n!=i.charCodeAt(r++))return-1}return r}return C.x=v(i,C),C.X=v(r,C),C.c=v(e,C),b.x=v(i,b),b.X=v(r,b),b.c=v(e,b),{format:function(t){var e=v(t+="",C);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=v(t+="",b);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}(t),uo=ho.format,ho.parse,ho.utcFormat,ho.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const Na=function(t){for(var e=t.length/6|0,i=new Array(e),r=0;r<e;)i[r]="#"+t.slice(6*r,6*++r);return i}("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");function Oa(t){return"string"==typeof t?new At([[document.querySelector(t)]],[document.documentElement]):new At([[t]],Ft)}function Ia(t){return"string"==typeof t?new At([document.querySelectorAll(t)],[document.documentElement]):new At([_(t)],Ft)}function ja(t){return function(){return t}}const qa=Math.abs,Da=Math.atan2,$a=Math.cos,za=Math.max,Pa=Math.min,Ra=Math.sin,Wa=Math.sqrt,Ha=1e-12,Ua=Math.PI,Ya=Ua/2,Va=2*Ua;function Ga(t){return t>=1?Ya:t<=-1?-Ya:Math.asin(t)}const Xa=Math.PI,Qa=2*Xa,Ja=1e-6,Ka=Qa-Ja;function ts(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=arguments[e]+t[e]}class es{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?ts:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ts;const i=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*i)/i+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,i,r){this._append`Q${+t},${+e},${this._x1=+i},${this._y1=+r}`}bezierCurveTo(t,e,i,r,n,o){this._append`C${+t},${+e},${+i},${+r},${this._x1=+n},${this._y1=+o}`}arcTo(t,e,i,r,n){if(t=+t,e=+e,i=+i,r=+r,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=this._x1,a=this._y1,s=i-t,l=r-e,c=o-t,h=a-e,u=c*c+h*h;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Ja)if(Math.abs(h*s-l*c)>Ja&&n){let d=i-o,f=r-a,p=s*s+l*l,g=d*d+f*f,m=Math.sqrt(p),y=Math.sqrt(u),x=n*Math.tan((Xa-Math.acos((p+u-g)/(2*m*y)))/2),C=x/y,b=x/m;Math.abs(C-1)>Ja&&this._append`L${t+C*c},${e+C*h}`,this._append`A${n},${n},0,0,${+(h*d>c*f)},${this._x1=t+b*s},${this._y1=e+b*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,i,r,n,o){if(t=+t,e=+e,o=!!o,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=i*Math.cos(r),s=i*Math.sin(r),l=t+a,c=e+s,h=1^o,u=o?r-n:n-r;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>Ja||Math.abs(this._y1-c)>Ja)&&this._append`L${l},${c}`,i&&(u<0&&(u=u%Qa+Qa),u>Ka?this._append`A${i},${i},0,1,${h},${t-a},${e-s}A${i},${i},0,1,${h},${this._x1=l},${this._y1=c}`:u>Ja&&this._append`A${i},${i},0,${+(u>=Xa)},${h},${this._x1=t+i*Math.cos(n)},${this._y1=e+i*Math.sin(n)}`)}rect(t,e,i,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${i=+i}v${+r}h${-i}Z`}toString(){return this._}}function is(t){let e=3;return t.digits=function(i){if(!arguments.length)return e;if(null==i)e=null;else{const t=Math.floor(i);if(!(t>=0))throw new RangeError(`invalid digits: ${i}`);e=t}return t},()=>new es(e)}function rs(t){return t.innerRadius}function ns(t){return t.outerRadius}function os(t){return t.startAngle}function as(t){return t.endAngle}function ss(t){return t&&t.padAngle}function ls(t,e,i,r,n,o,a){var s=t-i,l=e-r,c=(a?o:-o)/Wa(s*s+l*l),h=c*l,u=-c*s,d=t+h,f=e+u,p=i+h,g=r+u,m=(d+p)/2,y=(f+g)/2,x=p-d,C=g-f,b=x*x+C*C,_=n-o,v=d*g-p*f,k=(C<0?-1:1)*Wa(za(0,_*_*b-v*v)),T=(v*C-x*k)/b,w=(-v*x-C*k)/b,S=(v*C+x*k)/b,B=(-v*x+C*k)/b,F=T-m,A=w-y,L=S-m,M=B-y;return F*F+A*A>L*L+M*M&&(T=S,w=B),{cx:T,cy:w,x01:-h,y01:-u,x11:T*(n/_-1),y11:w*(n/_-1)}}function cs(){var t=rs,e=ns,i=ja(0),r=null,n=os,o=as,a=ss,s=null,l=is(c);function c(){var c,h,u,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=n.apply(this,arguments)-Ya,g=o.apply(this,arguments)-Ya,m=qa(g-p),y=g>p;if(s||(s=c=l()),f<d&&(h=f,f=d,d=h),f>Ha)if(m>Va-Ha)s.moveTo(f*$a(p),f*Ra(p)),s.arc(0,0,f,p,g,!y),d>Ha&&(s.moveTo(d*$a(g),d*Ra(g)),s.arc(0,0,d,g,p,y));else{var x,C,b=p,_=g,v=p,k=g,T=m,w=m,S=a.apply(this,arguments)/2,B=S>Ha&&(r?+r.apply(this,arguments):Wa(d*d+f*f)),F=Pa(qa(f-d)/2,+i.apply(this,arguments)),A=F,L=F;if(B>Ha){var M=Ga(B/d*Ra(S)),E=Ga(B/f*Ra(S));(T-=2*M)>Ha?(v+=M*=y?1:-1,k-=M):(T=0,v=k=(p+g)/2),(w-=2*E)>Ha?(b+=E*=y?1:-1,_-=E):(w=0,b=_=(p+g)/2)}var Z=f*$a(b),N=f*Ra(b),O=d*$a(k),I=d*Ra(k);if(F>Ha){var j,q=f*$a(_),D=f*Ra(_),$=d*$a(v),z=d*Ra(v);if(m<Ua)if(j=function(t,e,i,r,n,o,a,s){var l=i-t,c=r-e,h=a-n,u=s-o,d=u*l-h*c;if(!(d*d<Ha))return[t+(d=(h*(e-o)-u*(t-n))/d)*l,e+d*c]}(Z,N,$,z,q,D,O,I)){var P=Z-j[0],R=N-j[1],W=q-j[0],H=D-j[1],U=1/Ra(((u=(P*W+R*H)/(Wa(P*P+R*R)*Wa(W*W+H*H)))>1?0:u<-1?Ua:Math.acos(u))/2),Y=Wa(j[0]*j[0]+j[1]*j[1]);A=Pa(F,(d-Y)/(U-1)),L=Pa(F,(f-Y)/(U+1))}else A=L=0}w>Ha?L>Ha?(x=ls($,z,Z,N,f,L,y),C=ls(q,D,O,I,f,L,y),s.moveTo(x.cx+x.x01,x.cy+x.y01),L<F?s.arc(x.cx,x.cy,L,Da(x.y01,x.x01),Da(C.y01,C.x01),!y):(s.arc(x.cx,x.cy,L,Da(x.y01,x.x01),Da(x.y11,x.x11),!y),s.arc(0,0,f,Da(x.cy+x.y11,x.cx+x.x11),Da(C.cy+C.y11,C.cx+C.x11),!y),s.arc(C.cx,C.cy,L,Da(C.y11,C.x11),Da(C.y01,C.x01),!y))):(s.moveTo(Z,N),s.arc(0,0,f,b,_,!y)):s.moveTo(Z,N),d>Ha&&T>Ha?A>Ha?(x=ls(O,I,q,D,d,-A,y),C=ls(Z,N,$,z,d,-A,y),s.lineTo(x.cx+x.x01,x.cy+x.y01),A<F?s.arc(x.cx,x.cy,A,Da(x.y01,x.x01),Da(C.y01,C.x01),!y):(s.arc(x.cx,x.cy,A,Da(x.y01,x.x01),Da(x.y11,x.x11),!y),s.arc(0,0,d,Da(x.cy+x.y11,x.cx+x.x11),Da(C.cy+C.y11,C.cx+C.x11),y),s.arc(C.cx,C.cy,A,Da(C.y11,C.x11),Da(C.y01,C.x01),!y))):s.arc(0,0,d,k,v,y):s.lineTo(O,I)}else s.moveTo(0,0);if(s.closePath(),c)return s=null,c+""||null}return c.centroid=function(){var i=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+n.apply(this,arguments)+ +o.apply(this,arguments))/2-Ua/2;return[$a(r)*i,Ra(r)*i]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:ja(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:ja(+t),c):e},c.cornerRadius=function(t){return arguments.length?(i="function"==typeof t?t:ja(+t),c):i},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:ja(+t),c):r},c.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:ja(+t),c):n},c.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:ja(+t),c):o},c.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:ja(+t),c):a},c.context=function(t){return arguments.length?(s=null==t?null:t,c):s},c}es.prototype;Array.prototype.slice;function hs(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function us(t){this._context=t}function ds(t){return new us(t)}function fs(t){return t[0]}function ps(t){return t[1]}function gs(t,e){var i=ja(!0),r=null,n=ds,o=null,a=is(s);function s(s){var l,c,h,u=(s=hs(s)).length,d=!1;for(null==r&&(o=n(h=a())),l=0;l<=u;++l)!(l<u&&i(c=s[l],l,s))===d&&((d=!d)?o.lineStart():o.lineEnd()),d&&o.point(+t(c,l,s),+e(c,l,s));if(h)return o=null,h+""||null}return t="function"==typeof t?t:void 0===t?fs:ja(t),e="function"==typeof e?e:void 0===e?ps:ja(e),s.x=function(e){return arguments.length?(t="function"==typeof e?e:ja(+e),s):t},s.y=function(t){return arguments.length?(e="function"==typeof t?t:ja(+t),s):e},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:ja(!!t),s):i},s.curve=function(t){return arguments.length?(n=t,null!=r&&(o=n(r)),s):n},s.context=function(t){return arguments.length?(null==t?r=o=null:o=n(r=t),s):r},s}function ms(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function ys(t){return t}function xs(){var t=ys,e=ms,i=null,r=ja(0),n=ja(Va),o=ja(0);function a(a){var s,l,c,h,u,d=(a=hs(a)).length,f=0,p=new Array(d),g=new Array(d),m=+r.apply(this,arguments),y=Math.min(Va,Math.max(-Va,n.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,o.apply(this,arguments)),C=x*(y<0?-1:1);for(s=0;s<d;++s)(u=g[p[s]=s]=+t(a[s],s,a))>0&&(f+=u);for(null!=e?p.sort((function(t,i){return e(g[t],g[i])})):null!=i&&p.sort((function(t,e){return i(a[t],a[e])})),s=0,c=f?(y-d*C)/f:0;s<d;++s,m=h)l=p[s],h=m+((u=g[l])>0?u*c:0)+C,g[l]={data:a[l],index:s,value:u,startAngle:m,endAngle:h,padAngle:x};return g}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:ja(+e),a):t},a.sortValues=function(t){return arguments.length?(e=t,i=null,a):e},a.sort=function(t){return arguments.length?(i=t,e=null,a):i},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:ja(+t),a):r},a.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:ja(+t),a):n},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:ja(+t),a):o},a}function Cs(){}function bs(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function _s(t){this._context=t}function vs(t){return new _s(t)}function ks(t){this._context=t}function Ts(t){return new ks(t)}function ws(t){this._context=t}function Ss(t){return new ws(t)}us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},_s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:bs(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ks.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ws.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Bs{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Fs(t){return new Bs(t,!0)}function As(t){return new Bs(t,!1)}function Ls(t,e){this._basis=new _s(t),this._beta=e}Ls.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r,n=t[0],o=e[0],a=t[i]-n,s=e[i]-o,l=-1;++l<=i;)r=l/i,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+r*a),this._beta*e[l]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Ms=function t(e){function i(t){return 1===e?new _s(t):new Ls(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function Es(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function Zs(t,e){this._context=t,this._k=(1-e)/6}Zs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Es(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ns=function t(e){function i(t){return new Zs(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Os(t,e){this._context=t,this._k=(1-e)/6}Os.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Is=function t(e){function i(t){return new Os(t,e)}return i.tension=function(e){return t(+e)},i}(0);function js(t,e){this._context=t,this._k=(1-e)/6}js.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qs=function t(e){function i(t){return new js(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ds(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Ha){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Ha){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-e*t._l12_2a)/h,a=(a*c+t._y1*t._l23_2a-i*t._l12_2a)/h}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function $s(t,e){this._context=t,this._alpha=e}$s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Ds(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const zs=function t(e){function i(t){return e?new $s(t,e):new Zs(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ps(t,e){this._context=t,this._alpha=e}Ps.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Ds(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Rs=function t(e){function i(t){return e?new Ps(t,e):new Os(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ws(t,e){this._context=t,this._alpha=e}Ws.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ds(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Hs=function t(e){function i(t){return e?new Ws(t,e):new js(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Us(t){this._context=t}function Ys(t){return new Us(t)}function Vs(t){return t<0?-1:1}function Gs(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Vs(o)+Vs(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Xs(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Qs(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function Js(t){this._context=t}function Ks(t){this._context=new tl(t)}function tl(t){this._context=t}function el(t){return new Js(t)}function il(t){return new Ks(t)}function rl(t){this._context=t}function nl(t){var e,i,r=t.length-1,n=new Array(r),o=new Array(r),a=new Array(r);for(n[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e<r-1;++e)n[e]=1,o[e]=4,a[e]=4*t[e]+2*t[e+1];for(n[r-1]=2,o[r-1]=7,a[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)i=n[e]/o[e-1],o[e]-=i,a[e]-=i*a[e-1];for(n[r-1]=a[r-1]/o[r-1],e=r-2;e>=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[r-1]=(t[r]+n[r-1])/2,e=0;e<r-1;++e)o[e]=2*t[e+1]-n[e+1];return[n,o]}function ol(t){return new rl(t)}function al(t,e){this._context=t,this._t=e}function sl(t){return new al(t,.5)}function ll(t){return new al(t,0)}function cl(t){return new al(t,1)}function hl(t,e,i){this.k=t,this.x=e,this.y=i}Us.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Js.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Qs(this,this._t0,Xs(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Qs(this,Xs(this,i=Gs(this,t,e)),i);break;default:Qs(this,this._t0,i=Gs(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}},(Ks.prototype=Object.create(Js.prototype)).point=function(t,e){Js.prototype.point.call(this,e,t)},tl.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}},rl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===i)this._context.lineTo(t[1],e[1]);else for(var r=nl(t),n=nl(e),o=0,a=1;a<i;++o,++a)this._context.bezierCurveTo(r[0][o],n[0][o],r[1][o],n[1][o],t[a],e[a]);(this._line||0!==this._line&&1===i)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},al.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}}this._x=t,this._y=e}},hl.prototype={constructor:hl,scale:function(t){return 1===t?this:new hl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new hl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new hl(1,0,0);hl.prototype},21883:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(61691),n=i(82142);const o=class{constructor(){this.type=n.w.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=n.w.ALL}is(t){return this.type===t}};const a=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new o}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=n.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.Z.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.Z.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.Z.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.Z.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.w.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},71610:(t,e,i)=>{"use strict";i.d(e,{Z:()=>g});var r=i(21883),n=i(82142);const o={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(o.re);if(!e)return;const i=e[1],n=parseInt(i,16),a=i.length,s=a%4==0,l=a>4,c=l?1:17,h=l?8:4,u=s?0:-1,d=l?255:15;return r.Z.set({r:(n>>h*(u+3)&d)*c,g:(n>>h*(u+2)&d)*c,b:(n>>h*(u+1)&d)*c,a:s?(n&d)*c/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}${n.Q[Math.round(255*o)]}`:`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}`}},a=o;var s=i(61691);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,i]=e;switch(i){case"grad":return s.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return s.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.Z.channel.clamp.h(360*parseFloat(t))}}return s.Z.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const i=t.match(l.re);if(!i)return;const[,n,o,a,c,h]=i;return r.Z.set({h:l._hue2deg(n),s:s.Z.channel.clamp.s(parseFloat(o)),l:s.Z.channel.clamp.l(parseFloat(a)),a:c?s.Z.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%, ${n})`:`hsl(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%)`}},c=l,h={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return a.parse(e)},stringify:t=>{const e=a.stringify(t);for(const i in h.colors)if(h.colors[i]===e)return i}},u=h,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const i=t.match(d.re);if(!i)return;const[,n,o,a,l,c,h,u,f]=i;return r.Z.set({r:s.Z.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:s.Z.channel.clamp.g(l?2.55*parseFloat(a):parseFloat(a)),b:s.Z.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.Z.channel.clamp.a(f?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)}, ${s.Z.lang.round(n)})`:`rgb(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)})`}},f=d,p={format:{keyword:h,hex:a,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=a.parse(t)||f.parse(t)||c.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(n.w.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?f.stringify(t):a.stringify(t)},g=p},82142:(t,e,i)=>{"use strict";i.d(e,{Q:()=>n,w:()=>o});var r=i(61691);const n={};for(let a=0;a<=255;a++)n[a]=r.Z.unit.dec2hex(a);const o={ALL:0,RGB:1,HSL:2}},26174:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(61691),n=i(71610);const o=(t,e,i)=>{const o=n.Z.parse(t),a=o[e],s=r.Z.channel.clamp[e](a+i);return a!==s&&(o[e]=s),n.Z.stringify(o)}},49807:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(61691),n=i(71610);const o=(t,e)=>{const i=n.Z.parse(t);for(const n in e)i[n]=r.Z.channel.clamp[n](e[n]);return n.Z.stringify(i)}},7201:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(26174);const n=(t,e)=>(0,r.Z)(t,"l",-e)},91619:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(61691),n=i(71610);const o=t=>{const{r:e,g:i,b:o}=n.Z.parse(t),a=.2126*r.Z.channel.toLinear(e)+.7152*r.Z.channel.toLinear(i)+.0722*r.Z.channel.toLinear(o);return r.Z.lang.round(a)},a=t=>o(t)>=.5,s=t=>!a(t)},12281:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(26174);const n=(t,e)=>(0,r.Z)(t,"l",e)},51117:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(61691),n=i(21883),o=i(71610),a=i(49807);const s=(t,e,i=0,s=1)=>{if("number"!=typeof t)return(0,a.Z)(t,{a:e});const l=n.Z.set({r:r.Z.channel.clamp.r(t),g:r.Z.channel.clamp.g(e),b:r.Z.channel.clamp.b(i),a:r.Z.channel.clamp.a(s)});return o.Z.stringify(l)}},61691:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});const r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},n)=>{if(!e)return 2.55*i;t/=360,e/=100;const o=(i/=100)<.5?i*(1+e):i+e-i*e,a=2*i-o;switch(n){case"r":return 255*r.hue2rgb(a,o,t+1/3);case"g":return 255*r.hue2rgb(a,o,t);case"b":return 255*r.hue2rgb(a,o,t-1/3)}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if("l"===r)return 100*a;if(n===o)return 0;const s=n-o;if("s"===r)return 100*(a>.5?s/(2-n-o):s/(n+o));switch(n){case t:return 60*((e-i)/s+(e<i?6:0));case e:return 60*((i-t)/s+2);case i:return 60*((t-e)/s+4);default:return-1}}},n={channel:r,lang:{clamp:(t,e,i)=>e>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},67308:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});const r=function(){this.__data__=[],this.size=0};var n=i(79651);const o=function(t,e){for(var i=t.length;i--;)if((0,n.Z)(t[i][0],e))return i;return-1};var a=Array.prototype.splice;const s=function(t){var e=this.__data__,i=o(e,t);return!(i<0)&&(i==e.length-1?e.pop():a.call(e,i,1),--this.size,!0)};const l=function(t){var e=this.__data__,i=o(e,t);return i<0?void 0:e[i][1]};const c=function(t){return o(this.__data__,t)>-1};const h=function(t,e){var i=this.__data__,r=o(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=s,u.prototype.get=l,u.prototype.has=c,u.prototype.set=h;const d=u},86183:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"Map")},37834:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});const r=(0,i(62508).Z)(Object,"create");const n=function(){this.__data__=r?r(null):{},this.size=0};const o=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var a=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(r){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return a.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const c=function(t){var e=this.__data__;return r?void 0!==e[t]:l.call(e,t)};const h=function(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=s,u.prototype.has=c,u.prototype.set=h;const d=u;var f=i(67308),p=i(86183);const g=function(){this.size=0,this.__data__={hash:new d,map:new(p.Z||f.Z),string:new d}};const m=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const y=function(t,e){var i=t.__data__;return m(e)?i["string"==typeof e?"string":"hash"]:i.map};const x=function(t){var e=y(this,t).delete(t);return this.size-=e?1:0,e};const C=function(t){return y(this,t).get(t)};const b=function(t){return y(this,t).has(t)};const _=function(t,e){var i=y(this,t),r=i.size;return i.set(t,e),this.size+=i.size==r?0:1,this};function v(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}v.prototype.clear=g,v.prototype.delete=x,v.prototype.get=C,v.prototype.has=b,v.prototype.set=_;const k=v},93203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"Set")},31667:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(67308);const n=function(){this.__data__=new r.Z,this.size=0};const o=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};const a=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=i(86183),c=i(37834);const h=function(t,e){var i=this.__data__;if(i instanceof r.Z){var n=i.__data__;if(!l.Z||n.length<199)return n.push([t,e]),this.size=++i.size,this;i=this.__data__=new c.Z(n)}return i.set(t,e),this.size=i.size,this};function u(t){var e=this.__data__=new r.Z(t);this.size=e.size}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=h;const d=u},17685:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(66092).Z.Symbol},84073:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(66092).Z.Uint8Array},87668:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});const r=function(t,e){for(var i=-1,r=Array(t);++i<t;)r[i]=e(i);return r};var n=i(29169),o=i(27771),a=i(77008),s=i(56009),l=i(18843),c=Object.prototype.hasOwnProperty;const h=function(t,e){var i=(0,o.Z)(t),h=!i&&(0,n.Z)(t),u=!i&&!h&&(0,a.Z)(t),d=!i&&!h&&!u&&(0,l.Z)(t),f=i||h||u||d,p=f?r(t.length,String):[],g=p.length;for(var m in t)!e&&!c.call(t,m)||f&&("length"==m||u&&("offset"==m||"parent"==m)||d&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||(0,s.Z)(m,g))||p.push(m);return p}},72954:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(74752),n=i(79651),o=Object.prototype.hasOwnProperty;const a=function(t,e,i){var a=t[e];o.call(t,e)&&(0,n.Z)(a,i)&&(void 0!==i||e in t)||(0,r.Z)(t,e,i)}},74752:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(77904);const n=function(t,e,i){"__proto__"==e&&r.Z?(0,r.Z)(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}},61395:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e,i,r){for(var n=-1,o=Object(e),a=r(e),s=a.length;s--;){var l=a[t?s:++n];if(!1===i(o[l],l,o))break}return e}}()},93589:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(17685),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,s=r.Z?r.Z.toStringTag:void 0;const l=function(t){var e=o.call(t,s),i=t[s];try{t[s]=void 0;var r=!0}catch(l){}var n=a.call(t);return r&&(e?t[s]=i:delete t[s]),n};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=r.Z?r.Z.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},39473:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(72764);const n=(0,i(1851).Z)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const a=function(t){if(!(0,r.Z)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},69581:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(69203),n=i(81211),o=i(27227);const a=function(t,e){return(0,o.Z)((0,n.Z)(t,e,r.Z),t+"")}},21162:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e){return t(e)}}},41884:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(84073);const n=function(t){var e=new t.constructor(t.byteLength);return new r.Z(e).set(new r.Z(t)),e}},91050:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(66092),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n?r.Z.Buffer:void 0,s=a?a.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var i=t.length,r=s?s(i):new t.constructor(i);return t.copy(r),r}},12701:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(41884);const n=function(t,e){var i=e?(0,r.Z)(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}},87215:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){var i=-1,r=t.length;for(e||(e=Array(r));++i<r;)e[i]=t[i];return e}},31899:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(72954),n=i(74752);const o=function(t,e,i,o){var a=!i;i||(i={});for(var s=-1,l=e.length;++s<l;){var c=e[s],h=o?o(i[c],t[c],c,i,t):void 0;void 0===h&&(h=t[c]),a?(0,n.Z)(i,c,h):(0,r.Z)(i,c,h)}return i}},77904:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(62508);const n=function(){try{var t=(0,r.Z)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},13413:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},62508:(t,e,i)=>{"use strict";i.d(e,{Z:()=>x});var r=i(73234);const n=i(66092).Z["__core-js_shared__"];var o,a=(o=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";const s=function(t){return!!a&&a in t};var l=i(77226),c=i(90019),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,f=u.toString,p=d.hasOwnProperty,g=RegExp("^"+f.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.Z)(t)||s(t))&&((0,r.Z)(t)?g:h).test((0,c.Z)(t))};const y=function(t,e){return null==t?void 0:t[e]};const x=function(t,e){var i=y(t,e);return m(i)?i:void 0}},12513:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=(0,i(1851).Z)(Object.getPrototypeOf,Object)},83970:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"DataView");var a=i(86183);const s=(0,r.Z)(n.Z,"Promise");var l=i(93203);const c=(0,r.Z)(n.Z,"WeakMap");var h=i(93589),u=i(90019),d="[object Map]",f="[object Promise]",p="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.Z)(o),x=(0,u.Z)(a.Z),C=(0,u.Z)(s),b=(0,u.Z)(l.Z),_=(0,u.Z)(c),v=h.Z;(o&&v(new o(new ArrayBuffer(1)))!=m||a.Z&&v(new a.Z)!=d||s&&v(s.resolve())!=f||l.Z&&v(new l.Z)!=p||c&&v(new c)!=g)&&(v=function(t){var e=(0,h.Z)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.Z)(i):"";if(r)switch(r){case y:return m;case x:return d;case C:return f;case b:return p;case _:return g}return e});const k=v},73658:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(77226),n=Object.create;const o=function(){function t(){}return function(e){if(!(0,r.Z)(e))return{};if(n)return n(e);t.prototype=e;var i=new t;return t.prototype=void 0,i}}();var a=i(12513),s=i(72764);const l=function(t){return"function"!=typeof t.constructor||(0,s.Z)(t)?{}:o((0,a.Z)(t))}},56009:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=/^(?:0|[1-9]\d*)$/;const n=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&r.test(t))&&t>-1&&t%1==0&&t<e}},50439:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(79651),n=i(50585),o=i(56009),a=i(77226);const s=function(t,e,i){if(!(0,a.Z)(i))return!1;var s=typeof e;return!!("number"==s?(0,n.Z)(i)&&(0,o.Z)(e,i.length):"string"==s&&e in i)&&(0,r.Z)(i[e],t)}},72764:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},98351:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(13413),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n&&r.Z.process;const s=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}()},1851:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},81211:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});const r=function(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)};var n=Math.max;const o=function(t,e,i){return e=n(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=n(o.length-e,0),l=Array(s);++a<s;)l[a]=o[e+a];a=-1;for(var c=Array(e+1);++a<e;)c[a]=o[a];return c[e]=i(l),r(t,this,c)}}},66092:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(13413),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.Z||n||Function("return this")()},27227:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(62002),n=i(77904),o=i(69203);const a=n.Z?function(t,e){return(0,n.Z)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.Z)(e),writable:!0})}:o.Z;var s=Date.now;const l=function(t){var e=0,i=0;return function(){var r=s(),n=16-(r-i);if(i=r,n>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(a)},90019:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Function.prototype.toString;const n=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},62002:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(){return t}}},79651:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},69203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return t}},29169:(t,e,i)=>{"use strict";i.d(e,{Z:()=>c});var r=i(93589),n=i(18533);const o=function(t){return(0,n.Z)(t)&&"[object Arguments]"==(0,r.Z)(t)};var a=Object.prototype,s=a.hasOwnProperty,l=a.propertyIsEnumerable;const c=o(function(){return arguments}())?o:function(t){return(0,n.Z)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},27771:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=Array.isArray},50585:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(73234),n=i(1656);const o=function(t){return null!=t&&(0,n.Z)(t.length)&&!(0,r.Z)(t)}},836:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(50585),n=i(18533);const o=function(t){return(0,n.Z)(t)&&(0,r.Z)(t)}},77008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(66092);const n=function(){return!1};var o="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=o&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===o?r.Z.Buffer:void 0;const l=(s?s.isBuffer:void 0)||n},79697:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(39473),n=i(83970),o=i(29169),a=i(27771),s=i(50585),l=i(77008),c=i(72764),h=i(18843),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.Z)(t)&&((0,a.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.Z)(t)||(0,h.Z)(t)||(0,o.Z)(t)))return!t.length;var e=(0,n.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.Z)(t))return!(0,r.Z)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},73234:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(93589),n=i(77226);const o=function(t){if(!(0,n.Z)(t))return!1;var e=(0,r.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},77226:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},18533:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},37514:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(93589),n=i(12513),o=i(18533),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,h=l.call(Object);const u=function(t){if(!(0,o.Z)(t)||"[object Object]"!=(0,r.Z)(t))return!1;var e=(0,n.Z)(t);if(null===e)return!0;var i=c.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&l.call(i)==h}},18843:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(93589),n=i(1656),o=i(18533),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1;const s=function(t){return(0,o.Z)(t)&&(0,n.Z)(t.length)&&!!a[(0,r.Z)(t)]};var l=i(21162),c=i(98351),h=c.Z&&c.Z.isTypedArray;const u=h?(0,l.Z)(h):s},32957:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});var r=i(87668),n=i(77226),o=i(72764);const a=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,n.Z)(t))return a(t);var e=(0,o.Z)(t),i=[];for(var r in t)("constructor"!=r||!e&&s.call(t,r))&&i.push(r);return i};var c=i(50585);const h=function(t){return(0,c.Z)(t)?(0,r.Z)(t,!0):l(t)}},42454:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(37834);function n(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],o=i.cache;if(o.has(n))return o.get(n);var a=t.apply(this,r);return i.cache=o.set(n,a)||o,a};return i.cache=new(n.Cache||r.Z),i}n.Cache=r.Z;const o=n},59236:(t,e,i)=>{"use strict";i.d(e,{Z:()=>F});var r=i(31667),n=i(74752),o=i(79651);const a=function(t,e,i){(void 0!==i&&!(0,o.Z)(t[e],i)||void 0===i&&!(e in t))&&(0,n.Z)(t,e,i)};var s=i(61395),l=i(91050),c=i(12701),h=i(87215),u=i(73658),d=i(29169),f=i(27771),p=i(836),g=i(77008),m=i(73234),y=i(77226),x=i(37514),C=i(18843);const b=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var _=i(31899),v=i(32957);const k=function(t){return(0,_.Z)(t,(0,v.Z)(t))};const T=function(t,e,i,r,n,o,s){var _=b(t,i),v=b(e,i),T=s.get(v);if(T)a(t,i,T);else{var w=o?o(_,v,i+"",t,e,s):void 0,S=void 0===w;if(S){var B=(0,f.Z)(v),F=!B&&(0,g.Z)(v),A=!B&&!F&&(0,C.Z)(v);w=v,B||F||A?(0,f.Z)(_)?w=_:(0,p.Z)(_)?w=(0,h.Z)(_):F?(S=!1,w=(0,l.Z)(v,!0)):A?(S=!1,w=(0,c.Z)(v,!0)):w=[]:(0,x.Z)(v)||(0,d.Z)(v)?(w=_,(0,d.Z)(_)?w=k(_):(0,y.Z)(_)&&!(0,m.Z)(_)||(w=(0,u.Z)(v))):S=!1}S&&(s.set(v,w),n(w,v,r,o,s),s.delete(v)),a(t,i,w)}};const w=function t(e,i,n,o,l){e!==i&&(0,s.Z)(i,(function(s,c){if(l||(l=new r.Z),(0,y.Z)(s))T(e,i,c,n,t,o,l);else{var h=o?o(b(e,c),s,c+"",e,i,l):void 0;void 0===h&&(h=s),a(e,c,h)}}),v.Z)};var S=i(69581),B=i(50439);const F=function(t){return(0,S.Z)((function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&"function"==typeof o?(n--,o):void 0,a&&(0,B.Z)(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var s=i[r];s&&t(e,s,r,o)}return e}))}((function(t,e,i){w(t,e,i)}))},85322:(t,e,i)=>{"use strict";i.d(e,{A:()=>It,B:()=>me,C:()=>ge,D:()=>Ft,E:()=>Be,F:()=>er,G:()=>oe,H:()=>ht,I:()=>Mi,J:()=>Dn,K:()=>Si,L:()=>to,Z:()=>Gt,a:()=>ki,b:()=>vi,c:()=>Ai,d:()=>ft,e:()=>_t,f:()=>Vt,g:()=>_i,h:()=>ue,i:()=>ui,j:()=>he,k:()=>re,l:()=>st,m:()=>mt,n:()=>Kt,o:()=>di,p:()=>Li,q:()=>Ti,r:()=>wi,s:()=>bi,t:()=>Ci,u:()=>ye,v:()=>yt,w:()=>le,x:()=>ae,y:()=>Zi,z:()=>qi});var r=i(18464),n=i(27484),o=i(17967),a=i(64218),s=i(27856),l=i(71610),c=i(49807);const h=(t,e)=>{const i=l.Z.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return(0,c.Z)(t,r)};var u=i(51117);const d=(t,e,i=50)=>{const{r:r,g:n,b:o,a:a}=l.Z.parse(t),{r:s,g:c,b:h,a:d}=l.Z.parse(e),f=i/100,p=2*f-1,g=a-d,m=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,y=1-m,x=r*m+s*y,C=n*m+c*y,b=o*m+h*y,_=a*f+d*(1-f);return(0,u.Z)(x,C,b,_)},f=(t,e=100)=>{const i=l.Z.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,d(i,t,e)};var p=i(7201),g=i(12281),m=i(91619),y=i(42454),x=i(59236),C="comm",b="rule",_="decl",v=Math.abs,k=String.fromCharCode;Object.assign;function T(t){return t.trim()}function w(t,e,i){return t.replace(e,i)}function S(t,e,i){return t.indexOf(e,i)}function B(t,e){return 0|t.charCodeAt(e)}function F(t,e,i){return t.slice(e,i)}function A(t){return t.length}function L(t,e){return e.push(t),t}function M(t,e){for(var i="",r=0;r<t.length;r++)i+=e(t[r],r,t,e)||"";return i}function E(t,e,i,r){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case _:return t.return=t.return||t.value;case C:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,r)+"}";case b:if(!A(t.value=t.props.join(",")))return""}return A(i=M(t.children,r))?t.return=t.value+"{"+i+"}":""}var Z=1,N=1,O=0,I=0,j=0,q="";function D(t,e,i,r,n,o,a,s){return{value:t,root:e,parent:i,type:r,props:n,children:o,line:Z,column:N,length:a,return:"",siblings:s}}function $(){return j=I>0?B(q,--I):0,N--,10===j&&(N=1,Z--),j}function z(){return j=I<O?B(q,I++):0,N++,10===j&&(N=1,Z++),j}function P(){return B(q,I)}function R(){return I}function W(t,e){return F(q,t,e)}function H(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function U(t){return Z=N=1,O=A(q=t),I=0,[]}function Y(t){return q="",t}function V(t){return T(W(I-1,Q(91===t?t+2:40===t?t+1:t)))}function G(t){for(;(j=P())&&j<33;)z();return H(t)>2||H(j)>3?"":" "}function X(t,e){for(;--e&&z()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return W(t,R()+(e<6&&32==P()&&32==z()))}function Q(t){for(;z();)switch(j){case t:return I;case 34:case 39:34!==t&&39!==t&&Q(j);break;case 40:41===t&&Q(t);break;case 92:z()}return I}function J(t,e){for(;z()&&t+j!==57&&(t+j!==84||47!==P()););return"/*"+W(e,I-1)+"*"+k(47===t?t:z())}function K(t){for(;!H(P());)z();return W(t,I)}function tt(t){return Y(et("",null,null,null,[""],t=U(t),0,[0],t))}function et(t,e,i,r,n,o,a,s,l){for(var c=0,h=0,u=a,d=0,f=0,p=0,g=1,m=1,y=1,x=0,C="",b=n,_=o,T=r,F=C;m;)switch(p=x,x=z()){case 40:if(108!=p&&58==B(F,u-1)){-1!=S(F+=w(V(x),"&","&\f"),"&\f",v(c?s[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:F+=V(x);break;case 9:case 10:case 13:case 32:F+=G(p);break;case 92:F+=X(R()-1,7);continue;case 47:switch(P()){case 42:case 47:L(rt(J(z(),R()),e,i,l),l);break;default:F+="/"}break;case 123*g:s[c++]=A(F)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(F=w(F,/\f/g,"")),f>0&&A(F)-u&&L(f>32?nt(F+";",r,i,u-1,l):nt(w(F," ","")+";",r,i,u-2,l),l);break;case 59:F+=";";default:if(L(T=it(F,e,i,c,h,n,s,C,b=[],_=[],u,o),o),123===x)if(0===h)et(F,e,T,T,b,o,u,s,_);else switch(99===d&&110===B(F,3)?100:d){case 100:case 108:case 109:case 115:et(t,T,T,r&&L(it(t,T,T,0,0,n,s,C,n,b=[],u,_),_),n,_,u,s,r?b:_);break;default:et(F,T,T,T,[""],_,0,s,_)}}c=h=f=0,g=y=1,C=F="",u=a;break;case 58:u=1+A(F),f=p;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==$())continue;switch(F+=k(x),x*g){case 38:y=h>0?1:(F+="\f",-1);break;case 44:s[c++]=(A(F)-1)*y,y=1;break;case 64:45===P()&&(F+=V(z())),d=P(),h=u=A(C=F+=K(R())),x++;break;case 45:45===p&&2==A(F)&&(g=0)}}return o}function it(t,e,i,r,n,o,a,s,l,c,h,u){for(var d=n-1,f=0===n?o:[""],p=function(t){return t.length}(f),g=0,m=0,y=0;g<r;++g)for(var x=0,C=F(t,d+1,d=v(m=a[g])),_=t;x<p;++x)(_=T(m>0?f[x]+" "+C:w(C,/&\f/g,f[x])))&&(l[y++]=_);return D(t,e,i,0===n?b:s,l,c,h,u)}function rt(t,e,i,r){return D(t,e,i,C,k(j),F(t,2,-2),0,r)}function nt(t,e,i,r,n){return D(t,e,i,_,F(t,0,r),F(t,r+1,-1),r,n)}var ot=i(79697);const at={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},st={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},lt=function(t="fatal"){let e=at.fatal;"string"==typeof t?(t=t.toLowerCase())in at&&(e=at[t]):"number"==typeof t&&(e=t),st.trace=()=>{},st.debug=()=>{},st.info=()=>{},st.warn=()=>{},st.error=()=>{},st.fatal=()=>{},e<=at.fatal&&(st.fatal=console.error?console.error.bind(console,ct("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",ct("FATAL"))),e<=at.error&&(st.error=console.error?console.error.bind(console,ct("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",ct("ERROR"))),e<=at.warn&&(st.warn=console.warn?console.warn.bind(console,ct("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",ct("WARN"))),e<=at.info&&(st.info=console.info?console.info.bind(console,ct("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",ct("INFO"))),e<=at.debug&&(st.debug=console.debug?console.debug.bind(console,ct("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("DEBUG"))),e<=at.trace&&(st.trace=console.debug?console.debug.bind(console,ct("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("TRACE")))},ct=t=>`%c${n().format("ss.SSS")} : ${t} : `,ht=/<br\s*\/?>/gi,ut=t=>s.sanitize(t),dt=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=ut(t):"loose"!==i&&(t=(t=(t=gt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=pt(t))}return t},ft=(t,e)=>t?t=e.dompurifyConfig?s.sanitize(dt(t,e),e.dompurifyConfig).toString():s.sanitize(dt(t,e),{FORBID_TAGS:["style"]}).toString():t,pt=t=>t.replace(/#br#/g,"<br/>"),gt=t=>t.replace(ht,"#br#"),mt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),yt=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r<e.length;r++){let t=e[r];if(","===t&&r>0&&r+1<e.length){const n=e[r-1],o=e[r+1];Ct(n,o)&&(t=n+","+o,r++,i.pop())}i.push(bt(t))}return i.join("")},xt=(t,e)=>Math.max(0,t.split(e).length-1),Ct=(t,e)=>{const i=xt(t,"~"),r=xt(e,"~");return 1===i&&1===r},bt=t=>{const e=xt(t,"~");let i=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;-1!==n&&-1!==o&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},_t={getRows:t=>{if(!t)return[""];return gt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:ft,sanitizeTextOrArray:(t,e)=>"string"==typeof t?ft(t,e):t.flat().map((t=>ft(t,e))),hasBreaks:t=>ht.test(t),splitBreaks:t=>t.split(ht),lineBreakRegex:ht,removeScript:ut,getUrl:t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},evaluate:mt,getMax:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.max(...e)},getMin:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.min(...e)}},vt=(t,e)=>h(t,e?{s:-40,l:10}:{s:-40,l:-10}),kt="#ffffff",Tt="#f2f2f2";let wt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||h(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||h(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||vt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||vt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||f(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||f(this.tertiaryColor),this.lineColor=this.lineColor||f(this.background),this.arrowheadColor=this.arrowheadColor||f(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,p.Z)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||f(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,g.Z)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.darkMode)for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],75);else for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],25);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;const d=this.darkMode?-4:-1;for(let f=0;f<5;f++)this["surface"+f]=this["surface"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(5+3*f)}),this["surfacePeer"+f]=this["surfacePeer"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(8+3*f)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||h(this.primaryColor,{h:64}),this.fillType3=this.fillType3||h(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||h(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||h(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||h(this.primaryColor,{h:128}),this.fillType7=this.fillType7||h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-10}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let St=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,g.Z)(this.primaryColor,16),this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,g.Z)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=(0,u.Z)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,p.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,p.Z)(this.sectionBkgColor,10),this.taskBorderColor=(0,u.Z)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,u.Z)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.Z)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,g.Z)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,g.Z)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10);for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-10)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,g.Z)(this.secondaryColor,20),this.git1=(0,g.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,g.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,g.Z)(this.pie4||h(this.primaryColor,{h:-30}),20),this.git4=(0,g.Z)(this.pie5||h(this.primaryColor,{h:-60}),20),this.git5=(0,g.Z)(this.pie6||h(this.primaryColor,{h:-90}),10),this.git6=(0,g.Z)(this.pie7||h(this.primaryColor,{h:60}),10),this.git7=(0,g.Z)(this.pie8||h(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,g.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,g.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Bt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=h(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=(0,u.Z)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,l:-(7+5*d)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||f(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||f(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,g.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||h(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||h(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,p.Z)(f(this.git0),25),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};const Ft=t=>{const e=new Bt;return e.calculate(t),e};let At=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,g.Z)("#cde498",10),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.primaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.actorBorder=(0,p.Z)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-30}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class Lt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,g.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.Z)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,g.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=(0,g.Z)(this.contrast,30),this.sectionBkgColor2=(0,g.Z)(this.contrast,30),this.taskBorderColor=(0,p.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,g.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,p.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,p.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||h(this.primaryColor,{h:-30}),this.git4=this.pie5||h(this.primaryColor,{h:-60}),this.git5=this.pie6||h(this.primaryColor,{h:-90}),this.git6=this.pie7||h(this.primaryColor,{h:60}),this.git7=this.pie8||h(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Mt={base:{getThemeVariables:t=>{const e=new wt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new St;return e.calculate(t),e}},default:{getThemeVariables:Ft},forest:{getThemeVariables:t=>{const e=new At;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new Lt;return e.calculate(t),e}}},Et={flowchart:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},theme:"default",maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,fontSize:16},Zt={...Et,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Mt.default.getThemeVariables(),sequence:{...Et.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Et.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Et.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Et.pie,useWidth:984},xyChart:{...Et.xyChart,useWidth:void 0},requirement:{...Et.requirement,useWidth:void 0},gitGraph:{...Et.gitGraph,useMaxWidth:!1},sankey:{...Et.sankey,useMaxWidth:!1}},Nt=(t,e="")=>Object.keys(t).reduce(((i,r)=>Array.isArray(t[r])?i:"object"==typeof t[r]&&null!==t[r]?[...i,e+r,...Nt(t[r],"")]:[...i,e+r]),[]),Ot=new Set(Nt(Zt,"")),It=Zt,jt=t=>{if(st.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach((t=>jt(t)));else{for(const e of Object.keys(t)){if(st.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Ot.has(e)||null==t[e]){st.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){st.debug("sanitizing object",e),jt(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(st.debug("sanitizing css option",e),t[e]=qt(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];(null==i?void 0:i.match)&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}st.debug("After sanitization",t)}},qt=t=>{let e=0,i=0;for(const r of t){if(e<i)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&i++}return e!==i?"{ /* ERROR: Unbalanced CSS */ }":t},Dt=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,$t=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,zt=/\s*%%.*\n/gm;class Pt extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}}const Rt={},Wt=function(t,e){t=t.replace(Dt,"").replace($t,"").replace(zt,"\n");for(const[i,{detector:r}]of Object.entries(Rt)){if(r(t,e))return i}throw new Pt(`No diagram type detected matching given configuration for text: ${t}`)},Ht=(...t)=>{for(const{id:e,detector:i,loader:r}of t)Ut(e,i,r)},Ut=(t,e,i)=>{Rt[t]?st.error(`Detector with key ${t} already exists`):Rt[t]={detector:e,loader:i},st.debug(`Detector with key ${t} added${i?" with loader":""}`)},Yt=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Yt(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||i<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(r||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Yt(t[n],e[n],{depth:i-1,clobber:r}))})),t)},Vt=Yt,Gt="\u200b",Xt={curveBasis:a.$0Z,curveBasisClosed:a.Dts,curveBasisOpen:a.WQY,curveBumpX:a.qpX,curveBumpY:a.u93,curveBundle:a.tFB,curveCardinalClosed:a.OvA,curveCardinalOpen:a.dCK,curveCardinal:a.YY7,curveCatmullRomClosed:a.fGX,curveCatmullRomOpen:a.$m7,curveCatmullRom:a.zgE,curveLinear:a.c_6,curveLinearClosed:a.fxm,curveMonotoneX:a.FdL,curveMonotoneY:a.ak_,curveNatural:a.SxZ,curveStep:a.eA_,curveStepAfter:a.jsv,curveStepBefore:a.iJ},Qt=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Jt=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${Qt.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),st.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=$t.exec(t));)if(r.index===$t.lastIndex&&$t.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const t=r[1]?r[1]:r[2],e=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:t,args:e})}return 0===n.length?{type:t,args:null}:1===n.length?n[0]:n}catch(i){return st.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}};function Kt(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Xt[i]??e}function te(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}const ee=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},ie=(t,e)=>{let i,r=e;for(const n of t){if(i){const t=te(n,i);if(t<r)r-=t;else{const e=r/t;if(e<=0)return i;if(e>=1)return{x:n.x,y:n.y};if(e>0&&e<1)return{x:ee((1-e)*i.x+e*n.x,5),y:ee((1-e)*i.y+e*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")};function re(t){let e="",i="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let ne=0;const oe=()=>(ne++,"id-"+Math.random().toString(36).substr(2,12)+"-"+ne);const ae=t=>function(t){let e="";const i="0123456789abcdef";for(let r=0;r<t;r++)e+=i.charAt(Math.floor(16*Math.random()));return e}(t.length),se=function(t,e){const i=e.text.replace(_t.lineBreakRegex," "),[,r]=ge(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),void 0!==e.class&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(i),n},le=(0,y.Z)(((t,e,i)=>{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},i),_t.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let o="";return r.forEach(((t,a)=>{const s=ue(`${t} `,i),l=ue(o,i);if(s>e){const{hyphenatedStrings:r,remainingWord:a}=ce(t,e,"-",i);n.push(o,...r),o=a}else l+s>=e?(n.push(o),o=t):o=[o,t].filter(Boolean).join(" ");a+1===r.length&&n.push(o)})),n.filter((t=>""!==t)).join(i.joinWith)}),((t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`)),ce=(0,y.Z)(((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach(((t,s)=>{const l=`${a}${t}`;if(ue(l,r)>=e){const t=s+1,e=n.length===t,r=`${l}${i}`;o.push(e?l:r),a=""}else a=l})),{hyphenatedStrings:o,remainingWord:a}}),((t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function he(t,e){return de(t,e).height}function ue(t,e){return de(t,e).width}const de=(0,y.Z)(((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=ge(i),s=["sans-serif",r],l=t.split(_t.lineBreakRegex),c=[],h=(0,a.Ys)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const a of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const i of l){const r={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""};r.text=i||Gt;const s=se(u,r).style("font-size",o).style("font-weight",n).style("font-family",a),l=(s._groups||s)[0][0].getBBox();if(0===l.width&&0===l.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,l.width)),t=Math.round(l.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}c.push(e)}u.remove();return c[isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let fe;function pe(t){return"str"in t}const ge=t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function me(t,e){return(0,x.Z)({},t,e)}const ye={assignWithDepth:Vt,wrapLabel:le,calculateTextHeight:he,calculateTextWidth:ue,calculateTextDimensions:de,cleanAndMerge:me,detectInit:function(t,e){const i=Jt(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));jt(t),r=Vt(r,[...t])}else r=i.args;if(!r)return;let n=Wt(t,e);const o="config";return void 0!==r[o]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[o],delete r[o]),r},detectDirective:Jt,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:Kt,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;return t.forEach((t=>{i+=te(t,e),e=t})),ie(t,i/2)}(t)},calcCardinalityPosition:(t,e,i)=>{st.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const r=ie(e,25),n=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),a={x:0,y:0};return a.x=Math.sin(o)*n+(e[0].x+r.x)/2,a.y=-Math.cos(o)*n+(e[0].y+r.y)/2,a},calcTerminalLabelPosition:function(t,e,i){const r=structuredClone(i);st.info("our points",r),"start_left"!==e&&"start_right"!==e&&r.reverse();const n=ie(r,25+t),o=10+.5*t,a=Math.atan2(r[0].y-n.y,r[0].x-n.x),s={x:0,y:0};return"start_left"===e?(s.x=Math.sin(a+Math.PI)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a+Math.PI)*o+(r[0].y+n.y)/2):"end_right"===e?(s.x=Math.sin(a-Math.PI)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a-Math.PI)*o+(r[0].y+n.y)/2-5):"end_left"===e?(s.x=Math.sin(a)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2-5):(s.x=Math.sin(a)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2),s},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,o.Nm)(i):i},getStylesFromArray:re,generateId:oe,random:ae,runFunc:(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a<r;a++)if(o=o[i[a]],!o)return void st.error(`Function name: ${t} not found in window`);o[n](...e)},entityDecode:function(t){return fe=fe||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),fe.innerHTML=t,unescape(fe.textContent)},insertTitle:(t,e,i,r)=>{var n;if(!r)return;const o=null==(n=t.node())?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},parseFontSize:ge,InitIDGenerator:class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}}},xe="10.6.1",Ce=Object.freeze(It);let be,_e=Vt({},Ce),ve=[],ke=Vt({},Ce);const Te=(t,e)=>{let i=Vt({},t),r={};for(const n of e)Fe(n),r=Vt(r,n);if(i=Vt(i,r),r.theme&&r.theme in Mt){const t=Vt({},be),e=Vt(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in Mt&&(i.themeVariables=Mt[i.theme].getThemeVariables(e))}return ke=i,Ze(ke),ke},we=()=>Vt({},_e),Se=t=>(Ze(t),Vt(ke,t),Be()),Be=()=>Vt({},ke),Fe=t=>{t&&(["secure",..._e.secure??[]].forEach((e=>{Object.hasOwn(t,e)&&(st.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{e.startsWith("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&Fe(t[e])})))},Ae=t=>{jt(t),!t.fontFamily||t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}),ve.push(t),Te(_e,ve)},Le=(t=_e)=>{ve=[],Te(t,ve)},Me={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Ee={},Ze=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(Ee[e="LAZY_LOAD_DEPRECATED"]||(st.warn(Me[e]),Ee[e]=!0)))},Ne={id:"c4",detector:t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),loader:async()=>{const{diagram:t}=await i.e(132).then(i.bind(i,70132));return{id:"c4",diagram:t}}},Oe="flowchart",Ie={id:Oe,detector:(t,e)=>{var i,r;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&/^\s*graph/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(8955),i.e(1763)]).then(i.bind(i,1763));return{id:Oe,diagram:t}}},je="flowchart-v2",qe={id:je,detector:(t,e)=>{var i,r,n;return"dagre-d3"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(!(!/^\s*graph/.test(t)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))||/^\s*flowchart/.test(t))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(8955),i.e(9893)]).then(i.bind(i,19893));return{id:je,diagram:t}}},De={id:"er",detector:t=>/^\s*erDiagram/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3343)]).then(i.bind(i,13343));return{id:"er",diagram:t}}},$e="gitGraph",ze={id:$e,detector:t=>/^\s*gitGraph/.test(t),loader:async()=>{const{diagram:t}=await i.e(3619).then(i.bind(i,13619));return{id:$e,diagram:t}}},Pe="gantt",Re={id:Pe,detector:t=>/^\s*gantt/.test(t),loader:async()=>{const{diagram:t}=await i.e(8016).then(i.bind(i,88016));return{id:Pe,diagram:t}}},We="info",He={id:We,detector:t=>/^\s*info/.test(t),loader:async()=>{const{diagram:t}=await i.e(5326).then(i.bind(i,45326));return{id:We,diagram:t}}},Ue={id:"pie",detector:t=>/^\s*pie/.test(t),loader:async()=>{const{diagram:t}=await i.e(2661).then(i.bind(i,12661));return{id:"pie",diagram:t}}},Ye="quadrantChart",Ve={id:Ye,detector:t=>/^\s*quadrantChart/.test(t),loader:async()=>{const{diagram:t}=await i.e(6648).then(i.bind(i,46648));return{id:Ye,diagram:t}}},Ge="xychart",Xe={id:Ge,detector:t=>/^\s*xychart-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(3076),i.e(2693)]).then(i.bind(i,32693));return{id:Ge,diagram:t}}},Qe="requirement",Je={id:Qe,detector:t=>/^\s*requirement(Diagram)?/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(6985)]).then(i.bind(i,66985));return{id:Qe,diagram:t}}},Ke="sequence",ti={id:Ke,detector:t=>/^\s*sequenceDiagram/.test(t),loader:async()=>{const{diagram:t}=await i.e(5790).then(i.bind(i,25790));return{id:Ke,diagram:t}}},ei="class",ii={id:ei,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)&&/^\s*classDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(4706),i.e(109)]).then(i.bind(i,109));return{id:ei,diagram:t}}},ri="classDiagram",ni={id:ri,detector:(t,e)=>{var i;return!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer))||/^\s*classDiagram-v2/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(4706),i.e(6255)]).then(i.bind(i,56255));return{id:ri,diagram:t}}},oi="state",ai={id:oi,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer)&&/^\s*stateDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(1504),i.e(2696)]).then(i.bind(i,72696));return{id:oi,diagram:t}}},si="stateDiagram",li={id:si,detector:(t,e)=>{var i;return!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(1504),i.e(5943)]).then(i.bind(i,45943));return{id:si,diagram:t}}},ci="journey",hi={id:ci,detector:t=>/^\s*journey/.test(t),loader:async()=>{const{diagram:t}=await i.e(2183).then(i.bind(i,52183));return{id:ci,diagram:t}}},ui=function(t,e,i,r){const n=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,i,r);!function(t,e){for(let i of e)t.attr(i[0],i[1])}(t,n)},di=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;st.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;st.info(`Graph bounds: ${s}x${l}`,t),s=o+2*i,l=a+2*i,st.info(`Calculated bounds: ${s}x${l}`),ui(e,l,s,r);const c=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",c)},fi={},pi=(t,e,i)=>{let r="";return t in fi&&fi[t]?r=fi[t](i):st.warn(`No theme found for ${t}`),` & {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n fill: ${i.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${i.errorBkgColor};\n }\n & .error-text {\n fill: ${i.errorTextColor};\n stroke: ${i.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${i.lineColor};\n stroke: ${i.lineColor};\n }\n & .marker.cross {\n stroke: ${i.lineColor};\n }\n\n & svg {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let gi="",mi="",yi="";const xi=t=>ft(t,Be()),Ci=()=>{gi="",yi="",mi=""},bi=t=>{gi=xi(t).replace(/^\s+/g,"")},_i=()=>gi,vi=t=>{yi=xi(t).replace(/\n\s+/g,"\n")},ki=()=>yi,Ti=t=>{mi=xi(t)},wi=()=>mi,Si=Object.freeze(Object.defineProperty({__proto__:null,clear:Ci,getAccDescription:ki,getAccTitle:_i,getDiagramTitle:wi,setAccDescription:vi,setAccTitle:bi,setDiagramTitle:Ti},Symbol.toStringTag,{value:"Module"})),Bi=st,Fi=lt,Ai=Be,Li=Se,Mi=Ce,Ei=t=>ft(t,Ai()),Zi=di,Ni={},Oi=(t,e,i)=>{var r,n,o;if(Ni[t])throw new Error(`Diagram ${t} already registered.`);Ni[t]=e,i&&Ut(t,i),n=t,void 0!==(o=e.styles)&&(fi[n]=o),null==(r=e.injectUtils)||r.call(e,Bi,Fi,Ai,Ei,Zi,Si,(()=>{}))},Ii=t=>{if(t in Ni)return Ni[t];throw new ji(t)};class ji extends Error{constructor(t){super(`Diagram ${t} not found.`)}}const qi=t=>{var e;const{securityLevel:i}=Ai();let r=(0,a.Ys)("body");if("sandbox"===i){const i=(null==(e=(0,a.Ys)(`#i${t}`).node())?void 0:e.contentDocument)??document;r=(0,a.Ys)(i.body)}return r.select(`#${t}`)},Di={draw:(t,e,i)=>{st.debug("renering svg for syntax error\n");const r=qi(e);r.attr("viewBox","0 0 2412 512"),ui(r,100,512,!0);const n=r.append("g");n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)}},$i=Di,zi={db:{},renderer:Di,parser:{parser:{yy:{}},parse:()=>{}}},Pi="flowchart-elk",Ri={id:Pi,detector:(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&"elk"===(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3076),i.e(5269),i.e(8955),i.e(4238)]).then(i.bind(i,4238));return{id:Pi,diagram:t}}},Wi="timeline",Hi={id:Wi,detector:t=>/^\s*timeline/.test(t),loader:async()=>{const{diagram:t}=await i.e(2700).then(i.bind(i,12700));return{id:Wi,diagram:t}}},Ui="mindmap",Yi={id:Ui,detector:t=>/^\s*mindmap/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(3076),i.e(9138)]).then(i.bind(i,69138));return{id:Ui,diagram:t}}},Vi="sankey",Gi={id:Vi,detector:t=>/^\s*sankey-beta/.test(t),loader:async()=>{const{diagram:t}=await i.e(240).then(i.bind(i,10240));return{id:Vi,diagram:t}}};let Xi=!1;const Qi=()=>{Xi||(Xi=!0,Oi("error",zi,(t=>"error"===t.toLowerCase().trim())),Oi("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),Ht(Ne,ni,ii,De,Re,He,Ue,Je,ti,Ri,qe,Ie,Yi,Hi,ze,li,ai,hi,Ve,Gi,Xe))};class Ji{constructor(t,e={}){this.text=t,this.metadata=e,this.type="graph",this.text+="\n";const i=Be();try{this.type=Wt(t,i)}catch(n){this.type="error",this.detectError=n}const r=Ii(this.type);st.debug("Type "+this.type),this.db=r.db,this.renderer=r.renderer,this.parser=r.parser,this.parser.parser.yy=this.db,this.init=r.init,this.parse()}parse(){var t,e,i,r,n;if(this.detectError)throw this.detectError;null==(e=(t=this.db).clear)||e.call(t);const o=Be();null==(i=this.init)||i.call(this,o),this.metadata.title&&(null==(n=(r=this.db).setDiagramTitle)||n.call(r,this.metadata.title)),this.parser.parse(this.text)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}}const Ki=async(t,e={})=>{const i=Wt(t,Be());try{Ii(i)}catch(r){const t=Rt[i].loader;if(!t)throw new Pt(`Diagram ${i} not found.`);const{id:e,diagram:n}=await t();Oi(e,n)}return new Ji(t,e)};let tr=[];const er=t=>{tr.push(t)},ir="graphics-document document";const rr=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function nr(t){return null==t}var or={isNothing:nr,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:nr(t)?[]:[t]},repeat:function(t,e){var i,r="";for(i=0;i<e;i+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var i,r,n,o;if(e)for(i=0,r=(o=Object.keys(e)).length;i<r;i+=1)t[n=o[i]]=e[n];return t}};function ar(t,e){var i="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(i+='in "'+t.mark.name+'" '),i+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(i+="\n\n"+t.mark.snippet),r+" "+i):r}function sr(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=ar(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}sr.prototype=Object.create(Error.prototype),sr.prototype.constructor=sr,sr.prototype.toString=function(t){return this.name+": "+ar(this,t)};var lr=sr;function cr(t,e,i,r,n){var o="",a="",s=Math.floor(n/2)-1;return r-e>s&&(e=r-s+(o=" ... ").length),i-r>s&&(i=r+s-(a=" ...").length),{str:o+t.slice(e,i).replace(/\t/g,"\u2192")+a,pos:r-e+o.length}}function hr(t,e){return or.repeat(" ",e-t.length)+t}var ur=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,n=[0],o=[],a=-1;i=r.exec(t.buffer);)o.push(i.index),n.push(i.index+i[0].length),t.position<=i.index&&a<0&&(a=n.length-2);a<0&&(a=n.length-1);var s,l,c="",h=Math.min(t.line+e.linesAfter,o.length).toString().length,u=e.maxLength-(e.indent+h+3);for(s=1;s<=e.linesBefore&&!(a-s<0);s++)l=cr(t.buffer,n[a-s],o[a-s],t.position-(n[a]-n[a-s]),u),c=or.repeat(" ",e.indent)+hr((t.line-s+1).toString(),h)+" | "+l.str+"\n"+c;for(l=cr(t.buffer,n[a],o[a],t.position,u),c+=or.repeat(" ",e.indent)+hr((t.line+1).toString(),h)+" | "+l.str+"\n",c+=or.repeat("-",e.indent+h+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(a+s>=o.length);s++)l=cr(t.buffer,n[a+s],o[a+s],t.position-(n[a]-n[a+s]),u),c+=or.repeat(" ",e.indent)+hr((t.line+s+1).toString(),h)+" | "+l.str+"\n";return c.replace(/\n$/,"")},dr=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],fr=["scalar","sequence","mapping"];var pr=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===dr.indexOf(e))throw new lr('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=(i=e.styleAliases||null,r={},null!==i&&Object.keys(i).forEach((function(t){i[t].forEach((function(e){r[String(e)]=t}))})),r),-1===fr.indexOf(this.kind))throw new lr('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function gr(t,e){var i=[];return t[e].forEach((function(t){var e=i.length;i.forEach((function(i,r){i.tag===t.tag&&i.kind===t.kind&&i.multi===t.multi&&(e=r)})),i[e]=t})),i}function mr(t){return this.extend(t)}mr.prototype.extend=function(t){var e=[],i=[];if(t instanceof pr)i.push(t);else if(Array.isArray(t))i=i.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new lr("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof pr))throw new lr("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new lr("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new lr("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),i.forEach((function(t){if(!(t instanceof pr))throw new lr("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(mr.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=gr(r,"implicit"),r.compiledExplicit=gr(r,"explicit"),r.compiledTypeMap=function(){var t,e,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(i.multi[t.kind].push(t),i.multi.fallback.push(t)):i[t.kind][t.tag]=i.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(r);return i}(r.compiledImplicit,r.compiledExplicit),r};var yr=new mr({explicit:[new pr("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new pr("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new pr("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var xr=new pr("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var Cr=new pr("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function br(t){return 48<=t&&t<=55}function _r(t){return 48<=t&&t<=57}var vr=new pr("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=t.length,n=0,o=!1;if(!r)return!1;if("-"!==(e=t[n])&&"+"!==e||(e=t[++n]),"0"===e){if(n+1===r)return!0;if("b"===(e=t[++n])){for(n++;n<r;n++)if("_"!==(e=t[n])){if("0"!==e&&"1"!==e)return!1;o=!0}return o&&"_"!==e}if("x"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!(48<=(i=t.charCodeAt(n))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;o=!0}return o&&"_"!==e}if("o"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!br(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==e}}if("_"===e)return!1;for(;n<r;n++)if("_"!==(e=t[n])){if(!_r(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===e)},construct:function(t){var e,i=t,r=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),"-"!==(e=i[0])&&"+"!==e||("-"===e&&(r=-1),e=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===e){if("b"===i[1])return r*parseInt(i.slice(2),2);if("x"===i[1])return r*parseInt(i.slice(2),16);if("o"===i[1])return r*parseInt(i.slice(2),8)}return r*parseInt(i,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!or.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),kr=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var Tr=/^[-+]?[0-9]+e/;var wr=new pr("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!kr.test(t)||"_"===t[t.length-1])},construct:function(t){var e,i;return i="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:i*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||or.isNegativeZero(t))},represent:function(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(or.isNegativeZero(t))return"-0.0";return i=t.toString(10),Tr.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),Sr=yr.extend({implicit:[xr,Cr,vr,wr]}),Br=Sr,Fr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Ar=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var Lr=new pr("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Fr.exec(t)||null!==Ar.exec(t))},construct:function(t){var e,i,r,n,o,a,s,l,c=0,h=null;if(null===(e=Fr.exec(t))&&(e=Ar.exec(t)),null===e)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),l=new Date(Date.UTC(i,r,n,o,a,s,c)),h&&l.setTime(l.getTime()-h),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var Mr=new pr("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),Er="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Zr=new pr("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=Er;for(i=0;i<n;i++)if(!((e=o.indexOf(t.charAt(i)))>64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=Er,a=0,s=[];for(e=0;e<n;e++)e%4==0&&e&&(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(r.charAt(e));return 0===(i=n%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===i?(s.push(a>>10&255),s.push(a>>2&255)):12===i&&s.push(a>>4&255),new Uint8Array(s)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,i,r="",n=0,o=t.length,a=Er;for(e=0;e<o;e++)e%3==0&&e&&(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]),n=(n<<8)+t[e];return 0===(i=o%3)?(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]):2===i?(r+=a[n>>10&63],r+=a[n>>4&63],r+=a[n<<2&63],r+=a[64]):1===i&&(r+=a[n>>2&63],r+=a[n<<4&63],r+=a[64],r+=a[64]),r}}),Nr=Object.prototype.hasOwnProperty,Or=Object.prototype.toString;var Ir=new pr("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=[],s=t;for(e=0,i=s.length;e<i;e+=1){if(r=s[e],o=!1,"[object Object]"!==Or.call(r))return!1;for(n in r)if(Nr.call(r,n)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(n))return!1;a.push(n)}return!0},construct:function(t){return null!==t?t:[]}}),jr=Object.prototype.toString;var qr=new pr("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1){if(r=a[e],"[object Object]"!==jr.call(r))return!1;if(1!==(n=Object.keys(r)).length)return!1;o[e]=[n[0],r[n[0]]]}return!0},construct:function(t){if(null===t)return[];var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1)r=a[e],n=Object.keys(r),o[e]=[n[0],r[n[0]]];return o}}),Dr=Object.prototype.hasOwnProperty;var $r=new pr("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,i=t;for(e in i)if(Dr.call(i,e)&&null!==i[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),zr=Br.extend({implicit:[Lr,Mr],explicit:[Zr,Ir,qr,$r]}),Pr=Object.prototype.hasOwnProperty,Rr=1,Wr=2,Hr=3,Ur=4,Yr=1,Vr=2,Gr=3,Xr=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Qr=/[\x85\u2028\u2029]/,Jr=/[,\[\]\{\}]/,Kr=/^(?:!|!!|![a-z\-]+!)$/i,tn=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function en(t){return Object.prototype.toString.call(t)}function rn(t){return 10===t||13===t}function nn(t){return 9===t||32===t}function on(t){return 9===t||32===t||10===t||13===t}function an(t){return 44===t||91===t||93===t||123===t||125===t}function sn(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function ln(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function cn(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var hn=new Array(256),un=new Array(256),dn=0;dn<256;dn++)hn[dn]=ln(dn)?1:0,un[dn]=ln(dn);function fn(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||zr,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function pn(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=ur(i),new lr(e,i)}function gn(t,e){throw pn(t,e)}function mn(t,e){t.onWarning&&t.onWarning.call(null,pn(t,e))}var yn={YAML:function(t,e,i){var r,n,o;null!==t.version&&gn(t,"duplication of %YAML directive"),1!==i.length&&gn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&gn(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&gn(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&mn(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&gn(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],Kr.test(r)||gn(t,"ill-formed tag handle (first argument) of the TAG directive"),Pr.call(t.tagMap,r)&&gn(t,'there is a previously declared suffix for "'+r+'" tag handle'),tn.test(n)||gn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){gn(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function xn(t,e,i,r){var n,o,a,s;if(e<i){if(s=t.input.slice(e,i),r)for(n=0,o=s.length;n<o;n+=1)9===(a=s.charCodeAt(n))||32<=a&&a<=1114111||gn(t,"expected valid JSON character");else Xr.test(s)&&gn(t,"the stream contains non-printable characters");t.result+=s}}function Cn(t,e,i,r){var n,o,a,s;for(or.isObject(i)||gn(t,"cannot merge mappings; the provided source object is unacceptable"),a=0,s=(n=Object.keys(i)).length;a<s;a+=1)o=n[a],Pr.call(e,o)||(e[o]=i[o],r[o]=!0)}function bn(t,e,i,r,n,o,a,s,l){var c,h;if(Array.isArray(n))for(c=0,h=(n=Array.prototype.slice.call(n)).length;c<h;c+=1)Array.isArray(n[c])&&gn(t,"nested arrays are not supported inside keys"),"object"==typeof n&&"[object Object]"===en(n[c])&&(n[c]="[object Object]");if("object"==typeof n&&"[object Object]"===en(n)&&(n="[object Object]"),n=String(n),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(c=0,h=o.length;c<h;c+=1)Cn(t,e,o[c],i);else Cn(t,e,o,i);else t.json||Pr.call(i,n)||!Pr.call(e,n)||(t.line=a||t.line,t.lineStart=s||t.lineStart,t.position=l||t.position,gn(t,"duplicated mapping key")),"__proto__"===n?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):e[n]=o,delete i[n];return e}function _n(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):gn(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function vn(t,e,i){for(var r=0,n=t.input.charCodeAt(t.position);0!==n;){for(;nn(n);)9===n&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),n=t.input.charCodeAt(++t.position);if(e&&35===n)do{n=t.input.charCodeAt(++t.position)}while(10!==n&&13!==n&&0!==n);if(!rn(n))break;for(_n(t),n=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===n;)t.lineIndent++,n=t.input.charCodeAt(++t.position)}return-1!==i&&0!==r&&t.lineIndent<i&&mn(t,"deficient indentation"),r}function kn(t){var e,i=t.position;return!(45!==(e=t.input.charCodeAt(i))&&46!==e||e!==t.input.charCodeAt(i+1)||e!==t.input.charCodeAt(i+2)||(i+=3,0!==(e=t.input.charCodeAt(i))&&!on(e)))}function Tn(t,e){1===e?t.result+=" ":e>1&&(t.result+=or.repeat("\n",e-1))}function wn(t,e){var i,r,n=t.tag,o=t.anchor,a=[],s=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,gn(t,"tab characters must not be used in indentation")),45===r)&&on(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,vn(t,!0,-1)&&t.lineIndent<=e)a.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,Fn(t,e,Hr,!1,!0),a.push(t.result),vn(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)gn(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!s&&(t.tag=n,t.anchor=o,t.kind="sequence",t.result=a,!0)}function Sn(t){var e,i,r,n,o=!1,a=!1;if(33!==(n=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&gn(t,"duplication of a tag property"),60===(n=t.input.charCodeAt(++t.position))?(o=!0,n=t.input.charCodeAt(++t.position)):33===n?(a=!0,i="!!",n=t.input.charCodeAt(++t.position)):i="!",e=t.position,o){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&62!==n);t.position<t.length?(r=t.input.slice(e,t.position),n=t.input.charCodeAt(++t.position)):gn(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==n&&!on(n);)33===n&&(a?gn(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),Kr.test(i)||gn(t,"named tag handle cannot contain such characters"),a=!0,e=t.position+1)),n=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),Jr.test(r)&&gn(t,"tag suffix cannot contain flow indicator characters")}r&&!tn.test(r)&&gn(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(s){gn(t,"tag name is malformed: "+r)}return o?t.tag=r:Pr.call(t.tagMap,i)?t.tag=t.tagMap[i]+r:"!"===i?t.tag="!"+r:"!!"===i?t.tag="tag:yaml.org,2002:"+r:gn(t,'undeclared tag handle "'+i+'"'),!0}function Bn(t){var e,i;if(38!==(i=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&gn(t,"duplication of an anchor property"),i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!on(i)&&!an(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&gn(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function Fn(t,e,i,r,n){var o,a,s,l,c,h,u,d,f,p=1,g=!1,m=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=a=s=Ur===i||Hr===i,r&&vn(t,!0,-1)&&(g=!0,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)),1===p)for(;Sn(t)||Bn(t);)vn(t,!0,-1)?(g=!0,s=o,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)):s=!1;if(s&&(s=g||n),1!==p&&Ur!==i||(d=Rr===i||Wr===i?e:e+1,f=t.position-t.lineStart,1===p?s&&(wn(t,f)||function(t,e,i){var r,n,o,a,s,l,c,h=t.tag,u=t.anchor,d={},f=Object.create(null),p=null,g=null,m=null,y=!1,x=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),c=t.input.charCodeAt(t.position);0!==c;){if(y||-1===t.firstTabInLine||(t.position=t.firstTabInLine,gn(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),o=t.line,63!==c&&58!==c||!on(r)){if(a=t.line,s=t.lineStart,l=t.position,!Fn(t,i,Wr,!1,!0))break;if(t.line===o){for(c=t.input.charCodeAt(t.position);nn(c);)c=t.input.charCodeAt(++t.position);if(58===c)on(c=t.input.charCodeAt(++t.position))||gn(t,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(bn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!1,n=!1,p=t.tag,g=t.result;else{if(!x)return t.tag=h,t.anchor=u,!0;gn(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return t.tag=h,t.anchor=u,!0;gn(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(bn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!0,n=!0):y?(y=!1,n=!0):gn(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,c=r;if((t.line===o||t.lineIndent>e)&&(y&&(a=t.line,s=t.lineStart,l=t.position),Fn(t,e,Ur,!0,n)&&(y?g=t.result:m=t.result),y||(bn(t,d,f,p,g,m,a,s,l),p=g=m=null),vn(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)gn(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return y&&bn(t,d,f,p,g,null,a,s,l),x&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=d),x}(t,f,d))||function(t,e){var i,r,n,o,a,s,l,c,h,u,d,f,p=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(f=t.input.charCodeAt(t.position)))a=93,c=!1,o=[];else{if(123!==f)return!1;a=125,c=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),f=t.input.charCodeAt(++t.position);0!==f;){if(vn(t,!0,e),(f=t.input.charCodeAt(t.position))===a)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=o,!0;p?44===f&&gn(t,"expected the node content, but found ','"):gn(t,"missed comma between flow collection entries"),d=null,s=l=!1,63===f&&on(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,vn(t,!0,e)),i=t.line,r=t.lineStart,n=t.position,Fn(t,e,Rr,!1,!0),u=t.tag,h=t.result,vn(t,!0,e),f=t.input.charCodeAt(t.position),!l&&t.line!==i||58!==f||(s=!0,f=t.input.charCodeAt(++t.position),vn(t,!0,e),Fn(t,e,Rr,!1,!0),d=t.result),c?bn(t,o,y,u,h,d,i,r,n):s?o.push(bn(t,null,y,u,h,d,i,r,n)):o.push(h),vn(t,!0,e),44===(f=t.input.charCodeAt(t.position))?(p=!0,f=t.input.charCodeAt(++t.position)):p=!1}gn(t,"unexpected end of the stream within a flow collection")}(t,d)?m=!0:(a&&function(t,e){var i,r,n,o,a,s=Yr,l=!1,c=!1,h=e,u=0,d=!1;if(124===(o=t.input.charCodeAt(t.position)))r=!1;else{if(62!==o)return!1;r=!0}for(t.kind="scalar",t.result="";0!==o;)if(43===(o=t.input.charCodeAt(++t.position))||45===o)Yr===s?s=43===o?Gr:Vr:gn(t,"repeat of a chomping mode identifier");else{if(!((n=48<=(a=o)&&a<=57?a-48:-1)>=0))break;0===n?gn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?gn(t,"repeat of an indentation width identifier"):(h=e+n-1,c=!0)}if(nn(o)){do{o=t.input.charCodeAt(++t.position)}while(nn(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!rn(o)&&0!==o)}for(;0!==o;){for(_n(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!c||t.lineIndent<h)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>h&&(h=t.lineIndent),rn(o))u++;else{if(t.lineIndent<h){s===Gr?t.result+=or.repeat("\n",l?1+u:u):s===Yr&&l&&(t.result+="\n");break}for(r?nn(o)?(d=!0,t.result+=or.repeat("\n",l?1+u:u)):d?(d=!1,t.result+=or.repeat("\n",u+1)):0===u?l&&(t.result+=" "):t.result+=or.repeat("\n",u):t.result+=or.repeat("\n",l?1+u:u),l=!0,c=!0,u=0,i=t.position;!rn(o)&&0!==o;)o=t.input.charCodeAt(++t.position);xn(t,i,t.position,!1)}}return!0}(t,d)||function(t,e){var i,r,n;if(39!==(i=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(i=t.input.charCodeAt(t.position));)if(39===i){if(xn(t,r,t.position,!0),39!==(i=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,n=t.position}else rn(i)?(xn(t,r,n,!0),Tn(t,vn(t,!1,e)),r=n=t.position):t.position===t.lineStart&&kn(t)?gn(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);gn(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var i,r,n,o,a,s,l;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return xn(t,i,t.position,!0),t.position++,!0;if(92===s){if(xn(t,i,t.position,!0),rn(s=t.input.charCodeAt(++t.position)))vn(t,!1,e);else if(s<256&&hn[s])t.result+=un[s],t.position++;else if((a=120===(l=s)?2:117===l?4:85===l?8:0)>0){for(n=a,o=0;n>0;n--)(a=sn(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+a:gn(t,"expected hexadecimal character");t.result+=cn(o),t.position++}else gn(t,"unknown escape sequence");i=r=t.position}else rn(s)?(xn(t,i,r,!0),Tn(t,vn(t,!1,e)),i=r=t.position):t.position===t.lineStart&&kn(t)?gn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}gn(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?m=!0:!function(t){var e,i,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!on(r)&&!an(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&gn(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),Pr.call(t.anchorMap,i)||gn(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],vn(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,a,s,l,c,h,u=t.kind,d=t.result;if(on(h=t.input.charCodeAt(t.position))||an(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(on(r=t.input.charCodeAt(t.position+1))||i&&an(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,a=!1;0!==h;){if(58===h){if(on(r=t.input.charCodeAt(t.position+1))||i&&an(r))break}else if(35===h){if(on(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&kn(t)||i&&an(h))break;if(rn(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,vn(t,!1,-1),t.lineIndent>=e){a=!0,h=t.input.charCodeAt(t.position);continue}t.position=o,t.line=s,t.lineStart=l,t.lineIndent=c;break}}a&&(xn(t,n,o,!1),Tn(t,t.line-s),n=o=t.position,a=!1),nn(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return xn(t,n,o,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Rr===i)&&(m=!0,null===t.tag&&(t.tag="?")):(m=!0,null===t.tag&&null===t.anchor||gn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===p&&(m=s&&wn(t,f))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&gn(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l<c;l+=1)if((u=t.implicitTypes[l]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Pr.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,l=0,c=(h=t.typeMap.multi[t.kind||"fallback"]).length;l<c;l+=1)if(t.tag.slice(0,h[l].tag.length)===h[l].tag){u=h[l];break}u||gn(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&gn(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):gn(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||m}function An(t){var e,i,r,n,o=t.position,a=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(n=t.input.charCodeAt(t.position))&&(vn(t,!0,-1),n=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==n));){for(a=!0,n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!on(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&gn(t,"directive name must not be less than one character in length");0!==n;){for(;nn(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!rn(n));break}if(rn(n))break;for(e=t.position;0!==n&&!on(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&_n(t),Pr.call(yn,i)?yn[i](t,i,r):mn(t,'unknown document directive "'+i+'"')}vn(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,vn(t,!0,-1)):a&&gn(t,"directives end mark is expected"),Fn(t,t.lineIndent-1,Ur,!1,!0),vn(t,!0,-1),t.checkLineBreaks&&Qr.test(t.input.slice(o,t.position))&&mn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&kn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,vn(t,!0,-1)):t.position<t.length-1&&gn(t,"end of the stream or a document separator is expected")}function Ln(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var i=new fn(t,e),r=t.indexOf("\0");for(-1!==r&&(i.position=r,gn(i,"null byte is not allowed in input")),i.input+="\0";32===i.input.charCodeAt(i.position);)i.lineIndent+=1,i.position+=1;for(;i.position<i.length-1;)An(i);return i.documents}var Mn=Sr,En={loadAll:function(t,e,i){null!==e&&"object"==typeof e&&void 0===i&&(i=e,e=null);var r=Ln(t,i);if("function"!=typeof e)return r;for(var n=0,o=r.length;n<o;n+=1)e(r[n])},load:function(t,e){var i=Ln(t,e);if(0!==i.length){if(1===i.length)return i[0];throw new lr("expected a single document in the stream, but found more")}}}.load;const Zn=t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,((t,e,i)=>"<"+e+i.replace(/="([^"]*)"/g,"='$1'")+">")),Nn=t=>{const{text:e,metadata:i}=function(t){const e=t.match(Dt);if(!e)return{text:t,metadata:{}};let i=En(e[1],{schema:Mn})??{};i="object"!=typeof i||Array.isArray(i)?{}:i;const r={};return i.displayMode&&(r.displayMode=i.displayMode.toString()),i.title&&(r.title=i.title.toString()),i.config&&(r.config=i.config),{text:t.slice(e[0].length),metadata:r}}(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},On=t=>{const e=ye.detectInit(t)??{},i=ye.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some((({type:t})=>{})):"wrap"===(null==i?void 0:i.type)&&(e.wrap=!0),{text:(r=t,r.replace($t,"")),directive:e};var r};const In=["foreignobject"],jn=["dominant-baseline"];function qn(t){const e=function(t){const e=Zn(t),i=Nn(e),r=On(i.text),n=me(i.config,r.directive);return{code:t=rr(r.text),title:i.title,config:n}}(t);return Le(),Ae(e.config??{}),e}const Dn=function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},$n=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,zn=(t,e,i,r)=>{const n=((t,e={})=>{var i;let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,ot.Z)(e)){const n=t.htmlLabels||(null==(i=t.flowchart)?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in e){const i=e[t];(0,ot.Z)(i.styles)||n.forEach((t=>{r+=$n(i.id,t,i.styles)})),(0,ot.Z)(i.textStyles)||(r+=$n(i.id,"tspan",i.textStyles))}}return r})(t,i);return M(tt(`${r}{${pi(e,n,t.themeVariables)}}`),E)},Pn=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function Rn(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Wn=Object.freeze({render:async function(t,e,i){var r,n,o,l,c,h;Qi();const u=qn(e);e=u.code;const d=Be();st.debug(d),e.length>((null==d?void 0:d.maxTextSize)??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const f="#"+t,p="i"+t,g="#"+p,m="d"+t,y="#"+m;let x=(0,a.Ys)("body");const C="sandbox"===d.securityLevel,b="loose"===d.securityLevel,_=d.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),C){const t=Rn((0,a.Ys)(i),p);x=(0,a.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ys)(i);Pn(x,t,m,`font-family: ${_}`,"http://www.w3.org/1999/xlink")}else{if(((t,e,i,r)=>{var n,o,a;null==(n=t.getElementById(e))||n.remove(),null==(o=t.getElementById(i))||o.remove(),null==(a=t.getElementById(r))||a.remove()})(document,t,m,p),C){const t=Rn((0,a.Ys)("body"),p);x=(0,a.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ys)("body");Pn(x,t,m)}let v,k;e=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/#\w+;/g,(function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"})),e}(e);try{v=await Ki(e,{title:u.title})}catch(N){v=new Ji("error"),k=N}const T=x.select(y).node(),w=v.type,S=T.firstChild,B=S.firstChild,F=null==(n=(r=v.renderer).getClasses)?void 0:n.call(r,e,v),A=zn(d,w,F,f),L=document.createElement("style");L.innerHTML=A,S.insertBefore(L,B);try{await v.renderer.draw(e,t,xe,v)}catch(O){throw $i.draw(e,t,xe),O}!function(t,e,i,r){(function(t,e){t.attr("role",ir),""!==e&&t.attr("aria-roledescription",e)})(e,t),function(t,e,i,r){if(void 0!==t.insert){if(i){const e=`chart-desc-${r}`;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(i)}if(e){const i=`chart-title-${r}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}(e,i,r,e.attr("id"))}(w,x.select(`${y} svg`),null==(l=(o=v.db).getAccTitle)?void 0:l.call(o),null==(h=(c=v.db).getAccDescription)?void 0:h.call(c)),x.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let M=x.select(y).node().innerHTML;if(st.debug("config.arrowMarkerAbsolute",d.arrowMarkerAbsolute),M=((t="",e,i)=>{let r=t;return i||e||(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=Dn(r),r=r.replace(/<br>/g,"<br/>"),r})(M,C,mt(d.arrowMarkerAbsolute)),C){M=((t="",e)=>{var i,r;return`<iframe style="width:100%;height:${(null==(r=null==(i=null==e?void 0:e.viewBox)?void 0:i.baseVal)?void 0:r.height)?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`})(M,x.select(y+" svg").node())}else b||(M=s.sanitize(M,{ADD_TAGS:In,ADD_ATTR:jn}));if(tr.forEach((t=>{t()})),tr=[],k)throw k;const E=C?g:y,Z=(0,a.Ys)(E).node();return Z&&"remove"in Z&&Z.remove(),{svg:M,bindFunctions:v.db.bindFunctions}},parse:async function(t,e){Qi(),t=qn(t).code;try{await Ki(t)}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},getDiagramFromText:Ki,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),be=Vt({},t),(null==t?void 0:t.theme)&&t.theme in Mt?t.themeVariables=Mt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Mt.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(t=>(_e=Vt({},Ce),_e=Vt(_e,t),t.theme&&Mt[t.theme]&&(_e.themeVariables=Mt[t.theme].getThemeVariables(t.themeVariables)),Te(_e,ve),_e))(t):we();lt(i.logLevel),Qi()},getConfig:Be,setConfig:Se,getSiteConfig:we,updateSiteConfig:t=>(_e=Vt(_e,t),Te(_e,ve),_e),reset:()=>{Le()},globalReset:()=>{Le(Ce)},defaultConfig:Ce});lt(Be().logLevel),Le(Be());const Hn=(t,e,i)=>{st.warn(t),pe(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},Un=async function(t={querySelector:".mermaid"}){try{await Yn(t)}catch(e){if(pe(e)&&st.error(e.str),to.parseError&&to.parseError(e),!t.suppressErrors)throw st.error("Use the suppressErrors option to suppress these errors"),e}},Yn=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const n=Wn.getConfig();let o;if(st.debug((t?"":"No ")+"Callback function found"),i)o=i;else{if(!e)throw new Error("Nodes and querySelector are both undefined");o=document.querySelectorAll(e)}st.debug(`Found ${o.length} diagrams`),void 0!==(null==n?void 0:n.startOnLoad)&&(st.debug("Start On Load: "+(null==n?void 0:n.startOnLoad)),Wn.updateSiteConfig({startOnLoad:null==n?void 0:n.startOnLoad}));const a=new ye.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const l=[];for(const h of Array.from(o)){if(st.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;s=h.innerHTML,s=(0,r.Z)(ye.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");const i=ye.detectInit(s);i&&st.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await Kn(e,s,h);h.innerHTML=i,t&&await t(e),r&&r(h)}catch(c){Hn(c,l,to.parseError)}}if(l.length>0)throw l[0]},Vn=function(t){Wn.initialize(t)},Gn=function(){if(to.startOnLoad){const{startOnLoad:t}=Wn.getConfig();t&&to.run().catch((t=>st.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",Gn,!1);const Xn=[];let Qn=!1;const Jn=async()=>{if(!Qn){for(Qn=!0;Xn.length>0;){const e=Xn.shift();if(e)try{await e()}catch(t){st.error("Error executing queue",t)}}Qn=!1}},Kn=(t,e,i)=>new Promise(((r,n)=>{Xn.push((()=>new Promise(((o,a)=>{Wn.render(t,e,i).then((t=>{o(t),r(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=to.parseError)||e.call(to,t),a(t),n(t)}))})))),Jn().catch(n)})),to={startOnLoad:!0,mermaidAPI:Wn,parse:async(t,e)=>new Promise(((i,r)=>{Xn.push((()=>new Promise(((n,o)=>{Wn.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=to.parseError)||e.call(to,t),o(t),r(t)}))})))),Jn().catch(r)})),render:Kn,init:async function(t,e,i){st.warn("mermaid.init is deprecated. Please use run instead."),t&&Vn(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await Un(r)},run:Un,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{Ht(...t),!1===e&&await(async()=>{st.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Rt).map((async([t,{detector:e,loader:i}])=>{if(i)try{Ii(t)}catch(r){try{const{diagram:t,id:r}=await i();Oi(r,t,e)}catch(n){throw st.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete Rt[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){st.error(`Failed to load ${t.length} external diagrams`);for(const e of t)st.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}})()},initialize:Vn,parseError:void 0,contentLoaded:Gn,setParseErrorHandler:function(t){to.parseError=t},detectType:Wt}}}]); \ No newline at end of file diff --git a/assets/js/14eb3368.1936981e.js b/assets/js/14eb3368.0d563596.js similarity index 97% rename from assets/js/14eb3368.1936981e.js rename to assets/js/14eb3368.0d563596.js index 284acd0..35debda 100644 --- a/assets/js/14eb3368.1936981e.js +++ b/assets/js/14eb3368.0d563596.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9817],{1310:(e,t,s)=>{s.d(t,{Z:()=>p});s(67294);var n=s(36905),i=s(35281),a=s(53438),r=s(48596),c=s(39960),l=s(95999),o=s(44996),d=s(85893);function m(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const u={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,o.Z)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(c.Z,{"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(m,{className:u.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function x(e){let{children:t,href:s,isLast:n}=e;const i="breadcrumbs__link";return n?(0,d.jsx)("span",{className:i,itemProp:"name",children:t}):s?(0,d.jsx)(c.Z,{className:i,href:s,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:i,children:t})}function v(e){let{children:t,active:s,index:i,addMicrodata:a}=e;return(0,d.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,n.Z)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(i+1)})]})}function p(){const e=(0,a.s1)(),t=(0,r.Ns)();return e?(0,d.jsx)("nav",{className:(0,n.Z)(i.k.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,s)=>{const n=s===e.length-1,i="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(v,{active:n,index:s,addMicrodata:!!i,children:(0,d.jsx)(x,{href:i,isLast:n,children:t.label})},s)}))]})}):null}},34228:(e,t,s)=>{s.r(t),s.d(t,{default:()=>I});s(67294);var n=s(10833),i=s(53438),a=s(44996),r=s(36905),c=s(39960),l=s(13919),o=s(95999),d=s(92503);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var u=s(85893);function h(e){let{href:t,children:s}=e;return(0,u.jsx)(c.Z,{href:t,className:(0,r.Z)("card padding--lg",m.cardContainer),children:s})}function b(e){let{href:t,icon:s,title:n,description:i}=e;return(0,u.jsxs)(h,{href:t,children:[(0,u.jsxs)(d.Z,{as:"h2",className:(0,r.Z)("text--truncate",m.cardTitle),title:n,children:[s," ",n]}),i&&(0,u.jsx)("p",{className:(0,r.Z)("text--truncate",m.cardDescription),title:i,children:i})]})}function x(e){let{item:t}=e;const s=(0,i.LM)(t);return s?(0,u.jsx)(b,{href:s,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,o.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function v(e){let{item:t}=e;const s=(0,l.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,i.xz)(t.docId??void 0);return(0,u.jsx)(b,{href:t.href,icon:s,title:t.label,description:t.description??n?.description})}function p(e){let{item:t}=e;switch(t.type){case"link":return(0,u.jsx)(v,{item:t});case"category":return(0,u.jsx)(x,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e;const s=(0,i.jA)();return(0,u.jsx)(j,{items:s.items,className:t})}function j(e){const{items:t,className:s}=e;if(!t)return(0,u.jsx)(g,{...e});const n=(0,i.MN)(t);return(0,u.jsx)("section",{className:(0,r.Z)("row",s),children:n.map(((e,t)=>(0,u.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,u.jsx)(p,{item:e})},t)))})}var f=s(80049),N=s(23120),Z=s(44364),L=s(1310);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function k(e){let{categoryGeneratedIndex:t}=e;return(0,u.jsx)(n.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,a.Z)(t.image)})}function T(e){let{categoryGeneratedIndex:t}=e;const s=(0,i.jA)();return(0,u.jsxs)("div",{className:_.generatedIndexPage,children:[(0,u.jsx)(N.Z,{}),(0,u.jsx)(L.Z,{}),(0,u.jsx)(Z.Z,{}),(0,u.jsxs)("header",{children:[(0,u.jsx)(d.Z,{as:"h1",className:_.title,children:t.title}),t.description&&(0,u.jsx)("p",{children:t.description})]}),(0,u.jsx)("article",{className:"margin-top--lg",children:(0,u.jsx)(j,{items:s.items,className:_.list})}),(0,u.jsx)("footer",{className:"margin-top--lg",children:(0,u.jsx)(f.Z,{previous:t.navigation.previous,next:t.navigation.next})})]})}function I(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(k,{...e}),(0,u.jsx)(T,{...e})]})}},80049:(e,t,s)=>{s.d(t,{Z:()=>r});s(67294);var n=s(95999),i=s(32244),a=s(85893);function r(e){const{previous:t,next:s}=e;return(0,a.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,n.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,a.jsx)(i.Z,{...t,subLabel:(0,a.jsx)(n.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),s&&(0,a.jsx)(i.Z,{...s,subLabel:(0,a.jsx)(n.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},44364:(e,t,s)=>{s.d(t,{Z:()=>l});s(67294);var n=s(36905),i=s(95999),a=s(35281),r=s(74477),c=s(85893);function l(e){let{className:t}=e;const s=(0,r.E)();return s.badge?(0,c.jsx)("span",{className:(0,n.Z)(t,a.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,c.jsx)(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},23120:(e,t,s)=>{s.d(t,{Z:()=>v});s(67294);var n=s(36905),i=s(52263),a=s(39960),r=s(95999),c=s(80143),l=s(35281),o=s(60373),d=s(74477),m=s(85893);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=u[e.versionMetadata.banner];return(0,m.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:s,onClick:n}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,m.jsx)("b",{children:(0,m.jsx)(a.Z,{to:s,onClick:n,children:(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x(e){let{className:t,versionMetadata:s}=e;const{siteConfig:{title:a}}=(0,i.Z)(),{pluginId:r}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,o.J)(r),{latestDocSuggestion:u,latestVersionSuggestion:x}=(0,c.Jo)(r),v=u??(p=x).docs.find((e=>e.id===p.mainDocId));var p;return(0,m.jsxs)("div",{className:(0,n.Z)(t,l.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,m.jsx)("div",{children:(0,m.jsx)(h,{siteTitle:a,versionMetadata:s})}),(0,m.jsx)("div",{className:"margin-top--md",children:(0,m.jsx)(b,{versionLabel:x.label,to:v.path,onClick:()=>d(x.name)})})]})}function v(e){let{className:t}=e;const s=(0,d.E)();return s.banner?(0,m.jsx)(x,{className:t,versionMetadata:s}):null}},32244:(e,t,s)=>{s.d(t,{Z:()=>r});s(67294);var n=s(36905),i=s(39960),a=s(85893);function r(e){const{permalink:t,title:s,subLabel:r,isNext:c}=e;return(0,a.jsxs)(i.Z,{className:(0,n.Z)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[r&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,a.jsx)("div",{className:"pagination-nav__label",children:s})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9817],{1310:(e,t,s)=>{s.d(t,{Z:()=>p});s(67294);var n=s(36905),i=s(35281),a=s(53438),r=s(48596),c=s(33692),l=s(95999),o=s(44996),d=s(85893);function m(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const u={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,o.Z)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(c.Z,{"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(m,{className:u.breadcrumbHomeIcon})})})}const b={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function x(e){let{children:t,href:s,isLast:n}=e;const i="breadcrumbs__link";return n?(0,d.jsx)("span",{className:i,itemProp:"name",children:t}):s?(0,d.jsx)(c.Z,{className:i,href:s,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:i,children:t})}function v(e){let{children:t,active:s,index:i,addMicrodata:a}=e;return(0,d.jsxs)("li",{...a&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,n.Z)("breadcrumbs__item",{"breadcrumbs__item--active":s}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(i+1)})]})}function p(){const e=(0,a.s1)(),t=(0,r.Ns)();return e?(0,d.jsx)("nav",{className:(0,n.Z)(i.k.docs.docBreadcrumbs,b.breadcrumbsContainer),"aria-label":(0,l.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,s)=>{const n=s===e.length-1,i="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(v,{active:n,index:s,addMicrodata:!!i,children:(0,d.jsx)(x,{href:i,isLast:n,children:t.label})},s)}))]})}):null}},34228:(e,t,s)=>{s.r(t),s.d(t,{default:()=>I});s(67294);var n=s(10833),i=s(53438),a=s(44996),r=s(36905),c=s(33692),l=s(13919),o=s(95999),d=s(92503);const m={cardContainer:"cardContainer_fWXF",cardTitle:"cardTitle_rnsV",cardDescription:"cardDescription_PWke"};var u=s(85893);function h(e){let{href:t,children:s}=e;return(0,u.jsx)(c.Z,{href:t,className:(0,r.Z)("card padding--lg",m.cardContainer),children:s})}function b(e){let{href:t,icon:s,title:n,description:i}=e;return(0,u.jsxs)(h,{href:t,children:[(0,u.jsxs)(d.Z,{as:"h2",className:(0,r.Z)("text--truncate",m.cardTitle),title:n,children:[s," ",n]}),i&&(0,u.jsx)("p",{className:(0,r.Z)("text--truncate",m.cardDescription),title:i,children:i})]})}function x(e){let{item:t}=e;const s=(0,i.LM)(t);return s?(0,u.jsx)(b,{href:s,icon:"\ud83d\uddc3\ufe0f",title:t.label,description:t.description??(0,o.I)({message:"{count} items",id:"theme.docs.DocCard.categoryDescription",description:"The default description for a category card in the generated index about how many items this category includes"},{count:t.items.length})}):null}function v(e){let{item:t}=e;const s=(0,l.Z)(t.href)?"\ud83d\udcc4\ufe0f":"\ud83d\udd17",n=(0,i.xz)(t.docId??void 0);return(0,u.jsx)(b,{href:t.href,icon:s,title:t.label,description:t.description??n?.description})}function p(e){let{item:t}=e;switch(t.type){case"link":return(0,u.jsx)(v,{item:t});case"category":return(0,u.jsx)(x,{item:t});default:throw new Error(`unknown item type ${JSON.stringify(t)}`)}}function g(e){let{className:t}=e;const s=(0,i.jA)();return(0,u.jsx)(j,{items:s.items,className:t})}function j(e){const{items:t,className:s}=e;if(!t)return(0,u.jsx)(g,{...e});const n=(0,i.MN)(t);return(0,u.jsx)("section",{className:(0,r.Z)("row",s),children:n.map(((e,t)=>(0,u.jsx)("article",{className:"col col--6 margin-bottom--lg",children:(0,u.jsx)(p,{item:e})},t)))})}var f=s(80049),N=s(23120),Z=s(44364),L=s(1310);const _={generatedIndexPage:"generatedIndexPage_vN6x",list:"list_eTzJ",title:"title_kItE"};function k(e){let{categoryGeneratedIndex:t}=e;return(0,u.jsx)(n.d,{title:t.title,description:t.description,keywords:t.keywords,image:(0,a.Z)(t.image)})}function T(e){let{categoryGeneratedIndex:t}=e;const s=(0,i.jA)();return(0,u.jsxs)("div",{className:_.generatedIndexPage,children:[(0,u.jsx)(N.Z,{}),(0,u.jsx)(L.Z,{}),(0,u.jsx)(Z.Z,{}),(0,u.jsxs)("header",{children:[(0,u.jsx)(d.Z,{as:"h1",className:_.title,children:t.title}),t.description&&(0,u.jsx)("p",{children:t.description})]}),(0,u.jsx)("article",{className:"margin-top--lg",children:(0,u.jsx)(j,{items:s.items,className:_.list})}),(0,u.jsx)("footer",{className:"margin-top--lg",children:(0,u.jsx)(f.Z,{previous:t.navigation.previous,next:t.navigation.next})})]})}function I(e){return(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(k,{...e}),(0,u.jsx)(T,{...e})]})}},80049:(e,t,s)=>{s.d(t,{Z:()=>r});s(67294);var n=s(95999),i=s(32244),a=s(85893);function r(e){const{previous:t,next:s}=e;return(0,a.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,n.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,a.jsx)(i.Z,{...t,subLabel:(0,a.jsx)(n.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),s&&(0,a.jsx)(i.Z,{...s,subLabel:(0,a.jsx)(n.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},44364:(e,t,s)=>{s.d(t,{Z:()=>l});s(67294);var n=s(36905),i=s(95999),a=s(35281),r=s(74477),c=s(85893);function l(e){let{className:t}=e;const s=(0,r.E)();return s.badge?(0,c.jsx)("span",{className:(0,n.Z)(t,a.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,c.jsx)(i.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:s.label},children:"Version: {versionLabel}"})}):null}},23120:(e,t,s)=>{s.d(t,{Z:()=>v});s(67294);var n=s(36905),i=s(52263),a=s(33692),r=s(95999),c=s(80143),l=s(35281),o=s(60373),d=s(74477),m=s(85893);const u={unreleased:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:s}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,m.jsx)("b",{children:s.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=u[e.versionMetadata.banner];return(0,m.jsx)(t,{...e})}function b(e){let{versionLabel:t,to:s,onClick:n}=e;return(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,m.jsx)("b",{children:(0,m.jsx)(a.Z,{to:s,onClick:n,children:(0,m.jsx)(r.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function x(e){let{className:t,versionMetadata:s}=e;const{siteConfig:{title:a}}=(0,i.Z)(),{pluginId:r}=(0,c.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,o.J)(r),{latestDocSuggestion:u,latestVersionSuggestion:x}=(0,c.Jo)(r),v=u??(p=x).docs.find((e=>e.id===p.mainDocId));var p;return(0,m.jsxs)("div",{className:(0,n.Z)(t,l.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,m.jsx)("div",{children:(0,m.jsx)(h,{siteTitle:a,versionMetadata:s})}),(0,m.jsx)("div",{className:"margin-top--md",children:(0,m.jsx)(b,{versionLabel:x.label,to:v.path,onClick:()=>d(x.name)})})]})}function v(e){let{className:t}=e;const s=(0,d.E)();return s.banner?(0,m.jsx)(x,{className:t,versionMetadata:s}):null}},32244:(e,t,s)=>{s.d(t,{Z:()=>r});s(67294);var n=s(36905),i=s(33692),a=s(85893);function r(e){const{permalink:t,title:s,subLabel:r,isNext:c}=e;return(0,a.jsxs)(i.Z,{className:(0,n.Z)("pagination-nav__link",c?"pagination-nav__link--next":"pagination-nav__link--prev"),to:t,children:[r&&(0,a.jsx)("div",{className:"pagination-nav__sublabel",children:r}),(0,a.jsx)("div",{className:"pagination-nav__label",children:s})]})}}}]); \ No newline at end of file diff --git a/assets/js/1535ede8.6aa7ffe0.js b/assets/js/1535ede8.6aa7ffe0.js deleted file mode 100644 index 85354c7..0000000 --- a/assets/js/1535ede8.6aa7ffe0.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5376],{44969:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var s=t(85893),i=t(11151);const r={id:"seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n"},o=void 0,a={id:"bonuses/seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n",source:"@site/c/bonuses/10.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-10",permalink:"/c/bonuses/seminar-10",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/bonuses/10.md",tags:[],version:"current",lastUpdatedAt:1704571953,formattedLastUpdatedAt:"Jan 6, 2024",frontMatter:{id:"seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n"},sidebar:"autogeneratedBar",previous:{title:"8th seminar",permalink:"/c/bonuses/seminar-08"},next:{title:"Practice Exams",permalink:"/c/category/practice-exams"}},c={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Project",id:"project",level:2},{value:"Summary of the gameplay",id:"summary-of-the-gameplay",level:3},{value:"Suggested workflow",id:"suggested-workflow",level:2},{value:"Tasks",id:"tasks",level:2},{value:"Dictionary",id:"dictionary",level:2},{value:"Submitting",id:"submitting",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"pathname:///files/c/bonuses/10.tar.gz",children:"Source"})}),"\n",(0,s.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,s.jsx)(n.p,{children:"For this bonus you are given almost finished project - The Hangman Game. Your\ntask is to try the game, in case you find any bugs point them out and cover as\nmuch of the game as possible with tests."}),"\n",(0,s.jsx)(n.p,{children:"For this bonus you can get at maximum 2 K\u20a1."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Item"}),(0,s.jsx)(n.th,{children:"Bonus"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Fixing bugs from failing tests"}),(0,s.jsx)(n.td,{children:"0.25"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"word_guessed"})}),(0,s.jsx)(n.td,{children:"0.50"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Hidden bug"}),(0,s.jsx)(n.td,{children:"0.50"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Extending tests, undetectable bugs or evil bug"}),(0,s.jsx)(n.td,{children:"0.37"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Refactor"}),(0,s.jsx)(n.td,{children:"0.38"})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"project",children:"Project"}),"\n",(0,s.jsxs)(n.p,{children:["Project consists of 2 source files - ",(0,s.jsx)(n.code,{children:"hangman.c"})," and ",(0,s.jsx)(n.code,{children:"main.c"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"main.c"})," is quite short and concise, there is nothing for you to do."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"hangman.c"})," contains implementation of the game. In case you feel lost, consult\nthe documentation in ",(0,s.jsx)(n.code,{children:"hangman.h"})," that represents an interface that can be used\nfor implementing the game."]}),"\n",(0,s.jsxs)(n.p,{children:["Apart from those sources this project is a bit more complicated. ",(0,s.jsx)(n.em,{children:"Game loop"})," is\nrealised via single encapsulated function that complicates the testing. Because\nof that, there are 2 kinds of tests:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Unit tests"})," - that are present in ",(0,s.jsx)(n.code,{children:"test_hangman.c"})," and can be run via:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ make check-unit\n"})}),"\n",(0,s.jsx)(n.p,{children:"They cover majorly functions that can be tested easily via testing framework."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Functional tests"})," - same as in ",(0,s.jsx)(n.code,{children:"seminar-08"})," and are focused on testing the\nprogram as whole. Basic smoke test is already included in ",(0,s.jsx)(n.code,{children:"usage"})," test case."]}),"\n",(0,s.jsx)(n.p,{children:"They can be run via:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ make check-functional\n"})}),"\n",(0,s.jsxs)(n.p,{children:["When testing ",(0,s.jsx)(n.code,{children:"hangman"})," function (the game loop), it is suggested to create\nfunctional tests."]}),"\n",(0,s.jsx)(n.p,{children:"When submitting the files for review, please leave out functional tests that\nwere given as a part of the assignment, so that it is easier to navigate, I\nwill drag the common files myself. :)"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Whole test suite can be run via:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ make check\n"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"summary-of-the-gameplay",children:"Summary of the gameplay"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Secret word gets chosen from the file that's path is given as an argument."}),"\n",(0,s.jsx)(n.li,{children:"You get 8 guesses."}),"\n",(0,s.jsx)(n.li,{children:"Invalid characters don't count."}),"\n",(0,s.jsx)(n.li,{children:"Already guessed characters don't count, even if not included in the secret."}),"\n",(0,s.jsxs)(n.li,{children:["You can guess the whole word at once","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"If you get it right, you won, game ends."}),"\n",(0,s.jsx)(n.li,{children:"If you don't get it right, you get to see the secret, game ends."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"In case of end of input, game finishes via force."}),"\n",(0,s.jsx)(n.li,{children:"In case of invalid input, no guesses are subtracted, game carries on."}),"\n",(0,s.jsx)(n.li,{children:"Letters and words are not case sensitive."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"suggested-workflow",children:"Suggested workflow"}),"\n",(0,s.jsxs)(n.p,{children:["As we have talked about on the seminar, I suggest you to follow\n",(0,s.jsx)(n.em,{children:"Test-Driven Development"}),"\nin this case."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"TDD workflow",src:t(27420).Z+"",width:"2814",height:"1652"})}),"\n",(0,s.jsx)(n.p,{children:"In our current scenario we are already in the stage of refactoring and fixing the\nbugs. Therefore try to follow this succession of steps:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Try to reproduce the bug."}),"\n",(0,s.jsx)(n.li,{children:"Create a test that proves the presence of the bug."}),"\n",(0,s.jsx)(n.li,{children:"Fix the bug."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["In case you are submitting the bonus via GitLab, it is helpful to commit tests\nbefore commiting the fixes, so that it is apparent that the bug is manifested.\nExample of ",(0,s.jsx)(n.code,{children:"git log"})," (notice that the first line represents latest commit):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"feat: Implement fizz_buzzer\ntest: Add tests for fizz_buzzer\nfix: Fix NULL-check in print_name\ntest: Add test for NULL in print_name\n"})}),"\n",(0,s.jsx)(n.h2,{id:"tasks",children:"Tasks"}),"\n",(0,s.jsx)(n.p,{children:"As to your tasks, there are multiple things wrong in this project."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'There are 2 "bugs" that cannot be detected via tests, i.e. they are not bugs\nthat affect functionality of the game.'}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["There is one evil bug in ",(0,s.jsx)(n.code,{children:"get_word"}),". It is not required to be fixed ;) Assign\nit the lowest priority."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"There are some tests failing. Please try to figure it out, so you have green\ntests for the rest :)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["We have gotten a bug report for ",(0,s.jsx)(n.code,{children:"word_guessed"}),", all we got is"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:["doesn't work when there are too many ",(0,s.jsx)(n.code,{children:"a"}),"s"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Please try to replicate the bug and create a tests, so we don't get any\nregression later on."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"One hidden bug :) Closely non-specified, we cannot reproduce it and we were\ndrunk while playing the game, so we don't remember a thing. :/"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Try to cover as much code via the tests as possible. We are not going to look\nat the metrics, but DRY is violated a lot, so as a last task try to remove as\nmuch of the duplicit code as possible."}),"\n",(0,s.jsx)(n.p,{children:"Tests should help you a lot in case there are some regressions."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsxs)(n.p,{children:["In case you wonder why there are always 3 same words in the file with words, it\nis because of the ",(0,s.jsx)(n.code,{children:"get_word"})," bug. It is not a bug that can be easily fixed, so\nit is a not requirement at all and you can still get all points for the bonus ;)"]}),"\n",(0,s.jsx)(n.h2,{id:"dictionary",children:"Dictionary"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Functional_testing",children:"Functional tests"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Smoke_testing_%28software%29",children:"Smoke test"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Don%27t_repeat_yourself",children:"DRY"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"submitting",children:"Submitting"}),"\n",(0,s.jsx)(n.p,{children:"In case you have any questions, feel free to reach out to me."}),"\n",(0,s.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},27420:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/tdd_lifecycle-327ad9ee0ed8318ed11e19a28e02b2cc.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>o});var s=t(67294);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1535ede8.cf110382.js b/assets/js/1535ede8.cf110382.js new file mode 100644 index 0000000..29a4c79 --- /dev/null +++ b/assets/js/1535ede8.cf110382.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5376],{44969:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>a,toc:()=>l});var s=t(85893),i=t(11151);const r={id:"seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n"},o=void 0,a={id:"bonuses/seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n",source:"@site/c/bonuses/10.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-10",permalink:"/c/bonuses/seminar-10",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/bonuses/10.md",tags:[],version:"current",lastUpdatedAt:1706528814,formattedLastUpdatedAt:"Jan 29, 2024",frontMatter:{id:"seminar-10",title:"10th seminar",description:"Finding bugs in a hangman.\n"},sidebar:"autogeneratedBar",previous:{title:"8th seminar",permalink:"/c/bonuses/seminar-08"},next:{title:"Practice Exams",permalink:"/c/category/practice-exams"}},c={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Project",id:"project",level:2},{value:"Summary of the gameplay",id:"summary-of-the-gameplay",level:3},{value:"Suggested workflow",id:"suggested-workflow",level:2},{value:"Tasks",id:"tasks",level:2},{value:"Dictionary",id:"dictionary",level:2},{value:"Submitting",id:"submitting",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"pathname:///files/c/bonuses/10.tar.gz",children:"Source"})}),"\n",(0,s.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,s.jsx)(n.p,{children:"For this bonus you are given almost finished project - The Hangman Game. Your\ntask is to try the game, in case you find any bugs point them out and cover as\nmuch of the game as possible with tests."}),"\n",(0,s.jsx)(n.p,{children:"For this bonus you can get at maximum 2 K\u20a1."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Item"}),(0,s.jsx)(n.th,{children:"Bonus"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Fixing bugs from failing tests"}),(0,s.jsx)(n.td,{children:"0.25"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"word_guessed"})}),(0,s.jsx)(n.td,{children:"0.50"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Hidden bug"}),(0,s.jsx)(n.td,{children:"0.50"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Extending tests, undetectable bugs or evil bug"}),(0,s.jsx)(n.td,{children:"0.37"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Refactor"}),(0,s.jsx)(n.td,{children:"0.38"})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"project",children:"Project"}),"\n",(0,s.jsxs)(n.p,{children:["Project consists of 2 source files - ",(0,s.jsx)(n.code,{children:"hangman.c"})," and ",(0,s.jsx)(n.code,{children:"main.c"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"main.c"})," is quite short and concise, there is nothing for you to do."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"hangman.c"})," contains implementation of the game. In case you feel lost, consult\nthe documentation in ",(0,s.jsx)(n.code,{children:"hangman.h"})," that represents an interface that can be used\nfor implementing the game."]}),"\n",(0,s.jsxs)(n.p,{children:["Apart from those sources this project is a bit more complicated. ",(0,s.jsx)(n.em,{children:"Game loop"})," is\nrealised via single encapsulated function that complicates the testing. Because\nof that, there are 2 kinds of tests:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Unit tests"})," - that are present in ",(0,s.jsx)(n.code,{children:"test_hangman.c"})," and can be run via:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ make check-unit\n"})}),"\n",(0,s.jsx)(n.p,{children:"They cover majorly functions that can be tested easily via testing framework."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Functional tests"})," - same as in ",(0,s.jsx)(n.code,{children:"seminar-08"})," and are focused on testing the\nprogram as whole. Basic smoke test is already included in ",(0,s.jsx)(n.code,{children:"usage"})," test case."]}),"\n",(0,s.jsx)(n.p,{children:"They can be run via:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ make check-functional\n"})}),"\n",(0,s.jsxs)(n.p,{children:["When testing ",(0,s.jsx)(n.code,{children:"hangman"})," function (the game loop), it is suggested to create\nfunctional tests."]}),"\n",(0,s.jsx)(n.p,{children:"When submitting the files for review, please leave out functional tests that\nwere given as a part of the assignment, so that it is easier to navigate, I\nwill drag the common files myself. :)"}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsx)(n.p,{children:"Whole test suite can be run via:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"$ make check\n"})}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"summary-of-the-gameplay",children:"Summary of the gameplay"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Secret word gets chosen from the file that's path is given as an argument."}),"\n",(0,s.jsx)(n.li,{children:"You get 8 guesses."}),"\n",(0,s.jsx)(n.li,{children:"Invalid characters don't count."}),"\n",(0,s.jsx)(n.li,{children:"Already guessed characters don't count, even if not included in the secret."}),"\n",(0,s.jsxs)(n.li,{children:["You can guess the whole word at once","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"If you get it right, you won, game ends."}),"\n",(0,s.jsx)(n.li,{children:"If you don't get it right, you get to see the secret, game ends."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.li,{children:"In case of end of input, game finishes via force."}),"\n",(0,s.jsx)(n.li,{children:"In case of invalid input, no guesses are subtracted, game carries on."}),"\n",(0,s.jsx)(n.li,{children:"Letters and words are not case sensitive."}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"suggested-workflow",children:"Suggested workflow"}),"\n",(0,s.jsxs)(n.p,{children:["As we have talked about on the seminar, I suggest you to follow\n",(0,s.jsx)(n.em,{children:"Test-Driven Development"}),"\nin this case."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"TDD workflow",src:t(27420).Z+"",width:"2814",height:"1652"})}),"\n",(0,s.jsx)(n.p,{children:"In our current scenario we are already in the stage of refactoring and fixing the\nbugs. Therefore try to follow this succession of steps:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Try to reproduce the bug."}),"\n",(0,s.jsx)(n.li,{children:"Create a test that proves the presence of the bug."}),"\n",(0,s.jsx)(n.li,{children:"Fix the bug."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["In case you are submitting the bonus via GitLab, it is helpful to commit tests\nbefore commiting the fixes, so that it is apparent that the bug is manifested.\nExample of ",(0,s.jsx)(n.code,{children:"git log"})," (notice that the first line represents latest commit):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"feat: Implement fizz_buzzer\ntest: Add tests for fizz_buzzer\nfix: Fix NULL-check in print_name\ntest: Add test for NULL in print_name\n"})}),"\n",(0,s.jsx)(n.h2,{id:"tasks",children:"Tasks"}),"\n",(0,s.jsx)(n.p,{children:"As to your tasks, there are multiple things wrong in this project."}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:'There are 2 "bugs" that cannot be detected via tests, i.e. they are not bugs\nthat affect functionality of the game.'}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["There is one evil bug in ",(0,s.jsx)(n.code,{children:"get_word"}),". It is not required to be fixed ;) Assign\nit the lowest priority."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"There are some tests failing. Please try to figure it out, so you have green\ntests for the rest :)"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["We have gotten a bug report for ",(0,s.jsx)(n.code,{children:"word_guessed"}),", all we got is"]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:["doesn't work when there are too many ",(0,s.jsx)(n.code,{children:"a"}),"s"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Please try to replicate the bug and create a tests, so we don't get any\nregression later on."}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"One hidden bug :) Closely non-specified, we cannot reproduce it and we were\ndrunk while playing the game, so we don't remember a thing. :/"}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"Try to cover as much code via the tests as possible. We are not going to look\nat the metrics, but DRY is violated a lot, so as a last task try to remove as\nmuch of the duplicit code as possible."}),"\n",(0,s.jsx)(n.p,{children:"Tests should help you a lot in case there are some regressions."}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsxs)(n.p,{children:["In case you wonder why there are always 3 same words in the file with words, it\nis because of the ",(0,s.jsx)(n.code,{children:"get_word"})," bug. It is not a bug that can be easily fixed, so\nit is a not requirement at all and you can still get all points for the bonus ;)"]}),"\n",(0,s.jsx)(n.h2,{id:"dictionary",children:"Dictionary"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Functional_testing",children:"Functional tests"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Smoke_testing_%28software%29",children:"Smoke test"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Don%27t_repeat_yourself",children:"DRY"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"submitting",children:"Submitting"}),"\n",(0,s.jsx)(n.p,{children:"In case you have any questions, feel free to reach out to me."}),"\n",(0,s.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},27420:(e,n,t)=>{t.d(n,{Z:()=>s});const s=t.p+"assets/images/tdd_lifecycle-327ad9ee0ed8318ed11e19a28e02b2cc.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>o});var s=t(67294);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/17896441.2ef23eb3.js b/assets/js/17896441.274cea2b.js similarity index 98% rename from assets/js/17896441.2ef23eb3.js rename to assets/js/17896441.274cea2b.js index a2b5b6f..bdfedbf 100644 --- a/assets/js/17896441.2ef23eb3.js +++ b/assets/js/17896441.274cea2b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7918],{1310:(e,t,n)=>{n.d(t,{Z:()=>p});n(67294);var s=n(36905),a=n(35281),i=n(53438),l=n(48596),o=n(39960),r=n(95999),c=n(44996),d=n(85893);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.Z)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(o.Z,{"aria-label":(0,r.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function b(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,d.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,d.jsx)(o.Z,{className:a,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:a,children:t})}function x(e){let{children:t,active:n,index:a,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(a+1)})]})}function p(){const e=(0,i.s1)(),t=(0,l.Ns)();return e?(0,d.jsx)("nav",{className:(0,s.Z)(a.k.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,r.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(x,{active:s,index:n,addMicrodata:!!a,children:(0,d.jsx)(b,{href:a,isLast:s,children:t.label})},n)}))]})}):null}},15154:(e,t,n)=>{n.r(t),n.d(t,{default:()=>q});var s=n(67294),a=n(10833),i=n(902),l=n(85893);const o=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,l.jsx)(o.Provider,{value:a,children:t})}function c(){const e=(0,s.useContext)(o);if(null===e)throw new i.i6("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,l.jsx)(a.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(36905),m=n(87524),h=n(80049);function v(){const{metadata:e}=c();return(0,l.jsx)(h.Z,{previous:e.previous,next:e.next})}var b=n(23120),x=n(44364),p=n(35281),f=n(95999);function g(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return(0,l.jsx)(f.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,l.jsx)("b",{children:(0,l.jsx)("time",{dateTime:new Date(1e3*t).toISOString(),children:n})})},children:" on {date}"})}function j(e){let{lastUpdatedBy:t}=e;return(0,l.jsx)(f.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,l.jsx)("b",{children:t})},children:" by {user}"})}function L(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:s}=e;return(0,l.jsxs)("span",{className:p.k.common.lastUpdated,children:[(0,l.jsx)(f.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?(0,l.jsx)(g,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:s?(0,l.jsx)(j,{lastUpdatedBy:s}):""},children:"Last updated{atDate}{byUser}"}),!1]})}var C=n(84881),N=n(71526);const Z={lastUpdated:"lastUpdated_vwxv"};function k(e){return(0,l.jsx)("div",{className:(0,u.Z)(p.k.docs.docFooterTagsRow,"row margin-bottom--sm"),children:(0,l.jsx)("div",{className:"col",children:(0,l.jsx)(N.Z,{...e})})})}function _(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,formattedLastUpdatedAt:a}=e;return(0,l.jsxs)("div",{className:(0,u.Z)(p.k.docs.docFooterEditMetaRow,"row"),children:[(0,l.jsx)("div",{className:"col",children:t&&(0,l.jsx)(C.Z,{editUrl:t})}),(0,l.jsx)("div",{className:(0,u.Z)("col",Z.lastUpdated),children:(n||s)&&(0,l.jsx)(L,{lastUpdatedAt:n,formattedLastUpdatedAt:a,lastUpdatedBy:s})})]})}function T(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:s,lastUpdatedBy:a,tags:i}=e,o=i.length>0,r=!!(t||n||a);return o||r?(0,l.jsxs)("footer",{className:(0,u.Z)(p.k.docs.docFooter,"docusaurus-mt-lg"),children:[o&&(0,l.jsx)(k,{tags:i}),r&&(0,l.jsx)(_,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:a,formattedLastUpdatedAt:s})]}):null}var U=n(86043),H=n(93743);const y={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function A(e){let{collapsed:t,...n}=e;return(0,l.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",y.tocCollapsibleButton,!t&&y.tocCollapsibleButtonExpanded,n.className),children:(0,l.jsx)(f.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const w={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function M(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:o}=(0,U.u)({initialState:!0});return(0,l.jsxs)("div",{className:(0,u.Z)(w.tocCollapsible,!i&&w.tocCollapsibleExpanded,n),children:[(0,l.jsx)(A,{collapsed:i,onClick:o}),(0,l.jsx)(U.z,{lazy:!0,className:w.tocCollapsibleContent,collapsed:i,children:(0,l.jsx)(H.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const I={tocMobile:"tocMobile_ITEo"};function B(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(M,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(p.k.docs.docTocMobile,I.tocMobile)})}var E=n(39407);function O(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(E.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:p.k.docs.docTocDesktop})}var S=n(92503),V=n(27779);function P(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return(0,l.jsxs)("div",{className:(0,u.Z)(p.k.docs.docMarkdown,"markdown"),children:[n&&(0,l.jsx)("header",{children:(0,l.jsx)(S.Z,{as:"h1",children:n})}),(0,l.jsx)(V.Z,{children:t})]})}var D=n(1310),R=n(22212);const F={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function z(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,l.jsx)(B,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,l.jsx)(O,{})}}(),{metadata:{unlisted:s}}=c();return(0,l.jsxs)("div",{className:"row",children:[(0,l.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&&F.docItemCol),children:[s&&(0,l.jsx)(R.Z,{}),(0,l.jsx)(b.Z,{}),(0,l.jsxs)("div",{className:F.docItemContainer,children:[(0,l.jsxs)("article",{children:[(0,l.jsx)(D.Z,{}),(0,l.jsx)(x.Z,{}),n.mobile,(0,l.jsx)(P,{children:t}),(0,l.jsx)(T,{})]}),(0,l.jsx)(v,{})]})]}),n.desktop&&(0,l.jsx)("div",{className:"col col--3",children:n.desktop})]})}function q(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,l.jsx)(r,{content:e.content,children:(0,l.jsxs)(a.FG,{className:t,children:[(0,l.jsx)(d,{}),(0,l.jsx)(z,{children:(0,l.jsx)(n,{})})]})})}},80049:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(95999),a=n(32244),i=n(85893);function l(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(a.Z,{...t,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(a.Z,{...n,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},44364:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var s=n(36905),a=n(95999),i=n(35281),l=n(74477),o=n(85893);function r(e){let{className:t}=e;const n=(0,l.E)();return n.badge?(0,o.jsx)("span",{className:(0,s.Z)(t,i.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(a.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},23120:(e,t,n)=>{n.d(t,{Z:()=>x});n(67294);var s=n(36905),a=n(52263),i=n(39960),l=n(95999),o=n(80143),r=n(35281),c=n(60373),d=n(74477),u=n(85893);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function v(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(l.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.Z,{to:n,onClick:s,children:(0,u.jsx)(l.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function b(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,a.Z)(),{pluginId:l}=(0,o.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,c.J)(l),{latestDocSuggestion:m,latestVersionSuggestion:b}=(0,o.Jo)(l),x=m??(p=b).docs.find((e=>e.id===p.mainDocId));var p;return(0,u.jsxs)("div",{className:(0,s.Z)(t,r.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(v,{versionLabel:b.label,to:x.path,onClick:()=>d(b.name)})})]})}function x(e){let{className:t}=e;const n=(0,d.E)();return n.banner?(0,u.jsx)(b,{className:t,versionMetadata:n}):null}},39407:(e,t,n)=>{n.d(t,{Z:()=>c});n(67294);var s=n(36905),a=n(93743);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=n(85893);const o="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,l.jsx)("div",{className:(0,s.Z)(i.tableOfContents,"thin-scrollbar",t),children:(0,l.jsx)(a.Z,{...n,linkClassName:o,linkActiveClassName:r})})}},93743:(e,t,n)=>{n.d(t,{Z:()=>b});var s=n(67294),a=n(86668);function i(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function l(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=l({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function o(e){const t=e.getBoundingClientRect();return t.top===t.bottom?o(e.parentNode):t}function r(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>o(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(o(s))?s:e[e.indexOf(s)-1]??null}return e[e.length-1]??null}function c(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,a.L)();return(0,s.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=c();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:l}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:l}),c=r(o,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,n])}var u=n(39960),m=n(85893);function h(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const v=s.memo(h);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...h}=e;const b=(0,a.L)(),x=c??b.tableOfContents.minHeadingLevel,p=u??b.tableOfContents.maxHeadingLevel,f=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>l({toc:i(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:x,maxHeadingLevel:p});return d((0,s.useMemo)((()=>{if(o&&r)return{linkClassName:o,linkActiveClassName:r,minHeadingLevel:x,maxHeadingLevel:p}}),[o,r,x,p])),(0,m.jsx)(v,{toc:f,className:n,linkClassName:o,...h})}},22212:(e,t,n)=>{n.d(t,{Z:()=>h});n(67294);var s=n(36905),a=n(95999),i=n(35742),l=n(85893);function o(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(35281),u=n(59047);function m(e){let{className:t}=e;return(0,l.jsx)(u.Z,{type:"caution",title:(0,l.jsx)(o,{}),className:(0,s.Z)(t,d.k.common.unlistedBanner),children:(0,l.jsx)(r,{})})}function h(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(m,{...e})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7918],{1310:(e,t,n)=>{n.d(t,{Z:()=>p});n(67294);var s=n(36905),a=n(35281),i=n(53438),l=n(48596),o=n(33692),r=n(95999),c=n(44996),d=n(85893);function u(e){return(0,d.jsx)("svg",{viewBox:"0 0 24 24",...e,children:(0,d.jsx)("path",{d:"M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z",fill:"currentColor"})})}const m={breadcrumbHomeIcon:"breadcrumbHomeIcon_YNFT"};function h(){const e=(0,c.Z)("/");return(0,d.jsx)("li",{className:"breadcrumbs__item",children:(0,d.jsx)(o.Z,{"aria-label":(0,r.I)({id:"theme.docs.breadcrumbs.home",message:"Home page",description:"The ARIA label for the home page in the breadcrumbs"}),className:"breadcrumbs__link",href:e,children:(0,d.jsx)(u,{className:m.breadcrumbHomeIcon})})})}const v={breadcrumbsContainer:"breadcrumbsContainer_Z_bl"};function b(e){let{children:t,href:n,isLast:s}=e;const a="breadcrumbs__link";return s?(0,d.jsx)("span",{className:a,itemProp:"name",children:t}):n?(0,d.jsx)(o.Z,{className:a,href:n,itemProp:"item",children:(0,d.jsx)("span",{itemProp:"name",children:t})}):(0,d.jsx)("span",{className:a,children:t})}function x(e){let{children:t,active:n,index:a,addMicrodata:i}=e;return(0,d.jsxs)("li",{...i&&{itemScope:!0,itemProp:"itemListElement",itemType:"https://schema.org/ListItem"},className:(0,s.Z)("breadcrumbs__item",{"breadcrumbs__item--active":n}),children:[t,(0,d.jsx)("meta",{itemProp:"position",content:String(a+1)})]})}function p(){const e=(0,i.s1)(),t=(0,l.Ns)();return e?(0,d.jsx)("nav",{className:(0,s.Z)(a.k.docs.docBreadcrumbs,v.breadcrumbsContainer),"aria-label":(0,r.I)({id:"theme.docs.breadcrumbs.navAriaLabel",message:"Breadcrumbs",description:"The ARIA label for the breadcrumbs"}),children:(0,d.jsxs)("ul",{className:"breadcrumbs",itemScope:!0,itemType:"https://schema.org/BreadcrumbList",children:[t&&(0,d.jsx)(h,{}),e.map(((t,n)=>{const s=n===e.length-1,a="category"===t.type&&t.linkUnlisted?void 0:t.href;return(0,d.jsx)(x,{active:s,index:n,addMicrodata:!!a,children:(0,d.jsx)(b,{href:a,isLast:s,children:t.label})},n)}))]})}):null}},15154:(e,t,n)=>{n.r(t),n.d(t,{default:()=>q});var s=n(67294),a=n(10833),i=n(902),l=n(85893);const o=s.createContext(null);function r(e){let{children:t,content:n}=e;const a=function(e){return(0,s.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return(0,l.jsx)(o.Provider,{value:a,children:t})}function c(){const e=(0,s.useContext)(o);if(null===e)throw new i.i6("DocProvider");return e}function d(){const{metadata:e,frontMatter:t,assets:n}=c();return(0,l.jsx)(a.d,{title:e.title,description:e.description,keywords:t.keywords,image:n.image??t.image})}var u=n(36905),m=n(87524),h=n(80049);function v(){const{metadata:e}=c();return(0,l.jsx)(h.Z,{previous:e.previous,next:e.next})}var b=n(23120),x=n(44364),p=n(35281),f=n(95999);function g(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n}=e;return(0,l.jsx)(f.Z,{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:(0,l.jsx)("b",{children:(0,l.jsx)("time",{dateTime:new Date(1e3*t).toISOString(),children:n})})},children:" on {date}"})}function j(e){let{lastUpdatedBy:t}=e;return(0,l.jsx)(f.Z,{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:(0,l.jsx)("b",{children:t})},children:" by {user}"})}function L(e){let{lastUpdatedAt:t,formattedLastUpdatedAt:n,lastUpdatedBy:s}=e;return(0,l.jsxs)("span",{className:p.k.common.lastUpdated,children:[(0,l.jsx)(f.Z,{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:t&&n?(0,l.jsx)(g,{lastUpdatedAt:t,formattedLastUpdatedAt:n}):"",byUser:s?(0,l.jsx)(j,{lastUpdatedBy:s}):""},children:"Last updated{atDate}{byUser}"}),!1]})}var C=n(84881),N=n(71526);const Z={lastUpdated:"lastUpdated_vwxv"};function k(e){return(0,l.jsx)("div",{className:(0,u.Z)(p.k.docs.docFooterTagsRow,"row margin-bottom--sm"),children:(0,l.jsx)("div",{className:"col",children:(0,l.jsx)(N.Z,{...e})})})}function _(e){let{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:s,formattedLastUpdatedAt:a}=e;return(0,l.jsxs)("div",{className:(0,u.Z)(p.k.docs.docFooterEditMetaRow,"row"),children:[(0,l.jsx)("div",{className:"col",children:t&&(0,l.jsx)(C.Z,{editUrl:t})}),(0,l.jsx)("div",{className:(0,u.Z)("col",Z.lastUpdated),children:(n||s)&&(0,l.jsx)(L,{lastUpdatedAt:n,formattedLastUpdatedAt:a,lastUpdatedBy:s})})]})}function T(){const{metadata:e}=c(),{editUrl:t,lastUpdatedAt:n,formattedLastUpdatedAt:s,lastUpdatedBy:a,tags:i}=e,o=i.length>0,r=!!(t||n||a);return o||r?(0,l.jsxs)("footer",{className:(0,u.Z)(p.k.docs.docFooter,"docusaurus-mt-lg"),children:[o&&(0,l.jsx)(k,{tags:i}),r&&(0,l.jsx)(_,{editUrl:t,lastUpdatedAt:n,lastUpdatedBy:a,formattedLastUpdatedAt:s})]}):null}var U=n(86043),H=n(93743);const y={tocCollapsibleButton:"tocCollapsibleButton_TO0P",tocCollapsibleButtonExpanded:"tocCollapsibleButtonExpanded_MG3E"};function A(e){let{collapsed:t,...n}=e;return(0,l.jsx)("button",{type:"button",...n,className:(0,u.Z)("clean-btn",y.tocCollapsibleButton,!t&&y.tocCollapsibleButtonExpanded,n.className),children:(0,l.jsx)(f.Z,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component",children:"On this page"})})}const w={tocCollapsible:"tocCollapsible_ETCw",tocCollapsibleContent:"tocCollapsibleContent_vkbj",tocCollapsibleExpanded:"tocCollapsibleExpanded_sAul"};function M(e){let{toc:t,className:n,minHeadingLevel:s,maxHeadingLevel:a}=e;const{collapsed:i,toggleCollapsed:o}=(0,U.u)({initialState:!0});return(0,l.jsxs)("div",{className:(0,u.Z)(w.tocCollapsible,!i&&w.tocCollapsibleExpanded,n),children:[(0,l.jsx)(A,{collapsed:i,onClick:o}),(0,l.jsx)(U.z,{lazy:!0,className:w.tocCollapsibleContent,collapsed:i,children:(0,l.jsx)(H.Z,{toc:t,minHeadingLevel:s,maxHeadingLevel:a})})]})}const I={tocMobile:"tocMobile_ITEo"};function B(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(M,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:(0,u.Z)(p.k.docs.docTocMobile,I.tocMobile)})}var E=n(39407);function O(){const{toc:e,frontMatter:t}=c();return(0,l.jsx)(E.Z,{toc:e,minHeadingLevel:t.toc_min_heading_level,maxHeadingLevel:t.toc_max_heading_level,className:p.k.docs.docTocDesktop})}var S=n(92503),V=n(97917);function P(e){let{children:t}=e;const n=function(){const{metadata:e,frontMatter:t,contentTitle:n}=c();return t.hide_title||void 0!==n?null:e.title}();return(0,l.jsxs)("div",{className:(0,u.Z)(p.k.docs.docMarkdown,"markdown"),children:[n&&(0,l.jsx)("header",{children:(0,l.jsx)(S.Z,{as:"h1",children:n})}),(0,l.jsx)(V.Z,{children:t})]})}var D=n(1310),R=n(22212);const F={docItemContainer:"docItemContainer_Djhp",docItemCol:"docItemCol_VOVn"};function z(e){let{children:t}=e;const n=function(){const{frontMatter:e,toc:t}=c(),n=(0,m.i)(),s=e.hide_table_of_contents,a=!s&&t.length>0;return{hidden:s,mobile:a?(0,l.jsx)(B,{}):void 0,desktop:!a||"desktop"!==n&&"ssr"!==n?void 0:(0,l.jsx)(O,{})}}(),{metadata:{unlisted:s}}=c();return(0,l.jsxs)("div",{className:"row",children:[(0,l.jsxs)("div",{className:(0,u.Z)("col",!n.hidden&&F.docItemCol),children:[s&&(0,l.jsx)(R.Z,{}),(0,l.jsx)(b.Z,{}),(0,l.jsxs)("div",{className:F.docItemContainer,children:[(0,l.jsxs)("article",{children:[(0,l.jsx)(D.Z,{}),(0,l.jsx)(x.Z,{}),n.mobile,(0,l.jsx)(P,{children:t}),(0,l.jsx)(T,{})]}),(0,l.jsx)(v,{})]})]}),n.desktop&&(0,l.jsx)("div",{className:"col col--3",children:n.desktop})]})}function q(e){const t=`docs-doc-id-${e.content.metadata.id}`,n=e.content;return(0,l.jsx)(r,{content:e.content,children:(0,l.jsxs)(a.FG,{className:t,children:[(0,l.jsx)(d,{}),(0,l.jsx)(z,{children:(0,l.jsx)(n,{})})]})})}},80049:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(95999),a=n(32244),i=n(85893);function l(e){const{previous:t,next:n}=e;return(0,i.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,s.I)({id:"theme.docs.paginator.navAriaLabel",message:"Docs pages",description:"The ARIA label for the docs pagination"}),children:[t&&(0,i.jsx)(a.Z,{...t,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc",children:"Previous"})}),n&&(0,i.jsx)(a.Z,{...n,subLabel:(0,i.jsx)(s.Z,{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc",children:"Next"}),isNext:!0})]})}},44364:(e,t,n)=>{n.d(t,{Z:()=>r});n(67294);var s=n(36905),a=n(95999),i=n(35281),l=n(74477),o=n(85893);function r(e){let{className:t}=e;const n=(0,l.E)();return n.badge?(0,o.jsx)("span",{className:(0,s.Z)(t,i.k.docs.docVersionBadge,"badge badge--secondary"),children:(0,o.jsx)(a.Z,{id:"theme.docs.versionBadge.label",values:{versionLabel:n.label},children:"Version: {versionLabel}"})}):null}},23120:(e,t,n)=>{n.d(t,{Z:()=>x});n(67294);var s=n(36905),a=n(52263),i=n(33692),l=n(95999),o=n(80143),r=n(35281),c=n(60373),d=n(74477),u=n(85893);const m={unreleased:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.Z,{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is unreleased documentation for {siteTitle} {versionLabel} version."})},unmaintained:function(e){let{siteTitle:t,versionMetadata:n}=e;return(0,u.jsx)(l.Z,{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle:t,versionLabel:(0,u.jsx)("b",{children:n.label})},children:"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained."})}};function h(e){const t=m[e.versionMetadata.banner];return(0,u.jsx)(t,{...e})}function v(e){let{versionLabel:t,to:n,onClick:s}=e;return(0,u.jsx)(l.Z,{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel:t,latestVersionLink:(0,u.jsx)("b",{children:(0,u.jsx)(i.Z,{to:n,onClick:s,children:(0,u.jsx)(l.Z,{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label",children:"latest version"})})})},children:"For up-to-date documentation, see the {latestVersionLink} ({versionLabel})."})}function b(e){let{className:t,versionMetadata:n}=e;const{siteConfig:{title:i}}=(0,a.Z)(),{pluginId:l}=(0,o.gA)({failfast:!0}),{savePreferredVersionName:d}=(0,c.J)(l),{latestDocSuggestion:m,latestVersionSuggestion:b}=(0,o.Jo)(l),x=m??(p=b).docs.find((e=>e.id===p.mainDocId));var p;return(0,u.jsxs)("div",{className:(0,s.Z)(t,r.k.docs.docVersionBanner,"alert alert--warning margin-bottom--md"),role:"alert",children:[(0,u.jsx)("div",{children:(0,u.jsx)(h,{siteTitle:i,versionMetadata:n})}),(0,u.jsx)("div",{className:"margin-top--md",children:(0,u.jsx)(v,{versionLabel:b.label,to:x.path,onClick:()=>d(b.name)})})]})}function x(e){let{className:t}=e;const n=(0,d.E)();return n.banner?(0,u.jsx)(b,{className:t,versionMetadata:n}):null}},39407:(e,t,n)=>{n.d(t,{Z:()=>c});n(67294);var s=n(36905),a=n(93743);const i={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var l=n(85893);const o="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:t,...n}=e;return(0,l.jsx)("div",{className:(0,s.Z)(i.tableOfContents,"thin-scrollbar",t),children:(0,l.jsx)(a.Z,{...n,linkClassName:o,linkActiveClassName:r})})}},93743:(e,t,n)=>{n.d(t,{Z:()=>b});var s=n(67294),a=n(86668);function i(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const s=n.slice(2,e.level);e.parentIndex=Math.max(...s),n[e.level]=t}));const s=[];return t.forEach((e=>{const{parentIndex:n,...a}=e;n>=0?t[n].children.push(a):s.push(a)})),s}function l(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:s}=e;return t.flatMap((e=>{const t=l({toc:e.children,minHeadingLevel:n,maxHeadingLevel:s});return function(e){return e.level>=n&&e.level<=s}(e)?[{...e,children:t}]:t}))}function o(e){const t=e.getBoundingClientRect();return t.top===t.bottom?o(e.parentNode):t}function r(e,t){let{anchorTopOffset:n}=t;const s=e.find((e=>o(e).top>=n));if(s){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(o(s))?s:e[e.indexOf(s)-1]??null}return e[e.length-1]??null}function c(){const e=(0,s.useRef)(0),{navbar:{hideOnScroll:t}}=(0,a.L)();return(0,s.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function d(e){const t=(0,s.useRef)(void 0),n=c();(0,s.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:s,linkActiveClassName:a,minHeadingLevel:i,maxHeadingLevel:l}=e;function o(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(s),o=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const s=[];for(let a=t;a<=n;a+=1)s.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(s.join()))}({minHeadingLevel:i,maxHeadingLevel:l}),c=r(o,{anchorTopOffset:n.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(a),e.classList.add(a),t.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",o),document.addEventListener("resize",o),o(),()=>{document.removeEventListener("scroll",o),document.removeEventListener("resize",o)}}),[e,n])}var u=n(33692),m=n(85893);function h(e){let{toc:t,className:n,linkClassName:s,isChild:a}=e;return t.length?(0,m.jsx)("ul",{className:a?void 0:n,children:t.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:s??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(h,{isChild:!0,toc:e.children,className:n,linkClassName:s})]},e.id)))}):null}const v=s.memo(h);function b(e){let{toc:t,className:n="table-of-contents table-of-contents__left-border",linkClassName:o="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...h}=e;const b=(0,a.L)(),x=c??b.tableOfContents.minHeadingLevel,p=u??b.tableOfContents.maxHeadingLevel,f=function(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,s.useMemo)((()=>l({toc:i(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}({toc:t,minHeadingLevel:x,maxHeadingLevel:p});return d((0,s.useMemo)((()=>{if(o&&r)return{linkClassName:o,linkActiveClassName:r,minHeadingLevel:x,maxHeadingLevel:p}}),[o,r,x,p])),(0,m.jsx)(v,{toc:f,className:n,linkClassName:o,...h})}},22212:(e,t,n)=>{n.d(t,{Z:()=>h});n(67294);var s=n(36905),a=n(95999),i=n(35742),l=n(85893);function o(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=n(35281),u=n(59047);function m(e){let{className:t}=e;return(0,l.jsx)(u.Z,{type:"caution",title:(0,l.jsx)(o,{}),className:(0,s.Z)(t,d.k.common.unlistedBanner),children:(0,l.jsx)(r,{})})}function h(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/182b5a8d.a8e28604.js b/assets/js/182b5a8d.a8e28604.js new file mode 100644 index 0000000..95150c4 --- /dev/null +++ b/assets/js/182b5a8d.a8e28604.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6048],{32582:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>r,toc:()=>u});var a=n(85893),o=n(11151);const s={title:"Mixed feelings on Rust",description:"Discussing my mixed feelings about the Rust language.\n",date:new Date("2024-01-28T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. passionate language hater"}],tags:["rust","memory safety","cult","hype"],hide_table_of_contents:!1},i=void 0,r={permalink:"/blog/2024/01/28/rust-opinion",editUrl:"https://github.com/mfocko/blog/tree/main/blog/2024-01-28-rust-opinion.md",source:"@site/blog/2024-01-28-rust-opinion.md",title:"Mixed feelings on Rust",description:"Discussing my mixed feelings about the Rust language.\n",date:"2024-01-28T00:00:00.000Z",formattedDate:"January 28, 2024",tags:[{label:"rust",permalink:"/blog/tags/rust"},{label:"memory safety",permalink:"/blog/tags/memory-safety"},{label:"cult",permalink:"/blog/tags/cult"},{label:"hype",permalink:"/blog/tags/hype"}],readingTime:15.395,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. passionate language hater",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"Mixed feelings on Rust",description:"Discussing my mixed feelings about the Rust language.\n",date:"2024-01-28T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. passionate language hater"}],tags:["rust","memory safety","cult","hype"],hide_table_of_contents:!1},unlisted:!1,nextItem:{title:"How can Copr help with broken dependencies",permalink:"/blog/2023/08/02/copr"}},l={authorsImageUrls:[void 0]},u=[];function c(e){const t={em:"em",p:"p",...(0,o.a)(),...e.components};return(0,a.jsxs)(t.p,{children:["Rust has become a rather popular language these days. I've managed to get my\nhands dirty with it during ",(0,a.jsx)(t.em,{children:"[Advent of Code]"})," \u201822 and partially \u201823. I've also\nused it for few rounds of ",(0,a.jsx)(t.em,{children:"[Codeforces]"})," and I have to try very hard to maintain\nsome variety of languages for LeetCode challenges along with the Rust. I'll\ndisclaim up front that I won't be only positive, since this post is a result of\nmultiple discussions about Rust and I stand behind\n",(0,a.jsx)(t.em,{children:"\u201cAll that glitters is not gold\u201d"}),", so if you can't stand your favorite language\nbeing criticized in any way, don't even proceed. ","\ud83d\ude09"]})}function m(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,a.jsx)(t,{...e,children:(0,a.jsx)(c,{...e})}):c(e)}},11151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>i});var a=n(67294);const o={},s=a.createContext(o);function i(e){const t=a.useContext(s);return a.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),a.createElement(s.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.3807d38b.js b/assets/js/1a4e3797.d45f2a37.js similarity index 99% rename from assets/js/1a4e3797.3807d38b.js rename to assets/js/1a4e3797.d45f2a37.js index 89ebc3e..67d1c4a 100644 --- a/assets/js/1a4e3797.3807d38b.js +++ b/assets/js/1a4e3797.d45f2a37.js @@ -1,2 +1,2 @@ -/*! For license information please see 1a4e3797.3807d38b.js.LICENSE.txt */ -(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7920],{17331:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,s,a,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(s=this._events[e]))return!1;if(r(s))switch(arguments.length){case 1:s.call(this);break;case 2:s.call(this,arguments[1]);break;case 3:s.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),s.apply(this,c)}else if(n(s))for(c=Array.prototype.slice.call(arguments,1),a=(o=s.slice()).length,u=0;u<a;u++)o[u].apply(this,c);return!0},t.prototype.addListener=function(e,s){var a;if(!r(s))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,r(s.listener)?s.listener:s),this._events[e]?n(this._events[e])?this._events[e].push(s):this._events[e]=[this._events[e],s]:this._events[e]=s,n(this._events[e])&&!this._events[e].warned&&(a=i(this._maxListeners)?t.defaultMaxListeners:this._maxListeners)&&a>0&&this._events[e].length>a&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,s,a,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(a=(i=this._events[e]).length,s=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=a;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){s=c;break}if(s<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(s,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},8131:(e,t,r)=>{"use strict";var n=r(49374),i=r(17775),s=r(23076);function a(e,t,r,i){return new n(e,t,r,i)}a.version=r(24336),a.AlgoliaSearchHelper=n,a.SearchParameters=i,a.SearchResults=s,e.exports=a},68078:(e,t,r)=>{"use strict";var n=r(17331);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(14853)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},82437:(e,t,r)=>{"use strict";var n=r(52344),i=r(90116),s=r(49803),a={addRefinement:function(e,t,r){if(a.isRefined(e,t,r))return e;var i=""+r,s=e[t]?e[t].concat(i):[i],c={};return c[t]=s,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return a.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return a.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return a.isRefined(e,t,r)?a.removeRefinement(e,t,r):a.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return s(e,[t]);if("function"==typeof t){var n=!1,a=Object.keys(e).reduce((function(i,s){var a=e[s]||[],c=a.filter((function(e){return!t(e,s,r)}));return c.length!==a.length&&(n=!0),i[s]=c,i}),{});return n?a:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=a},17775:(e,t,r)=>{"use strict";var n=r(52344),i=r(7888),s=r(22686),a=r(60185),c=r(90116),u=r(49803),o=r(28023),h=r(46801),f=r(82437);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return a({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=o(r);if(this.isNumericRefined(e,t,n))return this;var i=a({},this.numericRefinements);return i[e]=a({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,o(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var s=r[i],a={};return s=s||{},Object.keys(s).forEach((function(r){var n=s[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),a[r]=c})),n[i]=a,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var s,a,c=o(r),u=void 0!==(s=this.numericRefinements[e][t],a=c,i(s,(function(e){return l(e,a)})));return n&&u},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=s(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return s(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),s=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(s)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},10210:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=s(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,s){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m<f;){var d=l&&Array.isArray(l.data)?l.data:[];l=i(d,(function(e){return e.isRefined})),m++}}if(l){var p=Object.keys(h.data).map((function(e){return[e,h.data[e]]})).filter((function(e){return function(e,t,r,n,i,s){if(i&&(0!==e.indexOf(i)||i===e))return!1;return!i&&-1===e.indexOf(n)||i&&e.split(n).length-i.split(n).length==1||-1===e.indexOf(n)&&-1===r.indexOf(n)||0===r.indexOf(e)||0===e.indexOf(t+n)&&(s||0===e.indexOf(r))}(e[0],l.path||r,s,t,r,n)}));l.data=a(p.map((function(e){var r=e[0];return function(e,t,r,n,i){var s=t.split(r);return{name:s[s.length-1].trim(),path:t,escapedValue:c(t),count:e,isRefined:n===t||0===n.indexOf(t+r),exhaustive:i,data:null}}(e[1],r,t,u(s),h.exhaustive)})),e[0],e[1])}return o}}(m,h,f,l,o),v=t;return f&&(v=t.slice(f.split(h).length)),v.reduce(p,{name:e.hierarchicalFacets[r].name,count:null,isRefined:!0,path:null,escapedValue:null,exhaustive:d,data:null})}};var n=r(94039),i=r(7888),s=r(82293),a=r(42148),c=n.escapeFacetValue,u=n.unescapeFacetValue},23076:(e,t,r)=>{"use strict";var n=r(74587),i=r(52344),s=r(94039),a=r(7888),c=r(69725),u=r(82293),o=r(60185),h=r(42148),f=s.escapeFacetValue,l=s.unescapeFacetValue,m=r(10210);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var s=t[0];this._rawResults=t;var u=this;Object.keys(s).forEach((function(e){u[e]=s[e]}));var h=o({persistHierarchicalRootCount:!1},r);Object.keys(h).forEach((function(e){u[e]=h[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),v=d(e.facets),g=d(e.disjunctiveFacets),y=1,R=s.facets||{};Object.keys(R).forEach((function(t){var r,n,i=R[t],o=(r=e.hierarchicalFacets,n=t,a(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(o){var h=o.attributes.indexOf(t),f=c(e.hierarchicalFacets,(function(e){return e.name===o.name}));u.hierarchicalFacets[f][h]={attribute:t,data:i,exhaustive:s.exhaustiveFacetsCount}}else{var l,m=-1!==e.disjunctiveFacets.indexOf(t),d=-1!==e.facets.indexOf(t);m&&(l=g[t],u.disjunctiveFacets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(u.disjunctiveFacets[l],s.facets_stats,t)),d&&(l=v[t],u.facets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(u.facets[l],s.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),f.forEach((function(r){var n=t[y],a=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(a).forEach((function(t){var r,f=a[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(u.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;u.hierarchicalFacets[r][m].data=o({},u.hierarchicalFacets[r][m].data,f)}else{r=g[t];var d=s.facets&&s.facets[t]||{};u.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(u.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!u.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(u.disjunctiveFacets[r].data[n]=0)}))}})),y++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),s=e._getHierarchicalFacetSeparator(n),a=e.getHierarchicalRefinement(r);0===a.length||a[0].split(s).length<2||t.slice(y).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var o=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(u.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(a.length>0&&!u.persistHierarchicalRootCount){var m=a[0].split(s)[0];l[m]=u.hierarchicalFacets[h][f].data[m]}u.hierarchicalFacets[h][f].data=i(l,o,u.hierarchicalFacets[h][f].data)}})),y++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=v[t];u.facets[n]={name:t,data:R[t],exhaustive:s.exhaustiveFacetsCount},r.forEach((function(e){u.facets[n]=u.facets[n]||{name:t},u.facets[n].data=u.facets[n].data||{},u.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=a(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=a(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var s=a(e.hierarchicalFacets,r);if(!s)return s;var c=e._state.getHierarchicalFacetByName(t),u=e._state._getHierarchicalFacetSeparator(c),o=l(e._state.getHierarchicalRefinement(t)[0]||"");0===o.indexOf(c.rootPath)&&(o=o.replace(c.rootPath+u,""));var h=o.split(u);return h.unshift(t),y(s,h,0),s}}function y(e,t,r){e.isRefined=e.name===t[r],e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var s=t.data.map((function(t){return R(e,t,r,n+1)})),a=e(s,r[n]);return i({data:a},t)}function F(e,t){var r=a(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var s=a(i,(function(e){return e.name===r})),c=s&&s.data&&s.data[n]?s.data[n]:0,u=s&&s.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return a(this.facets,t)||a(this.disjunctiveFacets,t)||a(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),a=this;if(Array.isArray(r))n=[e];else n=a._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(a,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var s,a=t.sortRemainingBy;return"hidden"===a?r:(s="alpha"===a?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,s[0],s[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=u(s.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),s=e._getHierarchicalFacetSeparator(i),c=r.split(s),u=a(n,(function(e){return e.name===t})),o=c.reduce((function(e,t){var r=e&&a(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},49374:(e,t,r)=>{"use strict";var n=r(17331),i=r(68078),s=r(94039).escapeFacetValue,a=r(14853),c=r(60185),u=r(90116),o=r(49803),h=r(96394),f=r(17775),l=r(23076),m=r(24336);function d(e,t,r,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.setClient(e);var i=r||{};i.index=t,this.state=f.make(i),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0,this._searchResultsOptions=n}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}a(d,n),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return h._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=h._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new l(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new l(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:o(h._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),s="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(s);var a=this.client.initIndex(n.index);if("function"!=typeof a.findAnswers)throw new Error(s);return a.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=h.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var f,l=this;return i?f=this.client.searchForFacetValues([{indexName:c.index,params:o}]):a?f=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,f=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),f.then((function(t){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=s(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:f.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new f(e),this},d.prototype.hasRefinements=function(e){return!!u(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=h._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?h._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),s=Array.prototype.concat.apply(n,i),a=this._queryId++;if(this._currentNbQueries++,!s.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,a));try{this.client.search(s).then(this._dispatchAlgoliaResponse.bind(this,r,a)).catch(this._dispatchAlgoliaError.bind(this,a))}catch(c){this.emit("error",{error:c})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){var n=this;if(!(t<this._lastQueryIdReceived)){this._currentNbQueries-=t-this._lastQueryIdReceived,this._lastQueryIdReceived=t,0===this._currentNbQueries&&this.emit("searchQueueEmpty");var i=r.results.slice();e.forEach((function(e){var t=e.state,r=e.queriesCount,s=e.helper,a=i.splice(0,r);t.index?(s.lastResults=new l(t,a,n._searchResultsOptions),s.emit("result",{results:s.lastResults,state:t})):s.emit("result",{results:null,state:t})}))}},d.prototype._dispatchAlgoliaError=function(e,t){e<this._lastQueryIdReceived||(this._currentNbQueries-=e-this._lastQueryIdReceived,this._lastQueryIdReceived=e,this.emit("error",{error:t}),0===this._currentNbQueries&&this.emit("searchQueueEmpty"))},d.prototype.containsRefinement=function(e,t,r,n){return e||0!==t.length||0!==r.length||0!==n.length},d.prototype._hasDisjunctiveRefinements=function(e){return this.state.disjunctiveRefinements[e]&&this.state.disjunctiveRefinements[e].length>0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new i(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},74587:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},52344:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},94039:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},7888:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r<e.length;r++)if(t(e[r]))return e[r]}},69725:e=>{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r<e.length;r++)if(t(e[r]))return r;return-1}},82293:(e,t,r)=>{"use strict";var n=r(7888);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),s=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!s?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(s[0]),e[1].push(s[1]),e)}),[[],[]])}},14853:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},22686:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},60185:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var s=n[i],a=e[i];void 0!==a&&void 0===s||(t(a)&&t(s)?e[i]=r(a,s):e[i]="object"==typeof(c=s)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n<i;n++){var s=arguments[n];t(s)&&r(e,s)}return e}},90116:e=>{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},49803:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}},42148:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,s=null===t;if(!s&&e>t||n&&i||!r)return 1;if(!n&&e<t||s&&r||!i)return-1}return 0}e.exports=function(e,r,n){if(!Array.isArray(e))return[];Array.isArray(n)||(n=[]);var i=e.map((function(e,t){return{criteria:r.map((function(t){return e[t]})),index:t,value:e}}));return i.sort((function(e,r){for(var i=-1;++i<e.criteria.length;){var s=t(e.criteria[i],r.criteria[i]);if(s)return i>=n.length?s:"desc"===n[i]?-s:s}return e.index-r.index})),i.map((function(e){return e.value}))}},28023:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},96394:(e,t,r)=>{"use strict";var n=r(60185);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var s={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:s._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:s._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),a=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(a.length>0&&a[0].split(c).length>1){var u=a[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,a){var c=s._getDisjunctiveFacetSearchParams(t,n.attribute,0===a);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),f=u[a-1];c.facetFilters=a>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(s._getHitsHierarchicalFacetsAttributes(e)).sort(),r=s._getFacetFilters(e),a=s._getNumericFilters(e),c=s._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),a.length>0&&(u.numericFilters=a),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var a=s._getFacetFilters(e,t,r),c=s._getNumericFilters(e,t),u=s._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var h=e.getHierarchicalFacetByName(t);return o.facets=h?s._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(o.numericFilters=c),a.length>0&&(o.facetFilters=a),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var s=i[e]||[];t!==n&&s.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).sort().forEach((function(t){n.push(e+":"+t)}))}));var s=e.facetsExcludes||{};Object.keys(s).sort().forEach((function(e){(s[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var a=e.disjunctiveFacetsRefinements||{};Object.keys(a).sort().forEach((function(e){var r=a[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var s=(c[i]||[])[0];if(void 0!==s){var a,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===s.indexOf(h)||!f&&!0===r||f&&f.split(h).length===s.split(h).length)return;f?(u=f.split(h).length-1,s=f):(u=s.split(h).length-2,s=s.slice(0,s.lastIndexOf(h))),a=o.attributes[u]}else u=s.split(h).length-1,a=o.attributes[u];a&&n.push([a+":"+s])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),s=n.split(i).length,a=r.attributes.slice(0,s+1);return t.concat(a)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),s=0;return i&&(s=i.split(n).length),[t.attributes[s]]}var a=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,a+1)},getSearchForFacetQuery:function(e,t,r,a){var c=a.isDisjunctiveFacet(e)?a.clearRefinements(e):a,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},s._getHitsSearchParams(c),u))}};e.exports=s},46801:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},24336:e=>{"use strict";e.exports="3.16.1"},70290:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(t){e(r,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))}))}return r}function n(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,s=void 0;try{for(var a,c=e[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw s}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function a(e){var t,r="algoliasearch-client-js-".concat(e.key),n=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},s=function(){return JSON.parse(n().getItem(r)||"{}")},a=function(e){n().setItem(r,JSON.stringify(e))},c=function(){var t=e.timeToLive?1e3*e.timeToLive:null,r=s(),n=Object.fromEntries(Object.entries(r).filter((function(e){return void 0!==i(e,2)[1].timestamp})));if(a(n),t){var c=Object.fromEntries(Object.entries(n).filter((function(e){var r=i(e,2)[1],n=(new Date).getTime();return!(r.timestamp+t<n)})));a(c)}};return{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return s()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],s=t[1];return Promise.all([n,s||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=s();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=s();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=s(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},s=JSON.stringify(r);if(s in t)return Promise.resolve(e.serializable?JSON.parse(t[s]):t[s]);var a=n(),c=i&&i.miss||function(){return Promise.resolve()};return a.then((function(e){return c(e)})).then((function(){return a}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var i=0;return e.replace(/%s/g,(function(){return encodeURIComponent(r[i++])}))}var l={WithinQueryParameters:0,WithinHeaders:1};function m(e,t){var r=e||{},n=r.data||{};return Object.keys(r).forEach((function(e){-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function j(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(s(r),s(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function P(e,t,n,i){var a=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,s){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(a)};var m={data:c,headers:u,method:o,url:_(h,n.path,f),connectTimeout:s(l,e.timeouts.connect),responseTimeout:s(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return a.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,s)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(a))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return j(e.hostsCache,t).then((function(e){return m(s(e.statelessHosts).reverse(),e.getTimeout)}))}function x(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function _(e,t,r){var n=E(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function E(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var A=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),s=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,s=e.requestsCache,a=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:s,responsesCache:a,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var s={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(s,(function(){return f.requestsCache.get(s,(function(){return f.requestsCache.set(s,n()).then((function(e){return Promise.all([f.requestsCache.delete(s),e])}),(function(e){return Promise.all([f.requestsCache.delete(s),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(s,e)}})},write:function(e,t){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:s,appId:t,addAlgoliaAgent:function(e,t){s.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then((function(){}))}},e.methods)},N=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:E(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var s=t.params,a=s.facetName,c=s.facetQuery,u=n(s,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:I}}).searchForFacetValues(a,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},I=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,k=2,q=3;function V(e,t,n){var i,s={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},s=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(s),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(s),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(s),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return k>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[a({key:"".concat("4.22.0","-").concat(e)}),u()]}),userAgent:x("4.22.0").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return A(r(r(r({},s),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:N,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:I,findAnswers:Q}})}}}}))}return V.version="4.22.0",V}()},88824:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(67294),i=r(52263);const s=["zero","one","two","few","many","other"];function a(e){return s.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:a(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function o(){const e=u();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const i=r.select(t),s=r.pluralForms.indexOf(i);return n[Math.min(s,n.length-1)]}(r,t,e)}}},48852:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>A});var n=r(67294);function i(e){var t,r,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(r=i(e[t]))&&(n&&(n+=" "),n+=r);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}const s=function(){for(var e,t,r=0,n="";r<arguments.length;)(e=arguments[r++])&&(t=i(e))&&(n&&(n+=" "),n+=t);return n};var a=r(8131),c=r.n(a),u=r(70290),o=r.n(u),h=r(10412),f=r(35742),l=r(39960),m=r(80143),d=r(88824),p=r(66177),v=r(902),g=r(10833),y=r(82128),R=r(95999),F=r(52263),b=r(6278),j=r(239),P=r(80647),x=r(92503);const _={searchQueryInput:"searchQueryInput_u2C7",searchVersionInput:"searchVersionInput_m0Ui",searchResultsColumn:"searchResultsColumn_JPFH",algoliaLogo:"algoliaLogo_rT1R",algoliaLogoPathFill:"algoliaLogoPathFill_WdUC",searchResultItem:"searchResultItem_Tv2o",searchResultItemHeading:"searchResultItemHeading_KbCB",searchResultItemPath:"searchResultItemPath_lhe1",searchResultItemSummary:"searchResultItemSummary_AEaO",searchQueryColumn:"searchQueryColumn_RTkw",searchVersionColumn:"searchVersionColumn_ypXd",searchLogoColumn:"searchLogoColumn_rJIA",loadingSpinner:"loadingSpinner_XVxU","loading-spin":"loading-spin_vzvp",loader:"loader_vvXV"};var E=r(85893);function O(e){let{docsSearchVersionsHelpers:t}=e;const r=Object.entries(t.allDocsData).filter((e=>{let[,t]=e;return t.versions.length>1}));return(0,E.jsx)("div",{className:s("col","col--3","padding-left--none",_.searchVersionColumn),children:r.map((e=>{let[n,i]=e;const s=r.length>1?`${n}: `:"";return(0,E.jsx)("select",{onChange:e=>t.setSearchVersion(n,e.target.value),defaultValue:t.searchVersions[n],className:_.searchVersionInput,children:i.versions.map(((e,t)=>(0,E.jsx)("option",{label:`${s}${e.label}`,value:e.name},t)))},n)}))})}function w(){const{i18n:{currentLocale:e}}=(0,F.Z)(),{algolia:{appId:t,apiKey:r,indexName:i}}=(0,b.L)(),a=(0,j.l)(),u=function(){const{selectMessage:e}=(0,d.c)();return t=>e(t,(0,R.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}(),g=function(){const e=(0,m._r)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),[w,A]=(0,p.K)(),N={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[H,S]=(0,n.useReducer)(((e,t)=>{switch(t.type){case"reset":return N;case"loading":return{...e,loading:!0};case"update":return w!==t.value.query?e:{...t.value,items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),N),T=o()(t,r),Q=c()(T,i,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});Q.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:s}}=e;if(""===t||!Array.isArray(r))return void S({type:"reset"});const c=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),u=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const i=Object.keys(r).map((e=>c(r[e].value)));return{title:i.pop(),url:a(t),summary:n.content?`${c(n.content.value)}...`:"",breadcrumbs:i}}));S({type:"update",value:{items:u,query:t,totalResults:i,totalPages:s,lastPage:n,hasMore:s>n+1,loading:!1}})}));const[C,I]=(0,n.useState)(null),D=(0,n.useRef)(0),k=(0,n.useRef)(h.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&D.current>r&&S({type:"advance"}),D.current=r}),{threshold:1})),q=()=>w?(0,R.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:w}):(0,R.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),V=(0,v.zX)((function(t){void 0===t&&(t=0),Q.addDisjunctiveFacetRefinement("docusaurus_tag","default"),Q.addDisjunctiveFacetRefinement("language",e),Object.entries(g.searchVersions).forEach((e=>{let[t,r]=e;Q.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),Q.setQuery(w).setPage(t).search()}));return(0,n.useEffect)((()=>{if(!C)return;const e=k.current;return e?(e.observe(C),()=>e.unobserve(C)):()=>!0}),[C]),(0,n.useEffect)((()=>{S({type:"reset"}),w&&(S({type:"loading"}),setTimeout((()=>{V()}),300))}),[w,g.searchVersions,V]),(0,n.useEffect)((()=>{H.lastPage&&0!==H.lastPage&&V(H.lastPage)}),[V,H.lastPage]),(0,E.jsxs)(P.Z,{children:[(0,E.jsxs)(f.Z,{children:[(0,E.jsx)("title",{children:(0,y.p)(q())}),(0,E.jsx)("meta",{property:"robots",content:"noindex, follow"})]}),(0,E.jsxs)("div",{className:"container margin-vert--lg",children:[(0,E.jsx)(x.Z,{as:"h1",children:q()}),(0,E.jsxs)("form",{className:"row",onSubmit:e=>e.preventDefault(),children:[(0,E.jsx)("div",{className:s("col",_.searchQueryColumn,{"col--9":g.versioningEnabled,"col--12":!g.versioningEnabled}),children:(0,E.jsx)("input",{type:"search",name:"q",className:_.searchQueryInput,placeholder:(0,R.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,R.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>A(e.target.value),value:w,autoComplete:"off",autoFocus:!0})}),g.versioningEnabled&&(0,E.jsx)(O,{docsSearchVersionsHelpers:g})]}),(0,E.jsxs)("div",{className:"row",children:[(0,E.jsx)("div",{className:s("col","col--8",_.searchResultsColumn),children:!!H.totalResults&&u(H.totalResults)}),(0,E.jsx)("div",{className:s("col","col--4","text--right",_.searchLogoColumn),children:(0,E.jsx)(l.Z,{to:"https://www.algolia.com/","aria-label":(0,R.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"}),children:(0,E.jsx)("svg",{viewBox:"0 0 168 24",className:_.algoliaLogo,children:(0,E.jsxs)("g",{fill:"none",children:[(0,E.jsx)("path",{className:_.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),(0,E.jsx)("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),(0,E.jsx)("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})]})})})})]}),H.items.length>0?(0,E.jsx)("main",{children:H.items.map(((e,t)=>{let{title:r,url:n,summary:i,breadcrumbs:a}=e;return(0,E.jsxs)("article",{className:_.searchResultItem,children:[(0,E.jsx)(x.Z,{as:"h2",className:_.searchResultItemHeading,children:(0,E.jsx)(l.Z,{to:n,dangerouslySetInnerHTML:{__html:r}})}),a.length>0&&(0,E.jsx)("nav",{"aria-label":"breadcrumbs",children:(0,E.jsx)("ul",{className:s("breadcrumbs",_.searchResultItemPath),children:a.map(((e,t)=>(0,E.jsx)("li",{className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}},t)))})}),i&&(0,E.jsx)("p",{className:_.searchResultItemSummary,dangerouslySetInnerHTML:{__html:i}})]},t)}))}):[w&&!H.loading&&(0,E.jsx)("p",{children:(0,E.jsx)(R.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result",children:"No results were found"})},"no-results"),!!H.loading&&(0,E.jsx)("div",{className:_.loadingSpinner},"spinner")],H.hasMore&&(0,E.jsx)("div",{className:_.loader,ref:I,children:(0,E.jsx)(R.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results",children:"Fetching new results..."})})]})]})}function A(){return(0,E.jsx)(g.FG,{className:"search-page-wrapper",children:(0,E.jsx)(w,{})})}}}]); \ No newline at end of file +/*! For license information please see 1a4e3797.d45f2a37.js.LICENSE.txt */ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7920],{17331:e=>{function t(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function n(e){return"object"==typeof e&&null!==e}function i(e){return void 0===e}e.exports=t,t.prototype._events=void 0,t.prototype._maxListeners=void 0,t.defaultMaxListeners=10,t.prototype.setMaxListeners=function(e){if("number"!=typeof e||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},t.prototype.emit=function(e){var t,s,a,c,u,o;if(this._events||(this._events={}),"error"===e&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((t=arguments[1])instanceof Error)throw t;var h=new Error('Uncaught, unspecified "error" event. ('+t+")");throw h.context=t,h}if(i(s=this._events[e]))return!1;if(r(s))switch(arguments.length){case 1:s.call(this);break;case 2:s.call(this,arguments[1]);break;case 3:s.call(this,arguments[1],arguments[2]);break;default:c=Array.prototype.slice.call(arguments,1),s.apply(this,c)}else if(n(s))for(c=Array.prototype.slice.call(arguments,1),a=(o=s.slice()).length,u=0;u<a;u++)o[u].apply(this,c);return!0},t.prototype.addListener=function(e,s){var a;if(!r(s))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",e,r(s.listener)?s.listener:s),this._events[e]?n(this._events[e])?this._events[e].push(s):this._events[e]=[this._events[e],s]:this._events[e]=s,n(this._events[e])&&!this._events[e].warned&&(a=i(this._maxListeners)?t.defaultMaxListeners:this._maxListeners)&&a>0&&this._events[e].length>a&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},t.prototype.on=t.prototype.addListener,t.prototype.once=function(e,t){if(!r(t))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(e,i),n||(n=!0,t.apply(this,arguments))}return i.listener=t,this.on(e,i),this},t.prototype.removeListener=function(e,t){var i,s,a,c;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(a=(i=this._events[e]).length,s=-1,i===t||r(i.listener)&&i.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(n(i)){for(c=a;c-- >0;)if(i[c]===t||i[c].listener&&i[c].listener===t){s=c;break}if(s<0)return this;1===i.length?(i.length=0,delete this._events[e]):i.splice(s,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},t.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[e]))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},t.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},t.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},t.listenerCount=function(e,t){return e.listenerCount(t)}},8131:(e,t,r)=>{"use strict";var n=r(49374),i=r(17775),s=r(23076);function a(e,t,r,i){return new n(e,t,r,i)}a.version=r(24336),a.AlgoliaSearchHelper=n,a.SearchParameters=i,a.SearchResults=s,e.exports=a},68078:(e,t,r)=>{"use strict";var n=r(17331);function i(e,t){this.main=e,this.fn=t,this.lastResults=null}r(14853)(i,n),i.prototype.detach=function(){this.removeAllListeners(),this.main.detachDerivedHelper(this)},i.prototype.getModifiedState=function(e){return this.fn(e)},e.exports=i},82437:(e,t,r)=>{"use strict";var n=r(52344),i=r(90116),s=r(49803),a={addRefinement:function(e,t,r){if(a.isRefined(e,t,r))return e;var i=""+r,s=e[t]?e[t].concat(i):[i],c={};return c[t]=s,n({},c,e)},removeRefinement:function(e,t,r){if(void 0===r)return a.clearRefinement(e,(function(e,r){return t===r}));var n=""+r;return a.clearRefinement(e,(function(e,r){return t===r&&n===e}))},toggleRefinement:function(e,t,r){if(void 0===r)throw new Error("toggleRefinement should be used with a value");return a.isRefined(e,t,r)?a.removeRefinement(e,t,r):a.addRefinement(e,t,r)},clearRefinement:function(e,t,r){if(void 0===t)return i(e)?{}:e;if("string"==typeof t)return s(e,[t]);if("function"==typeof t){var n=!1,a=Object.keys(e).reduce((function(i,s){var a=e[s]||[],c=a.filter((function(e){return!t(e,s,r)}));return c.length!==a.length&&(n=!0),i[s]=c,i}),{});return n?a:e}},isRefined:function(e,t,r){var n=Boolean(e[t])&&e[t].length>0;if(void 0===r||!n)return n;var i=""+r;return-1!==e[t].indexOf(i)}};e.exports=a},17775:(e,t,r)=>{"use strict";var n=r(52344),i=r(7888),s=r(22686),a=r(60185),c=r(90116),u=r(49803),o=r(28023),h=r(46801),f=r(82437);function l(e,t){return Array.isArray(e)&&Array.isArray(t)?e.length===t.length&&e.every((function(e,r){return l(t[r],e)})):e===t}function m(e){var t=e?m._parseNumbers(e):{};void 0===t.userToken||h(t.userToken)||console.warn("[algoliasearch-helper] The `userToken` parameter is invalid. This can lead to wrong analytics.\n - Format: [a-zA-Z0-9_-]{1,64}"),this.facets=t.facets||[],this.disjunctiveFacets=t.disjunctiveFacets||[],this.hierarchicalFacets=t.hierarchicalFacets||[],this.facetsRefinements=t.facetsRefinements||{},this.facetsExcludes=t.facetsExcludes||{},this.disjunctiveFacetsRefinements=t.disjunctiveFacetsRefinements||{},this.numericRefinements=t.numericRefinements||{},this.tagRefinements=t.tagRefinements||[],this.hierarchicalFacetsRefinements=t.hierarchicalFacetsRefinements||{};var r=this;Object.keys(t).forEach((function(e){var n=-1!==m.PARAMETERS.indexOf(e),i=void 0!==t[e];!n&&i&&(r[e]=t[e])}))}m.PARAMETERS=Object.keys(new m),m._parseNumbers=function(e){if(e instanceof m)return e;var t={};if(["aroundPrecision","aroundRadius","getRankingInfo","minWordSizefor2Typos","minWordSizefor1Typo","page","maxValuesPerFacet","distinct","minimumAroundRadius","hitsPerPage","minProximity"].forEach((function(r){var n=e[r];if("string"==typeof n){var i=parseFloat(n);t[r]=isNaN(i)?n:i}})),Array.isArray(e.insideBoundingBox)&&(t.insideBoundingBox=e.insideBoundingBox.map((function(e){return Array.isArray(e)?e.map((function(e){return parseFloat(e)})):e}))),e.numericRefinements){var r={};Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t]||{};r[t]={},Object.keys(n).forEach((function(e){var i=n[e].map((function(e){return Array.isArray(e)?e.map((function(e){return"string"==typeof e?parseFloat(e):e})):"string"==typeof e?parseFloat(e):e}));r[t][e]=i}))})),t.numericRefinements=r}return a({},e,t)},m.make=function(e){var t=new m(e);return(e.hierarchicalFacets||[]).forEach((function(e){if(e.rootPath){var r=t.getHierarchicalRefinement(e.name);r.length>0&&0!==r[0].indexOf(e.rootPath)&&(t=t.clearRefinements(e.name)),0===(r=t.getHierarchicalRefinement(e.name)).length&&(t=t.toggleHierarchicalFacetRefinement(e.name,e.rootPath))}})),t},m.validate=function(e,t){var r=t||{};return e.tagFilters&&r.tagRefinements&&r.tagRefinements.length>0?new Error("[Tags] Cannot switch from the managed tag API to the advanced API. It is probably an error, if it is really what you want, you should first clear the tags with clearTags method."):e.tagRefinements.length>0&&r.tagFilters?new Error("[Tags] Cannot switch from the advanced tag API to the managed API. It is probably an error, if it is not, you should first clear the tags with clearTags method."):e.numericFilters&&r.numericRefinements&&c(r.numericRefinements)?new Error("[Numeric filters] Can't switch from the advanced to the managed API. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):c(e.numericRefinements)&&r.numericFilters?new Error("[Numeric filters] Can't switch from the managed API to the advanced. It is probably an error, if this is really what you want, you have to first clear the numeric filters."):null},m.prototype={constructor:m,clearRefinements:function(e){var t={numericRefinements:this._clearNumericRefinements(e),facetsRefinements:f.clearRefinement(this.facetsRefinements,e,"conjunctiveFacet"),facetsExcludes:f.clearRefinement(this.facetsExcludes,e,"exclude"),disjunctiveFacetsRefinements:f.clearRefinement(this.disjunctiveFacetsRefinements,e,"disjunctiveFacet"),hierarchicalFacetsRefinements:f.clearRefinement(this.hierarchicalFacetsRefinements,e,"hierarchicalFacet")};return t.numericRefinements===this.numericRefinements&&t.facetsRefinements===this.facetsRefinements&&t.facetsExcludes===this.facetsExcludes&&t.disjunctiveFacetsRefinements===this.disjunctiveFacetsRefinements&&t.hierarchicalFacetsRefinements===this.hierarchicalFacetsRefinements?this:this.setQueryParameters(t)},clearTags:function(){return void 0===this.tagFilters&&0===this.tagRefinements.length?this:this.setQueryParameters({tagFilters:void 0,tagRefinements:[]})},setIndex:function(e){return e===this.index?this:this.setQueryParameters({index:e})},setQuery:function(e){return e===this.query?this:this.setQueryParameters({query:e})},setPage:function(e){return e===this.page?this:this.setQueryParameters({page:e})},setFacets:function(e){return this.setQueryParameters({facets:e})},setDisjunctiveFacets:function(e){return this.setQueryParameters({disjunctiveFacets:e})},setHitsPerPage:function(e){return this.hitsPerPage===e?this:this.setQueryParameters({hitsPerPage:e})},setTypoTolerance:function(e){return this.typoTolerance===e?this:this.setQueryParameters({typoTolerance:e})},addNumericRefinement:function(e,t,r){var n=o(r);if(this.isNumericRefined(e,t,n))return this;var i=a({},this.numericRefinements);return i[e]=a({},i[e]),i[e][t]?(i[e][t]=i[e][t].slice(),i[e][t].push(n)):i[e][t]=[n],this.setQueryParameters({numericRefinements:i})},getConjunctiveRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsRefinements[e]||[]},getDisjunctiveRefinements:function(e){return this.isDisjunctiveFacet(e)&&this.disjunctiveFacetsRefinements[e]||[]},getHierarchicalRefinement:function(e){return this.hierarchicalFacetsRefinements[e]||[]},getExcludeRefinements:function(e){return this.isConjunctiveFacet(e)&&this.facetsExcludes[e]||[]},removeNumericRefinement:function(e,t,r){var n=r;return void 0!==n?this.isNumericRefined(e,t,n)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,i){return i===e&&r.op===t&&l(r.val,o(n))}))}):this:void 0!==t?this.isNumericRefined(e,t)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(r,n){return n===e&&r.op===t}))}):this:this.isNumericRefined(e)?this.setQueryParameters({numericRefinements:this._clearNumericRefinements((function(t,r){return r===e}))}):this},getNumericRefinements:function(e){return this.numericRefinements[e]||{}},getNumericRefinement:function(e,t){return this.numericRefinements[e]&&this.numericRefinements[e][t]},_clearNumericRefinements:function(e){if(void 0===e)return c(this.numericRefinements)?{}:this.numericRefinements;if("string"==typeof e)return u(this.numericRefinements,[e]);if("function"==typeof e){var t=!1,r=this.numericRefinements,n=Object.keys(r).reduce((function(n,i){var s=r[i],a={};return s=s||{},Object.keys(s).forEach((function(r){var n=s[r]||[],c=[];n.forEach((function(t){e({val:t,op:r},i,"numeric")||c.push(t)})),c.length!==n.length&&(t=!0),a[r]=c})),n[i]=a,n}),{});return t?n:this.numericRefinements}},addFacet:function(e){return this.isConjunctiveFacet(e)?this:this.setQueryParameters({facets:this.facets.concat([e])})},addDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this:this.setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.concat([e])})},addHierarchicalFacet:function(e){if(this.isHierarchicalFacet(e.name))throw new Error("Cannot declare two hierarchical facets with the same name: `"+e.name+"`");return this.setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.concat([e])})},addFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this:this.setQueryParameters({facetsRefinements:f.addRefinement(this.facetsRefinements,e,t)})},addExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this:this.setQueryParameters({facetsExcludes:f.addRefinement(this.facetsExcludes,e,t)})},addDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this:this.setQueryParameters({disjunctiveFacetsRefinements:f.addRefinement(this.disjunctiveFacetsRefinements,e,t)})},addTagRefinement:function(e){if(this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.concat(e)};return this.setQueryParameters(t)},removeFacet:function(e){return this.isConjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({facets:this.facets.filter((function(t){return t!==e}))}):this},removeDisjunctiveFacet:function(e){return this.isDisjunctiveFacet(e)?this.clearRefinements(e).setQueryParameters({disjunctiveFacets:this.disjunctiveFacets.filter((function(t){return t!==e}))}):this},removeHierarchicalFacet:function(e){return this.isHierarchicalFacet(e)?this.clearRefinements(e).setQueryParameters({hierarchicalFacets:this.hierarchicalFacets.filter((function(t){return t.name!==e}))}):this},removeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsRefinements,e,t)?this.setQueryParameters({facetsRefinements:f.removeRefinement(this.facetsRefinements,e,t)}):this},removeExcludeRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return f.isRefined(this.facetsExcludes,e,t)?this.setQueryParameters({facetsExcludes:f.removeRefinement(this.facetsExcludes,e,t)}):this},removeDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return f.isRefined(this.disjunctiveFacetsRefinements,e,t)?this.setQueryParameters({disjunctiveFacetsRefinements:f.removeRefinement(this.disjunctiveFacetsRefinements,e,t)}):this},removeTagRefinement:function(e){if(!this.isTagRefined(e))return this;var t={tagRefinements:this.tagRefinements.filter((function(t){return t!==e}))};return this.setQueryParameters(t)},toggleRefinement:function(e,t){return this.toggleFacetRefinement(e,t)},toggleFacetRefinement:function(e,t){if(this.isHierarchicalFacet(e))return this.toggleHierarchicalFacetRefinement(e,t);if(this.isConjunctiveFacet(e))return this.toggleConjunctiveFacetRefinement(e,t);if(this.isDisjunctiveFacet(e))return this.toggleDisjunctiveFacetRefinement(e,t);throw new Error("Cannot refine the undeclared facet "+e+"; it should be added to the helper options facets, disjunctiveFacets or hierarchicalFacets")},toggleConjunctiveFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsRefinements:f.toggleRefinement(this.facetsRefinements,e,t)})},toggleExcludeFacetRefinement:function(e,t){if(!this.isConjunctiveFacet(e))throw new Error(e+" is not defined in the facets attribute of the helper configuration");return this.setQueryParameters({facetsExcludes:f.toggleRefinement(this.facetsExcludes,e,t)})},toggleDisjunctiveFacetRefinement:function(e,t){if(!this.isDisjunctiveFacet(e))throw new Error(e+" is not defined in the disjunctiveFacets attribute of the helper configuration");return this.setQueryParameters({disjunctiveFacetsRefinements:f.toggleRefinement(this.disjunctiveFacetsRefinements,e,t)})},toggleHierarchicalFacetRefinement:function(e,t){if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration");var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e)),i={};return void 0!==this.hierarchicalFacetsRefinements[e]&&this.hierarchicalFacetsRefinements[e].length>0&&(this.hierarchicalFacetsRefinements[e][0]===t||0===this.hierarchicalFacetsRefinements[e][0].indexOf(t+r))?-1===t.indexOf(r)?i[e]=[]:i[e]=[t.slice(0,t.lastIndexOf(r))]:i[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},i,this.hierarchicalFacetsRefinements)})},addHierarchicalFacetRefinement:function(e,t){if(this.isHierarchicalFacetRefined(e))throw new Error(e+" is already refined.");if(!this.isHierarchicalFacet(e))throw new Error(e+" is not defined in the hierarchicalFacets attribute of the helper configuration.");var r={};return r[e]=[t],this.setQueryParameters({hierarchicalFacetsRefinements:n({},r,this.hierarchicalFacetsRefinements)})},removeHierarchicalFacetRefinement:function(e){if(!this.isHierarchicalFacetRefined(e))return this;var t={};return t[e]=[],this.setQueryParameters({hierarchicalFacetsRefinements:n({},t,this.hierarchicalFacetsRefinements)})},toggleTagRefinement:function(e){return this.isTagRefined(e)?this.removeTagRefinement(e):this.addTagRefinement(e)},isDisjunctiveFacet:function(e){return this.disjunctiveFacets.indexOf(e)>-1},isHierarchicalFacet:function(e){return void 0!==this.getHierarchicalFacetByName(e)},isConjunctiveFacet:function(e){return this.facets.indexOf(e)>-1},isFacetRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsRefinements,e,t)},isExcludeRefined:function(e,t){return!!this.isConjunctiveFacet(e)&&f.isRefined(this.facetsExcludes,e,t)},isDisjunctiveFacetRefined:function(e,t){return!!this.isDisjunctiveFacet(e)&&f.isRefined(this.disjunctiveFacetsRefinements,e,t)},isHierarchicalFacetRefined:function(e,t){if(!this.isHierarchicalFacet(e))return!1;var r=this.getHierarchicalRefinement(e);return t?-1!==r.indexOf(t):r.length>0},isNumericRefined:function(e,t,r){if(void 0===r&&void 0===t)return Boolean(this.numericRefinements[e]);var n=this.numericRefinements[e]&&void 0!==this.numericRefinements[e][t];if(void 0===r||!n)return n;var s,a,c=o(r),u=void 0!==(s=this.numericRefinements[e][t],a=c,i(s,(function(e){return l(e,a)})));return n&&u},isTagRefined:function(e){return-1!==this.tagRefinements.indexOf(e)},getRefinedDisjunctiveFacets:function(){var e=this,t=s(Object.keys(this.numericRefinements).filter((function(t){return Object.keys(e.numericRefinements[t]).length>0})),this.disjunctiveFacets);return Object.keys(this.disjunctiveFacetsRefinements).filter((function(t){return e.disjunctiveFacetsRefinements[t].length>0})).concat(t).concat(this.getRefinedHierarchicalFacets()).sort()},getRefinedHierarchicalFacets:function(){var e=this;return s(this.hierarchicalFacets.map((function(e){return e.name})),Object.keys(this.hierarchicalFacetsRefinements).filter((function(t){return e.hierarchicalFacetsRefinements[t].length>0}))).sort()},getUnrefinedDisjunctiveFacets:function(){var e=this.getRefinedDisjunctiveFacets();return this.disjunctiveFacets.filter((function(t){return-1===e.indexOf(t)}))},managedParameters:["index","facets","disjunctiveFacets","facetsRefinements","hierarchicalFacets","facetsExcludes","disjunctiveFacetsRefinements","numericRefinements","tagRefinements","hierarchicalFacetsRefinements"],getQueryParams:function(){var e=this.managedParameters,t={},r=this;return Object.keys(this).forEach((function(n){var i=r[n];-1===e.indexOf(n)&&void 0!==i&&(t[n]=i)})),t},setQueryParameter:function(e,t){if(this[e]===t)return this;var r={};return r[e]=t,this.setQueryParameters(r)},setQueryParameters:function(e){if(!e)return this;var t=m.validate(this,e);if(t)throw t;var r=this,n=m._parseNumbers(e),i=Object.keys(this).reduce((function(e,t){return e[t]=r[t],e}),{}),s=Object.keys(n).reduce((function(e,t){var r=void 0!==e[t],i=void 0!==n[t];return r&&!i?u(e,[t]):(i&&(e[t]=n[t]),e)}),i);return new this.constructor(s)},resetPage:function(){return void 0===this.page?this:this.setPage(0)},_getHierarchicalFacetSortBy:function(e){return e.sortBy||["isRefined:desc","name:asc"]},_getHierarchicalFacetSeparator:function(e){return e.separator||" > "},_getHierarchicalRootPath:function(e){return e.rootPath||null},_getHierarchicalShowParentLevel:function(e){return"boolean"!=typeof e.showParentLevel||e.showParentLevel},getHierarchicalFacetByName:function(e){return i(this.hierarchicalFacets,(function(t){return t.name===e}))},getHierarchicalFacetBreadcrumb:function(e){if(!this.isHierarchicalFacet(e))return[];var t=this.getHierarchicalRefinement(e)[0];if(!t)return[];var r=this._getHierarchicalFacetSeparator(this.getHierarchicalFacetByName(e));return t.split(r).map((function(e){return e.trim()}))},toString:function(){return JSON.stringify(this,null,2)}},e.exports=m},10210:(e,t,r)=>{"use strict";e.exports=function(e){return function(t,r){var n=e.hierarchicalFacets[r],o=e.hierarchicalFacetsRefinements[n.name]&&e.hierarchicalFacetsRefinements[n.name][0]||"",h=e._getHierarchicalFacetSeparator(n),f=e._getHierarchicalRootPath(n),l=e._getHierarchicalShowParentLevel(n),m=s(e._getHierarchicalFacetSortBy(n)),d=t.every((function(e){return e.exhaustive})),p=function(e,t,r,n,s){return function(o,h,f){var l=o;if(f>0){var m=0;for(l=o;m<f;){var d=l&&Array.isArray(l.data)?l.data:[];l=i(d,(function(e){return e.isRefined})),m++}}if(l){var p=Object.keys(h.data).map((function(e){return[e,h.data[e]]})).filter((function(e){return function(e,t,r,n,i,s){if(i&&(0!==e.indexOf(i)||i===e))return!1;return!i&&-1===e.indexOf(n)||i&&e.split(n).length-i.split(n).length==1||-1===e.indexOf(n)&&-1===r.indexOf(n)||0===r.indexOf(e)||0===e.indexOf(t+n)&&(s||0===e.indexOf(r))}(e[0],l.path||r,s,t,r,n)}));l.data=a(p.map((function(e){var r=e[0];return function(e,t,r,n,i){var s=t.split(r);return{name:s[s.length-1].trim(),path:t,escapedValue:c(t),count:e,isRefined:n===t||0===n.indexOf(t+r),exhaustive:i,data:null}}(e[1],r,t,u(s),h.exhaustive)})),e[0],e[1])}return o}}(m,h,f,l,o),v=t;return f&&(v=t.slice(f.split(h).length)),v.reduce(p,{name:e.hierarchicalFacets[r].name,count:null,isRefined:!0,path:null,escapedValue:null,exhaustive:d,data:null})}};var n=r(94039),i=r(7888),s=r(82293),a=r(42148),c=n.escapeFacetValue,u=n.unescapeFacetValue},23076:(e,t,r)=>{"use strict";var n=r(74587),i=r(52344),s=r(94039),a=r(7888),c=r(69725),u=r(82293),o=r(60185),h=r(42148),f=s.escapeFacetValue,l=s.unescapeFacetValue,m=r(10210);function d(e){var t={};return e.forEach((function(e,r){t[e]=r})),t}function p(e,t,r){t&&t[r]&&(e.stats=t[r])}function v(e,t,r){var s=t[0];this._rawResults=t;var u=this;Object.keys(s).forEach((function(e){u[e]=s[e]}));var h=o({persistHierarchicalRootCount:!1},r);Object.keys(h).forEach((function(e){u[e]=h[e]})),this.processingTimeMS=t.reduce((function(e,t){return void 0===t.processingTimeMS?e:e+t.processingTimeMS}),0),this.disjunctiveFacets=[],this.hierarchicalFacets=e.hierarchicalFacets.map((function(){return[]})),this.facets=[];var f=e.getRefinedDisjunctiveFacets(),v=d(e.facets),g=d(e.disjunctiveFacets),y=1,R=s.facets||{};Object.keys(R).forEach((function(t){var r,n,i=R[t],o=(r=e.hierarchicalFacets,n=t,a(r,(function(e){return(e.attributes||[]).indexOf(n)>-1})));if(o){var h=o.attributes.indexOf(t),f=c(e.hierarchicalFacets,(function(e){return e.name===o.name}));u.hierarchicalFacets[f][h]={attribute:t,data:i,exhaustive:s.exhaustiveFacetsCount}}else{var l,m=-1!==e.disjunctiveFacets.indexOf(t),d=-1!==e.facets.indexOf(t);m&&(l=g[t],u.disjunctiveFacets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(u.disjunctiveFacets[l],s.facets_stats,t)),d&&(l=v[t],u.facets[l]={name:t,data:i,exhaustive:s.exhaustiveFacetsCount},p(u.facets[l],s.facets_stats,t))}})),this.hierarchicalFacets=n(this.hierarchicalFacets),f.forEach((function(r){var n=t[y],a=n&&n.facets?n.facets:{},h=e.getHierarchicalFacetByName(r);Object.keys(a).forEach((function(t){var r,f=a[t];if(h){r=c(e.hierarchicalFacets,(function(e){return e.name===h.name}));var m=c(u.hierarchicalFacets[r],(function(e){return e.attribute===t}));if(-1===m)return;u.hierarchicalFacets[r][m].data=o({},u.hierarchicalFacets[r][m].data,f)}else{r=g[t];var d=s.facets&&s.facets[t]||{};u.disjunctiveFacets[r]={name:t,data:i({},f,d),exhaustive:n.exhaustiveFacetsCount},p(u.disjunctiveFacets[r],n.facets_stats,t),e.disjunctiveFacetsRefinements[t]&&e.disjunctiveFacetsRefinements[t].forEach((function(n){!u.disjunctiveFacets[r].data[n]&&e.disjunctiveFacetsRefinements[t].indexOf(l(n))>-1&&(u.disjunctiveFacets[r].data[n]=0)}))}})),y++})),e.getRefinedHierarchicalFacets().forEach((function(r){var n=e.getHierarchicalFacetByName(r),s=e._getHierarchicalFacetSeparator(n),a=e.getHierarchicalRefinement(r);0===a.length||a[0].split(s).length<2||t.slice(y).forEach((function(t){var r=t&&t.facets?t.facets:{};Object.keys(r).forEach((function(t){var o=r[t],h=c(e.hierarchicalFacets,(function(e){return e.name===n.name})),f=c(u.hierarchicalFacets[h],(function(e){return e.attribute===t}));if(-1!==f){var l={};if(a.length>0&&!u.persistHierarchicalRootCount){var m=a[0].split(s)[0];l[m]=u.hierarchicalFacets[h][f].data[m]}u.hierarchicalFacets[h][f].data=i(l,o,u.hierarchicalFacets[h][f].data)}})),y++}))})),Object.keys(e.facetsExcludes).forEach((function(t){var r=e.facetsExcludes[t],n=v[t];u.facets[n]={name:t,data:R[t],exhaustive:s.exhaustiveFacetsCount},r.forEach((function(e){u.facets[n]=u.facets[n]||{name:t},u.facets[n].data=u.facets[n].data||{},u.facets[n].data[e]=0}))})),this.hierarchicalFacets=this.hierarchicalFacets.map(m(e)),this.facets=n(this.facets),this.disjunctiveFacets=n(this.disjunctiveFacets),this._state=e}function g(e,t){function r(e){return e.name===t}if(e._state.isConjunctiveFacet(t)){var n=a(e.facets,r);return n?Object.keys(n.data).map((function(r){var i=f(r);return{name:r,escapedValue:i,count:n.data[r],isRefined:e._state.isFacetRefined(t,i),isExcluded:e._state.isExcludeRefined(t,r)}})):[]}if(e._state.isDisjunctiveFacet(t)){var i=a(e.disjunctiveFacets,r);return i?Object.keys(i.data).map((function(r){var n=f(r);return{name:r,escapedValue:n,count:i.data[r],isRefined:e._state.isDisjunctiveFacetRefined(t,n)}})):[]}if(e._state.isHierarchicalFacet(t)){var s=a(e.hierarchicalFacets,r);if(!s)return s;var c=e._state.getHierarchicalFacetByName(t),u=e._state._getHierarchicalFacetSeparator(c),o=l(e._state.getHierarchicalRefinement(t)[0]||"");0===o.indexOf(c.rootPath)&&(o=o.replace(c.rootPath+u,""));var h=o.split(u);return h.unshift(t),y(s,h,0),s}}function y(e,t,r){e.isRefined=e.name===t[r],e.data&&e.data.forEach((function(e){y(e,t,r+1)}))}function R(e,t,r,n){if(n=n||0,Array.isArray(t))return e(t,r[n]);if(!t.data||0===t.data.length)return t;var s=t.data.map((function(t){return R(e,t,r,n+1)})),a=e(s,r[n]);return i({data:a},t)}function F(e,t){var r=a(e,(function(e){return e.name===t}));return r&&r.stats}function b(e,t,r,n,i){var s=a(i,(function(e){return e.name===r})),c=s&&s.data&&s.data[n]?s.data[n]:0,u=s&&s.exhaustive||!1;return{type:t,attributeName:r,name:n,count:c,exhaustive:u}}v.prototype.getFacetByName=function(e){function t(t){return t.name===e}return a(this.facets,t)||a(this.disjunctiveFacets,t)||a(this.hierarchicalFacets,t)},v.DEFAULT_SORT=["isRefined:desc","count:desc","name:asc"],v.prototype.getFacetValues=function(e,t){var r=g(this,e);if(r){var n,s=i({},t,{sortBy:v.DEFAULT_SORT,facetOrdering:!(t&&t.sortBy)}),a=this;if(Array.isArray(r))n=[e];else n=a._state.getHierarchicalFacetByName(r.name).attributes;return R((function(e,t){if(s.facetOrdering){var r=function(e,t){return e.renderingContent&&e.renderingContent.facetOrdering&&e.renderingContent.facetOrdering.values&&e.renderingContent.facetOrdering.values[t]}(a,t);if(r)return function(e,t){var r=[],n=[],i=(t.order||[]).reduce((function(e,t,r){return e[t]=r,e}),{});e.forEach((function(e){var t=e.path||e.name;void 0!==i[t]?r[i[t]]=e:n.push(e)})),r=r.filter((function(e){return e}));var s,a=t.sortRemainingBy;return"hidden"===a?r:(s="alpha"===a?[["path","name"],["asc","asc"]]:[["count"],["desc"]],r.concat(h(n,s[0],s[1])))}(e,r)}if(Array.isArray(s.sortBy)){var n=u(s.sortBy,v.DEFAULT_SORT);return h(e,n[0],n[1])}if("function"==typeof s.sortBy)return function(e,t){return t.sort(e)}(s.sortBy,e);throw new Error("options.sortBy is optional but if defined it must be either an array of string (predicates) or a sorting function")}),r,n)}},v.prototype.getFacetStats=function(e){return this._state.isConjunctiveFacet(e)?F(this.facets,e):this._state.isDisjunctiveFacet(e)?F(this.disjunctiveFacets,e):void 0},v.prototype.getRefinements=function(){var e=this._state,t=this,r=[];return Object.keys(e.facetsRefinements).forEach((function(n){e.facetsRefinements[n].forEach((function(i){r.push(b(e,"facet",n,i,t.facets))}))})),Object.keys(e.facetsExcludes).forEach((function(n){e.facetsExcludes[n].forEach((function(i){r.push(b(e,"exclude",n,i,t.facets))}))})),Object.keys(e.disjunctiveFacetsRefinements).forEach((function(n){e.disjunctiveFacetsRefinements[n].forEach((function(i){r.push(b(e,"disjunctive",n,i,t.disjunctiveFacets))}))})),Object.keys(e.hierarchicalFacetsRefinements).forEach((function(n){e.hierarchicalFacetsRefinements[n].forEach((function(i){r.push(function(e,t,r,n){var i=e.getHierarchicalFacetByName(t),s=e._getHierarchicalFacetSeparator(i),c=r.split(s),u=a(n,(function(e){return e.name===t})),o=c.reduce((function(e,t){var r=e&&a(e.data,(function(e){return e.name===t}));return void 0!==r?r:e}),u),h=o&&o.count||0,f=o&&o.exhaustive||!1,l=o&&o.path||"";return{type:"hierarchical",attributeName:t,name:l,count:h,exhaustive:f}}(e,n,i,t.hierarchicalFacets))}))})),Object.keys(e.numericRefinements).forEach((function(t){var n=e.numericRefinements[t];Object.keys(n).forEach((function(e){n[e].forEach((function(n){r.push({type:"numeric",attributeName:t,name:n,numericValue:n,operator:e})}))}))})),e.tagRefinements.forEach((function(e){r.push({type:"tag",attributeName:"_tags",name:e})})),r},e.exports=v},49374:(e,t,r)=>{"use strict";var n=r(17331),i=r(68078),s=r(94039).escapeFacetValue,a=r(14853),c=r(60185),u=r(90116),o=r(49803),h=r(96394),f=r(17775),l=r(23076),m=r(24336);function d(e,t,r,n){"function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.setClient(e);var i=r||{};i.index=t,this.state=f.make(i),this.lastResults=null,this._queryId=0,this._lastQueryIdReceived=-1,this.derivedHelpers=[],this._currentNbQueries=0,this._searchResultsOptions=n}function p(e){if(e<0)throw new Error("Page requested below 0.");return this._change({state:this.state.setPage(e),isPageReset:!1}),this}function v(){return this.state.page}a(d,n),d.prototype.search=function(){return this._search({onlyWithDerivedHelpers:!1}),this},d.prototype.searchOnlyWithDerivedHelpers=function(){return this._search({onlyWithDerivedHelpers:!0}),this},d.prototype.getQuery=function(){var e=this.state;return h._getHitsSearchParams(e)},d.prototype.searchOnce=function(e,t){var r=e?this.state.setQueryParameters(e):this.state,n=h._getQueries(r.index,r),i=this;if(this._currentNbQueries++,this.emit("searchOnce",{state:r}),!t)return this.client.search(n).then((function(e){return i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),{content:new l(r,e.results),state:r,_originalResponse:e}}),(function(e){throw i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),e}));this.client.search(n).then((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(null,new l(r,e.results),r)})).catch((function(e){i._currentNbQueries--,0===i._currentNbQueries&&i.emit("searchQueueEmpty"),t(e,null,r)}))},d.prototype.findAnswers=function(e){console.warn("[algoliasearch-helper] answers is no longer supported");var t=this.state,r=this.derivedHelpers[0];if(!r)return Promise.resolve([]);var n=r.getModifiedState(t),i=c({attributesForPrediction:e.attributesForPrediction,nbHits:e.nbHits},{params:o(h._getHitsSearchParams(n),["attributesToSnippet","hitsPerPage","restrictSearchableAttributes","snippetEllipsisText"])}),s="search for answers was called, but this client does not have a function client.initIndex(index).findAnswers";if("function"!=typeof this.client.initIndex)throw new Error(s);var a=this.client.initIndex(n.index);if("function"!=typeof a.findAnswers)throw new Error(s);return a.findAnswers(n.query,e.queryLanguages,i)},d.prototype.searchForFacetValues=function(e,t,r,n){var i="function"==typeof this.client.searchForFacetValues,a="function"==typeof this.client.initIndex;if(!i&&!a&&"function"!=typeof this.client.search)throw new Error("search for facet values (searchable) was called, but this client does not have a function client.searchForFacetValues or client.initIndex(index).searchForFacetValues");var c=this.state.setQueryParameters(n||{}),u=c.isDisjunctiveFacet(e),o=h.getSearchForFacetQuery(e,t,r,c);this._currentNbQueries++;var f,l=this;return i?f=this.client.searchForFacetValues([{indexName:c.index,params:o}]):a?f=this.client.initIndex(c.index).searchForFacetValues(o):(delete o.facetName,f=this.client.search([{type:"facet",facet:e,indexName:c.index,params:o}]).then((function(e){return e.results[0]}))),this.emit("searchForFacetValues",{state:c,facet:e,query:t}),f.then((function(t){return l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),(t=Array.isArray(t)?t[0]:t).facetHits.forEach((function(t){t.escapedValue=s(t.value),t.isRefined=u?c.isDisjunctiveFacetRefined(e,t.escapedValue):c.isFacetRefined(e,t.escapedValue)})),t}),(function(e){throw l._currentNbQueries--,0===l._currentNbQueries&&l.emit("searchQueueEmpty"),e}))},d.prototype.setQuery=function(e){return this._change({state:this.state.resetPage().setQuery(e),isPageReset:!0}),this},d.prototype.clearRefinements=function(e){return this._change({state:this.state.resetPage().clearRefinements(e),isPageReset:!0}),this},d.prototype.clearTags=function(){return this._change({state:this.state.resetPage().clearTags(),isPageReset:!0}),this},d.prototype.addDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addDisjunctiveRefine=function(){return this.addDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.addHierarchicalFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addHierarchicalFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().addNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.addFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().addFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.addRefine=function(){return this.addFacetRefinement.apply(this,arguments)},d.prototype.addFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().addExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.addExclude=function(){return this.addFacetExclusion.apply(this,arguments)},d.prototype.addTag=function(e){return this._change({state:this.state.resetPage().addTagRefinement(e),isPageReset:!0}),this},d.prototype.removeNumericRefinement=function(e,t,r){return this._change({state:this.state.resetPage().removeNumericRefinement(e,t,r),isPageReset:!0}),this},d.prototype.removeDisjunctiveFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeDisjunctiveFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeDisjunctiveRefine=function(){return this.removeDisjunctiveFacetRefinement.apply(this,arguments)},d.prototype.removeHierarchicalFacetRefinement=function(e){return this._change({state:this.state.resetPage().removeHierarchicalFacetRefinement(e),isPageReset:!0}),this},d.prototype.removeFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().removeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.removeRefine=function(){return this.removeFacetRefinement.apply(this,arguments)},d.prototype.removeFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().removeExcludeRefinement(e,t),isPageReset:!0}),this},d.prototype.removeExclude=function(){return this.removeFacetExclusion.apply(this,arguments)},d.prototype.removeTag=function(e){return this._change({state:this.state.resetPage().removeTagRefinement(e),isPageReset:!0}),this},d.prototype.toggleFacetExclusion=function(e,t){return this._change({state:this.state.resetPage().toggleExcludeFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleExclude=function(){return this.toggleFacetExclusion.apply(this,arguments)},d.prototype.toggleRefinement=function(e,t){return this.toggleFacetRefinement(e,t)},d.prototype.toggleFacetRefinement=function(e,t){return this._change({state:this.state.resetPage().toggleFacetRefinement(e,t),isPageReset:!0}),this},d.prototype.toggleRefine=function(){return this.toggleFacetRefinement.apply(this,arguments)},d.prototype.toggleTag=function(e){return this._change({state:this.state.resetPage().toggleTagRefinement(e),isPageReset:!0}),this},d.prototype.nextPage=function(){var e=this.state.page||0;return this.setPage(e+1)},d.prototype.previousPage=function(){var e=this.state.page||0;return this.setPage(e-1)},d.prototype.setCurrentPage=p,d.prototype.setPage=p,d.prototype.setIndex=function(e){return this._change({state:this.state.resetPage().setIndex(e),isPageReset:!0}),this},d.prototype.setQueryParameter=function(e,t){return this._change({state:this.state.resetPage().setQueryParameter(e,t),isPageReset:!0}),this},d.prototype.setState=function(e){return this._change({state:f.make(e),isPageReset:!1}),this},d.prototype.overrideStateWithoutTriggeringChangeEvent=function(e){return this.state=new f(e),this},d.prototype.hasRefinements=function(e){return!!u(this.state.getNumericRefinements(e))||(this.state.isConjunctiveFacet(e)?this.state.isFacetRefined(e):this.state.isDisjunctiveFacet(e)?this.state.isDisjunctiveFacetRefined(e):!!this.state.isHierarchicalFacet(e)&&this.state.isHierarchicalFacetRefined(e))},d.prototype.isExcluded=function(e,t){return this.state.isExcludeRefined(e,t)},d.prototype.isDisjunctiveRefined=function(e,t){return this.state.isDisjunctiveFacetRefined(e,t)},d.prototype.hasTag=function(e){return this.state.isTagRefined(e)},d.prototype.isTagRefined=function(){return this.hasTagRefinements.apply(this,arguments)},d.prototype.getIndex=function(){return this.state.index},d.prototype.getCurrentPage=v,d.prototype.getPage=v,d.prototype.getTags=function(){return this.state.tagRefinements},d.prototype.getRefinements=function(e){var t=[];if(this.state.isConjunctiveFacet(e))this.state.getConjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"conjunctive"})})),this.state.getExcludeRefinements(e).forEach((function(e){t.push({value:e,type:"exclude"})}));else if(this.state.isDisjunctiveFacet(e)){this.state.getDisjunctiveRefinements(e).forEach((function(e){t.push({value:e,type:"disjunctive"})}))}var r=this.state.getNumericRefinements(e);return Object.keys(r).forEach((function(e){var n=r[e];t.push({value:n,operator:e,type:"numeric"})})),t},d.prototype.getNumericRefinement=function(e,t){return this.state.getNumericRefinement(e,t)},d.prototype.getHierarchicalFacetBreadcrumb=function(e){return this.state.getHierarchicalFacetBreadcrumb(e)},d.prototype._search=function(e){var t=this.state,r=[],n=[];e.onlyWithDerivedHelpers||(n=h._getQueries(t.index,t),r.push({state:t,queriesCount:n.length,helper:this}),this.emit("search",{state:t,results:this.lastResults}));var i=this.derivedHelpers.map((function(e){var n=e.getModifiedState(t),i=n.index?h._getQueries(n.index,n):[];return r.push({state:n,queriesCount:i.length,helper:e}),e.emit("search",{state:n,results:e.lastResults}),i})),s=Array.prototype.concat.apply(n,i),a=this._queryId++;if(this._currentNbQueries++,!s.length)return Promise.resolve({results:[]}).then(this._dispatchAlgoliaResponse.bind(this,r,a));try{this.client.search(s).then(this._dispatchAlgoliaResponse.bind(this,r,a)).catch(this._dispatchAlgoliaError.bind(this,a))}catch(c){this.emit("error",{error:c})}},d.prototype._dispatchAlgoliaResponse=function(e,t,r){var n=this;if(!(t<this._lastQueryIdReceived)){this._currentNbQueries-=t-this._lastQueryIdReceived,this._lastQueryIdReceived=t,0===this._currentNbQueries&&this.emit("searchQueueEmpty");var i=r.results.slice();e.forEach((function(e){var t=e.state,r=e.queriesCount,s=e.helper,a=i.splice(0,r);t.index?(s.lastResults=new l(t,a,n._searchResultsOptions),s.emit("result",{results:s.lastResults,state:t})):s.emit("result",{results:null,state:t})}))}},d.prototype._dispatchAlgoliaError=function(e,t){e<this._lastQueryIdReceived||(this._currentNbQueries-=e-this._lastQueryIdReceived,this._lastQueryIdReceived=e,this.emit("error",{error:t}),0===this._currentNbQueries&&this.emit("searchQueueEmpty"))},d.prototype.containsRefinement=function(e,t,r,n){return e||0!==t.length||0!==r.length||0!==n.length},d.prototype._hasDisjunctiveRefinements=function(e){return this.state.disjunctiveRefinements[e]&&this.state.disjunctiveRefinements[e].length>0},d.prototype._change=function(e){var t=e.state,r=e.isPageReset;t!==this.state&&(this.state=t,this.emit("change",{state:this.state,results:this.lastResults,isPageReset:r}))},d.prototype.clearCache=function(){return this.client.clearCache&&this.client.clearCache(),this},d.prototype.setClient=function(e){return this.client===e||("function"==typeof e.addAlgoliaAgent&&e.addAlgoliaAgent("JS Helper ("+m+")"),this.client=e),this},d.prototype.getClient=function(){return this.client},d.prototype.derive=function(e){var t=new i(this,e);return this.derivedHelpers.push(t),t},d.prototype.detachDerivedHelper=function(e){var t=this.derivedHelpers.indexOf(e);if(-1===t)throw new Error("Derived helper already detached");this.derivedHelpers.splice(t,1)},d.prototype.hasPendingRequests=function(){return this._currentNbQueries>0},e.exports=d},74587:e=>{"use strict";e.exports=function(e){return Array.isArray(e)?e.filter(Boolean):[]}},52344:e=>{"use strict";e.exports=function(){return Array.prototype.slice.call(arguments).reduceRight((function(e,t){return Object.keys(Object(t)).forEach((function(r){void 0!==t[r]&&(void 0!==e[r]&&delete e[r],e[r]=t[r])})),e}),{})}},94039:e=>{"use strict";e.exports={escapeFacetValue:function(e){return"string"!=typeof e?e:String(e).replace(/^-/,"\\-")},unescapeFacetValue:function(e){return"string"!=typeof e?e:e.replace(/^\\-/,"-")}}},7888:e=>{"use strict";e.exports=function(e,t){if(Array.isArray(e))for(var r=0;r<e.length;r++)if(t(e[r]))return e[r]}},69725:e=>{"use strict";e.exports=function(e,t){if(!Array.isArray(e))return-1;for(var r=0;r<e.length;r++)if(t(e[r]))return r;return-1}},82293:(e,t,r)=>{"use strict";var n=r(7888);e.exports=function(e,t){var r=(t||[]).map((function(e){return e.split(":")}));return e.reduce((function(e,t){var i=t.split(":"),s=n(r,(function(e){return e[0]===i[0]}));return i.length>1||!s?(e[0].push(i[0]),e[1].push(i[1]),e):(e[0].push(s[0]),e[1].push(s[1]),e)}),[[],[]])}},14853:e=>{"use strict";e.exports=function(e,t){e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}},22686:e=>{"use strict";e.exports=function(e,t){return e.filter((function(r,n){return t.indexOf(r)>-1&&e.indexOf(r)===n}))}},60185:e=>{"use strict";function t(e){return"function"==typeof e||Array.isArray(e)||"[object Object]"===Object.prototype.toString.call(e)}function r(e,n){if(e===n)return e;for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)&&"__proto__"!==i&&"constructor"!==i){var s=n[i],a=e[i];void 0!==a&&void 0===s||(t(a)&&t(s)?e[i]=r(a,s):e[i]="object"==typeof(c=s)&&null!==c?r(Array.isArray(c)?[]:{},c):c)}var c;return e}e.exports=function(e){t(e)||(e={});for(var n=1,i=arguments.length;n<i;n++){var s=arguments[n];t(s)&&r(e,s)}return e}},90116:e=>{"use strict";e.exports=function(e){return e&&Object.keys(e).length>0}},49803:e=>{"use strict";e.exports=function(e,t){if(null===e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}},42148:e=>{"use strict";function t(e,t){if(e!==t){var r=void 0!==e,n=null===e,i=void 0!==t,s=null===t;if(!s&&e>t||n&&i||!r)return 1;if(!n&&e<t||s&&r||!i)return-1}return 0}e.exports=function(e,r,n){if(!Array.isArray(e))return[];Array.isArray(n)||(n=[]);var i=e.map((function(e,t){return{criteria:r.map((function(t){return e[t]})),index:t,value:e}}));return i.sort((function(e,r){for(var i=-1;++i<e.criteria.length;){var s=t(e.criteria[i],r.criteria[i]);if(s)return i>=n.length?s:"desc"===n[i]?-s:s}return e.index-r.index})),i.map((function(e){return e.value}))}},28023:e=>{"use strict";e.exports=function e(t){if("number"==typeof t)return t;if("string"==typeof t)return parseFloat(t);if(Array.isArray(t))return t.map(e);throw new Error("The value should be a number, a parsable string or an array of those.")}},96394:(e,t,r)=>{"use strict";var n=r(60185);function i(e){return Object.keys(e).sort().reduce((function(t,r){return t[r]=e[r],t}),{})}var s={_getQueries:function(e,t){var r=[];return r.push({indexName:e,params:s._getHitsSearchParams(t)}),t.getRefinedDisjunctiveFacets().forEach((function(n){r.push({indexName:e,params:s._getDisjunctiveFacetSearchParams(t,n)})})),t.getRefinedHierarchicalFacets().forEach((function(n){var i=t.getHierarchicalFacetByName(n),a=t.getHierarchicalRefinement(n),c=t._getHierarchicalFacetSeparator(i);if(a.length>0&&a[0].split(c).length>1){var u=a[0].split(c).slice(0,-1).reduce((function(e,t,r){return e.concat({attribute:i.attributes[r],value:0===r?t:[e[e.length-1].value,t].join(c)})}),[]);u.forEach((function(n,a){var c=s._getDisjunctiveFacetSearchParams(t,n.attribute,0===a);function o(e){return i.attributes.some((function(t){return t===e.split(":")[0]}))}var h=(c.facetFilters||[]).reduce((function(e,t){if(Array.isArray(t)){var r=t.filter((function(e){return!o(e)}));r.length>0&&e.push(r)}return"string"!=typeof t||o(t)||e.push(t),e}),[]),f=u[a-1];c.facetFilters=a>0?h.concat(f.attribute+":"+f.value):h.length>0?h:void 0,r.push({indexName:e,params:c})}))}})),r},_getHitsSearchParams:function(e){var t=e.facets.concat(e.disjunctiveFacets).concat(s._getHitsHierarchicalFacetsAttributes(e)).sort(),r=s._getFacetFilters(e),a=s._getNumericFilters(e),c=s._getTagFilters(e),u={facets:t.indexOf("*")>-1?["*"]:t,tagFilters:c};return r.length>0&&(u.facetFilters=r),a.length>0&&(u.numericFilters=a),i(n({},e.getQueryParams(),u))},_getDisjunctiveFacetSearchParams:function(e,t,r){var a=s._getFacetFilters(e,t,r),c=s._getNumericFilters(e,t),u=s._getTagFilters(e),o={hitsPerPage:0,page:0,analytics:!1,clickAnalytics:!1};u.length>0&&(o.tagFilters=u);var h=e.getHierarchicalFacetByName(t);return o.facets=h?s._getDisjunctiveHierarchicalFacetAttribute(e,h,r):t,c.length>0&&(o.numericFilters=c),a.length>0&&(o.facetFilters=a),i(n({},e.getQueryParams(),o))},_getNumericFilters:function(e,t){if(e.numericFilters)return e.numericFilters;var r=[];return Object.keys(e.numericRefinements).forEach((function(n){var i=e.numericRefinements[n]||{};Object.keys(i).forEach((function(e){var s=i[e]||[];t!==n&&s.forEach((function(t){if(Array.isArray(t)){var i=t.map((function(t){return n+e+t}));r.push(i)}else r.push(n+e+t)}))}))})),r},_getTagFilters:function(e){return e.tagFilters?e.tagFilters:e.tagRefinements.join(",")},_getFacetFilters:function(e,t,r){var n=[],i=e.facetsRefinements||{};Object.keys(i).sort().forEach((function(e){(i[e]||[]).sort().forEach((function(t){n.push(e+":"+t)}))}));var s=e.facetsExcludes||{};Object.keys(s).sort().forEach((function(e){(s[e]||[]).sort().forEach((function(t){n.push(e+":-"+t)}))}));var a=e.disjunctiveFacetsRefinements||{};Object.keys(a).sort().forEach((function(e){var r=a[e]||[];if(e!==t&&r&&0!==r.length){var i=[];r.sort().forEach((function(t){i.push(e+":"+t)})),n.push(i)}}));var c=e.hierarchicalFacetsRefinements||{};return Object.keys(c).sort().forEach((function(i){var s=(c[i]||[])[0];if(void 0!==s){var a,u,o=e.getHierarchicalFacetByName(i),h=e._getHierarchicalFacetSeparator(o),f=e._getHierarchicalRootPath(o);if(t===i){if(-1===s.indexOf(h)||!f&&!0===r||f&&f.split(h).length===s.split(h).length)return;f?(u=f.split(h).length-1,s=f):(u=s.split(h).length-2,s=s.slice(0,s.lastIndexOf(h))),a=o.attributes[u]}else u=s.split(h).length-1,a=o.attributes[u];a&&n.push([a+":"+s])}})),n},_getHitsHierarchicalFacetsAttributes:function(e){return e.hierarchicalFacets.reduce((function(t,r){var n=e.getHierarchicalRefinement(r.name)[0];if(!n)return t.push(r.attributes[0]),t;var i=e._getHierarchicalFacetSeparator(r),s=n.split(i).length,a=r.attributes.slice(0,s+1);return t.concat(a)}),[])},_getDisjunctiveHierarchicalFacetAttribute:function(e,t,r){var n=e._getHierarchicalFacetSeparator(t);if(!0===r){var i=e._getHierarchicalRootPath(t),s=0;return i&&(s=i.split(n).length),[t.attributes[s]]}var a=(e.getHierarchicalRefinement(t.name)[0]||"").split(n).length-1;return t.attributes.slice(0,a+1)},getSearchForFacetQuery:function(e,t,r,a){var c=a.isDisjunctiveFacet(e)?a.clearRefinements(e):a,u={facetQuery:t,facetName:e};return"number"==typeof r&&(u.maxFacetHits=r),i(n({},s._getHitsSearchParams(c),u))}};e.exports=s},46801:e=>{"use strict";e.exports=function(e){return null!==e&&/^[a-zA-Z0-9_-]{1,64}$/.test(e)}},24336:e=>{"use strict";e.exports="3.16.1"},70290:function(e){e.exports=function(){"use strict";function e(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function r(r){for(var n=1;n<arguments.length;n++){var i=null!=arguments[n]?arguments[n]:{};n%2?t(Object(i),!0).forEach((function(t){e(r,t,i[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(i)):t(Object(i)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(i,e))}))}return r}function n(e,t){if(null==e)return{};var r,n,i=function(e,t){if(null==e)return{};var r,n,i={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}function i(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)){var r=[],n=!0,i=!1,s=void 0;try{for(var a,c=e[Symbol.iterator]();!(n=(a=c.next()).done)&&(r.push(a.value),!t||r.length!==t);n=!0);}catch(e){i=!0,s=e}finally{try{n||null==c.return||c.return()}finally{if(i)throw s}}return r}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function s(e){return function(e){if(Array.isArray(e)){for(var t=0,r=new Array(e.length);t<e.length;t++)r[t]=e[t];return r}}(e)||function(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}function a(e){var t,r="algoliasearch-client-js-".concat(e.key),n=function(){return void 0===t&&(t=e.localStorage||window.localStorage),t},s=function(){return JSON.parse(n().getItem(r)||"{}")},a=function(e){n().setItem(r,JSON.stringify(e))},c=function(){var t=e.timeToLive?1e3*e.timeToLive:null,r=s(),n=Object.fromEntries(Object.entries(r).filter((function(e){return void 0!==i(e,2)[1].timestamp})));if(a(n),t){var c=Object.fromEntries(Object.entries(n).filter((function(e){var r=i(e,2)[1],n=(new Date).getTime();return!(r.timestamp+t<n)})));a(c)}};return{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return Promise.resolve().then((function(){c();var t=JSON.stringify(e);return s()[t]})).then((function(e){return Promise.all([e?e.value:t(),void 0!==e])})).then((function(e){var t=i(e,2),n=t[0],s=t[1];return Promise.all([n,s||r.miss(n)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve().then((function(){var i=s();return i[JSON.stringify(e)]={timestamp:(new Date).getTime(),value:t},n().setItem(r,JSON.stringify(i)),t}))},delete:function(e){return Promise.resolve().then((function(){var t=s();delete t[JSON.stringify(e)],n().setItem(r,JSON.stringify(t))}))},clear:function(){return Promise.resolve().then((function(){n().removeItem(r)}))}}}function c(e){var t=s(e.caches),r=t.shift();return void 0===r?{get:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return t().then((function(e){return Promise.all([e,r.miss(e)])})).then((function(e){return i(e,1)[0]}))},set:function(e,t){return Promise.resolve(t)},delete:function(e){return Promise.resolve()},clear:function(){return Promise.resolve()}}:{get:function(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}};return r.get(e,n,i).catch((function(){return c({caches:t}).get(e,n,i)}))},set:function(e,n){return r.set(e,n).catch((function(){return c({caches:t}).set(e,n)}))},delete:function(e){return r.delete(e).catch((function(){return c({caches:t}).delete(e)}))},clear:function(){return r.clear().catch((function(){return c({caches:t}).clear()}))}}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{serializable:!0},t={};return{get:function(r,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{miss:function(){return Promise.resolve()}},s=JSON.stringify(r);if(s in t)return Promise.resolve(e.serializable?JSON.parse(t[s]):t[s]);var a=n(),c=i&&i.miss||function(){return Promise.resolve()};return a.then((function(e){return c(e)})).then((function(){return a}))},set:function(r,n){return t[JSON.stringify(r)]=e.serializable?JSON.stringify(n):n,Promise.resolve(n)},delete:function(e){return delete t[JSON.stringify(e)],Promise.resolve()},clear:function(){return t={},Promise.resolve()}}}function o(e){for(var t=e.length-1;t>0;t--){var r=Math.floor(Math.random()*(t+1)),n=e[t];e[t]=e[r],e[r]=n}return e}function h(e,t){return t?(Object.keys(t).forEach((function(r){e[r]=t[r](e)})),e):e}function f(e){for(var t=arguments.length,r=new Array(t>1?t-1:0),n=1;n<t;n++)r[n-1]=arguments[n];var i=0;return e.replace(/%s/g,(function(){return encodeURIComponent(r[i++])}))}var l={WithinQueryParameters:0,WithinHeaders:1};function m(e,t){var r=e||{},n=r.data||{};return Object.keys(r).forEach((function(e){-1===["timeout","headers","queryParameters","data","cacheable"].indexOf(e)&&(n[e]=r[e])})),{data:Object.entries(n).length>0?n:void 0,timeout:r.timeout||t,headers:r.headers||{},queryParameters:r.queryParameters||{},cacheable:r.cacheable}}var d={Read:1,Write:2,Any:3},p=1,v=2,g=3;function y(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:p;return r(r({},e),{},{status:t,lastUpdate:Date.now()})}function R(e){return"string"==typeof e?{protocol:"https",url:e,accept:d.Any}:{protocol:e.protocol||"https",url:e.url,accept:e.accept||d.Any}}var F="GET",b="POST";function j(e,t){return Promise.all(t.map((function(t){return e.get(t,(function(){return Promise.resolve(y(t))}))}))).then((function(e){var r=e.filter((function(e){return function(e){return e.status===p||Date.now()-e.lastUpdate>12e4}(e)})),n=e.filter((function(e){return function(e){return e.status===g&&Date.now()-e.lastUpdate<=12e4}(e)})),i=[].concat(s(r),s(n));return{getTimeout:function(e,t){return(0===n.length&&0===e?1:n.length+3+e)*t},statelessHosts:i.length>0?i.map((function(e){return R(e)})):t}}))}function P(e,t,n,i){var a=[],c=function(e,t){if(e.method!==F&&(void 0!==e.data||void 0!==t.data)){var n=Array.isArray(e.data)?e.data:r(r({},e.data),t.data);return JSON.stringify(n)}}(n,i),u=function(e,t){var n=r(r({},e.headers),t.headers),i={};return Object.keys(n).forEach((function(e){var t=n[e];i[e.toLowerCase()]=t})),i}(e,i),o=n.method,h=n.method!==F?{}:r(r({},n.data),i.data),f=r(r(r({"x-algolia-agent":e.userAgent.value},e.queryParameters),h),i.queryParameters),l=0,m=function t(r,s){var h=r.pop();if(void 0===h)throw{name:"RetryError",message:"Unreachable hosts - your application id may be incorrect. If the error persists, contact support@algolia.com.",transporterStackTrace:O(a)};var m={data:c,headers:u,method:o,url:_(h,n.path,f),connectTimeout:s(l,e.timeouts.connect),responseTimeout:s(l,i.timeout)},d=function(e){var t={request:m,response:e,host:h,triesLeft:r.length};return a.push(t),t},p={onSuccess:function(e){return function(e){try{return JSON.parse(e.content)}catch(t){throw function(e,t){return{name:"DeserializationError",message:e,response:t}}(t.message,e)}}(e)},onRetry:function(n){var i=d(n);return n.isTimedOut&&l++,Promise.all([e.logger.info("Retryable failure",w(i)),e.hostsCache.set(h,y(h,n.isTimedOut?g:v))]).then((function(){return t(r,s)}))},onFail:function(e){throw d(e),function(e,t){var r=e.content,n=e.status,i=r;try{i=JSON.parse(r).message}catch(e){}return function(e,t,r){return{name:"ApiError",message:e,status:t,transporterStackTrace:r}}(i,n,t)}(e,O(a))}};return e.requester.send(m).then((function(e){return function(e,t){return function(e){var t=e.status;return e.isTimedOut||function(e){var t=e.isTimedOut,r=e.status;return!t&&0==~~r}(e)||2!=~~(t/100)&&4!=~~(t/100)}(e)?t.onRetry(e):2==~~(e.status/100)?t.onSuccess(e):t.onFail(e)}(e,p)}))};return j(e.hostsCache,t).then((function(e){return m(s(e.statelessHosts).reverse(),e.getTimeout)}))}function x(e){var t={value:"Algolia for JavaScript (".concat(e,")"),add:function(e){var r="; ".concat(e.segment).concat(void 0!==e.version?" (".concat(e.version,")"):"");return-1===t.value.indexOf(r)&&(t.value="".concat(t.value).concat(r)),t}};return t}function _(e,t,r){var n=E(r),i="".concat(e.protocol,"://").concat(e.url,"/").concat("/"===t.charAt(0)?t.substr(1):t);return n.length&&(i+="?".concat(n)),i}function E(e){return Object.keys(e).map((function(t){return f("%s=%s",t,(r=e[t],"[object Object]"===Object.prototype.toString.call(r)||"[object Array]"===Object.prototype.toString.call(r)?JSON.stringify(e[t]):e[t]));var r})).join("&")}function O(e){return e.map((function(e){return w(e)}))}function w(e){var t=e.request.headers["x-algolia-api-key"]?{"x-algolia-api-key":"*****"}:{};return r(r({},e),{},{request:r(r({},e.request),{},{headers:r(r({},e.request.headers),t)})})}var A=function(e){var t=e.appId,n=function(e,t,r){var n={"x-algolia-api-key":r,"x-algolia-application-id":t};return{headers:function(){return e===l.WithinHeaders?n:{}},queryParameters:function(){return e===l.WithinQueryParameters?n:{}}}}(void 0!==e.authMode?e.authMode:l.WithinHeaders,t,e.apiKey),s=function(e){var t=e.hostsCache,r=e.logger,n=e.requester,s=e.requestsCache,a=e.responsesCache,c=e.timeouts,u=e.userAgent,o=e.hosts,h=e.queryParameters,f={hostsCache:t,logger:r,requester:n,requestsCache:s,responsesCache:a,timeouts:c,userAgent:u,headers:e.headers,queryParameters:h,hosts:o.map((function(e){return R(e)})),read:function(e,t){var r=m(t,f.timeouts.read),n=function(){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Read)})),e,r)};if(!0!==(void 0!==r.cacheable?r.cacheable:e.cacheable))return n();var s={request:e,mappedRequestOptions:r,transporter:{queryParameters:f.queryParameters,headers:f.headers}};return f.responsesCache.get(s,(function(){return f.requestsCache.get(s,(function(){return f.requestsCache.set(s,n()).then((function(e){return Promise.all([f.requestsCache.delete(s),e])}),(function(e){return Promise.all([f.requestsCache.delete(s),Promise.reject(e)])})).then((function(e){var t=i(e,2);return t[0],t[1]}))}))}),{miss:function(e){return f.responsesCache.set(s,e)}})},write:function(e,t){return P(f,f.hosts.filter((function(e){return 0!=(e.accept&d.Write)})),e,m(t,f.timeouts.write))}};return f}(r(r({hosts:[{url:"".concat(t,"-dsn.algolia.net"),accept:d.Read},{url:"".concat(t,".algolia.net"),accept:d.Write}].concat(o([{url:"".concat(t,"-1.algolianet.com")},{url:"".concat(t,"-2.algolianet.com")},{url:"".concat(t,"-3.algolianet.com")}]))},e),{},{headers:r(r(r({},n.headers()),{"content-type":"application/x-www-form-urlencoded"}),e.headers),queryParameters:r(r({},n.queryParameters()),e.queryParameters)}));return h({transporter:s,appId:t,addAlgoliaAgent:function(e,t){s.userAgent.add({segment:e,version:t})},clearCache:function(){return Promise.all([s.requestsCache.clear(),s.responsesCache.clear()]).then((function(){}))}},e.methods)},N=function(e){return function(t,r){return t.method===F?e.transporter.read(t,r):e.transporter.write(t,r)}},H=function(e){return function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return h({transporter:e.transporter,appId:e.appId,indexName:t},r.methods)}},S=function(e){return function(t,n){var i=t.map((function(e){return r(r({},e),{},{params:E(e.params||{})})}));return e.transporter.read({method:b,path:"1/indexes/*/queries",data:{requests:i},cacheable:!0},n)}},T=function(e){return function(t,i){return Promise.all(t.map((function(t){var s=t.params,a=s.facetName,c=s.facetQuery,u=n(s,["facetName","facetQuery"]);return H(e)(t.indexName,{methods:{searchForFacetValues:I}}).searchForFacetValues(a,c,r(r({},i),u))})))}},Q=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/answers/%s/prediction",e.indexName),data:{query:t,queryLanguages:r},cacheable:!0},n)}},C=function(e){return function(t,r){return e.transporter.read({method:b,path:f("1/indexes/%s/query",e.indexName),data:{query:t},cacheable:!0},r)}},I=function(e){return function(t,r,n){return e.transporter.read({method:b,path:f("1/indexes/%s/facets/%s/query",e.indexName,t),data:{facetQuery:r},cacheable:!0},n)}},D=1,k=2,q=3;function V(e,t,n){var i,s={appId:e,apiKey:t,timeouts:{connect:1,read:2,write:30},requester:{send:function(e){return new Promise((function(t){var r=new XMLHttpRequest;r.open(e.method,e.url,!0),Object.keys(e.headers).forEach((function(t){return r.setRequestHeader(t,e.headers[t])}));var n,i=function(e,n){return setTimeout((function(){r.abort(),t({status:0,content:n,isTimedOut:!0})}),1e3*e)},s=i(e.connectTimeout,"Connection timeout");r.onreadystatechange=function(){r.readyState>r.OPENED&&void 0===n&&(clearTimeout(s),n=i(e.responseTimeout,"Socket timeout"))},r.onerror=function(){0===r.status&&(clearTimeout(s),clearTimeout(n),t({content:r.responseText||"Network request failed",status:r.status,isTimedOut:!1}))},r.onload=function(){clearTimeout(s),clearTimeout(n),t({content:r.responseText,status:r.status,isTimedOut:!1})},r.send(e.data)}))}},logger:(i=q,{debug:function(e,t){return D>=i&&console.debug(e,t),Promise.resolve()},info:function(e,t){return k>=i&&console.info(e,t),Promise.resolve()},error:function(e,t){return console.error(e,t),Promise.resolve()}}),responsesCache:u(),requestsCache:u({serializable:!1}),hostsCache:c({caches:[a({key:"".concat("4.22.0","-").concat(e)}),u()]}),userAgent:x("4.22.0").add({segment:"Browser",version:"lite"}),authMode:l.WithinQueryParameters};return A(r(r(r({},s),n),{},{methods:{search:S,searchForFacetValues:T,multipleQueries:S,multipleSearchForFacetValues:T,customRequest:N,initIndex:function(e){return function(t){return H(e)(t,{methods:{search:C,searchForFacetValues:I,findAnswers:Q}})}}}}))}return V.version="4.22.0",V}()},88824:(e,t,r)=>{"use strict";r.d(t,{c:()=>o});var n=r(67294),i=r(52263);const s=["zero","one","two","few","many","other"];function a(e){return s.filter((t=>e.includes(t)))}const c={locale:"en",pluralForms:a(["one","other"]),select:e=>1===e?"one":"other"};function u(){const{i18n:{currentLocale:e}}=(0,i.Z)();return(0,n.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:a(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),c}}),[e])}function o(){const e=u();return{selectMessage:(t,r)=>function(e,t,r){const n=e.split("|");if(1===n.length)return n[0];n.length>r.pluralForms.length&&console.error(`For locale=${r.locale}, a maximum of ${r.pluralForms.length} plural forms are expected (${r.pluralForms.join(",")}), but the message contains ${n.length}: ${e}`);const i=r.select(t),s=r.pluralForms.indexOf(i);return n[Math.min(s,n.length-1)]}(r,t,e)}}},48852:(e,t,r)=>{"use strict";r.r(t),r.d(t,{default:()=>A});var n=r(67294);function i(e){var t,r,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(r=i(e[t]))&&(n&&(n+=" "),n+=r);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}const s=function(){for(var e,t,r=0,n="";r<arguments.length;)(e=arguments[r++])&&(t=i(e))&&(n&&(n+=" "),n+=t);return n};var a=r(8131),c=r.n(a),u=r(70290),o=r.n(u),h=r(10412),f=r(35742),l=r(33692),m=r(80143),d=r(88824),p=r(66177),v=r(902),g=r(10833),y=r(82128),R=r(95999),F=r(52263),b=r(6278),j=r(239),P=r(80647),x=r(92503);const _={searchQueryInput:"searchQueryInput_u2C7",searchVersionInput:"searchVersionInput_m0Ui",searchResultsColumn:"searchResultsColumn_JPFH",algoliaLogo:"algoliaLogo_rT1R",algoliaLogoPathFill:"algoliaLogoPathFill_WdUC",searchResultItem:"searchResultItem_Tv2o",searchResultItemHeading:"searchResultItemHeading_KbCB",searchResultItemPath:"searchResultItemPath_lhe1",searchResultItemSummary:"searchResultItemSummary_AEaO",searchQueryColumn:"searchQueryColumn_RTkw",searchVersionColumn:"searchVersionColumn_ypXd",searchLogoColumn:"searchLogoColumn_rJIA",loadingSpinner:"loadingSpinner_XVxU","loading-spin":"loading-spin_vzvp",loader:"loader_vvXV"};var E=r(85893);function O(e){let{docsSearchVersionsHelpers:t}=e;const r=Object.entries(t.allDocsData).filter((e=>{let[,t]=e;return t.versions.length>1}));return(0,E.jsx)("div",{className:s("col","col--3","padding-left--none",_.searchVersionColumn),children:r.map((e=>{let[n,i]=e;const s=r.length>1?`${n}: `:"";return(0,E.jsx)("select",{onChange:e=>t.setSearchVersion(n,e.target.value),defaultValue:t.searchVersions[n],className:_.searchVersionInput,children:i.versions.map(((e,t)=>(0,E.jsx)("option",{label:`${s}${e.label}`,value:e.name},t)))},n)}))})}function w(){const{i18n:{currentLocale:e}}=(0,F.Z)(),{algolia:{appId:t,apiKey:r,indexName:i}}=(0,b.L)(),a=(0,j.l)(),u=function(){const{selectMessage:e}=(0,d.c)();return t=>e(t,(0,R.I)({id:"theme.SearchPage.documentsFound.plurals",description:'Pluralized label for "{count} documents found". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One document found|{count} documents found"},{count:t}))}(),g=function(){const e=(0,m._r)(),[t,r]=(0,n.useState)((()=>Object.entries(e).reduce(((e,t)=>{let[r,n]=t;return{...e,[r]:n.versions[0].name}}),{}))),i=Object.values(e).some((e=>e.versions.length>1));return{allDocsData:e,versioningEnabled:i,searchVersions:t,setSearchVersion:(e,t)=>r((r=>({...r,[e]:t})))}}(),[w,A]=(0,p.K)(),N={items:[],query:null,totalResults:null,totalPages:null,lastPage:null,hasMore:null,loading:null},[H,S]=(0,n.useReducer)(((e,t)=>{switch(t.type){case"reset":return N;case"loading":return{...e,loading:!0};case"update":return w!==t.value.query?e:{...t.value,items:0===t.value.lastPage?t.value.items:e.items.concat(t.value.items)};case"advance":{const t=e.totalPages>e.lastPage+1;return{...e,lastPage:t?e.lastPage+1:e.lastPage,hasMore:t}}default:return e}}),N),T=o()(t,r),Q=c()(T,i,{hitsPerPage:15,advancedSyntax:!0,disjunctiveFacets:["language","docusaurus_tag"]});Q.on("result",(e=>{let{results:{query:t,hits:r,page:n,nbHits:i,nbPages:s}}=e;if(""===t||!Array.isArray(r))return void S({type:"reset"});const c=e=>e.replace(/algolia-docsearch-suggestion--highlight/g,"search-result-match"),u=r.map((e=>{let{url:t,_highlightResult:{hierarchy:r},_snippetResult:n={}}=e;const i=Object.keys(r).map((e=>c(r[e].value)));return{title:i.pop(),url:a(t),summary:n.content?`${c(n.content.value)}...`:"",breadcrumbs:i}}));S({type:"update",value:{items:u,query:t,totalResults:i,totalPages:s,lastPage:n,hasMore:s>n+1,loading:!1}})}));const[C,I]=(0,n.useState)(null),D=(0,n.useRef)(0),k=(0,n.useRef)(h.Z.canUseIntersectionObserver&&new IntersectionObserver((e=>{const{isIntersecting:t,boundingClientRect:{y:r}}=e[0];t&&D.current>r&&S({type:"advance"}),D.current=r}),{threshold:1})),q=()=>w?(0,R.I)({id:"theme.SearchPage.existingResultsTitle",message:'Search results for "{query}"',description:"The search page title for non-empty query"},{query:w}):(0,R.I)({id:"theme.SearchPage.emptyResultsTitle",message:"Search the documentation",description:"The search page title for empty query"}),V=(0,v.zX)((function(t){void 0===t&&(t=0),Q.addDisjunctiveFacetRefinement("docusaurus_tag","default"),Q.addDisjunctiveFacetRefinement("language",e),Object.entries(g.searchVersions).forEach((e=>{let[t,r]=e;Q.addDisjunctiveFacetRefinement("docusaurus_tag",`docs-${t}-${r}`)})),Q.setQuery(w).setPage(t).search()}));return(0,n.useEffect)((()=>{if(!C)return;const e=k.current;return e?(e.observe(C),()=>e.unobserve(C)):()=>!0}),[C]),(0,n.useEffect)((()=>{S({type:"reset"}),w&&(S({type:"loading"}),setTimeout((()=>{V()}),300))}),[w,g.searchVersions,V]),(0,n.useEffect)((()=>{H.lastPage&&0!==H.lastPage&&V(H.lastPage)}),[V,H.lastPage]),(0,E.jsxs)(P.Z,{children:[(0,E.jsxs)(f.Z,{children:[(0,E.jsx)("title",{children:(0,y.p)(q())}),(0,E.jsx)("meta",{property:"robots",content:"noindex, follow"})]}),(0,E.jsxs)("div",{className:"container margin-vert--lg",children:[(0,E.jsx)(x.Z,{as:"h1",children:q()}),(0,E.jsxs)("form",{className:"row",onSubmit:e=>e.preventDefault(),children:[(0,E.jsx)("div",{className:s("col",_.searchQueryColumn,{"col--9":g.versioningEnabled,"col--12":!g.versioningEnabled}),children:(0,E.jsx)("input",{type:"search",name:"q",className:_.searchQueryInput,placeholder:(0,R.I)({id:"theme.SearchPage.inputPlaceholder",message:"Type your search here",description:"The placeholder for search page input"}),"aria-label":(0,R.I)({id:"theme.SearchPage.inputLabel",message:"Search",description:"The ARIA label for search page input"}),onChange:e=>A(e.target.value),value:w,autoComplete:"off",autoFocus:!0})}),g.versioningEnabled&&(0,E.jsx)(O,{docsSearchVersionsHelpers:g})]}),(0,E.jsxs)("div",{className:"row",children:[(0,E.jsx)("div",{className:s("col","col--8",_.searchResultsColumn),children:!!H.totalResults&&u(H.totalResults)}),(0,E.jsx)("div",{className:s("col","col--4","text--right",_.searchLogoColumn),children:(0,E.jsx)(l.Z,{to:"https://www.algolia.com/","aria-label":(0,R.I)({id:"theme.SearchPage.algoliaLabel",message:"Search by Algolia",description:"The ARIA label for Algolia mention"}),children:(0,E.jsx)("svg",{viewBox:"0 0 168 24",className:_.algoliaLogo,children:(0,E.jsxs)("g",{fill:"none",children:[(0,E.jsx)("path",{className:_.algoliaLogoPathFill,d:"M120.925 18.804c-4.386.02-4.386-3.54-4.386-4.106l-.007-13.336 2.675-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-10.846-2.18c.821 0 1.43-.047 1.855-.129v-2.719a6.334 6.334 0 0 0-1.574-.199 5.7 5.7 0 0 0-.897.069 2.699 2.699 0 0 0-.814.24c-.24.116-.439.28-.582.491-.15.212-.219.335-.219.656 0 .628.219.991.616 1.23s.938.362 1.615.362zm-.233-9.7c.883 0 1.629.109 2.231.328.602.218 1.088.525 1.444.915.363.396.609.922.76 1.483.157.56.232 1.175.232 1.85v6.874a32.5 32.5 0 0 1-1.868.314c-.834.123-1.772.185-2.813.185-.69 0-1.327-.069-1.895-.198a4.001 4.001 0 0 1-1.471-.636 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.803 0-.656.13-1.073.384-1.525a3.24 3.24 0 0 1 1.047-1.106c.445-.287.95-.492 1.532-.615a8.8 8.8 0 0 1 1.82-.185 8.404 8.404 0 0 1 1.972.24v-.438c0-.307-.035-.6-.11-.874a1.88 1.88 0 0 0-.384-.73 1.784 1.784 0 0 0-.724-.493 3.164 3.164 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.735 7.735 0 0 0-1.26.307l-.321-2.192c.335-.117.834-.233 1.478-.349a10.98 10.98 0 0 1 2.073-.178zm52.842 9.626c.822 0 1.43-.048 1.854-.13V13.7a6.347 6.347 0 0 0-1.574-.199c-.294 0-.595.021-.896.069a2.7 2.7 0 0 0-.814.24 1.46 1.46 0 0 0-.582.491c-.15.212-.218.335-.218.656 0 .628.218.991.615 1.23.404.245.938.362 1.615.362zm-.226-9.694c.883 0 1.629.108 2.231.327.602.219 1.088.526 1.444.915.355.39.609.923.759 1.483a6.8 6.8 0 0 1 .233 1.852v6.873c-.41.088-1.034.19-1.868.314-.834.123-1.772.184-2.813.184-.69 0-1.327-.068-1.895-.198a4.001 4.001 0 0 1-1.471-.635 3.085 3.085 0 0 1-.951-1.134c-.226-.465-.343-1.12-.343-1.804 0-.656.13-1.073.384-1.524.26-.45.608-.82 1.047-1.107.445-.286.95-.491 1.532-.614a8.803 8.803 0 0 1 2.751-.13c.329.034.671.096 1.04.185v-.437a3.3 3.3 0 0 0-.109-.875 1.873 1.873 0 0 0-.384-.731 1.784 1.784 0 0 0-.724-.492 3.165 3.165 0 0 0-1.143-.205c-.616 0-1.177.075-1.69.164a7.75 7.75 0 0 0-1.26.307l-.321-2.193c.335-.116.834-.232 1.478-.348a11.633 11.633 0 0 1 2.073-.177zm-8.034-1.271a1.626 1.626 0 0 1-1.628-1.62c0-.895.725-1.62 1.628-1.62.904 0 1.63.725 1.63 1.62 0 .895-.733 1.62-1.63 1.62zm1.348 13.22h-2.689V7.27l2.69-.423v11.956zm-4.714 0c-4.386.02-4.386-3.54-4.386-4.107l-.008-13.336 2.676-.424v13.254c0 .322 0 2.358 1.718 2.364v2.248zm-8.698-5.903c0-1.156-.253-2.119-.746-2.788-.493-.677-1.183-1.01-2.067-1.01-.882 0-1.574.333-2.065 1.01-.493.676-.733 1.632-.733 2.788 0 1.168.246 1.953.74 2.63.492.683 1.183 1.018 2.066 1.018.882 0 1.574-.342 2.067-1.019.492-.683.738-1.46.738-2.63zm2.737-.007c0 .902-.13 1.584-.397 2.33a5.52 5.52 0 0 1-1.128 1.906 4.986 4.986 0 0 1-1.752 1.223c-.685.286-1.739.45-2.265.45-.528-.006-1.574-.157-2.252-.45a5.096 5.096 0 0 1-1.744-1.223c-.487-.527-.863-1.162-1.137-1.906a6.345 6.345 0 0 1-.41-2.33c0-.902.123-1.77.397-2.508a5.554 5.554 0 0 1 1.15-1.892 5.133 5.133 0 0 1 1.75-1.216c.679-.287 1.425-.423 2.232-.423.808 0 1.553.142 2.237.423a4.88 4.88 0 0 1 1.753 1.216 5.644 5.644 0 0 1 1.135 1.892c.287.738.431 1.606.431 2.508zm-20.138 0c0 1.12.246 2.363.738 2.882.493.52 1.13.78 1.91.78.424 0 .828-.062 1.204-.178.377-.116.677-.253.917-.417V9.33a10.476 10.476 0 0 0-1.766-.226c-.971-.028-1.71.37-2.23 1.004-.513.636-.773 1.75-.773 2.788zm7.438 5.274c0 1.824-.466 3.156-1.404 4.004-.936.846-2.367 1.27-4.296 1.27-.705 0-2.17-.137-3.34-.396l.431-2.118c.98.205 2.272.26 2.95.26 1.074 0 1.84-.219 2.299-.656.459-.437.684-1.086.684-1.948v-.437a8.07 8.07 0 0 1-1.047.397c-.43.13-.93.198-1.492.198-.739 0-1.41-.116-2.018-.349a4.206 4.206 0 0 1-1.567-1.025c-.431-.45-.774-1.017-1.013-1.694-.24-.677-.363-1.885-.363-2.773 0-.834.13-1.88.384-2.577.26-.696.629-1.298 1.129-1.796.493-.498 1.095-.881 1.8-1.162a6.605 6.605 0 0 1 2.428-.457c.87 0 1.67.109 2.45.24.78.129 1.444.265 1.985.415V18.17zM6.972 6.677v1.627c-.712-.446-1.52-.67-2.425-.67-.585 0-1.045.13-1.38.391a1.24 1.24 0 0 0-.502 1.03c0 .425.164.765.494 1.02.33.256.835.532 1.516.83.447.192.795.356 1.045.495.25.138.537.332.862.582.324.25.563.548.718.894.154.345.23.741.23 1.188 0 .947-.334 1.691-1.004 2.234-.67.542-1.537.814-2.601.814-1.18 0-2.16-.229-2.936-.686v-1.708c.84.628 1.814.942 2.92.942.585 0 1.048-.136 1.388-.407.34-.271.51-.646.51-1.125 0-.287-.1-.55-.302-.79-.203-.24-.42-.42-.655-.542-.234-.123-.585-.29-1.053-.503a61.27 61.27 0 0 1-.582-.271 13.67 13.67 0 0 1-.55-.287 4.275 4.275 0 0 1-.567-.351 6.92 6.92 0 0 1-.455-.4c-.18-.17-.31-.34-.39-.51-.08-.17-.155-.37-.224-.598a2.553 2.553 0 0 1-.104-.742c0-.915.333-1.638.998-2.17.664-.532 1.523-.798 2.576-.798.968 0 1.793.17 2.473.51zm7.468 5.696v-.287c-.022-.607-.187-1.088-.495-1.444-.309-.357-.75-.535-1.324-.535-.532 0-.99.194-1.373.583-.382.388-.622.949-.717 1.683h3.909zm1.005 2.792v1.404c-.596.34-1.383.51-2.362.51-1.255 0-2.255-.377-3-1.132-.744-.755-1.116-1.744-1.116-2.968 0-1.297.34-2.316 1.021-3.055.68-.74 1.548-1.11 2.6-1.11 1.033 0 1.852.323 2.458.966.606.644.91 1.572.91 2.784 0 .33-.033.676-.096 1.038h-5.314c.107.702.405 1.239.894 1.611.49.372 1.106.558 1.85.558.862 0 1.58-.202 2.155-.606zm6.605-1.77h-1.212c-.596 0-1.045.116-1.349.35-.303.234-.454.532-.454.894 0 .372.117.664.35.877.235.213.575.32 1.022.32.51 0 .912-.142 1.204-.424.293-.281.44-.651.44-1.108v-.91zm-4.068-2.554V9.325c.627-.361 1.457-.542 2.489-.542 2.116 0 3.175 1.026 3.175 3.08V17h-1.548v-.957c-.415.68-1.143 1.02-2.186 1.02-.766 0-1.38-.22-1.843-.661-.462-.442-.694-1.003-.694-1.684 0-.776.293-1.38.878-1.81.585-.431 1.404-.647 2.457-.647h1.34V11.8c0-.554-.133-.971-.399-1.253-.266-.282-.707-.423-1.324-.423a4.07 4.07 0 0 0-2.345.718zm9.333-1.93v1.42c.394-1 1.101-1.5 2.123-1.5.148 0 .313.016.494.048v1.531a1.885 1.885 0 0 0-.75-.143c-.542 0-.989.24-1.34.718-.351.479-.527 1.048-.527 1.707V17h-1.563V8.91h1.563zm5.01 4.084c.022.82.272 1.492.75 2.019.479.526 1.15.79 2.01.79.639 0 1.235-.176 1.788-.527v1.404c-.521.319-1.186.479-1.995.479-1.265 0-2.276-.4-3.031-1.197-.755-.798-1.133-1.792-1.133-2.984 0-1.16.38-2.151 1.14-2.975.761-.825 1.79-1.237 3.088-1.237.702 0 1.346.149 1.93.447v1.436a3.242 3.242 0 0 0-1.77-.495c-.84 0-1.513.266-2.019.798-.505.532-.758 1.213-.758 2.042zM40.24 5.72v4.579c.458-1 1.293-1.5 2.505-1.5.787 0 1.42.245 1.899.734.479.49.718 1.17.718 2.042V17h-1.564v-5.106c0-.553-.14-.98-.422-1.284-.282-.303-.652-.455-1.11-.455-.531 0-1.002.202-1.411.606-.41.405-.615 1.022-.615 1.851V17h-1.563V5.72h1.563zm14.966 10.02c.596 0 1.096-.253 1.5-.758.404-.506.606-1.157.606-1.955 0-.915-.202-1.62-.606-2.114-.404-.495-.92-.742-1.548-.742-.553 0-1.05.224-1.491.67-.442.447-.662 1.133-.662 2.058 0 .958.212 1.67.638 2.138.425.469.946.703 1.563.703zM53.004 5.72v4.42c.574-.894 1.388-1.341 2.44-1.341 1.022 0 1.857.383 2.506 1.149.649.766.973 1.781.973 3.047 0 1.138-.309 2.109-.925 2.912-.617.803-1.463 1.205-2.537 1.205-1.075 0-1.894-.447-2.457-1.34V17h-1.58V5.72h1.58zm9.908 11.104l-3.223-7.913h1.739l1.005 2.632 1.26 3.415c.096-.32.48-1.458 1.15-3.415l.909-2.632h1.66l-2.92 7.866c-.777 2.074-1.963 3.11-3.559 3.11a2.92 2.92 0 0 1-.734-.079v-1.34c.17.042.351.064.543.064 1.032 0 1.755-.57 2.17-1.708z"}),(0,E.jsx)("path",{fill:"#5468FF",d:"M78.988.938h16.594a2.968 2.968 0 0 1 2.966 2.966V20.5a2.967 2.967 0 0 1-2.966 2.964H78.988a2.967 2.967 0 0 1-2.966-2.964V3.897A2.961 2.961 0 0 1 78.988.938z"}),(0,E.jsx)("path",{fill:"white",d:"M89.632 5.967v-.772a.978.978 0 0 0-.978-.977h-2.28a.978.978 0 0 0-.978.977v.793c0 .088.082.15.171.13a7.127 7.127 0 0 1 1.984-.28c.65 0 1.295.088 1.917.259.082.02.164-.04.164-.13m-6.248 1.01l-.39-.389a.977.977 0 0 0-1.382 0l-.465.465a.973.973 0 0 0 0 1.38l.383.383c.062.061.15.047.205-.014.226-.307.472-.601.746-.874.281-.28.568-.526.883-.751.068-.042.075-.137.02-.2m4.16 2.453v3.341c0 .096.104.165.192.117l2.97-1.537c.068-.034.089-.117.055-.184a3.695 3.695 0 0 0-3.08-1.866c-.068 0-.136.054-.136.13m0 8.048a4.489 4.489 0 0 1-4.49-4.482 4.488 4.488 0 0 1 4.49-4.482 4.488 4.488 0 0 1 4.489 4.482 4.484 4.484 0 0 1-4.49 4.482m0-10.85a6.363 6.363 0 1 0 0 12.729 6.37 6.37 0 0 0 6.372-6.368 6.358 6.358 0 0 0-6.371-6.36"})]})})})})]}),H.items.length>0?(0,E.jsx)("main",{children:H.items.map(((e,t)=>{let{title:r,url:n,summary:i,breadcrumbs:a}=e;return(0,E.jsxs)("article",{className:_.searchResultItem,children:[(0,E.jsx)(x.Z,{as:"h2",className:_.searchResultItemHeading,children:(0,E.jsx)(l.Z,{to:n,dangerouslySetInnerHTML:{__html:r}})}),a.length>0&&(0,E.jsx)("nav",{"aria-label":"breadcrumbs",children:(0,E.jsx)("ul",{className:s("breadcrumbs",_.searchResultItemPath),children:a.map(((e,t)=>(0,E.jsx)("li",{className:"breadcrumbs__item",dangerouslySetInnerHTML:{__html:e}},t)))})}),i&&(0,E.jsx)("p",{className:_.searchResultItemSummary,dangerouslySetInnerHTML:{__html:i}})]},t)}))}):[w&&!H.loading&&(0,E.jsx)("p",{children:(0,E.jsx)(R.Z,{id:"theme.SearchPage.noResultsText",description:"The paragraph for empty search result",children:"No results were found"})},"no-results"),!!H.loading&&(0,E.jsx)("div",{className:_.loadingSpinner},"spinner")],H.hasMore&&(0,E.jsx)("div",{className:_.loader,ref:I,children:(0,E.jsx)(R.Z,{id:"theme.SearchPage.fetchingNewResults",description:"The paragraph for fetching new search results",children:"Fetching new results..."})})]})]})}function A(){return(0,E.jsx)(g.FG,{className:"search-page-wrapper",children:(0,E.jsx)(w,{})})}}}]); \ No newline at end of file diff --git a/assets/js/1a4e3797.3807d38b.js.LICENSE.txt b/assets/js/1a4e3797.d45f2a37.js.LICENSE.txt similarity index 100% rename from assets/js/1a4e3797.3807d38b.js.LICENSE.txt rename to assets/js/1a4e3797.d45f2a37.js.LICENSE.txt diff --git a/assets/js/22a175ec.297fea32.js b/assets/js/22a175ec.297fea32.js new file mode 100644 index 0000000..4e74723 --- /dev/null +++ b/assets/js/22a175ec.297fea32.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6890],{40707:(e,t,i)=>{i.r(t),i.d(t,{default:()=>x});var r=i(67294),o=i(80647),s=i(86010);const n="card_n_Wj",a="contributionsContainer_vdAK",l="buttons_UAd1";var c,h;function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r])}return e},d.apply(this,arguments)}const p=e=>{let{title:t,titleId:i,...o}=e;return r.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":i},o),t?r.createElement("title",{id:i},t):null,c||(c=r.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),h||(h=r.createElement("path",{d:"M13 21v2.5l-3-2-3 2V21h-.5A3.5 3.5 0 0 1 3 17.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v17a1 1 0 0 1-1 1h-7zm0-2h6v-3H6.5a1.5 1.5 0 0 0 0 3H7v-2h6v2zm6-5V4H6v10.035A3.53 3.53 0 0 1 6.5 14H19zM7 5h2v2H7V5zm0 3h2v2H7V8zm0 3h2v2H7v-2z"})))};var u=i(85893);const b=e=>{let{title:t,description:i,contribution:r,repoURL:o}=e;return(0,u.jsx)("div",{className:"col col--12",children:(0,u.jsxs)("div",{className:(0,s.Z)("card",n),children:[(0,u.jsx)("div",{className:"card__header",children:(0,u.jsx)("h2",{children:t})}),(0,u.jsx)("div",{className:"card__body",children:(0,u.jsxs)("div",{className:"row",children:[(0,u.jsxs)("div",{className:"col col--6",children:[(0,u.jsx)("h6",{children:"Description"}),i]}),(0,u.jsxs)("div",{className:(0,s.Z)("col col--6",a),children:[(0,u.jsx)("h6",{children:"Contribution"}),r]})]})}),(0,u.jsx)("div",{className:"card__footer",children:(0,u.jsx)("div",{className:l,children:(0,u.jsxs)("a",{href:o,target:"_blank",className:"button button--secondary button--outline",children:[(0,u.jsx)("span",{className:"button__icon",children:(0,u.jsx)(p,{})}),"See repository"]})})})]})})},g=[{title:"tmt",description:(0,u.jsxs)("p",{children:["The ",(0,u.jsx)("code",{children:"tmt"})," tool provides a user-friendly way to work with tests. You can comfortably create new tests, safely and easily run tests across different environments, review test results, debug test code and enable tests in the CI using a consistent and concise config."]}),contribution:(0,u.jsx)("p",{children:"Just a smallish contribution to the docs related to the changes implemented on the Packit side."}),repoURL:"https://github.com/teemtee/tmt"},{title:"Fedora Infrastructure Ansible",description:(0,u.jsx)("p",{children:"Collection of Ansible playbooks that powers the Fedora Infrastructure."}),contribution:(0,u.jsx)("p",{children:"I have adjusted the groups in the Bodhi playbooks after Packit has been granted the privileges to propose updates without restrictions."}),repoURL:"https://pagure.io/fedora-infra/ansible"},{title:"Bodhi",description:(0,u.jsx)("p",{children:"Bodhi is a web-system that facilitates the process of publishing updates for a Fedora-based software distribution."}),contribution:(0,u.jsx)("p",{children:"I have adjusted the client, so that it doesn't show secrets in terminal when you log in to the Bodhi via browser."}),repoURL:"https://github.com/fedora-infra/bodhi"},{title:"Gluetool Modules Collection",description:(0,u.jsxs)("p",{children:["Modules for ",(0,u.jsx)("code",{children:"gluetool"})," \u2014 a command line centric framework usable for glueing modules into a pipeline."]}),contribution:(0,u.jsxs)("ul",{children:[(0,u.jsx)("li",{children:"I have proposed a possible implementation of git merging that was later on extended."}),(0,u.jsx)("li",{children:"I have tried to help out with Copr module after they deprecated older version of their API."})]}),repoURL:"https://gitlab.com/testing-farm/gluetool-modules"},{title:"Pagure",description:(0,u.jsx)("p",{children:"Pagure is a git-centered forge, python based using pygit2."}),contribution:(0,u.jsx)("p",{children:"I have added an API endpoint for reopening pull requests."}),repoURL:"https://pagure.io/pagure"},{title:"Copr",description:(0,u.jsxs)("p",{children:["RPM build system - upstream for"," ",(0,u.jsx)("a",{target:"_blank",href:"https://copr.fedorainfracloud.org/",children:"Copr"}),"."]}),contribution:(0,u.jsxs)("ul",{children:[(0,u.jsx)("li",{children:"Supporting external repositories for custom SRPM build method."}),(0,u.jsxs)("li",{children:["Allowing admins of Copr repositories to build without the need to ask for explicit ",(0,u.jsx)("code",{children:"builder"})," permissions."]})]}),repoURL:"https://github.com/fedora-copr/copr"},{title:"python-gitlab",description:(0,u.jsx)("p",{children:"A python wrapper for the GitLab API."}),contribution:(0,u.jsxs)("p",{children:["I have contributed support for the ",(0,u.jsx)("code",{children:"merge_ref"})," on merge requests that hasn't been supported, yet it was present in the GitLab API."]}),repoURL:"https://github.com/python-gitlab/python-gitlab"},{title:"PatternFly React",description:(0,u.jsx)("p",{children:"A set of React components for the PatternFly project."}),contribution:(0,u.jsx)("p",{children:"When working on Packit Dashboard, I have spotted smaller bugs that were present in this project and fixed them upstream to provide better experience for our users."}),repoURL:"https://github.com/patternfly/patternfly-react"},{title:"Fira Code",description:(0,u.jsx)("p",{children:"Free monospaced font with programming ligatures."}),contribution:(0,u.jsxs)("p",{children:["I have set up a GitHub Action for building the font on each push to the default branch allowing users to install ",(0,u.jsx)("i",{children:"bleeding edge"})," version of the font."]}),repoURL:"https://github.com/tonsky/FiraCode"},{title:"nixpkgs",description:(0,u.jsx)("p",{children:"Nixpkgs is a collection of over 80,000 software packages that can be installed with the Nix package manager. It also implements NixOS, a purely-functional Linux distribution."}),contribution:(0,u.jsx)("p",{children:"When I was trying out the nixpkgs, I have tried to bump .NET Core to the latest version. My changes haven't been accepted as they required bumping of multiple more packages that depended upon the .NET Core."}),repoURL:"https://github.com/NixOS/nixpkgs"},{title:"Darcula",description:(0,u.jsx)("p",{children:"A theme for Visual Studio Code based on Darcula theme from Jetbrains IDEs."}),contribution:(0,u.jsx)("p",{children:"I have contributed support for diff files, though the project doesn't seem to be live anymore, so it hasn't been accepted as of now."}),repoURL:"https://github.com/rokoroku/vscode-theme-darcula"},{title:"Packit",description:(0,u.jsx)("p",{children:"An open source project aiming to ease the integration of your project with Fedora Linux, CentOS Stream and other distributions."}),contribution:(0,u.jsxs)("p",{children:["Have a look at my"," ",(0,u.jsx)("a",{href:"https://github.com/search?q=is%3Apr%20author%3Amfocko%20org%3Apackit&type=pullrequests",target:"_blank",children:"pull requests"}),"."]}),repoURL:"https://github.com/packit"},{title:"Snitch",description:(0,u.jsx)(u.Fragment,{children:(0,u.jsx)("p",{children:"Language agnostic tool that collects TODOs in the source code and reports them as Issues."})}),contribution:(0,u.jsxs)("ul",{children:[(0,u.jsx)("li",{children:"Environment variable support for self-hosted GitLab instances"}),(0,u.jsx)("li",{children:"GitLab support"})]}),repoURL:"https://github.com/tsoding/snitch"},{title:"Karel the Robot",description:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)("p",{children:["Karel the robot is in general an educational programming language for beginners, created by ",(0,u.jsx)("i",{children:"Richard E. Pattis"}),". This is implementation of ",(0,u.jsx)("i",{children:"Karel the Robot"})," for ",(0,u.jsx)("i",{children:"C programming language"}),"."]}),(0,u.jsxs)("p",{children:["This project is used for educational purposes at"," ",(0,u.jsx)("a",{target:"_blank",href:"https://fei.tuke.sk",children:"TUKE"}),"."]})]}),contribution:(0,u.jsx)("p",{children:"I have contributed some refactoring tips to the author of the library."}),repoURL:"https://git.kpi.fei.tuke.sk/kpi/karel-the-robot"}],m="Contributions",f="Many of my contributions to open-source projects.";function x(){return(0,u.jsx)(o.Z,{title:m,description:f,children:(0,u.jsxs)("main",{className:"container container--fluid margin-vert--lg",children:[(0,u.jsx)("h1",{children:m}),(0,u.jsx)("p",{children:f}),(0,u.jsx)("div",{className:"row",children:g.map((e=>(0,u.jsx)(b,{...e},e.project)))})]})})}},86010:(e,t,i)=>{function r(e){var t,i,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(i=r(e[t]))&&(o&&(o+=" "),o+=i);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}i.d(t,{Z:()=>o});const o=function(){for(var e,t,i=0,o="";i<arguments.length;)(e=arguments[i++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}}}]); \ No newline at end of file diff --git a/assets/js/22a175ec.92356088.js b/assets/js/22a175ec.92356088.js deleted file mode 100644 index f4a9070..0000000 --- a/assets/js/22a175ec.92356088.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6890],{40707:(e,t,i)=>{i.r(t),i.d(t,{default:()=>x});var r=i(67294),o=i(80647),s=i(86010);const n="card_n_Wj",a="contributionsContainer_vdAK",l="buttons_UAd1";var c,h;function d(){return d=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var i=arguments[t];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(e[r]=i[r])}return e},d.apply(this,arguments)}const p=e=>{let{title:t,titleId:i,...o}=e;return r.createElement("svg",d({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24","aria-labelledby":i},o),t?r.createElement("title",{id:i},t):null,c||(c=r.createElement("path",{fill:"none",d:"M0 0h24v24H0z"})),h||(h=r.createElement("path",{d:"M13 21v2.5l-3-2-3 2V21h-.5A3.5 3.5 0 0 1 3 17.5V5a3 3 0 0 1 3-3h14a1 1 0 0 1 1 1v17a1 1 0 0 1-1 1h-7zm0-2h6v-3H6.5a1.5 1.5 0 0 0 0 3H7v-2h6v2zm6-5V4H6v10.035A3.53 3.53 0 0 1 6.5 14H19zM7 5h2v2H7V5zm0 3h2v2H7V8zm0 3h2v2H7v-2z"})))};var u=i(85893);const b=e=>{let{title:t,description:i,contribution:r,repoURL:o}=e;return(0,u.jsx)("div",{className:"col col--12",children:(0,u.jsxs)("div",{className:(0,s.Z)("card",n),children:[(0,u.jsx)("div",{className:"card__header",children:(0,u.jsx)("h2",{children:t})}),(0,u.jsx)("div",{className:"card__body",children:(0,u.jsxs)("div",{className:"row",children:[(0,u.jsxs)("div",{className:"col col--6",children:[(0,u.jsx)("h6",{children:"Description"}),i]}),(0,u.jsxs)("div",{className:(0,s.Z)("col col--6",a),children:[(0,u.jsx)("h6",{children:"Contribution"}),r]})]})}),(0,u.jsx)("div",{className:"card__footer",children:(0,u.jsx)("div",{className:l,children:(0,u.jsxs)("a",{href:o,target:"_blank",className:"button button--secondary button--outline",children:[(0,u.jsx)("span",{className:"button__icon",children:(0,u.jsx)(p,{})}),"See repository"]})})})]})})},g=[{title:"tmt",description:(0,u.jsx)("p",{children:"The `tmt` tool provides a user-friendly way to work with tests. You can comfortably create new tests, safely and easily run tests across different environments, review test results, debug test code and enable tests in the CI using a consistent and concise config."}),contribution:(0,u.jsx)("p",{children:"Just a smallish contribution to the docs related to the changes implemented on the Packit side."}),repoURL:"https://github.com/teemtee/tmt"},{title:"Fedora Infrastructure Ansible",description:(0,u.jsx)("p",{children:"Collection of Ansible playbooks that powers the Fedora Infrastructure."}),contribution:(0,u.jsx)("p",{children:"I have adjusted the groups in the Bodhi playbooks after Packit has been granted the privileges to propose updates without restrictions."}),repoURL:"https://pagure.io/fedora-infra/ansible"},{title:"Bodhi",description:(0,u.jsx)("p",{children:"Bodhi is a web-system that facilitates the process of publishing updates for a Fedora-based software distribution."}),contribution:(0,u.jsx)("p",{children:"I have adjusted the client, so that it doesn't show secrets in terminal when you log in to the Bodhi via browser."}),repoURL:"https://github.com/fedora-infra/bodhi"},{title:"Gluetool Modules Collection",description:(0,u.jsxs)("p",{children:["Modules for ",(0,u.jsx)("code",{children:"gluetool"})," \u2014 a command line centric framework usable for glueing modules into a pipeline."]}),contribution:(0,u.jsxs)("ul",{children:[(0,u.jsx)("li",{children:"I have proposed a possible implementation of git merging that was later on extended."}),(0,u.jsx)("li",{children:"I have tried to help out with Copr module after they deprecated older version of their API."})]}),repoURL:"https://gitlab.com/testing-farm/gluetool-modules"},{title:"Pagure",description:(0,u.jsx)("p",{children:"Pagure is a git-centered forge, python based using pygit2."}),contribution:(0,u.jsx)("p",{children:"I have added an API endpoint for reopening pull requests."}),repoURL:"https://pagure.io/pagure"},{title:"Copr",description:(0,u.jsxs)("p",{children:["RPM build system - upstream for"," ",(0,u.jsx)("a",{target:"_blank",href:"https://copr.fedorainfracloud.org/",children:"Copr"}),"."]}),contribution:(0,u.jsxs)("ul",{children:[(0,u.jsx)("li",{children:"Supporting external repositories for custom SRPM build method."}),(0,u.jsxs)("li",{children:["Allowing admins of Copr repositories to build without the need to ask for explicit ",(0,u.jsx)("code",{children:"builder"})," permissions."]})]}),repoURL:"https://github.com/fedora-copr/copr"},{title:"python-gitlab",description:(0,u.jsx)("p",{children:"A python wrapper for the GitLab API."}),contribution:(0,u.jsxs)("p",{children:["I have contributed support for the ",(0,u.jsx)("code",{children:"merge_ref"})," on merge requests that hasn't been supported, yet it was present in the GitLab API."]}),repoURL:"https://github.com/python-gitlab/python-gitlab"},{title:"PatternFly React",description:(0,u.jsx)("p",{children:"A set of React components for the PatternFly project."}),contribution:(0,u.jsx)("p",{children:"When working on Packit Dashboard, I have spotted smaller bugs that were present in this project and fixed them upstream to provide better experience for our users."}),repoURL:"https://github.com/patternfly/patternfly-react"},{title:"Fira Code",description:(0,u.jsx)("p",{children:"Free monospaced font with programming ligatures."}),contribution:(0,u.jsxs)("p",{children:["I have set up a GitHub Action for building the font on each push to the default branch allowing users to install ",(0,u.jsx)("i",{children:"bleeding edge"})," version of the font."]}),repoURL:"https://github.com/tonsky/FiraCode"},{title:"nixpkgs",description:(0,u.jsx)("p",{children:"Nixpkgs is a collection of over 80,000 software packages that can be installed with the Nix package manager. It also implements NixOS, a purely-functional Linux distribution."}),contribution:(0,u.jsx)("p",{children:"When I was trying out the nixpkgs, I have tried to bump .NET Core to the latest version. My changes haven't been accepted as they required bumping of multiple more packages that depended upon the .NET Core."}),repoURL:"https://github.com/NixOS/nixpkgs"},{title:"Darcula",description:(0,u.jsx)("p",{children:"A theme for Visual Studio Code based on Darcula theme from Jetbrains IDEs."}),contribution:(0,u.jsx)("p",{children:"I have contributed support for diff files, though the project doesn't seem to be live anymore, so it hasn't been accepted as of now."}),repoURL:"https://github.com/rokoroku/vscode-theme-darcula"},{title:"Packit",description:(0,u.jsx)("p",{children:"An open source project aiming to ease the integration of your project with Fedora Linux, CentOS Stream and other distributions."}),contribution:(0,u.jsxs)("p",{children:["Have a look at my"," ",(0,u.jsx)("a",{href:"https://github.com/search?q=is%3Apr%20author%3Amfocko%20org%3Apackit&type=pullrequests",target:"_blank",children:"pull requests"}),"."]}),repoURL:"https://github.com/packit"},{title:"Snitch",description:(0,u.jsx)(u.Fragment,{children:(0,u.jsx)("p",{children:"Language agnostic tool that collects TODOs in the source code and reports them as Issues."})}),contribution:(0,u.jsxs)("ul",{children:[(0,u.jsx)("li",{children:"Environment variable support for self-hosted GitLab instances"}),(0,u.jsx)("li",{children:"GitLab support"})]}),repoURL:"https://github.com/tsoding/snitch"},{title:"Karel the Robot",description:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)("p",{children:["Karel the robot is in general an educational programming language for beginners, created by ",(0,u.jsx)("i",{children:"Richard E. Pattis"}),". This is implementation of ",(0,u.jsx)("i",{children:"Karel the Robot"})," for ",(0,u.jsx)("i",{children:"C programming language"}),"."]}),(0,u.jsxs)("p",{children:["This project is used for educational purposes at"," ",(0,u.jsx)("a",{target:"_blank",href:"https://fei.tuke.sk",children:"TUKE"}),"."]})]}),contribution:(0,u.jsx)("p",{children:"I have contributed some refactoring tips to the author of the library."}),repoURL:"https://git.kpi.fei.tuke.sk/kpi/karel-the-robot"}],m="Contributions",f="Many of my contributions to open-source projects.";function x(){return(0,u.jsx)(o.Z,{title:m,description:f,children:(0,u.jsxs)("main",{className:"container container--fluid margin-vert--lg",children:[(0,u.jsx)("h1",{children:m}),(0,u.jsx)("p",{children:f}),(0,u.jsx)("div",{className:"row",children:g.map((e=>(0,u.jsx)(b,{...e},e.project)))})]})})}},86010:(e,t,i)=>{function r(e){var t,i,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(i=r(e[t]))&&(o&&(o+=" "),o+=i);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}i.d(t,{Z:()=>o});const o=function(){for(var e,t,i=0,o="";i<arguments.length;)(e=arguments[i++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}}}]); \ No newline at end of file diff --git a/assets/js/257fa000.c32606de.js b/assets/js/257fa000.c32606de.js new file mode 100644 index 0000000..ed73e9d --- /dev/null +++ b/assets/js/257fa000.c32606de.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9595],{35455:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/cult","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/3720c009.9d2dcf9d.js b/assets/js/3720c009.37c59b49.js similarity index 97% rename from assets/js/3720c009.9d2dcf9d.js rename to assets/js/3720c009.37c59b49.js index f64febb..e464bc5 100644 --- a/assets/js/3720c009.9d2dcf9d.js +++ b/assets/js/3720c009.37c59b49.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3751],{10727:(t,e,a)=>{a.r(e),a.d(e,{default:()=>d});a(67294);var s=a(36905),r=a(10833),l=a(35281),n=a(35155),c=a(26090),i=a(90197),g=a(92503),o=a(85893);function u(t){let{title:e}=t;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.d,{title:e}),(0,o.jsx)(i.Z,{tag:"doc_tags_list"})]})}function h(t){let{tags:e,title:a}=t;return(0,o.jsx)(r.FG,{className:(0,s.Z)(l.k.page.docsTagsListPage),children:(0,o.jsx)("div",{className:"container margin-vert--lg",children:(0,o.jsx)("div",{className:"row",children:(0,o.jsxs)("main",{className:"col col--8 col--offset-2",children:[(0,o.jsx)(g.Z,{as:"h1",children:a}),(0,o.jsx)(c.Z,{tags:e})]})})})})}function d(t){const e=(0,n.M)();return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(u,{...t,title:e}),(0,o.jsx)(h,{...t,title:e})]})}},13008:(t,e,a)=>{a.d(e,{Z:()=>c});a(67294);var s=a(36905),r=a(39960);const l={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var n=a(85893);function c(t){let{permalink:e,label:a,count:c}=t;return(0,n.jsxs)(r.Z,{href:e,className:(0,s.Z)(l.tag,c?l.tagWithCount:l.tagRegular),children:[a,c&&(0,n.jsx)("span",{children:c})]})}},26090:(t,e,a)=>{a.d(e,{Z:()=>g});a(67294);var s=a(35155),r=a(13008),l=a(92503);const n={tag:"tag_Nnez"};var c=a(85893);function i(t){let{letterEntry:e}=t;return(0,c.jsxs)("article",{children:[(0,c.jsx)(l.Z,{as:"h2",id:e.letter,children:e.letter}),(0,c.jsx)("ul",{className:"padding--none",children:e.tags.map((t=>(0,c.jsx)("li",{className:n.tag,children:(0,c.jsx)(r.Z,{...t})},t.permalink)))}),(0,c.jsx)("hr",{})]})}function g(t){let{tags:e}=t;const a=(0,s.P)(e);return(0,c.jsx)("section",{className:"margin-vert--lg",children:a.map((t=>(0,c.jsx)(i,{letterEntry:t},t.letter)))})}},35155:(t,e,a)=>{a.d(e,{M:()=>r,P:()=>l});var s=a(95999);const r=()=>(0,s.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function l(t){const e={};return Object.values(t).forEach((t=>{const a=function(t){return t[0].toUpperCase()}(t.label);e[a]??=[],e[a].push(t)})),Object.entries(e).sort(((t,e)=>{let[a]=t,[s]=e;return a.localeCompare(s)})).map((t=>{let[e,a]=t;return{letter:e,tags:a.sort(((t,e)=>t.label.localeCompare(e.label)))}}))}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3751],{10727:(t,e,a)=>{a.r(e),a.d(e,{default:()=>d});a(67294);var s=a(36905),r=a(10833),l=a(35281),n=a(35155),c=a(26090),i=a(90197),g=a(92503),o=a(85893);function u(t){let{title:e}=t;return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.d,{title:e}),(0,o.jsx)(i.Z,{tag:"doc_tags_list"})]})}function h(t){let{tags:e,title:a}=t;return(0,o.jsx)(r.FG,{className:(0,s.Z)(l.k.page.docsTagsListPage),children:(0,o.jsx)("div",{className:"container margin-vert--lg",children:(0,o.jsx)("div",{className:"row",children:(0,o.jsxs)("main",{className:"col col--8 col--offset-2",children:[(0,o.jsx)(g.Z,{as:"h1",children:a}),(0,o.jsx)(c.Z,{tags:e})]})})})})}function d(t){const e=(0,n.M)();return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(u,{...t,title:e}),(0,o.jsx)(h,{...t,title:e})]})}},13008:(t,e,a)=>{a.d(e,{Z:()=>c});a(67294);var s=a(36905),r=a(33692);const l={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var n=a(85893);function c(t){let{permalink:e,label:a,count:c}=t;return(0,n.jsxs)(r.Z,{href:e,className:(0,s.Z)(l.tag,c?l.tagWithCount:l.tagRegular),children:[a,c&&(0,n.jsx)("span",{children:c})]})}},26090:(t,e,a)=>{a.d(e,{Z:()=>g});a(67294);var s=a(35155),r=a(13008),l=a(92503);const n={tag:"tag_Nnez"};var c=a(85893);function i(t){let{letterEntry:e}=t;return(0,c.jsxs)("article",{children:[(0,c.jsx)(l.Z,{as:"h2",id:e.letter,children:e.letter}),(0,c.jsx)("ul",{className:"padding--none",children:e.tags.map((t=>(0,c.jsx)("li",{className:n.tag,children:(0,c.jsx)(r.Z,{...t})},t.permalink)))}),(0,c.jsx)("hr",{})]})}function g(t){let{tags:e}=t;const a=(0,s.P)(e);return(0,c.jsx)("section",{className:"margin-vert--lg",children:a.map((t=>(0,c.jsx)(i,{letterEntry:t},t.letter)))})}},35155:(t,e,a)=>{a.d(e,{M:()=>r,P:()=>l});var s=a(95999);const r=()=>(0,s.I)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function l(t){const e={};return Object.values(t).forEach((t=>{const a=function(t){return t[0].toUpperCase()}(t.label);e[a]??=[],e[a].push(t)})),Object.entries(e).sort(((t,e)=>{let[a]=t,[s]=e;return a.localeCompare(s)})).map((t=>{let[e,a]=t;return{letter:e,tags:a.sort(((t,e)=>t.label.localeCompare(e.label)))}}))}}}]); \ No newline at end of file diff --git a/assets/js/4200b1a9.9d505c0f.js b/assets/js/4200b1a9.9d505c0f.js new file mode 100644 index 0000000..3e43a25 --- /dev/null +++ b/assets/js/4200b1a9.9d505c0f.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[866],{24612:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/2024/01/28/rust-opinion","metadata":{"permalink":"/blog/2024/01/28/rust-opinion","editUrl":"https://github.com/mfocko/blog/tree/main/blog/2024-01-28-rust-opinion.md","source":"@site/blog/2024-01-28-rust-opinion.md","title":"Mixed feelings on Rust","description":"Discussing my mixed feelings about the Rust language.\\n","date":"2024-01-28T00:00:00.000Z","formattedDate":"January 28, 2024","tags":[{"label":"rust","permalink":"/blog/tags/rust"},{"label":"memory safety","permalink":"/blog/tags/memory-safety"},{"label":"cult","permalink":"/blog/tags/cult"},{"label":"hype","permalink":"/blog/tags/hype"}],"readingTime":15.395,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. passionate language hater","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"Mixed feelings on Rust","description":"Discussing my mixed feelings about the Rust language.\\n","date":"2024-01-28T00:00:00.000Z","authors":[{"key":"mf","title":"a.k.a. passionate language hater"}],"tags":["rust","memory safety","cult","hype"],"hide_table_of_contents":false},"unlisted":false,"nextItem":{"title":"How can Copr help with broken dependencies","permalink":"/blog/2023/08/02/copr"}},"content":"Rust has become a rather popular language these days. I\'ve managed to get my\\nhands dirty with it during _[Advent of Code]_ \u201822 and partially \u201823. I\'ve also\\nused it for few rounds of _[Codeforces]_ and I have to try very hard to maintain\\nsome variety of languages for LeetCode challenges along with the Rust. I\'ll\\ndisclaim up front that I won\'t be only positive, since this post is a result of\\nmultiple discussions about Rust and I stand behind\\n_\u201cAll that glitters is not gold\u201d_, so if you can\'t stand your favorite language\\nbeing criticized in any way, don\'t even proceed. :wink:\\n\\n\x3c!--truncate--\x3e\\n\\n## Memory safety\\n\\nI\'ll start by kicking the biggest benefit of the language, the memory safety.\\nLet\'s be honest here, majority of the checks rely on the static analysis, cause\\nyou can\'t do anything else during the compile-time, right? Therefore we can\\nbasically say that we are relying on the compiler to \u201csolve\u201d all of our issues.\\n\\n:::warning\\n\\nI\'m not doubting the fact that compiler can prevent **a lot** of the memory\\nerrors, I\'m just saying it\'s not realistic to cover **everything**.\\n\\n:::\\n\\n### Compiler\\n\\nI guess we can safely[^2] agree on the fact that we 100% rely on the compiler to\\n_have our back_. Is the compiler bug-free? I doubt it. This is not meant in an\\noffensive way to the Rust compiler developers, but we need to be realistic here.\\nIt\'s a compiler, even older and larger projects like _gcc_ or _llvm_ can\'t avoid\\nbugs to appear.\\n\\nWhen I was trying out Rust for some of the LeetCode challenges I\'ve stumbled\\nupon the following warning:\\n![Example of a compiler bug](https://i.imgur.com/NfPLF6o.png)\\n\\n:::danger [Issue](https://github.com/rust-lang/rust/issues/59159)\\n\\nThe issue here comes from the fact that we have 2 simultaneous references to the\\nsame memory (one is mutable and one immutable). If you cannot think of any way\\nthis can break, I\'ll give you a rather simple example from C++ where this could\\ncause an issue.\\n\\nImagine a function that has some complex object and also calls a coroutine which\\nutilizes read-only reference to that object. When the coroutine suspends, the\\ncaller can modify the object. This can break the integrity of data read by the\\ncoroutine.\\n\\n- Yes, this **can** cause a memory error.\\n- Yes, this **hasn\'t** been handled until someone noticed it.\\n\\nFixing this bug is not backwards compatible, cause you\'re covering a case that\\nhasn\'t been covered before.\\n\\n:::\\n\\n### Enforcing the safety\\n\\nOne of the ways Rust enforces the safety is by restricting what you can do, like\\nthe example above. Aforementioned issue _can_ happen, but **doesn\'t have to**.\\nRule of the thumb in the Rust compiler is to _\u201cblock\u201d_ anything that can be an\\nissue, static analysis can\'t do much more, it cannot decide whether it\'s safe to\\ndo it or not.\\n\\nSatisfying the Rust compiler is sometimes a brutal pain in the ass, because you\\ncannot do things like you\'re used to, you need to work around them _somehow_.\\n\\n:::tip\\n\\nKey difference between Rust and C or C++ lies in the fact that Rust chooses to\\n_ban_ all \u201cpotentially offensive\u201d actions, C and C++ _relies_ on **you** to be\\nsure it\'s safe to do.\\n\\n![C++ v. Rust](https://i.imgur.com/0vbkYPp.png)\\n\\n:::\\n\\n### Consequences\\n\\nWhere are we heading with this approach of \u201cif it compiles, it runs\u201d though?\\nIn this aspect I have a rather similar opinion as with regards to the ChatGPT\\nand its derivatives.\\n\\nIf you teach people to 100% depend on the compiler, they will do it, cause it\'s\\n_easy_. All you need to do is make the compiler _shut up_[^3]. Giving up the\\n_intellectual masturbation_ about the memory safety will make you lose your edge\\nover the time. When we get to the point of everyone being in the mindset\\nmentioned above, who\'s going to maintain the compiler? This is the place where\\nyou **need to** think about the memory safety and furthermore in a much more\\ngeneral way than in your own projects, because it is the thing that everyone\\n_blindly believes in_ in the end.\\n\\nI\'m not saying that everyone should give up Rust and think about their memory\\nmanagement and potential memory issues. I\'m just saying that going the easy way\\nwill make people _dull_ and they should think about it anyways, that\'s how the\\nissue above has been discovered. If everyone walked past and didn\'t think about\\nit, no one would discover this issue till it bit them hard.\\n\\n:::tip Standard library\\n\\nEven the standard library is littered with `unsafe` blocks that are prefixed\\nwith comments in style:\\n\\n```rs\\n// SAFETY: \u2026\\n```\\n\\nThe fact that the _casual_ Rust dev doesn\'t have to think much about safety,\\ncause the compiler has their back, doesn\'t mean that the Rust compiler dev\\ndoesn\'t either.\\n\\nI gotta admit that I adopted this concept in other languages (even in Python),\\ncause you can encounter situations where it doesn\'t have to be clear _why_ you\\ncan do _what_ you\'re doing.\\n\\n:::\\n\\n## Development & design\\n\\nDevelopment of Rust is\u2026 very fast. One positive is that they\'re trying to be as\\nbackward compatible as possible at least by verifying against all the published\\ncrates in the process. Of course, you cannot be backward compatible about fixing\\nthe bugs that have been found, but such is life.\\n\\n### Fast development cycle\\n\\nOne of the negatives of the fast development cycle is the fact that they\'re\\nusing the latest features already in the next release of the Rust. Yes, it is\\nsomething that you can use for verifying and testing your own changes, but at\\nthe same time it places a requirement of the latest release to compile the next\\none.\\n\\n:::tip\\n\\nIf you check `gcc` for example, they have a requirement of minimal version of\\ncompiler that you need for the build. Though gcc\'s requirement is not so _needy_\\nas the Rust one.\\n\\n:::\\n\\nOne of the other negatives is the introduction of bugs. If you\'re pushing\\nchanges, somewhat mindlessly, at such a fast pace, it is inevitable to introduce\\na bunch bugs in the process. Checking the GitHub issue tracker with\\n\\n```\\nis:issue is:open label:C-bug label:T-compiler\\n```\\n\\nyields **2,224** open issues at the time of writing this post.\\n\\n### RFCs\\n\\nYou can find **a lot** of RFCs for the Rust. Some of them are more questionable\\nthan the others. Fun thing is that a lot of them make it to the nightly builds,\\nso they can be tested and polished off. Even the questionable ones\u2026 I\'ll leave\\nfew examples for a better understanding.\\n\\nOne of such features is the `do yeet` expression:\\n\\n```rust\\n#![feature(yeet_expr)]\\n\\nfn foo() -> Result<String, i32> {\\n do yeet 4;\\n}\\nassert_eq!(foo(), Err(4));\\n\\nfn bar() -> Option<String> {\\n do yeet;\\n}\\nassert_eq!(bar(), None);\\n```\\n\\nIt allows you to \u201cyeet\u201d the errors out of the functions that return `Result` or\\n`Option`.\\n\\n[One](https://github.com/rust-lang/rfcs/pull/3503) of the more recent ones is\\nthe ability to include Cargo manifests into the sources, so you can do something\\nlike:\\n\\n```rust\\n#!/usr/bin/env cargo\\n---\\n[dependencies]\\nclap = { version = \\"4.2\\", features = [\\"derive\\"] }\\n---\\n\\nuse clap::Parser;\\n\\n#[derive(Parser, Debug)]\\n#[clap(version)]\\nstruct Args {\\n #[clap(short, long, help = \\"Path to config\\")]\\n config: Option<std::path::PathBuf>,\\n}\\n\\nfn main() {\\n let args = Args::parse();\\n println!(\\"{:?}\\", args);\\n}\\n```\\n\\nI would say you can get almost anything into the language\u2026\\n\\n## Community and hype train\\n\\nRust community is a rather unique thing. A lot of people will hate me for this,\\nbut I can\'t help, but to compare them to _militant vegans_. I\'ll go through some\\nof the things related to it, so I can support my opinion at least.\\n\\n_Rust is the best language._ It is not. There is no best language, each has its\\nown positives and negatives, you need to choose the language that\'s **the most**\\n**suitable for your use case**. There are areas where Rust excels, though I have\\nto admit it\'s very close to being a universal hammer regardless of how suitable\\nit is. There is a very steep learning curve to it, beginnings in Rust are very\\npainful.\\n\\n_Rewrite everything in Rust._ Just no. There are multiple feedbacks on doing\\nrewrites, it is very common to fix _N_ bugs with a rewrite while introducing\\n_N + 1_ other bugs in the process. It doesn\'t solve anything unless there are\\nsome strong reasons to go with it. Majority of such suggested rewrites don\'t\\nhave those reasons though.\\n\\n_Language \u2039x\u203a is bad, though in Rust\u2026_ Cherry-picking one specific pain point of\\none language and reflecting how it is better in other language can go both ways.\\nFor example it is rather easy to pick the limitations imposed by Rust compiler\\nand show how it\'s possible in other languages :man_shrugging:\\n\\nI don\'t mind any of those opinions, you\'re free to have them, as long as you\\ndon\'t rub them in my face which is not the usual case\u2026 This experience makes it\\njust worse for me, part of this post may be also influenced by this fact.\\n\\n### Rust in Linux\\n\\n:::caution\\n\\nAs someone who has seen the way Linux kernel is built in the RHEL ecosystem, how\\ncomplex the whole thing is and how much resources you need to proceed, I have\\nvery strong opinions on this topic.\\n\\n:::\\n\\nIt took years of work to even \u201cincorporate\u201d Rust into the Linux codebase, just\\nto get the \u201cHello World!\u201d. I don\'t have anything against the idea of writing\\ndrivers in the Rust, I bet it can catch a lot of common mistakes, but still\\nintroducing Rust to the kernel is another step to enlarge the monster.\\n\\nI have to admit though that the _Apple GPU_ driver for Linux written in Rust is\\nquite impressive. Apart from that there are not so many benefits, yet\u2026\\n\\n## Packaging\\n\\nI\'ll divide the packaging into the packaging of the language itself and the\\nprograms written in Rust.\\n\\nLet\'s start with the `cargo` itself though. Package managers of the languages\\nusually get a lot of hate (you can take `npm` or `pip` as examples[^1]). If\\nyou\'ve ever tried out Rust, I bet you already know where I\'m going with this.\\nYes, I mean the compilation times, or even Cargo downloading _whole_ index of\\ncrates just so you can update that one dependency (and 3 millions of indirect\\ndeps). When I was doing AoC \u201822 in Rust, I\'ve set up `sccache` right away on the\\nfirst day.\\n\\nLet\'s move to the packaging of the Rust itself, it\'s tedious. Rust has a very\\nfast development cycle and doesn\'t even try to make the builds backward\\ncompatible. If there is a new release of Rust, there is a very high chance that\\nyou cannot build that release with anything other than **the latest** Rust\\nrelease. If you have ever touched the packaging, you know that this is something\\nthat can cause a lot of problems, cause you need the second-to-latest version to\\ncompile the latest version, don\'t forget that this applies inductively\u2026 People\\nrunning _Gentoo_ could tell you a lot about this.\\n\\n:::info\\n\\nCompiling the compilers takes usually more time than compiling the kernel\\nitself\u2026\\n\\n:::\\n\\nI cannot speak about packaging of Rust programs in other than RHEL-based\\ndistros, though I can speak about RHEL ecosystem. Fedora packaging guidelines\\nspecify that you need to build each and every dependency of the program\\nseparately. I wanted to try out _AlmaLinux_ and install Alacritty there and I\\nfailed miserably. The solution that worked, consisted of ignoring the packaging\\nguidelines, running `cargo build` and consuming the binaries afterwards.\\nDependencies of the Rust programs are of a similar nature as JS dependencies.\\n\\n> I\'m tipping my fedora[^2] in the general direction of the maintainers of Rust\\n> packages in RHEL ecosystem. I wouldn\'t be able to do this without losing my\\n> sanity.\\n\\n## Likes\\n\\nIf you\'ve come all the way here and you\'re a Rustacean, I believe I\'ve managed\\nto get your blood boiling, so it\'s time to finish this off by stuff I like about\\nRust. I doubt I will be able to cover everything, but I can try at least. You\\nhave to admit it\'s much easier to remember the bad stuff as opposed to the good.\\n:wink:\\n\\n### Workflow and toolchain\\n\\nI prefered using Rust for the _Advent of Code_ and _Codeforces_ as it provides\\na rather easy way to test the solutions before running them with the challenge\\ninput (or test runner). I can give an example from the _Advent of Code_:\\n\\n```rust\\nuse aoc_2023::*;\\n\\ntype Output1 = i32;\\ntype Output2 = Output1;\\n\\nstruct DayXX {}\\nimpl Solution<Output1, Output2> for DayXX {\\n fn new<P: AsRef<Path>>(pathname: P) -> Self {\\n let lines: Vec<String> = file_to_lines(pathname);\\n\\n todo!()\\n }\\n\\n fn part_1(&mut self) -> Output1 {\\n todo!()\\n }\\n\\n fn part_2(&mut self) -> Output2 {\\n todo!()\\n }\\n}\\n\\nfn main() -> Result<()> {\\n DayXX::main()\\n}\\n\\ntest_sample!(day_XX, DayXX, 42, 69);\\n```\\n\\nThis was the skeleton I\'ve used and the macro at the end is my own creation that\\nexpands to:\\n\\n```rust\\n#[cfg(test)]\\nmod day_XX {\\n use super::*;\\n\\n #[test]\\n fn part_1() {\\n let path = DayXX::get_sample(1);\\n let mut day = DayXX::new(path);\\n assert_eq!(day.part_1(), 42);\\n }\\n\\n #[test]\\n fn part_2() {\\n let path = DayXX::get_sample(2);\\n let mut day = DayXX::new(path);\\n assert_eq!(day.part_2(), 69);\\n }\\n}\\n```\\n\\nWhen you\'re solving the problem, all you need to do is switch between\\n`cargo test` and `cargo run` to check the answer to either sample or the\\nchallenge input itself.\\n\\nIntroduce [bacon] and it gets even better. Bacon is a CLI tool that wraps around\\nthe `cargo` and allows you to check, run, lint or run tests on each file save.\\nIt\'s a very pleasant thing for a so-called _compiler-assisted_ development.\\n\\nSpeaking of linting from within the bacon, you cannot leave out the [clippy].\\nNot only it can whip your ass because of errors, but it can also produce a lot\\nof helpful suggestions, for example passing slices by borrow instead of\\nborrowing the `Vec` itself when you don\'t need it.\\n\\n### Standard library\\n\\nThere\'s **a lot** included in the standard library. It almost feels like you\\nhave all you need[^4]. I like placeholders (like `todo!()`, `unreachable!()`,\\n`unimplemented!()`) to the extent of\\n[implementing](/cpp/exceptions-and-raii/placeholders) them as exceptions in C++.\\n\\nYou can find almost anything. Though you can also hit some very weird issues\\nwith some of the nuances of the type system.\\n\\n### `unsafe`\\n\\nThis might be something that people like to avoid as much as possible. However I\\nthink that forming a habit of commenting posibly unsafe operations in **any**\\nlanguage is a good habit, as I\'ve mentioned above. You should be able to argue\\nwhy you can do something safely, even if the compiler is not kicking your ass\\nbecause of it.\\n\\nExcerpt of such comment from work:\\n\\n```py\\n# SAFETY: Taking first package instead of specific package should be\\n# safe, since we have put a requirement on \xbbone\xab \u2039upstream_project_url\u203a\\n# per Packit config, i.e. even if we\'re dealing with a monorepo, there\\n# is only \xbbone\xab upstream. If there is one upstream, there is only one\\n# set of GPG keys that can be allowed.\\nreturn self.downstream_config.packages[\\n self.downstream_config._first_package\\n].allowed_gpg_keys\\n```\\n\\n### Traits\\n\\nOne of the other things I like are the traits. They are more restrictive than\\ntemplates or concepts in C++, but they\'re doing their job pretty good. If you\\nare building library and require multiple traits to be satisfied it means a lot\\nof copy-paste, but that\'s soon to be fixed by the [trait aliases].\\n\\n:::tip Comparing to other languages\\n\\nOn Wikipedia I\'ve seen trait being defined as a more restrictive type class as\\nyou may know it from the Haskell for example. C++ isn\'t behind either with its\\n_constraints and concepts_. I would say that we can order them in the following\\norder based on the complexity they can express:\\n\\n```\\nRust\'s trait < Haskell\'s type class < C++\'s concept\\n```\\n\\n:::\\n\\nYou can also hit some issues, like me when trying to support conversions between\\nunderlying numeric types of a 2D vectors or support for using an operator from\\nboth sides (I couldn\'t get `c * u` to work in the same way as `u * c` because\\nthe first one requires you to implement the trait of a built-in type).\\n\\n:::warning Implementation\\n\\nImplementing traits lies in\\n\\n```rust\\nimpl SomeTrait for SomeStruct {\\n // implementation goes here\\n}\\n```\\n\\nOne of the things I **would love to** see is being able to define the helper\\nfunctions within the same block. As of now, the only things allowed are the ones\\nthat are required by the trait, which in the end results in a randomly lying\\nfunctions around (or in a implementation of the structure itself). I don\'t like\\nthis mess at all\u2026\\n\\n:::\\n\\n### Influence of functional paradigm\\n\\nYou can see a big influence of the functional paradigm. Not only in iterators,\\nbut also in the other parts of the language. For example I prefer `Option<T>` or\\n`Result<T, E>` to `null`s and exceptions. Pattern matching together with\\ncompiler both enforces handling of the errors and rather user-friendly way of\\ndoing it.\\n\\nNot to mention `.and_then()` and such. However spending most of the time with\\nthe AoC you get pretty annoyed of the repetitive `.unwrap()` during parsing,\\nsince you are guaranteed correct input.\\n\\n### Macros\\n\\nMacros are a very strong pro of the Rust. And no, we\'re not going to talk about\\nthe procedural macros\u2026\\n\\nAs I\'ve shown above I\'ve managed to \u201ctame\u201d a lot of copy-paste in the tests for\\nthe AoC by utilizing a macro that generated a very basic template for the tests.\\n\\nAs I have mentioned the traits above, I cannot forget to give props to `derive`\\nmacro that allows you to \u201cdeduce\u201d the default implementation. It is very helpful\\nfor a tedious tasks like implementing `Debug` (for printing out the structures)\\nor comparisons, though with the comparisons you need to be careful about the\\ndefault implementation, it has already bitten me once or twice.\\n\\n## Summary\\n\\nOverall there are many things about the Rust I like and would love to see them\\nimplemented in other languages. However there are also many things I don\'t like.\\nNothing is **exclusively** black and white.\\n\\n[advent of code]: https://adventofcode.com\\n[bacon]: https://dystroy.org/bacon/\\n[clippy]: https://github.com/rust-lang/rust-clippy\\n[codeforces]: https://codeforces.com\\n[trait aliases]: https://github.com/rust-lang/rfcs/blob/master/text/1733-trait-alias.md\\n\\n[^1]:\\n not to even mention multiple different packaging standards Python has, which\\n is borderline https://xkcd.com/927/\\n\\n[^2]: pun intended\\n[^3]: It\'s not that easy with the Rust compiler, but OK\u2026\\n[^4]:\\n unlike Python where there\'s whole universe in the language itself, yet there\\n are essential things not present\u2026"},{"id":"/2023/08/02/copr","metadata":{"permalink":"/blog/2023/08/02/copr","editUrl":"https://github.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md","source":"@site/blog/2023-08-02-copr.md","title":"How can Copr help with broken dependencies","description":"Copr comes to save you when maintainer doesn\'t care.","date":"2023-08-02T00:00:00.000Z","formattedDate":"August 2, 2023","tags":[{"label":"\ud83c\udfed","permalink":"/blog/tags/\ud83c\udfed"},{"label":"red-hat","permalink":"/blog/tags/red-hat"},{"label":"copr","permalink":"/blog/tags/copr"},{"label":"admin","permalink":"/blog/tags/admin"},{"label":"vps","permalink":"/blog/tags/vps"}],"readingTime":3.44,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. your opinionated admin","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"How can Copr help with broken dependencies","description":"Copr comes to save you when maintainer doesn\'t care.","date":"2023-08-02T00:00:00.000Z","authors":[{"key":"mf","title":"a.k.a. your opinionated admin"}],"tags":["\ud83c\udfed","red-hat","copr","admin","vps"]},"unlisted":false,"prevItem":{"title":"Mixed feelings on Rust","permalink":"/blog/2024/01/28/rust-opinion"},"nextItem":{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week"}},"content":"When you decide to run Fedora on your VPS, you might get screwed over by using\\nrandom repositories\u2026\\n\\n\x3c!--truncate--\x3e\\n\\nWhen I \u201creserved\u201d my VPS[^1] back in June \'20, I slapped Fedora on it without\\nthinking. I bet 99% of people would say that I\'m crazy for doing such thing[^2],\\n**BUT** I\'ve been using Fedora on my PCs for some time already and it felt very\\nstable and natural to just use, even for VPS.\\n\\nOne of the first things I\'ve done was setting up a mail server. You may guess\\nwhat\'s the fun part about having a mail server\u2026 Yes, it\'s all the spam you\\nreceive and only then you realize how much \u201ccrap\u201d gets filtered on free mail\\nservices. To battle this problem I chose to use\\n[rspamd](https://github.com/rspamd/rspamd) that had CentOS support, but someone\\nhad a [Copr](https://copr.fedorainfracloud.org/) repository that I used to\\ninstall it.\\n\\n## How does Copr repositories work?\\n\\nIf you have ever used Ubuntu, you might be familiar with the concept since it is\\nvery close to [PPAs](https://help.ubuntu.com/community/PPA).\\n\\ntl;dr of the whole process consists of\\n\\n1. enabling the Copr repository, and\\n2. installing the desired package.\\n\\nSo in shell you would do\\n\\n```\\n# dnf copr enable \u2039copr-repository\u203a\\n# dnf install \u2039package-from-the-repository\u203a\\n```\\n\\nAnd\u2026 that\'s it! Nothing else needed! Simple, right? And literally same process\\nas you would do for the PPA.\\n\\n:::tip AUR\\n\\nOn the other hand, if you are familiar with the archLinux, you definitely know\\nAUR and what it can do for you. Copr repository is pretty similar, but the\\npackages are prebuilt in Copr and Copr repositories can carry the required\\ndependencies for said packages, which simplifies the distribution, and can even\\nhelp with installing singular packages (when you just need the dependency, not\\neverything).\\n\\n:::\\n\\n## My issue\\n\\nNow you might wonder how would I use it on my VPS. It\'s rather simple, once in\\n6 months a new Fedora release comes out. And you need to upgrade to newer\\nrelease\u2026 You don\'t need to do it right away and for such setup it probably isn\'t\\neven recommended.\\n\\n:::tip\\n\\nFedora releases are supported for a year, i.e. they live 6 months till the next\\nrelease and then another 6 months till another release.\\n\\nSome people prefer to run one version \u201cbehind\u201d. If you ever decide to run it on\\nyour home server or in a similar setup, it might be a pretty good idea to\\nfollow. I\'m using the \u201clatest greatest\u201d, cause why not :smile:\\n\\nOne way or another, you still need to bump the release every six months, unless\\nyou\'d bump 2 releases at once every year, which would be a decision, since, at\\nleast I, cannot see any benefits in it\u2026 You don\'t go for \u201cstability\u201d, cause once\\na year you switch to the latest release and then, before you bump, you use one\\nyear old software, so you\'re not even using the latest.\\n\\n:::\\n\\nFast-forward 2 years in the future, new Fedora release came out (October \'22)\\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\\nupgrade, but can either ignore the dependencies or uninstall the rspamd\u2026\\n\\n## How can Copr help?\\n\\nI have managed to find\\n[specfile](https://github.com/rspamd/rspamd/blob/master/rpm/rspamd.spec) for the\\nrspamd package that they use for CentOS. There were some files apart from the\\nspecfile, so I had to make an SRPM locally and then\u2026 I just uploaded the SRPM\\nto the Copr to\\n[build](https://copr.fedorainfracloud.org/coprs/mfocko/rspamd/build/5046567/)\\nan RPM.\\n\\nI have switched the previous Copr repository for rspamd with my own and happily\\nproceeded with the upgrade.\\n\\n## Conclusion\\n\\nCopr is heavily used for testing builds on the upstream with\\n[Packit](https://packit.dev). However, as you can see, it is possible to use it\\n**very well** for packaging your own stuff and avoiding issues (such as the one\\nI have described above), if need be.\\n\\n[^1]: [vpsFree.cz](https://vpsfree.cz)\\n[^2]:\\n Even though I\'ve been running archLinux on some Raspberry Pi\'s and also\\n on one of my \u201chome servers\u201d, before getting the VPS. You could say I like\\n to live on the edge\u2026"},{"id":"aoc-2022/4th-week","metadata":{"permalink":"/blog/aoc-2022/4th-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/04-week-4.md","source":"@site/blog/aoc-2022/04-week-4.md","title":"4th week of Advent of Code \'22 in Rust","description":"Surviving fourth week in Rust.","date":"2023-07-07T15:14:00.000Z","formattedDate":"July 7, 2023","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":15.175,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"4th week of Advent of Code \'22 in Rust","description":"Surviving fourth week in Rust.","date":"2023-07-07T15:14","slug":"aoc-2022/4th-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"How can Copr help with broken dependencies","permalink":"/blog/2023/08/02/copr"},"nextItem":{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week"}},"content":"Let\'s go through the fourth week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 22: Monkey Map](https://adventofcode.com/2022/day/22)\\n\\n:::info tl;dr\\n\\nSimulating a movement on a 2D map with given instructions. Map becomes a cube in\\nthe 2nd part\u2026\\n\\n:::\\n\\n:::caution Rant\\n\\nThis was the most obnoxious problem of this year\u2026 and a lot of Rust issues have\\nbeen hit.\\n\\n:::\\n\\n### Solution\\n\\nIt seems like a very simple problem to solve, but with very obnoxious changes in\\nthe 2nd part and also it\'s relatively hard to decompose \xbbproperly\xab.\\n\\n#### Column iterator\\n\\nIn the first part of the problem it was needed to know the boundaries of each\\nrow and column, since I stored them in `Vec<Vec<char>>` and padded with spaces\\nto ensure I have a rectangular 2D \u201carray\u201d. However when you wanted to go through\\neach row and column to determine the boundaries, it was very easy to do for the\\nrows (cause each row is a `Vec` element), but not for the columns, since they\\nspan multiple rows.\\n\\nFor this use case I have implemented my own _column iterator_:\\n\\n```rust\\npub struct ColumnIterator<\'a, T> {\\n map: &\'a [Vec<T>],\\n column: usize,\\n\\n i: usize,\\n}\\n\\nimpl<\'a, T> ColumnIterator<\'a, T> {\\n pub fn new(map: &\'a [Vec<T>], column: usize) -> ColumnIterator<\'a, T> {\\n Self { map, column, i: 0 }\\n }\\n}\\n\\nimpl<\'a, T> Iterator for ColumnIterator<\'a, T> {\\n type Item = &\'a T;\\n\\n fn next(&mut self) -> Option<Self::Item> {\\n if self.i >= self.map.len() {\\n return None;\\n }\\n\\n self.i += 1;\\n Some(&self.map[self.i - 1][self.column])\\n }\\n}\\n```\\n\\nGiven this piece of an iterator, it is very easy to factor out the common\\nfunctionality between the rows and columns into:\\n\\n```rust\\nlet mut find_boundaries = |constructor: fn(usize) -> Orientation,\\n iterator: &mut dyn Iterator<Item = &char>,\\n upper_bound,\\n i| {\\n let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == \' \');\\n let start = first_non_empty.next().unwrap().0 as isize;\\n\\n let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != \' \');\\n let end = last_non_empty.next().unwrap_or((upper_bound, &\'_\')).0 as isize;\\n\\n boundaries.insert(constructor(i), start..end);\\n};\\n```\\n\\nAnd then use it as such:\\n\\n```rust\\n// construct all horizontal boundaries\\n(0..map.len()).for_each(|row| {\\n find_boundaries(\\n Orientation::horizontal,\\n &mut map[row].iter(),\\n map[row].len(),\\n row,\\n );\\n});\\n\\n// construct all vertical boundaries\\n(0..map[0].len()).for_each(|col| {\\n find_boundaries(\\n Orientation::vertical,\\n &mut ColumnIterator::new(&map, col),\\n map.len(),\\n col,\\n );\\n});\\n```\\n\\n#### Walking around the map\\n\\nOnce the 2nd part got introduced, you start to think about a way how not to\\ncopy-paste a lot of stuff (I haven\'t avoided it anyways\u2026). In this problem, I\'ve\\nchosen to introduce a trait (i.e. _interface_) for 2D and 3D walker.\\n\\n```rust\\ntrait Wrap: Clone {\\n type State;\\n\\n // simulation\\n fn is_blocked(&self) -> bool;\\n fn step(&mut self, steps: isize);\\n fn turn_left(&mut self);\\n fn turn_right(&mut self);\\n\\n // movement\\n fn next(&self) -> (Self::State, Direction);\\n\\n // final answer\\n fn answer(&self) -> Output;\\n}\\n```\\n\\nEach walker maintains its own state and also provides the functions that are\\nused during the simulation. The \u201cpromised\u201d methods are separated into:\\n\\n- _simulation_-related: that are used during the simulation from the `.fold()`\\n- _movement_-related: just a one method that holds most of the logic differences\\n between 2D and 3D\\n- _final answer_: which extracts the _proof of solution_ from the\\n implementation-specific walker\\n\\nBoth 2D and 3D versions borrow the original input and therefore you must\\nannotate the lifetime of it:\\n\\n```rust\\nstruct Wrap2D<\'a> {\\n input: &\'a Input,\\n position: Position,\\n direction: Direction,\\n}\\nimpl<\'a> Wrap2D<\'a> {\\n fn new(input: &\'a Input) -> Wrap2D<\'a> {\\n// \u2026\\n```\\n\\n#### Problems\\n\\nI have used a lot of closures for this problem and once I introduced a parameter\\nthat was of unknown type (apart from the fact it implements a specific trait), I\\ngot suggested a \u201cfix\u201d for the compilation error that resulted in something that\\nwas not possible to parse, cause it, more than likely, violated the grammar.\\n\\nIn a similar fashion, I have been suggested changes that led to a code that\\ndidn\'t make sense by just looking at it (there was no need to try the changes),\\nfor example one suggested change in the closure parameter caused disapperance of\\nthe parameter name. :smile:\\n\\n#### Clippy\\n\\nI have to admit that Clippy was rather helpful here, I\'ll include two examples\\nof rather smart suggestions.\\n\\nWhen writing the parsing for this problem, the first thing I have spotted on the\\n`char` was the `.is_digit()` function that takes a radix as a parameter. Clippy\\nnoticed that I use `radix = 10` and suggested switching to `.is_ascii_digit()`\\nthat does exactly the same thing:\\n\\n```diff\\n- .take_while(|c| c.is_digit(10))\\n+ .take_while(|c| c.is_ascii_digit())\\n```\\n\\nAnother useful suggestion appeared when working with the iterators and I wanted\\nto get the $n$-th element from it. You know the `.skip()`, you know the\\n`.next()`, just \u201cslap\u201d them together and we\'re done for :grin: Well, I got\\nsuggested to use `.nth()` that does exactly the combination of the two mentioned\\nmethods on iterators:\\n\\n```diff\\n- match it.clone().skip(skip).next().unwrap() {\\n+ match it.clone().nth(skip).unwrap() {\\n```\\n\\n## [Day 23: Unstable Diffusion](https://adventofcode.com/2022/day/23)\\n\\n:::info tl;dr\\n\\nSimulating movement of elves around with a set of specific rules.\\n\\n:::\\n\\n### Solution\\n\\nThere\'s not much to mention since it\'s just a cellular automaton simulation\\n(even though the AoC rules for cellular automatons usually get out of hand\\n:wink:).\\n\\nAlthough I had a need to determine boundaries of the elves\' positions and ended\\nup with a nasty DRY violation. Knowing that you you\'re looking for maximum and\\nminimum that are, of course, exactly the same except for initial values and\\ncomparators, it looks like a rather simple fix, but typing in Rust is something\\nelse, right? In the end I settled for a function that computes both boundaries\\nwithout any duplication while using a closure:\\n\\n```rust\\nfn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {\\n let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {\\n positions\\n .iter()\\n .fold(Vector2D::new(init, init), |acc, elf| {\\n Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))\\n })\\n };\\n\\n (f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))\\n}\\n```\\n\\nThis function returns a pair of 2D vectors that represent opposite points of the\\nbounding rectangle of all elves.\\n\\nYou might ask why would we need a closure and the answer is that `positions`\\ncannot be captured from within the nested function, only via closure. One more\\nfun fact on top of that is the type of the comparator\\n\\n```rust\\n&dyn Fn(isize, isize) -> isize\\n```\\n\\nOnce we remove the `dyn` keyword, compiler yells at us and also includes a way\\nhow to get a more thorough explanation of the error by running\\n\\n $ rustc --explain E0782\\n\\nwhich shows us\\n\\n Trait objects must include the `dyn` keyword.\\n\\n Erroneous code example:\\n\\n ```\\n trait Foo {}\\n fn test(arg: Box<Foo>) {} // error!\\n ```\\n\\n Trait objects are a way to call methods on types that are not known until\\n runtime but conform to some trait.\\n\\n Trait objects should be formed with `Box<dyn Foo>`, but in the code above\\n `dyn` is left off.\\n\\n This makes it harder to see that `arg` is a trait object and not a\\n simply a heap allocated type called `Foo`.\\n\\n To fix this issue, add `dyn` before the trait name.\\n\\n ```\\n trait Foo {}\\n fn test(arg: Box<dyn Foo>) {} // ok!\\n ```\\n\\n This used to be allowed before edition 2021, but is now an error.\\n\\n:::danger Rant\\n\\nNot all of the explanations are helpful though, in some cases they might be even\\nmore confusing than helpful, since they address _very simple_ use cases.\\n\\nAs you can see, even in this case there are two sides to the explanations:\\n\\n- it explains why you need to use `dyn`, but\\n- it still mentions that trait objects need to be heap-allocated via `Box<T>`\\n that, as you can see in my snippet, **does not** apply here :smile: IMO it\'s\\n caused by the fact that we are borrowing it and therefore we don\'t need to\\n care about the size or whereabouts of it.\\n\\n:::\\n\\n:::info C++ parallel\\n\\nIf you dive into the explanation above, you can notice that the `Box<dyn Trait>`\\npattern is very helpful for using types that are not known during compile-time.\\nYou would use a very similar approach in C++ when parsing some data structure\\nfrom input (let\'s say JSON for example).\\n\\nOn the other hand, in this case, it doesn\'t really make much sense, cause you\\ncan clearly see that the types **are known** during the compile-time, which in\\nC++ could be easily resolved by templating the helper function.\\n\\n:::\\n\\n## [Day 24: Blizzard Basin](https://adventofcode.com/2022/day/24)\\n\\n:::info tl;dr\\n\\nNavigating your way through a basin with series of blizzards that move around\\nyou as you move.\\n\\n:::\\n\\n:::caution\\n\\nIt\'s second to last day and I went \u201c_bonkers_\u201d on the Rust :smile: Proceed to\\nread _Solution_ part on your own risk.\\n\\n:::\\n\\n### Solution\\n\\nYou are given a map with blizzards all over the place and you\'re supposed to\\nfind the minimum time it requires you to walk through the basin without getting\\nin any of the blizzards.\\n\\n#### Breakdown\\n\\nRelatively simple, yet a bit annoying, approach can be taken. It\'s technically\\na shortest-path algorithm implementation with some relaxation restrictions and\\nbeing able to stay on one position for some time, so each _vertex_ of the graph\\nis determined by the position on the map and the _timestamp_. I have chosen to\\nuse `Vector3D<usize>`, since `x` and `y` attributes can be used for the position\\nand, well, let\'s use `z` for a timestamp, cause why not, right? :wink:\\n\\n#### Evaluating the blizzards\\n\\n:::caution\\n\\nI think that this is the most perverted abuse of the traits in the whole 4 weeks\\nof AoC in Rust\u2026\\n\\n:::\\n\\nThe blizzards move along their respective directions in time and loop around in\\ntheir respective row/column. Each vertex holds position **and** time, so we can\\n_just_ index the basin with the vertex itself, right? Yes, we can :smiling_imp:\\n\\n:::tip Fun fact\\n\\nWhile writing this part, I\'ve recognized unnecessary verbosity in the code and\\ncleaned it up a bit. The changed version is shown here and the original was just\\nmore verbose.\\n\\n:::\\n\\nI\'ll skip the boring parts of checking bounds and entry/exit of the basin :wink:\\nWe can easily calculate positions of the blizzards using a modular arithmetics:\\n\\n```rust\\nimpl Index<Position> for Basin {\\n type Output = char;\\n\\n fn index(&self, index: Position) -> &Self::Output {\\n // \u2039skipped boring parts\u203a\\n\\n // We need to account for the loops of the blizzards\\n let width = self.cols - 2;\\n let height = self.rows - 2;\\n\\n let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;\\n [\\n (\\n index.y() as usize,\\n blizzard_origin(width, -1, index.z(), index.x()),\\n \'>\',\\n ),\\n (\\n index.y() as usize,\\n blizzard_origin(width, 1, index.z(), index.x()),\\n \'<\',\\n ),\\n (\\n blizzard_origin(height, -1, index.z(), index.y()),\\n index.x() as usize,\\n \'v\',\\n ),\\n (\\n blizzard_origin(height, 1, index.z(), index.y()),\\n index.x() as usize,\\n \'^\',\\n ),\\n ]\\n .iter()\\n .find_map(|&(y, x, direction)| {\\n if self.map[y][x] == direction {\\n Some(&self.map[y][x])\\n } else {\\n None\\n }\\n })\\n .unwrap_or(&\'.\')\\n }\\n}\\n```\\n\\nAs you can see, there is an expression for calculating the original position and\\nit\'s used multiple times, so why not take it out to a lambda, right? :wink:\\n\\nI couldn\'t get the `rustfmt` to format the `for`-loop nicely, so I\'ve just\\ndecided to go with iterating over an elements of a slice. I have used, once\\nagain, a combination of two functions (`find_map` in this case) to do 2 things\\nat once and at the end, if we haven\'t found any blizzard, we just return the\\nempty space.\\n\\nI think it\'s a very _nice_ (and naughty) way how to use the `Index` trait, don\'t\\nyou think?\\n\\n#### Shortest-path algorithm\\n\\nFor the shortest path you can choose and adjust any of the common shortest-path\\nalgorithms, in my case, I have decided to use [_A\\\\*_] instead of Dijkstra\'s\\nalgorithm, since it better reflects the _cost_ function.\\n\\n:::info Comparison of costs\\n\\nWith the Dijkstra\'s algorithm I would proceed with the `time` attribute used as\\na priority for the queue.\\n\\nWhereas with the _A\\\\*_, I have chosen to use both time and Manhattan distance\\nthat promotes vertices closer to the exit **and** with a minimum time taken.\\n\\n:::\\n\\nCost function is, of course, a closure :wink:\\n\\n```rust\\nlet cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());\\n```\\n\\nAnd also for checking the possible moves from the current vertex, I have\\nimplemented, yet another, closure that yields an iterator with the next moves:\\n\\n```rust\\nlet next_positions = |p| {\\n [(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]\\n .iter()\\n .filter_map(move |&(x, y, t)| {\\n let next_p = p + Vector3D::new(x, y, t);\\n\\n if basin[next_p] == \'.\' {\\n Some(next_p)\\n } else {\\n None\\n }\\n })\\n};\\n```\\n\\n#### Min-heap\\n\\nIn this case I had a need to use the priority queue taking the elements with the\\nlowest cost as the prioritized ones. Rust only offers you the [`BinaryHeap`] and\\nthat is a max-heap. One of the ways how to achieve a min-heap is to put the\\nelements in wrapped in a [`Reverse`] (as is even showed in the linked [docs of\\nthe `BinaryHeap`]). However the wrapping affects the type of the heap and also\\npopping the most prioritized elements yields values wrapped in the `Reverse`.\\n\\nFor this purpose I have just taken the max-heap and wrapped it as a whole in a\\nseparate structure providing just the desired methods:\\n\\n```rust\\nuse std::cmp::{Ord, Reverse};\\nuse std::collections::BinaryHeap;\\n\\npub struct MinHeap<T> {\\n heap: BinaryHeap<Reverse<T>>,\\n}\\n\\nimpl<T: Ord> MinHeap<T> {\\n pub fn new() -> MinHeap<T> {\\n MinHeap {\\n heap: BinaryHeap::new(),\\n }\\n }\\n\\n pub fn push(&mut self, item: T) {\\n self.heap.push(Reverse(item))\\n }\\n\\n pub fn pop(&mut self) -> Option<T> {\\n self.heap.pop().map(|Reverse(x)| x)\\n }\\n}\\n\\nimpl<T: Ord> Default for MinHeap<T> {\\n fn default() -> Self {\\n Self::new()\\n }\\n}\\n```\\n\\nRest is just the algorithm implementation which is not that interesting.\\n\\n## [Day 25: Full of Hot Air](https://adventofcode.com/2022/day/25)\\n\\n:::info tl;dr\\n\\nPlaying around with a numbers in a _special_ base.\\n\\n:::\\n\\nGetting flashbacks to the _IB111 Foundations of Programming_\u2026 Very nice \u201cproblem\u201d\\nwith a rather easy solution, as the last day always seems to be.\\n\\n### Solution\\n\\nImplementing 2 functions, converting from the _SNAFU base_ and back to the _SNAFU_\\n_base_ representation. Let\'s do a bit more though! I have implemented two functions:\\n\\n- `from_snafu`\\n- `to_snafu`\\n\\nNow it is apparent that all I do is number to string and string to number. Hmm\u2026\\nthat sounds familiar, doesn\'t it? Let\'s introduce a structure for the SNAFU numbers\\nand implement the traits that we need.\\n\\nLet\'s start with a structure:\\n\\n```rust\\n#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]\\nstruct SNAFU {\\n value: i64,\\n}\\n```\\n\\n#### Converting from `&str`\\n\\nWe will start by implementing the `FromStr` trait that will help us parse our input.\\nThis is rather simple, I can just take the `from_snafu` function, copy-paste it\\ninto the `from_str` method and the number I get will be wrapped in `Result` and\\n`SNAFU` structure.\\n\\n#### Converting to `String`\\n\\nThis is more fun. In some cases you need to implement only one trait and others\\nare automatically implemented using that one trait. In our case, if you look in\\nthe documentation, you can see that `ToString` trait is automatically implemented\\nfor any type that implements `Display` trait.\\n\\nLet\'s implement the `Display` trait then. We should be able to use the `to_snafu`\\nfunction and just take the `self.value` from the `SNAFU` structure.\\n\\nAnd for the convenience of tests, we can also implement a rather simple `From<i64>`\\ntrait for the `SNAFU`.\\n\\n#### Adjusting the code\\n\\nAfter those changes we need to adjust the code and tests.\\n\\nParsing of the input is very easy, before we have used the lines, now we parse\\neverything:\\n\\n```diff\\n fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {\\n- file_to_lines(pathname)\\n+ file_to_structs(pathname)\\n }\\n```\\n\\nPart 1 needs to be adjusted a bit too:\\n\\n```diff\\n fn part_1(input: &Input) -> Output {\\n- to_snafu(input.iter().map(|s| from_snafu(s)).sum())\\n+ SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()\\n }\\n```\\n\\nYou can also see that it simplifies the meaning a bit and it is more explicit than\\nthe previous versions.\\n\\nAnd for the tests:\\n\\n```diff\\n #[test]\\n fn test_from() {\\n- for (n, s) in EXAMPLES.iter() {\\n- assert_eq!(from_snafu(s), *n);\\n+ for (&n, s) in EXAMPLES.iter() {\\n+ assert_eq!(s.parse::<SNAFU>().unwrap().value, n);\\n }\\n }\\n\\n #[test]\\n fn test_to() {\\n- for (n, s) in EXAMPLES.iter() {\\n- assert_eq!(to_snafu(*n), s.to_string());\\n+ for (&n, s) in EXAMPLES.iter() {\\n+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());\\n }\\n```\\n\\n## Summary\\n\\nLet\'s wrap the whole thing up! Keeping in mind both AoC and the Rust\u2026\\n\\n![Finished advent calendar :smile:](/img/blog/aoc-2022/04-week-4/calendar.png)\\n\\n### Advent of Code\\n\\nThis year was quite fun, even though most of the solutions and posts came in\\nlater on (_cough_ in \'23 _cough_). Day 22 was the most obnoxious one\u2026 And also\\nit feels like I used priority queues and tree data structures **a lot** :eyes:\\n\\n### with Rust\\n\\nI must admit that a lot of compiler warnings and errors were very useful. Even\\nthough I still found some instances where they didn\'t help at all or cause even\\nworse issues than I had. Compilation times have been addressed with the caching.\\n\\nBuilding my first tree data structure in Rust has been a very \u201cinteresting\u201d\\njourney. Being able to write a more generic BFS algorithm that allows you to not\\nduplicate code while still mantaining the desired functionality contributes to\\na very readable code.\\n\\nI am definitely much more aware of the basic things that bloated Python is\\nmissing, yet Rust has them\u2026\\n\\nUsing explicit types and writing down placeholder functions with `todo!()`\\nmacros is very pleasant, since it allows you to easily navigate the type system\\nduring the development when you don\'t even need to be sure how are you going to\\nput the smaller pieces together.\\n\\nI have used a plethora of traits and also implemented some of them to either be\\nidiomatic, or exploit the syntactic sugar they offer. Deriving the default trait\\nimplementation is also very helpful in a lot of cases, e.g. debugging output,\\ncopying, equality comparison, etc.\\n\\nI confess to touching more \u201ccursed\u201d parts of the Rust, such as macros to\\ndeclutter the copy-paste for tests or writing my own structures that need to\\ncarry a lifetime for their own fields.\\n\\ntl;dr Relatively pleasant language until you hit brick wall :wink:\\n\\n---\\n\\nSee you next year! Maybe in Rust, maybe not :upside_down_face:\\n\\n[_advent of code_]: https://adventofcode.com\\n[_a\\\\*_]: https://en.wikipedia.org/wiki/A*_search_algorithm\\n[`binaryheap`]: https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html\\n[`reverse`]: https://doc.rust-lang.org/std/cmp/struct.Reverse.html\\n[docs of the `binaryheap`]: https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html#min-heap"},{"id":"aoc-2022/3rd-week","metadata":{"permalink":"/blog/aoc-2022/3rd-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/03-week-3.md","source":"@site/blog/aoc-2022/03-week-3.md","title":"3rd week of Advent of Code \'22 in Rust","description":"Surviving third week in Rust.","date":"2023-07-06T21:00:00.000Z","formattedDate":"July 6, 2023","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":11.57,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"3rd week of Advent of Code \'22 in Rust","description":"Surviving third week in Rust.","date":"2023-07-06T21:00","slug":"aoc-2022/3rd-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week"},"nextItem":{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally"}},"content":"Let\'s go through the third week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 15: Beacon Exclusion Zone](https://adventofcode.com/2022/day/15)\\n\\n:::info tl;dr\\n\\nTriangulating a distress beacon based on the information from the sensors.\\n\\n:::\\n\\n### Solution\\n\\nRelatively easy thing to implement, no major Rust issues hit.\\n\\n## [Day 16: Proboscidea Volcanium](https://adventofcode.com/2022/day/16)\\n\\n:::info tl;dr\\n\\nFinding a max flow in a graph given some time constraints.\\n\\n:::\\n\\n### Solution\\n\\nI have used some interesting things to implement this and make it easier for me.\\n\\n#### Indexing in graph\\n\\nI have come across a situation where I needed to keep more information regarding\\nthe graph\u2026 In that case you can, of course, create a structure and keep it in,\\nbut once you have multiple members in the structure it gets harder to work with\\nsince you need to address the fields in the structure. When you work with graph,\\nyou frequently need to access the vertices and in this case it felt a lot easier\\nto implement the indexing in a graph, rather than explicitly access the\\nunderlying data structure.\\n\\nHere you can see a rather short snippet from the solution that allows you to\\n\u201cindex\u201d the graph:\\n\\n```rust\\nimpl Index<&str> for Graph {\\n type Output = Vertex;\\n\\n fn index(&self, index: &str) -> &Self::Output {\\n &self.g[index]\\n }\\n}\\n```\\n\\n#### Cartesian product\\n\\nDuring the implementation I had to utilize Floyd-Warshall algorithm for finding\\nthe shortest path between pairs of vertices and utilized the `iproduct!` macro\\nfrom the [`itertools`]. It is a very useful higher-order function that allows\\nyou to keep the nesting of the loops at a minimum level while still maintaining\\nthe same functionality.\\n\\n#### \u201cImplementing\u201d an iterator\\n\\nFor the second part, you get to split the work between 2 actors. That way you\\ncan achieve higher efficiency of the whole process that you\'re planning, but it\\nalso makes it harder to evaluate algorithmically, since you need to check the\\ndifferent ways the work can be split.\\n\\nBeing affected by _functional programming brain damage_:tm:, I have chosen to\\ndo this part by function that returns an iterator over the possible ways:\\n\\n```rust\\nfn pairings(\\n valves: &BTreeSet<String>,\\n) -> impl Iterator<Item = (BTreeSet<String>, BTreeSet<String>)> + \'_ {\\n let mapping = valves.iter().collect_vec();\\n\\n let max_mask = 1 << (valves.len() - 1);\\n\\n (0..max_mask).map(move |mask| {\\n let mut elephant = BTreeSet::new();\\n let mut human = BTreeSet::new();\\n\\n for (i, &v) in mapping.iter().enumerate() {\\n if (mask & (1 << i)) == 0 {\\n human.insert(v.clone());\\n } else {\\n elephant.insert(v.clone());\\n }\\n }\\n\\n (human, elephant)\\n })\\n}\\n```\\n\\n## [Day 17: Pyroclastic Flow](https://adventofcode.com/2022/day/17)\\n\\n:::info tl;dr\\n\\nSimulating an autonomous Tetris where pieces get affected by a series of jets of\\nhot gas.\\n\\n:::\\n\\n### Solution\\n\\nSimilarly to the previous day I have created some iterators :smile:\\n\\n#### Collision detection\\n\\nOnce you need to check for collisions it is very helpful to be able to just\\niterate through the positions that can actually collide with the wall or other\\npiece.\\n\\nTo get the desired behaviour, you can just compose few smaller functions:\\n\\n```rust\\nfn occupied(shape: &[Vec<char>]) -> impl Iterator<Item = Position> + \'_ {\\n shape.iter().enumerate().flat_map(|(y, row)| {\\n row.iter().enumerate().filter_map(move |(x, c)| {\\n if c == &\'#\' {\\n Some(Vector2D::new(x as isize, y as isize))\\n } else {\\n None\\n }\\n })\\n })\\n}\\n```\\n\\nIn the end, we get relative positions which we can adjust later when given the\\nspecific positions from iterator. You can see some interesting parts in this:\\n\\n- `.enumerate()` allows us to get both the indices (coordinates) and the line\\n or, later on, the character itself,\\n- `.flat_map()` flattens the iterator, i.e. when we return another iterator,\\n they just get chained instead of iterating over iterators (which sounds pretty\\n disturbing, doesn\'t it?),\\n- and finally `.filter_map()` which is pretty similar to the \u201cbasic\u201d `.map()`\\n with a one, key, difference that it expects the items of an iterator to be\\n mapped to an `Option<T>` from which it ignores nothing (as in `None` :wink:)\\n and also unwraps the values from `Some(\u2026)`.\\n\\n#### Infinite iterator\\n\\nIn the solution we cycle through both Tetris-like shapes that fall down and the\\njets that move our pieces around. Initially I have implemented my own infinite\\niterator that just yields the indices. It is a very simple, yet powerful, piece\\nof code:\\n\\n```rust\\nstruct InfiniteIndex {\\n size: usize,\\n i: usize,\\n}\\n\\nimpl InfiniteIndex {\\n fn new(size: usize) -> InfiniteIndex {\\n InfiniteIndex { size, i: size - 1 }\\n }\\n}\\n\\nimpl Iterator for InfiniteIndex {\\n type Item = usize;\\n\\n fn next(&mut self) -> Option<Self::Item> {\\n self.i = (self.i + 1) % self.size;\\n Some(self.i)\\n }\\n}\\n```\\n\\nHowever when I\'m looking at the code now, it doesn\'t really make much sense\u2026\\nGuess what, we can use a built-in function that is implemented on iterators for\\nthat! The function is called `.cycle()`\\n\\nOn the other hand, I am not going to switch to that function, since it would\\nintroduce an another myriad of issues caused by the fact that I create iterators\\nright away in the constructor of my structure and the iterators would borrow\\nboth the jets and shapes which would introduce a lifetime dependency into the\\nstructure.\\n\\n## [Day 18: Boiling Boulders](https://adventofcode.com/2022/day/18)\\n\\n:::info tl;dr\\n\\nLet\'s compute a surface area of some obsidian approximated via coordinates of\\ncubes.\\n\\n:::\\n\\n### Solution\\n\\nThis day is kinda interesting, because it shows how easily you can complicate the\\nproblem and also how much can you screw yourself over with the optimization and\\n\u201csmart\u201d approach.\\n\\nFor the first part you need to find the surface area of an obsidian that is\\napproximated by cubes. Now, that is a very easy thing to do, just keep the track\\nof already added cubes, and check if the newly added cube touches any face of any\\nother cube. Simple, and with a `BTreeSet` relatively efficient way to do it.\\n\\nHowever the second part lets you on a secret that there may be some surface area\\nfrom the \u201cinside\u201d too and you want to know only the one from the outside of the\\nobsidian. I have seen some solutions later, but if you check your data, you might\\nnotice that the bounding box of all the cubes isn\'t that big at all. Therefore I\\nchose to pre-construct the box beforehand, fill in the cubes and then just run a\\nBFS turning all the lava on the outside into the air. Now you just need to check\\ncubes and count how many of their faces touch the air.\\n\\n## [Day 19: Not Enough Minerals](https://adventofcode.com/2022/day/19)\\n\\n:::info tl;dr\\n\\nFinding out the best strategy for building robots to collect geodes.\\n\\n:::\\n\\n### Solution\\n\\nNot much interesting stuff to mention apart from the suggestion to never believe\\nthat the default implementation given by `derive` macro is what you want, it\\ndoesn\'t have to be. :smile:\\n\\n## [Day 20: Grove Positioning System](https://adventofcode.com/2022/day/20)\\n\\n:::info tl;dr\\n\\nShuffling around the _circular linked list_ to find the coordinates.\\n\\n:::\\n\\nNow, small rant for this day is in place. They\'ve never mentioned that coordinates\\ncan repeat and therefore the values are non-unique. This is something that did\\nnot happen in the given sample, but was present in the user input. It took \xbba lot\xab\\nto realize that this is the issue.\\n\\n### Solution\\n\\nI have tried implementing a circular linked list for this\u2026 and I have failed\\nmiserably. To be fair, I still have no clue why. It was \u201cfun\u201d to play around with\\nthe `Rc<RefCell<T>>`. In the end I failed on _wrong answer_. I have also encountered\\na rather interesting issue with `.borrow_mut()` method being used on `Rc<RefCell<T>>`.\\n\\n#### `.borrow_mut()`\\n\\nConsider the following snippet of the code (taken from the documentation):\\n\\n```rust\\nuse std::cell::{RefCell, RefMut};\\nuse std::collections::HashMap;\\nuse std::rc::Rc;\\n// use std::borrow::BorrowMut;\\n\\nfn main() {\\n let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));\\n // Create a new block to limit the scope of the dynamic borrow\\n {\\n let mut map: RefMut<_> = shared_map.borrow_mut();\\n map.insert(\\"africa\\", 92388);\\n map.insert(\\"kyoto\\", 11837);\\n map.insert(\\"piccadilly\\", 11826);\\n map.insert(\\"marbles\\", 38);\\n }\\n\\n // Note that if we had not let the previous borrow of the cache fall out\\n // of scope then the subsequent borrow would cause a dynamic thread panic.\\n // This is the major hazard of using `RefCell`.\\n let total: i32 = shared_map.borrow().values().sum();\\n println!(\\"{total}\\");\\n}\\n```\\n\\nWe allocate a hash map on the heap and then in the inner block, we borrow it as\\na mutable reference, so that we can use it.\\n\\n:::note\\n\\nIt is a very primitive example for `Rc<RefCell<T>>` and mutable borrow.\\n\\n:::\\n\\nIf you uncomment the 4th line with `use std::borrow::BorrowMut;`, you cannot\\ncompile the code anymore, because of\\n\\n```\\n Compiling playground v0.0.1 (/playground)\\nerror[E0308]: mismatched types\\n --\x3e src/main.rs:10:34\\n |\\n10 | let mut map: RefMut<_> = shared_map.borrow_mut();\\n | --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference\\n | |\\n | expected due to this\\n |\\n = note: expected struct `RefMut<\'_, _>`\\n found mutable reference `&mut Rc<RefCell<HashMap<_, _>>>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:11:13\\n |\\n11 | map.insert(\\"africa\\", 92388);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:12:13\\n |\\n12 | map.insert(\\"kyoto\\", 11837);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:13:13\\n |\\n13 | map.insert(\\"piccadilly\\", 11826);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:14:13\\n |\\n14 | map.insert(\\"marbles\\", 38);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nSome errors have detailed explanations: E0308, E0599.\\nFor more information about an error, try `rustc --explain E0308`.\\nerror: could not compile `playground` due to 5 previous errors\\n```\\n\\nIt might seem **a bit** ridiculous. However, I got to a point where the compiler\\nsuggested `use std::borrow::BorrowMut;` and it resulted in breaking parts of the\\ncode that worked previously. I think it may be a good idea to go over what is\\nhappening here.\\n\\n##### `.borrow_mut()` on `Rc<RefCell<T>>`\\n\\nLet\'s consider a variable `x` of type `Rc<RefCell<T>>`. What happens when you\\ncall `.borrow_mut()` on it? We can look at the `Rc` type, and\u2026 hang on! There is\\nneither `.borrow_mut()` method or `BorrowMut` trait implemented. How can we do it\\nthen?\\n\\nLet\'s go further and we can see that `RefCell<T>` implements a `.borrow_mut()`\\nmethod. OK, but how can we call it on the `Rc<T>`? Easily! `Rc<T>` implements\\n`Deref<T>` and therefore you can call methods on `Rc<T>` objects as if they were\\n`T` objects. If we read on _`Deref` coercion_, we can see the following:\\n\\n> If `T` implements `Deref<Target = U>`, \u2026:\\n>\\n> - \u2026\\n> - `T` implicitly implements all the (immutable) methods of the type `U`.\\n\\nWhat is the requirement for the `.borrow_mut()` on `RefCell<T>`? Well, it needs\\n`&self`, so the `Deref` implements the `.borrow_mut()` for the `Rc<RefCell<T>>`.\\n\\n##### `BorrowMut` trait\\n\\nI have not been able to find a lot on this trait. My guess is that it provides a\\nmethod instead of a syntactic sugar (`&mut x`) for the mutable borrow. And also\\nit provides default implementations for the types:\\n\\n```rust\\nimpl BorrowMut<str> for String\\n\\nimpl<T> BorrowMut<T> for &mut T\\nwhere\\n T: ?Sized,\\n\\nimpl<T> BorrowMut<T> for T\\nwhere\\n T: ?Sized,\\n\\nimpl<T, A> BorrowMut<[T]> for Vec<T, A>\\nwhere\\n A: Allocator,\\n\\nimpl<T, A> BorrowMut<T> for Box<T, A>\\nwhere\\n A: Allocator,\\n T: ?Sized,\\n\\nimpl<T, const N: usize> BorrowMut<[T]> for [T; N]\\n```\\n\\n##### Conflict\\n\\nNow the question is why did it break the code\u2026 My first take was that the type\\n`Rc<RefCell<T>>` has some _specialized_ implementation of the `.borrow_mut()` and\\nthe `use` overrides it with the default, which is true **in a sense**. However\\nthere is no _specialized_ implementation. Let\'s have a look at the trait and the\\ntype signature on the `RefCell<T>`:\\n\\n```rust\\n// trait\\npub trait BorrowMut<Borrowed>: Borrow<Borrowed>\\nwhere\\n Borrowed: ?Sized,\\n{\\n fn borrow_mut(&mut self) -> &mut Borrowed;\\n}\\n\\n// \u2039RefCell<T>.borrow_mut()\u203a type signature\\npub fn borrow_mut(&self) -> RefMut<\'_, T>\\n```\\n\\nI think that we can definitely agree on the fact that `RefMut<\'_, T>` is not the\\n`RefCell<T>`.\\n\\n**In my opinion**, `RefCell<T>` implements a **separate** `.borrow_mut()` rather\\nthan implementing the interface, because it **cannot** satisfy the type requirements\\nof the trait.\\n\\n:::caution\\n\\nI wonder how are we expected to deal with this conflict, if and when, we need\\nboth the `.borrow_mut()` of the trait and `.borrow_mut()` of the `RefCell<T>`.\\n\\n:::\\n\\n:::tip Fun fact\\n\\nI was suggested by the compiler to do `use std::borrow::BorrowMut;` and break the\\ncode.\\n\\nSo much for the _almighty_ and _helpful_ compiler\u2026\\n\\n:::\\n\\n## [Day 21: Monkey Math](https://adventofcode.com/2022/day/21)\\n\\n:::info tl;dr\\n\\nComputing an expression tree and then also finding ideal value for a node.\\n\\n:::\\n\\n### Solution\\n\\nRelatively simple, until you get to the 2nd part where you start to practice\\na lot of the copy-paste. I have managed to sneak some perverted stuff in there\\nthough :) Let\'s go through the details.\\n\\n#### `Default` trait\\n\\nFor the first time and twice I had a need to have a default value for my types,\\nenumerations in this case. Rust offers a very nice trait[^1] that is described\\nas:\\n\\n> A trait for giving a type a useful default value.\\n\\nI guess it sums it up nicely. The more interesting part about this is the fact\\nthat you can use the _macro machinery_ to save yourself some typing. If you have\\nenumeration of which the default value doesn\'t bear any parameter, you can just\\ndo[^2]:\\n\\n```rust\\n#[derive(Default)]\\nenum Color {\\n #[default]\\n White,\\n Gray,\\n Black,\\n}\\n```\\n\\n#### Abusing negation\\n\\nIf you want to use a _unary minus_ operator on your own type, you can implement\\na `Neg` trait[^3]. I was dealing with a binary tree and needed a way how to look\\nat the other side, so I have just implemented the negation for flipping between\\nleft and right :smile:\\n\\n[^1]: [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) docs\\n[^2]: Pardon my example from the graph algorithms ;)\\n[^3]: [`Neg`](https://doc.rust-lang.org/std/ops/trait.Neg.html) docs\\n\\n[_advent of code_]: https://adventofcode.com\\n[`itertools`]: https://crates.io/crates/itertools\\n[this reddit post and the comment]: https://www.reddit.com/r/adventofcode/comments/zb98pn/comment/iyq0ono"},{"id":"leetcode/sort-diagonally","metadata":{"permalink":"/blog/leetcode/sort-diagonally","editUrl":"https://github.com/mfocko/blog/tree/main/blog/leetcode/sort-matrix-diagonally.md","source":"@site/blog/leetcode/sort-matrix-diagonally.md","title":"Sort the matrix diagonally","description":"Compiler assisted development.","date":"2023-03-04T23:15:00.000Z","formattedDate":"March 4, 2023","tags":[{"label":"cpp","permalink":"/blog/tags/cpp"},{"label":"leetcode","permalink":"/blog/tags/leetcode"},{"label":"iterators","permalink":"/blog/tags/iterators"}],"readingTime":16.99,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"Sort the matrix diagonally","description":"Compiler assisted development.","date":"2023-03-04T23:15","slug":"leetcode/sort-diagonally","authors":"mf","tags":["cpp","leetcode","iterators"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week"},"nextItem":{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week"}},"content":"Let\'s try to solve one of the LeetCode challenges in easy and hard mode at the\\nsame time.\\n\\n\x3c!--truncate--\x3e\\n\\n- Link to the problem: https://leetcode.com/problems/sort-the-matrix-diagonally/\\n\\n## Problem description\\n\\nA **matrix diagonal** is a diagonal line of cells starting from some cell in\\neither the topmost row or leftmost column and going in the bottom-right direction\\nuntil reaching the matrix\'s end. For example, the **matrix diagonal** starting\\nfrom `mat[2][0]`, where `mat` is a `6 x 3` matrix, includes cells `mat[2][0]`,\\n`mat[3][1]`, and `mat[4][2]`.\\n\\nGiven an `m x n` matrix `mat` of integers, sort each matrix diagonal in ascending\\norder and return the resulting matrix.\\n\\n### Example\\n\\n![Image describing the problem](https://assets.leetcode.com/uploads/2020/01/21/1482_example_1_2.png)\\n\\n## Skeleton and initial adjustments\\n\\nWe are given the following skeleton for the C++ and the given challenge:\\n\\n```cpp\\nclass Solution {\\npublic:\\n vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {\\n\\n }\\n};\\n```\\n\\nThe task is to sort the passed matrix diagonally and then return it. First of all,\\nI don\'t like to solve this in a web browser, so we\'ll need to adjust it accordingly\\nfor running it locally. We\'ll start by including the `vector` header and using\\nfully-qualified namespaces[^1] and also adding few tests:\\n\\n```cpp\\n#include <cassert>\\n#include <vector>\\n\\nusing matrix = std::vector<std::vector<int>>;\\n\\nclass Solution {\\npublic:\\n matrix diagonalSort(matrix& mat)\\n {\\n }\\n};\\n\\nstatic void test_case_1()\\n{\\n // Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]\\n // Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]\\n\\n Solution s;\\n assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },\\n std::vector { 2, 2, 1, 2 },\\n std::vector { 1, 1, 1, 2 } })\\n == std::vector { std::vector { 1, 1, 1, 1 },\\n std::vector { 1, 2, 2, 2 },\\n std::vector { 1, 2, 3, 3 } }));\\n}\\n\\nstatic void test_case_2()\\n{\\n // Input: mat =\\n // [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]\\n // Output:\\n // [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]\\n\\n Solution s;\\n assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },\\n std::vector { 23, 55, 17, 45, 15, 52 },\\n std::vector { 75, 31, 36, 44, 58, 8 },\\n std::vector { 22, 27, 33, 25, 68, 4 },\\n std::vector { 84, 28, 14, 11, 5, 50 } })\\n == std::vector { std::vector { 5, 17, 4, 1, 52, 7 },\\n std::vector { 11, 11, 25, 45, 8, 69 },\\n std::vector { 14, 23, 25, 44, 58, 15 },\\n std::vector { 22, 27, 31, 36, 50, 66 },\\n std::vector { 84, 28, 75, 33, 55, 68 } }));\\n}\\n\\nint main()\\n{\\n test_case_1();\\n test_case_2();\\n\\n return 0;\\n}\\n```\\n\\nWe need to return the matrix, but we\'re given a reference to the input matrix. We\\ncan easily abuse the C++ here and just switch the reference to value, this way\\nthe matrix will be copied when passed to the function, we can sort the copy and\\njust return it back. And we also get yelled by the compiler for the fact that the\\nmethod doesn\'t return anything yet, so to make it \u201cshut up\u201d we will just return\\nthe input for now:\\n\\n```diff\\n- matrix diagonalSort(matrix& mat)\\n+ matrix diagonalSort(matrix mat)\\n {\\n+ return mat;\\n }\\n```\\n\\nNow, we get the copy and we\'re good to go.\\n\\n## Na\xefve solution\\n\\nAs you may know, C++ offers a plethora of functions that can be used to your\\nadvantage, given that you know how to \u201cbend\u201d the data structures accordingly.\\n\\nWhat does that mean for us? Well, we have an `std::sort`, we can use it, right?\\nLet\'s have a look at it:\\n\\n```cpp\\ntemplate< class RandomIt >\\nvoid sort( RandomIt first, RandomIt last );\\n```\\n\\nThis overload is more than we need. What does it do? It just sorts the elements\\nin the range `[first, last)` using `operator<` on them. We can\'t sort the whole\\nmatrix using this, but\u2026 we can sort just \xbbone\xab diagonal without doing much work\\non our end.\\n\\nWhat is the `RandomIt` type though? If we look more into the documentation, we\\ncan easily find the requirements for it and also learn that it\'s a _random access_\\n_iterator_ and allows swapping its values at the same time.\\n\\n:::tip Random access iterator\\n\\nWhat is the _random access iterator_ though? We can find it in a documentation\\nand see the following description:\\n\\n> A **LegacyRandomAccessIterator** is a [LegacyBidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator)\\n> that can be moved to point to any element in constant time.\\n\\nAfter that we can see all the requirements for it being listed. I don\'t feel like\\nreading them right now, so we will just use it and see where the compilation blows\\nup, i.e. \u201c_compiler-assisted development_\u201d[^2] if you will ;)\\n\\n:::\\n\\nNow we know that we can use `std::sort` to sort the diagonal itself, but we also\\nneed to get the diagonals somehow. I\'m rather lazy, so I\'ll just delegate it to\\nsomeone else[^3]. And that way we get\\n\\n```cpp\\nmatrix diagonalSort(matrix mat)\\n{\\n // we iterate over the diagonals\\n for (auto d : diagonals(mat)) {\\n // and we sort each diagonal\\n std::sort(d.begin(), d.end());\\n }\\n\\n // we take the matrix by copy, so we can sort in-situ and return the copy\\n // that we sorted\\n return mat;\\n}\\n```\\n\\nThis solution looks very simple, doesn\'t it? Well, cause it is.\\nLet\'s try compiling it:\\n\\n```\\nmatrix-sort.cpp:11:23: error: use of undeclared identifier \'diagonals\' [clang-diagnostic-error]\\n for (auto d : diagonals(mat)) {\\n ^\\nFound compiler error(s).\\nmake: *** [makefile:14: tidy] Error 1\\n```\\n\\nOK, seems about right. We haven\'t implemented the `diagonals` yet. And based on\\nwhat we\'ve written so far, we need a function or a class `diagonals` that will\\ngive us the diagonals we need.\\n\\n## Implementing the `diagonals`\\n\\nCool, so we need the function that will let us go through each and every diagonal\\nin our matrix. We use the _for-range_ loop, so whatever we get back from the\\n`diagonals` must support `.begin()` and `.end()`. Since I am a masochist, we will\\ndo such functionality for a matrix of any type, not just the `int` from the challenge.\\n\\nAs I said, we need to be able to\\n\\n- construct the object\\n- get the beginning\\n- get the end (the \u201csentinel\u201d)\\n\\n```cpp\\ntemplate <typename T>\\nclass diagonals {\\n using matrix_t = std::vector<std::vector<T>>;\\n\\n matrix_t& _matrix;\\n\\npublic:\\n diagonals(matrix_t& m)\\n : _matrix(m)\\n {\\n }\\n diagonals_iter begin()\\n {\\n /* TODO */\\n }\\n diagonals_iter end()\\n {\\n /* TODO */\\n }\\n};\\n```\\n\\nNow we have a `diagonals` that we can use to go through the diagonals. We haven\'t\\nimplemented the core of it yet. Let\'s go through what we have for now.\\n\\nWe have a templated class with templated `T` that is used as a placeholder for any\\ntype we would store in the matrix. Because I\'m lazy, I have defined the `matrix_t`\\ntype that is a \u201cshortcut\u201d for `std::vector<std::vector<T>>`, so I don\'t have to\\ntype it out all the time. Of course, we need to store the matrix, we are given,\\nas a private attribute. And then just have the constructor and the 2 methods we\\nneed for the _for-range_.\\n\\n### Iterating over diagonals\\n\\nNow that we have an object that will allow us to iterate through the diagonals,\\nwe need to implement the iterating itself. We need to go through all of them, so\\nwe have multiple options how to do so. I have decided to start from the \u201cmain\u201d\\ndiagonal that starts at `(0, 0)` index and then proceed with the diagonals starting\\nin the first row, followed by the rest of the diagonals in the first column.\\n\\nWe need to be able to tell that we\'ve iterated through all of them, and also we\\nneed to know which diagonal is next. For that purpose we will pass the indices\\nof the first cell on the diagonal. That way we can always tell how to move forward.\\n\\nWe will start by updating the `begin` and `end` to reflect our choice accordingly.\\n\\n```cpp\\ndiagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }\\ndiagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }\\n```\\n\\nFor the `begin` we return the first diagonal that starts at `(0, 0)`. And because\\nwe have decided to do the diagonals in the first column at the end, the first\\ndiagonal that is not a valid one is the one at `(0, height)`. Apart from the\\nindices, we also need to pass reference to the matrix itself.\\n\\n:::note\\n\\nYou may have noticed that we also include the diagonals that have length 1,\\nspecifically the ones at `(0, height - 1)` and `(width - 1, 0)`. We are implementing\\nan iterator that **should not** care about the way it\'s being used. Therefore, we\\ndon\'t care about the fact they don\'t need to be sorted.\\n\\n:::\\n\\nCool, let\'s leave the iterator itself to someone else, right?[^4]\\n\\n### Implementing the iterator over diagonals\\n\\nWe can start with a simple skeleton based on the information that we pass from\\nthe `diagonals`. Also to utilize the `matrix_t` and also contain implementation\\ndetails hidden away, we will put this code into the `diagonals` class.\\n\\n```cpp\\nclass diagonals_iter {\\n matrix_t& m;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n};\\n```\\n\\nIn this case we will be implementing a \u201csimple\u201d forward iterator, so we don\'t\\nneed to implement a lot. Notably it will be:\\n\\n- inequality operator (we need to know when we reach the end and have nothing to\\n iterate over)\\n- preincrementation operator (we need to be able to move around the iterable)\\n- dereference operator (we need to be able to retrieve the objects we iterate\\n over)\\n\\n```cpp\\nclass diagonals_iter {\\n matrix_t& m;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator!=(const diagonals_iter& rhs) const\\n {\\n // iterators are not equal if they reference different matrices, or\\n // their positions differ\\n return m != rhs.m || x != rhs.x || y != rhs.y;\\n }\\n\\n diagonals_iter& operator++()\\n {\\n if (y != 0) {\\n // iterating through diagonals down the first column\\n y++;\\n return *this;\\n }\\n\\n // iterating the diagonals along the first row\\n x++;\\n if (x == m.front().size()) {\\n // switching to diagonals in the first column\\n x = 0;\\n y++;\\n }\\n\\n return *this;\\n }\\n\\n diagonal<T> operator*() const { return diagonal { m, x, y }; }\\n};\\n```\\n\\nLet\'s go one-by-one. Inequality operator is rather simple, just compare iterator\'s\\nattributes field-by-field. If you think about it, checking inequality of two 2D\\nvectors may be a bit inefficient, therefore, we can swap around and check it as\\na last thing.\\n\\n```diff\\n- return m != rhs.m || x != rhs.x || y != rhs.y;\\n+ return x != rhs.x || y != rhs.y || m != rhs.m;\\n```\\n\\nPreincrementation is where the magic happens. If you have a better look, you can\\nsee two branches of this operation:\\n\\n1. When `y != 0` (we\'re iterating over the diagonals in the first column)\\n In this case, we just bump the row and we\'re done.\\n2. When `y == 0` (we\'re iterating over the diagonals in the first row)\\n In this case, we bump the column and check if we haven\'t gotten out of bounds,\\n i.e. the end of the first row. If we get out of the bounds, we\'re continuing\\n with the second diagonal in the first column.\\n\\nDereferencing the iterator must \u201cyield\u201d something. In our case it will be the\\ndiagonal that we want to sort. For sorting we need just the iterators that can\\nmove around said diagonal. The simplest thing, we can do, is to delegate it to\\nsomething else. In our case it will be a class called `diagonal`.\\n\\n## Implementing the `diagonal` itself\\n\\nAfter implementing the iterator over diagonals, we know that all we need to describe\\na diagonal is the matrix itself and the \u201cstart\u201d of the diagonal (row and column).\\nAnd we also know that the diagonal must provide some iterators for the `std::sort`\\nfunction. We can start with the following skeleton:\\n\\n```cpp\\ntemplate <typename T>\\nclass diagonal {\\n using matrix_t = std::vector<std::vector<T>>;\\n\\n matrix_t& matrix;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonal(matrix_t& matrix, std::size_t x, std::size_t y)\\n : matrix(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }\\n\\n diagonal_iter end() const\\n {\\n auto max_x = matrix[y].size();\\n auto max_y = matrix.size();\\n\\n // we need to find the distance in which we get out of bounds (either in\\n // column or row)\\n auto steps = std::min(max_x - x, max_y - y);\\n\\n return diagonal_iter { matrix, x + steps, y + steps };\\n }\\n};\\n```\\n\\nInitialization is rather simple, we just \u201ckeep\u201d the stuff we get, `begin` is the\\nsimplest, we just delegate.\\n\\nIn case of the `end`, it gets more complicated. We need to know where is the \u201cend\u201d\\nof the diagonal. Since `end` should point to the first element \u201cafter\u201d the iterable,\\nwe know that it\'s the first position of the iterator where either `y` becomes\\n`matrix.size()` or `x` becomes `matrix[y].size()`. Also we are moving along diagonal,\\nduh, therefore we can deduce the first \u201cposition\u201d afterwards by minimal amount of\\nsteps to get out of the any column or row, hence `std::min(max_x - x, max_y - y)`.\\nFinal position is then computed simply by adding the steps to the beginning of\\nthe diagonal.\\n\\nNow we just need to finish the iterator for the diagonal itself and we\'re done.\\n\\n### Implementing `diagonal_iter`\\n\\nThis part is the hardest from all we need to do. It\'s because of the requirements\\nof the `std::sort` that requires us to implement a _random access iterator_. I have\\nbriefly described it above, and \u201cin a nutshell\u201d it means that we need to implement\\nan iterator that can move in constant time along the diagonal in any amount of\\nsteps.\\n\\nLet\'s go through all of the functionality that our iterator needs to support to\\nbe used in `std::sort`. We need the usual operations like:\\n\\n- equality/inequality\\n- incrementation\\n- dereferencing\\n\\nWe will also add all the types that our iterator uses with the category of the\\niterator, i.e. what interface it supports:\\n\\n```cpp\\nclass diagonal_iter {\\n // we need to keep reference to the matrix itself\\n matrix_t& m;\\n\\n // we need to be able to tell our current position\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n using difference_type = std::ptrdiff_t;\\n using value_type = T;\\n using pointer = T*;\\n using reference = T&;\\n using iterator_category = std::random_access_iterator_tag;\\n\\n diagonal_iter(matrix_t& matrix,\\n std::size_t x,\\n std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator==(const diagonal_iter& rhs) const\\n {\\n return x == rhs.x && y == rhs.y && m == rhs.m;\\n }\\n\\n diagonal_iter& operator++()\\n {\\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\\n // the same time\\n x++;\\n y++;\\n return *this;\\n }\\n\\n reference operator*() const { return m[y][x]; }\\n};\\n```\\n\\nThis is pretty similar to the previous iterator, but now we need to implement the\\nremaining requirements of the _random access iterator_. Let\'s see what those are:\\n\\n- decrementation - cause we need to be able to move backwards too, since _random _\\n _access iterator_ extends the interface of _bidirectional iterator_\\n- moving the iterator in either direction by steps given as an integer\\n- being able to tell the distance between two iterators\\n- define an ordering on the iterators\\n\\nLet\'s fill them in:\\n\\n```cpp\\nclass diagonal_iter {\\n // we need to keep reference to the matrix itself\\n matrix_t& m;\\n\\n // we need to be able to tell our current position\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n using difference_type = std::ptrdiff_t;\\n using value_type = T;\\n using pointer = T*;\\n using reference = T&;\\n using iterator_category = std::random_access_iterator_tag;\\n\\n diagonal_iter(matrix_t& matrix,\\n std::size_t x,\\n std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator==(const diagonal_iter& rhs) const\\n {\\n return x == rhs.x && y == rhs.y && m == rhs.m;\\n }\\n\\n diagonal_iter& operator++()\\n {\\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\\n // the same time\\n x++;\\n y++;\\n return *this;\\n }\\n\\n reference operator*() const { return m[y][x]; }\\n\\n // exactly opposite to the incrementation\\n diagonal_iter operator--()\\n {\\n x--;\\n y--;\\n return *this;\\n }\\n\\n // moving \u2039n\u203a steps back is same as calling decrementation \u2039n\u203a-times, so we\\n // can just return a new iterator and subtract \u2039n\u203a from both coordinates in\\n // the matrix\\n diagonal_iter operator-(difference_type n) const\\n {\\n return diagonal_iter { m, x - n, y - n };\\n }\\n\\n // here we assume that we are given two iterators on the same diagonal\\n difference_type operator-(const diagonal_iter& rhs) const\\n {\\n assert(m == rhs.m);\\n return x - rhs.x;\\n }\\n\\n // counterpart of moving \u2039n\u203a steps backwards\\n diagonal_iter operator+(difference_type n) const\\n {\\n return diagonal_iter { m, x + n, y + n };\\n }\\n\\n // we compare the coordinates, and also assume that those 2 iterators are\\n // lying on the same diagonal\\n bool operator<(const diagonal_iter& rhs) const\\n {\\n assert(m == rhs.m);\\n return x < rhs.x && y < rhs.y;\\n }\\n};\\n```\\n\\nAt this point we could probably try and compile it, right? If we do so, we will\\nget yelled at by a compiler for the following reasons:\\n\\n```\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type \'diagonal<int>::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n __last = __next;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization \'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>\' requested here\\n std::__unguarded_linear_insert(__i,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization \'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__insertion_sort(__first, __first + int(_S_threshold), __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization \'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__final_insertion_sort(__first, __last, __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort<diagonal<int>::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal<int>::matrix_t &\' (aka \'vector<std::vector<int>> &\')\\n matrix_t& m;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to \'__unguarded_linear_insert\' [clang-diagnostic-error]\\n std::__unguarded_linear_insert(__i,\\n ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization \'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization \'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__final_insertion_sort(__first, __last, __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort<diagonal<int>::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]\\n __unguarded_linear_insert(_RandomAccessIterator __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type \'diagonal<int>::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n __last = __cut;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization \'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__introsort_loop(__first, __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort<diagonal<int>::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal<int>::matrix_t &\' (aka \'vector<std::vector<int>> &\')\\n matrix_t& m;\\n ^\\n```\\n\\nThat\'s a lot of noise, isn\'t it? Let\'s focus on the important parts:\\n\\n```\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type \'diagonal<int>::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n\u2026\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal<int>::matrix_t &\' (aka \'vector<std::vector<int>> &\')\\n matrix_t& m;\\n ^\\n```\\n\\nAh! We have a reference in our iterator, and this prevents us from having a copy\\nassignment operator (that is used \u201csomewhere\u201d in the sorting algorithm). Well\u2026\\nLet\'s just wrap it!\\n\\n```diff\\n# we need to keep a different type than reference\\n- matrix_t& m;\\n+ std::reference_wrapper<matrix_t> m;\\n\\n# in comparison we need to get the reference out of the wrapper first\\n- return x == rhs.x && y == rhs.y && m == rhs.m;\\n+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();\\n\\n# same when we return a reference to the \u201ccell\u201d in the matrix\\n- reference operator*() const { return m[y][x]; }\\n+ reference operator*() const { return m.get()[y][x]; }\\n\\n# and finally in the assertions that we set for the \u201cdistance\u201d and \u201cless than\u201d\\n- assert(m == rhs.m);\\n+ assert(m.get() == rhs.m.get());\\n```\\n\\nWe\'re done now! We have written an iterator over diagonals for a 2D `vector`. You can have a look at the final result [here](pathname:///files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp).\\n\\n[^1]: just because I\'m used to it and don\'t care about your opinion ;)\\n[^2]: exercise at your own risk\\n[^3]: me in 5 minutes in fact, but don\'t make me scared\\n[^4]: me in the next section\u2026"},{"id":"aoc-2022/2nd-week","metadata":{"permalink":"/blog/aoc-2022/2nd-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/02-week-2.md","source":"@site/blog/aoc-2022/02-week-2.md","title":"2nd week of Advent of Code \'22 in Rust","description":"Surviving second week in Rust.","date":"2022-12-25T23:15:00.000Z","formattedDate":"December 25, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":20.875,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"2nd week of Advent of Code \'22 in Rust","description":"Surviving second week in Rust.","date":"2022-12-25T23:15","slug":"aoc-2022/2nd-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally"},"nextItem":{"title":"1st week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/1st-week"}},"content":"Let\'s go through the second week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 8: Treetop Tree House](https://adventofcode.com/2022/day/8)\\n\\n:::info tl;dr\\n\\nWe get a forest and we want to know how many trees are visible from the outside.\\nApart from that we want to find the best view.\\n\\n:::\\n\\nNothing interesting. We are moving around 2D map though. And indexing can get a\\nbit painful when doing so, let\'s refactor it a bit ;) During the preparation for\\nthe AoC, I have written `Vector2D` and now it\'s time to extend it with indexing\\nof `Vec` of `Vec`s. In my solution I was manipulating with indices in the following\\nway:\\n\\n- swapping them\\n- checking whether they are correct indices for the `Vec<Vec<T>>`\\n- indexing `Vec<Vec<T>>` with them\\n\\n:::caution\\n\\nI\'m getting familiar with Rust and starting to \u201cabuse\u201d it\u2026 While doing so, I\'m\\nalso uncovering some \u201cfeatures\u201d that I don\'t really like. Therefore I will mark\\nall of my rants with _thicc_ **\xab\u21af\xbb** mark and will try to \u201clock\u201d them into their\\nown \u201cbox of hell\u201d.\\n\\n:::\\n\\n#### Swapping indices\\n\\nRelatively simple implementation, just take the values, swap them and return new\\nvector.\\n\\n```rust\\nimpl<T: Copy> Vector2D<T> {\\n pub fn swap(&self) -> Self {\\n Self {\\n x: self.y,\\n y: self.x,\\n }\\n }\\n}\\n```\\n\\nPretty straight-forward implementation, but let\'s talk about the `T: Copy`. We\\nneed to use it, since we are returning a **new** vector, with swapped **values**.\\nIf we had values that cannot be copied, the only thing we could do, would be a\\nvector of references (and it would also introduce a lifetime, to which we\'ll get\\nlater on). This is pretty similar with the operations on sets from the first week.\\n\\n#### Indexing `Vec`\\n\\nI will start with the indexing, cause bound-checking is a bit more\u2026 complicated\\nthan I would like to.\\n\\n```rust\\npub fn index<\'a, T, U>(v: &\'a [Vec<U>], idx: &Vector2D<T>) -> &\'a U\\nwhere\\n usize: TryFrom<T>,\\n <usize as TryFrom<T>>::Error: Debug,\\n T: Copy,\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &v[y][x]\\n}\\n```\\n\\nLet\'s talk about this mess\u2026 Body of the function is probably the most easy part\\nand should not be hard to understand, we just take the `x` and `y` and convert\\nthem both to `usize` type that can be used later on for indexing.\\n\\nThe type signature of the function is where the fun is at :wink: We are trying\\nto convert unknown type to `usize`, so we must bound the `T` as a type that can\\nbe converted to `usize`, that\'s how we got `usize: TryFrom<T>` which basically\\nsays that `usize` must implement `TryFrom<T>` trait and therefore allows us to\\nconvert the indices to actual `usize` indices. Using `.unwrap()` also forces us\\nto bound the error that can occur when converting `T` into `usize`, that\'s how\\nwe get `<usize as TryFrom<T>>::Error: Debug` which loosely means\\n\\n> error during conversion of `T` into `usize` must implement `Debug`,\\n> i.e. can be printed in some way or other\\n\\n`T: Copy` is required by `.try_into()` which takes `T` by-value.\\n\\nAnd now we are left only with the first line of the definition.\\n\\n:::note\\n\\nSkilled Rustaceans might notice that this implementation is rather flaky and can\\nbreak in multiple places at once. I\'ll get back to it\u2026\\n\\n:::\\n\\nLet\'s split it in multiple parts:\\n\\n- `v: &\'a [Vec<U>]` represents the 2D `Vec`, we are indexing, `Vec` implements\\n `Slice` trait and _clippy_ recommends using `&[T]` to `&Vec<T>`, exact details\\n are unknown to me\\n- `idx: &Vector2D<T>` represents the _indices_ which we use, we take them by\\n reference to avoid an unnecessary copy\\n- `-> &\'a U` means that we are returning a _reference_ to some value of type `U`.\\n Now the question is what does the `\'a` mean, we can also see it as a generic\\n type declared along `T` and `U`. And the answer is _relatively_ simple, `\'a`\\n represents a _lifetime_. We take the `v` by a reference and return a reference,\\n borrow checker validates all of the _borrows_ (or references), so we need to\\n specify that our returned value has _the same lifetime_ as the vector we have\\n taken by a reference, i.e. returned reference must live at least as long as the\\n `v`. This way we can \u201cbe sure\u201d that the returned reference is valid.\\n\\n##### Issues\\n\\nFirst issue that our implementation has is the fact that we cannot get a mutable\\nreference out of that function. This could be easily resolved by introducing new\\nfunction, e.g. `index_mut`. Which I have actually done while writing this part:\\n\\n```rust\\npub fn index_mut<\'a, T, U>(v: &\'a mut [Vec<U>], idx: &Vector2D<T>) -> &\'a mut U\\nwhere\\n usize: TryFrom<T>,\\n <usize as TryFrom<T>>::Error: Debug,\\n T: Copy,\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &mut v[y][x]\\n}\\n```\\n\\n:::caution **\xab\u21af\xbb** Why can\'t we use one function?\\n\\nWhen we consider a `Vec<T>`, we don\'t need to consider containers as `T`, Rust\\nimplements indexing as traits `Index<T>` and `IndexMut<T>` that do the dirty work\\nbehind syntactic sugar of `container[idx]`.\\n\\nHowever, implementing of traits is not allowed for _external_ types, i.e. types\\nthat you haven\'t defined yourself. This means that you can implement indexing\\nover containers that you have implemented yourself, but you cannot use your own\\ntypes for indexing \u201cbuilt-in\u201d types.\\n\\nAnother part of this rabbit hole is trait `SliceIndex<T>` that is of a relevance\\nbecause of\\n\\n```rust\\nimpl<T, I> Index<I> for [T]\\nwhere\\n I: SliceIndex<[T]>\\n\\nimpl<T, I, A> Index<I> for Vec<T, A>\\nwhere\\n I: SliceIndex<[T]>,\\n A: Allocator\\n\\nimpl<T, I, const N: usize> Index<I> for [T; N]\\nwhere\\n [T]: Index<I>\\n```\\n\\nIn other words, if your type implements `SliceIndex<T>` trait, it can be used\\nfor indexing. As of now, this trait has all of its required methods experimental\\nand is marked as `unsafe`.\\n\\n:::\\n\\nAnother problem is a requirement for indexing either `[Vec<T>]` or `Vec<Vec<T>>`.\\nThis requirement could be countered by removing inner type `Vec<T>` and constraining\\nit by a trait `Index` (or `IndexMut` respectively) in a following way\\n\\n```rust\\npub fn index<\'a, C, T>(v: &\'a [C], idx: &Vector2D<T>) -> &\'a C::Output\\nwhere\\n usize: TryFrom<T>,\\n <usize as TryFrom<T>>::Error: Debug,\\n T: Copy,\\n C: Index<usize>\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &v[y][x]\\n}\\n```\\n\\nGiven this, we can also give a more meaningful typename for indexing type, such\\nas `I`.\\n\\n#### Checking bounds\\n\\nNow we can get to the boundary checks, it is very similar, but a more\u2026 dirty.\\nFirst approach that came up was to convert the indices in `Vector2D` to `usize`,\\nbut when you add the indices up, e.g. when checking the neighbors, you can end\\nup with negative values which, unlike in C++, causes an error (instead of underflow\\nthat you can use to your advantage; you can easily guess how).\\n\\nSo how can we approach this then? Well\u2026 we will convert the bounds instead of\\nthe indices and that lead us to:\\n\\n```rust\\npub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool\\nwhere\\n usize: TryInto<T>,\\n <usize as TryInto<T>>::Error: Debug,\\n T: PartialOrd + Copy,\\n{\\n idx.y >= 0.try_into().unwrap()\\n && idx.y < v.len().try_into().unwrap()\\n && idx.x >= 0.try_into().unwrap()\\n && idx.x\\n < v[TryInto::<usize>::try_into(idx.y).unwrap()]\\n .len()\\n .try_into()\\n .unwrap()\\n}\\n```\\n\\nYou can tell that it\'s definitely a shitty code. Let\'s improve it now! We will\\nget back to the original idea, but do it better. We know that we cannot convert\\nnegative values into `usize`, **but** we also know that conversion like that\\nreturns a `Result<T, E>` which we can use to our advantage.\\n\\n```rust\\npub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool\\nwhere\\n T: Copy,\\n usize: TryFrom<T>,\\n{\\n usize::try_from(idx.y)\\n .and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))\\n .unwrap_or(false)\\n}\\n```\\n\\n`Result<T, E>` is a type similar to `Either` in Haskell and it allows us to chain\\nmultiple operations on correct results or propagate the original error without\\ndoing anything. Let\'s dissect it one-by-one.\\n\\n`try_from` is a method implemented in `TryFrom` trait, that allows you to convert\\ntypes and either successfully convert them or fail (with a reasonable error). This\\nmethod returns `Result<T, E>`.\\n\\nWe call `and_then` on that _result_, let\'s have a look at the type signature of\\n`and_then`, IMO it explains more than enough:\\n\\n```rust\\npub fn and_then<U, F>(self, op: F) -> Result<U, E>\\nwhere\\n F: FnOnce(T) -> Result<U, E>\\n```\\n\\nOK\u2026 So it takes the result and a function and returns another result with\\ndifferent value and different error. However we can see that the function, which\\nrepresents an operation on a result, takes just the value, i.e. it doesn\'t care\\nabout any previous error. To make it short:\\n\\n> `and_then` allows us to run an operation, which can fail, on the correct result\\n\\nWe parsed a `y` index and now we try to convert the `x` index with `try_from`\\nagain, but on that result we use `map` rather than `and_then`, why would that be?\\n\\n```rust\\npub fn map<U, F>(self, op: F) -> Result<U, E>\\nwhere\\n F: FnOnce(T) -> U\\n```\\n\\nHuh\u2026 `map` performs an operation that **cannot** fail. And finally we use\\n`unwrap_or` which takes the value from result, or in case of an error returns the\\ndefault that we define.\\n\\nHow does this work then? If `y` is negative, the conversion fails and the error\\npropagates all the way to `unwrap_or`, if `y` can be a correct `usize` value, then\\nwe do the same with `x`. If `x` is negative, we propagate the error as with `y`,\\nand if it\'s not, then we check whether it exceeds the higher bounds or not.\\n\\n### Solution\\n\\nRelatively simple, you just need follow the rules and not get too smart, otherwise\\nit will get back at you.\\n\\n## [Day 9: Rope Bridge](https://adventofcode.com/2022/day/9)\\n\\n:::info tl;dr\\n\\nWe get a rope with knots and we want to track how many different positions are\\nvisited with the rope\'s tail.\\n\\n:::\\n\\nBy this day, I have come to a conclusion that current skeleton for each day\\ngenerates a lot of boilerplate. And even though it can be easily copied, it\'s\\njust a waste of space and unnecessary code. Let\'s \u201csimplify\u201d this (on one end\\nwhile creating monster on the other end). I\'ve gone through what we need in the\\npreparations for the AoC. Let\'s sum up our requirements:\\n\\n- parsing\\n- part 1 & 2\\n- running on sample / input\\n- tests\\n\\nParsing and implementation of both parts is code that changes each day and we\\ncannot do anything about it. However running and testing can be simplified!\\n\\nLet\'s introduce and export a new module `solution` that will take care of all of\\nthis. We will start by introducing a trait for each day.\\n\\n```rust\\npub trait Solution<Input, Output: Display> {\\n fn parse_input<P: AsRef<Path>>(pathname: P) -> Input;\\n\\n fn part_1(input: &Input) -> Output;\\n fn part_2(input: &Input) -> Output;\\n}\\n```\\n\\nThis does a lot of work for us already, we have defined a trait and for each day\\nwe will create a structure representing a specific day. That structure will also\\nimplement the `Solution` trait.\\n\\nNow we need to get rid of the boilerplate, we can\'t get rid of the `main` function,\\nbut we can at least move out the functionality.\\n\\n```rust\\nfn run(type_of_input: &str) -> Result<()>\\nwhere\\n Self: Sized,\\n{\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = Self::parse_input(format!(\\"{}s/{}.txt\\", type_of_input, Self::day()));\\n\\n info!(\\"Part 1: {}\\", Self::part_1(&input));\\n info!(\\"Part 2: {}\\", Self::part_2(&input));\\n\\n Ok(())\\n}\\n\\nfn main() -> Result<()>\\nwhere\\n Self: Sized,\\n{\\n Self::run(\\"input\\")\\n}\\n```\\n\\nThis is all part of the `Solution` trait, which can implement methods while being\\ndependent on what is provided by the implementing types. In this case, we just\\nneed to bound the `Output` type to implement `Display` that is necessary for the\\n`info!` and format string there.\\n\\nNow we can get to first of the nasty things we are going to do\u2026 And it is the\\n`day()` method that you can see being used when constructing path to the input\\nfile. That method will generate a name of the file, e.g. `day01` and we know that\\nwe can _somehow_ deduce it from the structure name, given we name it reasonably.\\n\\n```rust\\nfn day() -> String {\\n let mut day = String::from(type_name::<Self>().split(\\"::\\").next().unwrap());\\n day.make_ascii_lowercase();\\n\\n day.to_string()\\n}\\n```\\n\\n:::caution `type_name`\\n\\nThis feature is still experimental and considered to be internal, it is not\\nadvised to use it any production code.\\n\\n:::\\n\\nAnd now we can get to the nastiest stuff :weary: We will **generate** the tests!\\n\\nWe want to be able to generate tests for sample input in a following way:\\n\\n```rust\\ntest_sample!(day_01, Day01, 42, 69);\\n```\\n\\nThere\'s not much we can do, so we will write a macro to generate the tests for us.\\n\\n```rust\\n#[macro_export]\\nmacro_rules! test_sample {\\n ($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {\\n #[cfg(test)]\\n mod $mod_name {\\n use super::*;\\n\\n #[test]\\n fn test_part_1() {\\n let sample =\\n $day_struct::parse_input(&format!(\\"samples/{}.txt\\", $day_struct::day()));\\n assert_eq!($day_struct::part_1(&sample), $part_1);\\n }\\n\\n #[test]\\n fn test_part_2() {\\n let sample =\\n $day_struct::parse_input(&format!(\\"samples/{}.txt\\", $day_struct::day()));\\n assert_eq!($day_struct::part_2(&sample), $part_2);\\n }\\n }\\n };\\n}\\n```\\n\\nWe have used it in a similar way as macros in C/C++, one of the things that we\\ncan use to our advantage is defining \u201ctype\u201d of the parameters for the macro. All\\nparameters have their name prefixed with `$` sign and you can define various \u201cforms\u201d\\nof your macro. Let\'s go through it!\\n\\nWe have following parameters:\\n\\n- `$mod_name` which represents the name for the module with tests, it is typed\\n with `ident` which means that we want a valid identifier to be passed in.\\n- `$day_struct` represents the structure that will be used for tests, it is typed\\n with `tt` which represents a _token tree_, in our case it is a type.\\n- `$part_X` represents the expected output for the `X`th part and is of type `expr`\\n which literally means an _expression_.\\n\\nApart from that we need to use `#[macro_export]` to mark the macro as exported\\nfor usage outside of the module. Now our skeleton looks like:\\n\\n```rust\\nuse aoc_2022::*;\\n\\ntype Input = String;\\ntype Output = String;\\n\\nstruct DayXX;\\nimpl Solution<Input, Output> for DayXX {\\n fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {\\n file_to_string(pathname)\\n }\\n\\n fn part_1(input: &Input) -> Output {\\n todo!()\\n }\\n\\n fn part_2(input: &Input) -> Output {\\n todo!()\\n }\\n}\\n\\nfn main() -> Result<()> {\\n // DayXX::run(\\"sample\\")\\n DayXX::main()\\n}\\n\\n// test_sample!(day_XX, DayXX, , );\\n```\\n\\n### Solution\\n\\nNot much to talk about, it is relatively easy to simulate.\\n\\n## [Day 10: Cathode-Ray Tube](https://adventofcode.com/2022/day/10)\\n\\n:::info tl;dr\\n\\nEmulating basic arithmetic operations on a CPU and drawing on CRT based on the\\nCPU\'s accumulator.\\n\\n:::\\n\\nIn this day I have discovered an issue with my design of the `Solution` trait.\\nAnd the issue is caused by different types of `Output` for the part 1 and part 2.\\n\\nProblem is relatively simple and consists of simulating a CPU, I have approached\\nit in a following way:\\n\\n```rust\\nfn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {\\n instructions\\n .iter()\\n .fold(State::new(), |state, instruction| {\\n state.execute(instruction, &mut out)\\n });\\n\\n out\\n}\\n```\\n\\nWe just take the instructions, we have some state of the CPU and we execute the\\ninstructions one-by-one. Perfect usage of the `fold` (or `reduce` as you may know\\nit from other languages).\\n\\nYou can also see that we have an `Output` type, so the question is how can we fix\\nthat problem. And the answer is very simple and _functional_. Rust allows you to\\nhave an `enumeration` that can _bear_ some other values apart from the type itself.\\n\\n:::tip\\n\\nWe could\'ve seen something like this with the `Result<T, E>` type that can be\\ndefined as\\n\\n```rust\\nenum Result<T, E> {\\n Ok(T),\\n Err(E)\\n}\\n```\\n\\n###### What does that mean though?\\n\\nWhen we have an `Ok` value, it has the result itself, and when we get an `Err`\\nvalue, it has the error. This also allows us to handle _results_ in a rather\\npretty way:\\n\\n```rust\\nmatch do_something(x) {\\n Ok(y) => {\\n println!(\\"SUCCESS: {}\\", y);\\n },\\n Err(y) => {\\n eprintln!(\\"ERROR: {}\\", y);\\n }\\n}\\n```\\n\\n:::\\n\\nMy solution has a following outline:\\n\\n```rust\\nfn execute(&self, i: &Instruction, output: &mut Output) -> State {\\n // execute the instruction\\n\\n // collect results if necessary\\n match output {\\n Output::Part1(x) => self.execute_part_1(y, x),\\n Output::Part2(x) => self.execute_part_2(y, x),\\n }\\n\\n // return the obtained state\\n new_state\\n}\\n```\\n\\nYou might think that it\'s a perfectly reasonable thing to do. Yes, **but** notice\\nthat the `match` statement doesn\'t _collect_ the changes in any way and also we\\npass `output` by `&mut`, so it is shared across each _iteration_ of the `fold`.\\n\\nThe dirty and ingenious thing is that `x`s are passed by `&mut` too and therefore\\nthey are directly modified by the helper functions. To sum it up and let it sit\\n\\n> We are **collecting** the result **into** an **enumeration** that is **shared**\\n> across **all** iterations of `fold`.\\n\\n### Solution\\n\\nSimilar to _Day 9_, but there are some technical details that can get you.\\n\\n## [Day 11: Monkey in the Middle](https://adventofcode.com/2022/day/11)\\n\\n:::info tl;dr\\n\\nSimulation of monkeys throwing stuff around and measuring your stress levels\\nwhile your stuff is being passed around.\\n\\n:::\\n\\nI think I decided to use regular expressions here for the first time, cause\\nparsing the input was a pain.\\n\\nAlso I didn\'t expect to implement Euclidean algorithm in Rust\u2026\\n\\n### Solution\\n\\nAgain, we\'re just running a simulation. Though I must admit it was very easy to\\nmake a small technical mistakes that could affect the final results very late.\\n\\n## [Day 12: Hill Climbing Algorithm](https://adventofcode.com/2022/day/12)\\n\\n:::info tl;dr\\n\\nFinding shortest path up the hill and also shortest path down to the ground while\\nalso rolling down the hill\u2026\\n\\n:::\\n\\nAs I have said in the _tl;dr_, we are looking for the shortest path, but the start\\nand goal differ for the part 1 and 2. So I have decided to refactor my solution\\nto a BFS algorithm that takes necessary parameters via functions:\\n\\n```rust\\nfn bfs<F, G>(\\n graph: &[Vec<char>], start: &Position, has_edge: F, is_target: G\\n) -> Option<usize>\\nwhere\\n F: Fn(&[Vec<char>], &Position, &Position) -> bool,\\n G: Fn(&[Vec<char>], &Position) -> bool\\n```\\n\\nWe pass the initial vertex from the caller and everything else is left to the BFS\\nalgorithm, based on the `has_edge` and `is_target` functions.\\n\\nThis was easy! And that is not very usual in Rust once you want to pass around\\nfunctions. :eyes:\\n\\n### Solution\\n\\nLooking for the shortest path\u2026 Must be Dijkstra, right? **Nope!** Half of the\\nReddit got jebaited though. In all fairness, nothing stops you from implementing\\nthe Dijkstra\'s algorithm for finding the shortest path, **but** if you know that\\nall connected vertices are in a unit (actually $d = 1$) distance from each other,\\nthen you know that running Dijkstra is equivalent to running BFS, only with worse\\ntime complexity, because of the priority heap instead of the queue.\\n\\n## [Day 13: Distress Signal](https://adventofcode.com/2022/day/13)\\n\\n:::info tl;dr\\n\\nProcessing packets with structured data from the distress signal.\\n\\n:::\\n\\nYou can implement a lot of traits if you want to. It is _imperative_ to implement\\nordering on the packets. I had a typo, so I also proceeded to implement a `Display`\\ntrait for debugging purposes:\\n\\n```rust\\nimpl Display for Packet {\\n fn fmt(&self, f: &mut std::fmt::Formatter<\'_>) -> std::fmt::Result {\\n match self {\\n Packet::Integer(x) => write!(f, \\"{x}\\"),\\n Packet::List(lst) => write!(f, \\"[{}]\\", lst.iter().map(|p| format!(\\"{p}\\")).join(\\",\\")),\\n }\\n }\\n}\\n```\\n\\n### Solution\\n\\nA lot of technical details\u2026 Parsing is nasty too\u2026\\n\\n## [Day 14: Regolith Reservoir](https://adventofcode.com/2022/day/14)\\n\\n:::info tl;dr\\n\\nLet\'s simulate falling sand grain-by-grain.\\n\\n:::\\n\\nAgain, both parts are relatively similar with minimal changes, so it is a good\\nidea to refactor it a bit. Similar approach to the [BFS above]. Also this is the\\nfirst day where I ran into efficiency issues and had to redo my solution to speed\\nit up just a bit.\\n\\n### Solution\\n\\nTedious.\\n\\n## Post Mortem\\n\\n### Indexing\\n\\nI was asked about the indexing after publishing the blog. And truly it is rather\\ncomplicated topic, especially after releasing `SliceIndex<I>` trait. I couldn\'t\\nleave it be, so I tried to implement the `Index` and `IndexMut` trait.\\n\\n:::note\\n\\nI have also mentioned that the `SliceIndex` trait is `unsafe`, but truth be told,\\nonly _unsafe_ part are the 2 methods that are named `*unchecked*`. Anyways, I will\\nbe implementing the `Index*` traits for now, rather than the `SliceIndex`.\\n\\n:::\\n\\nIt\'s relatively straightforward\u2026\\n\\n```rust\\nimpl<I, C> Index<Vector2D<I>> for [C]\\nwhere\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: Index<usize>,\\n{\\n type Output = C::Output;\\n\\n fn index(&self, index: Vector2D<I>) -> &Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &self[y][x]\\n }\\n}\\n\\nimpl<I, C> IndexMut<Vector2D<I>> for [C]\\nwhere\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: IndexMut<usize>,\\n{\\n fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &mut self[y][x]\\n }\\n}\\n```\\n\\nWe can see a lot of similarities to the implementation of `index` and `index_mut`\\nfunctions. In the end, they are 1:1, just wrapped in the trait that provides a\\nsyntax sugar for `container[idx]`.\\n\\n:::note\\n\\nI have also switched from using the `TryFrom` to `TryInto` trait, since it better\\nmatches what we are using, the `.try_into` rather than `usize::try_from`.\\n\\nAlso implementing `TryFrom` automatically provides you with a `TryInto` trait,\\nsince it is relatively easy to implement. Just compare the following:\\n\\n```rust\\npub trait TryFrom<T>: Sized {\\n type Error;\\n\\n fn try_from(value: T) -> Result<Self, Self::Error>;\\n}\\n\\npub trait TryInto<T>: Sized {\\n type Error;\\n\\n fn try_into(self) -> Result<T, Self::Error>;\\n}\\n```\\n\\n:::\\n\\nOK, so we have our trait implemented, we should be able to use `container[index]`,\\nright? Yes\u2026 but actually no :frowning:\\n\\n```\\nerror[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`\\n --\x3e src/bin/day08.rs:26:18\\n |\\n26 | if trees[pos] > tallest {\\n | ^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`\\n = note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`\\n\\nerror[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`\\n --\x3e src/bin/day08.rs:30:28\\n |\\n30 | max(tallest, trees[pos])\\n | ^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`\\n = note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`\\n\\nerror[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<isize>`\\n --\x3e src/bin/day08.rs:52:28\\n |\\n52 | let max_height = trees[position];\\n | ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<isize>`\\n = note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<isize>>`\\n```\\n\\nWhy? We have it implemented for the slices (`[C]`), why doesn\'t it work? Well,\\nthe fun part consists of the fact that in other place, where we were using it,\\nwe were passing the `&[Vec<T>]`, but this is coming from a helper functions that\\ntake `&Vec<Vec<T>>` instead. And\u2026 we don\'t implement `Index` and `IndexMut` for\\nthose. Just for the slices. \ud83e\udd2f _What are we going to do about it?_\\n\\nWe can either start copy-pasting or be smarter about it\u2026 I choose to be smarter,\\nso let\'s implement a macro! The only difference across the implementations are\\nthe types of the outer containers. Implementation doesn\'t differ **at all**!\\n\\nImplementing the macro can be done in a following way:\\n\\n```rust\\nmacro_rules! generate_indices {\\n ($container:ty) => {\\n impl<I, C> Index<Vector2D<I>> for $container\\n where\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: Index<usize>,\\n {\\n type Output = C::Output;\\n\\n fn index(&self, index: Vector2D<I>) -> &Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &self[y][x]\\n }\\n }\\n\\n impl<I, C> IndexMut<Vector2D<I>> for $container\\n where\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: IndexMut<usize>,\\n {\\n fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &mut self[y][x]\\n }\\n }\\n };\\n}\\n```\\n\\nAnd now we can simply do\\n\\n```rust\\ngenerate_indices!(VecDeque<C>);\\ngenerate_indices!([C]);\\ngenerate_indices!(Vec<C>);\\n// generate_indices!([C; N], const N: usize);\\n```\\n\\nThe last type (I took the inspiration from the implementations of the `Index` and\\n`IndexMut` traits) is a bit problematic, because of the `const N: usize` part,\\nwhich I haven\'t managed to be able to parse. And that\'s how I got rid of the error.\\n\\n:::note\\n\\nIf I were to use 2D-indexing over `[C; N]` slices, I\'d probably just go with the\\ncopy-paste, cause the cost of this \u201cmonstrosity\u201d outweighs the benefits of no DRY.\\n\\n:::\\n\\n#### Cause of the problem\\n\\nThis issue is relatively funny. If you don\'t use any type aliases, just the raw\\ntypes, you\'ll get suggested certain changes by the _clippy_. For example if you\\nconsider the following piece of code\\n\\n```rust\\nfn get_sum(nums: &Vec<i32>) -> i32 {\\n nums.iter().sum()\\n}\\n\\nfn main() {\\n let nums = vec![1, 2, 3];\\n println!(\\"Sum: {}\\", get_sum(&nums));\\n}\\n```\\n\\nand you run _clippy_ on it, you will get\\n\\n```\\nChecking playground v0.0.1 (/playground)\\nwarning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do\\n --\x3e src/main.rs:1:18\\n |\\n1 | fn get_sum(nums: &Vec<i32>) -> i32 {\\n | ^^^^^^^^^ help: change this to: `&[i32]`\\n |\\n = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg\\n = note: `#[warn(clippy::ptr_arg)]` on by default\\n\\nwarning: `playground` (bin \\"playground\\") generated 1 warning\\n Finished dev [unoptimized + debuginfo] target(s) in 0.61s\\n```\\n\\nHowever, if you introduce a type alias, such as\\n\\n```rust\\ntype Numbers = Vec<i32>;\\n```\\n\\nThen _clippy_ won\'t say anything, cause there is literally nothing to suggest.\\nHowever the outcome is not the same\u2026\\n\\n[_advent of code_]: https://adventofcode.com\\n[bfs above]: #day-12-hill-climbing-algorithm"},{"id":"aoc-2022/1st-week","metadata":{"permalink":"/blog/aoc-2022/1st-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/01-week-1.md","source":"@site/blog/aoc-2022/01-week-1.md","title":"1st week of Advent of Code \'22 in Rust","description":"Surviving first week in Rust.","date":"2022-12-15T01:15:00.000Z","formattedDate":"December 15, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":12.4,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"1st week of Advent of Code \'22 in Rust","description":"Surviving first week in Rust.","date":"2022-12-15T01:15","slug":"aoc-2022/1st-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week"},"nextItem":{"title":"Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/intro"}},"content":"Let\'s go through the first week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n:::note\\n\\nIf you wish to have a look at the solutions, you can follow them on my [GitLab].\\nMore specifically in the [`/src/bin/`].\\n\\n:::\\n\\nI will try to summarize my experience with using Rust for the AoC. Trying it out\\nages ago, I believe it will be _pain and suffering_, but we will see. For each\\nday I will also try to give a tl;dr of the problem, so that you can better imagine\\nthe relation to my woes or :+1: moments.\\n\\n## [Day 1: Calorie Counting](https://adventofcode.com/2022/day/1)\\n\\n:::info tl;dr\\n\\nAs the name suggests, we get the calories of the food contained in the elves\\nbackpacks and we want to choose the elf that has the most food ;)\\n\\n:::\\n\\n> Wakey wakey!\\n\\nProgramming in Rust at 6am definitely hits. I\'ve also forgotten to mention how I\\nhandle samples. With each puzzle you usually get a sample input and expected\\noutput. You can use them to verify that your solution works, or usually doesn\'t.\\n\\nAt first I\'ve decided to put asserts into my `main`, something like\\n\\n```rust\\nassert_eq!(part_1(&sample), 24000);\\ninfo!(\\"Part 1: {}\\", part_1(&input));\\n\\nassert_eq!(part_2(&sample), 45000);\\ninfo!(\\"Part 2: {}\\", part_2(&input));\\n```\\n\\nHowever, once you get further, the sample input may take some time to run itself.\\nSo in the end, I have decided to turn them into unit tests:\\n\\n```rust\\n#[cfg(test)]\\nmod tests {\\n use super::*;\\n\\n #[test]\\n fn test_part_1() {\\n let sample = parse_input(\\"samples/day01.txt\\");\\n assert_eq!(part_1(&sample), 24000);\\n }\\n\\n #[test]\\n fn test_part_2() {\\n let sample = parse_input(\\"samples/day01.txt\\");\\n assert_eq!(part_2(&sample), 45000);\\n }\\n}\\n```\\n\\nAnd later on I have noticed, it\'s hard to tell the difference between the days,\\nso I further renamed the `mod` from generic `tests` to reflect the days.\\n\\nAlso after finishing the first day puzzle, I have installed an [`sccache`] to\\ncache the builds, so that the build time is lower, cause it was kinda unbearable.\\n\\n### Solution\\n\\nWell, it\'s a pretty simple problem. You just take the input, sum the calories and\\nfind the biggest one. However, if we try to generalize to more than the biggest\\none, the fun appears. We have few options:\\n\\n- keep all the calories, sort them, take what we need\\n- keep all the calories and use max heap\\n- use min heap and maintain at most N calories that we need\\n\\n## [Day 2: Rock Paper Scissors](https://adventofcode.com/2022/day/2)\\n\\n:::info tl;dr\\n\\nYou want to know what score did you achieve while playing _Rock Paper Scissors_.\\nAnd then you want to be strategic about it.\\n\\n:::\\n\\nApart from the technical details of the puzzle, it went relatively smooth.\\n\\n### Solution\\n\\nI took relatively na\xefve approach and then tried to simplify it.\\n\\n## [Day 3: Rucksack Reorganization](https://adventofcode.com/2022/day/3)\\n\\n:::info tl;dr\\n\\nLet\'s go reorganize elves\' backpacks! Each backpacks has 2 compartments and you\\nwant to find the common item among those compartments. Each of them has priority,\\nyou care only about the sum.\\n\\n:::\\n\\nThis is the day where I started to fight the compiler and neither of us decided\\nto give up. Let\'s dive into it \\\\o/\\n\\n:::tip Fun fact\\n\\nFighting the compiler took me 30 minutes.\\n\\n:::\\n\\nWe need to find a common item among 2 collections, that\'s an easy task, right?\\nWe can construct 2 sets and find an intersection:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3].iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5].iter().collect();\\n```\\n\\nNow, the first issue that we encounter is caused by the fact that we are using\\na slice (the `[\u2026]`), iterator of that returns **references** to the numbers.\\nAnd we get immediately yelled at by the compiler, because the numbers are discarded\\nafter running the `.collect`. To fix this, we can use `.into_iter`:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5].into_iter().collect();\\n```\\n\\nThis way the numbers will get copied instead of referenced. OK, let\'s find the\\nintersection of those 2 collections:\\n\\n```rust\\nprintln!(\\"Common elements: {:?}\\", top.intersection(&bottom));\\n```\\n\\n```\\nCommon elements: [3]\\n```\\n\\n:::caution\\n\\nNotice that we need to do `&bottom`. It explicitly specifies that `.intersection`\\n**borrows** the `bottom`, i.e. takes an immutable reference to it.\\n\\n:::\\n\\nThat\'s what we want, right? Looks like it! \\\\o/\\n\\nNext part wants us to find the common element among all of the backpacks. OK, so\\nthat should be fairly easy, we have an intersection and we want to find intersection\\nover all of them.\\n\\nLet\'s have a look at the type of the `.intersection`\\n\\n```rust\\npub fn intersection<\'a>(\\n\xa0\xa0\xa0\xa0&\'a self,\\n\xa0\xa0\xa0\xa0other: &\'a HashSet<T, S>\\n) -> Intersection<\'a, T, S>\\n```\\n\\nOK\u2026 Huh\u2026 But we have an example there!\\n\\n```rust\\nlet intersection: HashSet<_> = a.intersection(&b).collect();\\n```\\n\\nCool, that\'s all we need.\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n\\n```\\nIntersection: {3, 4}\\n```\\n\\nCool, so let\'s do the intersection with the `top_2`:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\\nlet intersection: HashSet<_> = intersection.intersection(&top_2).collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n\\nAnd we get yelled at by the compiler:\\n\\n```\\nerror[E0308]: mismatched types\\n --\x3e src/main.rs:10:58\\n |\\n10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();\\n | ------------ ^^^^^^ expected `&i32`, found `i32`\\n | |\\n | arguments to this function are incorrect\\n |\\n = note: expected reference `&HashSet<&i32>`\\n found reference `&HashSet<i32>`\\n```\\n\\n/o\\\\ What the hell is going on here? Well, the funny thing is, that this operation\\ndoesn\'t return the elements themselves, but the references to them and when we pass\\nthe third set, it has just the values themselves, without any references.\\n\\n:::tip\\n\\nIt may seem as a very weird decision, but in fact it makes some sense\u2026 It allows\\nyou to do intersection of items that may not be possible to copy. Overall this is\\na \u201ctax\u201d for having a borrow checker ~~drilling your ass~~ having your back and\\nmaking sure you\'re not doing something naughty that may cause an **undefined**\\n**behavior**.\\n\\n:::\\n\\nTo resolve this we need to get an iterator that **clones** the elements:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();\\nlet intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();\\nlet intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n\\n```\\nIntersection: {4}\\n```\\n\\n### Solution\\n\\nThe approach is pretty simple, if you omit the _1on1 with the compiler_. You just\\nhave some fun with the set operations :)\\n\\n## [Day 4: Camp Cleanup](https://adventofcode.com/2022/day/4)\\n\\n:::info tl;dr\\n\\nElves are cleaning up the camp and they got overlapping sections to clean up.\\nFind how many overlap and can take the day off.\\n\\n:::\\n\\n[`RangeInclusive`] is your friend not an enemy :)\\n\\n### Solution\\n\\nRelatively easy, you just need to parse the input and know what you want. Rust\'s\\n`RangeInclusive` type helped a lot, cause it took care of all abstractions.\\n\\n## [Day 5: Supply Stacks](https://adventofcode.com/2022/day/5)\\n\\n:::info tl;dr\\n\\nLet\'s play with stacks of crates.\\n\\n:::\\n\\nVery easy problem with very annoying input. You can judge yourself:\\n\\n```\\n [D]\\n[N] [C]\\n[Z] [M] [P]\\n 1 2 3\\n\\nmove 1 from 2 to 1\\nmove 3 from 1 to 3\\nmove 2 from 2 to 1\\nmove 1 from 1 to 2\\n```\\n\\nGood luck transforming that into something reasonable :)\\n\\n:::tip Fun fact\\n\\nTook me 40 minutes to parse this reasonably, including fighting the compiler.\\n\\n:::\\n\\n### Solution\\n\\nFor the initial solution I went with a manual solution (as in _I have done all_\\n_the work_. Later on I have decided to explore the `std` and interface of the\\n`std::vec::Vec` and found [`split_off`] which takes an index and splits (duh)\\nthe vector:\\n\\n```rust\\nlet mut vec = vec![1, 2, 3];\\nlet vec2 = vec.split_off(1);\\nassert_eq!(vec, [1]);\\nassert_eq!(vec2, [2, 3]);\\n```\\n\\nThis helped me simplify my solution a lot and also get rid of some _edge cases_.\\n\\n## [Day 6: Tuning Trouble](https://adventofcode.com/2022/day/6)\\n\\n:::info tl;dr\\n\\nFinding start of the message in a very weird protocol. Start of the message is\\ndenoted by $N$ unique consecutive characters.\\n\\n:::\\n\\n### Solution\\n\\nA lot of different approaches, knowing that we are dealing with input consisting\\nsolely of ASCII letters, I bit the bullet and went with sliding window and\\nconstructing sets from that window, checking if the set is as big as the window.\\n\\nOne possible optimization could consist of keeping a bit-vector (i.e. `usize`\\nvariable) of encountered characters and updating it as we go. However this has\\na different issue and that is removal of the characters from the left side of the\\nwindow. We don\'t know if the same character is not included later on.\\n\\nOther option is to do similar thing, but keeping the frequencies of the letters,\\nand again knowing we have only ASCII letters we can optimize by having a vector\\nof 26 elements that keeps count for each lowercase letter.\\n\\n## [Day 7: No Space Left On Device](https://adventofcode.com/2022/day/7)\\n\\n:::info tl;dr\\n\\nLet\'s simulate [`du`] to get some stats about our file system and then pinpoint\\ndirectories that take a lot of space and should be deleted.\\n\\n:::\\n\\n> I was waiting for this moment, and yet it got me!\\n> _imagine me swearing for hours_\\n\\n### Solution\\n\\nWe need to \u201c_build_\u201d a file system from the input that is given in a following form:\\n\\n```\\n$ cd /\\n$ ls\\ndir a\\n14848514 b.txt\\n8504156 c.dat\\ndir d\\n$ cd a\\n$ ls\\ndir e\\n29116 f\\n2557 g\\n62596 h.lst\\n$ cd e\\n$ ls\\n584 i\\n$ cd ..\\n$ cd ..\\n$ cd d\\n$ ls\\n4060174 j\\n8033020 d.log\\n5626152 d.ext\\n7214296 k\\n```\\n\\nThere are few ways in which you can achieve this and also you can assume some\\npreconditions, but why would we do that, right? :)\\n\\nYou can \u201cslap\u201d this in either [`HashMap`] or [`BTreeMap`] and call it a day.\\nAnd that would be boring\u2026\\n\\n:::tip\\n\\n`BTreeMap` is quite fitting for this, don\'t you think?\\n\\n:::\\n\\nI always wanted to try allocation on heap in Rust, so I chose to implement a tree.\\nI fought with the `Box<T>` for some time and was losing\u2026\\n\\nThen I looked up some implementations of trees or linked lists and decided to try\\n`Rc<Cell<T>>`. And I got my _ass whopped_ by the compiler once again. /o\\\\\\n\\n:::tip\\n\\n`Box<T>` represents a dynamically allocated memory on heap. It is a single pointer,\\nyou can imagine this as `std::unique_ptr<T>` in C++.\\n\\n`Rc<T>` represents a dynamically allocated memory on heap. On top of that it is\\n_reference counted_ (that\'s what the `Rc` stands for). You can imagine this as\\n`std::shared_ptr<T>` in C++.\\n\\nNow the fun stuff. Neither of them lets you **mutate** the contents of the memory.\\n\\n`Cell<T>` allows you to mutate the memory. Can be used reasonably with types that\\ncan be copied, because the memory safety is guaranteed by copying the contents\\nwhen there is more than one **mutable** reference to the memory.\\n\\n`RefCell<T>` is similar to the `Cell<T>`, but the borrowing rules (how many mutable\\nreferences are present) are checked dynamically.\\n\\nSo in the end, if you want something like `std::shared_ptr<T>` in Rust, you want\\nto have `Rc<RefCell<T>>`.\\n\\n:::\\n\\nSo, how are we going to represent the file system then? We will use an enumeration,\\nhehe, which is an algebraic data type that can store some stuff in itself :weary:\\n\\n```rust\\ntype FileHandle = Rc<RefCell<AocFile>>;\\n\\n#[derive(Debug)]\\nenum AocFile {\\n File(usize),\\n Directory(BTreeMap<String, FileHandle>),\\n}\\n```\\n\\nLet\'s go over it! `FileHandle` represents dynamically allocated `AocFile`, not\\nmuch to discuss. What does the `#[derive(Debug)]` do though? It lets us to print\\nout the value of that enumeration, it\'s derived, so it\'s not as good as if we had\\nimplemented it ourselves, but it\'s good enough for debugging, hence the name.\\n\\nNow to the fun part! `AocFile` value can be represented in two ways:\\n\\n- `File(usize)`, e.g. `AocFile::File(123)` and we can pattern match it, if we\\n need to\\n- `Directory(BTreeMap<String, FileHandle>)` will represent the directory and will\\n contain map matching the name of the files (or directories) within to their\\n respective file handles\\n\\nI will omit the details about constructing this file system, cause there are a lot\\nof technicalities introduced by the nature of the input. However if you are\\ninterested, you can have a look at my solution.\\n\\nWe need to find small enough directories and also find the smallest directory that\\nwill free enough space. Now the question is, how could we do that. And there are\\nmultiple ways I will describe.\\n\\nI have chosen to implement [_tree catamorphism_] :weary:. It is basically a fold\\nover a tree data structure. We descent down into the leaves and propagate computed\\nresults all the way to the root. You can also notice that this approach is very\\nsimilar to _dynamic programming_, we find overlapping sections of the computation\\nand try to minimize the additional work (in this case: we need to know sizes of\\nour descendants, but we have already been there).\\n\\nAnother approach that has been suggested to me few days later is running DFS on\\nthe graph. And, funnily enough, we would still need to combine what we found in\\nthe branches where we descent. So in the end, it would work very similarly to my\\nsolution.\\n\\nOne of the more exotic options would be precomputing the required information at\\nthe same time as parsing. That could be done by adding additional fields to the\\nnodes which would allow storing such information and updating it as we construct\\nthe file system.\\n\\n## Post Mortem\\n\\nThings that have been brought up in the discussion later on.\\n\\n### `Rc<T>` vs `Rc<RefCell<T>>`\\n\\nIt has been brought up that I have a contradicting statement regarding the\\ndynamically allocated memory. Specifically:\\n\\n- You can imagine `Rc<T>` as an `std::shared_ptr<T>` (in C++)\\n- When you want an equivalent of `std::shared_ptr<T>`, you want to use\\n `Rc<RefCell<T>>`\\n\\nNow, in Rust it is a bit more complicated, because the type that represents the\\n\u201cshared pointer\u201d is `Rc<T>`. What `RefCell<T>` does is making sure that there is\\nonly one \u201cowner\u201d of a mutable reference at a time (and dynamically, as opposed\\nto the `Cell<T>`).\\n\\nTherefore to be precise and correct about the equivalents of `std::shared_ptr<T>`\\nin Rust, we can say that\\n\\n- `Rc<T>` is an equivalent of a `const std::shared_ptr<T>`,\\n- and `Rc<RefCell<T>>` is an equivalent of a `std::shared_ptr<T>`.\\n\\nYou can easily see that they only differ in the mutability. (And even that is not\\nas simple as it seems, because there is also `Cell<T>`)\\n\\n[_advent of code_]: https://adventofcode.com\\n[gitlab]: https://gitlab.com/mfocko/advent-of-code-2022\\n[`/src/bin/`]: https://gitlab.com/mfocko/advent-of-code-2022/-/tree/main/src/bin\\n[`sccache`]: https://github.com/mozilla/sccache\\n[`rangeinclusive`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html\\n[`split_off`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.split_off\\n[`du`]: https://www.man7.org/linux/man-pages/man1/du.1.html\\n[`hashmap`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html\\n[`btreemap`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html\\n[_tree catamorphism_]: https://en.wikipedia.org/wiki/Catamorphism#Tree_fold"},{"id":"aoc-2022/intro","metadata":{"permalink":"/blog/aoc-2022/intro","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/00-intro.md","source":"@site/blog/aoc-2022/00-intro.md","title":"Advent of Code \'22 in Rust","description":"Preparing for Advent of Code \'22.","date":"2022-12-14T21:45:00.000Z","formattedDate":"December 14, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":8.665,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"Advent of Code \'22 in Rust","description":"Preparing for Advent of Code \'22.","date":"2022-12-14T21:45","slug":"aoc-2022/intro","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"1st week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/1st-week"}},"content":"Let\'s talk about the preparations for this year\'s [_Advent of Code_].\\n\\n\x3c!--truncate--\x3e\\n\\n## Choosing a language\\n\\nWhen choosing a language for AoC, you usually want a language that gives you a\\nquick feedback which allows you to iterate quickly to the solution of the puzzle.\\nOne of the most common choices is Python, many people also use JavaScript or Ruby.\\n\\nGiven the competitive nature of the AoC and popularity among competitive programming,\\nC++ might be also a very good choice. Only if you are familiar with it, I guess\u2026\\n\\nIf you want a challenge, you might also choose to rotate the languages each day.\\nThough I prefer to use only one language.\\n\\nFor this year I have been deciding between _Rust_, _C++_ and _Pascal_ or _Ada_.\\n\\nI have tried Rust last year and have survived with it for 3 days and then gave\\nup and switched to _Kotlin_, which was pretty good given it is \u201cJava undercover\u201d.\\nI pretty much like the ideas behind Rust, I am not sure about the whole cult and\\nimplementation of those ideas though. After some years with C/C++, I would say\\nthat Rust feels _too safe_ for my taste and tries to \u201c_punish me_\u201d even for the\\nmost trivial things.\\n\\nC++ is a very robust, but also comes with a wide variety of options providing you\\nthe ability to shoot yourself in the leg. I have tried to solve few days of previous\\nAdvent of Code events, it was _relatively easy_ to solve the problems in C++, given\\nthat I do not admit writing my own iterator for `enumerate`\u2026\\n\\nPascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a\\npretty nice standard library that offers enough to be able to quickly solve some\\nproblems in it. However the toolkit is questionable :/\\n\\n## Choosing libraries\\n\\n## Preparations for Rust\\n\\nAll of the sources, later on including solutions, can be found at my\\n[GitLab].\\n\\n### Toolkit\\n\\nSince we are using Rust, we are going to use a [Cargo] and more than likely VSCode\\nwith [`rust-analyzer`]. Because of my choice of libraries, we will also introduce\\na `.envrc` file that can be used by [`direnv`], which allows you to set specific\\nenvironment variables when you enter a directory. In our case, we will use\\n\\n```bash\\n# to show nice backtrace when using the color-eyre\\nexport RUST_BACKTRACE=1\\n\\n# to catch logs generated by tracing\\nexport RUST_LOG=trace\\n```\\n\\nAnd for the one of the most obnoxious things ever, we will use a script to download\\nthe inputs instead of \u201c_clicking, opening and copying to a file_\u201d[^1]. There is\\nno need to be _fancy_, so we will adjust Python script by Martin[^2].\\n\\n```py\\n#!/usr/bin/env python3\\n\\nimport datetime\\nimport yaml\\nimport requests\\nimport sys\\n\\n\\ndef load_config():\\n with open(\\"env.yaml\\", \\"r\\") as f:\\n js = yaml.load(f, Loader=yaml.Loader)\\n return js[\\"session\\"], js[\\"year\\"]\\n\\n\\ndef get_input(session, year, day):\\n return requests.get(\\n f\\"https://adventofcode.com/{year}/day/{day}/input\\",\\n cookies={\\"session\\": session},\\n headers={\\n \\"User-Agent\\": \\"{repo} by {mail}\\".format(\\n repo=\\"gitlab.com/mfocko/advent-of-code-2022\\",\\n mail=\\"me@mfocko.xyz\\",\\n )\\n },\\n ).content.decode(\\"utf-8\\")\\n\\n\\ndef main():\\n day = datetime.datetime.now().day\\n if len(sys.argv) == 2:\\n day = sys.argv[1]\\n\\n session, year = load_config()\\n problem_input = get_input(session, year, day)\\n\\n with open(f\\"./inputs/day{day:>02}.txt\\", \\"w\\") as f:\\n f.write(problem_input)\\n\\n\\nif __name__ == \\"__main__\\":\\n main()\\n```\\n\\nIf the script is called without any arguments, it will deduce the day from the\\nsystem, so we do not need to change the day every morning. It also requires a\\nconfiguration file:\\n\\n```yaml\\n# env.yaml\\nsession: \u2039your session cookie\u203a\\nyear: 2022\\n```\\n\\n### Libraries\\n\\nLooking at the list of the libraries, I have chosen \u201ca lot\u201d of them. Let\'s walk\\nthrough each of them.\\n\\n[`tracing`] and [`tracing-subscriber`] are the crates that can be used for tracing\\nand logging of your Rust programs, there are also other crates that can help you\\nwith providing backtrace to the Sentry in case you have deployed your application\\nsomewhere and you want to watch over it. In our use case we will just utilize the\\nmacros for debugging in the terminal.\\n\\n[`thiserror`], [`anyhow`] and [`color-eyre`] are used for error reporting.\\n`thiserror` is a very good choice for libraries, cause it extends the `Error`\\nfrom the `std` and allows you to create more convenient error types. Next is\\n`anyhow` which kinda builds on top of the `thiserror` and provides you with simpler\\nerror handling in binaries[^3]. And finally we have `color-eyre` which, as I found\\nout later, is a colorful (_wink wink_) extension of `eyre` which is fork of `anyhow`\\nwhile supporting customized reports.\\n\\nIn the end I have decided to remove `thiserror` and `anyhow`, since first one is\\nsuitable for libraries and the latter was basically fully replaced by `{color-,}eyre`.\\n\\n[`regex`] and [`lazy_static`] are a very good and also, I hope, self-explanatory\\ncombination. `lazy_static` allows you to have static variables that must be initialized\\nduring runtime.\\n\\n[`itertools`] provides some nice extensions to the iterators from the `std`.\\n\\n### My own \u201clibrary\u201d\\n\\nWhen creating the crate for this year\'s Advent of Code, I have chosen a library\\ntype. Even though standard library is huge, some things might not be included and\\nalso we can follow _KISS_. I have 2 modules that my \u201clibrary\u201d exports, one for\\nparsing and one for 2D vector (that gets used quite often during Advent of Code).\\n\\nKey part is, of course, processing the input and my library exports following\\nfunctions that get used a lot:\\n\\n```rust\\n/// Reads file to the string.\\npub fn file_to_string<P: AsRef<Path>>(pathname: P) -> String;\\n\\n/// Reads file and returns it as a vector of characters.\\npub fn file_to_chars<P: AsRef<Path>>(pathname: P) -> Vec<char>;\\n\\n/// Reads file and returns a vector of parsed structures. Expects each structure\\n/// on its own line in the file. And `T` needs to implement `FromStr` trait.\\npub fn file_to_structs<P: AsRef<Path>, T: FromStr>(pathname: P) -> Vec<T>\\nwhere\\n <T as FromStr>::Err: Debug;\\n\\n/// Converts iterator over strings to a vector of parsed structures. `T` needs\\n/// to implement `FromStr` trait and its error must derive `Debug` trait.\\npub fn strings_to_structs<T: FromStr, U>(\\n iter: impl Iterator<Item = U>\\n) -> Vec<T>\\nwhere\\n <T as std::str::FromStr>::Err: std::fmt::Debug,\\n U: Deref<Target = str>;\\n\\n/// Reads file and returns it as a vector of its lines.\\npub fn file_to_lines<P: AsRef<Path>>(pathname: P) -> Vec<String>;\\n```\\n\\nAs for the vector, I went with a rather simple implementation that allows only\\naddition of the vectors for now and accessing the elements via functions `x()`\\nand `y()`. Also the vector is generic, so we can use it with any numeric type we\\nneed.\\n\\n### Skeleton\\n\\nWe can also prepare a template to quickly bootstrap each of the days. We know\\nthat each puzzle has 2 parts, which means that we can start with 2 functions that\\nwill solve them.\\n\\n```rust\\nfn part1(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn part2(input: &Input) -> Output {\\n todo!()\\n}\\n```\\n\\nBoth functions take reference to the input and return some output (in majority\\nof puzzles, it is the same type). `todo!()` can be used as a nice placeholder,\\nit also causes a panic when reached and we could also provide some string with\\nan explanation, e.g. `todo!(\\"part 1\\")`. We have not given functions a specific\\ntype and to avoid as much copy-paste as possible, we will introduce type aliases.\\n\\n```rust\\ntype Input = String;\\ntype Output = i32;\\n```\\n\\n:::tip\\n\\nThis allows us to quickly adjust the types only in one place without the need to\\ndo _regex-replace_ or replace them manually.\\n\\n:::\\n\\nFor each day we get a personalized input that is provided as a text file. Almost\\nall the time, we would like to get some structured type out of that input, and\\ntherefore it makes sense to introduce a new function that will provide the parsing\\nof the input.\\n\\n```rust\\nfn parse_input(path: &str) -> Input {\\n todo!()\\n}\\n```\\n\\nThis \u201cparser\u201d will take a path to the file, just in case we would like to run the\\nsample instead of input.\\n\\nOK, so now we can write a `main` function that will take all of the pieces and\\nrun them.\\n\\n```rust\\nfn main() {\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n println!(\\"Part 1: {}\\", part_1(&input));\\n println!(\\"Part 2: {}\\", part_2(&input));\\n}\\n```\\n\\nThis would definitely do :) But we have installed a few libraries and we want to\\nuse them. In this part we are going to utilize _[`tracing`]_ (for tracing, duh\u2026)\\nand _[`color-eyre`]_ (for better error reporting, e.g. from parsing).\\n\\n```rust\\nfn main() -> Result<()> {\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n info!(\\"Part 1: {}\\", part_1(&input));\\n info!(\\"Part 2: {}\\", part_2(&input));\\n\\n Ok(())\\n}\\n```\\n\\nThe first statement will set up tracing and configure it to print out the logs to\\nterminal, based on the environment variable. We also change the formatting a bit,\\nsince we do not need all the _fancy_ features of the logger. Pure initialization\\nwould get us logs like this:\\n\\n```\\n2022-12-11T19:53:19.975343Z INFO day01: Part 1: 0\\n```\\n\\nHowever after running that command, we will get the following:\\n\\n```\\n INFO src/bin/day01.rs:35: Part 1: 0\\n```\\n\\nAnd the `color_eyre::install()?` is quite straightforward. We just initialize the\\nerror reporting by _color eyre_.\\n\\n:::caution\\n\\nNotice that we had to add `Ok(())` to the end of the function and adjust the\\nreturn type of the `main` to `Result<()>`. It is caused by the _color eyre_ that\\ncan be installed only once and therefore it can fail, that is how we got the `?`\\nat the end of the `::install` which _unwraps_ the **\xbbresult\xab** of the installation.\\n\\n:::\\n\\nOverall we will get to a template like this:\\n\\n```rust\\nuse aoc_2022::*;\\n\\nuse color_eyre::eyre::Result;\\nuse tracing::info;\\nuse tracing_subscriber::EnvFilter;\\n\\ntype Input = String;\\ntype Output = i32;\\n\\nfn parse_input(path: &str) -> Input {\\n todo!()\\n}\\n\\nfn part1(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn part2(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn main() -> Result<()> {\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n info!(\\"Part 1: {}\\", part_1(&input));\\n info!(\\"Part 2: {}\\", part_2(&input));\\n\\n Ok(())\\n}\\n```\\n\\n[^1]:\\n Copy-pasting might be a relaxing thing to do, but you can also discover\\n nasty stuff about your PC. See [this Reddit post and the comment].\\n\\n[^2]: [GitHub profile](https://github.com/martinjonas)\\n[^3]:\\n Even though you can use it even for libraries, but handling errors from\\n libraries using `anyhow` is nasty\u2026 You will be the stinky one ;)\\n\\n[_advent of code_]: https://adventofcode.com\\n[gitlab]: https://gitlab.com/mfocko/advent-of-code-2022\\n[cargo]: https://doc.rust-lang.org/cargo/\\n[`rust-analyzer`]: https://rust-analyzer.github.io/\\n[`direnv`]: https://direnv.net/\\n[`tracing`]: https://crates.io/crates/tracing\\n[`tracing-subscriber`]: https://crates.io/crates/tracing-subscriber\\n[`thiserror`]: https://crates.io/crates/thiserror\\n[`anyhow`]: https://crates.io/crates/anyhow\\n[`color-eyre`]: https://crates.io/crates/color-eyre\\n[`regex`]: https://crates.io/crates/regex\\n[`lazy_static`]: https://crates.io/crates/lazy_static\\n[`itertools`]: https://crates.io/crates/itertools\\n[this reddit post and the comment]: https://www.reddit.com/r/adventofcode/comments/zb98pn/comment/iyq0ono"}]}')}}]); \ No newline at end of file diff --git a/assets/js/4200b1a9.d764baec.js b/assets/js/4200b1a9.d764baec.js deleted file mode 100644 index e320695..0000000 --- a/assets/js/4200b1a9.d764baec.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[866],{24612:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/2023/08/02/copr","metadata":{"permalink":"/blog/2023/08/02/copr","editUrl":"https://github.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md","source":"@site/blog/2023-08-02-copr.md","title":"How can Copr help with broken dependencies","description":"Copr comes to save you when maintainer doesn\'t care.","date":"2023-08-02T00:00:00.000Z","formattedDate":"August 2, 2023","tags":[{"label":"\ud83c\udfed","permalink":"/blog/tags/\ud83c\udfed"},{"label":"red-hat","permalink":"/blog/tags/red-hat"},{"label":"copr","permalink":"/blog/tags/copr"},{"label":"admin","permalink":"/blog/tags/admin"},{"label":"vps","permalink":"/blog/tags/vps"}],"readingTime":3.44,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. your opinionated admin","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"How can Copr help with broken dependencies","description":"Copr comes to save you when maintainer doesn\'t care.","date":"2023-08-02T00:00:00.000Z","authors":[{"key":"mf","title":"a.k.a. your opinionated admin"}],"tags":["\ud83c\udfed","red-hat","copr","admin","vps"]},"unlisted":false,"nextItem":{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week"}},"content":"When you decide to run Fedora on your VPS, you might get screwed over by using\\nrandom repositories\u2026\\n\\n\x3c!--truncate--\x3e\\n\\nWhen I \u201creserved\u201d my VPS[^1] back in June \'20, I slapped Fedora on it without\\nthinking. I bet 99% of people would say that I\'m crazy for doing such thing[^2],\\n**BUT** I\'ve been using Fedora on my PCs for some time already and it felt very\\nstable and natural to just use, even for VPS.\\n\\nOne of the first things I\'ve done was setting up a mail server. You may guess\\nwhat\'s the fun part about having a mail server\u2026 Yes, it\'s all the spam you\\nreceive and only then you realize how much \u201ccrap\u201d gets filtered on free mail\\nservices. To battle this problem I chose to use\\n[rspamd](https://github.com/rspamd/rspamd) that had CentOS support, but someone\\nhad a [Copr](https://copr.fedorainfracloud.org/) repository that I used to\\ninstall it.\\n\\n## How does Copr repositories work?\\n\\nIf you have ever used Ubuntu, you might be familiar with the concept since it is\\nvery close to [PPAs](https://help.ubuntu.com/community/PPA).\\n\\ntl;dr of the whole process consists of\\n\\n1. enabling the Copr repository, and\\n2. installing the desired package.\\n\\nSo in shell you would do\\n\\n```\\n# dnf copr enable \u2039copr-repository\u203a\\n# dnf install \u2039package-from-the-repository\u203a\\n```\\n\\nAnd\u2026 that\'s it! Nothing else needed! Simple, right? And literally same process\\nas you would do for the PPA.\\n\\n:::tip AUR\\n\\nOn the other hand, if you are familiar with the archLinux, you definitely know\\nAUR and what it can do for you. Copr repository is pretty similar, but the\\npackages are prebuilt in Copr and Copr repositories can carry the required\\ndependencies for said packages, which simplifies the distribution, and can even\\nhelp with installing singular packages (when you just need the dependency, not\\neverything).\\n\\n:::\\n\\n## My issue\\n\\nNow you might wonder how would I use it on my VPS. It\'s rather simple, once in\\n6 months a new Fedora release comes out. And you need to upgrade to newer\\nrelease\u2026 You don\'t need to do it right away and for such setup it probably isn\'t\\neven recommended.\\n\\n:::tip\\n\\nFedora releases are supported for a year, i.e. they live 6 months till the next\\nrelease and then another 6 months till another release.\\n\\nSome people prefer to run one version \u201cbehind\u201d. If you ever decide to run it on\\nyour home server or in a similar setup, it might be a pretty good idea to\\nfollow. I\'m using the \u201clatest greatest\u201d, cause why not :smile:\\n\\nOne way or another, you still need to bump the release every six months, unless\\nyou\'d bump 2 releases at once every year, which would be a decision, since, at\\nleast I, cannot see any benefits in it\u2026 You don\'t go for \u201cstability\u201d, cause once\\na year you switch to the latest release and then, before you bump, you use one\\nyear old software, so you\'re not even using the latest.\\n\\n:::\\n\\nFast-forward 2 years in the future, new Fedora release came out (October \'22)\\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\\nupgrade, but can either ignore the dependencies or uninstall the rspamd\u2026\\n\\n## How can Copr help?\\n\\nI have managed to find\\n[specfile](https://github.com/rspamd/rspamd/blob/master/rpm/rspamd.spec) for the\\nrspamd package that they use for CentOS. There were some files apart from the\\nspecfile, so I had to make an SRPM locally and then\u2026 I just uploaded the SRPM\\nto the Copr to\\n[build](https://copr.fedorainfracloud.org/coprs/mfocko/rspamd/build/5046567/)\\nan RPM.\\n\\nI have switched the previous Copr repository for rspamd with my own and happily\\nproceeded with the upgrade.\\n\\n## Conclusion\\n\\nCopr is heavily used for testing builds on the upstream with\\n[Packit](https://packit.dev). However, as you can see, it is possible to use it\\n**very well** for packaging your own stuff and avoiding issues (such as the one\\nI have described above), if need be.\\n\\n[^1]: [vpsFree.cz](https://vpsfree.cz)\\n[^2]:\\n Even though I\'ve been running archLinux on some Raspberry Pi\'s and also\\n on one of my \u201chome servers\u201d, before getting the VPS. You could say I like\\n to live on the edge\u2026"},{"id":"aoc-2022/4th-week","metadata":{"permalink":"/blog/aoc-2022/4th-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/04-week-4.md","source":"@site/blog/aoc-2022/04-week-4.md","title":"4th week of Advent of Code \'22 in Rust","description":"Surviving fourth week in Rust.","date":"2023-07-07T15:14:00.000Z","formattedDate":"July 7, 2023","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":15.175,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"4th week of Advent of Code \'22 in Rust","description":"Surviving fourth week in Rust.","date":"2023-07-07T15:14","slug":"aoc-2022/4th-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"How can Copr help with broken dependencies","permalink":"/blog/2023/08/02/copr"},"nextItem":{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week"}},"content":"Let\'s go through the fourth week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 22: Monkey Map](https://adventofcode.com/2022/day/22)\\n\\n:::info tl;dr\\n\\nSimulating a movement on a 2D map with given instructions. Map becomes a cube in\\nthe 2nd part\u2026\\n\\n:::\\n\\n:::caution Rant\\n\\nThis was the most obnoxious problem of this year\u2026 and a lot of Rust issues have\\nbeen hit.\\n\\n:::\\n\\n### Solution\\n\\nIt seems like a very simple problem to solve, but with very obnoxious changes in\\nthe 2nd part and also it\'s relatively hard to decompose \xbbproperly\xab.\\n\\n#### Column iterator\\n\\nIn the first part of the problem it was needed to know the boundaries of each\\nrow and column, since I stored them in `Vec<Vec<char>>` and padded with spaces\\nto ensure I have a rectangular 2D \u201carray\u201d. However when you wanted to go through\\neach row and column to determine the boundaries, it was very easy to do for the\\nrows (cause each row is a `Vec` element), but not for the columns, since they\\nspan multiple rows.\\n\\nFor this use case I have implemented my own _column iterator_:\\n\\n```rust\\npub struct ColumnIterator<\'a, T> {\\n map: &\'a [Vec<T>],\\n column: usize,\\n\\n i: usize,\\n}\\n\\nimpl<\'a, T> ColumnIterator<\'a, T> {\\n pub fn new(map: &\'a [Vec<T>], column: usize) -> ColumnIterator<\'a, T> {\\n Self { map, column, i: 0 }\\n }\\n}\\n\\nimpl<\'a, T> Iterator for ColumnIterator<\'a, T> {\\n type Item = &\'a T;\\n\\n fn next(&mut self) -> Option<Self::Item> {\\n if self.i >= self.map.len() {\\n return None;\\n }\\n\\n self.i += 1;\\n Some(&self.map[self.i - 1][self.column])\\n }\\n}\\n```\\n\\nGiven this piece of an iterator, it is very easy to factor out the common\\nfunctionality between the rows and columns into:\\n\\n```rust\\nlet mut find_boundaries = |constructor: fn(usize) -> Orientation,\\n iterator: &mut dyn Iterator<Item = &char>,\\n upper_bound,\\n i| {\\n let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == \' \');\\n let start = first_non_empty.next().unwrap().0 as isize;\\n\\n let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != \' \');\\n let end = last_non_empty.next().unwrap_or((upper_bound, &\'_\')).0 as isize;\\n\\n boundaries.insert(constructor(i), start..end);\\n};\\n```\\n\\nAnd then use it as such:\\n\\n```rust\\n// construct all horizontal boundaries\\n(0..map.len()).for_each(|row| {\\n find_boundaries(\\n Orientation::horizontal,\\n &mut map[row].iter(),\\n map[row].len(),\\n row,\\n );\\n});\\n\\n// construct all vertical boundaries\\n(0..map[0].len()).for_each(|col| {\\n find_boundaries(\\n Orientation::vertical,\\n &mut ColumnIterator::new(&map, col),\\n map.len(),\\n col,\\n );\\n});\\n```\\n\\n#### Walking around the map\\n\\nOnce the 2nd part got introduced, you start to think about a way how not to\\ncopy-paste a lot of stuff (I haven\'t avoided it anyways\u2026). In this problem, I\'ve\\nchosen to introduce a trait (i.e. _interface_) for 2D and 3D walker.\\n\\n```rust\\ntrait Wrap: Clone {\\n type State;\\n\\n // simulation\\n fn is_blocked(&self) -> bool;\\n fn step(&mut self, steps: isize);\\n fn turn_left(&mut self);\\n fn turn_right(&mut self);\\n\\n // movement\\n fn next(&self) -> (Self::State, Direction);\\n\\n // final answer\\n fn answer(&self) -> Output;\\n}\\n```\\n\\nEach walker maintains its own state and also provides the functions that are\\nused during the simulation. The \u201cpromised\u201d methods are separated into:\\n\\n- _simulation_-related: that are used during the simulation from the `.fold()`\\n- _movement_-related: just a one method that holds most of the logic differences\\n between 2D and 3D\\n- _final answer_: which extracts the _proof of solution_ from the\\n implementation-specific walker\\n\\nBoth 2D and 3D versions borrow the original input and therefore you must\\nannotate the lifetime of it:\\n\\n```rust\\nstruct Wrap2D<\'a> {\\n input: &\'a Input,\\n position: Position,\\n direction: Direction,\\n}\\nimpl<\'a> Wrap2D<\'a> {\\n fn new(input: &\'a Input) -> Wrap2D<\'a> {\\n// \u2026\\n```\\n\\n#### Problems\\n\\nI have used a lot of closures for this problem and once I introduced a parameter\\nthat was of unknown type (apart from the fact it implements a specific trait), I\\ngot suggested a \u201cfix\u201d for the compilation error that resulted in something that\\nwas not possible to parse, cause it, more than likely, violated the grammar.\\n\\nIn a similar fashion, I have been suggested changes that led to a code that\\ndidn\'t make sense by just looking at it (there was no need to try the changes),\\nfor example one suggested change in the closure parameter caused disapperance of\\nthe parameter name. :smile:\\n\\n#### Clippy\\n\\nI have to admit that Clippy was rather helpful here, I\'ll include two examples\\nof rather smart suggestions.\\n\\nWhen writing the parsing for this problem, the first thing I have spotted on the\\n`char` was the `.is_digit()` function that takes a radix as a parameter. Clippy\\nnoticed that I use `radix = 10` and suggested switching to `.is_ascii_digit()`\\nthat does exactly the same thing:\\n\\n```diff\\n- .take_while(|c| c.is_digit(10))\\n+ .take_while(|c| c.is_ascii_digit())\\n```\\n\\nAnother useful suggestion appeared when working with the iterators and I wanted\\nto get the $n$-th element from it. You know the `.skip()`, you know the\\n`.next()`, just \u201cslap\u201d them together and we\'re done for :grin: Well, I got\\nsuggested to use `.nth()` that does exactly the combination of the two mentioned\\nmethods on iterators:\\n\\n```diff\\n- match it.clone().skip(skip).next().unwrap() {\\n+ match it.clone().nth(skip).unwrap() {\\n```\\n\\n## [Day 23: Unstable Diffusion](https://adventofcode.com/2022/day/23)\\n\\n:::info tl;dr\\n\\nSimulating movement of elves around with a set of specific rules.\\n\\n:::\\n\\n### Solution\\n\\nThere\'s not much to mention since it\'s just a cellular automaton simulation\\n(even though the AoC rules for cellular automatons usually get out of hand\\n:wink:).\\n\\nAlthough I had a need to determine boundaries of the elves\' positions and ended\\nup with a nasty DRY violation. Knowing that you you\'re looking for maximum and\\nminimum that are, of course, exactly the same except for initial values and\\ncomparators, it looks like a rather simple fix, but typing in Rust is something\\nelse, right? In the end I settled for a function that computes both boundaries\\nwithout any duplication while using a closure:\\n\\n```rust\\nfn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {\\n let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {\\n positions\\n .iter()\\n .fold(Vector2D::new(init, init), |acc, elf| {\\n Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))\\n })\\n };\\n\\n (f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))\\n}\\n```\\n\\nThis function returns a pair of 2D vectors that represent opposite points of the\\nbounding rectangle of all elves.\\n\\nYou might ask why would we need a closure and the answer is that `positions`\\ncannot be captured from within the nested function, only via closure. One more\\nfun fact on top of that is the type of the comparator\\n\\n```rust\\n&dyn Fn(isize, isize) -> isize\\n```\\n\\nOnce we remove the `dyn` keyword, compiler yells at us and also includes a way\\nhow to get a more thorough explanation of the error by running\\n\\n $ rustc --explain E0782\\n\\nwhich shows us\\n\\n Trait objects must include the `dyn` keyword.\\n\\n Erroneous code example:\\n\\n ```\\n trait Foo {}\\n fn test(arg: Box<Foo>) {} // error!\\n ```\\n\\n Trait objects are a way to call methods on types that are not known until\\n runtime but conform to some trait.\\n\\n Trait objects should be formed with `Box<dyn Foo>`, but in the code above\\n `dyn` is left off.\\n\\n This makes it harder to see that `arg` is a trait object and not a\\n simply a heap allocated type called `Foo`.\\n\\n To fix this issue, add `dyn` before the trait name.\\n\\n ```\\n trait Foo {}\\n fn test(arg: Box<dyn Foo>) {} // ok!\\n ```\\n\\n This used to be allowed before edition 2021, but is now an error.\\n\\n:::danger Rant\\n\\nNot all of the explanations are helpful though, in some cases they might be even\\nmore confusing than helpful, since they address _very simple_ use cases.\\n\\nAs you can see, even in this case there are two sides to the explanations:\\n\\n- it explains why you need to use `dyn`, but\\n- it still mentions that trait objects need to be heap-allocated via `Box<T>`\\n that, as you can see in my snippet, **does not** apply here :smile: IMO it\'s\\n caused by the fact that we are borrowing it and therefore we don\'t need to\\n care about the size or whereabouts of it.\\n\\n:::\\n\\n:::info C++ parallel\\n\\nIf you dive into the explanation above, you can notice that the `Box<dyn Trait>`\\npattern is very helpful for using types that are not known during compile-time.\\nYou would use a very similar approach in C++ when parsing some data structure\\nfrom input (let\'s say JSON for example).\\n\\nOn the other hand, in this case, it doesn\'t really make much sense, cause you\\ncan clearly see that the types **are known** during the compile-time, which in\\nC++ could be easily resolved by templating the helper function.\\n\\n:::\\n\\n## [Day 24: Blizzard Basin](https://adventofcode.com/2022/day/24)\\n\\n:::info tl;dr\\n\\nNavigating your way through a basin with series of blizzards that move around\\nyou as you move.\\n\\n:::\\n\\n:::caution\\n\\nIt\'s second to last day and I went \u201c_bonkers_\u201d on the Rust :smile: Proceed to\\nread _Solution_ part on your own risk.\\n\\n:::\\n\\n### Solution\\n\\nYou are given a map with blizzards all over the place and you\'re supposed to\\nfind the minimum time it requires you to walk through the basin without getting\\nin any of the blizzards.\\n\\n#### Breakdown\\n\\nRelatively simple, yet a bit annoying, approach can be taken. It\'s technically\\na shortest-path algorithm implementation with some relaxation restrictions and\\nbeing able to stay on one position for some time, so each _vertex_ of the graph\\nis determined by the position on the map and the _timestamp_. I have chosen to\\nuse `Vector3D<usize>`, since `x` and `y` attributes can be used for the position\\nand, well, let\'s use `z` for a timestamp, cause why not, right? :wink:\\n\\n#### Evaluating the blizzards\\n\\n:::caution\\n\\nI think that this is the most perverted abuse of the traits in the whole 4 weeks\\nof AoC in Rust\u2026\\n\\n:::\\n\\nThe blizzards move along their respective directions in time and loop around in\\ntheir respective row/column. Each vertex holds position **and** time, so we can\\n_just_ index the basin with the vertex itself, right? Yes, we can :smiling_imp:\\n\\n:::tip Fun fact\\n\\nWhile writing this part, I\'ve recognized unnecessary verbosity in the code and\\ncleaned it up a bit. The changed version is shown here and the original was just\\nmore verbose.\\n\\n:::\\n\\nI\'ll skip the boring parts of checking bounds and entry/exit of the basin :wink:\\nWe can easily calculate positions of the blizzards using a modular arithmetics:\\n\\n```rust\\nimpl Index<Position> for Basin {\\n type Output = char;\\n\\n fn index(&self, index: Position) -> &Self::Output {\\n // \u2039skipped boring parts\u203a\\n\\n // We need to account for the loops of the blizzards\\n let width = self.cols - 2;\\n let height = self.rows - 2;\\n\\n let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;\\n [\\n (\\n index.y() as usize,\\n blizzard_origin(width, -1, index.z(), index.x()),\\n \'>\',\\n ),\\n (\\n index.y() as usize,\\n blizzard_origin(width, 1, index.z(), index.x()),\\n \'<\',\\n ),\\n (\\n blizzard_origin(height, -1, index.z(), index.y()),\\n index.x() as usize,\\n \'v\',\\n ),\\n (\\n blizzard_origin(height, 1, index.z(), index.y()),\\n index.x() as usize,\\n \'^\',\\n ),\\n ]\\n .iter()\\n .find_map(|&(y, x, direction)| {\\n if self.map[y][x] == direction {\\n Some(&self.map[y][x])\\n } else {\\n None\\n }\\n })\\n .unwrap_or(&\'.\')\\n }\\n}\\n```\\n\\nAs you can see, there is an expression for calculating the original position and\\nit\'s used multiple times, so why not take it out to a lambda, right? :wink:\\n\\nI couldn\'t get the `rustfmt` to format the `for`-loop nicely, so I\'ve just\\ndecided to go with iterating over an elements of a slice. I have used, once\\nagain, a combination of two functions (`find_map` in this case) to do 2 things\\nat once and at the end, if we haven\'t found any blizzard, we just return the\\nempty space.\\n\\nI think it\'s a very _nice_ (and naughty) way how to use the `Index` trait, don\'t\\nyou think?\\n\\n#### Shortest-path algorithm\\n\\nFor the shortest path you can choose and adjust any of the common shortest-path\\nalgorithms, in my case, I have decided to use [_A\\\\*_] instead of Dijkstra\'s\\nalgorithm, since it better reflects the _cost_ function.\\n\\n:::info Comparison of costs\\n\\nWith the Dijkstra\'s algorithm I would proceed with the `time` attribute used as\\na priority for the queue.\\n\\nWhereas with the _A\\\\*_, I have chosen to use both time and Manhattan distance\\nthat promotes vertices closer to the exit **and** with a minimum time taken.\\n\\n:::\\n\\nCost function is, of course, a closure :wink:\\n\\n```rust\\nlet cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());\\n```\\n\\nAnd also for checking the possible moves from the current vertex, I have\\nimplemented, yet another, closure that yields an iterator with the next moves:\\n\\n```rust\\nlet next_positions = |p| {\\n [(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]\\n .iter()\\n .filter_map(move |&(x, y, t)| {\\n let next_p = p + Vector3D::new(x, y, t);\\n\\n if basin[next_p] == \'.\' {\\n Some(next_p)\\n } else {\\n None\\n }\\n })\\n};\\n```\\n\\n#### Min-heap\\n\\nIn this case I had a need to use the priority queue taking the elements with the\\nlowest cost as the prioritized ones. Rust only offers you the [`BinaryHeap`] and\\nthat is a max-heap. One of the ways how to achieve a min-heap is to put the\\nelements in wrapped in a [`Reverse`] (as is even showed in the linked [docs of\\nthe `BinaryHeap`]). However the wrapping affects the type of the heap and also\\npopping the most prioritized elements yields values wrapped in the `Reverse`.\\n\\nFor this purpose I have just taken the max-heap and wrapped it as a whole in a\\nseparate structure providing just the desired methods:\\n\\n```rust\\nuse std::cmp::{Ord, Reverse};\\nuse std::collections::BinaryHeap;\\n\\npub struct MinHeap<T> {\\n heap: BinaryHeap<Reverse<T>>,\\n}\\n\\nimpl<T: Ord> MinHeap<T> {\\n pub fn new() -> MinHeap<T> {\\n MinHeap {\\n heap: BinaryHeap::new(),\\n }\\n }\\n\\n pub fn push(&mut self, item: T) {\\n self.heap.push(Reverse(item))\\n }\\n\\n pub fn pop(&mut self) -> Option<T> {\\n self.heap.pop().map(|Reverse(x)| x)\\n }\\n}\\n\\nimpl<T: Ord> Default for MinHeap<T> {\\n fn default() -> Self {\\n Self::new()\\n }\\n}\\n```\\n\\nRest is just the algorithm implementation which is not that interesting.\\n\\n## [Day 25: Full of Hot Air](https://adventofcode.com/2022/day/25)\\n\\n:::info tl;dr\\n\\nPlaying around with a numbers in a _special_ base.\\n\\n:::\\n\\nGetting flashbacks to the _IB111 Foundations of Programming_\u2026 Very nice \u201cproblem\u201d\\nwith a rather easy solution, as the last day always seems to be.\\n\\n### Solution\\n\\nImplementing 2 functions, converting from the _SNAFU base_ and back to the _SNAFU_\\n_base_ representation. Let\'s do a bit more though! I have implemented two functions:\\n\\n- `from_snafu`\\n- `to_snafu`\\n\\nNow it is apparent that all I do is number to string and string to number. Hmm\u2026\\nthat sounds familiar, doesn\'t it? Let\'s introduce a structure for the SNAFU numbers\\nand implement the traits that we need.\\n\\nLet\'s start with a structure:\\n\\n```rust\\n#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]\\nstruct SNAFU {\\n value: i64,\\n}\\n```\\n\\n#### Converting from `&str`\\n\\nWe will start by implementing the `FromStr` trait that will help us parse our input.\\nThis is rather simple, I can just take the `from_snafu` function, copy-paste it\\ninto the `from_str` method and the number I get will be wrapped in `Result` and\\n`SNAFU` structure.\\n\\n#### Converting to `String`\\n\\nThis is more fun. In some cases you need to implement only one trait and others\\nare automatically implemented using that one trait. In our case, if you look in\\nthe documentation, you can see that `ToString` trait is automatically implemented\\nfor any type that implements `Display` trait.\\n\\nLet\'s implement the `Display` trait then. We should be able to use the `to_snafu`\\nfunction and just take the `self.value` from the `SNAFU` structure.\\n\\nAnd for the convenience of tests, we can also implement a rather simple `From<i64>`\\ntrait for the `SNAFU`.\\n\\n#### Adjusting the code\\n\\nAfter those changes we need to adjust the code and tests.\\n\\nParsing of the input is very easy, before we have used the lines, now we parse\\neverything:\\n\\n```diff\\n fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {\\n- file_to_lines(pathname)\\n+ file_to_structs(pathname)\\n }\\n```\\n\\nPart 1 needs to be adjusted a bit too:\\n\\n```diff\\n fn part_1(input: &Input) -> Output {\\n- to_snafu(input.iter().map(|s| from_snafu(s)).sum())\\n+ SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()\\n }\\n```\\n\\nYou can also see that it simplifies the meaning a bit and it is more explicit than\\nthe previous versions.\\n\\nAnd for the tests:\\n\\n```diff\\n #[test]\\n fn test_from() {\\n- for (n, s) in EXAMPLES.iter() {\\n- assert_eq!(from_snafu(s), *n);\\n+ for (&n, s) in EXAMPLES.iter() {\\n+ assert_eq!(s.parse::<SNAFU>().unwrap().value, n);\\n }\\n }\\n\\n #[test]\\n fn test_to() {\\n- for (n, s) in EXAMPLES.iter() {\\n- assert_eq!(to_snafu(*n), s.to_string());\\n+ for (&n, s) in EXAMPLES.iter() {\\n+ assert_eq!(SNAFU::from(n).to_string(), s.to_string());\\n }\\n```\\n\\n## Summary\\n\\nLet\'s wrap the whole thing up! Keeping in mind both AoC and the Rust\u2026\\n\\n![Finished advent calendar :smile:](/img/blog/aoc-2022/04-week-4/calendar.png)\\n\\n### Advent of Code\\n\\nThis year was quite fun, even though most of the solutions and posts came in\\nlater on (_cough_ in \'23 _cough_). Day 22 was the most obnoxious one\u2026 And also\\nit feels like I used priority queues and tree data structures **a lot** :eyes:\\n\\n### with Rust\\n\\nI must admit that a lot of compiler warnings and errors were very useful. Even\\nthough I still found some instances where they didn\'t help at all or cause even\\nworse issues than I had. Compilation times have been addressed with the caching.\\n\\nBuilding my first tree data structure in Rust has been a very \u201cinteresting\u201d\\njourney. Being able to write a more generic BFS algorithm that allows you to not\\nduplicate code while still mantaining the desired functionality contributes to\\na very readable code.\\n\\nI am definitely much more aware of the basic things that bloated Python is\\nmissing, yet Rust has them\u2026\\n\\nUsing explicit types and writing down placeholder functions with `todo!()`\\nmacros is very pleasant, since it allows you to easily navigate the type system\\nduring the development when you don\'t even need to be sure how are you going to\\nput the smaller pieces together.\\n\\nI have used a plethora of traits and also implemented some of them to either be\\nidiomatic, or exploit the syntactic sugar they offer. Deriving the default trait\\nimplementation is also very helpful in a lot of cases, e.g. debugging output,\\ncopying, equality comparison, etc.\\n\\nI confess to touching more \u201ccursed\u201d parts of the Rust, such as macros to\\ndeclutter the copy-paste for tests or writing my own structures that need to\\ncarry a lifetime for their own fields.\\n\\ntl;dr Relatively pleasant language until you hit brick wall :wink:\\n\\n---\\n\\nSee you next year! Maybe in Rust, maybe not :upside_down_face:\\n\\n[_advent of code_]: https://adventofcode.com\\n[_a\\\\*_]: https://en.wikipedia.org/wiki/A*_search_algorithm\\n[`binaryheap`]: https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html\\n[`reverse`]: https://doc.rust-lang.org/std/cmp/struct.Reverse.html\\n[docs of the `binaryheap`]: https://doc.rust-lang.org/std/collections/struct.BinaryHeap.html#min-heap"},{"id":"aoc-2022/3rd-week","metadata":{"permalink":"/blog/aoc-2022/3rd-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/03-week-3.md","source":"@site/blog/aoc-2022/03-week-3.md","title":"3rd week of Advent of Code \'22 in Rust","description":"Surviving third week in Rust.","date":"2023-07-06T21:00:00.000Z","formattedDate":"July 6, 2023","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":11.57,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"3rd week of Advent of Code \'22 in Rust","description":"Surviving third week in Rust.","date":"2023-07-06T21:00","slug":"aoc-2022/3rd-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week"},"nextItem":{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally"}},"content":"Let\'s go through the third week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 15: Beacon Exclusion Zone](https://adventofcode.com/2022/day/15)\\n\\n:::info tl;dr\\n\\nTriangulating a distress beacon based on the information from the sensors.\\n\\n:::\\n\\n### Solution\\n\\nRelatively easy thing to implement, no major Rust issues hit.\\n\\n## [Day 16: Proboscidea Volcanium](https://adventofcode.com/2022/day/16)\\n\\n:::info tl;dr\\n\\nFinding a max flow in a graph given some time constraints.\\n\\n:::\\n\\n### Solution\\n\\nI have used some interesting things to implement this and make it easier for me.\\n\\n#### Indexing in graph\\n\\nI have come across a situation where I needed to keep more information regarding\\nthe graph\u2026 In that case you can, of course, create a structure and keep it in,\\nbut once you have multiple members in the structure it gets harder to work with\\nsince you need to address the fields in the structure. When you work with graph,\\nyou frequently need to access the vertices and in this case it felt a lot easier\\nto implement the indexing in a graph, rather than explicitly access the\\nunderlying data structure.\\n\\nHere you can see a rather short snippet from the solution that allows you to\\n\u201cindex\u201d the graph:\\n\\n```rust\\nimpl Index<&str> for Graph {\\n type Output = Vertex;\\n\\n fn index(&self, index: &str) -> &Self::Output {\\n &self.g[index]\\n }\\n}\\n```\\n\\n#### Cartesian product\\n\\nDuring the implementation I had to utilize Floyd-Warshall algorithm for finding\\nthe shortest path between pairs of vertices and utilized the `iproduct!` macro\\nfrom the [`itertools`]. It is a very useful higher-order function that allows\\nyou to keep the nesting of the loops at a minimum level while still maintaining\\nthe same functionality.\\n\\n#### \u201cImplementing\u201d an iterator\\n\\nFor the second part, you get to split the work between 2 actors. That way you\\ncan achieve higher efficiency of the whole process that you\'re planning, but it\\nalso makes it harder to evaluate algorithmically, since you need to check the\\ndifferent ways the work can be split.\\n\\nBeing affected by _functional programming brain damage_:tm:, I have chosen to\\ndo this part by function that returns an iterator over the possible ways:\\n\\n```rust\\nfn pairings(\\n valves: &BTreeSet<String>,\\n) -> impl Iterator<Item = (BTreeSet<String>, BTreeSet<String>)> + \'_ {\\n let mapping = valves.iter().collect_vec();\\n\\n let max_mask = 1 << (valves.len() - 1);\\n\\n (0..max_mask).map(move |mask| {\\n let mut elephant = BTreeSet::new();\\n let mut human = BTreeSet::new();\\n\\n for (i, &v) in mapping.iter().enumerate() {\\n if (mask & (1 << i)) == 0 {\\n human.insert(v.clone());\\n } else {\\n elephant.insert(v.clone());\\n }\\n }\\n\\n (human, elephant)\\n })\\n}\\n```\\n\\n## [Day 17: Pyroclastic Flow](https://adventofcode.com/2022/day/17)\\n\\n:::info tl;dr\\n\\nSimulating an autonomous Tetris where pieces get affected by a series of jets of\\nhot gas.\\n\\n:::\\n\\n### Solution\\n\\nSimilarly to the previous day I have created some iterators :smile:\\n\\n#### Collision detection\\n\\nOnce you need to check for collisions it is very helpful to be able to just\\niterate through the positions that can actually collide with the wall or other\\npiece.\\n\\nTo get the desired behaviour, you can just compose few smaller functions:\\n\\n```rust\\nfn occupied(shape: &[Vec<char>]) -> impl Iterator<Item = Position> + \'_ {\\n shape.iter().enumerate().flat_map(|(y, row)| {\\n row.iter().enumerate().filter_map(move |(x, c)| {\\n if c == &\'#\' {\\n Some(Vector2D::new(x as isize, y as isize))\\n } else {\\n None\\n }\\n })\\n })\\n}\\n```\\n\\nIn the end, we get relative positions which we can adjust later when given the\\nspecific positions from iterator. You can see some interesting parts in this:\\n\\n- `.enumerate()` allows us to get both the indices (coordinates) and the line\\n or, later on, the character itself,\\n- `.flat_map()` flattens the iterator, i.e. when we return another iterator,\\n they just get chained instead of iterating over iterators (which sounds pretty\\n disturbing, doesn\'t it?),\\n- and finally `.filter_map()` which is pretty similar to the \u201cbasic\u201d `.map()`\\n with a one, key, difference that it expects the items of an iterator to be\\n mapped to an `Option<T>` from which it ignores nothing (as in `None` :wink:)\\n and also unwraps the values from `Some(\u2026)`.\\n\\n#### Infinite iterator\\n\\nIn the solution we cycle through both Tetris-like shapes that fall down and the\\njets that move our pieces around. Initially I have implemented my own infinite\\niterator that just yields the indices. It is a very simple, yet powerful, piece\\nof code:\\n\\n```rust\\nstruct InfiniteIndex {\\n size: usize,\\n i: usize,\\n}\\n\\nimpl InfiniteIndex {\\n fn new(size: usize) -> InfiniteIndex {\\n InfiniteIndex { size, i: size - 1 }\\n }\\n}\\n\\nimpl Iterator for InfiniteIndex {\\n type Item = usize;\\n\\n fn next(&mut self) -> Option<Self::Item> {\\n self.i = (self.i + 1) % self.size;\\n Some(self.i)\\n }\\n}\\n```\\n\\nHowever when I\'m looking at the code now, it doesn\'t really make much sense\u2026\\nGuess what, we can use a built-in function that is implemented on iterators for\\nthat! The function is called `.cycle()`\\n\\nOn the other hand, I am not going to switch to that function, since it would\\nintroduce an another myriad of issues caused by the fact that I create iterators\\nright away in the constructor of my structure and the iterators would borrow\\nboth the jets and shapes which would introduce a lifetime dependency into the\\nstructure.\\n\\n## [Day 18: Boiling Boulders](https://adventofcode.com/2022/day/18)\\n\\n:::info tl;dr\\n\\nLet\'s compute a surface area of some obsidian approximated via coordinates of\\ncubes.\\n\\n:::\\n\\n### Solution\\n\\nThis day is kinda interesting, because it shows how easily you can complicate the\\nproblem and also how much can you screw yourself over with the optimization and\\n\u201csmart\u201d approach.\\n\\nFor the first part you need to find the surface area of an obsidian that is\\napproximated by cubes. Now, that is a very easy thing to do, just keep the track\\nof already added cubes, and check if the newly added cube touches any face of any\\nother cube. Simple, and with a `BTreeSet` relatively efficient way to do it.\\n\\nHowever the second part lets you on a secret that there may be some surface area\\nfrom the \u201cinside\u201d too and you want to know only the one from the outside of the\\nobsidian. I have seen some solutions later, but if you check your data, you might\\nnotice that the bounding box of all the cubes isn\'t that big at all. Therefore I\\nchose to pre-construct the box beforehand, fill in the cubes and then just run a\\nBFS turning all the lava on the outside into the air. Now you just need to check\\ncubes and count how many of their faces touch the air.\\n\\n## [Day 19: Not Enough Minerals](https://adventofcode.com/2022/day/19)\\n\\n:::info tl;dr\\n\\nFinding out the best strategy for building robots to collect geodes.\\n\\n:::\\n\\n### Solution\\n\\nNot much interesting stuff to mention apart from the suggestion to never believe\\nthat the default implementation given by `derive` macro is what you want, it\\ndoesn\'t have to be. :smile:\\n\\n## [Day 20: Grove Positioning System](https://adventofcode.com/2022/day/20)\\n\\n:::info tl;dr\\n\\nShuffling around the _circular linked list_ to find the coordinates.\\n\\n:::\\n\\nNow, small rant for this day is in place. They\'ve never mentioned that coordinates\\ncan repeat and therefore the values are non-unique. This is something that did\\nnot happen in the given sample, but was present in the user input. It took \xbba lot\xab\\nto realize that this is the issue.\\n\\n### Solution\\n\\nI have tried implementing a circular linked list for this\u2026 and I have failed\\nmiserably. To be fair, I still have no clue why. It was \u201cfun\u201d to play around with\\nthe `Rc<RefCell<T>>`. In the end I failed on _wrong answer_. I have also encountered\\na rather interesting issue with `.borrow_mut()` method being used on `Rc<RefCell<T>>`.\\n\\n#### `.borrow_mut()`\\n\\nConsider the following snippet of the code (taken from the documentation):\\n\\n```rust\\nuse std::cell::{RefCell, RefMut};\\nuse std::collections::HashMap;\\nuse std::rc::Rc;\\n// use std::borrow::BorrowMut;\\n\\nfn main() {\\n let shared_map: Rc<RefCell<_>> = Rc::new(RefCell::new(HashMap::new()));\\n // Create a new block to limit the scope of the dynamic borrow\\n {\\n let mut map: RefMut<_> = shared_map.borrow_mut();\\n map.insert(\\"africa\\", 92388);\\n map.insert(\\"kyoto\\", 11837);\\n map.insert(\\"piccadilly\\", 11826);\\n map.insert(\\"marbles\\", 38);\\n }\\n\\n // Note that if we had not let the previous borrow of the cache fall out\\n // of scope then the subsequent borrow would cause a dynamic thread panic.\\n // This is the major hazard of using `RefCell`.\\n let total: i32 = shared_map.borrow().values().sum();\\n println!(\\"{total}\\");\\n}\\n```\\n\\nWe allocate a hash map on the heap and then in the inner block, we borrow it as\\na mutable reference, so that we can use it.\\n\\n:::note\\n\\nIt is a very primitive example for `Rc<RefCell<T>>` and mutable borrow.\\n\\n:::\\n\\nIf you uncomment the 4th line with `use std::borrow::BorrowMut;`, you cannot\\ncompile the code anymore, because of\\n\\n```\\n Compiling playground v0.0.1 (/playground)\\nerror[E0308]: mismatched types\\n --\x3e src/main.rs:10:34\\n |\\n10 | let mut map: RefMut<_> = shared_map.borrow_mut();\\n | --------- ^^^^^^^^^^^^^^^^^^^^^^^ expected struct `RefMut`, found mutable reference\\n | |\\n | expected due to this\\n |\\n = note: expected struct `RefMut<\'_, _>`\\n found mutable reference `&mut Rc<RefCell<HashMap<_, _>>>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:11:13\\n |\\n11 | map.insert(\\"africa\\", 92388);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:12:13\\n |\\n12 | map.insert(\\"kyoto\\", 11837);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:13:13\\n |\\n13 | map.insert(\\"piccadilly\\", 11826);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nerror[E0599]: no method named `insert` found for struct `RefMut<\'_, _>` in the current scope\\n --\x3e src/main.rs:14:13\\n |\\n14 | map.insert(\\"marbles\\", 38);\\n | ^^^^^^ method not found in `RefMut<\'_, _>`\\n\\nSome errors have detailed explanations: E0308, E0599.\\nFor more information about an error, try `rustc --explain E0308`.\\nerror: could not compile `playground` due to 5 previous errors\\n```\\n\\nIt might seem **a bit** ridiculous. However, I got to a point where the compiler\\nsuggested `use std::borrow::BorrowMut;` and it resulted in breaking parts of the\\ncode that worked previously. I think it may be a good idea to go over what is\\nhappening here.\\n\\n##### `.borrow_mut()` on `Rc<RefCell<T>>`\\n\\nLet\'s consider a variable `x` of type `Rc<RefCell<T>>`. What happens when you\\ncall `.borrow_mut()` on it? We can look at the `Rc` type, and\u2026 hang on! There is\\nneither `.borrow_mut()` method or `BorrowMut` trait implemented. How can we do it\\nthen?\\n\\nLet\'s go further and we can see that `RefCell<T>` implements a `.borrow_mut()`\\nmethod. OK, but how can we call it on the `Rc<T>`? Easily! `Rc<T>` implements\\n`Deref<T>` and therefore you can call methods on `Rc<T>` objects as if they were\\n`T` objects. If we read on _`Deref` coercion_, we can see the following:\\n\\n> If `T` implements `Deref<Target = U>`, \u2026:\\n>\\n> - \u2026\\n> - `T` implicitly implements all the (immutable) methods of the type `U`.\\n\\nWhat is the requirement for the `.borrow_mut()` on `RefCell<T>`? Well, it needs\\n`&self`, so the `Deref` implements the `.borrow_mut()` for the `Rc<RefCell<T>>`.\\n\\n##### `BorrowMut` trait\\n\\nI have not been able to find a lot on this trait. My guess is that it provides a\\nmethod instead of a syntactic sugar (`&mut x`) for the mutable borrow. And also\\nit provides default implementations for the types:\\n\\n```rust\\nimpl BorrowMut<str> for String\\n\\nimpl<T> BorrowMut<T> for &mut T\\nwhere\\n T: ?Sized,\\n\\nimpl<T> BorrowMut<T> for T\\nwhere\\n T: ?Sized,\\n\\nimpl<T, A> BorrowMut<[T]> for Vec<T, A>\\nwhere\\n A: Allocator,\\n\\nimpl<T, A> BorrowMut<T> for Box<T, A>\\nwhere\\n A: Allocator,\\n T: ?Sized,\\n\\nimpl<T, const N: usize> BorrowMut<[T]> for [T; N]\\n```\\n\\n##### Conflict\\n\\nNow the question is why did it break the code\u2026 My first take was that the type\\n`Rc<RefCell<T>>` has some _specialized_ implementation of the `.borrow_mut()` and\\nthe `use` overrides it with the default, which is true **in a sense**. However\\nthere is no _specialized_ implementation. Let\'s have a look at the trait and the\\ntype signature on the `RefCell<T>`:\\n\\n```rust\\n// trait\\npub trait BorrowMut<Borrowed>: Borrow<Borrowed>\\nwhere\\n Borrowed: ?Sized,\\n{\\n fn borrow_mut(&mut self) -> &mut Borrowed;\\n}\\n\\n// \u2039RefCell<T>.borrow_mut()\u203a type signature\\npub fn borrow_mut(&self) -> RefMut<\'_, T>\\n```\\n\\nI think that we can definitely agree on the fact that `RefMut<\'_, T>` is not the\\n`RefCell<T>`.\\n\\n**In my opinion**, `RefCell<T>` implements a **separate** `.borrow_mut()` rather\\nthan implementing the interface, because it **cannot** satisfy the type requirements\\nof the trait.\\n\\n:::caution\\n\\nI wonder how are we expected to deal with this conflict, if and when, we need\\nboth the `.borrow_mut()` of the trait and `.borrow_mut()` of the `RefCell<T>`.\\n\\n:::\\n\\n:::tip Fun fact\\n\\nI was suggested by the compiler to do `use std::borrow::BorrowMut;` and break the\\ncode.\\n\\nSo much for the _almighty_ and _helpful_ compiler\u2026\\n\\n:::\\n\\n## [Day 21: Monkey Math](https://adventofcode.com/2022/day/21)\\n\\n:::info tl;dr\\n\\nComputing an expression tree and then also finding ideal value for a node.\\n\\n:::\\n\\n### Solution\\n\\nRelatively simple, until you get to the 2nd part where you start to practice\\na lot of the copy-paste. I have managed to sneak some perverted stuff in there\\nthough :) Let\'s go through the details.\\n\\n#### `Default` trait\\n\\nFor the first time and twice I had a need to have a default value for my types,\\nenumerations in this case. Rust offers a very nice trait[^1] that is described\\nas:\\n\\n> A trait for giving a type a useful default value.\\n\\nI guess it sums it up nicely. The more interesting part about this is the fact\\nthat you can use the _macro machinery_ to save yourself some typing. If you have\\nenumeration of which the default value doesn\'t bear any parameter, you can just\\ndo[^2]:\\n\\n```rust\\n#[derive(Default)]\\nenum Color {\\n #[default]\\n White,\\n Gray,\\n Black,\\n}\\n```\\n\\n#### Abusing negation\\n\\nIf you want to use a _unary minus_ operator on your own type, you can implement\\na `Neg` trait[^3]. I was dealing with a binary tree and needed a way how to look\\nat the other side, so I have just implemented the negation for flipping between\\nleft and right :smile:\\n\\n[^1]: [`Default`](https://doc.rust-lang.org/std/default/trait.Default.html) docs\\n[^2]: Pardon my example from the graph algorithms ;)\\n[^3]: [`Neg`](https://doc.rust-lang.org/std/ops/trait.Neg.html) docs\\n\\n[_advent of code_]: https://adventofcode.com\\n[`itertools`]: https://crates.io/crates/itertools\\n[this reddit post and the comment]: https://www.reddit.com/r/adventofcode/comments/zb98pn/comment/iyq0ono"},{"id":"leetcode/sort-diagonally","metadata":{"permalink":"/blog/leetcode/sort-diagonally","editUrl":"https://github.com/mfocko/blog/tree/main/blog/leetcode/sort-matrix-diagonally.md","source":"@site/blog/leetcode/sort-matrix-diagonally.md","title":"Sort the matrix diagonally","description":"Compiler assisted development.","date":"2023-03-04T23:15:00.000Z","formattedDate":"March 4, 2023","tags":[{"label":"cpp","permalink":"/blog/tags/cpp"},{"label":"leetcode","permalink":"/blog/tags/leetcode"},{"label":"iterators","permalink":"/blog/tags/iterators"}],"readingTime":16.99,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"Sort the matrix diagonally","description":"Compiler assisted development.","date":"2023-03-04T23:15","slug":"leetcode/sort-diagonally","authors":"mf","tags":["cpp","leetcode","iterators"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week"},"nextItem":{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week"}},"content":"Let\'s try to solve one of the LeetCode challenges in easy and hard mode at the\\nsame time.\\n\\n\x3c!--truncate--\x3e\\n\\n- Link to the problem: https://leetcode.com/problems/sort-the-matrix-diagonally/\\n\\n## Problem description\\n\\nA **matrix diagonal** is a diagonal line of cells starting from some cell in\\neither the topmost row or leftmost column and going in the bottom-right direction\\nuntil reaching the matrix\'s end. For example, the **matrix diagonal** starting\\nfrom `mat[2][0]`, where `mat` is a `6 x 3` matrix, includes cells `mat[2][0]`,\\n`mat[3][1]`, and `mat[4][2]`.\\n\\nGiven an `m x n` matrix `mat` of integers, sort each matrix diagonal in ascending\\norder and return the resulting matrix.\\n\\n### Example\\n\\n![Image describing the problem](https://assets.leetcode.com/uploads/2020/01/21/1482_example_1_2.png)\\n\\n## Skeleton and initial adjustments\\n\\nWe are given the following skeleton for the C++ and the given challenge:\\n\\n```cpp\\nclass Solution {\\npublic:\\n vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {\\n\\n }\\n};\\n```\\n\\nThe task is to sort the passed matrix diagonally and then return it. First of all,\\nI don\'t like to solve this in a web browser, so we\'ll need to adjust it accordingly\\nfor running it locally. We\'ll start by including the `vector` header and using\\nfully-qualified namespaces[^1] and also adding few tests:\\n\\n```cpp\\n#include <cassert>\\n#include <vector>\\n\\nusing matrix = std::vector<std::vector<int>>;\\n\\nclass Solution {\\npublic:\\n matrix diagonalSort(matrix& mat)\\n {\\n }\\n};\\n\\nstatic void test_case_1()\\n{\\n // Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]\\n // Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]\\n\\n Solution s;\\n assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },\\n std::vector { 2, 2, 1, 2 },\\n std::vector { 1, 1, 1, 2 } })\\n == std::vector { std::vector { 1, 1, 1, 1 },\\n std::vector { 1, 2, 2, 2 },\\n std::vector { 1, 2, 3, 3 } }));\\n}\\n\\nstatic void test_case_2()\\n{\\n // Input: mat =\\n // [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]\\n // Output:\\n // [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]\\n\\n Solution s;\\n assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },\\n std::vector { 23, 55, 17, 45, 15, 52 },\\n std::vector { 75, 31, 36, 44, 58, 8 },\\n std::vector { 22, 27, 33, 25, 68, 4 },\\n std::vector { 84, 28, 14, 11, 5, 50 } })\\n == std::vector { std::vector { 5, 17, 4, 1, 52, 7 },\\n std::vector { 11, 11, 25, 45, 8, 69 },\\n std::vector { 14, 23, 25, 44, 58, 15 },\\n std::vector { 22, 27, 31, 36, 50, 66 },\\n std::vector { 84, 28, 75, 33, 55, 68 } }));\\n}\\n\\nint main()\\n{\\n test_case_1();\\n test_case_2();\\n\\n return 0;\\n}\\n```\\n\\nWe need to return the matrix, but we\'re given a reference to the input matrix. We\\ncan easily abuse the C++ here and just switch the reference to value, this way\\nthe matrix will be copied when passed to the function, we can sort the copy and\\njust return it back. And we also get yelled by the compiler for the fact that the\\nmethod doesn\'t return anything yet, so to make it \u201cshut up\u201d we will just return\\nthe input for now:\\n\\n```diff\\n- matrix diagonalSort(matrix& mat)\\n+ matrix diagonalSort(matrix mat)\\n {\\n+ return mat;\\n }\\n```\\n\\nNow, we get the copy and we\'re good to go.\\n\\n## Na\xefve solution\\n\\nAs you may know, C++ offers a plethora of functions that can be used to your\\nadvantage, given that you know how to \u201cbend\u201d the data structures accordingly.\\n\\nWhat does that mean for us? Well, we have an `std::sort`, we can use it, right?\\nLet\'s have a look at it:\\n\\n```cpp\\ntemplate< class RandomIt >\\nvoid sort( RandomIt first, RandomIt last );\\n```\\n\\nThis overload is more than we need. What does it do? It just sorts the elements\\nin the range `[first, last)` using `operator<` on them. We can\'t sort the whole\\nmatrix using this, but\u2026 we can sort just \xbbone\xab diagonal without doing much work\\non our end.\\n\\nWhat is the `RandomIt` type though? If we look more into the documentation, we\\ncan easily find the requirements for it and also learn that it\'s a _random access_\\n_iterator_ and allows swapping its values at the same time.\\n\\n:::tip Random access iterator\\n\\nWhat is the _random access iterator_ though? We can find it in a documentation\\nand see the following description:\\n\\n> A **LegacyRandomAccessIterator** is a [LegacyBidirectionalIterator](https://en.cppreference.com/w/cpp/named_req/BidirectionalIterator)\\n> that can be moved to point to any element in constant time.\\n\\nAfter that we can see all the requirements for it being listed. I don\'t feel like\\nreading them right now, so we will just use it and see where the compilation blows\\nup, i.e. \u201c_compiler-assisted development_\u201d[^2] if you will ;)\\n\\n:::\\n\\nNow we know that we can use `std::sort` to sort the diagonal itself, but we also\\nneed to get the diagonals somehow. I\'m rather lazy, so I\'ll just delegate it to\\nsomeone else[^3]. And that way we get\\n\\n```cpp\\nmatrix diagonalSort(matrix mat)\\n{\\n // we iterate over the diagonals\\n for (auto d : diagonals(mat)) {\\n // and we sort each diagonal\\n std::sort(d.begin(), d.end());\\n }\\n\\n // we take the matrix by copy, so we can sort in-situ and return the copy\\n // that we sorted\\n return mat;\\n}\\n```\\n\\nThis solution looks very simple, doesn\'t it? Well, cause it is.\\nLet\'s try compiling it:\\n\\n```\\nmatrix-sort.cpp:11:23: error: use of undeclared identifier \'diagonals\' [clang-diagnostic-error]\\n for (auto d : diagonals(mat)) {\\n ^\\nFound compiler error(s).\\nmake: *** [makefile:14: tidy] Error 1\\n```\\n\\nOK, seems about right. We haven\'t implemented the `diagonals` yet. And based on\\nwhat we\'ve written so far, we need a function or a class `diagonals` that will\\ngive us the diagonals we need.\\n\\n## Implementing the `diagonals`\\n\\nCool, so we need the function that will let us go through each and every diagonal\\nin our matrix. We use the _for-range_ loop, so whatever we get back from the\\n`diagonals` must support `.begin()` and `.end()`. Since I am a masochist, we will\\ndo such functionality for a matrix of any type, not just the `int` from the challenge.\\n\\nAs I said, we need to be able to\\n\\n- construct the object\\n- get the beginning\\n- get the end (the \u201csentinel\u201d)\\n\\n```cpp\\ntemplate <typename T>\\nclass diagonals {\\n using matrix_t = std::vector<std::vector<T>>;\\n\\n matrix_t& _matrix;\\n\\npublic:\\n diagonals(matrix_t& m)\\n : _matrix(m)\\n {\\n }\\n diagonals_iter begin()\\n {\\n /* TODO */\\n }\\n diagonals_iter end()\\n {\\n /* TODO */\\n }\\n};\\n```\\n\\nNow we have a `diagonals` that we can use to go through the diagonals. We haven\'t\\nimplemented the core of it yet. Let\'s go through what we have for now.\\n\\nWe have a templated class with templated `T` that is used as a placeholder for any\\ntype we would store in the matrix. Because I\'m lazy, I have defined the `matrix_t`\\ntype that is a \u201cshortcut\u201d for `std::vector<std::vector<T>>`, so I don\'t have to\\ntype it out all the time. Of course, we need to store the matrix, we are given,\\nas a private attribute. And then just have the constructor and the 2 methods we\\nneed for the _for-range_.\\n\\n### Iterating over diagonals\\n\\nNow that we have an object that will allow us to iterate through the diagonals,\\nwe need to implement the iterating itself. We need to go through all of them, so\\nwe have multiple options how to do so. I have decided to start from the \u201cmain\u201d\\ndiagonal that starts at `(0, 0)` index and then proceed with the diagonals starting\\nin the first row, followed by the rest of the diagonals in the first column.\\n\\nWe need to be able to tell that we\'ve iterated through all of them, and also we\\nneed to know which diagonal is next. For that purpose we will pass the indices\\nof the first cell on the diagonal. That way we can always tell how to move forward.\\n\\nWe will start by updating the `begin` and `end` to reflect our choice accordingly.\\n\\n```cpp\\ndiagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }\\ndiagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }\\n```\\n\\nFor the `begin` we return the first diagonal that starts at `(0, 0)`. And because\\nwe have decided to do the diagonals in the first column at the end, the first\\ndiagonal that is not a valid one is the one at `(0, height)`. Apart from the\\nindices, we also need to pass reference to the matrix itself.\\n\\n:::note\\n\\nYou may have noticed that we also include the diagonals that have length 1,\\nspecifically the ones at `(0, height - 1)` and `(width - 1, 0)`. We are implementing\\nan iterator that **should not** care about the way it\'s being used. Therefore, we\\ndon\'t care about the fact they don\'t need to be sorted.\\n\\n:::\\n\\nCool, let\'s leave the iterator itself to someone else, right?[^4]\\n\\n### Implementing the iterator over diagonals\\n\\nWe can start with a simple skeleton based on the information that we pass from\\nthe `diagonals`. Also to utilize the `matrix_t` and also contain implementation\\ndetails hidden away, we will put this code into the `diagonals` class.\\n\\n```cpp\\nclass diagonals_iter {\\n matrix_t& m;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n};\\n```\\n\\nIn this case we will be implementing a \u201csimple\u201d forward iterator, so we don\'t\\nneed to implement a lot. Notably it will be:\\n\\n- inequality operator (we need to know when we reach the end and have nothing to\\n iterate over)\\n- preincrementation operator (we need to be able to move around the iterable)\\n- dereference operator (we need to be able to retrieve the objects we iterate\\n over)\\n\\n```cpp\\nclass diagonals_iter {\\n matrix_t& m;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator!=(const diagonals_iter& rhs) const\\n {\\n // iterators are not equal if they reference different matrices, or\\n // their positions differ\\n return m != rhs.m || x != rhs.x || y != rhs.y;\\n }\\n\\n diagonals_iter& operator++()\\n {\\n if (y != 0) {\\n // iterating through diagonals down the first column\\n y++;\\n return *this;\\n }\\n\\n // iterating the diagonals along the first row\\n x++;\\n if (x == m.front().size()) {\\n // switching to diagonals in the first column\\n x = 0;\\n y++;\\n }\\n\\n return *this;\\n }\\n\\n diagonal<T> operator*() const { return diagonal { m, x, y }; }\\n};\\n```\\n\\nLet\'s go one-by-one. Inequality operator is rather simple, just compare iterator\'s\\nattributes field-by-field. If you think about it, checking inequality of two 2D\\nvectors may be a bit inefficient, therefore, we can swap around and check it as\\na last thing.\\n\\n```diff\\n- return m != rhs.m || x != rhs.x || y != rhs.y;\\n+ return x != rhs.x || y != rhs.y || m != rhs.m;\\n```\\n\\nPreincrementation is where the magic happens. If you have a better look, you can\\nsee two branches of this operation:\\n\\n1. When `y != 0` (we\'re iterating over the diagonals in the first column)\\n In this case, we just bump the row and we\'re done.\\n2. When `y == 0` (we\'re iterating over the diagonals in the first row)\\n In this case, we bump the column and check if we haven\'t gotten out of bounds,\\n i.e. the end of the first row. If we get out of the bounds, we\'re continuing\\n with the second diagonal in the first column.\\n\\nDereferencing the iterator must \u201cyield\u201d something. In our case it will be the\\ndiagonal that we want to sort. For sorting we need just the iterators that can\\nmove around said diagonal. The simplest thing, we can do, is to delegate it to\\nsomething else. In our case it will be a class called `diagonal`.\\n\\n## Implementing the `diagonal` itself\\n\\nAfter implementing the iterator over diagonals, we know that all we need to describe\\na diagonal is the matrix itself and the \u201cstart\u201d of the diagonal (row and column).\\nAnd we also know that the diagonal must provide some iterators for the `std::sort`\\nfunction. We can start with the following skeleton:\\n\\n```cpp\\ntemplate <typename T>\\nclass diagonal {\\n using matrix_t = std::vector<std::vector<T>>;\\n\\n matrix_t& matrix;\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n diagonal(matrix_t& matrix, std::size_t x, std::size_t y)\\n : matrix(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }\\n\\n diagonal_iter end() const\\n {\\n auto max_x = matrix[y].size();\\n auto max_y = matrix.size();\\n\\n // we need to find the distance in which we get out of bounds (either in\\n // column or row)\\n auto steps = std::min(max_x - x, max_y - y);\\n\\n return diagonal_iter { matrix, x + steps, y + steps };\\n }\\n};\\n```\\n\\nInitialization is rather simple, we just \u201ckeep\u201d the stuff we get, `begin` is the\\nsimplest, we just delegate.\\n\\nIn case of the `end`, it gets more complicated. We need to know where is the \u201cend\u201d\\nof the diagonal. Since `end` should point to the first element \u201cafter\u201d the iterable,\\nwe know that it\'s the first position of the iterator where either `y` becomes\\n`matrix.size()` or `x` becomes `matrix[y].size()`. Also we are moving along diagonal,\\nduh, therefore we can deduce the first \u201cposition\u201d afterwards by minimal amount of\\nsteps to get out of the any column or row, hence `std::min(max_x - x, max_y - y)`.\\nFinal position is then computed simply by adding the steps to the beginning of\\nthe diagonal.\\n\\nNow we just need to finish the iterator for the diagonal itself and we\'re done.\\n\\n### Implementing `diagonal_iter`\\n\\nThis part is the hardest from all we need to do. It\'s because of the requirements\\nof the `std::sort` that requires us to implement a _random access iterator_. I have\\nbriefly described it above, and \u201cin a nutshell\u201d it means that we need to implement\\nan iterator that can move in constant time along the diagonal in any amount of\\nsteps.\\n\\nLet\'s go through all of the functionality that our iterator needs to support to\\nbe used in `std::sort`. We need the usual operations like:\\n\\n- equality/inequality\\n- incrementation\\n- dereferencing\\n\\nWe will also add all the types that our iterator uses with the category of the\\niterator, i.e. what interface it supports:\\n\\n```cpp\\nclass diagonal_iter {\\n // we need to keep reference to the matrix itself\\n matrix_t& m;\\n\\n // we need to be able to tell our current position\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n using difference_type = std::ptrdiff_t;\\n using value_type = T;\\n using pointer = T*;\\n using reference = T&;\\n using iterator_category = std::random_access_iterator_tag;\\n\\n diagonal_iter(matrix_t& matrix,\\n std::size_t x,\\n std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator==(const diagonal_iter& rhs) const\\n {\\n return x == rhs.x && y == rhs.y && m == rhs.m;\\n }\\n\\n diagonal_iter& operator++()\\n {\\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\\n // the same time\\n x++;\\n y++;\\n return *this;\\n }\\n\\n reference operator*() const { return m[y][x]; }\\n};\\n```\\n\\nThis is pretty similar to the previous iterator, but now we need to implement the\\nremaining requirements of the _random access iterator_. Let\'s see what those are:\\n\\n- decrementation - cause we need to be able to move backwards too, since _random _\\n _access iterator_ extends the interface of _bidirectional iterator_\\n- moving the iterator in either direction by steps given as an integer\\n- being able to tell the distance between two iterators\\n- define an ordering on the iterators\\n\\nLet\'s fill them in:\\n\\n```cpp\\nclass diagonal_iter {\\n // we need to keep reference to the matrix itself\\n matrix_t& m;\\n\\n // we need to be able to tell our current position\\n std::size_t x;\\n std::size_t y;\\n\\npublic:\\n using difference_type = std::ptrdiff_t;\\n using value_type = T;\\n using pointer = T*;\\n using reference = T&;\\n using iterator_category = std::random_access_iterator_tag;\\n\\n diagonal_iter(matrix_t& matrix,\\n std::size_t x,\\n std::size_t y)\\n : m(matrix)\\n , x(x)\\n , y(y)\\n {\\n }\\n\\n bool operator==(const diagonal_iter& rhs) const\\n {\\n return x == rhs.x && y == rhs.y && m == rhs.m;\\n }\\n\\n diagonal_iter& operator++()\\n {\\n // we are moving along the diagonal, so we increment both \u2039x\u203a and \u2039y\u203a at\\n // the same time\\n x++;\\n y++;\\n return *this;\\n }\\n\\n reference operator*() const { return m[y][x]; }\\n\\n // exactly opposite to the incrementation\\n diagonal_iter operator--()\\n {\\n x--;\\n y--;\\n return *this;\\n }\\n\\n // moving \u2039n\u203a steps back is same as calling decrementation \u2039n\u203a-times, so we\\n // can just return a new iterator and subtract \u2039n\u203a from both coordinates in\\n // the matrix\\n diagonal_iter operator-(difference_type n) const\\n {\\n return diagonal_iter { m, x - n, y - n };\\n }\\n\\n // here we assume that we are given two iterators on the same diagonal\\n difference_type operator-(const diagonal_iter& rhs) const\\n {\\n assert(m == rhs.m);\\n return x - rhs.x;\\n }\\n\\n // counterpart of moving \u2039n\u203a steps backwards\\n diagonal_iter operator+(difference_type n) const\\n {\\n return diagonal_iter { m, x + n, y + n };\\n }\\n\\n // we compare the coordinates, and also assume that those 2 iterators are\\n // lying on the same diagonal\\n bool operator<(const diagonal_iter& rhs) const\\n {\\n assert(m == rhs.m);\\n return x < rhs.x && y < rhs.y;\\n }\\n};\\n```\\n\\nAt this point we could probably try and compile it, right? If we do so, we will\\nget yelled at by a compiler for the following reasons:\\n\\n```\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type \'diagonal<int>::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n __last = __next;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization \'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>\' requested here\\n std::__unguarded_linear_insert(__i,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization \'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__insertion_sort(__first, __first + int(_S_threshold), __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization \'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__final_insertion_sort(__first, __last, __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort<diagonal<int>::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal<int>::matrix_t &\' (aka \'vector<std::vector<int>> &\')\\n matrix_t& m;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to \'__unguarded_linear_insert\' [clang-diagnostic-error]\\n std::__unguarded_linear_insert(__i,\\n ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization \'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization \'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__final_insertion_sort(__first, __last, __comp);\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort<diagonal<int>::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]\\n __unguarded_linear_insert(_RandomAccessIterator __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type \'diagonal<int>::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n __last = __cut;\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization \'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__introsort_loop(__first, __last,\\n ^\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization \'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>\' requested here\\n std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());\\n ^\\nmatrix-sort.cpp:161:18: note: in instantiation of function template specialization \'std::sort<diagonal<int>::diagonal_iter>\' requested here\\n std::sort(d.begin(), d.end());\\n ^\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal<int>::matrix_t &\' (aka \'vector<std::vector<int>> &\')\\n matrix_t& m;\\n ^\\n```\\n\\nThat\'s a lot of noise, isn\'t it? Let\'s focus on the important parts:\\n\\n```\\n/usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type \'diagonal<int>::diagonal_iter\' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]\\n\u2026\\nmatrix-sort.cpp:17:19: note: copy assignment operator of \'diagonal_iter\' is implicitly deleted because field \'m\' is of reference type \'diagonal<int>::matrix_t &\' (aka \'vector<std::vector<int>> &\')\\n matrix_t& m;\\n ^\\n```\\n\\nAh! We have a reference in our iterator, and this prevents us from having a copy\\nassignment operator (that is used \u201csomewhere\u201d in the sorting algorithm). Well\u2026\\nLet\'s just wrap it!\\n\\n```diff\\n# we need to keep a different type than reference\\n- matrix_t& m;\\n+ std::reference_wrapper<matrix_t> m;\\n\\n# in comparison we need to get the reference out of the wrapper first\\n- return x == rhs.x && y == rhs.y && m == rhs.m;\\n+ return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();\\n\\n# same when we return a reference to the \u201ccell\u201d in the matrix\\n- reference operator*() const { return m[y][x]; }\\n+ reference operator*() const { return m.get()[y][x]; }\\n\\n# and finally in the assertions that we set for the \u201cdistance\u201d and \u201cless than\u201d\\n- assert(m == rhs.m);\\n+ assert(m.get() == rhs.m.get());\\n```\\n\\nWe\'re done now! We have written an iterator over diagonals for a 2D `vector`. You can have a look at the final result [here](pathname:///files/blog/leetcode/sort-matrix-diagonally/matrix-sort.cpp).\\n\\n[^1]: just because I\'m used to it and don\'t care about your opinion ;)\\n[^2]: exercise at your own risk\\n[^3]: me in 5 minutes in fact, but don\'t make me scared\\n[^4]: me in the next section\u2026"},{"id":"aoc-2022/2nd-week","metadata":{"permalink":"/blog/aoc-2022/2nd-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/02-week-2.md","source":"@site/blog/aoc-2022/02-week-2.md","title":"2nd week of Advent of Code \'22 in Rust","description":"Surviving second week in Rust.","date":"2022-12-25T23:15:00.000Z","formattedDate":"December 25, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":20.875,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"2nd week of Advent of Code \'22 in Rust","description":"Surviving second week in Rust.","date":"2022-12-25T23:15","slug":"aoc-2022/2nd-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally"},"nextItem":{"title":"1st week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/1st-week"}},"content":"Let\'s go through the second week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n## [Day 8: Treetop Tree House](https://adventofcode.com/2022/day/8)\\n\\n:::info tl;dr\\n\\nWe get a forest and we want to know how many trees are visible from the outside.\\nApart from that we want to find the best view.\\n\\n:::\\n\\nNothing interesting. We are moving around 2D map though. And indexing can get a\\nbit painful when doing so, let\'s refactor it a bit ;) During the preparation for\\nthe AoC, I have written `Vector2D` and now it\'s time to extend it with indexing\\nof `Vec` of `Vec`s. In my solution I was manipulating with indices in the following\\nway:\\n\\n- swapping them\\n- checking whether they are correct indices for the `Vec<Vec<T>>`\\n- indexing `Vec<Vec<T>>` with them\\n\\n:::caution\\n\\nI\'m getting familiar with Rust and starting to \u201cabuse\u201d it\u2026 While doing so, I\'m\\nalso uncovering some \u201cfeatures\u201d that I don\'t really like. Therefore I will mark\\nall of my rants with _thicc_ **\xab\u21af\xbb** mark and will try to \u201clock\u201d them into their\\nown \u201cbox of hell\u201d.\\n\\n:::\\n\\n#### Swapping indices\\n\\nRelatively simple implementation, just take the values, swap them and return new\\nvector.\\n\\n```rust\\nimpl<T: Copy> Vector2D<T> {\\n pub fn swap(&self) -> Self {\\n Self {\\n x: self.y,\\n y: self.x,\\n }\\n }\\n}\\n```\\n\\nPretty straight-forward implementation, but let\'s talk about the `T: Copy`. We\\nneed to use it, since we are returning a **new** vector, with swapped **values**.\\nIf we had values that cannot be copied, the only thing we could do, would be a\\nvector of references (and it would also introduce a lifetime, to which we\'ll get\\nlater on). This is pretty similar with the operations on sets from the first week.\\n\\n#### Indexing `Vec`\\n\\nI will start with the indexing, cause bound-checking is a bit more\u2026 complicated\\nthan I would like to.\\n\\n```rust\\npub fn index<\'a, T, U>(v: &\'a [Vec<U>], idx: &Vector2D<T>) -> &\'a U\\nwhere\\n usize: TryFrom<T>,\\n <usize as TryFrom<T>>::Error: Debug,\\n T: Copy,\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &v[y][x]\\n}\\n```\\n\\nLet\'s talk about this mess\u2026 Body of the function is probably the most easy part\\nand should not be hard to understand, we just take the `x` and `y` and convert\\nthem both to `usize` type that can be used later on for indexing.\\n\\nThe type signature of the function is where the fun is at :wink: We are trying\\nto convert unknown type to `usize`, so we must bound the `T` as a type that can\\nbe converted to `usize`, that\'s how we got `usize: TryFrom<T>` which basically\\nsays that `usize` must implement `TryFrom<T>` trait and therefore allows us to\\nconvert the indices to actual `usize` indices. Using `.unwrap()` also forces us\\nto bound the error that can occur when converting `T` into `usize`, that\'s how\\nwe get `<usize as TryFrom<T>>::Error: Debug` which loosely means\\n\\n> error during conversion of `T` into `usize` must implement `Debug`,\\n> i.e. can be printed in some way or other\\n\\n`T: Copy` is required by `.try_into()` which takes `T` by-value.\\n\\nAnd now we are left only with the first line of the definition.\\n\\n:::note\\n\\nSkilled Rustaceans might notice that this implementation is rather flaky and can\\nbreak in multiple places at once. I\'ll get back to it\u2026\\n\\n:::\\n\\nLet\'s split it in multiple parts:\\n\\n- `v: &\'a [Vec<U>]` represents the 2D `Vec`, we are indexing, `Vec` implements\\n `Slice` trait and _clippy_ recommends using `&[T]` to `&Vec<T>`, exact details\\n are unknown to me\\n- `idx: &Vector2D<T>` represents the _indices_ which we use, we take them by\\n reference to avoid an unnecessary copy\\n- `-> &\'a U` means that we are returning a _reference_ to some value of type `U`.\\n Now the question is what does the `\'a` mean, we can also see it as a generic\\n type declared along `T` and `U`. And the answer is _relatively_ simple, `\'a`\\n represents a _lifetime_. We take the `v` by a reference and return a reference,\\n borrow checker validates all of the _borrows_ (or references), so we need to\\n specify that our returned value has _the same lifetime_ as the vector we have\\n taken by a reference, i.e. returned reference must live at least as long as the\\n `v`. This way we can \u201cbe sure\u201d that the returned reference is valid.\\n\\n##### Issues\\n\\nFirst issue that our implementation has is the fact that we cannot get a mutable\\nreference out of that function. This could be easily resolved by introducing new\\nfunction, e.g. `index_mut`. Which I have actually done while writing this part:\\n\\n```rust\\npub fn index_mut<\'a, T, U>(v: &\'a mut [Vec<U>], idx: &Vector2D<T>) -> &\'a mut U\\nwhere\\n usize: TryFrom<T>,\\n <usize as TryFrom<T>>::Error: Debug,\\n T: Copy,\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &mut v[y][x]\\n}\\n```\\n\\n:::caution **\xab\u21af\xbb** Why can\'t we use one function?\\n\\nWhen we consider a `Vec<T>`, we don\'t need to consider containers as `T`, Rust\\nimplements indexing as traits `Index<T>` and `IndexMut<T>` that do the dirty work\\nbehind syntactic sugar of `container[idx]`.\\n\\nHowever, implementing of traits is not allowed for _external_ types, i.e. types\\nthat you haven\'t defined yourself. This means that you can implement indexing\\nover containers that you have implemented yourself, but you cannot use your own\\ntypes for indexing \u201cbuilt-in\u201d types.\\n\\nAnother part of this rabbit hole is trait `SliceIndex<T>` that is of a relevance\\nbecause of\\n\\n```rust\\nimpl<T, I> Index<I> for [T]\\nwhere\\n I: SliceIndex<[T]>\\n\\nimpl<T, I, A> Index<I> for Vec<T, A>\\nwhere\\n I: SliceIndex<[T]>,\\n A: Allocator\\n\\nimpl<T, I, const N: usize> Index<I> for [T; N]\\nwhere\\n [T]: Index<I>\\n```\\n\\nIn other words, if your type implements `SliceIndex<T>` trait, it can be used\\nfor indexing. As of now, this trait has all of its required methods experimental\\nand is marked as `unsafe`.\\n\\n:::\\n\\nAnother problem is a requirement for indexing either `[Vec<T>]` or `Vec<Vec<T>>`.\\nThis requirement could be countered by removing inner type `Vec<T>` and constraining\\nit by a trait `Index` (or `IndexMut` respectively) in a following way\\n\\n```rust\\npub fn index<\'a, C, T>(v: &\'a [C], idx: &Vector2D<T>) -> &\'a C::Output\\nwhere\\n usize: TryFrom<T>,\\n <usize as TryFrom<T>>::Error: Debug,\\n T: Copy,\\n C: Index<usize>\\n{\\n let (x, y): (usize, usize) = (idx.x.try_into().unwrap(), idx.y.try_into().unwrap());\\n &v[y][x]\\n}\\n```\\n\\nGiven this, we can also give a more meaningful typename for indexing type, such\\nas `I`.\\n\\n#### Checking bounds\\n\\nNow we can get to the boundary checks, it is very similar, but a more\u2026 dirty.\\nFirst approach that came up was to convert the indices in `Vector2D` to `usize`,\\nbut when you add the indices up, e.g. when checking the neighbors, you can end\\nup with negative values which, unlike in C++, causes an error (instead of underflow\\nthat you can use to your advantage; you can easily guess how).\\n\\nSo how can we approach this then? Well\u2026 we will convert the bounds instead of\\nthe indices and that lead us to:\\n\\n```rust\\npub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool\\nwhere\\n usize: TryInto<T>,\\n <usize as TryInto<T>>::Error: Debug,\\n T: PartialOrd + Copy,\\n{\\n idx.y >= 0.try_into().unwrap()\\n && idx.y < v.len().try_into().unwrap()\\n && idx.x >= 0.try_into().unwrap()\\n && idx.x\\n < v[TryInto::<usize>::try_into(idx.y).unwrap()]\\n .len()\\n .try_into()\\n .unwrap()\\n}\\n```\\n\\nYou can tell that it\'s definitely a shitty code. Let\'s improve it now! We will\\nget back to the original idea, but do it better. We know that we cannot convert\\nnegative values into `usize`, **but** we also know that conversion like that\\nreturns a `Result<T, E>` which we can use to our advantage.\\n\\n```rust\\npub fn in_range<T, U>(v: &[Vec<U>], idx: &Vector2D<T>) -> bool\\nwhere\\n T: Copy,\\n usize: TryFrom<T>,\\n{\\n usize::try_from(idx.y)\\n .and_then(|y| usize::try_from(idx.x).map(|x| y < v.len() && x < v[y].len()))\\n .unwrap_or(false)\\n}\\n```\\n\\n`Result<T, E>` is a type similar to `Either` in Haskell and it allows us to chain\\nmultiple operations on correct results or propagate the original error without\\ndoing anything. Let\'s dissect it one-by-one.\\n\\n`try_from` is a method implemented in `TryFrom` trait, that allows you to convert\\ntypes and either successfully convert them or fail (with a reasonable error). This\\nmethod returns `Result<T, E>`.\\n\\nWe call `and_then` on that _result_, let\'s have a look at the type signature of\\n`and_then`, IMO it explains more than enough:\\n\\n```rust\\npub fn and_then<U, F>(self, op: F) -> Result<U, E>\\nwhere\\n F: FnOnce(T) -> Result<U, E>\\n```\\n\\nOK\u2026 So it takes the result and a function and returns another result with\\ndifferent value and different error. However we can see that the function, which\\nrepresents an operation on a result, takes just the value, i.e. it doesn\'t care\\nabout any previous error. To make it short:\\n\\n> `and_then` allows us to run an operation, which can fail, on the correct result\\n\\nWe parsed a `y` index and now we try to convert the `x` index with `try_from`\\nagain, but on that result we use `map` rather than `and_then`, why would that be?\\n\\n```rust\\npub fn map<U, F>(self, op: F) -> Result<U, E>\\nwhere\\n F: FnOnce(T) -> U\\n```\\n\\nHuh\u2026 `map` performs an operation that **cannot** fail. And finally we use\\n`unwrap_or` which takes the value from result, or in case of an error returns the\\ndefault that we define.\\n\\nHow does this work then? If `y` is negative, the conversion fails and the error\\npropagates all the way to `unwrap_or`, if `y` can be a correct `usize` value, then\\nwe do the same with `x`. If `x` is negative, we propagate the error as with `y`,\\nand if it\'s not, then we check whether it exceeds the higher bounds or not.\\n\\n### Solution\\n\\nRelatively simple, you just need follow the rules and not get too smart, otherwise\\nit will get back at you.\\n\\n## [Day 9: Rope Bridge](https://adventofcode.com/2022/day/9)\\n\\n:::info tl;dr\\n\\nWe get a rope with knots and we want to track how many different positions are\\nvisited with the rope\'s tail.\\n\\n:::\\n\\nBy this day, I have come to a conclusion that current skeleton for each day\\ngenerates a lot of boilerplate. And even though it can be easily copied, it\'s\\njust a waste of space and unnecessary code. Let\'s \u201csimplify\u201d this (on one end\\nwhile creating monster on the other end). I\'ve gone through what we need in the\\npreparations for the AoC. Let\'s sum up our requirements:\\n\\n- parsing\\n- part 1 & 2\\n- running on sample / input\\n- tests\\n\\nParsing and implementation of both parts is code that changes each day and we\\ncannot do anything about it. However running and testing can be simplified!\\n\\nLet\'s introduce and export a new module `solution` that will take care of all of\\nthis. We will start by introducing a trait for each day.\\n\\n```rust\\npub trait Solution<Input, Output: Display> {\\n fn parse_input<P: AsRef<Path>>(pathname: P) -> Input;\\n\\n fn part_1(input: &Input) -> Output;\\n fn part_2(input: &Input) -> Output;\\n}\\n```\\n\\nThis does a lot of work for us already, we have defined a trait and for each day\\nwe will create a structure representing a specific day. That structure will also\\nimplement the `Solution` trait.\\n\\nNow we need to get rid of the boilerplate, we can\'t get rid of the `main` function,\\nbut we can at least move out the functionality.\\n\\n```rust\\nfn run(type_of_input: &str) -> Result<()>\\nwhere\\n Self: Sized,\\n{\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = Self::parse_input(format!(\\"{}s/{}.txt\\", type_of_input, Self::day()));\\n\\n info!(\\"Part 1: {}\\", Self::part_1(&input));\\n info!(\\"Part 2: {}\\", Self::part_2(&input));\\n\\n Ok(())\\n}\\n\\nfn main() -> Result<()>\\nwhere\\n Self: Sized,\\n{\\n Self::run(\\"input\\")\\n}\\n```\\n\\nThis is all part of the `Solution` trait, which can implement methods while being\\ndependent on what is provided by the implementing types. In this case, we just\\nneed to bound the `Output` type to implement `Display` that is necessary for the\\n`info!` and format string there.\\n\\nNow we can get to first of the nasty things we are going to do\u2026 And it is the\\n`day()` method that you can see being used when constructing path to the input\\nfile. That method will generate a name of the file, e.g. `day01` and we know that\\nwe can _somehow_ deduce it from the structure name, given we name it reasonably.\\n\\n```rust\\nfn day() -> String {\\n let mut day = String::from(type_name::<Self>().split(\\"::\\").next().unwrap());\\n day.make_ascii_lowercase();\\n\\n day.to_string()\\n}\\n```\\n\\n:::caution `type_name`\\n\\nThis feature is still experimental and considered to be internal, it is not\\nadvised to use it any production code.\\n\\n:::\\n\\nAnd now we can get to the nastiest stuff :weary: We will **generate** the tests!\\n\\nWe want to be able to generate tests for sample input in a following way:\\n\\n```rust\\ntest_sample!(day_01, Day01, 42, 69);\\n```\\n\\nThere\'s not much we can do, so we will write a macro to generate the tests for us.\\n\\n```rust\\n#[macro_export]\\nmacro_rules! test_sample {\\n ($mod_name:ident, $day_struct:tt, $part_1:expr, $part_2:expr) => {\\n #[cfg(test)]\\n mod $mod_name {\\n use super::*;\\n\\n #[test]\\n fn test_part_1() {\\n let sample =\\n $day_struct::parse_input(&format!(\\"samples/{}.txt\\", $day_struct::day()));\\n assert_eq!($day_struct::part_1(&sample), $part_1);\\n }\\n\\n #[test]\\n fn test_part_2() {\\n let sample =\\n $day_struct::parse_input(&format!(\\"samples/{}.txt\\", $day_struct::day()));\\n assert_eq!($day_struct::part_2(&sample), $part_2);\\n }\\n }\\n };\\n}\\n```\\n\\nWe have used it in a similar way as macros in C/C++, one of the things that we\\ncan use to our advantage is defining \u201ctype\u201d of the parameters for the macro. All\\nparameters have their name prefixed with `$` sign and you can define various \u201cforms\u201d\\nof your macro. Let\'s go through it!\\n\\nWe have following parameters:\\n\\n- `$mod_name` which represents the name for the module with tests, it is typed\\n with `ident` which means that we want a valid identifier to be passed in.\\n- `$day_struct` represents the structure that will be used for tests, it is typed\\n with `tt` which represents a _token tree_, in our case it is a type.\\n- `$part_X` represents the expected output for the `X`th part and is of type `expr`\\n which literally means an _expression_.\\n\\nApart from that we need to use `#[macro_export]` to mark the macro as exported\\nfor usage outside of the module. Now our skeleton looks like:\\n\\n```rust\\nuse aoc_2022::*;\\n\\ntype Input = String;\\ntype Output = String;\\n\\nstruct DayXX;\\nimpl Solution<Input, Output> for DayXX {\\n fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {\\n file_to_string(pathname)\\n }\\n\\n fn part_1(input: &Input) -> Output {\\n todo!()\\n }\\n\\n fn part_2(input: &Input) -> Output {\\n todo!()\\n }\\n}\\n\\nfn main() -> Result<()> {\\n // DayXX::run(\\"sample\\")\\n DayXX::main()\\n}\\n\\n// test_sample!(day_XX, DayXX, , );\\n```\\n\\n### Solution\\n\\nNot much to talk about, it is relatively easy to simulate.\\n\\n## [Day 10: Cathode-Ray Tube](https://adventofcode.com/2022/day/10)\\n\\n:::info tl;dr\\n\\nEmulating basic arithmetic operations on a CPU and drawing on CRT based on the\\nCPU\'s accumulator.\\n\\n:::\\n\\nIn this day I have discovered an issue with my design of the `Solution` trait.\\nAnd the issue is caused by different types of `Output` for the part 1 and part 2.\\n\\nProblem is relatively simple and consists of simulating a CPU, I have approached\\nit in a following way:\\n\\n```rust\\nfn evaluate_instructions(instructions: &[Instruction], mut out: Output) -> Output {\\n instructions\\n .iter()\\n .fold(State::new(), |state, instruction| {\\n state.execute(instruction, &mut out)\\n });\\n\\n out\\n}\\n```\\n\\nWe just take the instructions, we have some state of the CPU and we execute the\\ninstructions one-by-one. Perfect usage of the `fold` (or `reduce` as you may know\\nit from other languages).\\n\\nYou can also see that we have an `Output` type, so the question is how can we fix\\nthat problem. And the answer is very simple and _functional_. Rust allows you to\\nhave an `enumeration` that can _bear_ some other values apart from the type itself.\\n\\n:::tip\\n\\nWe could\'ve seen something like this with the `Result<T, E>` type that can be\\ndefined as\\n\\n```rust\\nenum Result<T, E> {\\n Ok(T),\\n Err(E)\\n}\\n```\\n\\n###### What does that mean though?\\n\\nWhen we have an `Ok` value, it has the result itself, and when we get an `Err`\\nvalue, it has the error. This also allows us to handle _results_ in a rather\\npretty way:\\n\\n```rust\\nmatch do_something(x) {\\n Ok(y) => {\\n println!(\\"SUCCESS: {}\\", y);\\n },\\n Err(y) => {\\n eprintln!(\\"ERROR: {}\\", y);\\n }\\n}\\n```\\n\\n:::\\n\\nMy solution has a following outline:\\n\\n```rust\\nfn execute(&self, i: &Instruction, output: &mut Output) -> State {\\n // execute the instruction\\n\\n // collect results if necessary\\n match output {\\n Output::Part1(x) => self.execute_part_1(y, x),\\n Output::Part2(x) => self.execute_part_2(y, x),\\n }\\n\\n // return the obtained state\\n new_state\\n}\\n```\\n\\nYou might think that it\'s a perfectly reasonable thing to do. Yes, **but** notice\\nthat the `match` statement doesn\'t _collect_ the changes in any way and also we\\npass `output` by `&mut`, so it is shared across each _iteration_ of the `fold`.\\n\\nThe dirty and ingenious thing is that `x`s are passed by `&mut` too and therefore\\nthey are directly modified by the helper functions. To sum it up and let it sit\\n\\n> We are **collecting** the result **into** an **enumeration** that is **shared**\\n> across **all** iterations of `fold`.\\n\\n### Solution\\n\\nSimilar to _Day 9_, but there are some technical details that can get you.\\n\\n## [Day 11: Monkey in the Middle](https://adventofcode.com/2022/day/11)\\n\\n:::info tl;dr\\n\\nSimulation of monkeys throwing stuff around and measuring your stress levels\\nwhile your stuff is being passed around.\\n\\n:::\\n\\nI think I decided to use regular expressions here for the first time, cause\\nparsing the input was a pain.\\n\\nAlso I didn\'t expect to implement Euclidean algorithm in Rust\u2026\\n\\n### Solution\\n\\nAgain, we\'re just running a simulation. Though I must admit it was very easy to\\nmake a small technical mistakes that could affect the final results very late.\\n\\n## [Day 12: Hill Climbing Algorithm](https://adventofcode.com/2022/day/12)\\n\\n:::info tl;dr\\n\\nFinding shortest path up the hill and also shortest path down to the ground while\\nalso rolling down the hill\u2026\\n\\n:::\\n\\nAs I have said in the _tl;dr_, we are looking for the shortest path, but the start\\nand goal differ for the part 1 and 2. So I have decided to refactor my solution\\nto a BFS algorithm that takes necessary parameters via functions:\\n\\n```rust\\nfn bfs<F, G>(\\n graph: &[Vec<char>], start: &Position, has_edge: F, is_target: G\\n) -> Option<usize>\\nwhere\\n F: Fn(&[Vec<char>], &Position, &Position) -> bool,\\n G: Fn(&[Vec<char>], &Position) -> bool\\n```\\n\\nWe pass the initial vertex from the caller and everything else is left to the BFS\\nalgorithm, based on the `has_edge` and `is_target` functions.\\n\\nThis was easy! And that is not very usual in Rust once you want to pass around\\nfunctions. :eyes:\\n\\n### Solution\\n\\nLooking for the shortest path\u2026 Must be Dijkstra, right? **Nope!** Half of the\\nReddit got jebaited though. In all fairness, nothing stops you from implementing\\nthe Dijkstra\'s algorithm for finding the shortest path, **but** if you know that\\nall connected vertices are in a unit (actually $d = 1$) distance from each other,\\nthen you know that running Dijkstra is equivalent to running BFS, only with worse\\ntime complexity, because of the priority heap instead of the queue.\\n\\n## [Day 13: Distress Signal](https://adventofcode.com/2022/day/13)\\n\\n:::info tl;dr\\n\\nProcessing packets with structured data from the distress signal.\\n\\n:::\\n\\nYou can implement a lot of traits if you want to. It is _imperative_ to implement\\nordering on the packets. I had a typo, so I also proceeded to implement a `Display`\\ntrait for debugging purposes:\\n\\n```rust\\nimpl Display for Packet {\\n fn fmt(&self, f: &mut std::fmt::Formatter<\'_>) -> std::fmt::Result {\\n match self {\\n Packet::Integer(x) => write!(f, \\"{x}\\"),\\n Packet::List(lst) => write!(f, \\"[{}]\\", lst.iter().map(|p| format!(\\"{p}\\")).join(\\",\\")),\\n }\\n }\\n}\\n```\\n\\n### Solution\\n\\nA lot of technical details\u2026 Parsing is nasty too\u2026\\n\\n## [Day 14: Regolith Reservoir](https://adventofcode.com/2022/day/14)\\n\\n:::info tl;dr\\n\\nLet\'s simulate falling sand grain-by-grain.\\n\\n:::\\n\\nAgain, both parts are relatively similar with minimal changes, so it is a good\\nidea to refactor it a bit. Similar approach to the [BFS above]. Also this is the\\nfirst day where I ran into efficiency issues and had to redo my solution to speed\\nit up just a bit.\\n\\n### Solution\\n\\nTedious.\\n\\n## Post Mortem\\n\\n### Indexing\\n\\nI was asked about the indexing after publishing the blog. And truly it is rather\\ncomplicated topic, especially after releasing `SliceIndex<I>` trait. I couldn\'t\\nleave it be, so I tried to implement the `Index` and `IndexMut` trait.\\n\\n:::note\\n\\nI have also mentioned that the `SliceIndex` trait is `unsafe`, but truth be told,\\nonly _unsafe_ part are the 2 methods that are named `*unchecked*`. Anyways, I will\\nbe implementing the `Index*` traits for now, rather than the `SliceIndex`.\\n\\n:::\\n\\nIt\'s relatively straightforward\u2026\\n\\n```rust\\nimpl<I, C> Index<Vector2D<I>> for [C]\\nwhere\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: Index<usize>,\\n{\\n type Output = C::Output;\\n\\n fn index(&self, index: Vector2D<I>) -> &Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &self[y][x]\\n }\\n}\\n\\nimpl<I, C> IndexMut<Vector2D<I>> for [C]\\nwhere\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: IndexMut<usize>,\\n{\\n fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &mut self[y][x]\\n }\\n}\\n```\\n\\nWe can see a lot of similarities to the implementation of `index` and `index_mut`\\nfunctions. In the end, they are 1:1, just wrapped in the trait that provides a\\nsyntax sugar for `container[idx]`.\\n\\n:::note\\n\\nI have also switched from using the `TryFrom` to `TryInto` trait, since it better\\nmatches what we are using, the `.try_into` rather than `usize::try_from`.\\n\\nAlso implementing `TryFrom` automatically provides you with a `TryInto` trait,\\nsince it is relatively easy to implement. Just compare the following:\\n\\n```rust\\npub trait TryFrom<T>: Sized {\\n type Error;\\n\\n fn try_from(value: T) -> Result<Self, Self::Error>;\\n}\\n\\npub trait TryInto<T>: Sized {\\n type Error;\\n\\n fn try_into(self) -> Result<T, Self::Error>;\\n}\\n```\\n\\n:::\\n\\nOK, so we have our trait implemented, we should be able to use `container[index]`,\\nright? Yes\u2026 but actually no :frowning:\\n\\n```\\nerror[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`\\n --\x3e src/bin/day08.rs:26:18\\n |\\n26 | if trees[pos] > tallest {\\n | ^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`\\n = note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`\\n\\nerror[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<usize>`\\n --\x3e src/bin/day08.rs:30:28\\n |\\n30 | max(tallest, trees[pos])\\n | ^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<usize>`\\n = note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<usize>>`\\n\\nerror[E0277]: the type `[std::vec::Vec<i8>]` cannot be indexed by `aoc_2022::Vector2D<isize>`\\n --\x3e src/bin/day08.rs:52:28\\n |\\n52 | let max_height = trees[position];\\n | ^^^^^^^^ slice indices are of type `usize` or ranges of `usize`\\n |\\n = help: the trait `std::slice::SliceIndex<[std::vec::Vec<i8>]>` is not implemented for `aoc_2022::Vector2D<isize>`\\n = note: required for `std::vec::Vec<std::vec::Vec<i8>>` to implement `std::ops::Index<aoc_2022::Vector2D<isize>>`\\n```\\n\\nWhy? We have it implemented for the slices (`[C]`), why doesn\'t it work? Well,\\nthe fun part consists of the fact that in other place, where we were using it,\\nwe were passing the `&[Vec<T>]`, but this is coming from a helper functions that\\ntake `&Vec<Vec<T>>` instead. And\u2026 we don\'t implement `Index` and `IndexMut` for\\nthose. Just for the slices. \ud83e\udd2f _What are we going to do about it?_\\n\\nWe can either start copy-pasting or be smarter about it\u2026 I choose to be smarter,\\nso let\'s implement a macro! The only difference across the implementations are\\nthe types of the outer containers. Implementation doesn\'t differ **at all**!\\n\\nImplementing the macro can be done in a following way:\\n\\n```rust\\nmacro_rules! generate_indices {\\n ($container:ty) => {\\n impl<I, C> Index<Vector2D<I>> for $container\\n where\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: Index<usize>,\\n {\\n type Output = C::Output;\\n\\n fn index(&self, index: Vector2D<I>) -> &Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &self[y][x]\\n }\\n }\\n\\n impl<I, C> IndexMut<Vector2D<I>> for $container\\n where\\n I: Copy + TryInto<usize>,\\n <I as TryInto<usize>>::Error: Debug,\\n C: IndexMut<usize>,\\n {\\n fn index_mut(&mut self, index: Vector2D<I>) -> &mut Self::Output {\\n let (x, y): (usize, usize) =\\n (index.x.try_into().unwrap(), index.y.try_into().unwrap());\\n &mut self[y][x]\\n }\\n }\\n };\\n}\\n```\\n\\nAnd now we can simply do\\n\\n```rust\\ngenerate_indices!(VecDeque<C>);\\ngenerate_indices!([C]);\\ngenerate_indices!(Vec<C>);\\n// generate_indices!([C; N], const N: usize);\\n```\\n\\nThe last type (I took the inspiration from the implementations of the `Index` and\\n`IndexMut` traits) is a bit problematic, because of the `const N: usize` part,\\nwhich I haven\'t managed to be able to parse. And that\'s how I got rid of the error.\\n\\n:::note\\n\\nIf I were to use 2D-indexing over `[C; N]` slices, I\'d probably just go with the\\ncopy-paste, cause the cost of this \u201cmonstrosity\u201d outweighs the benefits of no DRY.\\n\\n:::\\n\\n#### Cause of the problem\\n\\nThis issue is relatively funny. If you don\'t use any type aliases, just the raw\\ntypes, you\'ll get suggested certain changes by the _clippy_. For example if you\\nconsider the following piece of code\\n\\n```rust\\nfn get_sum(nums: &Vec<i32>) -> i32 {\\n nums.iter().sum()\\n}\\n\\nfn main() {\\n let nums = vec![1, 2, 3];\\n println!(\\"Sum: {}\\", get_sum(&nums));\\n}\\n```\\n\\nand you run _clippy_ on it, you will get\\n\\n```\\nChecking playground v0.0.1 (/playground)\\nwarning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do\\n --\x3e src/main.rs:1:18\\n |\\n1 | fn get_sum(nums: &Vec<i32>) -> i32 {\\n | ^^^^^^^^^ help: change this to: `&[i32]`\\n |\\n = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg\\n = note: `#[warn(clippy::ptr_arg)]` on by default\\n\\nwarning: `playground` (bin \\"playground\\") generated 1 warning\\n Finished dev [unoptimized + debuginfo] target(s) in 0.61s\\n```\\n\\nHowever, if you introduce a type alias, such as\\n\\n```rust\\ntype Numbers = Vec<i32>;\\n```\\n\\nThen _clippy_ won\'t say anything, cause there is literally nothing to suggest.\\nHowever the outcome is not the same\u2026\\n\\n[_advent of code_]: https://adventofcode.com\\n[bfs above]: #day-12-hill-climbing-algorithm"},{"id":"aoc-2022/1st-week","metadata":{"permalink":"/blog/aoc-2022/1st-week","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/01-week-1.md","source":"@site/blog/aoc-2022/01-week-1.md","title":"1st week of Advent of Code \'22 in Rust","description":"Surviving first week in Rust.","date":"2022-12-15T01:15:00.000Z","formattedDate":"December 15, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":12.4,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"1st week of Advent of Code \'22 in Rust","description":"Surviving first week in Rust.","date":"2022-12-15T01:15","slug":"aoc-2022/1st-week","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week"},"nextItem":{"title":"Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/intro"}},"content":"Let\'s go through the first week of [_Advent of Code_] in Rust.\\n\\n\x3c!--truncate--\x3e\\n\\n:::note\\n\\nIf you wish to have a look at the solutions, you can follow them on my [GitLab].\\nMore specifically in the [`/src/bin/`].\\n\\n:::\\n\\nI will try to summarize my experience with using Rust for the AoC. Trying it out\\nages ago, I believe it will be _pain and suffering_, but we will see. For each\\nday I will also try to give a tl;dr of the problem, so that you can better imagine\\nthe relation to my woes or :+1: moments.\\n\\n## [Day 1: Calorie Counting](https://adventofcode.com/2022/day/1)\\n\\n:::info tl;dr\\n\\nAs the name suggests, we get the calories of the food contained in the elves\\nbackpacks and we want to choose the elf that has the most food ;)\\n\\n:::\\n\\n> Wakey wakey!\\n\\nProgramming in Rust at 6am definitely hits. I\'ve also forgotten to mention how I\\nhandle samples. With each puzzle you usually get a sample input and expected\\noutput. You can use them to verify that your solution works, or usually doesn\'t.\\n\\nAt first I\'ve decided to put asserts into my `main`, something like\\n\\n```rust\\nassert_eq!(part_1(&sample), 24000);\\ninfo!(\\"Part 1: {}\\", part_1(&input));\\n\\nassert_eq!(part_2(&sample), 45000);\\ninfo!(\\"Part 2: {}\\", part_2(&input));\\n```\\n\\nHowever, once you get further, the sample input may take some time to run itself.\\nSo in the end, I have decided to turn them into unit tests:\\n\\n```rust\\n#[cfg(test)]\\nmod tests {\\n use super::*;\\n\\n #[test]\\n fn test_part_1() {\\n let sample = parse_input(\\"samples/day01.txt\\");\\n assert_eq!(part_1(&sample), 24000);\\n }\\n\\n #[test]\\n fn test_part_2() {\\n let sample = parse_input(\\"samples/day01.txt\\");\\n assert_eq!(part_2(&sample), 45000);\\n }\\n}\\n```\\n\\nAnd later on I have noticed, it\'s hard to tell the difference between the days,\\nso I further renamed the `mod` from generic `tests` to reflect the days.\\n\\nAlso after finishing the first day puzzle, I have installed an [`sccache`] to\\ncache the builds, so that the build time is lower, cause it was kinda unbearable.\\n\\n### Solution\\n\\nWell, it\'s a pretty simple problem. You just take the input, sum the calories and\\nfind the biggest one. However, if we try to generalize to more than the biggest\\none, the fun appears. We have few options:\\n\\n- keep all the calories, sort them, take what we need\\n- keep all the calories and use max heap\\n- use min heap and maintain at most N calories that we need\\n\\n## [Day 2: Rock Paper Scissors](https://adventofcode.com/2022/day/2)\\n\\n:::info tl;dr\\n\\nYou want to know what score did you achieve while playing _Rock Paper Scissors_.\\nAnd then you want to be strategic about it.\\n\\n:::\\n\\nApart from the technical details of the puzzle, it went relatively smooth.\\n\\n### Solution\\n\\nI took relatively na\xefve approach and then tried to simplify it.\\n\\n## [Day 3: Rucksack Reorganization](https://adventofcode.com/2022/day/3)\\n\\n:::info tl;dr\\n\\nLet\'s go reorganize elves\' backpacks! Each backpacks has 2 compartments and you\\nwant to find the common item among those compartments. Each of them has priority,\\nyou care only about the sum.\\n\\n:::\\n\\nThis is the day where I started to fight the compiler and neither of us decided\\nto give up. Let\'s dive into it \\\\o/\\n\\n:::tip Fun fact\\n\\nFighting the compiler took me 30 minutes.\\n\\n:::\\n\\nWe need to find a common item among 2 collections, that\'s an easy task, right?\\nWe can construct 2 sets and find an intersection:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3].iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5].iter().collect();\\n```\\n\\nNow, the first issue that we encounter is caused by the fact that we are using\\na slice (the `[\u2026]`), iterator of that returns **references** to the numbers.\\nAnd we get immediately yelled at by the compiler, because the numbers are discarded\\nafter running the `.collect`. To fix this, we can use `.into_iter`:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5].into_iter().collect();\\n```\\n\\nThis way the numbers will get copied instead of referenced. OK, let\'s find the\\nintersection of those 2 collections:\\n\\n```rust\\nprintln!(\\"Common elements: {:?}\\", top.intersection(&bottom));\\n```\\n\\n```\\nCommon elements: [3]\\n```\\n\\n:::caution\\n\\nNotice that we need to do `&bottom`. It explicitly specifies that `.intersection`\\n**borrows** the `bottom`, i.e. takes an immutable reference to it.\\n\\n:::\\n\\nThat\'s what we want, right? Looks like it! \\\\o/\\n\\nNext part wants us to find the common element among all of the backpacks. OK, so\\nthat should be fairly easy, we have an intersection and we want to find intersection\\nover all of them.\\n\\nLet\'s have a look at the type of the `.intersection`\\n\\n```rust\\npub fn intersection<\'a>(\\n\xa0\xa0\xa0\xa0&\'a self,\\n\xa0\xa0\xa0\xa0other: &\'a HashSet<T, S>\\n) -> Intersection<\'a, T, S>\\n```\\n\\nOK\u2026 Huh\u2026 But we have an example there!\\n\\n```rust\\nlet intersection: HashSet<_> = a.intersection(&b).collect();\\n```\\n\\nCool, that\'s all we need.\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n\\n```\\nIntersection: {3, 4}\\n```\\n\\nCool, so let\'s do the intersection with the `top_2`:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).collect();\\nlet intersection: HashSet<_> = intersection.intersection(&top_2).collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n\\nAnd we get yelled at by the compiler:\\n\\n```\\nerror[E0308]: mismatched types\\n --\x3e src/main.rs:10:58\\n |\\n10 | let intersection: HashSet<_> = intersection.intersection(&top_2).collect();\\n | ------------ ^^^^^^ expected `&i32`, found `i32`\\n | |\\n | arguments to this function are incorrect\\n |\\n = note: expected reference `&HashSet<&i32>`\\n found reference `&HashSet<i32>`\\n```\\n\\n/o\\\\ What the hell is going on here? Well, the funny thing is, that this operation\\ndoesn\'t return the elements themselves, but the references to them and when we pass\\nthe third set, it has just the values themselves, without any references.\\n\\n:::tip\\n\\nIt may seem as a very weird decision, but in fact it makes some sense\u2026 It allows\\nyou to do intersection of items that may not be possible to copy. Overall this is\\na \u201ctax\u201d for having a borrow checker ~~drilling your ass~~ having your back and\\nmaking sure you\'re not doing something naughty that may cause an **undefined**\\n**behavior**.\\n\\n:::\\n\\nTo resolve this we need to get an iterator that **clones** the elements:\\n\\n```rust\\nlet top: HashSet<i32> = [1, 2, 3, 4].into_iter().collect();\\nlet bottom: HashSet<i32> = [3, 4, 5, 6].into_iter().collect();\\nlet top_2: HashSet<i32> = [2, 3, 4, 5, 6].into_iter().collect();\\nlet bottom_2: HashSet<i32> = [4, 5, 6].into_iter().collect();\\n\\nlet intersection: HashSet<_> = top.intersection(&bottom).cloned().collect();\\nlet intersection: HashSet<_> = intersection.intersection(&top_2).cloned().collect();\\nlet intersection: HashSet<_> = intersection.intersection(&bottom_2).cloned().collect();\\nprintln!(\\"Intersection: {:?}\\", intersection);\\n```\\n\\n```\\nIntersection: {4}\\n```\\n\\n### Solution\\n\\nThe approach is pretty simple, if you omit the _1on1 with the compiler_. You just\\nhave some fun with the set operations :)\\n\\n## [Day 4: Camp Cleanup](https://adventofcode.com/2022/day/4)\\n\\n:::info tl;dr\\n\\nElves are cleaning up the camp and they got overlapping sections to clean up.\\nFind how many overlap and can take the day off.\\n\\n:::\\n\\n[`RangeInclusive`] is your friend not an enemy :)\\n\\n### Solution\\n\\nRelatively easy, you just need to parse the input and know what you want. Rust\'s\\n`RangeInclusive` type helped a lot, cause it took care of all abstractions.\\n\\n## [Day 5: Supply Stacks](https://adventofcode.com/2022/day/5)\\n\\n:::info tl;dr\\n\\nLet\'s play with stacks of crates.\\n\\n:::\\n\\nVery easy problem with very annoying input. You can judge yourself:\\n\\n```\\n [D]\\n[N] [C]\\n[Z] [M] [P]\\n 1 2 3\\n\\nmove 1 from 2 to 1\\nmove 3 from 1 to 3\\nmove 2 from 2 to 1\\nmove 1 from 1 to 2\\n```\\n\\nGood luck transforming that into something reasonable :)\\n\\n:::tip Fun fact\\n\\nTook me 40 minutes to parse this reasonably, including fighting the compiler.\\n\\n:::\\n\\n### Solution\\n\\nFor the initial solution I went with a manual solution (as in _I have done all_\\n_the work_. Later on I have decided to explore the `std` and interface of the\\n`std::vec::Vec` and found [`split_off`] which takes an index and splits (duh)\\nthe vector:\\n\\n```rust\\nlet mut vec = vec![1, 2, 3];\\nlet vec2 = vec.split_off(1);\\nassert_eq!(vec, [1]);\\nassert_eq!(vec2, [2, 3]);\\n```\\n\\nThis helped me simplify my solution a lot and also get rid of some _edge cases_.\\n\\n## [Day 6: Tuning Trouble](https://adventofcode.com/2022/day/6)\\n\\n:::info tl;dr\\n\\nFinding start of the message in a very weird protocol. Start of the message is\\ndenoted by $N$ unique consecutive characters.\\n\\n:::\\n\\n### Solution\\n\\nA lot of different approaches, knowing that we are dealing with input consisting\\nsolely of ASCII letters, I bit the bullet and went with sliding window and\\nconstructing sets from that window, checking if the set is as big as the window.\\n\\nOne possible optimization could consist of keeping a bit-vector (i.e. `usize`\\nvariable) of encountered characters and updating it as we go. However this has\\na different issue and that is removal of the characters from the left side of the\\nwindow. We don\'t know if the same character is not included later on.\\n\\nOther option is to do similar thing, but keeping the frequencies of the letters,\\nand again knowing we have only ASCII letters we can optimize by having a vector\\nof 26 elements that keeps count for each lowercase letter.\\n\\n## [Day 7: No Space Left On Device](https://adventofcode.com/2022/day/7)\\n\\n:::info tl;dr\\n\\nLet\'s simulate [`du`] to get some stats about our file system and then pinpoint\\ndirectories that take a lot of space and should be deleted.\\n\\n:::\\n\\n> I was waiting for this moment, and yet it got me!\\n> _imagine me swearing for hours_\\n\\n### Solution\\n\\nWe need to \u201c_build_\u201d a file system from the input that is given in a following form:\\n\\n```\\n$ cd /\\n$ ls\\ndir a\\n14848514 b.txt\\n8504156 c.dat\\ndir d\\n$ cd a\\n$ ls\\ndir e\\n29116 f\\n2557 g\\n62596 h.lst\\n$ cd e\\n$ ls\\n584 i\\n$ cd ..\\n$ cd ..\\n$ cd d\\n$ ls\\n4060174 j\\n8033020 d.log\\n5626152 d.ext\\n7214296 k\\n```\\n\\nThere are few ways in which you can achieve this and also you can assume some\\npreconditions, but why would we do that, right? :)\\n\\nYou can \u201cslap\u201d this in either [`HashMap`] or [`BTreeMap`] and call it a day.\\nAnd that would be boring\u2026\\n\\n:::tip\\n\\n`BTreeMap` is quite fitting for this, don\'t you think?\\n\\n:::\\n\\nI always wanted to try allocation on heap in Rust, so I chose to implement a tree.\\nI fought with the `Box<T>` for some time and was losing\u2026\\n\\nThen I looked up some implementations of trees or linked lists and decided to try\\n`Rc<Cell<T>>`. And I got my _ass whopped_ by the compiler once again. /o\\\\\\n\\n:::tip\\n\\n`Box<T>` represents a dynamically allocated memory on heap. It is a single pointer,\\nyou can imagine this as `std::unique_ptr<T>` in C++.\\n\\n`Rc<T>` represents a dynamically allocated memory on heap. On top of that it is\\n_reference counted_ (that\'s what the `Rc` stands for). You can imagine this as\\n`std::shared_ptr<T>` in C++.\\n\\nNow the fun stuff. Neither of them lets you **mutate** the contents of the memory.\\n\\n`Cell<T>` allows you to mutate the memory. Can be used reasonably with types that\\ncan be copied, because the memory safety is guaranteed by copying the contents\\nwhen there is more than one **mutable** reference to the memory.\\n\\n`RefCell<T>` is similar to the `Cell<T>`, but the borrowing rules (how many mutable\\nreferences are present) are checked dynamically.\\n\\nSo in the end, if you want something like `std::shared_ptr<T>` in Rust, you want\\nto have `Rc<RefCell<T>>`.\\n\\n:::\\n\\nSo, how are we going to represent the file system then? We will use an enumeration,\\nhehe, which is an algebraic data type that can store some stuff in itself :weary:\\n\\n```rust\\ntype FileHandle = Rc<RefCell<AocFile>>;\\n\\n#[derive(Debug)]\\nenum AocFile {\\n File(usize),\\n Directory(BTreeMap<String, FileHandle>),\\n}\\n```\\n\\nLet\'s go over it! `FileHandle` represents dynamically allocated `AocFile`, not\\nmuch to discuss. What does the `#[derive(Debug)]` do though? It lets us to print\\nout the value of that enumeration, it\'s derived, so it\'s not as good as if we had\\nimplemented it ourselves, but it\'s good enough for debugging, hence the name.\\n\\nNow to the fun part! `AocFile` value can be represented in two ways:\\n\\n- `File(usize)`, e.g. `AocFile::File(123)` and we can pattern match it, if we\\n need to\\n- `Directory(BTreeMap<String, FileHandle>)` will represent the directory and will\\n contain map matching the name of the files (or directories) within to their\\n respective file handles\\n\\nI will omit the details about constructing this file system, cause there are a lot\\nof technicalities introduced by the nature of the input. However if you are\\ninterested, you can have a look at my solution.\\n\\nWe need to find small enough directories and also find the smallest directory that\\nwill free enough space. Now the question is, how could we do that. And there are\\nmultiple ways I will describe.\\n\\nI have chosen to implement [_tree catamorphism_] :weary:. It is basically a fold\\nover a tree data structure. We descent down into the leaves and propagate computed\\nresults all the way to the root. You can also notice that this approach is very\\nsimilar to _dynamic programming_, we find overlapping sections of the computation\\nand try to minimize the additional work (in this case: we need to know sizes of\\nour descendants, but we have already been there).\\n\\nAnother approach that has been suggested to me few days later is running DFS on\\nthe graph. And, funnily enough, we would still need to combine what we found in\\nthe branches where we descent. So in the end, it would work very similarly to my\\nsolution.\\n\\nOne of the more exotic options would be precomputing the required information at\\nthe same time as parsing. That could be done by adding additional fields to the\\nnodes which would allow storing such information and updating it as we construct\\nthe file system.\\n\\n## Post Mortem\\n\\nThings that have been brought up in the discussion later on.\\n\\n### `Rc<T>` vs `Rc<RefCell<T>>`\\n\\nIt has been brought up that I have a contradicting statement regarding the\\ndynamically allocated memory. Specifically:\\n\\n- You can imagine `Rc<T>` as an `std::shared_ptr<T>` (in C++)\\n- When you want an equivalent of `std::shared_ptr<T>`, you want to use\\n `Rc<RefCell<T>>`\\n\\nNow, in Rust it is a bit more complicated, because the type that represents the\\n\u201cshared pointer\u201d is `Rc<T>`. What `RefCell<T>` does is making sure that there is\\nonly one \u201cowner\u201d of a mutable reference at a time (and dynamically, as opposed\\nto the `Cell<T>`).\\n\\nTherefore to be precise and correct about the equivalents of `std::shared_ptr<T>`\\nin Rust, we can say that\\n\\n- `Rc<T>` is an equivalent of a `const std::shared_ptr<T>`,\\n- and `Rc<RefCell<T>>` is an equivalent of a `std::shared_ptr<T>`.\\n\\nYou can easily see that they only differ in the mutability. (And even that is not\\nas simple as it seems, because there is also `Cell<T>`)\\n\\n[_advent of code_]: https://adventofcode.com\\n[gitlab]: https://gitlab.com/mfocko/advent-of-code-2022\\n[`/src/bin/`]: https://gitlab.com/mfocko/advent-of-code-2022/-/tree/main/src/bin\\n[`sccache`]: https://github.com/mozilla/sccache\\n[`rangeinclusive`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html\\n[`split_off`]: https://doc.rust-lang.org/std/vec/struct.Vec.html#method.split_off\\n[`du`]: https://www.man7.org/linux/man-pages/man1/du.1.html\\n[`hashmap`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html\\n[`btreemap`]: https://doc.rust-lang.org/std/collections/struct.BTreeMap.html\\n[_tree catamorphism_]: https://en.wikipedia.org/wiki/Catamorphism#Tree_fold"},{"id":"aoc-2022/intro","metadata":{"permalink":"/blog/aoc-2022/intro","editUrl":"https://github.com/mfocko/blog/tree/main/blog/aoc-2022/00-intro.md","source":"@site/blog/aoc-2022/00-intro.md","title":"Advent of Code \'22 in Rust","description":"Preparing for Advent of Code \'22.","date":"2022-12-14T21:45:00.000Z","formattedDate":"December 14, 2022","tags":[{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code"},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022"},{"label":"rust","permalink":"/blog/tags/rust"}],"readingTime":8.665,"hasTruncateMarker":true,"authors":[{"name":"Matej Focko","email":"me+blog@mfocko.xyz","title":"a.k.a. @mf","url":"https://gitlab.com/mfocko","imageURL":"https://github.com/mfocko.png","key":"mf"}],"frontMatter":{"title":"Advent of Code \'22 in Rust","description":"Preparing for Advent of Code \'22.","date":"2022-12-14T21:45","slug":"aoc-2022/intro","authors":"mf","tags":["advent-of-code","advent-of-code-2022","rust"],"hide_table_of_contents":false},"unlisted":false,"prevItem":{"title":"1st week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/1st-week"}},"content":"Let\'s talk about the preparations for this year\'s [_Advent of Code_].\\n\\n\x3c!--truncate--\x3e\\n\\n## Choosing a language\\n\\nWhen choosing a language for AoC, you usually want a language that gives you a\\nquick feedback which allows you to iterate quickly to the solution of the puzzle.\\nOne of the most common choices is Python, many people also use JavaScript or Ruby.\\n\\nGiven the competitive nature of the AoC and popularity among competitive programming,\\nC++ might be also a very good choice. Only if you are familiar with it, I guess\u2026\\n\\nIf you want a challenge, you might also choose to rotate the languages each day.\\nThough I prefer to use only one language.\\n\\nFor this year I have been deciding between _Rust_, _C++_ and _Pascal_ or _Ada_.\\n\\nI have tried Rust last year and have survived with it for 3 days and then gave\\nup and switched to _Kotlin_, which was pretty good given it is \u201cJava undercover\u201d.\\nI pretty much like the ideas behind Rust, I am not sure about the whole cult and\\nimplementation of those ideas though. After some years with C/C++, I would say\\nthat Rust feels _too safe_ for my taste and tries to \u201c_punish me_\u201d even for the\\nmost trivial things.\\n\\nC++ is a very robust, but also comes with a wide variety of options providing you\\nthe ability to shoot yourself in the leg. I have tried to solve few days of previous\\nAdvent of Code events, it was _relatively easy_ to solve the problems in C++, given\\nthat I do not admit writing my own iterator for `enumerate`\u2026\\n\\nPascal or Ada were meme choices :) Ada is heavily inspired by Pascal and has a\\npretty nice standard library that offers enough to be able to quickly solve some\\nproblems in it. However the toolkit is questionable :/\\n\\n## Choosing libraries\\n\\n## Preparations for Rust\\n\\nAll of the sources, later on including solutions, can be found at my\\n[GitLab].\\n\\n### Toolkit\\n\\nSince we are using Rust, we are going to use a [Cargo] and more than likely VSCode\\nwith [`rust-analyzer`]. Because of my choice of libraries, we will also introduce\\na `.envrc` file that can be used by [`direnv`], which allows you to set specific\\nenvironment variables when you enter a directory. In our case, we will use\\n\\n```bash\\n# to show nice backtrace when using the color-eyre\\nexport RUST_BACKTRACE=1\\n\\n# to catch logs generated by tracing\\nexport RUST_LOG=trace\\n```\\n\\nAnd for the one of the most obnoxious things ever, we will use a script to download\\nthe inputs instead of \u201c_clicking, opening and copying to a file_\u201d[^1]. There is\\nno need to be _fancy_, so we will adjust Python script by Martin[^2].\\n\\n```py\\n#!/usr/bin/env python3\\n\\nimport datetime\\nimport yaml\\nimport requests\\nimport sys\\n\\n\\ndef load_config():\\n with open(\\"env.yaml\\", \\"r\\") as f:\\n js = yaml.load(f, Loader=yaml.Loader)\\n return js[\\"session\\"], js[\\"year\\"]\\n\\n\\ndef get_input(session, year, day):\\n return requests.get(\\n f\\"https://adventofcode.com/{year}/day/{day}/input\\",\\n cookies={\\"session\\": session},\\n headers={\\n \\"User-Agent\\": \\"{repo} by {mail}\\".format(\\n repo=\\"gitlab.com/mfocko/advent-of-code-2022\\",\\n mail=\\"me@mfocko.xyz\\",\\n )\\n },\\n ).content.decode(\\"utf-8\\")\\n\\n\\ndef main():\\n day = datetime.datetime.now().day\\n if len(sys.argv) == 2:\\n day = sys.argv[1]\\n\\n session, year = load_config()\\n problem_input = get_input(session, year, day)\\n\\n with open(f\\"./inputs/day{day:>02}.txt\\", \\"w\\") as f:\\n f.write(problem_input)\\n\\n\\nif __name__ == \\"__main__\\":\\n main()\\n```\\n\\nIf the script is called without any arguments, it will deduce the day from the\\nsystem, so we do not need to change the day every morning. It also requires a\\nconfiguration file:\\n\\n```yaml\\n# env.yaml\\nsession: \u2039your session cookie\u203a\\nyear: 2022\\n```\\n\\n### Libraries\\n\\nLooking at the list of the libraries, I have chosen \u201ca lot\u201d of them. Let\'s walk\\nthrough each of them.\\n\\n[`tracing`] and [`tracing-subscriber`] are the crates that can be used for tracing\\nand logging of your Rust programs, there are also other crates that can help you\\nwith providing backtrace to the Sentry in case you have deployed your application\\nsomewhere and you want to watch over it. In our use case we will just utilize the\\nmacros for debugging in the terminal.\\n\\n[`thiserror`], [`anyhow`] and [`color-eyre`] are used for error reporting.\\n`thiserror` is a very good choice for libraries, cause it extends the `Error`\\nfrom the `std` and allows you to create more convenient error types. Next is\\n`anyhow` which kinda builds on top of the `thiserror` and provides you with simpler\\nerror handling in binaries[^3]. And finally we have `color-eyre` which, as I found\\nout later, is a colorful (_wink wink_) extension of `eyre` which is fork of `anyhow`\\nwhile supporting customized reports.\\n\\nIn the end I have decided to remove `thiserror` and `anyhow`, since first one is\\nsuitable for libraries and the latter was basically fully replaced by `{color-,}eyre`.\\n\\n[`regex`] and [`lazy_static`] are a very good and also, I hope, self-explanatory\\ncombination. `lazy_static` allows you to have static variables that must be initialized\\nduring runtime.\\n\\n[`itertools`] provides some nice extensions to the iterators from the `std`.\\n\\n### My own \u201clibrary\u201d\\n\\nWhen creating the crate for this year\'s Advent of Code, I have chosen a library\\ntype. Even though standard library is huge, some things might not be included and\\nalso we can follow _KISS_. I have 2 modules that my \u201clibrary\u201d exports, one for\\nparsing and one for 2D vector (that gets used quite often during Advent of Code).\\n\\nKey part is, of course, processing the input and my library exports following\\nfunctions that get used a lot:\\n\\n```rust\\n/// Reads file to the string.\\npub fn file_to_string<P: AsRef<Path>>(pathname: P) -> String;\\n\\n/// Reads file and returns it as a vector of characters.\\npub fn file_to_chars<P: AsRef<Path>>(pathname: P) -> Vec<char>;\\n\\n/// Reads file and returns a vector of parsed structures. Expects each structure\\n/// on its own line in the file. And `T` needs to implement `FromStr` trait.\\npub fn file_to_structs<P: AsRef<Path>, T: FromStr>(pathname: P) -> Vec<T>\\nwhere\\n <T as FromStr>::Err: Debug;\\n\\n/// Converts iterator over strings to a vector of parsed structures. `T` needs\\n/// to implement `FromStr` trait and its error must derive `Debug` trait.\\npub fn strings_to_structs<T: FromStr, U>(\\n iter: impl Iterator<Item = U>\\n) -> Vec<T>\\nwhere\\n <T as std::str::FromStr>::Err: std::fmt::Debug,\\n U: Deref<Target = str>;\\n\\n/// Reads file and returns it as a vector of its lines.\\npub fn file_to_lines<P: AsRef<Path>>(pathname: P) -> Vec<String>;\\n```\\n\\nAs for the vector, I went with a rather simple implementation that allows only\\naddition of the vectors for now and accessing the elements via functions `x()`\\nand `y()`. Also the vector is generic, so we can use it with any numeric type we\\nneed.\\n\\n### Skeleton\\n\\nWe can also prepare a template to quickly bootstrap each of the days. We know\\nthat each puzzle has 2 parts, which means that we can start with 2 functions that\\nwill solve them.\\n\\n```rust\\nfn part1(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn part2(input: &Input) -> Output {\\n todo!()\\n}\\n```\\n\\nBoth functions take reference to the input and return some output (in majority\\nof puzzles, it is the same type). `todo!()` can be used as a nice placeholder,\\nit also causes a panic when reached and we could also provide some string with\\nan explanation, e.g. `todo!(\\"part 1\\")`. We have not given functions a specific\\ntype and to avoid as much copy-paste as possible, we will introduce type aliases.\\n\\n```rust\\ntype Input = String;\\ntype Output = i32;\\n```\\n\\n:::tip\\n\\nThis allows us to quickly adjust the types only in one place without the need to\\ndo _regex-replace_ or replace them manually.\\n\\n:::\\n\\nFor each day we get a personalized input that is provided as a text file. Almost\\nall the time, we would like to get some structured type out of that input, and\\ntherefore it makes sense to introduce a new function that will provide the parsing\\nof the input.\\n\\n```rust\\nfn parse_input(path: &str) -> Input {\\n todo!()\\n}\\n```\\n\\nThis \u201cparser\u201d will take a path to the file, just in case we would like to run the\\nsample instead of input.\\n\\nOK, so now we can write a `main` function that will take all of the pieces and\\nrun them.\\n\\n```rust\\nfn main() {\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n println!(\\"Part 1: {}\\", part_1(&input));\\n println!(\\"Part 2: {}\\", part_2(&input));\\n}\\n```\\n\\nThis would definitely do :) But we have installed a few libraries and we want to\\nuse them. In this part we are going to utilize _[`tracing`]_ (for tracing, duh\u2026)\\nand _[`color-eyre`]_ (for better error reporting, e.g. from parsing).\\n\\n```rust\\nfn main() -> Result<()> {\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n info!(\\"Part 1: {}\\", part_1(&input));\\n info!(\\"Part 2: {}\\", part_2(&input));\\n\\n Ok(())\\n}\\n```\\n\\nThe first statement will set up tracing and configure it to print out the logs to\\nterminal, based on the environment variable. We also change the formatting a bit,\\nsince we do not need all the _fancy_ features of the logger. Pure initialization\\nwould get us logs like this:\\n\\n```\\n2022-12-11T19:53:19.975343Z INFO day01: Part 1: 0\\n```\\n\\nHowever after running that command, we will get the following:\\n\\n```\\n INFO src/bin/day01.rs:35: Part 1: 0\\n```\\n\\nAnd the `color_eyre::install()?` is quite straightforward. We just initialize the\\nerror reporting by _color eyre_.\\n\\n:::caution\\n\\nNotice that we had to add `Ok(())` to the end of the function and adjust the\\nreturn type of the `main` to `Result<()>`. It is caused by the _color eyre_ that\\ncan be installed only once and therefore it can fail, that is how we got the `?`\\nat the end of the `::install` which _unwraps_ the **\xbbresult\xab** of the installation.\\n\\n:::\\n\\nOverall we will get to a template like this:\\n\\n```rust\\nuse aoc_2022::*;\\n\\nuse color_eyre::eyre::Result;\\nuse tracing::info;\\nuse tracing_subscriber::EnvFilter;\\n\\ntype Input = String;\\ntype Output = i32;\\n\\nfn parse_input(path: &str) -> Input {\\n todo!()\\n}\\n\\nfn part1(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn part2(input: &Input) -> Output {\\n todo!()\\n}\\n\\nfn main() -> Result<()> {\\n tracing_subscriber::fmt()\\n .with_env_filter(EnvFilter::from_default_env())\\n .with_target(false)\\n .with_file(true)\\n .with_line_number(true)\\n .without_time()\\n .compact()\\n .init();\\n color_eyre::install()?;\\n\\n let input = parse_input(\\"inputs/dayXX.txt\\");\\n\\n info!(\\"Part 1: {}\\", part_1(&input));\\n info!(\\"Part 2: {}\\", part_2(&input));\\n\\n Ok(())\\n}\\n```\\n\\n[^1]:\\n Copy-pasting might be a relaxing thing to do, but you can also discover\\n nasty stuff about your PC. See [this Reddit post and the comment].\\n\\n[^2]: [GitHub profile](https://github.com/martinjonas)\\n[^3]:\\n Even though you can use it even for libraries, but handling errors from\\n libraries using `anyhow` is nasty\u2026 You will be the stinky one ;)\\n\\n[_advent of code_]: https://adventofcode.com\\n[gitlab]: https://gitlab.com/mfocko/advent-of-code-2022\\n[cargo]: https://doc.rust-lang.org/cargo/\\n[`rust-analyzer`]: https://rust-analyzer.github.io/\\n[`direnv`]: https://direnv.net/\\n[`tracing`]: https://crates.io/crates/tracing\\n[`tracing-subscriber`]: https://crates.io/crates/tracing-subscriber\\n[`thiserror`]: https://crates.io/crates/thiserror\\n[`anyhow`]: https://crates.io/crates/anyhow\\n[`color-eyre`]: https://crates.io/crates/color-eyre\\n[`regex`]: https://crates.io/crates/regex\\n[`lazy_static`]: https://crates.io/crates/lazy_static\\n[`itertools`]: https://crates.io/crates/itertools\\n[this reddit post and the comment]: https://www.reddit.com/r/adventofcode/comments/zb98pn/comment/iyq0ono"}]}')}}]); \ No newline at end of file diff --git a/assets/js/595c7293.8ff94b95.js b/assets/js/595c7293.8ff94b95.js deleted file mode 100644 index 7b96390..0000000 --- a/assets/js/595c7293.8ff94b95.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5634],{58396:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var i=t(85893),s=t(11151);const r={id:"seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n"},o="8th seminar bonus assignment",c={id:"bonuses/seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n",source:"@site/c/bonuses/08.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-08",permalink:"/c/bonuses/seminar-08",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/bonuses/08.md",tags:[],version:"current",lastUpdatedAt:1704571953,formattedLastUpdatedAt:"Jan 6, 2024",frontMatter:{id:"seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n"},sidebar:"autogeneratedBar",previous:{title:"5th and 6th seminar",permalink:"/c/bonuses/seminar-05-06"},next:{title:"10th seminar",permalink:"/c/bonuses/seminar-10"}},a={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Warning",id:"warning",level:2},{value:"Testing",id:"testing",level:2},{value:"Task no. 1: Counting (0.75 K\u20a1)",id:"task-no-1-counting-075-k",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Bonus part (0.75 K\u20a1)",id:"bonus-part-075-k",level:3},{value:"Task no. 2: Weird trees (1 K\u20a1)",id:"task-no-2-weird-trees-1-k",level:2},{value:"Submitting",id:"submitting",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"8th-seminar-bonus-assignment",children:"8th seminar bonus assignment"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"pathname:///files/c/bonuses/08.tar.gz",children:"Source"})}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.p,{children:"In this bonus you can implement two tasks, one of them has a bonus part with generic\nsolution."}),"\n",(0,i.jsx)(n.p,{children:"One is focused on counting ananas or in case of generic version any substring in\nthe file, but with a restriction on the function you use."}),"\n",(0,i.jsx)(n.p,{children:"Other one has a more algorithmic spirit."}),"\n",(0,i.jsx)(n.p,{children:"For this bonus you can get at maximum 2.5 K\u20a1."}),"\n",(0,i.jsx)(n.h2,{id:"warning",children:"Warning"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"DO NOT COMMIT test data"})," to your own git repository, since the tests include\nfiles that exceed 10MB by themselves. Even if they are on separate branch, they\ntake up the space."]}),"\n",(0,i.jsx)(n.h2,{id:"testing",children:"Testing"}),"\n",(0,i.jsxs)(n.p,{children:["For testing you are provided with python script (requires ",(0,i.jsx)(n.code,{children:"click"})," to be installed:\n",(0,i.jsx)(n.code,{children:"pip3 install --user click"}),") and ",(0,i.jsx)(n.code,{children:"Makefile"})," that provides following targets:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"check-counting"})," - runs the ",(0,i.jsx)(n.code,{children:"counting"})," tests"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"check-counting-bonus"})," - runs the ",(0,i.jsx)(n.code,{children:"counting"})," tests with bonus implemented"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"check"})," - runs both ",(0,i.jsx)(n.code,{children:"counting"})," and ",(0,i.jsx)(n.code,{children:"counting-bonus"})," tests"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"clean"})," - removes output files from the test runs"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"task-no-1-counting-075-k",children:"Task no. 1: Counting (0.75 K\u20a1)"}),"\n",(0,i.jsx)(n.p,{children:"Your first task is to make smallish program that counts occurences of specific\n(or given) word from file and writes the number to other file."}),"\n",(0,i.jsx)(n.p,{children:"Usage of the program is:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Usage: ./counting <input-file> <output-file> [string-to-be-counted]\n"})}),"\n",(0,i.jsx)(n.p,{children:"Arguments that are passed to the program represent:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"<input-file>"})," - path to the file where we count the words"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"<output-file>"})," - path to the file where we output the count"]}),"\n",(0,i.jsxs)(n.li,{children:["(optional argument) ",(0,i.jsx)(n.code,{children:"[string-to-be-counted]"})," - in case you implement bonus,\notherwise we default to word ",(0,i.jsx)(n.code,{children:"ananas"})," ;)"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"In skeleton you are given 3 empty, but documented, functions to implement."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"count_anything"})," - function accepts input file and substring to be counted in\nthe file, returns the count."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"count_ananas"})," - same as ",(0,i.jsx)(n.code,{children:"count_anything"}),", but specialized for ananases, the\ndefault implementation from the skeleton expects you to implement ",(0,i.jsx)(n.code,{children:"count_anything"}),"\nand therefore it just calls the other function."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"write_number"})," - function that writes the number to the file, why would you\nneed the function is explained later :)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsxs)(n.p,{children:["For manipulation with the files you are only allowed to use ",(0,i.jsx)(n.code,{children:"fopen"}),", ",(0,i.jsx)(n.code,{children:"fclose"}),",\n",(0,i.jsx)(n.code,{children:"fgetc"})," and ",(0,i.jsx)(n.code,{children:"fputc"}),". Functions like ",(0,i.jsx)(n.code,{children:"fprintf"})," (except for ",(0,i.jsx)(n.code,{children:"stderr"})," or logging) and\n",(0,i.jsx)(n.code,{children:"fscanf"})," are ",(0,i.jsx)(n.strong,{children:"forbidden"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"In case you struggle and want to use one of those functions, the solution will be\npenalized by 50% of points."}),"\n",(0,i.jsx)(n.h3,{id:"bonus-part-075-k",children:"Bonus part (0.75 K\u20a1)"}),"\n",(0,i.jsxs)(n.p,{children:["Bonus part of this assignment is to implement ",(0,i.jsx)(n.code,{children:"count_anything"})," rather than ",(0,i.jsx)(n.code,{children:"count_ananas"}),"."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Smaller hint: This task does not need dynamic allocation :) You just need one\ngood helper function and the right idea ;)"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"task-no-2-weird-trees-1-k",children:"Task no. 2: Weird trees (1 K\u20a1)"}),"\n",(0,i.jsxs)(n.p,{children:["In this task we are crossing our paths with ",(0,i.jsx)(n.em,{children:"algorithms and data structures"}),".\nYour task is to write a program that constructs tree from the file that is given\nas an argument and pretty-prints it."]}),"\n",(0,i.jsxs)(n.p,{children:["Input file consists of lines, that include ",(0,i.jsx)(n.code,{children:"key"})," and ",(0,i.jsx)(n.code,{children:"rank"})," in form ",(0,i.jsx)(n.code,{children:"key;rank"}),"\nor ",(0,i.jsx)(n.code,{children:"nil"}),". Why would we have ",(0,i.jsx)(n.code,{children:"nil"})," in a file? The file represents pre-order iteration\nthrough the tree. Leaves never have rank different than 0, so you can safely assume\n2 non-existing ",(0,i.jsx)(n.code,{children:"nil"}),"s in the input after you read such node ;)"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"Example input file"}),(0,i.jsx)("th",{children:"Tree it represents"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8;4\n5;3\n3;2\n2;1\n1;0\nnil\n4;0\n7;1\n6;0\nnil\n11;2\n10;1\n9;0\nnil\n12;0\n"})})}),(0,i.jsx)("td",{children:(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"tree",src:t(30073).Z+"",width:"633",height:"684"})})})]})]}),"\n",(0,i.jsxs)(n.p,{children:["In this task you are only provided with different trees in the ",(0,i.jsx)(n.code,{children:"test-trees"})," directory.\nImplementation and format of the pretty-print is totally up to you. :)"]}),"\n",(0,i.jsx)(n.p,{children:"Example of mine for the tree above:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8 (rank = 4)\n+-- 5 (rank = 3)\n| +-- 3 (rank = 2)\n| | +-- 2 (rank = 1)\n| | | +-- 1 (rank = 0)\n| | +-- 4 (rank = 0)\n| +-- 7 (rank = 1)\n| +-- 6 (rank = 0)\n+-- 11 (rank = 2)\n +-- 10 (rank = 1)\n | +-- 9 (rank = 0)\n +-- 12 (rank = 0)\n"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Can you find out what are those trees? :)"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"submitting",children:"Submitting"}),"\n",(0,i.jsx)(n.p,{children:"In case you have any questions, feel free to reach out to me."}),"\n",(0,i.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},30073:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/tree-c9e37f87f9095c00fad33ea034485ce6.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>o});var i=t(67294);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/595c7293.e8aa1f47.js b/assets/js/595c7293.e8aa1f47.js new file mode 100644 index 0000000..fc8d729 --- /dev/null +++ b/assets/js/595c7293.e8aa1f47.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5634],{58396:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>c,toc:()=>l});var i=t(85893),s=t(11151);const r={id:"seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n"},o="8th seminar bonus assignment",c={id:"bonuses/seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n",source:"@site/c/bonuses/08.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-08",permalink:"/c/bonuses/seminar-08",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/bonuses/08.md",tags:[],version:"current",lastUpdatedAt:1706528814,formattedLastUpdatedAt:"Jan 29, 2024",frontMatter:{id:"seminar-08",title:"8th seminar",description:"Manipulating with files only char-by-char and a magic tree.\n"},sidebar:"autogeneratedBar",previous:{title:"5th and 6th seminar",permalink:"/c/bonuses/seminar-05-06"},next:{title:"10th seminar",permalink:"/c/bonuses/seminar-10"}},a={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Warning",id:"warning",level:2},{value:"Testing",id:"testing",level:2},{value:"Task no. 1: Counting (0.75 K\u20a1)",id:"task-no-1-counting-075-k",level:2},{value:"Requirements",id:"requirements",level:3},{value:"Bonus part (0.75 K\u20a1)",id:"bonus-part-075-k",level:3},{value:"Task no. 2: Weird trees (1 K\u20a1)",id:"task-no-2-weird-trees-1-k",level:2},{value:"Submitting",id:"submitting",level:2}];function d(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"8th-seminar-bonus-assignment",children:"8th seminar bonus assignment"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.a,{href:"pathname:///files/c/bonuses/08.tar.gz",children:"Source"})}),"\n",(0,i.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,i.jsx)(n.p,{children:"In this bonus you can implement two tasks, one of them has a bonus part with generic\nsolution."}),"\n",(0,i.jsx)(n.p,{children:"One is focused on counting ananas or in case of generic version any substring in\nthe file, but with a restriction on the function you use."}),"\n",(0,i.jsx)(n.p,{children:"Other one has a more algorithmic spirit."}),"\n",(0,i.jsx)(n.p,{children:"For this bonus you can get at maximum 2.5 K\u20a1."}),"\n",(0,i.jsx)(n.h2,{id:"warning",children:"Warning"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.strong,{children:"DO NOT COMMIT test data"})," to your own git repository, since the tests include\nfiles that exceed 10MB by themselves. Even if they are on separate branch, they\ntake up the space."]}),"\n",(0,i.jsx)(n.h2,{id:"testing",children:"Testing"}),"\n",(0,i.jsxs)(n.p,{children:["For testing you are provided with python script (requires ",(0,i.jsx)(n.code,{children:"click"})," to be installed:\n",(0,i.jsx)(n.code,{children:"pip3 install --user click"}),") and ",(0,i.jsx)(n.code,{children:"Makefile"})," that provides following targets:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"check-counting"})," - runs the ",(0,i.jsx)(n.code,{children:"counting"})," tests"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"check-counting-bonus"})," - runs the ",(0,i.jsx)(n.code,{children:"counting"})," tests with bonus implemented"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"check"})," - runs both ",(0,i.jsx)(n.code,{children:"counting"})," and ",(0,i.jsx)(n.code,{children:"counting-bonus"})," tests"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"clean"})," - removes output files from the test runs"]}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"task-no-1-counting-075-k",children:"Task no. 1: Counting (0.75 K\u20a1)"}),"\n",(0,i.jsx)(n.p,{children:"Your first task is to make smallish program that counts occurences of specific\n(or given) word from file and writes the number to other file."}),"\n",(0,i.jsx)(n.p,{children:"Usage of the program is:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Usage: ./counting <input-file> <output-file> [string-to-be-counted]\n"})}),"\n",(0,i.jsx)(n.p,{children:"Arguments that are passed to the program represent:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"<input-file>"})," - path to the file where we count the words"]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"<output-file>"})," - path to the file where we output the count"]}),"\n",(0,i.jsxs)(n.li,{children:["(optional argument) ",(0,i.jsx)(n.code,{children:"[string-to-be-counted]"})," - in case you implement bonus,\notherwise we default to word ",(0,i.jsx)(n.code,{children:"ananas"})," ;)"]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"In skeleton you are given 3 empty, but documented, functions to implement."}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"count_anything"})," - function accepts input file and substring to be counted in\nthe file, returns the count."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"count_ananas"})," - same as ",(0,i.jsx)(n.code,{children:"count_anything"}),", but specialized for ananases, the\ndefault implementation from the skeleton expects you to implement ",(0,i.jsx)(n.code,{children:"count_anything"}),"\nand therefore it just calls the other function."]}),"\n",(0,i.jsxs)(n.li,{children:[(0,i.jsx)(n.code,{children:"write_number"})," - function that writes the number to the file, why would you\nneed the function is explained later :)"]}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"requirements",children:"Requirements"}),"\n",(0,i.jsxs)(n.p,{children:["For manipulation with the files you are only allowed to use ",(0,i.jsx)(n.code,{children:"fopen"}),", ",(0,i.jsx)(n.code,{children:"fclose"}),",\n",(0,i.jsx)(n.code,{children:"fgetc"})," and ",(0,i.jsx)(n.code,{children:"fputc"}),". Functions like ",(0,i.jsx)(n.code,{children:"fprintf"})," (except for ",(0,i.jsx)(n.code,{children:"stderr"})," or logging) and\n",(0,i.jsx)(n.code,{children:"fscanf"})," are ",(0,i.jsx)(n.strong,{children:"forbidden"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"In case you struggle and want to use one of those functions, the solution will be\npenalized by 50% of points."}),"\n",(0,i.jsx)(n.h3,{id:"bonus-part-075-k",children:"Bonus part (0.75 K\u20a1)"}),"\n",(0,i.jsxs)(n.p,{children:["Bonus part of this assignment is to implement ",(0,i.jsx)(n.code,{children:"count_anything"})," rather than ",(0,i.jsx)(n.code,{children:"count_ananas"}),"."]}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Smaller hint: This task does not need dynamic allocation :) You just need one\ngood helper function and the right idea ;)"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"task-no-2-weird-trees-1-k",children:"Task no. 2: Weird trees (1 K\u20a1)"}),"\n",(0,i.jsxs)(n.p,{children:["In this task we are crossing our paths with ",(0,i.jsx)(n.em,{children:"algorithms and data structures"}),".\nYour task is to write a program that constructs tree from the file that is given\nas an argument and pretty-prints it."]}),"\n",(0,i.jsxs)(n.p,{children:["Input file consists of lines, that include ",(0,i.jsx)(n.code,{children:"key"})," and ",(0,i.jsx)(n.code,{children:"rank"})," in form ",(0,i.jsx)(n.code,{children:"key;rank"}),"\nor ",(0,i.jsx)(n.code,{children:"nil"}),". Why would we have ",(0,i.jsx)(n.code,{children:"nil"})," in a file? The file represents pre-order iteration\nthrough the tree. Leaves never have rank different than 0, so you can safely assume\n2 non-existing ",(0,i.jsx)(n.code,{children:"nil"}),"s in the input after you read such node ;)"]}),"\n",(0,i.jsxs)("table",{children:[(0,i.jsxs)("tr",{children:[(0,i.jsx)("th",{children:"Example input file"}),(0,i.jsx)("th",{children:"Tree it represents"})]}),(0,i.jsxs)("tr",{children:[(0,i.jsx)("td",{children:(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8;4\n5;3\n3;2\n2;1\n1;0\nnil\n4;0\n7;1\n6;0\nnil\n11;2\n10;1\n9;0\nnil\n12;0\n"})})}),(0,i.jsx)("td",{children:(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"tree",src:t(30073).Z+"",width:"633",height:"684"})})})]})]}),"\n",(0,i.jsxs)(n.p,{children:["In this task you are only provided with different trees in the ",(0,i.jsx)(n.code,{children:"test-trees"})," directory.\nImplementation and format of the pretty-print is totally up to you. :)"]}),"\n",(0,i.jsx)(n.p,{children:"Example of mine for the tree above:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"8 (rank = 4)\n+-- 5 (rank = 3)\n| +-- 3 (rank = 2)\n| | +-- 2 (rank = 1)\n| | | +-- 1 (rank = 0)\n| | +-- 4 (rank = 0)\n| +-- 7 (rank = 1)\n| +-- 6 (rank = 0)\n+-- 11 (rank = 2)\n +-- 10 (rank = 1)\n | +-- 9 (rank = 0)\n +-- 12 (rank = 0)\n"})}),"\n",(0,i.jsxs)(n.blockquote,{children:["\n",(0,i.jsx)(n.p,{children:"Can you find out what are those trees? :)"}),"\n"]}),"\n",(0,i.jsx)(n.h2,{id:"submitting",children:"Submitting"}),"\n",(0,i.jsx)(n.p,{children:"In case you have any questions, feel free to reach out to me."}),"\n",(0,i.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},30073:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/tree-c9e37f87f9095c00fad33ea034485ce6.png"},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>o});var i=t(67294);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/66d5ef6c.f31d2aab.js b/assets/js/66d5ef6c.f31d2aab.js new file mode 100644 index 0000000..a8cd52e --- /dev/null +++ b/assets/js/66d5ef6c.f31d2aab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9228],{4087:l=>{l.exports=JSON.parse('[{"label":"rust","permalink":"/blog/tags/rust","count":6},{"label":"memory safety","permalink":"/blog/tags/memory-safety","count":1},{"label":"cult","permalink":"/blog/tags/cult","count":1},{"label":"hype","permalink":"/blog/tags/hype","count":1},{"label":"\ud83c\udfed","permalink":"/blog/tags/\ud83c\udfed","count":1},{"label":"red-hat","permalink":"/blog/tags/red-hat","count":1},{"label":"copr","permalink":"/blog/tags/copr","count":1},{"label":"admin","permalink":"/blog/tags/admin","count":1},{"label":"vps","permalink":"/blog/tags/vps","count":1},{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code","count":5},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022","count":5},{"label":"cpp","permalink":"/blog/tags/cpp","count":1},{"label":"leetcode","permalink":"/blog/tags/leetcode","count":1},{"label":"iterators","permalink":"/blog/tags/iterators","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/66d5ef6c.fc107ca5.js b/assets/js/66d5ef6c.fc107ca5.js deleted file mode 100644 index 0d311cb..0000000 --- a/assets/js/66d5ef6c.fc107ca5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9228],{4087:l=>{l.exports=JSON.parse('[{"label":"\ud83c\udfed","permalink":"/blog/tags/\ud83c\udfed","count":1},{"label":"red-hat","permalink":"/blog/tags/red-hat","count":1},{"label":"copr","permalink":"/blog/tags/copr","count":1},{"label":"admin","permalink":"/blog/tags/admin","count":1},{"label":"vps","permalink":"/blog/tags/vps","count":1},{"label":"advent-of-code","permalink":"/blog/tags/advent-of-code","count":5},{"label":"advent-of-code-2022","permalink":"/blog/tags/advent-of-code-2022","count":5},{"label":"rust","permalink":"/blog/tags/rust","count":5},{"label":"cpp","permalink":"/blog/tags/cpp","count":1},{"label":"leetcode","permalink":"/blog/tags/leetcode","count":1},{"label":"iterators","permalink":"/blog/tags/iterators","count":1}]')}}]); \ No newline at end of file diff --git a/assets/js/6875c492.5be02386.js b/assets/js/6875c492.70016d14.js similarity index 98% rename from assets/js/6875c492.5be02386.js rename to assets/js/6875c492.70016d14.js index 3635ea8..f227346 100644 --- a/assets/js/6875c492.5be02386.js +++ b/assets/js/6875c492.70016d14.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8610],{99703:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(95999),a=n(32244),i=n(85893);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),l&&(0,i.jsx)(a.Z,{permalink:l,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},79985:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(9460),a=n(30390),i=n(85893);function l(e){let{items:t,component:n=a.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.n,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},41714:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(67294);var s=n(36905),a=n(95999),i=n(88824),l=n(10833),r=n(35281),o=n(39960),c=n(61460),g=n(99703),d=n(90197),u=n(79985),h=n(22212),p=n(92503),m=n(85893);function x(e){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>e(t,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(l.d,{title:n}),(0,m.jsx)(d.Z,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const l=x(t);return(0,m.jsxs)(c.Z,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(h.Z,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.Z,{as:"h1",children:l}),(0,m.jsx)(o.Z,{href:t.allTagsPath,children:(0,m.jsx)(a.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.Z,{items:n}),(0,m.jsx)(g.Z,{metadata:i})]})}function f(e){return(0,m.jsxs)(l.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},22212:(e,t,n)=>{n.d(t,{Z:()=>h});n(67294);var s=n(36905),a=n(95999),i=n(35742),l=n(85893);function r(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var g=n(35281),d=n(59047);function u(e){let{className:t}=e;return(0,l.jsx)(d.Z,{type:"caution",title:(0,l.jsx)(r,{}),className:(0,s.Z)(t,g.k.common.unlistedBanner),children:(0,l.jsx)(o,{})})}function h(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(u,{...e})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[8610],{99703:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(95999),a=n(32244),i=n(85893);function l(e){const{metadata:t}=e,{previousPage:n,nextPage:l}=t;return(0,i.jsxs)("nav",{className:"pagination-nav","aria-label":(0,s.I)({id:"theme.blog.paginator.navAriaLabel",message:"Blog list page navigation",description:"The ARIA label for the blog pagination"}),children:[n&&(0,i.jsx)(a.Z,{permalink:n,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.newerEntries",description:"The label used to navigate to the newer blog posts page (previous page)",children:"Newer Entries"})}),l&&(0,i.jsx)(a.Z,{permalink:l,title:(0,i.jsx)(s.Z,{id:"theme.blog.paginator.olderEntries",description:"The label used to navigate to the older blog posts page (next page)",children:"Older Entries"}),isNext:!0})]})}},79985:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var s=n(9460),a=n(30390),i=n(85893);function l(e){let{items:t,component:n=a.Z}=e;return(0,i.jsx)(i.Fragment,{children:t.map((e=>{let{content:t}=e;return(0,i.jsx)(s.n,{content:t,children:(0,i.jsx)(n,{children:(0,i.jsx)(t,{})})},t.metadata.permalink)}))})}},41714:(e,t,n)=>{n.r(t),n.d(t,{default:()=>f});n(67294);var s=n(36905),a=n(95999),i=n(88824),l=n(10833),r=n(35281),o=n(33692),c=n(61460),g=n(99703),d=n(90197),u=n(79985),h=n(22212),p=n(92503),m=n(85893);function x(e){const t=function(){const{selectMessage:e}=(0,i.c)();return t=>e(t,(0,a.I)({id:"theme.blog.post.plurals",description:'Pluralized label for "{count} posts". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One post|{count} posts"},{count:t}))}();return(0,a.I)({id:"theme.blog.tagTitle",description:"The title of the page for a blog tag",message:'{nPosts} tagged with "{tagName}"'},{nPosts:t(e.count),tagName:e.label})}function j(e){let{tag:t}=e;const n=x(t);return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(l.d,{title:n}),(0,m.jsx)(d.Z,{tag:"blog_tags_posts"})]})}function b(e){let{tag:t,items:n,sidebar:s,listMetadata:i}=e;const l=x(t);return(0,m.jsxs)(c.Z,{sidebar:s,children:[t.unlisted&&(0,m.jsx)(h.Z,{}),(0,m.jsxs)("header",{className:"margin-bottom--xl",children:[(0,m.jsx)(p.Z,{as:"h1",children:l}),(0,m.jsx)(o.Z,{href:t.allTagsPath,children:(0,m.jsx)(a.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,m.jsx)(u.Z,{items:n}),(0,m.jsx)(g.Z,{metadata:i})]})}function f(e){return(0,m.jsxs)(l.FG,{className:(0,s.Z)(r.k.wrapper.blogPages,r.k.page.blogTagPostListPage),children:[(0,m.jsx)(j,{...e}),(0,m.jsx)(b,{...e})]})}},22212:(e,t,n)=>{n.d(t,{Z:()=>h});n(67294);var s=n(36905),a=n(95999),i=n(35742),l=n(85893);function r(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function o(){return(0,l.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(i.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var g=n(35281),d=n(59047);function u(e){let{className:t}=e;return(0,l.jsx)(d.Z,{type:"caution",title:(0,l.jsx)(r,{}),className:(0,s.Z)(t,g.k.common.unlistedBanner),children:(0,l.jsx)(o,{})})}function h(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(u,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/7052c0bc.61d77968.js b/assets/js/7052c0bc.61d77968.js new file mode 100644 index 0000000..272dd7b --- /dev/null +++ b/assets/js/7052c0bc.61d77968.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9731],{42286:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>p});var o=n(85893),r=n(11151);const i={id:"cpp-intro",title:"Introduction",slug:"/"},c=void 0,a={id:"cpp-intro",title:"Introduction",description:"",source:"@site/cpp/00-intro.md",sourceDirName:".",slug:"/",permalink:"/cpp/",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/cpp/00-intro.md",tags:[],version:"current",lastUpdatedAt:1706528814,formattedLastUpdatedAt:"Jan 29, 2024",sidebarPosition:0,frontMatter:{id:"cpp-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Exceptions and RAII",permalink:"/cpp/category/exceptions-and-raii"}},s={},p=[];function u(t){return(0,o.jsx)(o.Fragment,{})}function d(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u()}},11151:(t,e,n)=>{n.d(e,{Z:()=>a,a:()=>c});var o=n(67294);const r={},i=o.createContext(r);function c(t){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:c(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/7052c0bc.dcbef1c6.js b/assets/js/7052c0bc.dcbef1c6.js deleted file mode 100644 index 740c9eb..0000000 --- a/assets/js/7052c0bc.dcbef1c6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9731],{42286:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>s,contentTitle:()=>c,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>p});var o=n(85893),r=n(11151);const i={id:"cpp-intro",title:"Introduction",slug:"/"},c=void 0,a={id:"cpp-intro",title:"Introduction",description:"",source:"@site/cpp/00-intro.md",sourceDirName:".",slug:"/",permalink:"/cpp/",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/cpp/00-intro.md",tags:[],version:"current",lastUpdatedAt:1704571953,formattedLastUpdatedAt:"Jan 6, 2024",sidebarPosition:0,frontMatter:{id:"cpp-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Exceptions and RAII",permalink:"/cpp/category/exceptions-and-raii"}},s={},p=[];function u(t){return(0,o.jsx)(o.Fragment,{})}function d(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(u,{...t})}):u()}},11151:(t,e,n)=>{n.d(e,{Z:()=>a,a:()=>c});var o=n(67294);const r={},i=o.createContext(r);function c(t){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:c(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/794ef108.8d36eaa9.js b/assets/js/794ef108.8d36eaa9.js new file mode 100644 index 0000000..e8edbdd --- /dev/null +++ b/assets/js/794ef108.8d36eaa9.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3803],{86427:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>a,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var o=n(85893),r=n(11151);const i={id:"c-intro",title:"Introduction",slug:"/"},s=void 0,c={id:"c-intro",title:"Introduction",description:"",source:"@site/c/00-intro.md",sourceDirName:".",slug:"/",permalink:"/c/",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/00-intro.md",tags:[],version:"current",lastUpdatedAt:1706528814,formattedLastUpdatedAt:"Jan 29, 2024",sidebarPosition:0,frontMatter:{id:"c-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Bonuses",permalink:"/c/category/bonuses"}},a={},u=[];function d(t){return(0,o.jsx)(o.Fragment,{})}function l(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(d,{...t})}):d()}},11151:(t,e,n)=>{n.d(e,{Z:()=>c,a:()=>s});var o=n(67294);const r={},i=o.createContext(r);function s(t){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:s(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/794ef108.d7e12b89.js b/assets/js/794ef108.d7e12b89.js deleted file mode 100644 index 442dee7..0000000 --- a/assets/js/794ef108.d7e12b89.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3803],{86427:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>a,contentTitle:()=>s,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>u});var o=n(85893),r=n(11151);const i={id:"c-intro",title:"Introduction",slug:"/"},s=void 0,c={id:"c-intro",title:"Introduction",description:"",source:"@site/c/00-intro.md",sourceDirName:".",slug:"/",permalink:"/c/",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/00-intro.md",tags:[],version:"current",lastUpdatedAt:1704571953,formattedLastUpdatedAt:"Jan 6, 2024",sidebarPosition:0,frontMatter:{id:"c-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Bonuses",permalink:"/c/category/bonuses"}},a={},u=[];function d(t){return(0,o.jsx)(o.Fragment,{})}function l(t={}){const{wrapper:e}={...(0,r.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(d,{...t})}):d()}},11151:(t,e,n)=>{n.d(e,{Z:()=>c,a:()=>s});var o=n(67294);const r={},i=o.createContext(r);function s(t){const e=o.useContext(i);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function c(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(r):t.components||r:s(t.components),o.createElement(i.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/7a5bb070.3ea6a8e5.js b/assets/js/7a5bb070.3ea6a8e5.js new file mode 100644 index 0000000..05bcb9e --- /dev/null +++ b/assets/js/7a5bb070.3ea6a8e5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4582],{64863:e=>{e.exports=JSON.parse('{"label":"memory safety","permalink":"/blog/tags/memory-safety","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/84d1e0d8.985692bf.js b/assets/js/84d1e0d8.985692bf.js deleted file mode 100644 index 1a49592..0000000 --- a/assets/js/84d1e0d8.985692bf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1885],{49713:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var o=n(85893),s=n(11151);const r={id:"algorithms-intro",title:"Introduction",slug:"/"},i=void 0,a={id:"algorithms-intro",title:"Introduction",description:"In this part you can find \u201crandom\u201d additional materials I have written over the",source:"@site/algorithms/00-intro.md",sourceDirName:".",slug:"/",permalink:"/algorithms/",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/algorithms/00-intro.md",tags:[],version:"current",lastUpdatedAt:1704571953,formattedLastUpdatedAt:"Jan 6, 2024",sidebarPosition:0,frontMatter:{id:"algorithms-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Algorithms and Correctness",permalink:"/algorithms/category/algorithms-and-correctness"}},c={},d=[];function l(t){const e={a:"a",em:"em",p:"p",...(0,s.a)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(e.p,{children:["In this part you can find \u201crandom\u201d additional materials I have written over the\ncourse of teaching ",(0,o.jsx)(e.em,{children:"Algorithms and data structures I"}),"."]}),"\n",(0,o.jsx)(e.p,{children:"It is a various mix of stuff that may have been produced as a follow-up on some\nquestion asked at the seminar or spontanously."}),"\n",(0,o.jsxs)(e.p,{children:["If you have some ideas for posts, please do not hesitate to submit them as issues\nin the linked ",(0,o.jsx)(e.a,{href:"https://gitlab.fi.muni.cz/xfocko/kb/issues",children:"GitLab"}),"."]})]})}function u(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(l,{...t})}):l(t)}},11151:(t,e,n)=>{n.d(e,{Z:()=>a,a:()=>i});var o=n(67294);const s={},r=o.createContext(s);function i(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:i(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/84d1e0d8.f337d099.js b/assets/js/84d1e0d8.f337d099.js new file mode 100644 index 0000000..6a2d854 --- /dev/null +++ b/assets/js/84d1e0d8.f337d099.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1885],{49713:(t,e,n)=>{n.r(e),n.d(e,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>d});var o=n(85893),s=n(11151);const r={id:"algorithms-intro",title:"Introduction",slug:"/"},i=void 0,a={id:"algorithms-intro",title:"Introduction",description:"In this part you can find \u201crandom\u201d additional materials I have written over the",source:"@site/algorithms/00-intro.md",sourceDirName:".",slug:"/",permalink:"/algorithms/",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/algorithms/00-intro.md",tags:[],version:"current",lastUpdatedAt:1706528814,formattedLastUpdatedAt:"Jan 29, 2024",sidebarPosition:0,frontMatter:{id:"algorithms-intro",title:"Introduction",slug:"/"},sidebar:"autogeneratedBar",next:{title:"Algorithms and Correctness",permalink:"/algorithms/category/algorithms-and-correctness"}},c={},d=[];function l(t){const e={a:"a",em:"em",p:"p",...(0,s.a)(),...t.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(e.p,{children:["In this part you can find \u201crandom\u201d additional materials I have written over the\ncourse of teaching ",(0,o.jsx)(e.em,{children:"Algorithms and data structures I"}),"."]}),"\n",(0,o.jsx)(e.p,{children:"It is a various mix of stuff that may have been produced as a follow-up on some\nquestion asked at the seminar or spontanously."}),"\n",(0,o.jsxs)(e.p,{children:["If you have some ideas for posts, please do not hesitate to submit them as issues\nin the linked ",(0,o.jsx)(e.a,{href:"https://gitlab.fi.muni.cz/xfocko/kb/issues",children:"GitLab"}),"."]})]})}function u(t={}){const{wrapper:e}={...(0,s.a)(),...t.components};return e?(0,o.jsx)(e,{...t,children:(0,o.jsx)(l,{...t})}):l(t)}},11151:(t,e,n)=>{n.d(e,{Z:()=>a,a:()=>i});var o=n(67294);const s={},r=o.createContext(s);function i(t){const e=o.useContext(r);return o.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function a(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(s):t.components||s:i(t.components),o.createElement(r.Provider,{value:e},t.children)}}}]); \ No newline at end of file diff --git a/assets/js/9287eafd.7613dea7.js b/assets/js/9287eafd.6a3e2a56.js similarity index 69% rename from assets/js/9287eafd.7613dea7.js rename to assets/js/9287eafd.6a3e2a56.js index 91f1c98..46ffd8a 100644 --- a/assets/js/9287eafd.7613dea7.js +++ b/assets/js/9287eafd.6a3e2a56.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5521],{90716:s=>{s.exports=JSON.parse('{"label":"rust","permalink":"/blog/tags/rust","allTagsPath":"/blog/tags","count":5,"unlisted":false}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5521],{90716:s=>{s.exports=JSON.parse('{"label":"rust","permalink":"/blog/tags/rust","allTagsPath":"/blog/tags","count":6,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/9365.b3ca15d6.js b/assets/js/9365.b3ca15d6.js new file mode 100644 index 0000000..c80c0f1 --- /dev/null +++ b/assets/js/9365.b3ca15d6.js @@ -0,0 +1,2 @@ +/*! For license information please see 9365.b3ca15d6.js.LICENSE.txt */ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9365],{17967:(t,e)=>{"use strict";e.Nm=e.Rq=void 0;var i=/^([^\w]*)(javascript|data|vbscript)/im,r=/&#(\w+)(^\w|;)?/g,n=/&(newline|tab);/gi,o=/[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim,a=/^.+(:|:)/gim,s=[".","/"];e.Rq="about:blank",e.Nm=function(t){if(!t)return e.Rq;var l,c=(l=t,l.replace(o,"").replace(r,(function(t,e){return String.fromCharCode(e)}))).replace(n,"").replace(o,"").trim();if(!c)return e.Rq;if(function(t){return s.indexOf(t[0])>-1}(c))return c;var h=c.match(a);if(!h)return c;var u=h[0];return i.test(u)?e.Rq:c}},59047:(t,e,i)=>{"use strict";i.d(e,{Z:()=>A});var r=i(67294),n=i(85893);function o(t){const{mdxAdmonitionTitle:e,rest:i}=function(t){const e=r.Children.toArray(t),i=e.find((t=>r.isValidElement(t)&&"mdxAdmonitionTitle"===t.type)),o=e.filter((t=>t!==i)),a=i?.props.children;return{mdxAdmonitionTitle:a,rest:o.length>0?(0,n.jsx)(n.Fragment,{children:o}):null}}(t.children),o=t.title??e;return{...t,...o&&{title:o},children:i}}var a=i(36905),s=i(95999),l=i(35281);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function h(t){let{type:e,className:i,children:r}=t;return(0,n.jsx)("div",{className:(0,a.Z)(l.k.common.admonition,l.k.common.admonitionType(e),c.admonition,i),children:r})}function u(t){let{icon:e,title:i}=t;return(0,n.jsxs)("div",{className:c.admonitionHeading,children:[(0,n.jsx)("span",{className:c.admonitionIcon,children:e}),i]})}function d(t){let{children:e}=t;return e?(0,n.jsx)("div",{className:c.admonitionContent,children:e}):null}function f(t){const{type:e,icon:i,title:r,children:o,className:a}=t;return(0,n.jsxs)(h,{type:e,className:a,children:[(0,n.jsx)(u,{title:r,icon:i}),(0,n.jsx)(d,{children:o})]})}function p(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const g={icon:(0,n.jsx)(p,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function m(t){return(0,n.jsx)(f,{...g,...t,className:(0,a.Z)("alert alert--secondary",t.className),children:t.children})}function y(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const x={icon:(0,n.jsx)(y,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function C(t){return(0,n.jsx)(f,{...x,...t,className:(0,a.Z)("alert alert--success",t.className),children:t.children})}function b(t){return(0,n.jsx)("svg",{viewBox:"0 0 14 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const _={icon:(0,n.jsx)(b,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function v(t){return(0,n.jsx)(f,{..._,...t,className:(0,a.Z)("alert alert--info",t.className),children:t.children})}function k(t){return(0,n.jsx)("svg",{viewBox:"0 0 16 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const T={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function w(t){return(0,n.jsx)("svg",{viewBox:"0 0 12 16",...t,children:(0,n.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const S={icon:(0,n.jsx)(w,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const B={icon:(0,n.jsx)(k,{}),title:(0,n.jsx)(s.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const F={...{note:m,tip:C,info:v,warning:function(t){return(0,n.jsx)(f,{...T,...t,className:(0,a.Z)("alert alert--warning",t.className),children:t.children})},danger:function(t){return(0,n.jsx)(f,{...S,...t,className:(0,a.Z)("alert alert--danger",t.className),children:t.children})}},...{secondary:t=>(0,n.jsx)(m,{title:"secondary",...t}),important:t=>(0,n.jsx)(v,{title:"important",...t}),success:t=>(0,n.jsx)(C,{title:"success",...t}),caution:function(t){return(0,n.jsx)(f,{...B,...t,className:(0,a.Z)("alert alert--warning",t.className),children:t.children})}}};function A(t){const e=o(t),i=(r=e.type,F[r]||(console.warn(`No admonition component found for admonition type "${r}". Using Info as fallback.`),F.info));var r;return(0,n.jsx)(i,{...e})}},84881:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});i(67294);var r=i(95999),n=i(35281),o=i(33692),a=i(36905);const s={iconEdit:"iconEdit_Z9Sw"};var l=i(85893);function c(t){let{className:e,...i}=t;return(0,l.jsx)("svg",{fill:"currentColor",height:"20",width:"20",viewBox:"0 0 40 40",className:(0,a.Z)(s.iconEdit,e),"aria-hidden":"true",...i,children:(0,l.jsx)("g",{children:(0,l.jsx)("path",{d:"m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"})})})}function h(t){let{editUrl:e}=t;return(0,l.jsxs)(o.Z,{to:e,className:n.k.common.editThisPage,children:[(0,l.jsx)(c,{}),(0,l.jsx)(r.Z,{id:"theme.common.editThisPage",description:"The link label to edit the current page",children:"Edit this page"})]})}},97917:(t,e,i)=>{"use strict";i.d(e,{Z:()=>yt});var r=i(67294),n=i(11151),o=i(35742),a=i(72389),s=i(36905),l=i(92949),c=i(86668);function h(){const{prism:t}=(0,c.L)(),{colorMode:e}=(0,l.I)(),i=t.theme,r=t.darkTheme||i;return"dark"===e?r:i}var u=i(35281),d=i(87594),f=i.n(d);const p=/title=(?<quote>["'])(?<title>.*?)\1/,g=/\{(?<range>[\d,-]+)\}/,m={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}},y={...m,lua:{start:"--",end:""},wasm:{start:"\\;\\;",end:""},tex:{start:"%",end:""},vb:{start:"['\u2018\u2019]",end:""},vbnet:{start:"(?:_\\s*)?['\u2018\u2019]",end:""},rem:{start:"[Rr][Ee][Mm]\\b",end:""},f90:{start:"!",end:""},ml:{start:"\\(\\*",end:"\\*\\)"},cobol:{start:"\\*>",end:""}},x=Object.keys(m);function C(t,e){const i=t.map((t=>{const{start:i,end:r}=y[t];return`(?:${i}\\s*(${e.flatMap((t=>[t.line,t.block?.start,t.block?.end].filter(Boolean))).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${i})\\s*$`)}function b(t,e){let i=t.replace(/\n$/,"");const{language:r,magicComments:n,metastring:o}=e;if(o&&g.test(o)){const t=o.match(g).groups.range;if(0===n.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${o}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const e=n[0].className,r=f()(t).filter((t=>t>0)).map((t=>[t-1,[e]]));return{lineClassNames:Object.fromEntries(r),code:i}}if(void 0===r)return{lineClassNames:{},code:i};const a=function(t,e){switch(t){case"js":case"javascript":case"ts":case"typescript":return C(["js","jsBlock"],e);case"jsx":case"tsx":return C(["js","jsBlock","jsx"],e);case"html":return C(["js","jsBlock","html"],e);case"python":case"py":case"bash":return C(["bash"],e);case"markdown":case"md":return C(["html","jsx","bash"],e);case"tex":case"latex":case"matlab":return C(["tex"],e);case"lua":case"haskell":case"sql":return C(["lua"],e);case"wasm":return C(["wasm"],e);case"vb":case"vba":case"visual-basic":return C(["vb","rem"],e);case"vbnet":return C(["vbnet","rem"],e);case"batch":return C(["rem"],e);case"basic":return C(["rem","f90"],e);case"fsharp":return C(["js","ml"],e);case"ocaml":case"sml":return C(["ml"],e);case"fortran":return C(["f90"],e);case"cobol":return C(["cobol"],e);default:return C(x,e)}}(r,n),s=i.split("\n"),l=Object.fromEntries(n.map((t=>[t.className,{start:0,range:""}]))),c=Object.fromEntries(n.filter((t=>t.line)).map((t=>{let{className:e,line:i}=t;return[i,e]}))),h=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.start,e]}))),u=Object.fromEntries(n.filter((t=>t.block)).map((t=>{let{className:e,block:i}=t;return[i.end,e]})));for(let f=0;f<s.length;){const t=s[f].match(a);if(!t){f+=1;continue}const e=t.slice(1).find((t=>void 0!==t));c[e]?l[c[e]].range+=`${f},`:h[e]?l[h[e]].start=f:u[e]&&(l[u[e]].range+=`${l[u[e]].start}-${f-1},`),s.splice(f,1)}i=s.join("\n");const d={};return Object.entries(l).forEach((t=>{let[e,{range:i}]=t;f()(i).forEach((t=>{d[t]??=[],d[t].push(e)}))})),{lineClassNames:d,code:i}}const _={codeBlockContainer:"codeBlockContainer_Ckt0"};var v=i(85893);function k(t){let{as:e,...i}=t;const r=function(t){const e={color:"--prism-color",backgroundColor:"--prism-background-color"},i={};return Object.entries(t.plain).forEach((t=>{let[r,n]=t;const o=e[r];o&&"string"==typeof n&&(i[o]=n)})),i}(h());return(0,v.jsx)(e,{...i,style:r,className:(0,s.Z)(i.className,_.codeBlockContainer,u.k.common.codeBlock)})}const T={codeBlockContent:"codeBlockContent_biex",codeBlockTitle:"codeBlockTitle_Ktv7",codeBlock:"codeBlock_bY9V",codeBlockStandalone:"codeBlockStandalone_MEMb",codeBlockLines:"codeBlockLines_e6Vv",codeBlockLinesWithNumbering:"codeBlockLinesWithNumbering_o6Pm",buttonGroup:"buttonGroup__atx"};function w(t){let{children:e,className:i}=t;return(0,v.jsx)(k,{as:"pre",tabIndex:0,className:(0,s.Z)(T.codeBlockStandalone,"thin-scrollbar",i),children:(0,v.jsx)("code",{className:T.codeBlockLines,children:e})})}var S=i(902);const B={attributes:!0,characterData:!0,childList:!0,subtree:!0};function F(t,e){const[i,n]=(0,r.useState)(),o=(0,r.useCallback)((()=>{n(t.current?.closest("[role=tabpanel][hidden]"))}),[t,n]);(0,r.useEffect)((()=>{o()}),[o]),function(t,e,i){void 0===i&&(i=B);const n=(0,S.zX)(e),o=(0,S.Ql)(i);(0,r.useEffect)((()=>{const e=new MutationObserver(n);return t&&e.observe(t,o),()=>e.disconnect()}),[t,n,o])}(i,(t=>{t.forEach((t=>{"attributes"===t.type&&"hidden"===t.attributeName&&(e(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}var A=i(14965);const L={codeLine:"codeLine_lJS_",codeLineNumber:"codeLineNumber_Tfdd",codeLineContent:"codeLineContent_feaV"};function M(t){let{line:e,classNames:i,showLineNumbers:r,getLineProps:n,getTokenProps:o}=t;1===e.length&&"\n"===e[0].content&&(e[0].content="");const a=n({line:e,className:(0,s.Z)(i,r&&L.codeLine)}),l=e.map(((t,e)=>(0,v.jsx)("span",{...o({token:t,key:e})},e)));return(0,v.jsxs)("span",{...a,children:[r?(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)("span",{className:L.codeLineNumber}),(0,v.jsx)("span",{className:L.codeLineContent,children:l})]}):l,(0,v.jsx)("br",{})]})}var E=i(95999);function Z(t){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,v.jsx)("path",{fill:"currentColor",d:"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"})})}function N(t){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,v.jsx)("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"})})}const O={copyButtonCopied:"copyButtonCopied_obH4",copyButtonIcons:"copyButtonIcons_eSgA",copyButtonIcon:"copyButtonIcon_y97N",copyButtonSuccessIcon:"copyButtonSuccessIcon_LjdS"};function I(t){let{code:e,className:i}=t;const[n,o]=(0,r.useState)(!1),a=(0,r.useRef)(void 0),l=(0,r.useCallback)((()=>{!function(t,e){let{target:i=document.body}=void 0===e?{}:e;if("string"!=typeof t)throw new TypeError(`Expected parameter \`text\` to be a \`string\`, got \`${typeof t}\`.`);const r=document.createElement("textarea"),n=document.activeElement;r.value=t,r.setAttribute("readonly",""),r.style.contain="strict",r.style.position="absolute",r.style.left="-9999px",r.style.fontSize="12pt";const o=document.getSelection(),a=o.rangeCount>0&&o.getRangeAt(0);i.append(r),r.select(),r.selectionStart=0,r.selectionEnd=t.length;let s=!1;try{s=document.execCommand("copy")}catch{}r.remove(),a&&(o.removeAllRanges(),o.addRange(a)),n&&n.focus()}(e),o(!0),a.current=window.setTimeout((()=>{o(!1)}),1e3)}),[e]);return(0,r.useEffect)((()=>()=>window.clearTimeout(a.current)),[]),(0,v.jsx)("button",{type:"button","aria-label":n?(0,E.I)({id:"theme.CodeBlock.copied",message:"Copied",description:"The copied button label on code blocks"}):(0,E.I)({id:"theme.CodeBlock.copyButtonAriaLabel",message:"Copy code to clipboard",description:"The ARIA label for copy code blocks button"}),title:(0,E.I)({id:"theme.CodeBlock.copy",message:"Copy",description:"The copy button label on code blocks"}),className:(0,s.Z)("clean-btn",i,O.copyButton,n&&O.copyButtonCopied),onClick:l,children:(0,v.jsxs)("span",{className:O.copyButtonIcons,"aria-hidden":"true",children:[(0,v.jsx)(Z,{className:O.copyButtonIcon}),(0,v.jsx)(N,{className:O.copyButtonSuccessIcon})]})})}function j(t){return(0,v.jsx)("svg",{viewBox:"0 0 24 24",...t,children:(0,v.jsx)("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"})})}const q={wordWrapButtonIcon:"wordWrapButtonIcon_Bwma",wordWrapButtonEnabled:"wordWrapButtonEnabled_EoeP"};function D(t){let{className:e,onClick:i,isEnabled:r}=t;const n=(0,E.I)({id:"theme.CodeBlock.wordWrapToggle",message:"Toggle word wrap",description:"The title attribute for toggle word wrapping button of code block lines"});return(0,v.jsx)("button",{type:"button",onClick:i,className:(0,s.Z)("clean-btn",e,r&&q.wordWrapButtonEnabled),"aria-label":n,title:n,children:(0,v.jsx)(j,{className:q.wordWrapButtonIcon,"aria-hidden":"true"})})}function $(t){let{children:e,className:i="",metastring:n,title:o,showLineNumbers:a,language:l}=t;const{prism:{defaultLanguage:u,magicComments:d}}=(0,c.L)(),f=function(t){return t?.toLowerCase()}(l??function(t){const e=t.split(" ").find((t=>t.startsWith("language-")));return e?.replace(/language-/,"")}(i)??u),g=h(),m=function(){const[t,e]=(0,r.useState)(!1),[i,n]=(0,r.useState)(!1),o=(0,r.useRef)(null),a=(0,r.useCallback)((()=>{const i=o.current.querySelector("code");t?i.removeAttribute("style"):(i.style.whiteSpace="pre-wrap",i.style.overflowWrap="anywhere"),e((t=>!t))}),[o,t]),s=(0,r.useCallback)((()=>{const{scrollWidth:t,clientWidth:e}=o.current,i=t>e||o.current.querySelector("code").hasAttribute("style");n(i)}),[o]);return F(o,s),(0,r.useEffect)((()=>{s()}),[t,s]),(0,r.useEffect)((()=>(window.addEventListener("resize",s,{passive:!0}),()=>{window.removeEventListener("resize",s)})),[s]),{codeBlockRef:o,isEnabled:t,isCodeScrollable:i,toggle:a}}(),y=function(t){return t?.match(p)?.groups.title??""}(n)||o,{lineClassNames:x,code:C}=b(e,{metastring:n,language:f,magicComments:d}),_=a??function(t){return Boolean(t?.includes("showLineNumbers"))}(n);return(0,v.jsxs)(k,{as:"div",className:(0,s.Z)(i,f&&!i.includes(`language-${f}`)&&`language-${f}`),children:[y&&(0,v.jsx)("div",{className:T.codeBlockTitle,children:y}),(0,v.jsxs)("div",{className:T.codeBlockContent,children:[(0,v.jsx)(A.y$,{theme:g,code:C,language:f??"text",children:t=>{let{className:e,style:i,tokens:r,getLineProps:n,getTokenProps:o}=t;return(0,v.jsx)("pre",{tabIndex:0,ref:m.codeBlockRef,className:(0,s.Z)(e,T.codeBlock,"thin-scrollbar"),style:i,children:(0,v.jsx)("code",{className:(0,s.Z)(T.codeBlockLines,_&&T.codeBlockLinesWithNumbering),children:r.map(((t,e)=>(0,v.jsx)(M,{line:t,getLineProps:n,getTokenProps:o,classNames:x[e],showLineNumbers:_},e)))})})}}),(0,v.jsxs)("div",{className:T.buttonGroup,children:[(m.isEnabled||m.isCodeScrollable)&&(0,v.jsx)(D,{className:T.codeButton,onClick:()=>m.toggle(),isEnabled:m.isEnabled}),(0,v.jsx)(I,{className:T.codeButton,code:C})]})]})]})}function z(t){let{children:e,...i}=t;const n=(0,a.Z)(),o=function(t){return r.Children.toArray(t).some((t=>(0,r.isValidElement)(t)))?t:Array.isArray(t)?t.join(""):t}(e),s="string"==typeof o?$:w;return(0,v.jsx)(s,{...i,children:o},String(n))}function P(t){return(0,v.jsx)("code",{...t})}var R=i(33692);var W=i(788),H=i(28138),U=i(86043);const Y={details:"details_lb9f",isBrowser:"isBrowser_bmU9",collapsibleContent:"collapsibleContent_i85q"};function V(t){return!!t&&("SUMMARY"===t.tagName||V(t.parentElement))}function G(t,e){return!!t&&(t===e||G(t.parentElement,e))}function X(t){let{summary:e,children:i,...n}=t;(0,H.Z)().collectAnchor(n.id);const o=(0,a.Z)(),s=(0,r.useRef)(null),{collapsed:l,setCollapsed:c}=(0,U.u)({initialState:!n.open}),[h,u]=(0,r.useState)(n.open),d=r.isValidElement(e)?e:(0,v.jsx)("summary",{children:e??"Details"});return(0,v.jsxs)("details",{...n,ref:s,open:h,"data-collapsed":l,className:(0,W.Z)(Y.details,o&&Y.isBrowser,n.className),onMouseDown:t=>{V(t.target)&&t.detail>1&&t.preventDefault()},onClick:t=>{t.stopPropagation();const e=t.target;V(e)&&G(e,s.current)&&(t.preventDefault(),l?(c(!1),u(!0)):c(!0))},children:[d,(0,v.jsx)(U.z,{lazy:!1,collapsed:l,disableSSRStyle:!0,onCollapseTransitionEnd:t=>{c(t),u(!t)},children:(0,v.jsx)("div",{className:Y.collapsibleContent,children:i})})]})}const Q={details:"details_b_Ee"},J="alert alert--info";function K(t){let{...e}=t;return(0,v.jsx)(X,{...e,className:(0,s.Z)(J,Q.details,e.className)})}function tt(t){const e=r.Children.toArray(t.children),i=e.find((t=>r.isValidElement(t)&&"summary"===t.type)),n=(0,v.jsx)(v.Fragment,{children:e.filter((t=>t!==i))});return(0,v.jsx)(K,{...t,summary:i,children:n})}var et=i(92503);function it(t){return(0,v.jsx)(et.Z,{...t})}const rt={containsTaskList:"containsTaskList_mC6p"};function nt(t){if(void 0!==t)return(0,s.Z)(t,t?.includes("contains-task-list")&&rt.containsTaskList)}const ot={img:"img_ev3q"};var at=i(59047),st=i(44763),lt=i(69690),ct=i(85322);const ht="docusaurus-mermaid-container";function ut(){const{colorMode:t}=(0,l.I)(),e=(0,c.L)().mermaid,i=e.theme[t],{options:n}=e;return(0,r.useMemo)((()=>({startOnLoad:!1,...n,theme:i})),[i,n])}function dt(t){let{text:e,config:i}=t;const[n,o]=(0,r.useState)(null),a=(0,r.useRef)(`mermaid-svg-${Math.round(1e7*Math.random())}`).current,s=ut(),l=i??s;return(0,r.useEffect)((()=>{(async function(t){let{id:e,text:i,config:r}=t;ct.L.mermaidAPI.initialize(r);try{return await ct.L.render(e,i)}catch(n){throw document.querySelector(`#d${e}`)?.remove(),n}})({id:a,text:e,config:l}).then(o).catch((t=>{o((()=>{throw t}))}))}),[a,e,l]),n}const ft={container:"container_lyt7"};function pt(t){let{renderResult:e}=t;const i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{const t=i.current;e.bindFunctions?.(t)}),[e]),(0,v.jsx)("div",{ref:i,className:`${ht} ${ft.container}`,dangerouslySetInnerHTML:{__html:e.svg}})}function gt(t){let{value:e}=t;const i=dt({text:e});return null===i?null:(0,v.jsx)(pt,{renderResult:i})}const mt={Head:o.Z,details:tt,Details:tt,code:function(t){return function(t){return void 0!==t.children&&r.Children.toArray(t.children).every((t=>"string"==typeof t&&!t.includes("\n")))}(t)?(0,v.jsx)(P,{...t}):(0,v.jsx)(z,{...t})},a:function(t){return(0,v.jsx)(R.Z,{...t})},pre:function(t){return(0,v.jsx)(v.Fragment,{children:t.children})},ul:function(t){return(0,v.jsx)("ul",{...t,className:nt(t.className)})},li:function(t){return(0,H.Z)().collectAnchor(t.id),(0,v.jsx)("li",{...t})},img:function(t){return(0,v.jsx)("img",{decoding:"async",loading:"lazy",...t,className:(e=t.className,(0,s.Z)(e,ot.img))});var e},h1:t=>(0,v.jsx)(it,{as:"h1",...t}),h2:t=>(0,v.jsx)(it,{as:"h2",...t}),h3:t=>(0,v.jsx)(it,{as:"h3",...t}),h4:t=>(0,v.jsx)(it,{as:"h4",...t}),h5:t=>(0,v.jsx)(it,{as:"h5",...t}),h6:t=>(0,v.jsx)(it,{as:"h6",...t}),admonition:at.Z,mermaid:function(t){return(0,v.jsx)(st.Z,{fallback:t=>(0,v.jsx)(lt.Ac,{...t}),children:(0,v.jsx)(gt,{...t})})}};function yt(t){let{children:e}=t;return(0,v.jsx)(n.Z,{components:mt,children:e})}},32244:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});i(67294);var r=i(36905),n=i(33692),o=i(85893);function a(t){const{permalink:e,title:i,subLabel:a,isNext:s}=t;return(0,o.jsxs)(n.Z,{className:(0,r.Z)("pagination-nav__link",s?"pagination-nav__link--next":"pagination-nav__link--prev"),to:e,children:[a&&(0,o.jsx)("div",{className:"pagination-nav__sublabel",children:a}),(0,o.jsx)("div",{className:"pagination-nav__label",children:i})]})}},13008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});i(67294);var r=i(36905),n=i(33692);const o={tag:"tag_zVej",tagRegular:"tagRegular_sFm0",tagWithCount:"tagWithCount_h2kH"};var a=i(85893);function s(t){let{permalink:e,label:i,count:s}=t;return(0,a.jsxs)(n.Z,{href:e,className:(0,r.Z)(o.tag,s?o.tagWithCount:o.tagRegular),children:[i,s&&(0,a.jsx)("span",{children:s})]})}},71526:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});i(67294);var r=i(36905),n=i(95999),o=i(13008);const a={tags:"tags_jXut",tag:"tag_QGVx"};var s=i(85893);function l(t){let{tags:e}=t;return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("b",{children:(0,s.jsx)(n.Z,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list",children:"Tags:"})}),(0,s.jsx)("ul",{className:(0,r.Z)(a.tags,"padding--none","margin-left--sm"),children:e.map((t=>{let{label:e,permalink:i}=t;return(0,s.jsx)("li",{className:a.tag,children:(0,s.jsx)(o.Z,{label:e,permalink:i})},i)}))})]})}},27484:function(t){t.exports=function(){"use strict";var t=1e3,e=6e4,i=36e5,r="millisecond",n="second",o="minute",a="hour",s="day",l="week",c="month",h="quarter",u="year",d="date",f="Invalid Date",p=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,g=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,m={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],i=t%100;return"["+t+(e[(i-20)%10]||e[i]||e[0])+"]"}},y=function(t,e,i){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(i)+t},x={s:y,z:function(t){var e=-t.utcOffset(),i=Math.abs(e),r=Math.floor(i/60),n=i%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(n,2,"0")},m:function t(e,i){if(e.date()<i.date())return-t(i,e);var r=12*(i.year()-e.year())+(i.month()-e.month()),n=e.clone().add(r,c),o=i-n<0,a=e.clone().add(r+(o?-1:1),c);return+(-(r+(i-n)/(o?n-a:a-n))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:u,w:l,d:s,D:d,h:a,m:o,s:n,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},C="en",b={};b[C]=m;var _="$isDayjsObject",v=function(t){return t instanceof S||!(!t||!t[_])},k=function t(e,i,r){var n;if(!e)return C;if("string"==typeof e){var o=e.toLowerCase();b[o]&&(n=o),i&&(b[o]=i,n=o);var a=e.split("-");if(!n&&a.length>1)return t(a[0])}else{var s=e.name;b[s]=e,n=s}return!r&&n&&(C=n),n||!r&&C},T=function(t,e){if(v(t))return t.clone();var i="object"==typeof e?e:{};return i.date=t,i.args=arguments,new S(i)},w=x;w.l=k,w.i=v,w.w=function(t,e){return T(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var S=function(){function m(t){this.$L=k(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[_]=!0}var y=m.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,i=t.utc;if(null===e)return new Date(NaN);if(w.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(p);if(r){var n=r[2]-1||0,o=(r[7]||"0").substring(0,3);return i?new Date(Date.UTC(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)):new Date(r[1],n,r[3]||1,r[4]||0,r[5]||0,r[6]||0,o)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return w},y.isValid=function(){return!(this.$d.toString()===f)},y.isSame=function(t,e){var i=T(t);return this.startOf(e)<=i&&i<=this.endOf(e)},y.isAfter=function(t,e){return T(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<T(t)},y.$g=function(t,e,i){return w.u(t)?this[e]:this.set(i,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var i=this,r=!!w.u(e)||e,h=w.p(t),f=function(t,e){var n=w.w(i.$u?Date.UTC(i.$y,e,t):new Date(i.$y,e,t),i);return r?n:n.endOf(s)},p=function(t,e){return w.w(i.toDate()[t].apply(i.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),i)},g=this.$W,m=this.$M,y=this.$D,x="set"+(this.$u?"UTC":"");switch(h){case u:return r?f(1,0):f(31,11);case c:return r?f(1,m):f(0,m+1);case l:var C=this.$locale().weekStart||0,b=(g<C?g+7:g)-C;return f(r?y-b:y+(6-b),m);case s:case d:return p(x+"Hours",0);case a:return p(x+"Minutes",1);case o:return p(x+"Seconds",2);case n:return p(x+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var i,l=w.p(t),h="set"+(this.$u?"UTC":""),f=(i={},i[s]=h+"Date",i[d]=h+"Date",i[c]=h+"Month",i[u]=h+"FullYear",i[a]=h+"Hours",i[o]=h+"Minutes",i[n]=h+"Seconds",i[r]=h+"Milliseconds",i)[l],p=l===s?this.$D+(e-this.$W):e;if(l===c||l===u){var g=this.clone().set(d,1);g.$d[f](p),g.init(),this.$d=g.set(d,Math.min(this.$D,g.daysInMonth())).$d}else f&&this.$d[f](p);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[w.p(t)]()},y.add=function(r,h){var d,f=this;r=Number(r);var p=w.p(h),g=function(t){var e=T(f);return w.w(e.date(e.date()+Math.round(t*r)),f)};if(p===c)return this.set(c,this.$M+r);if(p===u)return this.set(u,this.$y+r);if(p===s)return g(1);if(p===l)return g(7);var m=(d={},d[o]=e,d[a]=i,d[n]=t,d)[p]||1,y=this.$d.getTime()+r*m;return w.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,i=this.$locale();if(!this.isValid())return i.invalidDate||f;var r=t||"YYYY-MM-DDTHH:mm:ssZ",n=w.z(this),o=this.$H,a=this.$m,s=this.$M,l=i.weekdays,c=i.months,h=i.meridiem,u=function(t,i,n,o){return t&&(t[i]||t(e,r))||n[i].slice(0,o)},d=function(t){return w.s(o%12||12,t,"0")},p=h||function(t,e,i){var r=t<12?"AM":"PM";return i?r.toLowerCase():r};return r.replace(g,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return w.s(e.$y,4,"0");case"M":return s+1;case"MM":return w.s(s+1,2,"0");case"MMM":return u(i.monthsShort,s,c,3);case"MMMM":return u(c,s);case"D":return e.$D;case"DD":return w.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return u(i.weekdaysMin,e.$W,l,2);case"ddd":return u(i.weekdaysShort,e.$W,l,3);case"dddd":return l[e.$W];case"H":return String(o);case"HH":return w.s(o,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return p(o,a,!0);case"A":return p(o,a,!1);case"m":return String(a);case"mm":return w.s(a,2,"0");case"s":return String(e.$s);case"ss":return w.s(e.$s,2,"0");case"SSS":return w.s(e.$ms,3,"0");case"Z":return n}return null}(t)||n.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(r,d,f){var p,g=this,m=w.p(d),y=T(r),x=(y.utcOffset()-this.utcOffset())*e,C=this-y,b=function(){return w.m(g,y)};switch(m){case u:p=b()/12;break;case c:p=b();break;case h:p=b()/3;break;case l:p=(C-x)/6048e5;break;case s:p=(C-x)/864e5;break;case a:p=C/i;break;case o:p=C/e;break;case n:p=C/t;break;default:p=C}return f?p:w.a(p)},y.daysInMonth=function(){return this.endOf(c).$D},y.$locale=function(){return b[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var i=this.clone(),r=k(t,e,!0);return r&&(i.$L=r),i},y.clone=function(){return w.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},m}(),B=S.prototype;return T.prototype=B,[["$ms",r],["$s",n],["$m",o],["$H",a],["$W",s],["$M",c],["$y",u],["$D",d]].forEach((function(t){B[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),T.extend=function(t,e){return t.$i||(t(e,S,T),t.$i=!0),T},T.locale=k,T.isDayjs=v,T.unix=function(t){return T(1e3*t)},T.en=b[C],T.Ls=b,T.p={},T}()},27856:function(t){t.exports=function(){"use strict";const{entries:t,setPrototypeOf:e,isFrozen:i,getPrototypeOf:r,getOwnPropertyDescriptor:n}=Object;let{freeze:o,seal:a,create:s}=Object,{apply:l,construct:c}="undefined"!=typeof Reflect&&Reflect;o||(o=function(t){return t}),a||(a=function(t){return t}),l||(l=function(t,e,i){return t.apply(e,i)}),c||(c=function(t,e){return new t(...e)});const h=_(Array.prototype.forEach),u=_(Array.prototype.pop),d=_(Array.prototype.push),f=_(String.prototype.toLowerCase),p=_(String.prototype.toString),g=_(String.prototype.match),m=_(String.prototype.replace),y=_(String.prototype.indexOf),x=_(String.prototype.trim),C=_(RegExp.prototype.test),b=v(TypeError);function _(t){return function(e){for(var i=arguments.length,r=new Array(i>1?i-1:0),n=1;n<i;n++)r[n-1]=arguments[n];return l(t,e,r)}}function v(t){return function(){for(var e=arguments.length,i=new Array(e),r=0;r<e;r++)i[r]=arguments[r];return c(t,i)}}function k(t,r){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:f;e&&e(t,null);let o=r.length;for(;o--;){let e=r[o];if("string"==typeof e){const t=n(e);t!==e&&(i(r)||(r[o]=t),e=t)}t[e]=!0}return t}function T(e){const i=s(null);for(const[r,o]of t(e))void 0!==n(e,r)&&(i[r]=o);return i}function w(t,e){for(;null!==t;){const i=n(t,e);if(i){if(i.get)return _(i.get);if("function"==typeof i.value)return _(i.value)}t=r(t)}function i(t){return console.warn("fallback value for",t),null}return i}const S=o(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),B=o(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),F=o(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),A=o(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),L=o(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),M=o(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),E=o(["#text"]),Z=o(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","xmlns","slot"]),N=o(["accent-height","accumulate","additive","alignment-baseline","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),O=o(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),I=o(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),j=a(/\{\{[\w\W]*|[\w\W]*\}\}/gm),q=a(/<%[\w\W]*|[\w\W]*%>/gm),D=a(/\${[\w\W]*}/gm),$=a(/^data-[\-\w.\u00B7-\uFFFF]/),z=a(/^aria-[\-\w]+$/),P=a(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),R=a(/^(?:\w+script|data):/i),W=a(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),H=a(/^html$/i);var U=Object.freeze({__proto__:null,MUSTACHE_EXPR:j,ERB_EXPR:q,TMPLIT_EXPR:D,DATA_ATTR:$,ARIA_ATTR:z,IS_ALLOWED_URI:P,IS_SCRIPT_OR_DATA:R,ATTR_WHITESPACE:W,DOCTYPE_NAME:H});const Y=function(){return"undefined"==typeof window?null:window},V=function(t,e){if("object"!=typeof t||"function"!=typeof t.createPolicy)return null;let i=null;const r="data-tt-policy-suffix";e&&e.hasAttribute(r)&&(i=e.getAttribute(r));const n="dompurify"+(i?"#"+i:"");try{return t.createPolicy(n,{createHTML:t=>t,createScriptURL:t=>t})}catch(o){return console.warn("TrustedTypes policy "+n+" could not be created."),null}};function G(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Y();const i=t=>G(t);if(i.version="3.0.6",i.removed=[],!e||!e.document||9!==e.document.nodeType)return i.isSupported=!1,i;let{document:r}=e;const n=r,a=n.currentScript,{DocumentFragment:l,HTMLTemplateElement:c,Node:_,Element:v,NodeFilter:j,NamedNodeMap:q=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:D,DOMParser:$,trustedTypes:z}=e,R=v.prototype,W=w(R,"cloneNode"),X=w(R,"nextSibling"),Q=w(R,"childNodes"),J=w(R,"parentNode");if("function"==typeof c){const t=r.createElement("template");t.content&&t.content.ownerDocument&&(r=t.content.ownerDocument)}let K,tt="";const{implementation:et,createNodeIterator:it,createDocumentFragment:rt,getElementsByTagName:nt}=r,{importNode:ot}=n;let at={};i.isSupported="function"==typeof t&&"function"==typeof J&&et&&void 0!==et.createHTMLDocument;const{MUSTACHE_EXPR:st,ERB_EXPR:lt,TMPLIT_EXPR:ct,DATA_ATTR:ht,ARIA_ATTR:ut,IS_SCRIPT_OR_DATA:dt,ATTR_WHITESPACE:ft}=U;let{IS_ALLOWED_URI:pt}=U,gt=null;const mt=k({},[...S,...B,...F,...L,...E]);let yt=null;const xt=k({},[...Z,...N,...O,...I]);let Ct=Object.seal(s(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),bt=null,_t=null,vt=!0,kt=!0,Tt=!1,wt=!0,St=!1,Bt=!1,Ft=!1,At=!1,Lt=!1,Mt=!1,Et=!1,Zt=!0,Nt=!1;const Ot="user-content-";let It=!0,jt=!1,qt={},Dt=null;const $t=k({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let zt=null;const Pt=k({},["audio","video","img","source","image","track"]);let Rt=null;const Wt=k({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Ht="http://www.w3.org/1998/Math/MathML",Ut="http://www.w3.org/2000/svg",Yt="http://www.w3.org/1999/xhtml";let Vt=Yt,Gt=!1,Xt=null;const Qt=k({},[Ht,Ut,Yt],p);let Jt=null;const Kt=["application/xhtml+xml","text/html"],te="text/html";let ee=null,ie=null;const re=r.createElement("form"),ne=function(t){return t instanceof RegExp||t instanceof Function},oe=function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!ie||ie!==t){if(t&&"object"==typeof t||(t={}),t=T(t),Jt=Jt=-1===Kt.indexOf(t.PARSER_MEDIA_TYPE)?te:t.PARSER_MEDIA_TYPE,ee="application/xhtml+xml"===Jt?p:f,gt="ALLOWED_TAGS"in t?k({},t.ALLOWED_TAGS,ee):mt,yt="ALLOWED_ATTR"in t?k({},t.ALLOWED_ATTR,ee):xt,Xt="ALLOWED_NAMESPACES"in t?k({},t.ALLOWED_NAMESPACES,p):Qt,Rt="ADD_URI_SAFE_ATTR"in t?k(T(Wt),t.ADD_URI_SAFE_ATTR,ee):Wt,zt="ADD_DATA_URI_TAGS"in t?k(T(Pt),t.ADD_DATA_URI_TAGS,ee):Pt,Dt="FORBID_CONTENTS"in t?k({},t.FORBID_CONTENTS,ee):$t,bt="FORBID_TAGS"in t?k({},t.FORBID_TAGS,ee):{},_t="FORBID_ATTR"in t?k({},t.FORBID_ATTR,ee):{},qt="USE_PROFILES"in t&&t.USE_PROFILES,vt=!1!==t.ALLOW_ARIA_ATTR,kt=!1!==t.ALLOW_DATA_ATTR,Tt=t.ALLOW_UNKNOWN_PROTOCOLS||!1,wt=!1!==t.ALLOW_SELF_CLOSE_IN_ATTR,St=t.SAFE_FOR_TEMPLATES||!1,Bt=t.WHOLE_DOCUMENT||!1,Lt=t.RETURN_DOM||!1,Mt=t.RETURN_DOM_FRAGMENT||!1,Et=t.RETURN_TRUSTED_TYPE||!1,At=t.FORCE_BODY||!1,Zt=!1!==t.SANITIZE_DOM,Nt=t.SANITIZE_NAMED_PROPS||!1,It=!1!==t.KEEP_CONTENT,jt=t.IN_PLACE||!1,pt=t.ALLOWED_URI_REGEXP||P,Vt=t.NAMESPACE||Yt,Ct=t.CUSTOM_ELEMENT_HANDLING||{},t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ct.tagNameCheck=t.CUSTOM_ELEMENT_HANDLING.tagNameCheck),t.CUSTOM_ELEMENT_HANDLING&&ne(t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ct.attributeNameCheck=t.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),t.CUSTOM_ELEMENT_HANDLING&&"boolean"==typeof t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Ct.allowCustomizedBuiltInElements=t.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),St&&(kt=!1),Mt&&(Lt=!0),qt&&(gt=k({},[...E]),yt=[],!0===qt.html&&(k(gt,S),k(yt,Z)),!0===qt.svg&&(k(gt,B),k(yt,N),k(yt,I)),!0===qt.svgFilters&&(k(gt,F),k(yt,N),k(yt,I)),!0===qt.mathMl&&(k(gt,L),k(yt,O),k(yt,I))),t.ADD_TAGS&&(gt===mt&&(gt=T(gt)),k(gt,t.ADD_TAGS,ee)),t.ADD_ATTR&&(yt===xt&&(yt=T(yt)),k(yt,t.ADD_ATTR,ee)),t.ADD_URI_SAFE_ATTR&&k(Rt,t.ADD_URI_SAFE_ATTR,ee),t.FORBID_CONTENTS&&(Dt===$t&&(Dt=T(Dt)),k(Dt,t.FORBID_CONTENTS,ee)),It&&(gt["#text"]=!0),Bt&&k(gt,["html","head","body"]),gt.table&&(k(gt,["tbody"]),delete bt.tbody),t.TRUSTED_TYPES_POLICY){if("function"!=typeof t.TRUSTED_TYPES_POLICY.createHTML)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if("function"!=typeof t.TRUSTED_TYPES_POLICY.createScriptURL)throw b('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');K=t.TRUSTED_TYPES_POLICY,tt=K.createHTML("")}else void 0===K&&(K=V(z,a)),null!==K&&"string"==typeof tt&&(tt=K.createHTML(""));o&&o(t),ie=t}},ae=k({},["mi","mo","mn","ms","mtext"]),se=k({},["foreignobject","desc","title","annotation-xml"]),le=k({},["title","style","font","a","script"]),ce=k({},B);k(ce,F),k(ce,A);const he=k({},L);k(he,M);const ue=function(t){let e=J(t);e&&e.tagName||(e={namespaceURI:Vt,tagName:"template"});const i=f(t.tagName),r=f(e.tagName);return!!Xt[t.namespaceURI]&&(t.namespaceURI===Ut?e.namespaceURI===Yt?"svg"===i:e.namespaceURI===Ht?"svg"===i&&("annotation-xml"===r||ae[r]):Boolean(ce[i]):t.namespaceURI===Ht?e.namespaceURI===Yt?"math"===i:e.namespaceURI===Ut?"math"===i&&se[r]:Boolean(he[i]):t.namespaceURI===Yt?!(e.namespaceURI===Ut&&!se[r])&&!(e.namespaceURI===Ht&&!ae[r])&&!he[i]&&(le[i]||!ce[i]):!("application/xhtml+xml"!==Jt||!Xt[t.namespaceURI]))},de=function(t){d(i.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){t.remove()}},fe=function(t,e){try{d(i.removed,{attribute:e.getAttributeNode(t),from:e})}catch(r){d(i.removed,{attribute:null,from:e})}if(e.removeAttribute(t),"is"===t&&!yt[t])if(Lt||Mt)try{de(e)}catch(r){}else try{e.setAttribute(t,"")}catch(r){}},pe=function(t){let e=null,i=null;if(At)t="<remove></remove>"+t;else{const e=g(t,/^[\r\n\t ]+/);i=e&&e[0]}"application/xhtml+xml"===Jt&&Vt===Yt&&(t='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+t+"</body></html>");const n=K?K.createHTML(t):t;if(Vt===Yt)try{e=(new $).parseFromString(n,Jt)}catch(a){}if(!e||!e.documentElement){e=et.createDocument(Vt,"template",null);try{e.documentElement.innerHTML=Gt?tt:n}catch(a){}}const o=e.body||e.documentElement;return t&&i&&o.insertBefore(r.createTextNode(i),o.childNodes[0]||null),Vt===Yt?nt.call(e,Bt?"html":"body")[0]:Bt?e.documentElement:o},ge=function(t){return it.call(t.ownerDocument||t,t,j.SHOW_ELEMENT|j.SHOW_COMMENT|j.SHOW_TEXT,null)},me=function(t){return t instanceof D&&("string"!=typeof t.nodeName||"string"!=typeof t.textContent||"function"!=typeof t.removeChild||!(t.attributes instanceof q)||"function"!=typeof t.removeAttribute||"function"!=typeof t.setAttribute||"string"!=typeof t.namespaceURI||"function"!=typeof t.insertBefore||"function"!=typeof t.hasChildNodes)},ye=function(t){return"function"==typeof _&&t instanceof _},xe=function(t,e,r){at[t]&&h(at[t],(t=>{t.call(i,e,r,ie)}))},Ce=function(t){let e=null;if(xe("beforeSanitizeElements",t,null),me(t))return de(t),!0;const r=ee(t.nodeName);if(xe("uponSanitizeElement",t,{tagName:r,allowedTags:gt}),t.hasChildNodes()&&!ye(t.firstElementChild)&&C(/<[/\w]/g,t.innerHTML)&&C(/<[/\w]/g,t.textContent))return de(t),!0;if(!gt[r]||bt[r]){if(!bt[r]&&_e(r)){if(Ct.tagNameCheck instanceof RegExp&&C(Ct.tagNameCheck,r))return!1;if(Ct.tagNameCheck instanceof Function&&Ct.tagNameCheck(r))return!1}if(It&&!Dt[r]){const e=J(t)||t.parentNode,i=Q(t)||t.childNodes;if(i&&e)for(let r=i.length-1;r>=0;--r)e.insertBefore(W(i[r],!0),X(t))}return de(t),!0}return t instanceof v&&!ue(t)?(de(t),!0):"noscript"!==r&&"noembed"!==r&&"noframes"!==r||!C(/<\/no(script|embed|frames)/i,t.innerHTML)?(St&&3===t.nodeType&&(e=t.textContent,h([st,lt,ct],(t=>{e=m(e,t," ")})),t.textContent!==e&&(d(i.removed,{element:t.cloneNode()}),t.textContent=e)),xe("afterSanitizeElements",t,null),!1):(de(t),!0)},be=function(t,e,i){if(Zt&&("id"===e||"name"===e)&&(i in r||i in re))return!1;if(kt&&!_t[e]&&C(ht,e));else if(vt&&C(ut,e));else if(!yt[e]||_t[e]){if(!(_e(t)&&(Ct.tagNameCheck instanceof RegExp&&C(Ct.tagNameCheck,t)||Ct.tagNameCheck instanceof Function&&Ct.tagNameCheck(t))&&(Ct.attributeNameCheck instanceof RegExp&&C(Ct.attributeNameCheck,e)||Ct.attributeNameCheck instanceof Function&&Ct.attributeNameCheck(e))||"is"===e&&Ct.allowCustomizedBuiltInElements&&(Ct.tagNameCheck instanceof RegExp&&C(Ct.tagNameCheck,i)||Ct.tagNameCheck instanceof Function&&Ct.tagNameCheck(i))))return!1}else if(Rt[e]);else if(C(pt,m(i,ft,"")));else if("src"!==e&&"xlink:href"!==e&&"href"!==e||"script"===t||0!==y(i,"data:")||!zt[t])if(Tt&&!C(dt,m(i,ft,"")));else if(i)return!1;return!0},_e=function(t){return t.indexOf("-")>0},ve=function(t){xe("beforeSanitizeAttributes",t,null);const{attributes:e}=t;if(!e)return;const r={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:yt};let n=e.length;for(;n--;){const a=e[n],{name:s,namespaceURI:l,value:c}=a,d=ee(s);let f="value"===s?c:x(c);if(r.attrName=d,r.attrValue=f,r.keepAttr=!0,r.forceKeepAttr=void 0,xe("uponSanitizeAttribute",t,r),f=r.attrValue,r.forceKeepAttr)continue;if(fe(s,t),!r.keepAttr)continue;if(!wt&&C(/\/>/i,f)){fe(s,t);continue}St&&h([st,lt,ct],(t=>{f=m(f,t," ")}));const p=ee(t.nodeName);if(be(p,d,f)){if(!Nt||"id"!==d&&"name"!==d||(fe(s,t),f=Ot+f),K&&"object"==typeof z&&"function"==typeof z.getAttributeType)if(l);else switch(z.getAttributeType(p,d)){case"TrustedHTML":f=K.createHTML(f);break;case"TrustedScriptURL":f=K.createScriptURL(f)}try{l?t.setAttributeNS(l,s,f):t.setAttribute(s,f),u(i.removed)}catch(o){}}}xe("afterSanitizeAttributes",t,null)},ke=function t(e){let i=null;const r=ge(e);for(xe("beforeSanitizeShadowDOM",e,null);i=r.nextNode();)xe("uponSanitizeShadowNode",i,null),Ce(i)||(i.content instanceof l&&t(i.content),ve(i));xe("afterSanitizeShadowDOM",e,null)};return i.sanitize=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=null,o=null,a=null,s=null;if(Gt=!t,Gt&&(t="\x3c!--\x3e"),"string"!=typeof t&&!ye(t)){if("function"!=typeof t.toString)throw b("toString is not a function");if("string"!=typeof(t=t.toString()))throw b("dirty is not a string, aborting")}if(!i.isSupported)return t;if(Ft||oe(e),i.removed=[],"string"==typeof t&&(jt=!1),jt){if(t.nodeName){const e=ee(t.nodeName);if(!gt[e]||bt[e])throw b("root node is forbidden and cannot be sanitized in-place")}}else if(t instanceof _)r=pe("\x3c!----\x3e"),o=r.ownerDocument.importNode(t,!0),1===o.nodeType&&"BODY"===o.nodeName||"HTML"===o.nodeName?r=o:r.appendChild(o);else{if(!Lt&&!St&&!Bt&&-1===t.indexOf("<"))return K&&Et?K.createHTML(t):t;if(r=pe(t),!r)return Lt?null:Et?tt:""}r&&At&&de(r.firstChild);const c=ge(jt?t:r);for(;a=c.nextNode();)Ce(a)||(a.content instanceof l&&ke(a.content),ve(a));if(jt)return t;if(Lt){if(Mt)for(s=rt.call(r.ownerDocument);r.firstChild;)s.appendChild(r.firstChild);else s=r;return(yt.shadowroot||yt.shadowrootmode)&&(s=ot.call(n,s,!0)),s}let u=Bt?r.outerHTML:r.innerHTML;return Bt&>["!doctype"]&&r.ownerDocument&&r.ownerDocument.doctype&&r.ownerDocument.doctype.name&&C(H,r.ownerDocument.doctype.name)&&(u="<!DOCTYPE "+r.ownerDocument.doctype.name+">\n"+u),St&&h([st,lt,ct],(t=>{u=m(u,t," ")})),K&&Et?K.createHTML(u):u},i.setConfig=function(){oe(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}),Ft=!0},i.clearConfig=function(){ie=null,Ft=!1},i.isValidAttribute=function(t,e,i){ie||oe({});const r=ee(t),n=ee(e);return be(r,n,i)},i.addHook=function(t,e){"function"==typeof e&&(at[t]=at[t]||[],d(at[t],e))},i.removeHook=function(t){if(at[t])return u(at[t])},i.removeHooks=function(t){at[t]&&(at[t]=[])},i.removeAllHooks=function(){at={}},i}return G()}()},87594:(t,e)=>{function i(t){let e,i=[];for(let r of t.split(",").map((t=>t.trim())))if(/^-?\d+$/.test(r))i.push(parseInt(r,10));else if(e=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[t,r,n,o]=e;if(r&&o){r=parseInt(r),o=parseInt(o);const t=r<o?1:-1;"-"!==n&&".."!==n&&"\u2025"!==n||(o+=t);for(let e=r;e!==o;e+=t)i.push(e)}}return i}e.default=i,t.exports=i},18464:(t,e,i)=>{"use strict";function r(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];var r=Array.from("string"==typeof t?[t]:t);r[r.length-1]=r[r.length-1].replace(/\r?\n([\t ]*)$/,"");var n=r.reduce((function(t,e){var i=e.match(/\n([\t ]+|(?!\s).)/g);return i?t.concat(i.map((function(t){var e,i;return null!==(i=null===(e=t.match(/[\t ]/g))||void 0===e?void 0:e.length)&&void 0!==i?i:0}))):t}),[]);if(n.length){var o=new RegExp("\n[\t ]{"+Math.min.apply(Math,n)+"}","g");r=r.map((function(t){return t.replace(o,"\n")}))}r[0]=r[0].replace(/^\r?\n/,"");var a=r[0];return e.forEach((function(t,e){var i=a.match(/(?:^|\n)( *)$/),n=i?i[1]:"",o=t;"string"==typeof t&&t.includes("\n")&&(o=String(t).split("\n").map((function(t,e){return 0===e?t:""+n+t})).join("\n")),a+=o+r[e+1]})),a}i.d(e,{Z:()=>r})},11151:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s,a:()=>a});var r=i(67294);const n={},o=r.createContext(n);function a(t){const e=r.useContext(o);return r.useMemo((function(){return"function"==typeof t?t(e):{...e,...t}}),[e,t])}function s(t){let e;return e=t.disableParentContext?"function"==typeof t.components?t.components(n):t.components||n:a(t.components),r.createElement(o.Provider,{value:e},t.children)}},64218:(t,e,i)=>{"use strict";function r(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i<r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i<n||void 0===i&&n>=n)&&(i=n)}return i}function n(t,e){let i;if(void 0===e)for(const r of t)null!=r&&(i>r||void 0===i&&r>=r)&&(i=r);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(i>n||void 0===i&&n>=n)&&(i=n)}return i}function o(t){return t}i.d(e,{Nb1:()=>cs,LLu:()=>x,F5q:()=>y,$0Z:()=>vs,Dts:()=>Ts,WQY:()=>Ss,qpX:()=>Fs,u93:()=>As,tFB:()=>Ms,YY7:()=>Ns,OvA:()=>Is,dCK:()=>qs,zgE:()=>zs,fGX:()=>Rs,$m7:()=>Hs,c_6:()=>ds,fxm:()=>Ys,FdL:()=>el,ak_:()=>il,SxZ:()=>ol,eA_:()=>sl,jsv:()=>cl,iJ:()=>ll,JHv:()=>pr,jvg:()=>gs,Fp7:()=>r,VV$:()=>n,ve8:()=>xs,tiA:()=>kr,BYU:()=>mn,PKp:()=>vr,Xf:()=>Za,K2I:()=>Na,Ys:()=>Oa,td_:()=>Ia,YPS:()=>Yi,rr1:()=>Zn,i$Z:()=>uo,y2j:()=>Pn,WQD:()=>Mn,U8T:()=>Bn,Z_i:()=>An,Ox9:()=>qn,F0B:()=>Jn,LqH:()=>Rn,S1K:()=>Fn,Zyz:()=>jn,Igq:()=>zn,YDX:()=>Dn,EFj:()=>$n});var a=1,s=2,l=3,c=4,h=1e-6;function u(t){return"translate("+t+",0)"}function d(t){return"translate(0,"+t+")"}function f(t){return e=>+t(e)}function p(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),i=>+t(i)+e}function g(){return!this.__axis}function m(t,e){var i=[],r=null,n=null,m=6,y=6,x=3,C="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,b=t===a||t===c?-1:1,_=t===c||t===s?"x":"y",v=t===a||t===l?u:d;function k(u){var d=null==r?e.ticks?e.ticks.apply(e,i):e.domain():r,k=null==n?e.tickFormat?e.tickFormat.apply(e,i):o:n,T=Math.max(m,0)+x,w=e.range(),S=+w[0]+C,B=+w[w.length-1]+C,F=(e.bandwidth?p:f)(e.copy(),C),A=u.selection?u.selection():u,L=A.selectAll(".domain").data([null]),M=A.selectAll(".tick").data(d,e).order(),E=M.exit(),Z=M.enter().append("g").attr("class","tick"),N=M.select("line"),O=M.select("text");L=L.merge(L.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),M=M.merge(Z),N=N.merge(Z.append("line").attr("stroke","currentColor").attr(_+"2",b*m)),O=O.merge(Z.append("text").attr("fill","currentColor").attr(_,b*T).attr("dy",t===a?"0em":t===l?"0.71em":"0.32em")),u!==A&&(L=L.transition(u),M=M.transition(u),N=N.transition(u),O=O.transition(u),E=E.transition(u).attr("opacity",h).attr("transform",(function(t){return isFinite(t=F(t))?v(t+C):this.getAttribute("transform")})),Z.attr("opacity",h).attr("transform",(function(t){var e=this.parentNode.__axis;return v((e&&isFinite(e=e(t))?e:F(t))+C)}))),E.remove(),L.attr("d",t===c||t===s?y?"M"+b*y+","+S+"H"+C+"V"+B+"H"+b*y:"M"+C+","+S+"V"+B:y?"M"+S+","+b*y+"V"+C+"H"+B+"V"+b*y:"M"+S+","+C+"H"+B),M.attr("opacity",1).attr("transform",(function(t){return v(F(t)+C)})),N.attr(_+"2",b*m),O.attr(_,b*T).text(k),A.filter(g).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===s?"start":t===c?"end":"middle"),A.each((function(){this.__axis=F}))}return k.scale=function(t){return arguments.length?(e=t,k):e},k.ticks=function(){return i=Array.from(arguments),k},k.tickArguments=function(t){return arguments.length?(i=null==t?[]:Array.from(t),k):i.slice()},k.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),k):r&&r.slice()},k.tickFormat=function(t){return arguments.length?(n=t,k):n},k.tickSize=function(t){return arguments.length?(m=y=+t,k):m},k.tickSizeInner=function(t){return arguments.length?(m=+t,k):m},k.tickSizeOuter=function(t){return arguments.length?(y=+t,k):y},k.tickPadding=function(t){return arguments.length?(x=+t,k):x},k.offset=function(t){return arguments.length?(C=+t,k):C},k}function y(t){return m(a,t)}function x(t){return m(l,t)}function C(){}function b(t){return null==t?C:function(){return this.querySelector(t)}}function _(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}function v(){return[]}function k(t){return null==t?v:function(){return this.querySelectorAll(t)}}function T(t){return function(){return this.matches(t)}}function w(t){return function(e){return e.matches(t)}}var S=Array.prototype.find;function B(){return this.firstElementChild}var F=Array.prototype.filter;function A(){return Array.from(this.children)}function L(t){return new Array(t.length)}function M(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function E(t,e,i,r,n,o){for(var a,s=0,l=e.length,c=o.length;s<c;++s)(a=e[s])?(a.__data__=o[s],r[s]=a):i[s]=new M(t,o[s]);for(;s<l;++s)(a=e[s])&&(n[s]=a)}function Z(t,e,i,r,n,o,a){var s,l,c,h=new Map,u=e.length,d=o.length,f=new Array(u);for(s=0;s<u;++s)(l=e[s])&&(f[s]=c=a.call(l,l.__data__,s,e)+"",h.has(c)?n[s]=l:h.set(c,l));for(s=0;s<d;++s)c=a.call(t,o[s],s,o)+"",(l=h.get(c))?(r[s]=l,l.__data__=o[s],h.delete(c)):i[s]=new M(t,o[s]);for(s=0;s<u;++s)(l=e[s])&&h.get(f[s])===l&&(n[s]=l)}function N(t){return t.__data__}function O(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function I(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}M.prototype={constructor:M,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var j="http://www.w3.org/1999/xhtml";const q={svg:"http://www.w3.org/2000/svg",xhtml:j,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function D(t){var e=t+="",i=e.indexOf(":");return i>=0&&"xmlns"!==(e=t.slice(0,i))&&(t=t.slice(i+1)),q.hasOwnProperty(e)?{space:q[e],local:t}:t}function $(t){return function(){this.removeAttribute(t)}}function z(t){return function(){this.removeAttributeNS(t.space,t.local)}}function P(t,e){return function(){this.setAttribute(t,e)}}function R(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function W(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttribute(t):this.setAttribute(t,i)}}function H(t,e){return function(){var i=e.apply(this,arguments);null==i?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,i)}}function U(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function Y(t){return function(){this.style.removeProperty(t)}}function V(t,e,i){return function(){this.style.setProperty(t,e,i)}}function G(t,e,i){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,i)}}function X(t,e){return t.style.getPropertyValue(e)||U(t).getComputedStyle(t,null).getPropertyValue(e)}function Q(t){return function(){delete this[t]}}function J(t,e){return function(){this[t]=e}}function K(t,e){return function(){var i=e.apply(this,arguments);null==i?delete this[t]:this[t]=i}}function tt(t){return t.trim().split(/^|\s+/)}function et(t){return t.classList||new it(t)}function it(t){this._node=t,this._names=tt(t.getAttribute("class")||"")}function rt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.add(e[r])}function nt(t,e){for(var i=et(t),r=-1,n=e.length;++r<n;)i.remove(e[r])}function ot(t){return function(){rt(this,t)}}function at(t){return function(){nt(this,t)}}function st(t,e){return function(){(e.apply(this,arguments)?rt:nt)(this,t)}}function lt(){this.textContent=""}function ct(t){return function(){this.textContent=t}}function ht(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function ut(){this.innerHTML=""}function dt(t){return function(){this.innerHTML=t}}function ft(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function pt(){this.nextSibling&&this.parentNode.appendChild(this)}function gt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function mt(t){return function(){var e=this.ownerDocument,i=this.namespaceURI;return i===j&&e.documentElement.namespaceURI===j?e.createElement(t):e.createElementNS(i,t)}}function yt(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function xt(t){var e=D(t);return(e.local?yt:mt)(e)}function Ct(){return null}function bt(){var t=this.parentNode;t&&t.removeChild(this)}function _t(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function vt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function kt(t){return function(){var e=this.__on;if(e){for(var i,r=0,n=-1,o=e.length;r<o;++r)i=e[r],t.type&&i.type!==t.type||i.name!==t.name?e[++n]=i:this.removeEventListener(i.type,i.listener,i.options);++n?e.length=n:delete this.__on}}}function Tt(t,e,i){return function(){var r,n=this.__on,o=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(n)for(var a=0,s=n.length;a<s;++a)if((r=n[a]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=i),void(r.value=e);this.addEventListener(t.type,o,i),r={type:t.type,name:t.name,value:e,listener:o,options:i},n?n.push(r):this.__on=[r]}}function wt(t,e,i){var r=U(t),n=r.CustomEvent;"function"==typeof n?n=new n(e,i):(n=r.document.createEvent("Event"),i?(n.initEvent(e,i.bubbles,i.cancelable),n.detail=i.detail):n.initEvent(e,!1,!1)),t.dispatchEvent(n)}function St(t,e){return function(){return wt(this,t,e)}}function Bt(t,e){return function(){return wt(this,t,e.apply(this,arguments))}}it.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Ft=[null];function At(t,e){this._groups=t,this._parents=e}function Lt(){return new At([[document.documentElement]],Ft)}At.prototype=Lt.prototype={constructor:At,select:function(t){"function"!=typeof t&&(t=b(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a,s=e[n],l=s.length,c=r[n]=new Array(l),h=0;h<l;++h)(o=s[h])&&(a=t.call(o,o.__data__,h,s))&&("__data__"in o&&(a.__data__=o.__data__),c[h]=a);return new At(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){return _(t.apply(this,arguments))}}(t):k(t);for(var e=this._groups,i=e.length,r=[],n=[],o=0;o<i;++o)for(var a,s=e[o],l=s.length,c=0;c<l;++c)(a=s[c])&&(r.push(t.call(a,a.__data__,c,s)),n.push(a));return new At(r,n)},selectChild:function(t){return this.select(null==t?B:function(t){return function(){return S.call(this.children,t)}}("function"==typeof t?t:w(t)))},selectChildren:function(t){return this.selectAll(null==t?A:function(t){return function(){return F.call(this.children,t)}}("function"==typeof t?t:w(t)))},filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new At(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,N);var i,r=e?Z:E,n=this._parents,o=this._groups;"function"!=typeof t&&(i=t,t=function(){return i});for(var a=o.length,s=new Array(a),l=new Array(a),c=new Array(a),h=0;h<a;++h){var u=n[h],d=o[h],f=d.length,p=O(t.call(u,u&&u.__data__,h,n)),g=p.length,m=l[h]=new Array(g),y=s[h]=new Array(g);r(u,d,m,y,c[h]=new Array(f),p,e);for(var x,C,b=0,_=0;b<g;++b)if(x=m[b]){for(b>=_&&(_=b+1);!(C=y[_])&&++_<g;);x._next=C||null}}return(s=new At(s,n))._enter=l,s._exit=c,s},enter:function(){return new At(this._enter||this._groups.map(L),this._parents)},exit:function(){return new At(this._exit||this._groups.map(L),this._parents)},join:function(t,e,i){var r=this.enter(),n=this,o=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(n=e(n))&&(n=n.selection()),null==i?o.remove():i(o),r&&n?r.merge(n).order():n},merge:function(t){for(var e=t.selection?t.selection():t,i=this._groups,r=e._groups,n=i.length,o=r.length,a=Math.min(n,o),s=new Array(n),l=0;l<a;++l)for(var c,h=i[l],u=r[l],d=h.length,f=s[l]=new Array(d),p=0;p<d;++p)(c=h[p]||u[p])&&(f[p]=c);for(;l<n;++l)s[l]=i[l];return new At(s,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,i=t.length;++e<i;)for(var r,n=t[e],o=n.length-1,a=n[o];--o>=0;)(r=n[o])&&(a&&4^r.compareDocumentPosition(a)&&a.parentNode.insertBefore(r,a),a=r);return this},sort:function(t){function e(e,i){return e&&i?t(e.__data__,i.__data__):!e-!i}t||(t=I);for(var i=this._groups,r=i.length,n=new Array(r),o=0;o<r;++o){for(var a,s=i[o],l=s.length,c=n[o]=new Array(l),h=0;h<l;++h)(a=s[h])&&(c[h]=a);c.sort(e)}return new At(n,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r=t[e],n=0,o=r.length;n<o;++n){var a=r[n];if(a)return a}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,i=0,r=e.length;i<r;++i)for(var n,o=e[i],a=0,s=o.length;a<s;++a)(n=o[a])&&t.call(n,n.__data__,a,o);return this},attr:function(t,e){var i=D(t);if(arguments.length<2){var r=this.node();return i.local?r.getAttributeNS(i.space,i.local):r.getAttribute(i)}return this.each((null==e?i.local?z:$:"function"==typeof e?i.local?H:W:i.local?R:P)(i,e))},style:function(t,e,i){return arguments.length>1?this.each((null==e?Y:"function"==typeof e?G:V)(t,e,null==i?"":i)):X(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Q:"function"==typeof e?K:J)(t,e)):this.node()[t]},classed:function(t,e){var i=tt(t+"");if(arguments.length<2){for(var r=et(this.node()),n=-1,o=i.length;++n<o;)if(!r.contains(i[n]))return!1;return!0}return this.each(("function"==typeof e?st:e?ot:at)(i,e))},text:function(t){return arguments.length?this.each(null==t?lt:("function"==typeof t?ht:ct)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?ut:("function"==typeof t?ft:dt)(t)):this.node().innerHTML},raise:function(){return this.each(pt)},lower:function(){return this.each(gt)},append:function(t){var e="function"==typeof t?t:xt(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var i="function"==typeof t?t:xt(t),r=null==e?Ct:"function"==typeof e?e:b(e);return this.select((function(){return this.insertBefore(i.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(bt)},clone:function(t){return this.select(t?vt:_t)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,i){var r,n,o=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");return i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),{type:t,name:e}}))}(t+""),a=o.length;if(!(arguments.length<2)){for(s=e?Tt:kt,r=0;r<a;++r)this.each(s(o[r],e,i));return this}var s=this.node().__on;if(s)for(var l,c=0,h=s.length;c<h;++c)for(r=0,l=s[c];r<a;++r)if((n=o[r]).type===l.type&&n.name===l.name)return l.value},dispatch:function(t,e){return this.each(("function"==typeof e?Bt:St)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,i=t.length;e<i;++e)for(var r,n=t[e],o=0,a=n.length;o<a;++o)(r=n[o])&&(yield r)}};const Mt=Lt;var Et={value:()=>{}};function Zt(){for(var t,e=0,i=arguments.length,r={};e<i;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Nt(r)}function Nt(t){this._=t}function Ot(t,e){for(var i,r=0,n=t.length;r<n;++r)if((i=t[r]).name===e)return i.value}function It(t,e,i){for(var r=0,n=t.length;r<n;++r)if(t[r].name===e){t[r]=Et,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=i&&t.push({name:e,value:i}),t}Nt.prototype=Zt.prototype={constructor:Nt,on:function(t,e){var i,r,n=this._,o=(r=n,(t+"").trim().split(/^|\s+/).map((function(t){var e="",i=t.indexOf(".");if(i>=0&&(e=t.slice(i+1),t=t.slice(0,i)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),a=-1,s=o.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++a<s;)if(i=(t=o[a]).type)n[i]=It(n[i],t.name,e);else if(null==e)for(i in n)n[i]=It(n[i],t.name,null);return this}for(;++a<s;)if((i=(t=o[a]).type)&&(i=Ot(n[i],t.name)))return i},copy:function(){var t={},e=this._;for(var i in e)t[i]=e[i].slice();return new Nt(t)},call:function(t,e){if((i=arguments.length-2)>0)for(var i,r,n=new Array(i),o=0;o<i;++o)n[o]=arguments[o+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(o=0,i=(r=this._[t]).length;o<i;++o)r[o].value.apply(e,n)},apply:function(t,e,i){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],n=0,o=r.length;n<o;++n)r[n].value.apply(e,i)}};const jt=Zt;var qt,Dt,$t=0,zt=0,Pt=0,Rt=1e3,Wt=0,Ht=0,Ut=0,Yt="object"==typeof performance&&performance.now?performance:Date,Vt="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Gt(){return Ht||(Vt(Xt),Ht=Yt.now()+Ut)}function Xt(){Ht=0}function Qt(){this._call=this._time=this._next=null}function Jt(t,e,i){var r=new Qt;return r.restart(t,e,i),r}function Kt(){Ht=(Wt=Yt.now())+Ut,$t=zt=0;try{!function(){Gt(),++$t;for(var t,e=qt;e;)(t=Ht-e._time)>=0&&e._call.call(void 0,t),e=e._next;--$t}()}finally{$t=0,function(){var t,e,i=qt,r=1/0;for(;i;)i._call?(r>i._time&&(r=i._time),t=i,i=i._next):(e=i._next,i._next=null,i=t?t._next=e:qt=e);Dt=t,ee(r)}(),Ht=0}}function te(){var t=Yt.now(),e=t-Wt;e>Rt&&(Ut-=e,Wt=t)}function ee(t){$t||(zt&&(zt=clearTimeout(zt)),t-Ht>24?(t<1/0&&(zt=setTimeout(Kt,t-Yt.now()-Ut)),Pt&&(Pt=clearInterval(Pt))):(Pt||(Wt=Yt.now(),Pt=setInterval(te,Rt)),$t=1,Vt(Kt)))}function ie(t,e,i){var r=new Qt;return e=null==e?0:+e,r.restart((i=>{r.stop(),t(i+e)}),e,i),r}Qt.prototype=Jt.prototype={constructor:Qt,restart:function(t,e,i){if("function"!=typeof t)throw new TypeError("callback is not a function");i=(null==i?Gt():+i)+(null==e?0:+e),this._next||Dt===this||(Dt?Dt._next=this:qt=this,Dt=this),this._call=t,this._time=i,ee()},stop:function(){this._call&&(this._call=null,this._time=1/0,ee())}};var re=jt("start","end","cancel","interrupt"),ne=[],oe=0,ae=1,se=2,le=3,ce=4,he=5,ue=6;function de(t,e,i,r,n,o){var a=t.__transition;if(a){if(i in a)return}else t.__transition={};!function(t,e,i){var r,n=t.__transition;function o(t){i.state=ae,i.timer.restart(a,i.delay,i.time),i.delay<=t&&a(t-i.delay)}function a(o){var c,h,u,d;if(i.state!==ae)return l();for(c in n)if((d=n[c]).name===i.name){if(d.state===le)return ie(a);d.state===ce?(d.state=ue,d.timer.stop(),d.on.call("interrupt",t,t.__data__,d.index,d.group),delete n[c]):+c<e&&(d.state=ue,d.timer.stop(),d.on.call("cancel",t,t.__data__,d.index,d.group),delete n[c])}if(ie((function(){i.state===le&&(i.state=ce,i.timer.restart(s,i.delay,i.time),s(o))})),i.state=se,i.on.call("start",t,t.__data__,i.index,i.group),i.state===se){for(i.state=le,r=new Array(u=i.tween.length),c=0,h=-1;c<u;++c)(d=i.tween[c].value.call(t,t.__data__,i.index,i.group))&&(r[++h]=d);r.length=h+1}}function s(e){for(var n=e<i.duration?i.ease.call(null,e/i.duration):(i.timer.restart(l),i.state=he,1),o=-1,a=r.length;++o<a;)r[o].call(t,n);i.state===he&&(i.on.call("end",t,t.__data__,i.index,i.group),l())}function l(){for(var r in i.state=ue,i.timer.stop(),delete n[e],n)return;delete t.__transition}n[e]=i,i.timer=Jt(o,0,i.time)}(t,i,{name:e,index:r,group:n,on:re,tween:ne,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:oe})}function fe(t,e){var i=ge(t,e);if(i.state>oe)throw new Error("too late; already scheduled");return i}function pe(t,e){var i=ge(t,e);if(i.state>le)throw new Error("too late; already running");return i}function ge(t,e){var i=t.__transition;if(!i||!(i=i[e]))throw new Error("transition not found");return i}function me(t,e){return t=+t,e=+e,function(i){return t*(1-i)+e*i}}var ye,xe=180/Math.PI,Ce={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function be(t,e,i,r,n,o){var a,s,l;return(a=Math.sqrt(t*t+e*e))&&(t/=a,e/=a),(l=t*i+e*r)&&(i-=t*l,r-=e*l),(s=Math.sqrt(i*i+r*r))&&(i/=s,r/=s,l/=s),t*r<e*i&&(t=-t,e=-e,l=-l,a=-a),{translateX:n,translateY:o,rotate:Math.atan2(e,t)*xe,skewX:Math.atan(l)*xe,scaleX:a,scaleY:s}}function _e(t,e,i,r){function n(t){return t.length?t.pop()+" ":""}return function(o,a){var s=[],l=[];return o=t(o),a=t(a),function(t,r,n,o,a,s){if(t!==n||r!==o){var l=a.push("translate(",null,e,null,i);s.push({i:l-4,x:me(t,n)},{i:l-2,x:me(r,o)})}else(n||o)&&a.push("translate("+n+e+o+i)}(o.translateX,o.translateY,a.translateX,a.translateY,s,l),function(t,e,i,o){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),o.push({i:i.push(n(i)+"rotate(",null,r)-2,x:me(t,e)})):e&&i.push(n(i)+"rotate("+e+r)}(o.rotate,a.rotate,s,l),function(t,e,i,o){t!==e?o.push({i:i.push(n(i)+"skewX(",null,r)-2,x:me(t,e)}):e&&i.push(n(i)+"skewX("+e+r)}(o.skewX,a.skewX,s,l),function(t,e,i,r,o,a){if(t!==i||e!==r){var s=o.push(n(o)+"scale(",null,",",null,")");a.push({i:s-4,x:me(t,i)},{i:s-2,x:me(e,r)})}else 1===i&&1===r||o.push(n(o)+"scale("+i+","+r+")")}(o.scaleX,o.scaleY,a.scaleX,a.scaleY,s,l),o=a=null,function(t){for(var e,i=-1,r=l.length;++i<r;)s[(e=l[i]).i]=e.x(t);return s.join("")}}}var ve=_e((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Ce:be(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),ke=_e((function(t){return null==t?Ce:(ye||(ye=document.createElementNS("http://www.w3.org/2000/svg","g")),ye.setAttribute("transform",t),(t=ye.transform.baseVal.consolidate())?be((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):Ce)}),", ",")",")");function Te(t,e){var i,r;return function(){var n=pe(this,t),o=n.tween;if(o!==i)for(var a=0,s=(r=i=o).length;a<s;++a)if(r[a].name===e){(r=r.slice()).splice(a,1);break}n.tween=r}}function we(t,e,i){var r,n;if("function"!=typeof i)throw new Error;return function(){var o=pe(this,t),a=o.tween;if(a!==r){n=(r=a).slice();for(var s={name:e,value:i},l=0,c=n.length;l<c;++l)if(n[l].name===e){n[l]=s;break}l===c&&n.push(s)}o.tween=n}}function Se(t,e,i){var r=t._id;return t.each((function(){var t=pe(this,r);(t.value||(t.value={}))[e]=i.apply(this,arguments)})),function(t){return ge(t,r).value[e]}}function Be(t,e,i){t.prototype=e.prototype=i,i.constructor=t}function Fe(t,e){var i=Object.create(t.prototype);for(var r in e)i[r]=e[r];return i}function Ae(){}var Le=.7,Me=1/Le,Ee="\\s*([+-]?\\d+)\\s*",Ze="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Ne="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Oe=/^#([0-9a-f]{3,8})$/,Ie=new RegExp(`^rgb\\(${Ee},${Ee},${Ee}\\)$`),je=new RegExp(`^rgb\\(${Ne},${Ne},${Ne}\\)$`),qe=new RegExp(`^rgba\\(${Ee},${Ee},${Ee},${Ze}\\)$`),De=new RegExp(`^rgba\\(${Ne},${Ne},${Ne},${Ze}\\)$`),$e=new RegExp(`^hsl\\(${Ze},${Ne},${Ne}\\)$`),ze=new RegExp(`^hsla\\(${Ze},${Ne},${Ne},${Ze}\\)$`),Pe={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Re(){return this.rgb().formatHex()}function We(){return this.rgb().formatRgb()}function He(t){var e,i;return t=(t+"").trim().toLowerCase(),(e=Oe.exec(t))?(i=e[1].length,e=parseInt(e[1],16),6===i?Ue(e):3===i?new Xe(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===i?Ye(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===i?Ye(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Ie.exec(t))?new Xe(e[1],e[2],e[3],1):(e=je.exec(t))?new Xe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=qe.exec(t))?Ye(e[1],e[2],e[3],e[4]):(e=De.exec(t))?Ye(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=$e.exec(t))?ii(e[1],e[2]/100,e[3]/100,1):(e=ze.exec(t))?ii(e[1],e[2]/100,e[3]/100,e[4]):Pe.hasOwnProperty(t)?Ue(Pe[t]):"transparent"===t?new Xe(NaN,NaN,NaN,0):null}function Ue(t){return new Xe(t>>16&255,t>>8&255,255&t,1)}function Ye(t,e,i,r){return r<=0&&(t=e=i=NaN),new Xe(t,e,i,r)}function Ve(t){return t instanceof Ae||(t=He(t)),t?new Xe((t=t.rgb()).r,t.g,t.b,t.opacity):new Xe}function Ge(t,e,i,r){return 1===arguments.length?Ve(t):new Xe(t,e,i,null==r?1:r)}function Xe(t,e,i,r){this.r=+t,this.g=+e,this.b=+i,this.opacity=+r}function Qe(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}`}function Je(){const t=Ke(this.opacity);return`${1===t?"rgb(":"rgba("}${ti(this.r)}, ${ti(this.g)}, ${ti(this.b)}${1===t?")":`, ${t})`}`}function Ke(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function ti(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function ei(t){return((t=ti(t))<16?"0":"")+t.toString(16)}function ii(t,e,i,r){return r<=0?t=e=i=NaN:i<=0||i>=1?t=e=NaN:e<=0&&(t=NaN),new ni(t,e,i,r)}function ri(t){if(t instanceof ni)return new ni(t.h,t.s,t.l,t.opacity);if(t instanceof Ae||(t=He(t)),!t)return new ni;if(t instanceof ni)return t;var e=(t=t.rgb()).r/255,i=t.g/255,r=t.b/255,n=Math.min(e,i,r),o=Math.max(e,i,r),a=NaN,s=o-n,l=(o+n)/2;return s?(a=e===o?(i-r)/s+6*(i<r):i===o?(r-e)/s+2:(e-i)/s+4,s/=l<.5?o+n:2-o-n,a*=60):s=l>0&&l<1?0:a,new ni(a,s,l,t.opacity)}function ni(t,e,i,r){this.h=+t,this.s=+e,this.l=+i,this.opacity=+r}function oi(t){return(t=(t||0)%360)<0?t+360:t}function ai(t){return Math.max(0,Math.min(1,t||0))}function si(t,e,i){return 255*(t<60?e+(i-e)*t/60:t<180?i:t<240?e+(i-e)*(240-t)/60:e)}function li(t,e,i,r,n){var o=t*t,a=o*t;return((1-3*t+3*o-a)*e+(4-6*o+3*a)*i+(1+3*t+3*o-3*a)*r+a*n)/6}Be(Ae,He,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:Re,formatHex:Re,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return ri(this).formatHsl()},formatRgb:We,toString:We}),Be(Xe,Ge,Fe(Ae,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new Xe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Xe(ti(this.r),ti(this.g),ti(this.b),Ke(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Qe,formatHex:Qe,formatHex8:function(){return`#${ei(this.r)}${ei(this.g)}${ei(this.b)}${ei(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Je,toString:Je})),Be(ni,(function(t,e,i,r){return 1===arguments.length?ri(t):new ni(t,e,i,null==r?1:r)}),Fe(Ae,{brighter(t){return t=null==t?Me:Math.pow(Me,t),new ni(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?Le:Math.pow(Le,t),new ni(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,i=this.l,r=i+(i<.5?i:1-i)*e,n=2*i-r;return new Xe(si(t>=240?t-240:t+120,n,r),si(t,n,r),si(t<120?t+240:t-120,n,r),this.opacity)},clamp(){return new ni(oi(this.h),ai(this.s),ai(this.l),Ke(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=Ke(this.opacity);return`${1===t?"hsl(":"hsla("}${oi(this.h)}, ${100*ai(this.s)}%, ${100*ai(this.l)}%${1===t?")":`, ${t})`}`}}));const ci=t=>()=>t;function hi(t,e){return function(i){return t+i*e}}function ui(t){return 1==(t=+t)?di:function(e,i){return i-e?function(t,e,i){return t=Math.pow(t,i),e=Math.pow(e,i)-t,i=1/i,function(r){return Math.pow(t+r*e,i)}}(e,i,t):ci(isNaN(e)?i:e)}}function di(t,e){var i=e-t;return i?hi(t,i):ci(isNaN(t)?e:t)}const fi=function t(e){var i=ui(e);function r(t,e){var r=i((t=Ge(t)).r,(e=Ge(e)).r),n=i(t.g,e.g),o=i(t.b,e.b),a=di(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=n(e),t.b=o(e),t.opacity=a(e),t+""}}return r.gamma=t,r}(1);function pi(t){return function(e){var i,r,n=e.length,o=new Array(n),a=new Array(n),s=new Array(n);for(i=0;i<n;++i)r=Ge(e[i]),o[i]=r.r||0,a[i]=r.g||0,s[i]=r.b||0;return o=t(o),a=t(a),s=t(s),r.opacity=1,function(t){return r.r=o(t),r.g=a(t),r.b=s(t),r+""}}}pi((function(t){var e=t.length-1;return function(i){var r=i<=0?i=0:i>=1?(i=1,e-1):Math.floor(i*e),n=t[r],o=t[r+1],a=r>0?t[r-1]:2*n-o,s=r<e-1?t[r+2]:2*o-n;return li((i-r/e)*e,a,n,o,s)}})),pi((function(t){var e=t.length;return function(i){var r=Math.floor(((i%=1)<0?++i:i)*e),n=t[(r+e-1)%e],o=t[r%e],a=t[(r+1)%e],s=t[(r+2)%e];return li((i-r/e)*e,n,o,a,s)}}));var gi=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,mi=new RegExp(gi.source,"g");function yi(t,e){var i,r,n,o=gi.lastIndex=mi.lastIndex=0,a=-1,s=[],l=[];for(t+="",e+="";(i=gi.exec(t))&&(r=mi.exec(e));)(n=r.index)>o&&(n=e.slice(o,n),s[a]?s[a]+=n:s[++a]=n),(i=i[0])===(r=r[0])?s[a]?s[a]+=r:s[++a]=r:(s[++a]=null,l.push({i:a,x:me(i,r)})),o=mi.lastIndex;return o<e.length&&(n=e.slice(o),s[a]?s[a]+=n:s[++a]=n),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var i,r=0;r<e;++r)s[(i=l[r]).i]=i.x(t);return s.join("")})}function xi(t,e){var i;return("number"==typeof e?me:e instanceof He?fi:(i=He(e))?(e=i,fi):yi)(t,e)}function Ci(t){return function(){this.removeAttribute(t)}}function bi(t){return function(){this.removeAttributeNS(t.space,t.local)}}function _i(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttribute(t);return a===o?null:a===r?n:n=e(r=a,i)}}function vi(t,e,i){var r,n,o=i+"";return function(){var a=this.getAttributeNS(t.space,t.local);return a===o?null:a===r?n:n=e(r=a,i)}}function ki(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttribute(t))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttribute(t)}}function Ti(t,e,i){var r,n,o;return function(){var a,s,l=i(this);if(null!=l)return(a=this.getAttributeNS(t.space,t.local))===(s=l+"")?null:a===r&&s===n?o:(n=s,o=e(r=a,l));this.removeAttributeNS(t.space,t.local)}}function wi(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttributeNS(t.space,t.local,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Si(t,e){var i,r;function n(){var n=e.apply(this,arguments);return n!==r&&(i=(r=n)&&function(t,e){return function(i){this.setAttribute(t,e.call(this,i))}}(t,n)),i}return n._value=e,n}function Bi(t,e){return function(){fe(this,t).delay=+e.apply(this,arguments)}}function Fi(t,e){return e=+e,function(){fe(this,t).delay=e}}function Ai(t,e){return function(){pe(this,t).duration=+e.apply(this,arguments)}}function Li(t,e){return e=+e,function(){pe(this,t).duration=e}}var Mi=Mt.prototype.constructor;function Ei(t){return function(){this.style.removeProperty(t)}}var Zi=0;function Ni(t,e,i,r){this._groups=t,this._parents=e,this._name=i,this._id=r}function Oi(){return++Zi}var Ii=Mt.prototype;Ni.prototype=function(t){return Mt().transition(t)}.prototype={constructor:Ni,select:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=b(t));for(var r=this._groups,n=r.length,o=new Array(n),a=0;a<n;++a)for(var s,l,c=r[a],h=c.length,u=o[a]=new Array(h),d=0;d<h;++d)(s=c[d])&&(l=t.call(s,s.__data__,d,c))&&("__data__"in s&&(l.__data__=s.__data__),u[d]=l,de(u[d],e,i,d,u,ge(s,i)));return new Ni(o,this._parents,e,i)},selectAll:function(t){var e=this._name,i=this._id;"function"!=typeof t&&(t=k(t));for(var r=this._groups,n=r.length,o=[],a=[],s=0;s<n;++s)for(var l,c=r[s],h=c.length,u=0;u<h;++u)if(l=c[u]){for(var d,f=t.call(l,l.__data__,u,c),p=ge(l,i),g=0,m=f.length;g<m;++g)(d=f[g])&&de(d,e,i,g,f,p);o.push(f),a.push(l)}return new Ni(o,a,e,i)},selectChild:Ii.selectChild,selectChildren:Ii.selectChildren,filter:function(t){"function"!=typeof t&&(t=T(t));for(var e=this._groups,i=e.length,r=new Array(i),n=0;n<i;++n)for(var o,a=e[n],s=a.length,l=r[n]=[],c=0;c<s;++c)(o=a[c])&&t.call(o,o.__data__,c,a)&&l.push(o);return new Ni(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,i=t._groups,r=e.length,n=i.length,o=Math.min(r,n),a=new Array(r),s=0;s<o;++s)for(var l,c=e[s],h=i[s],u=c.length,d=a[s]=new Array(u),f=0;f<u;++f)(l=c[f]||h[f])&&(d[f]=l);for(;s<r;++s)a[s]=e[s];return new Ni(a,this._parents,this._name,this._id)},selection:function(){return new Mi(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,i=Oi(),r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)if(a=s[c]){var h=ge(a,e);de(a,t,i,c,s,{time:h.time+h.delay+h.duration,delay:0,duration:h.duration,ease:h.ease})}return new Ni(r,this._parents,t,i)},call:Ii.call,nodes:Ii.nodes,node:Ii.node,size:Ii.size,empty:Ii.empty,each:Ii.each,on:function(t,e){var i=this._id;return arguments.length<2?ge(this.node(),i).on.on(t):this.each(function(t,e,i){var r,n,o=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?fe:pe;return function(){var a=o(this,t),s=a.on;s!==r&&(n=(r=s).copy()).on(e,i),a.on=n}}(i,t,e))},attr:function(t,e){var i=D(t),r="transform"===i?ke:xi;return this.attrTween(t,"function"==typeof e?(i.local?Ti:ki)(i,r,Se(this,"attr."+t,e)):null==e?(i.local?bi:Ci)(i):(i.local?vi:_i)(i,r,e))},attrTween:function(t,e){var i="attr."+t;if(arguments.length<2)return(i=this.tween(i))&&i._value;if(null==e)return this.tween(i,null);if("function"!=typeof e)throw new Error;var r=D(t);return this.tween(i,(r.local?wi:Si)(r,e))},style:function(t,e,i){var r="transform"==(t+="")?ve:xi;return null==e?this.styleTween(t,function(t,e){var i,r,n;return function(){var o=X(this,t),a=(this.style.removeProperty(t),X(this,t));return o===a?null:o===i&&a===r?n:n=e(i=o,r=a)}}(t,r)).on("end.style."+t,Ei(t)):"function"==typeof e?this.styleTween(t,function(t,e,i){var r,n,o;return function(){var a=X(this,t),s=i(this),l=s+"";return null==s&&(this.style.removeProperty(t),l=s=X(this,t)),a===l?null:a===r&&l===n?o:(n=l,o=e(r=a,s))}}(t,r,Se(this,"style."+t,e))).each(function(t,e){var i,r,n,o,a="style."+e,s="end."+a;return function(){var l=pe(this,t),c=l.on,h=null==l.value[a]?o||(o=Ei(e)):void 0;c===i&&n===h||(r=(i=c).copy()).on(s,n=h),l.on=r}}(this._id,t)):this.styleTween(t,function(t,e,i){var r,n,o=i+"";return function(){var a=X(this,t);return a===o?null:a===r?n:n=e(r=a,i)}}(t,r,e),i).on("end.style."+t,null)},styleTween:function(t,e,i){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,i){var r,n;function o(){var o=e.apply(this,arguments);return o!==n&&(r=(n=o)&&function(t,e,i){return function(r){this.style.setProperty(t,e.call(this,r),i)}}(t,o,i)),r}return o._value=e,o}(t,e,null==i?"":i))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(Se(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,i;function r(){var r=t.apply(this,arguments);return r!==i&&(e=(i=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var i in this.__transition)if(+i!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var i=this._id;if(t+="",arguments.length<2){for(var r,n=ge(this.node(),i).tween,o=0,a=n.length;o<a;++o)if((r=n[o]).name===t)return r.value;return null}return this.each((null==e?Te:we)(i,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Bi:Fi)(e,t)):ge(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Ai:Li)(e,t)):ge(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){pe(this,t).ease=e}}(e,t)):ge(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var i=e.apply(this,arguments);if("function"!=typeof i)throw new Error;pe(this,t).ease=i}}(this._id,t))},end:function(){var t,e,i=this,r=i._id,n=i.size();return new Promise((function(o,a){var s={value:a},l={value:function(){0==--n&&o()}};i.each((function(){var i=pe(this,r),n=i.on;n!==t&&((e=(t=n).copy())._.cancel.push(s),e._.interrupt.push(s),e._.end.push(l)),i.on=e})),0===n&&o()}))},[Symbol.iterator]:Ii[Symbol.iterator]};var ji={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function qi(t,e){for(var i;!(i=t.__transition)||!(i=i[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return i}Mt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var i,r,n,o=t.__transition,a=!0;if(o){for(n in e=null==e?null:e+"",o)(i=o[n]).name===e?(r=i.state>se&&i.state<he,i.state=ue,i.timer.stop(),i.on.call(r?"interrupt":"cancel",t,t.__data__,i.index,i.group),delete o[n]):a=!1;a&&delete t.__transition}}(this,t)}))},Mt.prototype.transition=function(t){var e,i;t instanceof Ni?(e=t._id,t=t._name):(e=Oi(),(i=ji).time=Gt(),t=null==t?null:t+"");for(var r=this._groups,n=r.length,o=0;o<n;++o)for(var a,s=r[o],l=s.length,c=0;c<l;++c)(a=s[c])&&de(a,t,e,c,s,i||qi(a,e));return new Ni(r,this._parents,t,e)};const{abs:Di,max:$i,min:zi}=Math;function Pi(t){return[+t[0],+t[1]]}function Ri(t){return[Pi(t[0]),Pi(t[1])]}["w","e"].map(Wi),["n","s"].map(Wi),["n","w","e","s","nw","ne","sw","se"].map(Wi);function Wi(t){return{type:t}}function Hi(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}function Ui(t){return(e,i)=>function(t,e){return fetch(t,e).then(Hi)}(e,i).then((e=>(new DOMParser).parseFromString(e,t)))}Ui("application/xml");Ui("text/html");var Yi=Ui("image/svg+xml");const Vi=Math.PI/180,Gi=180/Math.PI,Xi=.96422,Qi=1,Ji=.82521,Ki=4/29,tr=6/29,er=3*tr*tr,ir=tr*tr*tr;function rr(t){if(t instanceof nr)return new nr(t.l,t.a,t.b,t.opacity);if(t instanceof ur)return dr(t);t instanceof Xe||(t=Ve(t));var e,i,r=lr(t.r),n=lr(t.g),o=lr(t.b),a=or((.2225045*r+.7168786*n+.0606169*o)/Qi);return r===n&&n===o?e=i=a:(e=or((.4360747*r+.3850649*n+.1430804*o)/Xi),i=or((.0139322*r+.0971045*n+.7141733*o)/Ji)),new nr(116*a-16,500*(e-a),200*(a-i),t.opacity)}function nr(t,e,i,r){this.l=+t,this.a=+e,this.b=+i,this.opacity=+r}function or(t){return t>ir?Math.pow(t,1/3):t/er+Ki}function ar(t){return t>tr?t*t*t:er*(t-Ki)}function sr(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function lr(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function cr(t){if(t instanceof ur)return new ur(t.h,t.c,t.l,t.opacity);if(t instanceof nr||(t=rr(t)),0===t.a&&0===t.b)return new ur(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Gi;return new ur(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function hr(t,e,i,r){return 1===arguments.length?cr(t):new ur(t,e,i,null==r?1:r)}function ur(t,e,i,r){this.h=+t,this.c=+e,this.l=+i,this.opacity=+r}function dr(t){if(isNaN(t.h))return new nr(t.l,0,0,t.opacity);var e=t.h*Vi;return new nr(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}function fr(t){return function(e,i){var r=t((e=hr(e)).h,(i=hr(i)).h),n=di(e.c,i.c),o=di(e.l,i.l),a=di(e.opacity,i.opacity);return function(t){return e.h=r(t),e.c=n(t),e.l=o(t),e.opacity=a(t),e+""}}}Be(nr,(function(t,e,i,r){return 1===arguments.length?rr(t):new nr(t,e,i,null==r?1:r)}),Fe(Ae,{brighter(t){return new nr(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new nr(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,i=isNaN(this.b)?t:t-this.b/200;return new Xe(sr(3.1338561*(e=Xi*ar(e))-1.6168667*(t=Qi*ar(t))-.4906146*(i=Ji*ar(i))),sr(-.9787684*e+1.9161415*t+.033454*i),sr(.0719453*e-.2289914*t+1.4052427*i),this.opacity)}})),Be(ur,hr,Fe(Ae,{brighter(t){return new ur(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new ur(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return dr(this).rgb()}}));const pr=fr((function(t,e){var i=e-t;return i?hi(t,i>180||i<-180?i-360*Math.round(i/360):i):ci(isNaN(t)?e:t)}));fr(di);function gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}class mr extends Map{constructor(t,e=br){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[i,r]of t)this.set(i,r)}get(t){return super.get(yr(this,t))}has(t){return super.has(yr(this,t))}set(t,e){return super.set(xr(this,t),e)}delete(t){return super.delete(Cr(this,t))}}function yr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):i}function xr({_intern:t,_key:e},i){const r=e(i);return t.has(r)?t.get(r):(t.set(r,i),i)}function Cr({_intern:t,_key:e},i){const r=e(i);return t.has(r)&&(i=t.get(r),t.delete(r)),i}function br(t){return null!==t&&"object"==typeof t?t.valueOf():t}const _r=Symbol("implicit");function vr(){var t=new mr,e=[],i=[],r=_r;function n(n){let o=t.get(n);if(void 0===o){if(r!==_r)return r;t.set(n,o=e.push(n)-1)}return i[o%i.length]}return n.domain=function(i){if(!arguments.length)return e.slice();e=[],t=new mr;for(const r of i)t.has(r)||t.set(r,e.push(r)-1);return n},n.range=function(t){return arguments.length?(i=Array.from(t),n):i.slice()},n.unknown=function(t){return arguments.length?(r=t,n):r},n.copy=function(){return vr(e,i).unknown(r)},gr.apply(n,arguments),n}function kr(){var t,e,i=vr().unknown(void 0),r=i.domain,n=i.range,o=0,a=1,s=!1,l=0,c=0,h=.5;function u(){var i=r().length,u=a<o,d=u?a:o,f=u?o:a;t=(f-d)/Math.max(1,i-l+2*c),s&&(t=Math.floor(t)),d+=(f-d-t*(i-l))*h,e=t*(1-l),s&&(d=Math.round(d),e=Math.round(e));var p=function(t,e,i){t=+t,e=+e,i=(n=arguments.length)<2?(e=t,t=0,1):n<3?1:+i;for(var r=-1,n=0|Math.max(0,Math.ceil((e-t)/i)),o=new Array(n);++r<n;)o[r]=t+r*i;return o}(i).map((function(e){return d+t*e}));return n(u?p.reverse():p)}return delete i.unknown,i.domain=function(t){return arguments.length?(r(t),u()):r()},i.range=function(t){return arguments.length?([o,a]=t,o=+o,a=+a,u()):[o,a]},i.rangeRound=function(t){return[o,a]=t,o=+o,a=+a,s=!0,u()},i.bandwidth=function(){return e},i.step=function(){return t},i.round=function(t){return arguments.length?(s=!!t,u()):s},i.padding=function(t){return arguments.length?(l=Math.min(1,c=+t),u()):l},i.paddingInner=function(t){return arguments.length?(l=Math.min(1,t),u()):l},i.paddingOuter=function(t){return arguments.length?(c=+t,u()):c},i.align=function(t){return arguments.length?(h=Math.max(0,Math.min(1,t)),u()):h},i.copy=function(){return kr(r(),[o,a]).round(s).paddingInner(l).paddingOuter(c).align(h)},gr.apply(u(),arguments)}const Tr=Math.sqrt(50),wr=Math.sqrt(10),Sr=Math.sqrt(2);function Br(t,e,i){const r=(e-t)/Math.max(0,i),n=Math.floor(Math.log10(r)),o=r/Math.pow(10,n),a=o>=Tr?10:o>=wr?5:o>=Sr?2:1;let s,l,c;return n<0?(c=Math.pow(10,-n)/a,s=Math.round(t*c),l=Math.round(e*c),s/c<t&&++s,l/c>e&&--l,c=-c):(c=Math.pow(10,n)*a,s=Math.round(t/c),l=Math.round(e/c),s*c<t&&++s,l*c>e&&--l),l<s&&.5<=i&&i<2?Br(t,e,2*i):[s,l,c]}function Fr(t,e,i){return Br(t=+t,e=+e,i=+i)[2]}function Ar(t,e,i){i=+i;const r=(e=+e)<(t=+t),n=r?Fr(e,t,i):Fr(t,e,i);return(r?-1:1)*(n<0?1/-n:n)}function Lr(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function Mr(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function Er(t){let e,i,r;function n(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<0?n=e+1:o=e}while(n<o)}return n}return 2!==t.length?(e=Lr,i=(e,i)=>Lr(t(e),i),r=(e,i)=>t(e)-i):(e=t===Lr||t===Mr?t:Zr,i=t,r=t),{left:n,center:function(t,e,i=0,o=t.length){const a=n(t,e,i,o-1);return a>i&&r(t[a-1],e)>-r(t[a],e)?a-1:a},right:function(t,r,n=0,o=t.length){if(n<o){if(0!==e(r,r))return o;do{const e=n+o>>>1;i(t[e],r)<=0?n=e+1:o=e}while(n<o)}return n}}}function Zr(){return 0}const Nr=Er(Lr),Or=Nr.right,Ir=(Nr.left,Er((function(t){return null===t?NaN:+t})).center,Or);function jr(t,e){var i,r=e?e.length:0,n=t?Math.min(r,t.length):0,o=new Array(n),a=new Array(r);for(i=0;i<n;++i)o[i]=zr(t[i],e[i]);for(;i<r;++i)a[i]=e[i];return function(t){for(i=0;i<n;++i)a[i]=o[i](t);return a}}function qr(t,e){var i=new Date;return t=+t,e=+e,function(r){return i.setTime(t*(1-r)+e*r),i}}function Dr(t,e){var i,r={},n={};for(i in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)i in t?r[i]=zr(t[i],e[i]):n[i]=e[i];return function(t){for(i in r)n[i]=r[i](t);return n}}function $r(t,e){e||(e=[]);var i,r=t?Math.min(e.length,t.length):0,n=e.slice();return function(o){for(i=0;i<r;++i)n[i]=t[i]*(1-o)+e[i]*o;return n}}function zr(t,e){var i,r,n=typeof e;return null==e||"boolean"===n?ci(e):("number"===n?me:"string"===n?(i=He(e))?(e=i,fi):yi:e instanceof He?fi:e instanceof Date?qr:(r=e,!ArrayBuffer.isView(r)||r instanceof DataView?Array.isArray(e)?jr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Dr:me:$r))(t,e)}function Pr(t,e){return t=+t,e=+e,function(i){return Math.round(t*(1-i)+e*i)}}function Rr(t){return+t}var Wr=[0,1];function Hr(t){return t}function Ur(t,e){return(e-=t=+t)?function(i){return(i-t)/e}:(i=isNaN(e)?NaN:.5,function(){return i});var i}function Yr(t,e,i){var r=t[0],n=t[1],o=e[0],a=e[1];return n<r?(r=Ur(n,r),o=i(a,o)):(r=Ur(r,n),o=i(o,a)),function(t){return o(r(t))}}function Vr(t,e,i){var r=Math.min(t.length,e.length)-1,n=new Array(r),o=new Array(r),a=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++a<r;)n[a]=Ur(t[a],t[a+1]),o[a]=i(e[a],e[a+1]);return function(e){var i=Ir(t,e,1,r)-1;return o[i](n[i](e))}}function Gr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Xr(){var t,e,i,r,n,o,a=Wr,s=Wr,l=zr,c=Hr;function h(){var t,e,i,l=Math.min(a.length,s.length);return c!==Hr&&(t=a[0],e=a[l-1],t>e&&(i=t,t=e,e=i),c=function(i){return Math.max(t,Math.min(e,i))}),r=l>2?Vr:Yr,n=o=null,u}function u(e){return null==e||isNaN(e=+e)?i:(n||(n=r(a.map(t),s,l)))(t(c(e)))}return u.invert=function(i){return c(e((o||(o=r(s,a.map(t),me)))(i)))},u.domain=function(t){return arguments.length?(a=Array.from(t,Rr),h()):a.slice()},u.range=function(t){return arguments.length?(s=Array.from(t),h()):s.slice()},u.rangeRound=function(t){return s=Array.from(t),l=Pr,h()},u.clamp=function(t){return arguments.length?(c=!!t||Hr,h()):c!==Hr},u.interpolate=function(t){return arguments.length?(l=t,h()):l},u.unknown=function(t){return arguments.length?(i=t,u):i},function(i,r){return t=i,e=r,h()}}function Qr(){return Xr()(Hr,Hr)}var Jr,Kr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function tn(t){if(!(e=Kr.exec(t)))throw new Error("invalid format: "+t);var e;return new en({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function en(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function rn(t,e){if((i=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var i,r=t.slice(0,i);return[r.length>1?r[0]+r.slice(2):r,+t.slice(i+1)]}function nn(t){return(t=rn(Math.abs(t)))?t[1]:NaN}function on(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1];return n<0?"0."+new Array(-n).join("0")+r:r.length>n+1?r.slice(0,n+1)+"."+r.slice(n+1):r+new Array(n-r.length+2).join("0")}tn.prototype=en.prototype,en.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};const an={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>on(100*t,e),r:on,s:function(t,e){var i=rn(t,e);if(!i)return t+"";var r=i[0],n=i[1],o=n-(Jr=3*Math.max(-8,Math.min(8,Math.floor(n/3))))+1,a=r.length;return o===a?r:o>a?r+new Array(o-a+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+rn(t,Math.max(0,e+o-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function sn(t){return t}var ln,cn,hn,un=Array.prototype.map,dn=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];function fn(t){var e,i,r=void 0===t.grouping||void 0===t.thousands?sn:(e=un.call(t.grouping,Number),i=t.thousands+"",function(t,r){for(var n=t.length,o=[],a=0,s=e[0],l=0;n>0&&s>0&&(l+s+1>r&&(s=Math.max(1,r-l)),o.push(t.substring(n-=s,n+s)),!((l+=s+1)>r));)s=e[a=(a+1)%e.length];return o.reverse().join(i)}),n=void 0===t.currency?"":t.currency[0]+"",o=void 0===t.currency?"":t.currency[1]+"",a=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?sn:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(un.call(t.numerals,String)),l=void 0===t.percent?"%":t.percent+"",c=void 0===t.minus?"\u2212":t.minus+"",h=void 0===t.nan?"NaN":t.nan+"";function u(t){var e=(t=tn(t)).fill,i=t.align,u=t.sign,d=t.symbol,f=t.zero,p=t.width,g=t.comma,m=t.precision,y=t.trim,x=t.type;"n"===x?(g=!0,x="g"):an[x]||(void 0===m&&(m=12),y=!0,x="g"),(f||"0"===e&&"="===i)&&(f=!0,e="0",i="=");var C="$"===d?n:"#"===d&&/[boxX]/.test(x)?"0"+x.toLowerCase():"",b="$"===d?o:/[%p]/.test(x)?l:"",_=an[x],v=/[defgprs%]/.test(x);function k(t){var n,o,l,d=C,k=b;if("c"===x)k=_(t)+k,t="";else{var T=(t=+t)<0||1/t<0;if(t=isNaN(t)?h:_(Math.abs(t),m),y&&(t=function(t){t:for(var e,i=t.length,r=1,n=-1;r<i;++r)switch(t[r]){case".":n=e=r;break;case"0":0===n&&(n=r),e=r;break;default:if(!+t[r])break t;n>0&&(n=0)}return n>0?t.slice(0,n)+t.slice(e+1):t}(t)),T&&0==+t&&"+"!==u&&(T=!1),d=(T?"("===u?u:c:"-"===u||"("===u?"":u)+d,k=("s"===x?dn[8+Jr/3]:"")+k+(T&&"("===u?")":""),v)for(n=-1,o=t.length;++n<o;)if(48>(l=t.charCodeAt(n))||l>57){k=(46===l?a+t.slice(n+1):t.slice(n))+k,t=t.slice(0,n);break}}g&&!f&&(t=r(t,1/0));var w=d.length+t.length+k.length,S=w<p?new Array(p-w+1).join(e):"";switch(g&&f&&(t=r(S+t,S.length?p-k.length:1/0),S=""),i){case"<":t=d+t+k+S;break;case"=":t=d+S+t+k;break;case"^":t=S.slice(0,w=S.length>>1)+d+t+k+S.slice(w);break;default:t=S+d+t+k}return s(t)}return m=void 0===m?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,m)):Math.max(0,Math.min(20,m)),k.toString=function(){return t+""},k}return{format:u,formatPrefix:function(t,e){var i=u(((t=tn(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3))),n=Math.pow(10,-r),o=dn[8+r/3];return function(t){return i(n*t)+o}}}}function pn(t,e,i,r){var n,o=Ar(t,e,i);switch((r=tn(null==r?",f":r)).type){case"s":var a=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(n=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(nn(e)/3)))-nn(Math.abs(t)))}(o,a))||(r.precision=n),hn(r,a);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(n=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,nn(e)-nn(t))+1}(o,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=n-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(n=function(t){return Math.max(0,-nn(Math.abs(t)))}(o))||(r.precision=n-2*("%"===r.type))}return cn(r)}function gn(t){var e=t.domain;return t.ticks=function(t){var i=e();return function(t,e,i){if(!((i=+i)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[n,o,a]=r?Br(e,t,i):Br(t,e,i);if(!(o>=n))return[];const s=o-n+1,l=new Array(s);if(r)if(a<0)for(let c=0;c<s;++c)l[c]=(o-c)/-a;else for(let c=0;c<s;++c)l[c]=(o-c)*a;else if(a<0)for(let c=0;c<s;++c)l[c]=(n+c)/-a;else for(let c=0;c<s;++c)l[c]=(n+c)*a;return l}(i[0],i[i.length-1],null==t?10:t)},t.tickFormat=function(t,i){var r=e();return pn(r[0],r[r.length-1],null==t?10:t,i)},t.nice=function(i){null==i&&(i=10);var r,n,o=e(),a=0,s=o.length-1,l=o[a],c=o[s],h=10;for(c<l&&(n=l,l=c,c=n,n=a,a=s,s=n);h-- >0;){if((n=Fr(l,c,i))===r)return o[a]=l,o[s]=c,e(o);if(n>0)l=Math.floor(l/n)*n,c=Math.ceil(c/n)*n;else{if(!(n<0))break;l=Math.ceil(l*n)/n,c=Math.floor(c*n)/n}r=n}return t},t}function mn(){var t=Qr();return t.copy=function(){return Gr(t,mn())},gr.apply(t,arguments),gn(t)}ln=fn({thousands:",",grouping:[3],currency:["$",""]}),cn=ln.format,hn=ln.formatPrefix;const yn=1e3,xn=6e4,Cn=36e5,bn=864e5,_n=6048e5,vn=2592e6,kn=31536e6,Tn=new Date,wn=new Date;function Sn(t,e,i,r){function n(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return n.floor=e=>(t(e=new Date(+e)),e),n.ceil=i=>(t(i=new Date(i-1)),e(i,1),t(i),i),n.round=t=>{const e=n(t),i=n.ceil(t);return t-e<i-t?e:i},n.offset=(t,i)=>(e(t=new Date(+t),null==i?1:Math.floor(i)),t),n.range=(i,r,o)=>{const a=[];if(i=n.ceil(i),o=null==o?1:Math.floor(o),!(i<r&&o>0))return a;let s;do{a.push(s=new Date(+i)),e(i,o),t(i)}while(s<i&&i<r);return a},n.filter=i=>Sn((e=>{if(e>=e)for(;t(e),!i(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!i(t););else for(;--r>=0;)for(;e(t,1),!i(t););})),i&&(n.count=(e,r)=>(Tn.setTime(+e),wn.setTime(+r),t(Tn),t(wn),Math.floor(i(Tn,wn))),n.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?n.filter(r?e=>r(e)%t==0:e=>n.count(0,e)%t==0):n:null)),n}const Bn=Sn((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));Bn.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?Sn((e=>{e.setTime(Math.floor(e/t)*t)}),((e,i)=>{e.setTime(+e+i*t)}),((e,i)=>(i-e)/t)):Bn:null);Bn.range;const Fn=Sn((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*yn)}),((t,e)=>(e-t)/yn),(t=>t.getUTCSeconds())),An=(Fn.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getMinutes()))),Ln=(An.range,Sn((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*xn)}),((t,e)=>(e-t)/xn),(t=>t.getUTCMinutes()))),Mn=(Ln.range,Sn((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*yn-t.getMinutes()*xn)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getHours()))),En=(Mn.range,Sn((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*Cn)}),((t,e)=>(e-t)/Cn),(t=>t.getUTCHours()))),Zn=(En.range,Sn((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/bn),(t=>t.getDate()-1))),Nn=(Zn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bn),(t=>t.getUTCDate()-1))),On=(Nn.range,Sn((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/bn),(t=>Math.floor(t/bn))));On.range;function In(t){return Sn((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*xn)/_n))}const jn=In(0),qn=In(1),Dn=In(2),$n=In(3),zn=In(4),Pn=In(5),Rn=In(6);jn.range,qn.range,Dn.range,$n.range,zn.range,Pn.range,Rn.range;function Wn(t){return Sn((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/_n))}const Hn=Wn(0),Un=Wn(1),Yn=Wn(2),Vn=Wn(3),Gn=Wn(4),Xn=Wn(5),Qn=Wn(6),Jn=(Hn.range,Un.range,Yn.range,Vn.range,Gn.range,Xn.range,Qn.range,Sn((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()))),Kn=(Jn.range,Sn((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()))),to=(Kn.range,Sn((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear())));to.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,i)=>{e.setFullYear(e.getFullYear()+i*t)})):null;to.range;const eo=Sn((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));eo.every=t=>isFinite(t=Math.floor(t))&&t>0?Sn((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,i)=>{e.setUTCFullYear(e.getUTCFullYear()+i*t)})):null;eo.range;function io(t,e,i,r,n,o){const a=[[Fn,1,yn],[Fn,5,5e3],[Fn,15,15e3],[Fn,30,3e4],[o,1,xn],[o,5,3e5],[o,15,9e5],[o,30,18e5],[n,1,Cn],[n,3,108e5],[n,6,216e5],[n,12,432e5],[r,1,bn],[r,2,1728e5],[i,1,_n],[e,1,vn],[e,3,7776e6],[t,1,kn]];function s(e,i,r){const n=Math.abs(i-e)/r,o=Er((([,,t])=>t)).right(a,n);if(o===a.length)return t.every(Ar(e/kn,i/kn,r));if(0===o)return Bn.every(Math.max(Ar(e,i,r),1));const[s,l]=a[n/a[o-1][2]<a[o][2]/n?o-1:o];return s.every(l)}return[function(t,e,i){const r=e<t;r&&([t,e]=[e,t]);const n=i&&"function"==typeof i.range?i:s(t,e,i),o=n?n.range(t,+e+1):[];return r?o.reverse():o},s]}const[ro,no]=io(eo,Kn,Hn,On,En,Ln),[oo,ao]=io(to,Jn,jn,Zn,Mn,An);function so(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function lo(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function co(t,e,i){return{y:t,m:e,d:i,H:0,M:0,S:0,L:0}}var ho,uo,fo={"-":"",_:" ",0:"0"},po=/^\s*\d+/,go=/^%/,mo=/[\\^$*+?|[\]().{}]/g;function yo(t,e,i){var r=t<0?"-":"",n=(r?-t:t)+"",o=n.length;return r+(o<i?new Array(i-o+1).join(e)+n:n)}function xo(t){return t.replace(mo,"\\$&")}function Co(t){return new RegExp("^(?:"+t.map(xo).join("|")+")","i")}function bo(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function _o(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.w=+r[0],i+r[0].length):-1}function vo(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.u=+r[0],i+r[0].length):-1}function ko(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.U=+r[0],i+r[0].length):-1}function To(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.V=+r[0],i+r[0].length):-1}function wo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.W=+r[0],i+r[0].length):-1}function So(t,e,i){var r=po.exec(e.slice(i,i+4));return r?(t.y=+r[0],i+r[0].length):-1}function Bo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),i+r[0].length):-1}function Fo(t,e,i){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(i,i+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),i+r[0].length):-1}function Ao(t,e,i){var r=po.exec(e.slice(i,i+1));return r?(t.q=3*r[0]-3,i+r[0].length):-1}function Lo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.m=r[0]-1,i+r[0].length):-1}function Mo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.d=+r[0],i+r[0].length):-1}function Eo(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.m=0,t.d=+r[0],i+r[0].length):-1}function Zo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.H=+r[0],i+r[0].length):-1}function No(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.M=+r[0],i+r[0].length):-1}function Oo(t,e,i){var r=po.exec(e.slice(i,i+2));return r?(t.S=+r[0],i+r[0].length):-1}function Io(t,e,i){var r=po.exec(e.slice(i,i+3));return r?(t.L=+r[0],i+r[0].length):-1}function jo(t,e,i){var r=po.exec(e.slice(i,i+6));return r?(t.L=Math.floor(r[0]/1e3),i+r[0].length):-1}function qo(t,e,i){var r=go.exec(e.slice(i,i+1));return r?i+r[0].length:-1}function Do(t,e,i){var r=po.exec(e.slice(i));return r?(t.Q=+r[0],i+r[0].length):-1}function $o(t,e,i){var r=po.exec(e.slice(i));return r?(t.s=+r[0],i+r[0].length):-1}function zo(t,e){return yo(t.getDate(),e,2)}function Po(t,e){return yo(t.getHours(),e,2)}function Ro(t,e){return yo(t.getHours()%12||12,e,2)}function Wo(t,e){return yo(1+Zn.count(to(t),t),e,3)}function Ho(t,e){return yo(t.getMilliseconds(),e,3)}function Uo(t,e){return Ho(t,e)+"000"}function Yo(t,e){return yo(t.getMonth()+1,e,2)}function Vo(t,e){return yo(t.getMinutes(),e,2)}function Go(t,e){return yo(t.getSeconds(),e,2)}function Xo(t){var e=t.getDay();return 0===e?7:e}function Qo(t,e){return yo(jn.count(to(t)-1,t),e,2)}function Jo(t){var e=t.getDay();return e>=4||0===e?zn(t):zn.ceil(t)}function Ko(t,e){return t=Jo(t),yo(zn.count(to(t),t)+(4===to(t).getDay()),e,2)}function ta(t){return t.getDay()}function ea(t,e){return yo(qn.count(to(t)-1,t),e,2)}function ia(t,e){return yo(t.getFullYear()%100,e,2)}function ra(t,e){return yo((t=Jo(t)).getFullYear()%100,e,2)}function na(t,e){return yo(t.getFullYear()%1e4,e,4)}function oa(t,e){var i=t.getDay();return yo((t=i>=4||0===i?zn(t):zn.ceil(t)).getFullYear()%1e4,e,4)}function aa(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+yo(e/60|0,"0",2)+yo(e%60,"0",2)}function sa(t,e){return yo(t.getUTCDate(),e,2)}function la(t,e){return yo(t.getUTCHours(),e,2)}function ca(t,e){return yo(t.getUTCHours()%12||12,e,2)}function ha(t,e){return yo(1+Nn.count(eo(t),t),e,3)}function ua(t,e){return yo(t.getUTCMilliseconds(),e,3)}function da(t,e){return ua(t,e)+"000"}function fa(t,e){return yo(t.getUTCMonth()+1,e,2)}function pa(t,e){return yo(t.getUTCMinutes(),e,2)}function ga(t,e){return yo(t.getUTCSeconds(),e,2)}function ma(t){var e=t.getUTCDay();return 0===e?7:e}function ya(t,e){return yo(Hn.count(eo(t)-1,t),e,2)}function xa(t){var e=t.getUTCDay();return e>=4||0===e?Gn(t):Gn.ceil(t)}function Ca(t,e){return t=xa(t),yo(Gn.count(eo(t),t)+(4===eo(t).getUTCDay()),e,2)}function ba(t){return t.getUTCDay()}function _a(t,e){return yo(Un.count(eo(t)-1,t),e,2)}function va(t,e){return yo(t.getUTCFullYear()%100,e,2)}function ka(t,e){return yo((t=xa(t)).getUTCFullYear()%100,e,2)}function Ta(t,e){return yo(t.getUTCFullYear()%1e4,e,4)}function wa(t,e){var i=t.getUTCDay();return yo((t=i>=4||0===i?Gn(t):Gn.ceil(t)).getUTCFullYear()%1e4,e,4)}function Sa(){return"+0000"}function Ba(){return"%"}function Fa(t){return+t}function Aa(t){return Math.floor(+t/1e3)}function La(t){return new Date(t)}function Ma(t){return t instanceof Date?+t:+new Date(+t)}function Ea(t,e,i,r,n,o,a,s,l,c){var h=Qr(),u=h.invert,d=h.domain,f=c(".%L"),p=c(":%S"),g=c("%I:%M"),m=c("%I %p"),y=c("%a %d"),x=c("%b %d"),C=c("%B"),b=c("%Y");function _(t){return(l(t)<t?f:s(t)<t?p:a(t)<t?g:o(t)<t?m:r(t)<t?n(t)<t?y:x:i(t)<t?C:b)(t)}return h.invert=function(t){return new Date(u(t))},h.domain=function(t){return arguments.length?d(Array.from(t,Ma)):d().map(La)},h.ticks=function(e){var i=d();return t(i[0],i[i.length-1],null==e?10:e)},h.tickFormat=function(t,e){return null==e?_:c(e)},h.nice=function(t){var i=d();return t&&"function"==typeof t.range||(t=e(i[0],i[i.length-1],null==t?10:t)),t?d(function(t,e){var i,r=0,n=(t=t.slice()).length-1,o=t[r],a=t[n];return a<o&&(i=r,r=n,n=i,i=o,o=a,a=i),t[r]=e.floor(o),t[n]=e.ceil(a),t}(i,t)):h},h.copy=function(){return Gr(h,Ea(t,e,i,r,n,o,a,s,l,c))},h}function Za(){return gr.apply(Ea(oo,ao,to,Jn,jn,Zn,Mn,An,Fn,uo).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){ho=function(t){var e=t.dateTime,i=t.date,r=t.time,n=t.periods,o=t.days,a=t.shortDays,s=t.months,l=t.shortMonths,c=Co(n),h=bo(n),u=Co(o),d=bo(o),f=Co(a),p=bo(a),g=Co(s),m=bo(s),y=Co(l),x=bo(l),C={a:function(t){return a[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return l[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:zo,e:zo,f:Uo,g:ra,G:oa,H:Po,I:Ro,j:Wo,L:Ho,m:Yo,M:Vo,p:function(t){return n[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Fa,s:Aa,S:Go,u:Xo,U:Qo,V:Ko,w:ta,W:ea,x:null,X:null,y:ia,Y:na,Z:aa,"%":Ba},b={a:function(t){return a[t.getUTCDay()]},A:function(t){return o[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:sa,e:sa,f:da,g:ka,G:wa,H:la,I:ca,j:ha,L:ua,m:fa,M:pa,p:function(t){return n[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Fa,s:Aa,S:ga,u:ma,U:ya,V:Ca,w:ba,W:_a,x:null,X:null,y:va,Y:Ta,Z:Sa,"%":Ba},_={a:function(t,e,i){var r=f.exec(e.slice(i));return r?(t.w=p.get(r[0].toLowerCase()),i+r[0].length):-1},A:function(t,e,i){var r=u.exec(e.slice(i));return r?(t.w=d.get(r[0].toLowerCase()),i+r[0].length):-1},b:function(t,e,i){var r=y.exec(e.slice(i));return r?(t.m=x.get(r[0].toLowerCase()),i+r[0].length):-1},B:function(t,e,i){var r=g.exec(e.slice(i));return r?(t.m=m.get(r[0].toLowerCase()),i+r[0].length):-1},c:function(t,i,r){return T(t,e,i,r)},d:Mo,e:Mo,f:jo,g:Bo,G:So,H:Zo,I:Zo,j:Eo,L:Io,m:Lo,M:No,p:function(t,e,i){var r=c.exec(e.slice(i));return r?(t.p=h.get(r[0].toLowerCase()),i+r[0].length):-1},q:Ao,Q:Do,s:$o,S:Oo,u:vo,U:ko,V:To,w:_o,W:wo,x:function(t,e,r){return T(t,i,e,r)},X:function(t,e,i){return T(t,r,e,i)},y:Bo,Y:So,Z:Fo,"%":qo};function v(t,e){return function(i){var r,n,o,a=[],s=-1,l=0,c=t.length;for(i instanceof Date||(i=new Date(+i));++s<c;)37===t.charCodeAt(s)&&(a.push(t.slice(l,s)),null!=(n=fo[r=t.charAt(++s)])?r=t.charAt(++s):n="e"===r?" ":"0",(o=e[r])&&(r=o(i,n)),a.push(r),l=s+1);return a.push(t.slice(l,s)),a.join("")}}function k(t,e){return function(i){var r,n,o=co(1900,void 0,1);if(T(o,t,i+="",0)!=i.length)return null;if("Q"in o)return new Date(o.Q);if("s"in o)return new Date(1e3*o.s+("L"in o?o.L:0));if(e&&!("Z"in o)&&(o.Z=0),"p"in o&&(o.H=o.H%12+12*o.p),void 0===o.m&&(o.m="q"in o?o.q:0),"V"in o){if(o.V<1||o.V>53)return null;"w"in o||(o.w=1),"Z"in o?(n=(r=lo(co(o.y,0,1))).getUTCDay(),r=n>4||0===n?Un.ceil(r):Un(r),r=Nn.offset(r,7*(o.V-1)),o.y=r.getUTCFullYear(),o.m=r.getUTCMonth(),o.d=r.getUTCDate()+(o.w+6)%7):(n=(r=so(co(o.y,0,1))).getDay(),r=n>4||0===n?qn.ceil(r):qn(r),r=Zn.offset(r,7*(o.V-1)),o.y=r.getFullYear(),o.m=r.getMonth(),o.d=r.getDate()+(o.w+6)%7)}else("W"in o||"U"in o)&&("w"in o||(o.w="u"in o?o.u%7:"W"in o?1:0),n="Z"in o?lo(co(o.y,0,1)).getUTCDay():so(co(o.y,0,1)).getDay(),o.m=0,o.d="W"in o?(o.w+6)%7+7*o.W-(n+5)%7:o.w+7*o.U-(n+6)%7);return"Z"in o?(o.H+=o.Z/100|0,o.M+=o.Z%100,lo(o)):so(o)}}function T(t,e,i,r){for(var n,o,a=0,s=e.length,l=i.length;a<s;){if(r>=l)return-1;if(37===(n=e.charCodeAt(a++))){if(n=e.charAt(a++),!(o=_[n in fo?e.charAt(a++):n])||(r=o(t,i,r))<0)return-1}else if(n!=i.charCodeAt(r++))return-1}return r}return C.x=v(i,C),C.X=v(r,C),C.c=v(e,C),b.x=v(i,b),b.X=v(r,b),b.c=v(e,b),{format:function(t){var e=v(t+="",C);return e.toString=function(){return t},e},parse:function(t){var e=k(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=v(t+="",b);return e.toString=function(){return t},e},utcParse:function(t){var e=k(t+="",!0);return e.toString=function(){return t},e}}}(t),uo=ho.format,ho.parse,ho.utcFormat,ho.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});const Na=function(t){for(var e=t.length/6|0,i=new Array(e),r=0;r<e;)i[r]="#"+t.slice(6*r,6*++r);return i}("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab");function Oa(t){return"string"==typeof t?new At([[document.querySelector(t)]],[document.documentElement]):new At([[t]],Ft)}function Ia(t){return"string"==typeof t?new At([document.querySelectorAll(t)],[document.documentElement]):new At([_(t)],Ft)}function ja(t){return function(){return t}}const qa=Math.abs,Da=Math.atan2,$a=Math.cos,za=Math.max,Pa=Math.min,Ra=Math.sin,Wa=Math.sqrt,Ha=1e-12,Ua=Math.PI,Ya=Ua/2,Va=2*Ua;function Ga(t){return t>=1?Ya:t<=-1?-Ya:Math.asin(t)}const Xa=Math.PI,Qa=2*Xa,Ja=1e-6,Ka=Qa-Ja;function ts(t){this._+=t[0];for(let e=1,i=t.length;e<i;++e)this._+=arguments[e]+t[e]}class es{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?ts:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return ts;const i=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*i)/i+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,i,r){this._append`Q${+t},${+e},${this._x1=+i},${this._y1=+r}`}bezierCurveTo(t,e,i,r,n,o){this._append`C${+t},${+e},${+i},${+r},${this._x1=+n},${this._y1=+o}`}arcTo(t,e,i,r,n){if(t=+t,e=+e,i=+i,r=+r,(n=+n)<0)throw new Error(`negative radius: ${n}`);let o=this._x1,a=this._y1,s=i-t,l=r-e,c=o-t,h=a-e,u=c*c+h*h;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(u>Ja)if(Math.abs(h*s-l*c)>Ja&&n){let d=i-o,f=r-a,p=s*s+l*l,g=d*d+f*f,m=Math.sqrt(p),y=Math.sqrt(u),x=n*Math.tan((Xa-Math.acos((p+u-g)/(2*m*y)))/2),C=x/y,b=x/m;Math.abs(C-1)>Ja&&this._append`L${t+C*c},${e+C*h}`,this._append`A${n},${n},0,0,${+(h*d>c*f)},${this._x1=t+b*s},${this._y1=e+b*l}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,i,r,n,o){if(t=+t,e=+e,o=!!o,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=i*Math.cos(r),s=i*Math.sin(r),l=t+a,c=e+s,h=1^o,u=o?r-n:n-r;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>Ja||Math.abs(this._y1-c)>Ja)&&this._append`L${l},${c}`,i&&(u<0&&(u=u%Qa+Qa),u>Ka?this._append`A${i},${i},0,1,${h},${t-a},${e-s}A${i},${i},0,1,${h},${this._x1=l},${this._y1=c}`:u>Ja&&this._append`A${i},${i},0,${+(u>=Xa)},${h},${this._x1=t+i*Math.cos(n)},${this._y1=e+i*Math.sin(n)}`)}rect(t,e,i,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${i=+i}v${+r}h${-i}Z`}toString(){return this._}}function is(t){let e=3;return t.digits=function(i){if(!arguments.length)return e;if(null==i)e=null;else{const t=Math.floor(i);if(!(t>=0))throw new RangeError(`invalid digits: ${i}`);e=t}return t},()=>new es(e)}function rs(t){return t.innerRadius}function ns(t){return t.outerRadius}function os(t){return t.startAngle}function as(t){return t.endAngle}function ss(t){return t&&t.padAngle}function ls(t,e,i,r,n,o,a){var s=t-i,l=e-r,c=(a?o:-o)/Wa(s*s+l*l),h=c*l,u=-c*s,d=t+h,f=e+u,p=i+h,g=r+u,m=(d+p)/2,y=(f+g)/2,x=p-d,C=g-f,b=x*x+C*C,_=n-o,v=d*g-p*f,k=(C<0?-1:1)*Wa(za(0,_*_*b-v*v)),T=(v*C-x*k)/b,w=(-v*x-C*k)/b,S=(v*C+x*k)/b,B=(-v*x+C*k)/b,F=T-m,A=w-y,L=S-m,M=B-y;return F*F+A*A>L*L+M*M&&(T=S,w=B),{cx:T,cy:w,x01:-h,y01:-u,x11:T*(n/_-1),y11:w*(n/_-1)}}function cs(){var t=rs,e=ns,i=ja(0),r=null,n=os,o=as,a=ss,s=null,l=is(c);function c(){var c,h,u,d=+t.apply(this,arguments),f=+e.apply(this,arguments),p=n.apply(this,arguments)-Ya,g=o.apply(this,arguments)-Ya,m=qa(g-p),y=g>p;if(s||(s=c=l()),f<d&&(h=f,f=d,d=h),f>Ha)if(m>Va-Ha)s.moveTo(f*$a(p),f*Ra(p)),s.arc(0,0,f,p,g,!y),d>Ha&&(s.moveTo(d*$a(g),d*Ra(g)),s.arc(0,0,d,g,p,y));else{var x,C,b=p,_=g,v=p,k=g,T=m,w=m,S=a.apply(this,arguments)/2,B=S>Ha&&(r?+r.apply(this,arguments):Wa(d*d+f*f)),F=Pa(qa(f-d)/2,+i.apply(this,arguments)),A=F,L=F;if(B>Ha){var M=Ga(B/d*Ra(S)),E=Ga(B/f*Ra(S));(T-=2*M)>Ha?(v+=M*=y?1:-1,k-=M):(T=0,v=k=(p+g)/2),(w-=2*E)>Ha?(b+=E*=y?1:-1,_-=E):(w=0,b=_=(p+g)/2)}var Z=f*$a(b),N=f*Ra(b),O=d*$a(k),I=d*Ra(k);if(F>Ha){var j,q=f*$a(_),D=f*Ra(_),$=d*$a(v),z=d*Ra(v);if(m<Ua)if(j=function(t,e,i,r,n,o,a,s){var l=i-t,c=r-e,h=a-n,u=s-o,d=u*l-h*c;if(!(d*d<Ha))return[t+(d=(h*(e-o)-u*(t-n))/d)*l,e+d*c]}(Z,N,$,z,q,D,O,I)){var P=Z-j[0],R=N-j[1],W=q-j[0],H=D-j[1],U=1/Ra(((u=(P*W+R*H)/(Wa(P*P+R*R)*Wa(W*W+H*H)))>1?0:u<-1?Ua:Math.acos(u))/2),Y=Wa(j[0]*j[0]+j[1]*j[1]);A=Pa(F,(d-Y)/(U-1)),L=Pa(F,(f-Y)/(U+1))}else A=L=0}w>Ha?L>Ha?(x=ls($,z,Z,N,f,L,y),C=ls(q,D,O,I,f,L,y),s.moveTo(x.cx+x.x01,x.cy+x.y01),L<F?s.arc(x.cx,x.cy,L,Da(x.y01,x.x01),Da(C.y01,C.x01),!y):(s.arc(x.cx,x.cy,L,Da(x.y01,x.x01),Da(x.y11,x.x11),!y),s.arc(0,0,f,Da(x.cy+x.y11,x.cx+x.x11),Da(C.cy+C.y11,C.cx+C.x11),!y),s.arc(C.cx,C.cy,L,Da(C.y11,C.x11),Da(C.y01,C.x01),!y))):(s.moveTo(Z,N),s.arc(0,0,f,b,_,!y)):s.moveTo(Z,N),d>Ha&&T>Ha?A>Ha?(x=ls(O,I,q,D,d,-A,y),C=ls(Z,N,$,z,d,-A,y),s.lineTo(x.cx+x.x01,x.cy+x.y01),A<F?s.arc(x.cx,x.cy,A,Da(x.y01,x.x01),Da(C.y01,C.x01),!y):(s.arc(x.cx,x.cy,A,Da(x.y01,x.x01),Da(x.y11,x.x11),!y),s.arc(0,0,d,Da(x.cy+x.y11,x.cx+x.x11),Da(C.cy+C.y11,C.cx+C.x11),y),s.arc(C.cx,C.cy,A,Da(C.y11,C.x11),Da(C.y01,C.x01),!y))):s.arc(0,0,d,k,v,y):s.lineTo(O,I)}else s.moveTo(0,0);if(s.closePath(),c)return s=null,c+""||null}return c.centroid=function(){var i=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+n.apply(this,arguments)+ +o.apply(this,arguments))/2-Ua/2;return[$a(r)*i,Ra(r)*i]},c.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:ja(+e),c):t},c.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:ja(+t),c):e},c.cornerRadius=function(t){return arguments.length?(i="function"==typeof t?t:ja(+t),c):i},c.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:ja(+t),c):r},c.startAngle=function(t){return arguments.length?(n="function"==typeof t?t:ja(+t),c):n},c.endAngle=function(t){return arguments.length?(o="function"==typeof t?t:ja(+t),c):o},c.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:ja(+t),c):a},c.context=function(t){return arguments.length?(s=null==t?null:t,c):s},c}es.prototype;Array.prototype.slice;function hs(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function us(t){this._context=t}function ds(t){return new us(t)}function fs(t){return t[0]}function ps(t){return t[1]}function gs(t,e){var i=ja(!0),r=null,n=ds,o=null,a=is(s);function s(s){var l,c,h,u=(s=hs(s)).length,d=!1;for(null==r&&(o=n(h=a())),l=0;l<=u;++l)!(l<u&&i(c=s[l],l,s))===d&&((d=!d)?o.lineStart():o.lineEnd()),d&&o.point(+t(c,l,s),+e(c,l,s));if(h)return o=null,h+""||null}return t="function"==typeof t?t:void 0===t?fs:ja(t),e="function"==typeof e?e:void 0===e?ps:ja(e),s.x=function(e){return arguments.length?(t="function"==typeof e?e:ja(+e),s):t},s.y=function(t){return arguments.length?(e="function"==typeof t?t:ja(+t),s):e},s.defined=function(t){return arguments.length?(i="function"==typeof t?t:ja(!!t),s):i},s.curve=function(t){return arguments.length?(n=t,null!=r&&(o=n(r)),s):n},s.context=function(t){return arguments.length?(null==t?r=o=null:o=n(r=t),s):r},s}function ms(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function ys(t){return t}function xs(){var t=ys,e=ms,i=null,r=ja(0),n=ja(Va),o=ja(0);function a(a){var s,l,c,h,u,d=(a=hs(a)).length,f=0,p=new Array(d),g=new Array(d),m=+r.apply(this,arguments),y=Math.min(Va,Math.max(-Va,n.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/d,o.apply(this,arguments)),C=x*(y<0?-1:1);for(s=0;s<d;++s)(u=g[p[s]=s]=+t(a[s],s,a))>0&&(f+=u);for(null!=e?p.sort((function(t,i){return e(g[t],g[i])})):null!=i&&p.sort((function(t,e){return i(a[t],a[e])})),s=0,c=f?(y-d*C)/f:0;s<d;++s,m=h)l=p[s],h=m+((u=g[l])>0?u*c:0)+C,g[l]={data:a[l],index:s,value:u,startAngle:m,endAngle:h,padAngle:x};return g}return a.value=function(e){return arguments.length?(t="function"==typeof e?e:ja(+e),a):t},a.sortValues=function(t){return arguments.length?(e=t,i=null,a):e},a.sort=function(t){return arguments.length?(i=t,e=null,a):i},a.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:ja(+t),a):r},a.endAngle=function(t){return arguments.length?(n="function"==typeof t?t:ja(+t),a):n},a.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:ja(+t),a):o},a}function Cs(){}function bs(t,e,i){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+i)/6)}function _s(t){this._context=t}function vs(t){return new _s(t)}function ks(t){this._context=t}function Ts(t){return new ks(t)}function ws(t){this._context=t}function Ss(t){return new ws(t)}us.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},_s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:bs(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ks.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ws.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var i=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(i,r):this._context.moveTo(i,r);break;case 3:this._point=4;default:bs(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class Bs{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function Fs(t){return new Bs(t,!0)}function As(t){return new Bs(t,!1)}function Ls(t,e){this._basis=new _s(t),this._beta=e}Ls.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,i=t.length-1;if(i>0)for(var r,n=t[0],o=e[0],a=t[i]-n,s=e[i]-o,l=-1;++l<=i;)r=l/i,this._basis.point(this._beta*t[l]+(1-this._beta)*(n+r*a),this._beta*e[l]+(1-this._beta)*(o+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};const Ms=function t(e){function i(t){return 1===e?new _s(t):new Ls(t,e)}return i.beta=function(e){return t(+e)},i}(.85);function Es(t,e,i){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-i),t._x2,t._y2)}function Zs(t,e){this._context=t,this._k=(1-e)/6}Zs.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:Es(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Ns=function t(e){function i(t){return new Zs(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Os(t,e){this._context=t,this._k=(1-e)/6}Os.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Is=function t(e){function i(t){return new Os(t,e)}return i.tension=function(e){return t(+e)},i}(0);function js(t,e){this._context=t,this._k=(1-e)/6}js.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Es(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const qs=function t(e){function i(t){return new js(t,e)}return i.tension=function(e){return t(+e)},i}(0);function Ds(t,e,i){var r=t._x1,n=t._y1,o=t._x2,a=t._y2;if(t._l01_a>Ha){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,n=(n*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>Ha){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);o=(o*c+t._x1*t._l23_2a-e*t._l12_2a)/h,a=(a*c+t._y1*t._l23_2a-i*t._l12_2a)/h}t._context.bezierCurveTo(r,n,o,a,t._x2,t._y2)}function $s(t,e){this._context=t,this._alpha=e}$s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:Ds(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const zs=function t(e){function i(t){return e?new $s(t,e):new Zs(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ps(t,e){this._context=t,this._alpha=e}Ps.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:Ds(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Rs=function t(e){function i(t){return e?new Ps(t,e):new Os(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Ws(t,e){this._context=t,this._alpha=e}Ws.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var i=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(i*i+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Ds(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};const Hs=function t(e){function i(t){return e?new Ws(t,e):new js(t,0)}return i.alpha=function(e){return t(+e)},i}(.5);function Us(t){this._context=t}function Ys(t){return new Us(t)}function Vs(t){return t<0?-1:1}function Gs(t,e,i){var r=t._x1-t._x0,n=e-t._x1,o=(t._y1-t._y0)/(r||n<0&&-0),a=(i-t._y1)/(n||r<0&&-0),s=(o*n+a*r)/(r+n);return(Vs(o)+Vs(a))*Math.min(Math.abs(o),Math.abs(a),.5*Math.abs(s))||0}function Xs(t,e){var i=t._x1-t._x0;return i?(3*(t._y1-t._y0)/i-e)/2:e}function Qs(t,e,i){var r=t._x0,n=t._y0,o=t._x1,a=t._y1,s=(o-r)/3;t._context.bezierCurveTo(r+s,n+s*e,o-s,a-s*i,o,a)}function Js(t){this._context=t}function Ks(t){this._context=new tl(t)}function tl(t){this._context=t}function el(t){return new Js(t)}function il(t){return new Ks(t)}function rl(t){this._context=t}function nl(t){var e,i,r=t.length-1,n=new Array(r),o=new Array(r),a=new Array(r);for(n[0]=0,o[0]=2,a[0]=t[0]+2*t[1],e=1;e<r-1;++e)n[e]=1,o[e]=4,a[e]=4*t[e]+2*t[e+1];for(n[r-1]=2,o[r-1]=7,a[r-1]=8*t[r-1]+t[r],e=1;e<r;++e)i=n[e]/o[e-1],o[e]-=i,a[e]-=i*a[e-1];for(n[r-1]=a[r-1]/o[r-1],e=r-2;e>=0;--e)n[e]=(a[e]-n[e+1])/o[e];for(o[r-1]=(t[r]+n[r-1])/2,e=0;e<r-1;++e)o[e]=2*t[e+1]-n[e+1];return[n,o]}function ol(t){return new rl(t)}function al(t,e){this._context=t,this._t=e}function sl(t){return new al(t,.5)}function ll(t){return new al(t,0)}function cl(t){return new al(t,1)}function hl(t,e,i){this.k=t,this.x=e,this.y=i}Us.prototype={areaStart:Cs,areaEnd:Cs,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},Js.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Qs(this,this._t0,Xs(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var i=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Qs(this,Xs(this,i=Gs(this,t,e)),i);break;default:Qs(this,this._t0,i=Gs(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=i}}},(Ks.prototype=Object.create(Js.prototype)).point=function(t,e){Js.prototype.point.call(this,e,t)},tl.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,i,r,n,o){this._context.bezierCurveTo(e,t,r,i,o,n)}},rl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,i=t.length;if(i)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===i)this._context.lineTo(t[1],e[1]);else for(var r=nl(t),n=nl(e),o=0,a=1;a<i;++o,++a)this._context.bezierCurveTo(r[0][o],n[0][o],r[1][o],n[1][o],t[a],e[a]);(this._line||0!==this._line&&1===i)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},al.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var i=this._x*(1-this._t)+t*this._t;this._context.lineTo(i,this._y),this._context.lineTo(i,e)}}this._x=t,this._y=e}},hl.prototype={constructor:hl,scale:function(t){return 1===t?this:new hl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new hl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};new hl(1,0,0);hl.prototype},21883:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(61691),n=i(82142);const o=class{constructor(){this.type=n.w.ALL}get(){return this.type}set(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t}reset(){this.type=n.w.ALL}is(t){return this.type===t}};const a=new class{constructor(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new o}set(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=n.w.ALL,this}_ensureHSL(){const t=this.data,{h:e,s:i,l:n}=t;void 0===e&&(t.h=r.Z.channel.rgb2hsl(t,"h")),void 0===i&&(t.s=r.Z.channel.rgb2hsl(t,"s")),void 0===n&&(t.l=r.Z.channel.rgb2hsl(t,"l"))}_ensureRGB(){const t=this.data,{r:e,g:i,b:n}=t;void 0===e&&(t.r=r.Z.channel.hsl2rgb(t,"r")),void 0===i&&(t.g=r.Z.channel.hsl2rgb(t,"g")),void 0===n&&(t.b=r.Z.channel.hsl2rgb(t,"b"))}get r(){const t=this.data,e=t.r;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"r")):e}get g(){const t=this.data,e=t.g;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"g")):e}get b(){const t=this.data,e=t.b;return this.type.is(n.w.HSL)||void 0===e?(this._ensureHSL(),r.Z.channel.hsl2rgb(t,"b")):e}get h(){const t=this.data,e=t.h;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"h")):e}get s(){const t=this.data,e=t.s;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"s")):e}get l(){const t=this.data,e=t.l;return this.type.is(n.w.RGB)||void 0===e?(this._ensureRGB(),r.Z.channel.rgb2hsl(t,"l")):e}get a(){return this.data.a}set r(t){this.type.set(n.w.RGB),this.changed=!0,this.data.r=t}set g(t){this.type.set(n.w.RGB),this.changed=!0,this.data.g=t}set b(t){this.type.set(n.w.RGB),this.changed=!0,this.data.b=t}set h(t){this.type.set(n.w.HSL),this.changed=!0,this.data.h=t}set s(t){this.type.set(n.w.HSL),this.changed=!0,this.data.s=t}set l(t){this.type.set(n.w.HSL),this.changed=!0,this.data.l=t}set a(t){this.changed=!0,this.data.a=t}}({r:0,g:0,b:0,a:0},"transparent")},71610:(t,e,i)=>{"use strict";i.d(e,{Z:()=>g});var r=i(21883),n=i(82142);const o={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:t=>{if(35!==t.charCodeAt(0))return;const e=t.match(o.re);if(!e)return;const i=e[1],n=parseInt(i,16),a=i.length,s=a%4==0,l=a>4,c=l?1:17,h=l?8:4,u=s?0:-1,d=l?255:15;return r.Z.set({r:(n>>h*(u+3)&d)*c,g:(n>>h*(u+2)&d)*c,b:(n>>h*(u+1)&d)*c,a:s?(n&d)*c/255:1},t)},stringify:t=>{const{r:e,g:i,b:r,a:o}=t;return o<1?`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}${n.Q[Math.round(255*o)]}`:`#${n.Q[Math.round(e)]}${n.Q[Math.round(i)]}${n.Q[Math.round(r)]}`}},a=o;var s=i(61691);const l={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:t=>{const e=t.match(l.hueRe);if(e){const[,t,i]=e;switch(i){case"grad":return s.Z.channel.clamp.h(.9*parseFloat(t));case"rad":return s.Z.channel.clamp.h(180*parseFloat(t)/Math.PI);case"turn":return s.Z.channel.clamp.h(360*parseFloat(t))}}return s.Z.channel.clamp.h(parseFloat(t))},parse:t=>{const e=t.charCodeAt(0);if(104!==e&&72!==e)return;const i=t.match(l.re);if(!i)return;const[,n,o,a,c,h]=i;return r.Z.set({h:l._hue2deg(n),s:s.Z.channel.clamp.s(parseFloat(o)),l:s.Z.channel.clamp.l(parseFloat(a)),a:c?s.Z.channel.clamp.a(h?parseFloat(c)/100:parseFloat(c)):1},t)},stringify:t=>{const{h:e,s:i,l:r,a:n}=t;return n<1?`hsla(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%, ${n})`:`hsl(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}%, ${s.Z.lang.round(r)}%)`}},c=l,h={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:t=>{t=t.toLowerCase();const e=h.colors[t];if(e)return a.parse(e)},stringify:t=>{const e=a.stringify(t);for(const i in h.colors)if(h.colors[i]===e)return i}},u=h,d={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:t=>{const e=t.charCodeAt(0);if(114!==e&&82!==e)return;const i=t.match(d.re);if(!i)return;const[,n,o,a,l,c,h,u,f]=i;return r.Z.set({r:s.Z.channel.clamp.r(o?2.55*parseFloat(n):parseFloat(n)),g:s.Z.channel.clamp.g(l?2.55*parseFloat(a):parseFloat(a)),b:s.Z.channel.clamp.b(h?2.55*parseFloat(c):parseFloat(c)),a:u?s.Z.channel.clamp.a(f?parseFloat(u)/100:parseFloat(u)):1},t)},stringify:t=>{const{r:e,g:i,b:r,a:n}=t;return n<1?`rgba(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)}, ${s.Z.lang.round(n)})`:`rgb(${s.Z.lang.round(e)}, ${s.Z.lang.round(i)}, ${s.Z.lang.round(r)})`}},f=d,p={format:{keyword:h,hex:a,rgb:d,rgba:d,hsl:l,hsla:l},parse:t=>{if("string"!=typeof t)return t;const e=a.parse(t)||f.parse(t)||c.parse(t)||u.parse(t);if(e)return e;throw new Error(`Unsupported color format: "${t}"`)},stringify:t=>!t.changed&&t.color?t.color:t.type.is(n.w.HSL)||void 0===t.data.r?c.stringify(t):t.a<1||!Number.isInteger(t.r)||!Number.isInteger(t.g)||!Number.isInteger(t.b)?f.stringify(t):a.stringify(t)},g=p},82142:(t,e,i)=>{"use strict";i.d(e,{Q:()=>n,w:()=>o});var r=i(61691);const n={};for(let a=0;a<=255;a++)n[a]=r.Z.unit.dec2hex(a);const o={ALL:0,RGB:1,HSL:2}},26174:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(61691),n=i(71610);const o=(t,e,i)=>{const o=n.Z.parse(t),a=o[e],s=r.Z.channel.clamp[e](a+i);return a!==s&&(o[e]=s),n.Z.stringify(o)}},49807:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(61691),n=i(71610);const o=(t,e)=>{const i=n.Z.parse(t);for(const n in e)i[n]=r.Z.channel.clamp[n](e[n]);return n.Z.stringify(i)}},7201:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(26174);const n=(t,e)=>(0,r.Z)(t,"l",-e)},91619:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(61691),n=i(71610);const o=t=>{const{r:e,g:i,b:o}=n.Z.parse(t),a=.2126*r.Z.channel.toLinear(e)+.7152*r.Z.channel.toLinear(i)+.0722*r.Z.channel.toLinear(o);return r.Z.lang.round(a)},a=t=>o(t)>=.5,s=t=>!a(t)},12281:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(26174);const n=(t,e)=>(0,r.Z)(t,"l",e)},51117:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(61691),n=i(21883),o=i(71610),a=i(49807);const s=(t,e,i=0,s=1)=>{if("number"!=typeof t)return(0,a.Z)(t,{a:e});const l=n.Z.set({r:r.Z.channel.clamp.r(t),g:r.Z.channel.clamp.g(e),b:r.Z.channel.clamp.b(i),a:r.Z.channel.clamp.a(s)});return o.Z.stringify(l)}},61691:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});const r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:t=>t>=255?255:t<0?0:t,g:t=>t>=255?255:t<0?0:t,b:t=>t>=255?255:t<0?0:t,h:t=>t%360,s:t=>t>=100?100:t<0?0:t,l:t=>t>=100?100:t<0?0:t,a:t=>t>=1?1:t<0?0:t},toLinear:t=>{const e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:(t,e,i)=>(i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t),hsl2rgb:({h:t,s:e,l:i},n)=>{if(!e)return 2.55*i;t/=360,e/=100;const o=(i/=100)<.5?i*(1+e):i+e-i*e,a=2*i-o;switch(n){case"r":return 255*r.hue2rgb(a,o,t+1/3);case"g":return 255*r.hue2rgb(a,o,t);case"b":return 255*r.hue2rgb(a,o,t-1/3)}},rgb2hsl:({r:t,g:e,b:i},r)=>{t/=255,e/=255,i/=255;const n=Math.max(t,e,i),o=Math.min(t,e,i),a=(n+o)/2;if("l"===r)return 100*a;if(n===o)return 0;const s=n-o;if("s"===r)return 100*(a>.5?s/(2-n-o):s/(n+o));switch(n){case t:return 60*((e-i)/s+(e<i?6:0));case e:return 60*((i-t)/s+2);case i:return 60*((t-e)/s+4);default:return-1}}},n={channel:r,lang:{clamp:(t,e,i)=>e>i?Math.min(e,Math.max(i,t)):Math.min(i,Math.max(e,t)),round:t=>Math.round(1e10*t)/1e10},unit:{dec2hex:t=>{const e=Math.round(t).toString(16);return e.length>1?e:`0${e}`}}}},67308:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});const r=function(){this.__data__=[],this.size=0};var n=i(79651);const o=function(t,e){for(var i=t.length;i--;)if((0,n.Z)(t[i][0],e))return i;return-1};var a=Array.prototype.splice;const s=function(t){var e=this.__data__,i=o(e,t);return!(i<0)&&(i==e.length-1?e.pop():a.call(e,i,1),--this.size,!0)};const l=function(t){var e=this.__data__,i=o(e,t);return i<0?void 0:e[i][1]};const c=function(t){return o(this.__data__,t)>-1};const h=function(t,e){var i=this.__data__,r=o(i,t);return r<0?(++this.size,i.push([t,e])):i[r][1]=e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=r,u.prototype.delete=s,u.prototype.get=l,u.prototype.has=c,u.prototype.set=h;const d=u},86183:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"Map")},37834:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});const r=(0,i(62508).Z)(Object,"create");const n=function(){this.__data__=r?r(null):{},this.size=0};const o=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e};var a=Object.prototype.hasOwnProperty;const s=function(t){var e=this.__data__;if(r){var i=e[t];return"__lodash_hash_undefined__"===i?void 0:i}return a.call(e,t)?e[t]:void 0};var l=Object.prototype.hasOwnProperty;const c=function(t){var e=this.__data__;return r?void 0!==e[t]:l.call(e,t)};const h=function(t,e){var i=this.__data__;return this.size+=this.has(t)?0:1,i[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this};function u(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=s,u.prototype.has=c,u.prototype.set=h;const d=u;var f=i(67308),p=i(86183);const g=function(){this.size=0,this.__data__={hash:new d,map:new(p.Z||f.Z),string:new d}};const m=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t};const y=function(t,e){var i=t.__data__;return m(e)?i["string"==typeof e?"string":"hash"]:i.map};const x=function(t){var e=y(this,t).delete(t);return this.size-=e?1:0,e};const C=function(t){return y(this,t).get(t)};const b=function(t){return y(this,t).has(t)};const _=function(t,e){var i=y(this,t),r=i.size;return i.set(t,e),this.size+=i.size==r?0:1,this};function v(t){var e=-1,i=null==t?0:t.length;for(this.clear();++e<i;){var r=t[e];this.set(r[0],r[1])}}v.prototype.clear=g,v.prototype.delete=x,v.prototype.get=C,v.prototype.has=b,v.prototype.set=_;const k=v},93203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"Set")},31667:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(67308);const n=function(){this.__data__=new r.Z,this.size=0};const o=function(t){var e=this.__data__,i=e.delete(t);return this.size=e.size,i};const a=function(t){return this.__data__.get(t)};const s=function(t){return this.__data__.has(t)};var l=i(86183),c=i(37834);const h=function(t,e){var i=this.__data__;if(i instanceof r.Z){var n=i.__data__;if(!l.Z||n.length<199)return n.push([t,e]),this.size=++i.size,this;i=this.__data__=new c.Z(n)}return i.set(t,e),this.size=i.size,this};function u(t){var e=this.__data__=new r.Z(t);this.size=e.size}u.prototype.clear=n,u.prototype.delete=o,u.prototype.get=a,u.prototype.has=s,u.prototype.set=h;const d=u},17685:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(66092).Z.Symbol},84073:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=i(66092).Z.Uint8Array},87668:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});const r=function(t,e){for(var i=-1,r=Array(t);++i<t;)r[i]=e(i);return r};var n=i(29169),o=i(27771),a=i(77008),s=i(56009),l=i(18843),c=Object.prototype.hasOwnProperty;const h=function(t,e){var i=(0,o.Z)(t),h=!i&&(0,n.Z)(t),u=!i&&!h&&(0,a.Z)(t),d=!i&&!h&&!u&&(0,l.Z)(t),f=i||h||u||d,p=f?r(t.length,String):[],g=p.length;for(var m in t)!e&&!c.call(t,m)||f&&("length"==m||u&&("offset"==m||"parent"==m)||d&&("buffer"==m||"byteLength"==m||"byteOffset"==m)||(0,s.Z)(m,g))||p.push(m);return p}},72954:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(74752),n=i(79651),o=Object.prototype.hasOwnProperty;const a=function(t,e,i){var a=t[e];o.call(t,e)&&(0,n.Z)(a,i)&&(void 0!==i||e in t)||(0,r.Z)(t,e,i)}},74752:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(77904);const n=function(t,e,i){"__proto__"==e&&r.Z?(0,r.Z)(t,e,{configurable:!0,enumerable:!0,value:i,writable:!0}):t[e]=i}},61395:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e,i,r){for(var n=-1,o=Object(e),a=r(e),s=a.length;s--;){var l=a[t?s:++n];if(!1===i(o[l],l,o))break}return e}}()},93589:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(17685),n=Object.prototype,o=n.hasOwnProperty,a=n.toString,s=r.Z?r.Z.toStringTag:void 0;const l=function(t){var e=o.call(t,s),i=t[s];try{t[s]=void 0;var r=!0}catch(l){}var n=a.call(t);return r&&(e?t[s]=i:delete t[s]),n};var c=Object.prototype.toString;const h=function(t){return c.call(t)};var u=r.Z?r.Z.toStringTag:void 0;const d=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?l(t):h(t)}},39473:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(72764);const n=(0,i(1851).Z)(Object.keys,Object);var o=Object.prototype.hasOwnProperty;const a=function(t){if(!(0,r.Z)(t))return n(t);var e=[];for(var i in Object(t))o.call(t,i)&&"constructor"!=i&&e.push(i);return e}},69581:(t,e,i)=>{"use strict";i.d(e,{Z:()=>a});var r=i(69203),n=i(81211),o=i(27227);const a=function(t,e){return(0,o.Z)((0,n.Z)(t,e,r.Z),t+"")}},21162:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(e){return t(e)}}},41884:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(84073);const n=function(t){var e=new t.constructor(t.byteLength);return new r.Z(e).set(new r.Z(t)),e}},91050:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(66092),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n?r.Z.Buffer:void 0,s=a?a.allocUnsafe:void 0;const l=function(t,e){if(e)return t.slice();var i=t.length,r=s?s(i):new t.constructor(i);return t.copy(r),r}},12701:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(41884);const n=function(t,e){var i=e?(0,r.Z)(t.buffer):t.buffer;return new t.constructor(i,t.byteOffset,t.length)}},87215:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){var i=-1,r=t.length;for(e||(e=Array(r));++i<r;)e[i]=t[i];return e}},31899:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(72954),n=i(74752);const o=function(t,e,i,o){var a=!i;i||(i={});for(var s=-1,l=e.length;++s<l;){var c=e[s],h=o?o(i[c],t[c],c,i,t):void 0;void 0===h&&(h=t[c]),a?(0,n.Z)(i,c,h):(0,r.Z)(i,c,h)}return i}},77904:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=i(62508);const n=function(){try{var t=(0,r.Z)(Object,"defineProperty");return t({},"",{}),t}catch(e){}}()},13413:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r="object"==typeof global&&global&&global.Object===Object&&global},62508:(t,e,i)=>{"use strict";i.d(e,{Z:()=>x});var r=i(73234);const n=i(66092).Z["__core-js_shared__"];var o,a=(o=/[^.]+$/.exec(n&&n.keys&&n.keys.IE_PROTO||""))?"Symbol(src)_1."+o:"";const s=function(t){return!!a&&a in t};var l=i(77226),c=i(90019),h=/^\[object .+?Constructor\]$/,u=Function.prototype,d=Object.prototype,f=u.toString,p=d.hasOwnProperty,g=RegExp("^"+f.call(p).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");const m=function(t){return!(!(0,l.Z)(t)||s(t))&&((0,r.Z)(t)?g:h).test((0,c.Z)(t))};const y=function(t,e){return null==t?void 0:t[e]};const x=function(t,e){var i=y(t,e);return m(i)?i:void 0}},12513:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=(0,i(1851).Z)(Object.getPrototypeOf,Object)},83970:(t,e,i)=>{"use strict";i.d(e,{Z:()=>k});var r=i(62508),n=i(66092);const o=(0,r.Z)(n.Z,"DataView");var a=i(86183);const s=(0,r.Z)(n.Z,"Promise");var l=i(93203);const c=(0,r.Z)(n.Z,"WeakMap");var h=i(93589),u=i(90019),d="[object Map]",f="[object Promise]",p="[object Set]",g="[object WeakMap]",m="[object DataView]",y=(0,u.Z)(o),x=(0,u.Z)(a.Z),C=(0,u.Z)(s),b=(0,u.Z)(l.Z),_=(0,u.Z)(c),v=h.Z;(o&&v(new o(new ArrayBuffer(1)))!=m||a.Z&&v(new a.Z)!=d||s&&v(s.resolve())!=f||l.Z&&v(new l.Z)!=p||c&&v(new c)!=g)&&(v=function(t){var e=(0,h.Z)(t),i="[object Object]"==e?t.constructor:void 0,r=i?(0,u.Z)(i):"";if(r)switch(r){case y:return m;case x:return d;case C:return f;case b:return p;case _:return g}return e});const k=v},73658:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(77226),n=Object.create;const o=function(){function t(){}return function(e){if(!(0,r.Z)(e))return{};if(n)return n(e);t.prototype=e;var i=new t;return t.prototype=void 0,i}}();var a=i(12513),s=i(72764);const l=function(t){return"function"!=typeof t.constructor||(0,s.Z)(t)?{}:o((0,a.Z)(t))}},56009:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=/^(?:0|[1-9]\d*)$/;const n=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==i||"symbol"!=i&&r.test(t))&&t>-1&&t%1==0&&t<e}},50439:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(79651),n=i(50585),o=i(56009),a=i(77226);const s=function(t,e,i){if(!(0,a.Z)(i))return!1;var s=typeof e;return!!("number"==s?(0,n.Z)(i)&&(0,o.Z)(e,i.length):"string"==s&&e in i)&&(0,r.Z)(i[e],t)}},72764:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Object.prototype;const n=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||r)}},98351:(t,e,i)=>{"use strict";i.d(e,{Z:()=>s});var r=i(13413),n="object"==typeof exports&&exports&&!exports.nodeType&&exports,o=n&&"object"==typeof module&&module&&!module.nodeType&&module,a=o&&o.exports===n&&r.Z.process;const s=function(){try{var t=o&&o.require&&o.require("util").types;return t||a&&a.binding&&a.binding("util")}catch(e){}}()},1851:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return function(i){return t(e(i))}}},81211:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});const r=function(t,e,i){switch(i.length){case 0:return t.call(e);case 1:return t.call(e,i[0]);case 2:return t.call(e,i[0],i[1]);case 3:return t.call(e,i[0],i[1],i[2])}return t.apply(e,i)};var n=Math.max;const o=function(t,e,i){return e=n(void 0===e?t.length-1:e,0),function(){for(var o=arguments,a=-1,s=n(o.length-e,0),l=Array(s);++a<s;)l[a]=o[e+a];a=-1;for(var c=Array(e+1);++a<e;)c[a]=o[a];return c[e]=i(l),r(t,this,c)}}},66092:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(13413),n="object"==typeof self&&self&&self.Object===Object&&self;const o=r.Z||n||Function("return this")()},27227:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(62002),n=i(77904),o=i(69203);const a=n.Z?function(t,e){return(0,n.Z)(t,"toString",{configurable:!0,enumerable:!1,value:(0,r.Z)(e),writable:!0})}:o.Z;var s=Date.now;const l=function(t){var e=0,i=0;return function(){var r=s(),n=16-(r-i);if(i=r,n>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}(a)},90019:(t,e,i)=>{"use strict";i.d(e,{Z:()=>n});var r=Function.prototype.toString;const n=function(t){if(null!=t){try{return r.call(t)}catch(e){}try{return t+""}catch(e){}}return""}},62002:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return function(){return t}}},79651:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t,e){return t===e||t!=t&&e!=e}},69203:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return t}},29169:(t,e,i)=>{"use strict";i.d(e,{Z:()=>c});var r=i(93589),n=i(18533);const o=function(t){return(0,n.Z)(t)&&"[object Arguments]"==(0,r.Z)(t)};var a=Object.prototype,s=a.hasOwnProperty,l=a.propertyIsEnumerable;const c=o(function(){return arguments}())?o:function(t){return(0,n.Z)(t)&&s.call(t,"callee")&&!l.call(t,"callee")}},27771:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=Array.isArray},50585:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(73234),n=i(1656);const o=function(t){return null!=t&&(0,n.Z)(t.length)&&!(0,r.Z)(t)}},836:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(50585),n=i(18533);const o=function(t){return(0,n.Z)(t)&&(0,r.Z)(t)}},77008:(t,e,i)=>{"use strict";i.d(e,{Z:()=>l});var r=i(66092);const n=function(){return!1};var o="object"==typeof exports&&exports&&!exports.nodeType&&exports,a=o&&"object"==typeof module&&module&&!module.nodeType&&module,s=a&&a.exports===o?r.Z.Buffer:void 0;const l=(s?s.isBuffer:void 0)||n},79697:(t,e,i)=>{"use strict";i.d(e,{Z:()=>d});var r=i(39473),n=i(83970),o=i(29169),a=i(27771),s=i(50585),l=i(77008),c=i(72764),h=i(18843),u=Object.prototype.hasOwnProperty;const d=function(t){if(null==t)return!0;if((0,s.Z)(t)&&((0,a.Z)(t)||"string"==typeof t||"function"==typeof t.splice||(0,l.Z)(t)||(0,h.Z)(t)||(0,o.Z)(t)))return!t.length;var e=(0,n.Z)(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if((0,c.Z)(t))return!(0,r.Z)(t).length;for(var i in t)if(u.call(t,i))return!1;return!0}},73234:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(93589),n=i(77226);const o=function(t){if(!(0,n.Z)(t))return!1;var e=(0,r.Z)(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},1656:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},77226:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},18533:(t,e,i)=>{"use strict";i.d(e,{Z:()=>r});const r=function(t){return null!=t&&"object"==typeof t}},37514:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(93589),n=i(12513),o=i(18533),a=Function.prototype,s=Object.prototype,l=a.toString,c=s.hasOwnProperty,h=l.call(Object);const u=function(t){if(!(0,o.Z)(t)||"[object Object]"!=(0,r.Z)(t))return!1;var e=(0,n.Z)(t);if(null===e)return!0;var i=c.call(e,"constructor")&&e.constructor;return"function"==typeof i&&i instanceof i&&l.call(i)==h}},18843:(t,e,i)=>{"use strict";i.d(e,{Z:()=>u});var r=i(93589),n=i(1656),o=i(18533),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1;const s=function(t){return(0,o.Z)(t)&&(0,n.Z)(t.length)&&!!a[(0,r.Z)(t)]};var l=i(21162),c=i(98351),h=c.Z&&c.Z.isTypedArray;const u=h?(0,l.Z)(h):s},32957:(t,e,i)=>{"use strict";i.d(e,{Z:()=>h});var r=i(87668),n=i(77226),o=i(72764);const a=function(t){var e=[];if(null!=t)for(var i in Object(t))e.push(i);return e};var s=Object.prototype.hasOwnProperty;const l=function(t){if(!(0,n.Z)(t))return a(t);var e=(0,o.Z)(t),i=[];for(var r in t)("constructor"!=r||!e&&s.call(t,r))&&i.push(r);return i};var c=i(50585);const h=function(t){return(0,c.Z)(t)?(0,r.Z)(t,!0):l(t)}},42454:(t,e,i)=>{"use strict";i.d(e,{Z:()=>o});var r=i(37834);function n(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var i=function(){var r=arguments,n=e?e.apply(this,r):r[0],o=i.cache;if(o.has(n))return o.get(n);var a=t.apply(this,r);return i.cache=o.set(n,a)||o,a};return i.cache=new(n.Cache||r.Z),i}n.Cache=r.Z;const o=n},59236:(t,e,i)=>{"use strict";i.d(e,{Z:()=>F});var r=i(31667),n=i(74752),o=i(79651);const a=function(t,e,i){(void 0!==i&&!(0,o.Z)(t[e],i)||void 0===i&&!(e in t))&&(0,n.Z)(t,e,i)};var s=i(61395),l=i(91050),c=i(12701),h=i(87215),u=i(73658),d=i(29169),f=i(27771),p=i(836),g=i(77008),m=i(73234),y=i(77226),x=i(37514),C=i(18843);const b=function(t,e){if(("constructor"!==e||"function"!=typeof t[e])&&"__proto__"!=e)return t[e]};var _=i(31899),v=i(32957);const k=function(t){return(0,_.Z)(t,(0,v.Z)(t))};const T=function(t,e,i,r,n,o,s){var _=b(t,i),v=b(e,i),T=s.get(v);if(T)a(t,i,T);else{var w=o?o(_,v,i+"",t,e,s):void 0,S=void 0===w;if(S){var B=(0,f.Z)(v),F=!B&&(0,g.Z)(v),A=!B&&!F&&(0,C.Z)(v);w=v,B||F||A?(0,f.Z)(_)?w=_:(0,p.Z)(_)?w=(0,h.Z)(_):F?(S=!1,w=(0,l.Z)(v,!0)):A?(S=!1,w=(0,c.Z)(v,!0)):w=[]:(0,x.Z)(v)||(0,d.Z)(v)?(w=_,(0,d.Z)(_)?w=k(_):(0,y.Z)(_)&&!(0,m.Z)(_)||(w=(0,u.Z)(v))):S=!1}S&&(s.set(v,w),n(w,v,r,o,s),s.delete(v)),a(t,i,w)}};const w=function t(e,i,n,o,l){e!==i&&(0,s.Z)(i,(function(s,c){if(l||(l=new r.Z),(0,y.Z)(s))T(e,i,c,n,t,o,l);else{var h=o?o(b(e,c),s,c+"",e,i,l):void 0;void 0===h&&(h=s),a(e,c,h)}}),v.Z)};var S=i(69581),B=i(50439);const F=function(t){return(0,S.Z)((function(e,i){var r=-1,n=i.length,o=n>1?i[n-1]:void 0,a=n>2?i[2]:void 0;for(o=t.length>3&&"function"==typeof o?(n--,o):void 0,a&&(0,B.Z)(i[0],i[1],a)&&(o=n<3?void 0:o,n=1),e=Object(e);++r<n;){var s=i[r];s&&t(e,s,r,o)}return e}))}((function(t,e,i){w(t,e,i)}))},85322:(t,e,i)=>{"use strict";i.d(e,{A:()=>It,B:()=>me,C:()=>ge,D:()=>Ft,E:()=>Be,F:()=>er,G:()=>oe,H:()=>ht,I:()=>Mi,J:()=>Dn,K:()=>Si,L:()=>to,Z:()=>Gt,a:()=>ki,b:()=>vi,c:()=>Ai,d:()=>ft,e:()=>_t,f:()=>Vt,g:()=>_i,h:()=>ue,i:()=>ui,j:()=>he,k:()=>re,l:()=>st,m:()=>mt,n:()=>Kt,o:()=>di,p:()=>Li,q:()=>Ti,r:()=>wi,s:()=>bi,t:()=>Ci,u:()=>ye,v:()=>yt,w:()=>le,x:()=>ae,y:()=>Zi,z:()=>qi});var r=i(18464),n=i(27484),o=i(17967),a=i(64218),s=i(27856),l=i(71610),c=i(49807);const h=(t,e)=>{const i=l.Z.parse(t),r={};for(const n in e)e[n]&&(r[n]=i[n]+e[n]);return(0,c.Z)(t,r)};var u=i(51117);const d=(t,e,i=50)=>{const{r:r,g:n,b:o,a:a}=l.Z.parse(t),{r:s,g:c,b:h,a:d}=l.Z.parse(e),f=i/100,p=2*f-1,g=a-d,m=((p*g==-1?p:(p+g)/(1+p*g))+1)/2,y=1-m,x=r*m+s*y,C=n*m+c*y,b=o*m+h*y,_=a*f+d*(1-f);return(0,u.Z)(x,C,b,_)},f=(t,e=100)=>{const i=l.Z.parse(t);return i.r=255-i.r,i.g=255-i.g,i.b=255-i.b,d(i,t,e)};var p=i(7201),g=i(12281),m=i(91619),y=i(42454),x=i(59236),C="comm",b="rule",_="decl",v=Math.abs,k=String.fromCharCode;Object.assign;function T(t){return t.trim()}function w(t,e,i){return t.replace(e,i)}function S(t,e,i){return t.indexOf(e,i)}function B(t,e){return 0|t.charCodeAt(e)}function F(t,e,i){return t.slice(e,i)}function A(t){return t.length}function L(t,e){return e.push(t),t}function M(t,e){for(var i="",r=0;r<t.length;r++)i+=e(t[r],r,t,e)||"";return i}function E(t,e,i,r){switch(t.type){case"@layer":if(t.children.length)break;case"@import":case _:return t.return=t.return||t.value;case C:return"";case"@keyframes":return t.return=t.value+"{"+M(t.children,r)+"}";case b:if(!A(t.value=t.props.join(",")))return""}return A(i=M(t.children,r))?t.return=t.value+"{"+i+"}":""}var Z=1,N=1,O=0,I=0,j=0,q="";function D(t,e,i,r,n,o,a,s){return{value:t,root:e,parent:i,type:r,props:n,children:o,line:Z,column:N,length:a,return:"",siblings:s}}function $(){return j=I>0?B(q,--I):0,N--,10===j&&(N=1,Z--),j}function z(){return j=I<O?B(q,I++):0,N++,10===j&&(N=1,Z++),j}function P(){return B(q,I)}function R(){return I}function W(t,e){return F(q,t,e)}function H(t){switch(t){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function U(t){return Z=N=1,O=A(q=t),I=0,[]}function Y(t){return q="",t}function V(t){return T(W(I-1,Q(91===t?t+2:40===t?t+1:t)))}function G(t){for(;(j=P())&&j<33;)z();return H(t)>2||H(j)>3?"":" "}function X(t,e){for(;--e&&z()&&!(j<48||j>102||j>57&&j<65||j>70&&j<97););return W(t,R()+(e<6&&32==P()&&32==z()))}function Q(t){for(;z();)switch(j){case t:return I;case 34:case 39:34!==t&&39!==t&&Q(j);break;case 40:41===t&&Q(t);break;case 92:z()}return I}function J(t,e){for(;z()&&t+j!==57&&(t+j!==84||47!==P()););return"/*"+W(e,I-1)+"*"+k(47===t?t:z())}function K(t){for(;!H(P());)z();return W(t,I)}function tt(t){return Y(et("",null,null,null,[""],t=U(t),0,[0],t))}function et(t,e,i,r,n,o,a,s,l){for(var c=0,h=0,u=a,d=0,f=0,p=0,g=1,m=1,y=1,x=0,C="",b=n,_=o,T=r,F=C;m;)switch(p=x,x=z()){case 40:if(108!=p&&58==B(F,u-1)){-1!=S(F+=w(V(x),"&","&\f"),"&\f",v(c?s[c-1]:0))&&(y=-1);break}case 34:case 39:case 91:F+=V(x);break;case 9:case 10:case 13:case 32:F+=G(p);break;case 92:F+=X(R()-1,7);continue;case 47:switch(P()){case 42:case 47:L(rt(J(z(),R()),e,i,l),l);break;default:F+="/"}break;case 123*g:s[c++]=A(F)*y;case 125*g:case 59:case 0:switch(x){case 0:case 125:m=0;case 59+h:-1==y&&(F=w(F,/\f/g,"")),f>0&&A(F)-u&&L(f>32?nt(F+";",r,i,u-1,l):nt(w(F," ","")+";",r,i,u-2,l),l);break;case 59:F+=";";default:if(L(T=it(F,e,i,c,h,n,s,C,b=[],_=[],u,o),o),123===x)if(0===h)et(F,e,T,T,b,o,u,s,_);else switch(99===d&&110===B(F,3)?100:d){case 100:case 108:case 109:case 115:et(t,T,T,r&&L(it(t,T,T,0,0,n,s,C,n,b=[],u,_),_),n,_,u,s,r?b:_);break;default:et(F,T,T,T,[""],_,0,s,_)}}c=h=f=0,g=y=1,C=F="",u=a;break;case 58:u=1+A(F),f=p;default:if(g<1)if(123==x)--g;else if(125==x&&0==g++&&125==$())continue;switch(F+=k(x),x*g){case 38:y=h>0?1:(F+="\f",-1);break;case 44:s[c++]=(A(F)-1)*y,y=1;break;case 64:45===P()&&(F+=V(z())),d=P(),h=u=A(C=F+=K(R())),x++;break;case 45:45===p&&2==A(F)&&(g=0)}}return o}function it(t,e,i,r,n,o,a,s,l,c,h,u){for(var d=n-1,f=0===n?o:[""],p=function(t){return t.length}(f),g=0,m=0,y=0;g<r;++g)for(var x=0,C=F(t,d+1,d=v(m=a[g])),_=t;x<p;++x)(_=T(m>0?f[x]+" "+C:w(C,/&\f/g,f[x])))&&(l[y++]=_);return D(t,e,i,0===n?b:s,l,c,h,u)}function rt(t,e,i,r){return D(t,e,i,C,k(j),F(t,2,-2),0,r)}function nt(t,e,i,r,n){return D(t,e,i,_,F(t,0,r),F(t,r+1,-1),r,n)}var ot=i(79697);const at={trace:0,debug:1,info:2,warn:3,error:4,fatal:5},st={trace:(...t)=>{},debug:(...t)=>{},info:(...t)=>{},warn:(...t)=>{},error:(...t)=>{},fatal:(...t)=>{}},lt=function(t="fatal"){let e=at.fatal;"string"==typeof t?(t=t.toLowerCase())in at&&(e=at[t]):"number"==typeof t&&(e=t),st.trace=()=>{},st.debug=()=>{},st.info=()=>{},st.warn=()=>{},st.error=()=>{},st.fatal=()=>{},e<=at.fatal&&(st.fatal=console.error?console.error.bind(console,ct("FATAL"),"color: orange"):console.log.bind(console,"\x1b[35m",ct("FATAL"))),e<=at.error&&(st.error=console.error?console.error.bind(console,ct("ERROR"),"color: orange"):console.log.bind(console,"\x1b[31m",ct("ERROR"))),e<=at.warn&&(st.warn=console.warn?console.warn.bind(console,ct("WARN"),"color: orange"):console.log.bind(console,"\x1b[33m",ct("WARN"))),e<=at.info&&(st.info=console.info?console.info.bind(console,ct("INFO"),"color: lightblue"):console.log.bind(console,"\x1b[34m",ct("INFO"))),e<=at.debug&&(st.debug=console.debug?console.debug.bind(console,ct("DEBUG"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("DEBUG"))),e<=at.trace&&(st.trace=console.debug?console.debug.bind(console,ct("TRACE"),"color: lightgreen"):console.log.bind(console,"\x1b[32m",ct("TRACE")))},ct=t=>`%c${n().format("ss.SSS")} : ${t} : `,ht=/<br\s*\/?>/gi,ut=t=>s.sanitize(t),dt=(t,e)=>{var i;if(!1!==(null==(i=e.flowchart)?void 0:i.htmlLabels)){const i=e.securityLevel;"antiscript"===i||"strict"===i?t=ut(t):"loose"!==i&&(t=(t=(t=gt(t)).replace(/</g,"<").replace(/>/g,">")).replace(/=/g,"="),t=pt(t))}return t},ft=(t,e)=>t?t=e.dompurifyConfig?s.sanitize(dt(t,e),e.dompurifyConfig).toString():s.sanitize(dt(t,e),{FORBID_TAGS:["style"]}).toString():t,pt=t=>t.replace(/#br#/g,"<br/>"),gt=t=>t.replace(ht,"#br#"),mt=t=>!1!==t&&!["false","null","0"].includes(String(t).trim().toLowerCase()),yt=function(t){const e=t.split(/(,)/),i=[];for(let r=0;r<e.length;r++){let t=e[r];if(","===t&&r>0&&r+1<e.length){const n=e[r-1],o=e[r+1];Ct(n,o)&&(t=n+","+o,r++,i.pop())}i.push(bt(t))}return i.join("")},xt=(t,e)=>Math.max(0,t.split(e).length-1),Ct=(t,e)=>{const i=xt(t,"~"),r=xt(e,"~");return 1===i&&1===r},bt=t=>{const e=xt(t,"~");let i=!1;if(e<=1)return t;e%2!=0&&t.startsWith("~")&&(t=t.substring(1),i=!0);const r=[...t];let n=r.indexOf("~"),o=r.lastIndexOf("~");for(;-1!==n&&-1!==o&&n!==o;)r[n]="<",r[o]=">",n=r.indexOf("~"),o=r.lastIndexOf("~");return i&&r.unshift("~"),r.join("")},_t={getRows:t=>{if(!t)return[""];return gt(t).replace(/\\n/g,"#br#").split("#br#")},sanitizeText:ft,sanitizeTextOrArray:(t,e)=>"string"==typeof t?ft(t,e):t.flat().map((t=>ft(t,e))),hasBreaks:t=>ht.test(t),splitBreaks:t=>t.split(ht),lineBreakRegex:ht,removeScript:ut,getUrl:t=>{let e="";return t&&(e=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search,e=e.replaceAll(/\(/g,"\\("),e=e.replaceAll(/\)/g,"\\)")),e},evaluate:mt,getMax:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.max(...e)},getMin:function(...t){const e=t.filter((t=>!isNaN(t)));return Math.min(...e)}},vt=(t,e)=>h(t,e?{s:-40,l:10}:{s:-40,l:-10}),kt="#ffffff",Tt="#f2f2f2";let wt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#fff4dd",this.noteBkgColor="#fff5ad",this.noteTextColor="#333",this.THEME_COLOR_LIMIT=12,this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;if(this.primaryTextColor=this.primaryTextColor||(this.darkMode?"#eee":"#333"),this.secondaryColor=this.secondaryColor||h(this.primaryColor,{h:-120}),this.tertiaryColor=this.tertiaryColor||h(this.primaryColor,{h:180,l:5}),this.primaryBorderColor=this.primaryBorderColor||vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=this.secondaryBorderColor||vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=this.tertiaryBorderColor||vt(this.tertiaryColor,this.darkMode),this.noteBorderColor=this.noteBorderColor||vt(this.noteBkgColor,this.darkMode),this.noteBkgColor=this.noteBkgColor||"#fff5ad",this.noteTextColor=this.noteTextColor||"#333",this.secondaryTextColor=this.secondaryTextColor||f(this.secondaryColor),this.tertiaryTextColor=this.tertiaryTextColor||f(this.tertiaryColor),this.lineColor=this.lineColor||f(this.background),this.arrowheadColor=this.arrowheadColor||f(this.background),this.textColor=this.textColor||this.primaryTextColor,this.border2=this.border2||this.tertiaryBorderColor,this.nodeBkg=this.nodeBkg||this.primaryColor,this.mainBkg=this.mainBkg||this.primaryColor,this.nodeBorder=this.nodeBorder||this.primaryBorderColor,this.clusterBkg=this.clusterBkg||this.tertiaryColor,this.clusterBorder=this.clusterBorder||this.tertiaryBorderColor,this.defaultLinkColor=this.defaultLinkColor||this.lineColor,this.titleColor=this.titleColor||this.tertiaryTextColor,this.edgeLabelBackground=this.edgeLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.nodeTextColor=this.nodeTextColor||this.primaryTextColor,this.actorBorder=this.actorBorder||this.primaryBorderColor,this.actorBkg=this.actorBkg||this.mainBkg,this.actorTextColor=this.actorTextColor||this.primaryTextColor,this.actorLineColor=this.actorLineColor||"grey",this.labelBoxBkgColor=this.labelBoxBkgColor||this.actorBkg,this.signalColor=this.signalColor||this.textColor,this.signalTextColor=this.signalTextColor||this.textColor,this.labelBoxBorderColor=this.labelBoxBorderColor||this.actorBorder,this.labelTextColor=this.labelTextColor||this.actorTextColor,this.loopTextColor=this.loopTextColor||this.actorTextColor,this.activationBorderColor=this.activationBorderColor||(0,p.Z)(this.secondaryColor,10),this.activationBkgColor=this.activationBkgColor||this.secondaryColor,this.sequenceNumberColor=this.sequenceNumberColor||f(this.lineColor),this.sectionBkgColor=this.sectionBkgColor||this.tertiaryColor,this.altSectionBkgColor=this.altSectionBkgColor||"white",this.sectionBkgColor=this.sectionBkgColor||this.secondaryColor,this.sectionBkgColor2=this.sectionBkgColor2||this.primaryColor,this.excludeBkgColor=this.excludeBkgColor||"#eeeeee",this.taskBorderColor=this.taskBorderColor||this.primaryBorderColor,this.taskBkgColor=this.taskBkgColor||this.primaryColor,this.activeTaskBorderColor=this.activeTaskBorderColor||this.primaryColor,this.activeTaskBkgColor=this.activeTaskBkgColor||(0,g.Z)(this.primaryColor,23),this.gridColor=this.gridColor||"lightgrey",this.doneTaskBkgColor=this.doneTaskBkgColor||"lightgrey",this.doneTaskBorderColor=this.doneTaskBorderColor||"grey",this.critBorderColor=this.critBorderColor||"#ff8888",this.critBkgColor=this.critBkgColor||"red",this.todayLineColor=this.todayLineColor||"red",this.taskTextColor=this.taskTextColor||this.textColor,this.taskTextOutsideColor=this.taskTextOutsideColor||this.textColor,this.taskTextLightColor=this.taskTextLightColor||this.textColor,this.taskTextColor=this.taskTextColor||this.primaryTextColor,this.taskTextDarkColor=this.taskTextDarkColor||this.textColor,this.taskTextClickableColor=this.taskTextClickableColor||"#003163",this.personBorder=this.personBorder||this.primaryBorderColor,this.personBkg=this.personBkg||this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||this.tertiaryColor,this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.specialStateColor=this.lineColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210,l:150}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.darkMode)for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],75);else for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],25);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;const d=this.darkMode?-4:-1;for(let f=0;f<5;f++)this["surface"+f]=this["surface"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(5+3*f)}),this["surfacePeer"+f]=this["surfacePeer"+f]||h(this.mainBkg,{h:180,s:-15,l:d*(8+3*f)});this.classText=this.classText||this.textColor,this.fillType0=this.fillType0||this.primaryColor,this.fillType1=this.fillType1||this.secondaryColor,this.fillType2=this.fillType2||h(this.primaryColor,{h:64}),this.fillType3=this.fillType3||h(this.secondaryColor,{h:64}),this.fillType4=this.fillType4||h(this.primaryColor,{h:-64}),this.fillType5=this.fillType5||h(this.secondaryColor,{h:-64}),this.fillType6=this.fillType6||h(this.primaryColor,{h:128}),this.fillType7=this.fillType7||h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-10}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-10}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-20}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-20}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-10}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#FFF4DD,#FFD8B1,#FFA07A,#ECEFF1,#D6DBDF,#C3E0A8,#FFB6A4,#FFD74D,#738FA7,#FFFFF0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||(this.darkMode?"black":this.labelTextColor),this.gitBranchLabel0=this.gitBranchLabel0||this.branchLabelColor,this.gitBranchLabel1=this.gitBranchLabel1||this.branchLabelColor,this.gitBranchLabel2=this.gitBranchLabel2||this.branchLabelColor,this.gitBranchLabel3=this.gitBranchLabel3||this.branchLabelColor,this.gitBranchLabel4=this.gitBranchLabel4||this.branchLabelColor,this.gitBranchLabel5=this.gitBranchLabel5||this.branchLabelColor,this.gitBranchLabel6=this.gitBranchLabel6||this.branchLabelColor,this.gitBranchLabel7=this.gitBranchLabel7||this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let St=class{constructor(){this.background="#333",this.primaryColor="#1f2020",this.secondaryColor=(0,g.Z)(this.primaryColor,16),this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=f(this.background),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#1f2020",this.secondBkg="calculated",this.mainContrastColor="lightgrey",this.darkTextColor=(0,g.Z)(f("#323D47"),10),this.lineColor="calculated",this.border1="#81B1DB",this.border2=(0,u.Z)(255,255,255,.25),this.arrowheadColor="calculated",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#181818",this.textColor="#ccc",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#F9FFFE",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="calculated",this.activationBkgColor="calculated",this.sequenceNumberColor="black",this.sectionBkgColor=(0,p.Z)("#EAE8D9",30),this.altSectionBkgColor="calculated",this.sectionBkgColor2="#EAE8D9",this.excludeBkgColor=(0,p.Z)(this.sectionBkgColor,10),this.taskBorderColor=(0,u.Z)(255,255,255,70),this.taskBkgColor="calculated",this.taskTextColor="calculated",this.taskTextLightColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor=(0,u.Z)(255,255,255,50),this.activeTaskBkgColor="#81B1DB",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="grey",this.critBorderColor="#E83737",this.critBkgColor="#E83737",this.taskTextDarkColor="calculated",this.todayLineColor="#DB5757",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="calculated",this.errorBkgColor="#a44141",this.errorTextColor="#ddd"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.Z)(this.mainBkg,16),this.lineColor=this.mainContrastColor,this.arrowheadColor=this.mainContrastColor,this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.edgeLabelBackground=(0,g.Z)(this.labelBackground,25),this.actorBorder=this.border1,this.actorBkg=this.mainBkg,this.actorTextColor=this.mainContrastColor,this.actorLineColor=this.mainContrastColor,this.signalColor=this.mainContrastColor,this.signalTextColor=this.mainContrastColor,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.mainContrastColor,this.loopTextColor=this.mainContrastColor,this.noteBorderColor=this.secondaryBorderColor,this.noteBkgColor=this.secondBkg,this.noteTextColor=this.secondaryTextColor,this.activationBorderColor=this.border1,this.activationBkgColor=this.secondBkg,this.altSectionBkgColor=this.background,this.taskBkgColor=(0,g.Z)(this.mainBkg,23),this.taskTextColor=this.darkTextColor,this.taskTextLightColor=this.mainContrastColor,this.taskTextOutsideColor=this.taskTextLightColor,this.gridColor=this.mainContrastColor,this.doneTaskBkgColor=this.mainContrastColor,this.taskTextDarkColor=this.darkTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#555",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#f4f4f4",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.cScale1=this.cScale1||"#0b0000",this.cScale2=this.cScale2||"#4d1037",this.cScale3=this.cScale3||"#3f5258",this.cScale4=this.cScale4||"#4f2f1b",this.cScale5=this.cScale5||"#6e0a0a",this.cScale6=this.cScale6||"#3b0048",this.cScale7=this.cScale7||"#995a01",this.cScale8=this.cScale8||"#154706",this.cScale9=this.cScale9||"#161722",this.cScale10=this.cScale10||"#00296f",this.cScale11=this.cScale11||"#01629c",this.cScale12=this.cScale12||"#010029",this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10);for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-10)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(4*d-7)});this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#3498db,#2ecc71,#e74c3c,#f1c40f,#bdc3c7,#ffffff,#34495e,#9b59b6,#1abc9c,#e67e22"},this.classText=this.primaryTextColor,this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||(this.darkMode?(0,p.Z)(this.secondaryColor,30):this.secondaryColor),this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,g.Z)(this.secondaryColor,20),this.git1=(0,g.Z)(this.pie2||this.secondaryColor,20),this.git2=(0,g.Z)(this.pie3||this.tertiaryColor,20),this.git3=(0,g.Z)(this.pie4||h(this.primaryColor,{h:-30}),20),this.git4=(0,g.Z)(this.pie5||h(this.primaryColor,{h:-60}),20),this.git5=(0,g.Z)(this.pie6||h(this.primaryColor,{h:-90}),10),this.git6=(0,g.Z)(this.pie7||h(this.primaryColor,{h:60}),10),this.git7=(0,g.Z)(this.pie8||h(this.primaryColor,{h:120}),20),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||(0,g.Z)(this.background,12),this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||(0,g.Z)(this.background,2)}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};let Bt=class{constructor(){this.background="#f4f4f4",this.primaryColor="#ECECFF",this.secondaryColor=h(this.primaryColor,{h:120}),this.secondaryColor="#ffffde",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.background="white",this.mainBkg="#ECECFF",this.secondBkg="#ffffde",this.lineColor="#333333",this.border1="#9370DB",this.border2="#aaaa33",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.labelBackground="#e8e8e8",this.textColor="#333",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="calculated",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="calculated",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="calculated",this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor="calculated",this.taskTextOutsideColor=this.taskTextDarkColor,this.taskTextClickableColor="calculated",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBorderColor="calculated",this.critBkgColor="calculated",this.todayLineColor="calculated",this.sectionBkgColor=(0,u.Z)(102,102,255,.49),this.altSectionBkgColor="white",this.sectionBkgColor2="#fff400",this.taskBorderColor="#534fbc",this.taskBkgColor="#8a90dd",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="#534fbc",this.activeTaskBkgColor="#bfc7ff",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222",this.updateColors()}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,l:-(7+5*d)});if(this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor,"calculated"!==this.labelTextColor){this.cScaleLabel0=this.cScaleLabel0||f(this.labelTextColor),this.cScaleLabel3=this.cScaleLabel3||f(this.labelTextColor);for(let t=0;t<this.THEME_COLOR_LIMIT;t++)this["cScaleLabel"+t]=this["cScaleLabel"+t]||this.labelTextColor}this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.textColor,this.edgeLabelBackground=this.labelBackground,this.actorBorder=(0,g.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.signalColor=this.textColor,this.signalTextColor=this.textColor,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.nodeBorder,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||h(this.tertiaryColor,{l:-40}),this.pie4=this.pie4||h(this.primaryColor,{l:-10}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{l:-20}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-20}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-40}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:-40}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-40}),this.pie11=this.pie11||h(this.primaryColor,{h:-90,l:-40}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-30}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#ECECFF,#8493A6,#FFC3A0,#DCDDE1,#B8E994,#D1A36F,#C3CDE6,#FFB6C1,#496078,#F8F3E3"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.labelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||(0,p.Z)(f(this.git0),25),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};const Ft=t=>{const e=new Bt;return e.calculate(t),e};let At=class{constructor(){this.background="#f4f4f4",this.primaryColor="#cde498",this.secondaryColor="#cdffb2",this.background="white",this.mainBkg="#cde498",this.secondBkg="#cdffb2",this.lineColor="green",this.border1="#13540c",this.border2="#6eaa49",this.arrowheadColor="green",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.tertiaryColor=(0,g.Z)("#cde498",10),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.primaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="#333",this.edgeLabelBackground="#e8e8e8",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="black",this.actorLineColor="grey",this.signalColor="#333",this.signalTextColor="#333",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="#326932",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="#fff5ad",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="#6eaa49",this.altSectionBkgColor="white",this.sectionBkgColor2="#6eaa49",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="#487e3a",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="black",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="lightgrey",this.doneTaskBkgColor="lightgrey",this.doneTaskBorderColor="grey",this.critBorderColor="#ff8888",this.critBkgColor="red",this.todayLineColor="red",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.actorBorder=(0,p.Z)(this.mainBkg,20),this.actorBkg=this.mainBkg,this.labelBoxBkgColor=this.actorBkg,this.labelTextColor=this.actorTextColor,this.loopTextColor=this.actorTextColor,this.noteBorderColor=this.border2,this.noteTextColor=this.actorTextColor,this.cScale0=this.cScale0||this.primaryColor,this.cScale1=this.cScale1||this.secondaryColor,this.cScale2=this.cScale2||this.tertiaryColor,this.cScale3=this.cScale3||h(this.primaryColor,{h:30}),this.cScale4=this.cScale4||h(this.primaryColor,{h:60}),this.cScale5=this.cScale5||h(this.primaryColor,{h:90}),this.cScale6=this.cScale6||h(this.primaryColor,{h:120}),this.cScale7=this.cScale7||h(this.primaryColor,{h:150}),this.cScale8=this.cScale8||h(this.primaryColor,{h:210}),this.cScale9=this.cScale9||h(this.primaryColor,{h:270}),this.cScale10=this.cScale10||h(this.primaryColor,{h:300}),this.cScale11=this.cScale11||h(this.primaryColor,{h:330}),this.cScalePeer1=this.cScalePeer1||(0,p.Z)(this.secondaryColor,45),this.cScalePeer2=this.cScalePeer2||(0,p.Z)(this.tertiaryColor,40);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScale"+h]=(0,p.Z)(this["cScale"+h],10),this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],25);for(let d=0;d<this.THEME_COLOR_LIMIT;d++)this["cScaleInv"+d]=this["cScaleInv"+d]||h(this["cScale"+d],{h:180});this.scaleLabelColor="calculated"!==this.scaleLabelColor&&this.scaleLabelColor?this.scaleLabelColor:this.labelTextColor;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{h:30,s:-30,l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{h:30,s:-30,l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.taskBorderColor=this.border1,this.taskTextColor=this.taskTextLightColor,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.transitionColor=this.transitionColor||this.lineColor,this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f0f0f0",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.compositeBorder=this.compositeBorder||this.nodeBorder,this.innerEndBackground=this.primaryBorderColor,this.specialStateColor=this.lineColor,this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.transitionColor=this.transitionColor||this.lineColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128}),this.pie1=this.pie1||this.primaryColor,this.pie2=this.pie2||this.secondaryColor,this.pie3=this.pie3||this.tertiaryColor,this.pie4=this.pie4||h(this.primaryColor,{l:-30}),this.pie5=this.pie5||h(this.secondaryColor,{l:-30}),this.pie6=this.pie6||h(this.tertiaryColor,{h:40,l:-40}),this.pie7=this.pie7||h(this.primaryColor,{h:60,l:-10}),this.pie8=this.pie8||h(this.primaryColor,{h:-60,l:-10}),this.pie9=this.pie9||h(this.primaryColor,{h:120,l:0}),this.pie10=this.pie10||h(this.primaryColor,{h:60,l:-50}),this.pie11=this.pie11||h(this.primaryColor,{h:-60,l:-50}),this.pie12=this.pie12||h(this.primaryColor,{h:120,l:-50}),this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#CDE498,#FF6B6B,#A0D2DB,#D7BDE2,#F0F0F0,#FFC3A0,#7FD8BE,#FF9A8B,#FAF3E0,#FFF176"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=this.git0||this.primaryColor,this.git1=this.git1||this.secondaryColor,this.git2=this.git2||this.tertiaryColor,this.git3=this.git3||h(this.primaryColor,{h:-30}),this.git4=this.git4||h(this.primaryColor,{h:-60}),this.git5=this.git5||h(this.primaryColor,{h:-90}),this.git6=this.git6||h(this.primaryColor,{h:60}),this.git7=this.git7||h(this.primaryColor,{h:120}),this.darkMode?(this.git0=(0,g.Z)(this.git0,25),this.git1=(0,g.Z)(this.git1,25),this.git2=(0,g.Z)(this.git2,25),this.git3=(0,g.Z)(this.git3,25),this.git4=(0,g.Z)(this.git4,25),this.git5=(0,g.Z)(this.git5,25),this.git6=(0,g.Z)(this.git6,25),this.git7=(0,g.Z)(this.git7,25)):(this.git0=(0,p.Z)(this.git0,25),this.git1=(0,p.Z)(this.git1,25),this.git2=(0,p.Z)(this.git2,25),this.git3=(0,p.Z)(this.git3,25),this.git4=(0,p.Z)(this.git4,25),this.git5=(0,p.Z)(this.git5,25),this.git6=(0,p.Z)(this.git6,25),this.git7=(0,p.Z)(this.git7,25)),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.gitBranchLabel0=this.gitBranchLabel0||f(this.labelTextColor),this.gitBranchLabel1=this.gitBranchLabel1||this.labelTextColor,this.gitBranchLabel2=this.gitBranchLabel2||this.labelTextColor,this.gitBranchLabel3=this.gitBranchLabel3||f(this.labelTextColor),this.gitBranchLabel4=this.gitBranchLabel4||this.labelTextColor,this.gitBranchLabel5=this.gitBranchLabel5||this.labelTextColor,this.gitBranchLabel6=this.gitBranchLabel6||this.labelTextColor,this.gitBranchLabel7=this.gitBranchLabel7||this.labelTextColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}};class Lt{constructor(){this.primaryColor="#eee",this.contrast="#707070",this.secondaryColor=(0,g.Z)(this.contrast,55),this.background="#ffffff",this.tertiaryColor=h(this.primaryColor,{h:-160}),this.primaryBorderColor=vt(this.primaryColor,this.darkMode),this.secondaryBorderColor=vt(this.secondaryColor,this.darkMode),this.tertiaryBorderColor=vt(this.tertiaryColor,this.darkMode),this.primaryTextColor=f(this.primaryColor),this.secondaryTextColor=f(this.secondaryColor),this.tertiaryTextColor=f(this.tertiaryColor),this.lineColor=f(this.background),this.textColor=f(this.background),this.mainBkg="#eee",this.secondBkg="calculated",this.lineColor="#666",this.border1="#999",this.border2="calculated",this.note="#ffa",this.text="#333",this.critical="#d42",this.done="#bbb",this.arrowheadColor="#333333",this.fontFamily='"trebuchet ms", verdana, arial, sans-serif',this.fontSize="16px",this.THEME_COLOR_LIMIT=12,this.nodeBkg="calculated",this.nodeBorder="calculated",this.clusterBkg="calculated",this.clusterBorder="calculated",this.defaultLinkColor="calculated",this.titleColor="calculated",this.edgeLabelBackground="white",this.actorBorder="calculated",this.actorBkg="calculated",this.actorTextColor="calculated",this.actorLineColor="calculated",this.signalColor="calculated",this.signalTextColor="calculated",this.labelBoxBkgColor="calculated",this.labelBoxBorderColor="calculated",this.labelTextColor="calculated",this.loopTextColor="calculated",this.noteBorderColor="calculated",this.noteBkgColor="calculated",this.noteTextColor="calculated",this.activationBorderColor="#666",this.activationBkgColor="#f4f4f4",this.sequenceNumberColor="white",this.sectionBkgColor="calculated",this.altSectionBkgColor="white",this.sectionBkgColor2="calculated",this.excludeBkgColor="#eeeeee",this.taskBorderColor="calculated",this.taskBkgColor="calculated",this.taskTextLightColor="white",this.taskTextColor="calculated",this.taskTextDarkColor="calculated",this.taskTextOutsideColor="calculated",this.taskTextClickableColor="#003163",this.activeTaskBorderColor="calculated",this.activeTaskBkgColor="calculated",this.gridColor="calculated",this.doneTaskBkgColor="calculated",this.doneTaskBorderColor="calculated",this.critBkgColor="calculated",this.critBorderColor="calculated",this.todayLineColor="calculated",this.personBorder=this.primaryBorderColor,this.personBkg=this.mainBkg,this.labelColor="black",this.errorBkgColor="#552222",this.errorTextColor="#552222"}updateColors(){var t,e,i,r,n,o,a,s,l,c,u;this.secondBkg=(0,g.Z)(this.contrast,55),this.border2=this.contrast,this.actorBorder=(0,g.Z)(this.border1,23),this.actorBkg=this.mainBkg,this.actorTextColor=this.text,this.actorLineColor=this.lineColor,this.signalColor=this.text,this.signalTextColor=this.text,this.labelBoxBkgColor=this.actorBkg,this.labelBoxBorderColor=this.actorBorder,this.labelTextColor=this.text,this.loopTextColor=this.text,this.noteBorderColor="#999",this.noteBkgColor="#666",this.noteTextColor="#fff",this.cScale0=this.cScale0||"#555",this.cScale1=this.cScale1||"#F4F4F4",this.cScale2=this.cScale2||"#555",this.cScale3=this.cScale3||"#BBB",this.cScale4=this.cScale4||"#777",this.cScale5=this.cScale5||"#999",this.cScale6=this.cScale6||"#DDD",this.cScale7=this.cScale7||"#FFF",this.cScale8=this.cScale8||"#DDD",this.cScale9=this.cScale9||"#BBB",this.cScale10=this.cScale10||"#999",this.cScale11=this.cScale11||"#777";for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleInv"+h]=this["cScaleInv"+h]||f(this["cScale"+h]);for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this.darkMode?this["cScalePeer"+h]=this["cScalePeer"+h]||(0,g.Z)(this["cScale"+h],10):this["cScalePeer"+h]=this["cScalePeer"+h]||(0,p.Z)(this["cScale"+h],10);this.scaleLabelColor=this.scaleLabelColor||(this.darkMode?"black":this.labelTextColor),this.cScaleLabel0=this.cScaleLabel0||this.cScale1,this.cScaleLabel2=this.cScaleLabel2||this.cScale1;for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["cScaleLabel"+h]=this["cScaleLabel"+h]||this.scaleLabelColor;for(let d=0;d<5;d++)this["surface"+d]=this["surface"+d]||h(this.mainBkg,{l:-(5+5*d)}),this["surfacePeer"+d]=this["surfacePeer"+d]||h(this.mainBkg,{l:-(8+5*d)});this.nodeBkg=this.mainBkg,this.nodeBorder=this.border1,this.clusterBkg=this.secondBkg,this.clusterBorder=this.border2,this.defaultLinkColor=this.lineColor,this.titleColor=this.text,this.sectionBkgColor=(0,g.Z)(this.contrast,30),this.sectionBkgColor2=(0,g.Z)(this.contrast,30),this.taskBorderColor=(0,p.Z)(this.contrast,10),this.taskBkgColor=this.contrast,this.taskTextColor=this.taskTextLightColor,this.taskTextDarkColor=this.text,this.taskTextOutsideColor=this.taskTextDarkColor,this.activeTaskBorderColor=this.taskBorderColor,this.activeTaskBkgColor=this.mainBkg,this.gridColor=(0,g.Z)(this.border1,30),this.doneTaskBkgColor=this.done,this.doneTaskBorderColor=this.lineColor,this.critBkgColor=this.critical,this.critBorderColor=(0,p.Z)(this.critBkgColor,10),this.todayLineColor=this.critBkgColor,this.transitionColor=this.transitionColor||"#000",this.transitionLabelColor=this.transitionLabelColor||this.textColor,this.stateLabelColor=this.stateLabelColor||this.stateBkg||this.primaryTextColor,this.stateBkg=this.stateBkg||this.mainBkg,this.labelBackgroundColor=this.labelBackgroundColor||this.stateBkg,this.compositeBackground=this.compositeBackground||this.background||this.tertiaryColor,this.altBackground=this.altBackground||"#f4f4f4",this.compositeTitleBackground=this.compositeTitleBackground||this.mainBkg,this.stateBorder=this.stateBorder||"#000",this.innerEndBackground=this.primaryBorderColor,this.specialStateColor="#222",this.errorBkgColor=this.errorBkgColor||this.tertiaryColor,this.errorTextColor=this.errorTextColor||this.tertiaryTextColor,this.classText=this.primaryTextColor,this.fillType0=this.primaryColor,this.fillType1=this.secondaryColor,this.fillType2=h(this.primaryColor,{h:64}),this.fillType3=h(this.secondaryColor,{h:64}),this.fillType4=h(this.primaryColor,{h:-64}),this.fillType5=h(this.secondaryColor,{h:-64}),this.fillType6=h(this.primaryColor,{h:128}),this.fillType7=h(this.secondaryColor,{h:128});for(let h=0;h<this.THEME_COLOR_LIMIT;h++)this["pie"+h]=this["cScale"+h];this.pie12=this.pie0,this.pieTitleTextSize=this.pieTitleTextSize||"25px",this.pieTitleTextColor=this.pieTitleTextColor||this.taskTextDarkColor,this.pieSectionTextSize=this.pieSectionTextSize||"17px",this.pieSectionTextColor=this.pieSectionTextColor||this.textColor,this.pieLegendTextSize=this.pieLegendTextSize||"17px",this.pieLegendTextColor=this.pieLegendTextColor||this.taskTextDarkColor,this.pieStrokeColor=this.pieStrokeColor||"black",this.pieStrokeWidth=this.pieStrokeWidth||"2px",this.pieOuterStrokeWidth=this.pieOuterStrokeWidth||"2px",this.pieOuterStrokeColor=this.pieOuterStrokeColor||"black",this.pieOpacity=this.pieOpacity||"0.7",this.quadrant1Fill=this.quadrant1Fill||this.primaryColor,this.quadrant2Fill=this.quadrant2Fill||h(this.primaryColor,{r:5,g:5,b:5}),this.quadrant3Fill=this.quadrant3Fill||h(this.primaryColor,{r:10,g:10,b:10}),this.quadrant4Fill=this.quadrant4Fill||h(this.primaryColor,{r:15,g:15,b:15}),this.quadrant1TextFill=this.quadrant1TextFill||this.primaryTextColor,this.quadrant2TextFill=this.quadrant2TextFill||h(this.primaryTextColor,{r:-5,g:-5,b:-5}),this.quadrant3TextFill=this.quadrant3TextFill||h(this.primaryTextColor,{r:-10,g:-10,b:-10}),this.quadrant4TextFill=this.quadrant4TextFill||h(this.primaryTextColor,{r:-15,g:-15,b:-15}),this.quadrantPointFill=this.quadrantPointFill||(0,m.Z)(this.quadrant1Fill)?(0,g.Z)(this.quadrant1Fill):(0,p.Z)(this.quadrant1Fill),this.quadrantPointTextFill=this.quadrantPointTextFill||this.primaryTextColor,this.quadrantXAxisTextFill=this.quadrantXAxisTextFill||this.primaryTextColor,this.quadrantYAxisTextFill=this.quadrantYAxisTextFill||this.primaryTextColor,this.quadrantInternalBorderStrokeFill=this.quadrantInternalBorderStrokeFill||this.primaryBorderColor,this.quadrantExternalBorderStrokeFill=this.quadrantExternalBorderStrokeFill||this.primaryBorderColor,this.quadrantTitleFill=this.quadrantTitleFill||this.primaryTextColor,this.xyChart={backgroundColor:(null==(t=this.xyChart)?void 0:t.backgroundColor)||this.background,titleColor:(null==(e=this.xyChart)?void 0:e.titleColor)||this.primaryTextColor,xAxisTitleColor:(null==(i=this.xyChart)?void 0:i.xAxisTitleColor)||this.primaryTextColor,xAxisLabelColor:(null==(r=this.xyChart)?void 0:r.xAxisLabelColor)||this.primaryTextColor,xAxisTickColor:(null==(n=this.xyChart)?void 0:n.xAxisTickColor)||this.primaryTextColor,xAxisLineColor:(null==(o=this.xyChart)?void 0:o.xAxisLineColor)||this.primaryTextColor,yAxisTitleColor:(null==(a=this.xyChart)?void 0:a.yAxisTitleColor)||this.primaryTextColor,yAxisLabelColor:(null==(s=this.xyChart)?void 0:s.yAxisLabelColor)||this.primaryTextColor,yAxisTickColor:(null==(l=this.xyChart)?void 0:l.yAxisTickColor)||this.primaryTextColor,yAxisLineColor:(null==(c=this.xyChart)?void 0:c.yAxisLineColor)||this.primaryTextColor,plotColorPalette:(null==(u=this.xyChart)?void 0:u.plotColorPalette)||"#EEE,#6BB8E4,#8ACB88,#C7ACD6,#E8DCC2,#FFB2A8,#FFF380,#7E8D91,#FFD8B1,#FAF3E0"},this.requirementBackground=this.requirementBackground||this.primaryColor,this.requirementBorderColor=this.requirementBorderColor||this.primaryBorderColor,this.requirementBorderSize=this.requirementBorderSize||"1",this.requirementTextColor=this.requirementTextColor||this.primaryTextColor,this.relationColor=this.relationColor||this.lineColor,this.relationLabelBackground=this.relationLabelBackground||this.edgeLabelBackground,this.relationLabelColor=this.relationLabelColor||this.actorTextColor,this.git0=(0,p.Z)(this.pie1,25)||this.primaryColor,this.git1=this.pie2||this.secondaryColor,this.git2=this.pie3||this.tertiaryColor,this.git3=this.pie4||h(this.primaryColor,{h:-30}),this.git4=this.pie5||h(this.primaryColor,{h:-60}),this.git5=this.pie6||h(this.primaryColor,{h:-90}),this.git6=this.pie7||h(this.primaryColor,{h:60}),this.git7=this.pie8||h(this.primaryColor,{h:120}),this.gitInv0=this.gitInv0||f(this.git0),this.gitInv1=this.gitInv1||f(this.git1),this.gitInv2=this.gitInv2||f(this.git2),this.gitInv3=this.gitInv3||f(this.git3),this.gitInv4=this.gitInv4||f(this.git4),this.gitInv5=this.gitInv5||f(this.git5),this.gitInv6=this.gitInv6||f(this.git6),this.gitInv7=this.gitInv7||f(this.git7),this.branchLabelColor=this.branchLabelColor||this.labelTextColor,this.gitBranchLabel0=this.branchLabelColor,this.gitBranchLabel1="white",this.gitBranchLabel2=this.branchLabelColor,this.gitBranchLabel3="white",this.gitBranchLabel4=this.branchLabelColor,this.gitBranchLabel5=this.branchLabelColor,this.gitBranchLabel6=this.branchLabelColor,this.gitBranchLabel7=this.branchLabelColor,this.tagLabelColor=this.tagLabelColor||this.primaryTextColor,this.tagLabelBackground=this.tagLabelBackground||this.primaryColor,this.tagLabelBorder=this.tagBorder||this.primaryBorderColor,this.tagLabelFontSize=this.tagLabelFontSize||"10px",this.commitLabelColor=this.commitLabelColor||this.secondaryTextColor,this.commitLabelBackground=this.commitLabelBackground||this.secondaryColor,this.commitLabelFontSize=this.commitLabelFontSize||"10px",this.attributeBackgroundColorOdd=this.attributeBackgroundColorOdd||kt,this.attributeBackgroundColorEven=this.attributeBackgroundColorEven||Tt}calculate(t){if("object"!=typeof t)return void this.updateColors();const e=Object.keys(t);e.forEach((e=>{this[e]=t[e]})),this.updateColors(),e.forEach((e=>{this[e]=t[e]}))}}const Mt={base:{getThemeVariables:t=>{const e=new wt;return e.calculate(t),e}},dark:{getThemeVariables:t=>{const e=new St;return e.calculate(t),e}},default:{getThemeVariables:Ft},forest:{getThemeVariables:t=>{const e=new At;return e.calculate(t),e}},neutral:{getThemeVariables:t=>{const e=new Lt;return e.calculate(t),e}}},Et={flowchart:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"basis",padding:15,defaultRenderer:"dagre-wrapper",wrappingWidth:200},sequence:{useMaxWidth:!0,hideUnusedParticipants:!1,activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,forceMenus:!1,bottomMarginAdj:1,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open Sans", sans-serif',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20},gantt:{useMaxWidth:!0,titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,rightPadding:75,leftPadding:75,gridLineStartPadding:35,fontSize:11,sectionFontSize:11,numberSectionStyles:4,axisFormat:"%Y-%m-%d",topAxis:!1,displayMode:"",weekday:"sunday"},journey:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},class:{useMaxWidth:!0,titleTopMargin:25,arrowMarkerAbsolute:!1,dividerMargin:10,padding:5,textHeight:10,defaultRenderer:"dagre-wrapper",htmlLabels:!1},state:{useMaxWidth:!0,titleTopMargin:25,dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,defaultRenderer:"dagre-wrapper"},er:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12},pie:{useMaxWidth:!0,textPosition:.75},quadrantChart:{useMaxWidth:!0,chartWidth:500,chartHeight:500,titleFontSize:20,titlePadding:10,quadrantPadding:5,xAxisLabelPadding:5,yAxisLabelPadding:5,xAxisLabelFontSize:16,yAxisLabelFontSize:16,quadrantLabelFontSize:16,quadrantTextTopPadding:5,pointTextPadding:5,pointLabelFontSize:12,pointRadius:5,xAxisPosition:"top",yAxisPosition:"left",quadrantInternalBorderStrokeWidth:1,quadrantExternalBorderStrokeWidth:2},xyChart:{useMaxWidth:!0,width:700,height:500,titleFontSize:20,titlePadding:10,showTitle:!0,xAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},yAxis:{$ref:"#/$defs/XYChartAxisConfig",showLabel:!0,labelFontSize:14,labelPadding:5,showTitle:!0,titleFontSize:16,titlePadding:5,showTick:!0,tickLength:5,tickWidth:2,showAxisLine:!0,axisLineWidth:2},chartOrientation:"vertical",plotReservedSpacePercent:50},requirement:{useMaxWidth:!0,rect_fill:"#f9f9f9",text_color:"#333",rect_border_size:"0.5px",rect_border_color:"#bbb",rect_min_width:200,rect_min_height:200,fontSize:14,rect_padding:10,line_height:20},mindmap:{useMaxWidth:!0,padding:10,maxNodeWidth:200},timeline:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,leftMargin:150,width:150,height:50,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,rightAngles:!1,taskFontSize:14,taskFontFamily:'"Open Sans", sans-serif',taskMargin:50,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"],disableMulticolor:!1},gitGraph:{useMaxWidth:!0,titleTopMargin:25,diagramPadding:8,nodeLabel:{width:75,height:100,x:-25,y:0},mainBranchName:"main",mainBranchOrder:0,showCommitLabel:!0,showBranches:!0,rotateCommitLabel:!0,arrowMarkerAbsolute:!1},c4:{useMaxWidth:!0,diagramMarginX:50,diagramMarginY:10,c4ShapeMargin:50,c4ShapePadding:20,width:216,height:60,boxMargin:10,c4ShapeInRow:4,nextLinePaddingX:0,c4BoundaryInRow:2,personFontSize:14,personFontFamily:'"Open Sans", sans-serif',personFontWeight:"normal",external_personFontSize:14,external_personFontFamily:'"Open Sans", sans-serif',external_personFontWeight:"normal",systemFontSize:14,systemFontFamily:'"Open Sans", sans-serif',systemFontWeight:"normal",external_systemFontSize:14,external_systemFontFamily:'"Open Sans", sans-serif',external_systemFontWeight:"normal",system_dbFontSize:14,system_dbFontFamily:'"Open Sans", sans-serif',system_dbFontWeight:"normal",external_system_dbFontSize:14,external_system_dbFontFamily:'"Open Sans", sans-serif',external_system_dbFontWeight:"normal",system_queueFontSize:14,system_queueFontFamily:'"Open Sans", sans-serif',system_queueFontWeight:"normal",external_system_queueFontSize:14,external_system_queueFontFamily:'"Open Sans", sans-serif',external_system_queueFontWeight:"normal",boundaryFontSize:14,boundaryFontFamily:'"Open Sans", sans-serif',boundaryFontWeight:"normal",messageFontSize:12,messageFontFamily:'"Open Sans", sans-serif',messageFontWeight:"normal",containerFontSize:14,containerFontFamily:'"Open Sans", sans-serif',containerFontWeight:"normal",external_containerFontSize:14,external_containerFontFamily:'"Open Sans", sans-serif',external_containerFontWeight:"normal",container_dbFontSize:14,container_dbFontFamily:'"Open Sans", sans-serif',container_dbFontWeight:"normal",external_container_dbFontSize:14,external_container_dbFontFamily:'"Open Sans", sans-serif',external_container_dbFontWeight:"normal",container_queueFontSize:14,container_queueFontFamily:'"Open Sans", sans-serif',container_queueFontWeight:"normal",external_container_queueFontSize:14,external_container_queueFontFamily:'"Open Sans", sans-serif',external_container_queueFontWeight:"normal",componentFontSize:14,componentFontFamily:'"Open Sans", sans-serif',componentFontWeight:"normal",external_componentFontSize:14,external_componentFontFamily:'"Open Sans", sans-serif',external_componentFontWeight:"normal",component_dbFontSize:14,component_dbFontFamily:'"Open Sans", sans-serif',component_dbFontWeight:"normal",external_component_dbFontSize:14,external_component_dbFontFamily:'"Open Sans", sans-serif',external_component_dbFontWeight:"normal",component_queueFontSize:14,component_queueFontFamily:'"Open Sans", sans-serif',component_queueFontWeight:"normal",external_component_queueFontSize:14,external_component_queueFontFamily:'"Open Sans", sans-serif',external_component_queueFontWeight:"normal",wrap:!0,wrapPadding:10,person_bg_color:"#08427B",person_border_color:"#073B6F",external_person_bg_color:"#686868",external_person_border_color:"#8A8A8A",system_bg_color:"#1168BD",system_border_color:"#3C7FC0",system_db_bg_color:"#1168BD",system_db_border_color:"#3C7FC0",system_queue_bg_color:"#1168BD",system_queue_border_color:"#3C7FC0",external_system_bg_color:"#999999",external_system_border_color:"#8A8A8A",external_system_db_bg_color:"#999999",external_system_db_border_color:"#8A8A8A",external_system_queue_bg_color:"#999999",external_system_queue_border_color:"#8A8A8A",container_bg_color:"#438DD5",container_border_color:"#3C7FC0",container_db_bg_color:"#438DD5",container_db_border_color:"#3C7FC0",container_queue_bg_color:"#438DD5",container_queue_border_color:"#3C7FC0",external_container_bg_color:"#B3B3B3",external_container_border_color:"#A6A6A6",external_container_db_bg_color:"#B3B3B3",external_container_db_border_color:"#A6A6A6",external_container_queue_bg_color:"#B3B3B3",external_container_queue_border_color:"#A6A6A6",component_bg_color:"#85BBF0",component_border_color:"#78A8D8",component_db_bg_color:"#85BBF0",component_db_border_color:"#78A8D8",component_queue_bg_color:"#85BBF0",component_queue_border_color:"#78A8D8",external_component_bg_color:"#CCCCCC",external_component_border_color:"#BFBFBF",external_component_db_bg_color:"#CCCCCC",external_component_db_border_color:"#BFBFBF",external_component_queue_bg_color:"#CCCCCC",external_component_queue_border_color:"#BFBFBF"},sankey:{useMaxWidth:!0,width:600,height:400,linkColor:"gradient",nodeAlignment:"justify",showValues:!0,prefix:"",suffix:""},theme:"default",maxTextSize:5e4,darkMode:!1,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,fontSize:16},Zt={...Et,deterministicIDSeed:void 0,themeCSS:void 0,themeVariables:Mt.default.getThemeVariables(),sequence:{...Et.sequence,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{...Et.gantt,tickInterval:void 0,useWidth:void 0},c4:{...Et.c4,useWidth:void 0,personFont:function(){return{fontFamily:this.personFontFamily,fontSize:this.personFontSize,fontWeight:this.personFontWeight}},external_personFont:function(){return{fontFamily:this.external_personFontFamily,fontSize:this.external_personFontSize,fontWeight:this.external_personFontWeight}},systemFont:function(){return{fontFamily:this.systemFontFamily,fontSize:this.systemFontSize,fontWeight:this.systemFontWeight}},external_systemFont:function(){return{fontFamily:this.external_systemFontFamily,fontSize:this.external_systemFontSize,fontWeight:this.external_systemFontWeight}},system_dbFont:function(){return{fontFamily:this.system_dbFontFamily,fontSize:this.system_dbFontSize,fontWeight:this.system_dbFontWeight}},external_system_dbFont:function(){return{fontFamily:this.external_system_dbFontFamily,fontSize:this.external_system_dbFontSize,fontWeight:this.external_system_dbFontWeight}},system_queueFont:function(){return{fontFamily:this.system_queueFontFamily,fontSize:this.system_queueFontSize,fontWeight:this.system_queueFontWeight}},external_system_queueFont:function(){return{fontFamily:this.external_system_queueFontFamily,fontSize:this.external_system_queueFontSize,fontWeight:this.external_system_queueFontWeight}},containerFont:function(){return{fontFamily:this.containerFontFamily,fontSize:this.containerFontSize,fontWeight:this.containerFontWeight}},external_containerFont:function(){return{fontFamily:this.external_containerFontFamily,fontSize:this.external_containerFontSize,fontWeight:this.external_containerFontWeight}},container_dbFont:function(){return{fontFamily:this.container_dbFontFamily,fontSize:this.container_dbFontSize,fontWeight:this.container_dbFontWeight}},external_container_dbFont:function(){return{fontFamily:this.external_container_dbFontFamily,fontSize:this.external_container_dbFontSize,fontWeight:this.external_container_dbFontWeight}},container_queueFont:function(){return{fontFamily:this.container_queueFontFamily,fontSize:this.container_queueFontSize,fontWeight:this.container_queueFontWeight}},external_container_queueFont:function(){return{fontFamily:this.external_container_queueFontFamily,fontSize:this.external_container_queueFontSize,fontWeight:this.external_container_queueFontWeight}},componentFont:function(){return{fontFamily:this.componentFontFamily,fontSize:this.componentFontSize,fontWeight:this.componentFontWeight}},external_componentFont:function(){return{fontFamily:this.external_componentFontFamily,fontSize:this.external_componentFontSize,fontWeight:this.external_componentFontWeight}},component_dbFont:function(){return{fontFamily:this.component_dbFontFamily,fontSize:this.component_dbFontSize,fontWeight:this.component_dbFontWeight}},external_component_dbFont:function(){return{fontFamily:this.external_component_dbFontFamily,fontSize:this.external_component_dbFontSize,fontWeight:this.external_component_dbFontWeight}},component_queueFont:function(){return{fontFamily:this.component_queueFontFamily,fontSize:this.component_queueFontSize,fontWeight:this.component_queueFontWeight}},external_component_queueFont:function(){return{fontFamily:this.external_component_queueFontFamily,fontSize:this.external_component_queueFontSize,fontWeight:this.external_component_queueFontWeight}},boundaryFont:function(){return{fontFamily:this.boundaryFontFamily,fontSize:this.boundaryFontSize,fontWeight:this.boundaryFontWeight}},messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}}},pie:{...Et.pie,useWidth:984},xyChart:{...Et.xyChart,useWidth:void 0},requirement:{...Et.requirement,useWidth:void 0},gitGraph:{...Et.gitGraph,useMaxWidth:!1},sankey:{...Et.sankey,useMaxWidth:!1}},Nt=(t,e="")=>Object.keys(t).reduce(((i,r)=>Array.isArray(t[r])?i:"object"==typeof t[r]&&null!==t[r]?[...i,e+r,...Nt(t[r],"")]:[...i,e+r]),[]),Ot=new Set(Nt(Zt,"")),It=Zt,jt=t=>{if(st.debug("sanitizeDirective called with",t),"object"==typeof t&&null!=t)if(Array.isArray(t))t.forEach((t=>jt(t)));else{for(const e of Object.keys(t)){if(st.debug("Checking key",e),e.startsWith("__")||e.includes("proto")||e.includes("constr")||!Ot.has(e)||null==t[e]){st.debug("sanitize deleting key: ",e),delete t[e];continue}if("object"==typeof t[e]){st.debug("sanitizing object",e),jt(t[e]);continue}const i=["themeCSS","fontFamily","altFontFamily"];for(const r of i)e.includes(r)&&(st.debug("sanitizing css option",e),t[e]=qt(t[e]))}if(t.themeVariables)for(const e of Object.keys(t.themeVariables)){const i=t.themeVariables[e];(null==i?void 0:i.match)&&!i.match(/^[\d "#%(),.;A-Za-z]+$/)&&(t.themeVariables[e]="")}st.debug("After sanitization",t)}},qt=t=>{let e=0,i=0;for(const r of t){if(e<i)return"{ /* ERROR: Unbalanced CSS */ }";"{"===r?e++:"}"===r&&i++}return e!==i?"{ /* ERROR: Unbalanced CSS */ }":t},Dt=/^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s,$t=/%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,zt=/\s*%%.*\n/gm;class Pt extends Error{constructor(t){super(t),this.name="UnknownDiagramError"}}const Rt={},Wt=function(t,e){t=t.replace(Dt,"").replace($t,"").replace(zt,"\n");for(const[i,{detector:r}]of Object.entries(Rt)){if(r(t,e))return i}throw new Pt(`No diagram type detected matching given configuration for text: ${t}`)},Ht=(...t)=>{for(const{id:e,detector:i,loader:r}of t)Ut(e,i,r)},Ut=(t,e,i)=>{Rt[t]?st.error(`Detector with key ${t} already exists`):Rt[t]={detector:e,loader:i},st.debug(`Detector with key ${t} added${i?" with loader":""}`)},Yt=(t,e,{depth:i=2,clobber:r=!1}={})=>{const n={depth:i,clobber:r};return Array.isArray(e)&&!Array.isArray(t)?(e.forEach((e=>Yt(t,e,n))),t):Array.isArray(e)&&Array.isArray(t)?(e.forEach((e=>{t.includes(e)||t.push(e)})),t):void 0===t||i<=0?null!=t&&"object"==typeof t&&"object"==typeof e?Object.assign(t,e):e:(void 0!==e&&"object"==typeof t&&"object"==typeof e&&Object.keys(e).forEach((n=>{"object"!=typeof e[n]||void 0!==t[n]&&"object"!=typeof t[n]?(r||"object"!=typeof t[n]&&"object"!=typeof e[n])&&(t[n]=e[n]):(void 0===t[n]&&(t[n]=Array.isArray(e[n])?[]:{}),t[n]=Yt(t[n],e[n],{depth:i-1,clobber:r}))})),t)},Vt=Yt,Gt="\u200b",Xt={curveBasis:a.$0Z,curveBasisClosed:a.Dts,curveBasisOpen:a.WQY,curveBumpX:a.qpX,curveBumpY:a.u93,curveBundle:a.tFB,curveCardinalClosed:a.OvA,curveCardinalOpen:a.dCK,curveCardinal:a.YY7,curveCatmullRomClosed:a.fGX,curveCatmullRomOpen:a.$m7,curveCatmullRom:a.zgE,curveLinear:a.c_6,curveLinearClosed:a.fxm,curveMonotoneX:a.FdL,curveMonotoneY:a.ak_,curveNatural:a.SxZ,curveStep:a.eA_,curveStepAfter:a.jsv,curveStepBefore:a.iJ},Qt=/\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi,Jt=function(t,e=null){try{const i=new RegExp(`[%]{2}(?![{]${Qt.source})(?=[}][%]{2}).*\n`,"ig");let r;t=t.trim().replace(i,"").replace(/'/gm,'"'),st.debug(`Detecting diagram directive${null!==e?" type:"+e:""} based on the text:${t}`);const n=[];for(;null!==(r=$t.exec(t));)if(r.index===$t.lastIndex&&$t.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){const t=r[1]?r[1]:r[2],e=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;n.push({type:t,args:e})}return 0===n.length?{type:t,args:null}:1===n.length?n[0]:n}catch(i){return st.error(`ERROR: ${i.message} - Unable to parse directive type: '${e}' based on the text: '${t}'`),{type:void 0,args:null}}};function Kt(t,e){if(!t)return e;const i=`curve${t.charAt(0).toUpperCase()+t.slice(1)}`;return Xt[i]??e}function te(t,e){return t&&e?Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2)):0}const ee=(t,e=2)=>{const i=Math.pow(10,e);return Math.round(t*i)/i},ie=(t,e)=>{let i,r=e;for(const n of t){if(i){const t=te(n,i);if(t<r)r-=t;else{const e=r/t;if(e<=0)return i;if(e>=1)return{x:n.x,y:n.y};if(e>0&&e<1)return{x:ee((1-e)*i.x+e*n.x,5),y:ee((1-e)*i.y+e*n.y,5)}}}i=n}throw new Error("Could not find a suitable point for the given distance")};function re(t){let e="",i="";for(const r of t)void 0!==r&&(r.startsWith("color:")||r.startsWith("text-align:")?i=i+r+";":e=e+r+";");return{style:e,labelStyle:i}}let ne=0;const oe=()=>(ne++,"id-"+Math.random().toString(36).substr(2,12)+"-"+ne);const ae=t=>function(t){let e="";const i="0123456789abcdef";for(let r=0;r<t;r++)e+=i.charAt(Math.floor(16*Math.random()));return e}(t.length),se=function(t,e){const i=e.text.replace(_t.lineBreakRegex," "),[,r]=ge(e.fontSize),n=t.append("text");n.attr("x",e.x),n.attr("y",e.y),n.style("text-anchor",e.anchor),n.style("font-family",e.fontFamily),n.style("font-size",r),n.style("font-weight",e.fontWeight),n.attr("fill",e.fill),void 0!==e.class&&n.attr("class",e.class);const o=n.append("tspan");return o.attr("x",e.x+2*e.textMargin),o.attr("fill",e.fill),o.text(i),n},le=(0,y.Z)(((t,e,i)=>{if(!t)return t;if(i=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",joinWith:"<br/>"},i),_t.lineBreakRegex.test(t))return t;const r=t.split(" "),n=[];let o="";return r.forEach(((t,a)=>{const s=ue(`${t} `,i),l=ue(o,i);if(s>e){const{hyphenatedStrings:r,remainingWord:a}=ce(t,e,"-",i);n.push(o,...r),o=a}else l+s>=e?(n.push(o),o=t):o=[o,t].filter(Boolean).join(" ");a+1===r.length&&n.push(o)})),n.filter((t=>""!==t)).join(i.joinWith)}),((t,e,i)=>`${t}${e}${i.fontSize}${i.fontWeight}${i.fontFamily}${i.joinWith}`)),ce=(0,y.Z)(((t,e,i="-",r)=>{r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);const n=[...t],o=[];let a="";return n.forEach(((t,s)=>{const l=`${a}${t}`;if(ue(l,r)>=e){const t=s+1,e=n.length===t,r=`${l}${i}`;o.push(e?l:r),a=""}else a=l})),{hyphenatedStrings:o,remainingWord:a}}),((t,e,i="-",r)=>`${t}${e}${i}${r.fontSize}${r.fontWeight}${r.fontFamily}`));function he(t,e){return de(t,e).height}function ue(t,e){return de(t,e).width}const de=(0,y.Z)(((t,e)=>{const{fontSize:i=12,fontFamily:r="Arial",fontWeight:n=400}=e;if(!t)return{width:0,height:0};const[,o]=ge(i),s=["sans-serif",r],l=t.split(_t.lineBreakRegex),c=[],h=(0,a.Ys)("body");if(!h.remove)return{width:0,height:0,lineHeight:0};const u=h.append("svg");for(const a of s){let t=0;const e={width:0,height:0,lineHeight:0};for(const i of l){const r={x:0,y:0,fill:void 0,anchor:"start",style:"#666",width:100,height:100,textMargin:0,rx:0,ry:0,valign:void 0,text:""};r.text=i||Gt;const s=se(u,r).style("font-size",o).style("font-weight",n).style("font-family",a),l=(s._groups||s)[0][0].getBBox();if(0===l.width&&0===l.height)throw new Error("svg element not in render tree");e.width=Math.round(Math.max(e.width,l.width)),t=Math.round(l.height),e.height+=t,e.lineHeight=Math.round(Math.max(e.lineHeight,t))}c.push(e)}u.remove();return c[isNaN(c[1].height)||isNaN(c[1].width)||isNaN(c[1].lineHeight)||c[0].height>c[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),((t,e)=>`${t}${e.fontSize}${e.fontWeight}${e.fontFamily}`));let fe;function pe(t){return"str"in t}const ge=t=>{if("number"==typeof t)return[t,t+"px"];const e=parseInt(t??"",10);return Number.isNaN(e)?[void 0,void 0]:t===String(e)?[e,t+"px"]:[e,t]};function me(t,e){return(0,x.Z)({},t,e)}const ye={assignWithDepth:Vt,wrapLabel:le,calculateTextHeight:he,calculateTextWidth:ue,calculateTextDimensions:de,cleanAndMerge:me,detectInit:function(t,e){const i=Jt(t,/(?:init\b)|(?:initialize\b)/);let r={};if(Array.isArray(i)){const t=i.map((t=>t.args));jt(t),r=Vt(r,[...t])}else r=i.args;if(!r)return;let n=Wt(t,e);const o="config";return void 0!==r[o]&&("flowchart-v2"===n&&(n="flowchart"),r[n]=r[o],delete r[o]),r},detectDirective:Jt,isSubstringInArray:function(t,e){for(const[i,r]of e.entries())if(r.match(t))return i;return-1},interpolateToCurve:Kt,calcLabelPosition:function(t){return 1===t.length?t[0]:function(t){let e,i=0;return t.forEach((t=>{i+=te(t,e),e=t})),ie(t,i/2)}(t)},calcCardinalityPosition:(t,e,i)=>{st.info(`our points ${JSON.stringify(e)}`),e[0]!==i&&(e=e.reverse());const r=ie(e,25),n=t?10:5,o=Math.atan2(e[0].y-r.y,e[0].x-r.x),a={x:0,y:0};return a.x=Math.sin(o)*n+(e[0].x+r.x)/2,a.y=-Math.cos(o)*n+(e[0].y+r.y)/2,a},calcTerminalLabelPosition:function(t,e,i){const r=structuredClone(i);st.info("our points",r),"start_left"!==e&&"start_right"!==e&&r.reverse();const n=ie(r,25+t),o=10+.5*t,a=Math.atan2(r[0].y-n.y,r[0].x-n.x),s={x:0,y:0};return"start_left"===e?(s.x=Math.sin(a+Math.PI)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a+Math.PI)*o+(r[0].y+n.y)/2):"end_right"===e?(s.x=Math.sin(a-Math.PI)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a-Math.PI)*o+(r[0].y+n.y)/2-5):"end_left"===e?(s.x=Math.sin(a)*o+(r[0].x+n.x)/2-5,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2-5):(s.x=Math.sin(a)*o+(r[0].x+n.x)/2,s.y=-Math.cos(a)*o+(r[0].y+n.y)/2),s},formatUrl:function(t,e){const i=t.trim();if(i)return"loose"!==e.securityLevel?(0,o.Nm)(i):i},getStylesFromArray:re,generateId:oe,random:ae,runFunc:(t,...e)=>{const i=t.split("."),r=i.length-1,n=i[r];let o=window;for(let a=0;a<r;a++)if(o=o[i[a]],!o)return void st.error(`Function name: ${t} not found in window`);o[n](...e)},entityDecode:function(t){return fe=fe||document.createElement("div"),t=escape(t).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),fe.innerHTML=t,unescape(fe.textContent)},insertTitle:(t,e,i,r)=>{var n;if(!r)return;const o=null==(n=t.node())?void 0:n.getBBox();o&&t.append("text").text(r).attr("x",o.x+o.width/2).attr("y",-i).attr("class",e)},parseFontSize:ge,InitIDGenerator:class{constructor(t=!1,e){this.count=0,this.count=e?e.length:0,this.next=t?()=>this.count++:()=>Date.now()}}},xe="10.6.1",Ce=Object.freeze(It);let be,_e=Vt({},Ce),ve=[],ke=Vt({},Ce);const Te=(t,e)=>{let i=Vt({},t),r={};for(const n of e)Fe(n),r=Vt(r,n);if(i=Vt(i,r),r.theme&&r.theme in Mt){const t=Vt({},be),e=Vt(t.themeVariables||{},r.themeVariables);i.theme&&i.theme in Mt&&(i.themeVariables=Mt[i.theme].getThemeVariables(e))}return ke=i,Ze(ke),ke},we=()=>Vt({},_e),Se=t=>(Ze(t),Vt(ke,t),Be()),Be=()=>Vt({},ke),Fe=t=>{t&&(["secure",..._e.secure??[]].forEach((e=>{Object.hasOwn(t,e)&&(st.debug(`Denied attempt to modify a secure key ${e}`,t[e]),delete t[e])})),Object.keys(t).forEach((e=>{e.startsWith("__")&&delete t[e]})),Object.keys(t).forEach((e=>{"string"==typeof t[e]&&(t[e].includes("<")||t[e].includes(">")||t[e].includes("url(data:"))&&delete t[e],"object"==typeof t[e]&&Fe(t[e])})))},Ae=t=>{jt(t),!t.fontFamily||t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily}),ve.push(t),Te(_e,ve)},Le=(t=_e)=>{ve=[],Te(t,ve)},Me={LAZY_LOAD_DEPRECATED:"The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead."},Ee={},Ze=t=>{var e;t&&((t.lazyLoadedDiagrams||t.loadExternalDiagramsAtStartup)&&(Ee[e="LAZY_LOAD_DEPRECATED"]||(st.warn(Me[e]),Ee[e]=!0)))},Ne={id:"c4",detector:t=>/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(t),loader:async()=>{const{diagram:t}=await i.e(132).then(i.bind(i,70132));return{id:"c4",diagram:t}}},Oe="flowchart",Ie={id:Oe,detector:(t,e)=>{var i,r;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&/^\s*graph/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(8955),i.e(1763)]).then(i.bind(i,1763));return{id:Oe,diagram:t}}},je="flowchart-v2",qe={id:je,detector:(t,e)=>{var i,r,n;return"dagre-d3"!==(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer)&&"elk"!==(null==(r=null==e?void 0:e.flowchart)?void 0:r.defaultRenderer)&&(!(!/^\s*graph/.test(t)||"dagre-wrapper"!==(null==(n=null==e?void 0:e.flowchart)?void 0:n.defaultRenderer))||/^\s*flowchart/.test(t))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(8955),i.e(9893)]).then(i.bind(i,19893));return{id:je,diagram:t}}},De={id:"er",detector:t=>/^\s*erDiagram/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3343)]).then(i.bind(i,13343));return{id:"er",diagram:t}}},$e="gitGraph",ze={id:$e,detector:t=>/^\s*gitGraph/.test(t),loader:async()=>{const{diagram:t}=await i.e(3619).then(i.bind(i,13619));return{id:$e,diagram:t}}},Pe="gantt",Re={id:Pe,detector:t=>/^\s*gantt/.test(t),loader:async()=>{const{diagram:t}=await i.e(8016).then(i.bind(i,88016));return{id:Pe,diagram:t}}},We="info",He={id:We,detector:t=>/^\s*info/.test(t),loader:async()=>{const{diagram:t}=await i.e(5326).then(i.bind(i,45326));return{id:We,diagram:t}}},Ue={id:"pie",detector:t=>/^\s*pie/.test(t),loader:async()=>{const{diagram:t}=await i.e(2661).then(i.bind(i,12661));return{id:"pie",diagram:t}}},Ye="quadrantChart",Ve={id:Ye,detector:t=>/^\s*quadrantChart/.test(t),loader:async()=>{const{diagram:t}=await i.e(6648).then(i.bind(i,46648));return{id:Ye,diagram:t}}},Ge="xychart",Xe={id:Ge,detector:t=>/^\s*xychart-beta/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(3076),i.e(2693)]).then(i.bind(i,32693));return{id:Ge,diagram:t}}},Qe="requirement",Je={id:Qe,detector:t=>/^\s*requirement(Diagram)?/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(6985)]).then(i.bind(i,66985));return{id:Qe,diagram:t}}},Ke="sequence",ti={id:Ke,detector:t=>/^\s*sequenceDiagram/.test(t),loader:async()=>{const{diagram:t}=await i.e(5790).then(i.bind(i,25790));return{id:Ke,diagram:t}}},ei="class",ii={id:ei,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer)&&/^\s*classDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(4706),i.e(109)]).then(i.bind(i,109));return{id:ei,diagram:t}}},ri="classDiagram",ni={id:ri,detector:(t,e)=>{var i;return!(!/^\s*classDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.class)?void 0:i.defaultRenderer))||/^\s*classDiagram-v2/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(4706),i.e(6255)]).then(i.bind(i,56255));return{id:ri,diagram:t}}},oi="state",ai={id:oi,detector:(t,e)=>{var i;return"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer)&&/^\s*stateDiagram/.test(t)},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(1504),i.e(2696)]).then(i.bind(i,72696));return{id:oi,diagram:t}}},si="stateDiagram",li={id:si,detector:(t,e)=>{var i;return!!/^\s*stateDiagram-v2/.test(t)||!(!/^\s*stateDiagram/.test(t)||"dagre-wrapper"!==(null==(i=null==e?void 0:e.state)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(1644),i.e(3076),i.e(5269),i.e(7936),i.e(1504),i.e(5943)]).then(i.bind(i,45943));return{id:si,diagram:t}}},ci="journey",hi={id:ci,detector:t=>/^\s*journey/.test(t),loader:async()=>{const{diagram:t}=await i.e(2183).then(i.bind(i,52183));return{id:ci,diagram:t}}},ui=function(t,e,i,r){const n=function(t,e,i){let r=new Map;return i?(r.set("width","100%"),r.set("style",`max-width: ${e}px;`)):(r.set("height",t),r.set("width",e)),r}(e,i,r);!function(t,e){for(let i of e)t.attr(i[0],i[1])}(t,n)},di=function(t,e,i,r){const n=e.node().getBBox(),o=n.width,a=n.height;st.info(`SVG bounds: ${o}x${a}`,n);let s=0,l=0;st.info(`Graph bounds: ${s}x${l}`,t),s=o+2*i,l=a+2*i,st.info(`Calculated bounds: ${s}x${l}`),ui(e,l,s,r);const c=`${n.x-i} ${n.y-i} ${n.width+2*i} ${n.height+2*i}`;e.attr("viewBox",c)},fi={},pi=(t,e,i)=>{let r="";return t in fi&&fi[t]?r=fi[t](i):st.warn(`No theme found for ${t}`),` & {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n fill: ${i.textColor}\n }\n\n /* Classes common for multiple diagrams */\n\n & .error-icon {\n fill: ${i.errorBkgColor};\n }\n & .error-text {\n fill: ${i.errorTextColor};\n stroke: ${i.errorTextColor};\n }\n\n & .edge-thickness-normal {\n stroke-width: 2px;\n }\n & .edge-thickness-thick {\n stroke-width: 3.5px\n }\n & .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n & .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n & .marker {\n fill: ${i.lineColor};\n stroke: ${i.lineColor};\n }\n & .marker.cross {\n stroke: ${i.lineColor};\n }\n\n & svg {\n font-family: ${i.fontFamily};\n font-size: ${i.fontSize};\n }\n\n ${r}\n\n ${e}\n`};let gi="",mi="",yi="";const xi=t=>ft(t,Be()),Ci=()=>{gi="",yi="",mi=""},bi=t=>{gi=xi(t).replace(/^\s+/g,"")},_i=()=>gi,vi=t=>{yi=xi(t).replace(/\n\s+/g,"\n")},ki=()=>yi,Ti=t=>{mi=xi(t)},wi=()=>mi,Si=Object.freeze(Object.defineProperty({__proto__:null,clear:Ci,getAccDescription:ki,getAccTitle:_i,getDiagramTitle:wi,setAccDescription:vi,setAccTitle:bi,setDiagramTitle:Ti},Symbol.toStringTag,{value:"Module"})),Bi=st,Fi=lt,Ai=Be,Li=Se,Mi=Ce,Ei=t=>ft(t,Ai()),Zi=di,Ni={},Oi=(t,e,i)=>{var r,n,o;if(Ni[t])throw new Error(`Diagram ${t} already registered.`);Ni[t]=e,i&&Ut(t,i),n=t,void 0!==(o=e.styles)&&(fi[n]=o),null==(r=e.injectUtils)||r.call(e,Bi,Fi,Ai,Ei,Zi,Si,(()=>{}))},Ii=t=>{if(t in Ni)return Ni[t];throw new ji(t)};class ji extends Error{constructor(t){super(`Diagram ${t} not found.`)}}const qi=t=>{var e;const{securityLevel:i}=Ai();let r=(0,a.Ys)("body");if("sandbox"===i){const i=(null==(e=(0,a.Ys)(`#i${t}`).node())?void 0:e.contentDocument)??document;r=(0,a.Ys)(i.body)}return r.select(`#${t}`)},Di={draw:(t,e,i)=>{st.debug("renering svg for syntax error\n");const r=qi(e);r.attr("viewBox","0 0 2412 512"),ui(r,100,512,!0);const n=r.append("g");n.append("path").attr("class","error-icon").attr("d","m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"),n.append("path").attr("class","error-icon").attr("d","m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"),n.append("path").attr("class","error-icon").attr("d","m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"),n.append("path").attr("class","error-icon").attr("d","m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"),n.append("path").attr("class","error-icon").attr("d","m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"),n.append("path").attr("class","error-icon").attr("d","m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"),n.append("text").attr("class","error-text").attr("x",1440).attr("y",250).attr("font-size","150px").style("text-anchor","middle").text("Syntax error in text"),n.append("text").attr("class","error-text").attr("x",1250).attr("y",400).attr("font-size","100px").style("text-anchor","middle").text(`mermaid version ${i}`)}},$i=Di,zi={db:{},renderer:Di,parser:{parser:{yy:{}},parse:()=>{}}},Pi="flowchart-elk",Ri={id:Pi,detector:(t,e)=>{var i;return!!(/^\s*flowchart-elk/.test(t)||/^\s*flowchart|graph/.test(t)&&"elk"===(null==(i=null==e?void 0:e.flowchart)?void 0:i.defaultRenderer))},loader:async()=>{const{diagram:t}=await Promise.all([i.e(3076),i.e(5269),i.e(8955),i.e(4238)]).then(i.bind(i,4238));return{id:Pi,diagram:t}}},Wi="timeline",Hi={id:Wi,detector:t=>/^\s*timeline/.test(t),loader:async()=>{const{diagram:t}=await i.e(2700).then(i.bind(i,12700));return{id:Wi,diagram:t}}},Ui="mindmap",Yi={id:Ui,detector:t=>/^\s*mindmap/.test(t),loader:async()=>{const{diagram:t}=await Promise.all([i.e(3076),i.e(9138)]).then(i.bind(i,69138));return{id:Ui,diagram:t}}},Vi="sankey",Gi={id:Vi,detector:t=>/^\s*sankey-beta/.test(t),loader:async()=>{const{diagram:t}=await i.e(240).then(i.bind(i,10240));return{id:Vi,diagram:t}}};let Xi=!1;const Qi=()=>{Xi||(Xi=!0,Oi("error",zi,(t=>"error"===t.toLowerCase().trim())),Oi("---",{db:{clear:()=>{}},styles:{},renderer:{draw:()=>{}},parser:{parser:{yy:{}},parse:()=>{throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks")}},init:()=>null},(t=>t.toLowerCase().trimStart().startsWith("---"))),Ht(Ne,ni,ii,De,Re,He,Ue,Je,ti,Ri,qe,Ie,Yi,Hi,ze,li,ai,hi,Ve,Gi,Xe))};class Ji{constructor(t,e={}){this.text=t,this.metadata=e,this.type="graph",this.text+="\n";const i=Be();try{this.type=Wt(t,i)}catch(n){this.type="error",this.detectError=n}const r=Ii(this.type);st.debug("Type "+this.type),this.db=r.db,this.renderer=r.renderer,this.parser=r.parser,this.parser.parser.yy=this.db,this.init=r.init,this.parse()}parse(){var t,e,i,r,n;if(this.detectError)throw this.detectError;null==(e=(t=this.db).clear)||e.call(t);const o=Be();null==(i=this.init)||i.call(this,o),this.metadata.title&&(null==(n=(r=this.db).setDiagramTitle)||n.call(r,this.metadata.title)),this.parser.parse(this.text)}async render(t,e){await this.renderer.draw(this.text,t,e,this)}getParser(){return this.parser}getType(){return this.type}}const Ki=async(t,e={})=>{const i=Wt(t,Be());try{Ii(i)}catch(r){const t=Rt[i].loader;if(!t)throw new Pt(`Diagram ${i} not found.`);const{id:e,diagram:n}=await t();Oi(e,n)}return new Ji(t,e)};let tr=[];const er=t=>{tr.push(t)},ir="graphics-document document";const rr=t=>t.replace(/^\s*%%(?!{)[^\n]+\n?/gm,"").trimStart();function nr(t){return null==t}var or={isNothing:nr,isObject:function(t){return"object"==typeof t&&null!==t},toArray:function(t){return Array.isArray(t)?t:nr(t)?[]:[t]},repeat:function(t,e){var i,r="";for(i=0;i<e;i+=1)r+=t;return r},isNegativeZero:function(t){return 0===t&&Number.NEGATIVE_INFINITY===1/t},extend:function(t,e){var i,r,n,o;if(e)for(i=0,r=(o=Object.keys(e)).length;i<r;i+=1)t[n=o[i]]=e[n];return t}};function ar(t,e){var i="",r=t.reason||"(unknown reason)";return t.mark?(t.mark.name&&(i+='in "'+t.mark.name+'" '),i+="("+(t.mark.line+1)+":"+(t.mark.column+1)+")",!e&&t.mark.snippet&&(i+="\n\n"+t.mark.snippet),r+" "+i):r}function sr(t,e){Error.call(this),this.name="YAMLException",this.reason=t,this.mark=e,this.message=ar(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||""}sr.prototype=Object.create(Error.prototype),sr.prototype.constructor=sr,sr.prototype.toString=function(t){return this.name+": "+ar(this,t)};var lr=sr;function cr(t,e,i,r,n){var o="",a="",s=Math.floor(n/2)-1;return r-e>s&&(e=r-s+(o=" ... ").length),i-r>s&&(i=r+s-(a=" ...").length),{str:o+t.slice(e,i).replace(/\t/g,"\u2192")+a,pos:r-e+o.length}}function hr(t,e){return or.repeat(" ",e-t.length)+t}var ur=function(t,e){if(e=Object.create(e||null),!t.buffer)return null;e.maxLength||(e.maxLength=79),"number"!=typeof e.indent&&(e.indent=1),"number"!=typeof e.linesBefore&&(e.linesBefore=3),"number"!=typeof e.linesAfter&&(e.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,n=[0],o=[],a=-1;i=r.exec(t.buffer);)o.push(i.index),n.push(i.index+i[0].length),t.position<=i.index&&a<0&&(a=n.length-2);a<0&&(a=n.length-1);var s,l,c="",h=Math.min(t.line+e.linesAfter,o.length).toString().length,u=e.maxLength-(e.indent+h+3);for(s=1;s<=e.linesBefore&&!(a-s<0);s++)l=cr(t.buffer,n[a-s],o[a-s],t.position-(n[a]-n[a-s]),u),c=or.repeat(" ",e.indent)+hr((t.line-s+1).toString(),h)+" | "+l.str+"\n"+c;for(l=cr(t.buffer,n[a],o[a],t.position,u),c+=or.repeat(" ",e.indent)+hr((t.line+1).toString(),h)+" | "+l.str+"\n",c+=or.repeat("-",e.indent+h+3+l.pos)+"^\n",s=1;s<=e.linesAfter&&!(a+s>=o.length);s++)l=cr(t.buffer,n[a+s],o[a+s],t.position-(n[a]-n[a+s]),u),c+=or.repeat(" ",e.indent)+hr((t.line+s+1).toString(),h)+" | "+l.str+"\n";return c.replace(/\n$/,"")},dr=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],fr=["scalar","sequence","mapping"];var pr=function(t,e){var i,r;if(e=e||{},Object.keys(e).forEach((function(e){if(-1===dr.indexOf(e))throw new lr('Unknown option "'+e+'" is met in definition of "'+t+'" YAML type.')})),this.options=e,this.tag=t,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.representName=e.representName||null,this.defaultStyle=e.defaultStyle||null,this.multi=e.multi||!1,this.styleAliases=(i=e.styleAliases||null,r={},null!==i&&Object.keys(i).forEach((function(t){i[t].forEach((function(e){r[String(e)]=t}))})),r),-1===fr.indexOf(this.kind))throw new lr('Unknown kind "'+this.kind+'" is specified for "'+t+'" YAML type.')};function gr(t,e){var i=[];return t[e].forEach((function(t){var e=i.length;i.forEach((function(i,r){i.tag===t.tag&&i.kind===t.kind&&i.multi===t.multi&&(e=r)})),i[e]=t})),i}function mr(t){return this.extend(t)}mr.prototype.extend=function(t){var e=[],i=[];if(t instanceof pr)i.push(t);else if(Array.isArray(t))i=i.concat(t);else{if(!t||!Array.isArray(t.implicit)&&!Array.isArray(t.explicit))throw new lr("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");t.implicit&&(e=e.concat(t.implicit)),t.explicit&&(i=i.concat(t.explicit))}e.forEach((function(t){if(!(t instanceof pr))throw new lr("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&"scalar"!==t.loadKind)throw new lr("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new lr("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),i.forEach((function(t){if(!(t instanceof pr))throw new lr("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var r=Object.create(mr.prototype);return r.implicit=(this.implicit||[]).concat(e),r.explicit=(this.explicit||[]).concat(i),r.compiledImplicit=gr(r,"implicit"),r.compiledExplicit=gr(r,"explicit"),r.compiledTypeMap=function(){var t,e,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function r(t){t.multi?(i.multi[t.kind].push(t),i.multi.fallback.push(t)):i[t.kind][t.tag]=i.fallback[t.tag]=t}for(t=0,e=arguments.length;t<e;t+=1)arguments[t].forEach(r);return i}(r.compiledImplicit,r.compiledExplicit),r};var yr=new mr({explicit:[new pr("tag:yaml.org,2002:str",{kind:"scalar",construct:function(t){return null!==t?t:""}}),new pr("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(t){return null!==t?t:[]}}),new pr("tag:yaml.org,2002:map",{kind:"mapping",construct:function(t){return null!==t?t:{}}})]});var xr=new pr("tag:yaml.org,2002:null",{kind:"scalar",resolve:function(t){if(null===t)return!0;var e=t.length;return 1===e&&"~"===t||4===e&&("null"===t||"Null"===t||"NULL"===t)},construct:function(){return null},predicate:function(t){return null===t},represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});var Cr=new pr("tag:yaml.org,2002:bool",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e=t.length;return 4===e&&("true"===t||"True"===t||"TRUE"===t)||5===e&&("false"===t||"False"===t||"FALSE"===t)},construct:function(t){return"true"===t||"True"===t||"TRUE"===t},predicate:function(t){return"[object Boolean]"===Object.prototype.toString.call(t)},represent:{lowercase:function(t){return t?"true":"false"},uppercase:function(t){return t?"TRUE":"FALSE"},camelcase:function(t){return t?"True":"False"}},defaultStyle:"lowercase"});function br(t){return 48<=t&&t<=55}function _r(t){return 48<=t&&t<=57}var vr=new pr("tag:yaml.org,2002:int",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=t.length,n=0,o=!1;if(!r)return!1;if("-"!==(e=t[n])&&"+"!==e||(e=t[++n]),"0"===e){if(n+1===r)return!0;if("b"===(e=t[++n])){for(n++;n<r;n++)if("_"!==(e=t[n])){if("0"!==e&&"1"!==e)return!1;o=!0}return o&&"_"!==e}if("x"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!(48<=(i=t.charCodeAt(n))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;o=!0}return o&&"_"!==e}if("o"===e){for(n++;n<r;n++)if("_"!==(e=t[n])){if(!br(t.charCodeAt(n)))return!1;o=!0}return o&&"_"!==e}}if("_"===e)return!1;for(;n<r;n++)if("_"!==(e=t[n])){if(!_r(t.charCodeAt(n)))return!1;o=!0}return!(!o||"_"===e)},construct:function(t){var e,i=t,r=1;if(-1!==i.indexOf("_")&&(i=i.replace(/_/g,"")),"-"!==(e=i[0])&&"+"!==e||("-"===e&&(r=-1),e=(i=i.slice(1))[0]),"0"===i)return 0;if("0"===e){if("b"===i[1])return r*parseInt(i.slice(2),2);if("x"===i[1])return r*parseInt(i.slice(2),16);if("o"===i[1])return r*parseInt(i.slice(2),8)}return r*parseInt(i,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&t%1==0&&!or.isNegativeZero(t)},represent:{binary:function(t){return t>=0?"0b"+t.toString(2):"-0b"+t.toString(2).slice(1)},octal:function(t){return t>=0?"0o"+t.toString(8):"-0o"+t.toString(8).slice(1)},decimal:function(t){return t.toString(10)},hexadecimal:function(t){return t>=0?"0x"+t.toString(16).toUpperCase():"-0x"+t.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),kr=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var Tr=/^[-+]?[0-9]+e/;var wr=new pr("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(t){return null!==t&&!(!kr.test(t)||"_"===t[t.length-1])},construct:function(t){var e,i;return i="-"===(e=t.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(e[0])>=0&&(e=e.slice(1)),".inf"===e?1===i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===e?NaN:i*parseFloat(e,10)},predicate:function(t){return"[object Number]"===Object.prototype.toString.call(t)&&(t%1!=0||or.isNegativeZero(t))},represent:function(t,e){var i;if(isNaN(t))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===t)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===t)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(or.isNegativeZero(t))return"-0.0";return i=t.toString(10),Tr.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),Sr=yr.extend({implicit:[xr,Cr,vr,wr]}),Br=Sr,Fr=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Ar=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var Lr=new pr("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(t){return null!==t&&(null!==Fr.exec(t)||null!==Ar.exec(t))},construct:function(t){var e,i,r,n,o,a,s,l,c=0,h=null;if(null===(e=Fr.exec(t))&&(e=Ar.exec(t)),null===e)throw new Error("Date resolve error");if(i=+e[1],r=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(i,r,n));if(o=+e[4],a=+e[5],s=+e[6],e[7]){for(c=e[7].slice(0,3);c.length<3;)c+="0";c=+c}return e[9]&&(h=6e4*(60*+e[10]+ +(e[11]||0)),"-"===e[9]&&(h=-h)),l=new Date(Date.UTC(i,r,n,o,a,s,c)),h&&l.setTime(l.getTime()-h),l},instanceOf:Date,represent:function(t){return t.toISOString()}});var Mr=new pr("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(t){return"<<"===t||null===t}}),Er="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var Zr=new pr("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(t){if(null===t)return!1;var e,i,r=0,n=t.length,o=Er;for(i=0;i<n;i++)if(!((e=o.indexOf(t.charAt(i)))>64)){if(e<0)return!1;r+=6}return r%8==0},construct:function(t){var e,i,r=t.replace(/[\r\n=]/g,""),n=r.length,o=Er,a=0,s=[];for(e=0;e<n;e++)e%4==0&&e&&(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)),a=a<<6|o.indexOf(r.charAt(e));return 0===(i=n%4*6)?(s.push(a>>16&255),s.push(a>>8&255),s.push(255&a)):18===i?(s.push(a>>10&255),s.push(a>>2&255)):12===i&&s.push(a>>4&255),new Uint8Array(s)},predicate:function(t){return"[object Uint8Array]"===Object.prototype.toString.call(t)},represent:function(t){var e,i,r="",n=0,o=t.length,a=Er;for(e=0;e<o;e++)e%3==0&&e&&(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]),n=(n<<8)+t[e];return 0===(i=o%3)?(r+=a[n>>18&63],r+=a[n>>12&63],r+=a[n>>6&63],r+=a[63&n]):2===i?(r+=a[n>>10&63],r+=a[n>>4&63],r+=a[n<<2&63],r+=a[64]):1===i&&(r+=a[n>>2&63],r+=a[n<<4&63],r+=a[64],r+=a[64]),r}}),Nr=Object.prototype.hasOwnProperty,Or=Object.prototype.toString;var Ir=new pr("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=[],s=t;for(e=0,i=s.length;e<i;e+=1){if(r=s[e],o=!1,"[object Object]"!==Or.call(r))return!1;for(n in r)if(Nr.call(r,n)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==a.indexOf(n))return!1;a.push(n)}return!0},construct:function(t){return null!==t?t:[]}}),jr=Object.prototype.toString;var qr=new pr("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:function(t){if(null===t)return!0;var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1){if(r=a[e],"[object Object]"!==jr.call(r))return!1;if(1!==(n=Object.keys(r)).length)return!1;o[e]=[n[0],r[n[0]]]}return!0},construct:function(t){if(null===t)return[];var e,i,r,n,o,a=t;for(o=new Array(a.length),e=0,i=a.length;e<i;e+=1)r=a[e],n=Object.keys(r),o[e]=[n[0],r[n[0]]];return o}}),Dr=Object.prototype.hasOwnProperty;var $r=new pr("tag:yaml.org,2002:set",{kind:"mapping",resolve:function(t){if(null===t)return!0;var e,i=t;for(e in i)if(Dr.call(i,e)&&null!==i[e])return!1;return!0},construct:function(t){return null!==t?t:{}}}),zr=Br.extend({implicit:[Lr,Mr],explicit:[Zr,Ir,qr,$r]}),Pr=Object.prototype.hasOwnProperty,Rr=1,Wr=2,Hr=3,Ur=4,Yr=1,Vr=2,Gr=3,Xr=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,Qr=/[\x85\u2028\u2029]/,Jr=/[,\[\]\{\}]/,Kr=/^(?:!|!!|![a-z\-]+!)$/i,tn=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function en(t){return Object.prototype.toString.call(t)}function rn(t){return 10===t||13===t}function nn(t){return 9===t||32===t}function on(t){return 9===t||32===t||10===t||13===t}function an(t){return 44===t||91===t||93===t||123===t||125===t}function sn(t){var e;return 48<=t&&t<=57?t-48:97<=(e=32|t)&&e<=102?e-97+10:-1}function ln(t){return 48===t?"\0":97===t?"\x07":98===t?"\b":116===t||9===t?"\t":110===t?"\n":118===t?"\v":102===t?"\f":114===t?"\r":101===t?"\x1b":32===t?" ":34===t?'"':47===t?"/":92===t?"\\":78===t?"\x85":95===t?"\xa0":76===t?"\u2028":80===t?"\u2029":""}function cn(t){return t<=65535?String.fromCharCode(t):String.fromCharCode(55296+(t-65536>>10),56320+(t-65536&1023))}for(var hn=new Array(256),un=new Array(256),dn=0;dn<256;dn++)hn[dn]=ln(dn)?1:0,un[dn]=ln(dn);function fn(t,e){this.input=t,this.filename=e.filename||null,this.schema=e.schema||zr,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=t.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function pn(t,e){var i={name:t.filename,buffer:t.input.slice(0,-1),position:t.position,line:t.line,column:t.position-t.lineStart};return i.snippet=ur(i),new lr(e,i)}function gn(t,e){throw pn(t,e)}function mn(t,e){t.onWarning&&t.onWarning.call(null,pn(t,e))}var yn={YAML:function(t,e,i){var r,n,o;null!==t.version&&gn(t,"duplication of %YAML directive"),1!==i.length&&gn(t,"YAML directive accepts exactly one argument"),null===(r=/^([0-9]+)\.([0-9]+)$/.exec(i[0]))&&gn(t,"ill-formed argument of the YAML directive"),n=parseInt(r[1],10),o=parseInt(r[2],10),1!==n&&gn(t,"unacceptable YAML version of the document"),t.version=i[0],t.checkLineBreaks=o<2,1!==o&&2!==o&&mn(t,"unsupported YAML version of the document")},TAG:function(t,e,i){var r,n;2!==i.length&&gn(t,"TAG directive accepts exactly two arguments"),r=i[0],n=i[1],Kr.test(r)||gn(t,"ill-formed tag handle (first argument) of the TAG directive"),Pr.call(t.tagMap,r)&&gn(t,'there is a previously declared suffix for "'+r+'" tag handle'),tn.test(n)||gn(t,"ill-formed tag prefix (second argument) of the TAG directive");try{n=decodeURIComponent(n)}catch(o){gn(t,"tag prefix is malformed: "+n)}t.tagMap[r]=n}};function xn(t,e,i,r){var n,o,a,s;if(e<i){if(s=t.input.slice(e,i),r)for(n=0,o=s.length;n<o;n+=1)9===(a=s.charCodeAt(n))||32<=a&&a<=1114111||gn(t,"expected valid JSON character");else Xr.test(s)&&gn(t,"the stream contains non-printable characters");t.result+=s}}function Cn(t,e,i,r){var n,o,a,s;for(or.isObject(i)||gn(t,"cannot merge mappings; the provided source object is unacceptable"),a=0,s=(n=Object.keys(i)).length;a<s;a+=1)o=n[a],Pr.call(e,o)||(e[o]=i[o],r[o]=!0)}function bn(t,e,i,r,n,o,a,s,l){var c,h;if(Array.isArray(n))for(c=0,h=(n=Array.prototype.slice.call(n)).length;c<h;c+=1)Array.isArray(n[c])&&gn(t,"nested arrays are not supported inside keys"),"object"==typeof n&&"[object Object]"===en(n[c])&&(n[c]="[object Object]");if("object"==typeof n&&"[object Object]"===en(n)&&(n="[object Object]"),n=String(n),null===e&&(e={}),"tag:yaml.org,2002:merge"===r)if(Array.isArray(o))for(c=0,h=o.length;c<h;c+=1)Cn(t,e,o[c],i);else Cn(t,e,o,i);else t.json||Pr.call(i,n)||!Pr.call(e,n)||(t.line=a||t.line,t.lineStart=s||t.lineStart,t.position=l||t.position,gn(t,"duplicated mapping key")),"__proto__"===n?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):e[n]=o,delete i[n];return e}function _n(t){var e;10===(e=t.input.charCodeAt(t.position))?t.position++:13===e?(t.position++,10===t.input.charCodeAt(t.position)&&t.position++):gn(t,"a line break is expected"),t.line+=1,t.lineStart=t.position,t.firstTabInLine=-1}function vn(t,e,i){for(var r=0,n=t.input.charCodeAt(t.position);0!==n;){for(;nn(n);)9===n&&-1===t.firstTabInLine&&(t.firstTabInLine=t.position),n=t.input.charCodeAt(++t.position);if(e&&35===n)do{n=t.input.charCodeAt(++t.position)}while(10!==n&&13!==n&&0!==n);if(!rn(n))break;for(_n(t),n=t.input.charCodeAt(t.position),r++,t.lineIndent=0;32===n;)t.lineIndent++,n=t.input.charCodeAt(++t.position)}return-1!==i&&0!==r&&t.lineIndent<i&&mn(t,"deficient indentation"),r}function kn(t){var e,i=t.position;return!(45!==(e=t.input.charCodeAt(i))&&46!==e||e!==t.input.charCodeAt(i+1)||e!==t.input.charCodeAt(i+2)||(i+=3,0!==(e=t.input.charCodeAt(i))&&!on(e)))}function Tn(t,e){1===e?t.result+=" ":e>1&&(t.result+=or.repeat("\n",e-1))}function wn(t,e){var i,r,n=t.tag,o=t.anchor,a=[],s=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=a),r=t.input.charCodeAt(t.position);0!==r&&(-1!==t.firstTabInLine&&(t.position=t.firstTabInLine,gn(t,"tab characters must not be used in indentation")),45===r)&&on(t.input.charCodeAt(t.position+1));)if(s=!0,t.position++,vn(t,!0,-1)&&t.lineIndent<=e)a.push(null),r=t.input.charCodeAt(t.position);else if(i=t.line,Fn(t,e,Hr,!1,!0),a.push(t.result),vn(t,!0,-1),r=t.input.charCodeAt(t.position),(t.line===i||t.lineIndent>e)&&0!==r)gn(t,"bad indentation of a sequence entry");else if(t.lineIndent<e)break;return!!s&&(t.tag=n,t.anchor=o,t.kind="sequence",t.result=a,!0)}function Sn(t){var e,i,r,n,o=!1,a=!1;if(33!==(n=t.input.charCodeAt(t.position)))return!1;if(null!==t.tag&&gn(t,"duplication of a tag property"),60===(n=t.input.charCodeAt(++t.position))?(o=!0,n=t.input.charCodeAt(++t.position)):33===n?(a=!0,i="!!",n=t.input.charCodeAt(++t.position)):i="!",e=t.position,o){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&62!==n);t.position<t.length?(r=t.input.slice(e,t.position),n=t.input.charCodeAt(++t.position)):gn(t,"unexpected end of the stream within a verbatim tag")}else{for(;0!==n&&!on(n);)33===n&&(a?gn(t,"tag suffix cannot contain exclamation marks"):(i=t.input.slice(e-1,t.position+1),Kr.test(i)||gn(t,"named tag handle cannot contain such characters"),a=!0,e=t.position+1)),n=t.input.charCodeAt(++t.position);r=t.input.slice(e,t.position),Jr.test(r)&&gn(t,"tag suffix cannot contain flow indicator characters")}r&&!tn.test(r)&&gn(t,"tag name cannot contain such characters: "+r);try{r=decodeURIComponent(r)}catch(s){gn(t,"tag name is malformed: "+r)}return o?t.tag=r:Pr.call(t.tagMap,i)?t.tag=t.tagMap[i]+r:"!"===i?t.tag="!"+r:"!!"===i?t.tag="tag:yaml.org,2002:"+r:gn(t,'undeclared tag handle "'+i+'"'),!0}function Bn(t){var e,i;if(38!==(i=t.input.charCodeAt(t.position)))return!1;for(null!==t.anchor&&gn(t,"duplication of an anchor property"),i=t.input.charCodeAt(++t.position),e=t.position;0!==i&&!on(i)&&!an(i);)i=t.input.charCodeAt(++t.position);return t.position===e&&gn(t,"name of an anchor node must contain at least one character"),t.anchor=t.input.slice(e,t.position),!0}function Fn(t,e,i,r,n){var o,a,s,l,c,h,u,d,f,p=1,g=!1,m=!1;if(null!==t.listener&&t.listener("open",t),t.tag=null,t.anchor=null,t.kind=null,t.result=null,o=a=s=Ur===i||Hr===i,r&&vn(t,!0,-1)&&(g=!0,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)),1===p)for(;Sn(t)||Bn(t);)vn(t,!0,-1)?(g=!0,s=o,t.lineIndent>e?p=1:t.lineIndent===e?p=0:t.lineIndent<e&&(p=-1)):s=!1;if(s&&(s=g||n),1!==p&&Ur!==i||(d=Rr===i||Wr===i?e:e+1,f=t.position-t.lineStart,1===p?s&&(wn(t,f)||function(t,e,i){var r,n,o,a,s,l,c,h=t.tag,u=t.anchor,d={},f=Object.create(null),p=null,g=null,m=null,y=!1,x=!1;if(-1!==t.firstTabInLine)return!1;for(null!==t.anchor&&(t.anchorMap[t.anchor]=d),c=t.input.charCodeAt(t.position);0!==c;){if(y||-1===t.firstTabInLine||(t.position=t.firstTabInLine,gn(t,"tab characters must not be used in indentation")),r=t.input.charCodeAt(t.position+1),o=t.line,63!==c&&58!==c||!on(r)){if(a=t.line,s=t.lineStart,l=t.position,!Fn(t,i,Wr,!1,!0))break;if(t.line===o){for(c=t.input.charCodeAt(t.position);nn(c);)c=t.input.charCodeAt(++t.position);if(58===c)on(c=t.input.charCodeAt(++t.position))||gn(t,"a whitespace character is expected after the key-value separator within a block mapping"),y&&(bn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!1,n=!1,p=t.tag,g=t.result;else{if(!x)return t.tag=h,t.anchor=u,!0;gn(t,"can not read an implicit mapping pair; a colon is missed")}}else{if(!x)return t.tag=h,t.anchor=u,!0;gn(t,"can not read a block mapping entry; a multiline key may not be an implicit key")}}else 63===c?(y&&(bn(t,d,f,p,g,null,a,s,l),p=g=m=null),x=!0,y=!0,n=!0):y?(y=!1,n=!0):gn(t,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),t.position+=1,c=r;if((t.line===o||t.lineIndent>e)&&(y&&(a=t.line,s=t.lineStart,l=t.position),Fn(t,e,Ur,!0,n)&&(y?g=t.result:m=t.result),y||(bn(t,d,f,p,g,m,a,s,l),p=g=m=null),vn(t,!0,-1),c=t.input.charCodeAt(t.position)),(t.line===o||t.lineIndent>e)&&0!==c)gn(t,"bad indentation of a mapping entry");else if(t.lineIndent<e)break}return y&&bn(t,d,f,p,g,null,a,s,l),x&&(t.tag=h,t.anchor=u,t.kind="mapping",t.result=d),x}(t,f,d))||function(t,e){var i,r,n,o,a,s,l,c,h,u,d,f,p=!0,g=t.tag,m=t.anchor,y=Object.create(null);if(91===(f=t.input.charCodeAt(t.position)))a=93,c=!1,o=[];else{if(123!==f)return!1;a=125,c=!0,o={}}for(null!==t.anchor&&(t.anchorMap[t.anchor]=o),f=t.input.charCodeAt(++t.position);0!==f;){if(vn(t,!0,e),(f=t.input.charCodeAt(t.position))===a)return t.position++,t.tag=g,t.anchor=m,t.kind=c?"mapping":"sequence",t.result=o,!0;p?44===f&&gn(t,"expected the node content, but found ','"):gn(t,"missed comma between flow collection entries"),d=null,s=l=!1,63===f&&on(t.input.charCodeAt(t.position+1))&&(s=l=!0,t.position++,vn(t,!0,e)),i=t.line,r=t.lineStart,n=t.position,Fn(t,e,Rr,!1,!0),u=t.tag,h=t.result,vn(t,!0,e),f=t.input.charCodeAt(t.position),!l&&t.line!==i||58!==f||(s=!0,f=t.input.charCodeAt(++t.position),vn(t,!0,e),Fn(t,e,Rr,!1,!0),d=t.result),c?bn(t,o,y,u,h,d,i,r,n):s?o.push(bn(t,null,y,u,h,d,i,r,n)):o.push(h),vn(t,!0,e),44===(f=t.input.charCodeAt(t.position))?(p=!0,f=t.input.charCodeAt(++t.position)):p=!1}gn(t,"unexpected end of the stream within a flow collection")}(t,d)?m=!0:(a&&function(t,e){var i,r,n,o,a,s=Yr,l=!1,c=!1,h=e,u=0,d=!1;if(124===(o=t.input.charCodeAt(t.position)))r=!1;else{if(62!==o)return!1;r=!0}for(t.kind="scalar",t.result="";0!==o;)if(43===(o=t.input.charCodeAt(++t.position))||45===o)Yr===s?s=43===o?Gr:Vr:gn(t,"repeat of a chomping mode identifier");else{if(!((n=48<=(a=o)&&a<=57?a-48:-1)>=0))break;0===n?gn(t,"bad explicit indentation width of a block scalar; it cannot be less than one"):c?gn(t,"repeat of an indentation width identifier"):(h=e+n-1,c=!0)}if(nn(o)){do{o=t.input.charCodeAt(++t.position)}while(nn(o));if(35===o)do{o=t.input.charCodeAt(++t.position)}while(!rn(o)&&0!==o)}for(;0!==o;){for(_n(t),t.lineIndent=0,o=t.input.charCodeAt(t.position);(!c||t.lineIndent<h)&&32===o;)t.lineIndent++,o=t.input.charCodeAt(++t.position);if(!c&&t.lineIndent>h&&(h=t.lineIndent),rn(o))u++;else{if(t.lineIndent<h){s===Gr?t.result+=or.repeat("\n",l?1+u:u):s===Yr&&l&&(t.result+="\n");break}for(r?nn(o)?(d=!0,t.result+=or.repeat("\n",l?1+u:u)):d?(d=!1,t.result+=or.repeat("\n",u+1)):0===u?l&&(t.result+=" "):t.result+=or.repeat("\n",u):t.result+=or.repeat("\n",l?1+u:u),l=!0,c=!0,u=0,i=t.position;!rn(o)&&0!==o;)o=t.input.charCodeAt(++t.position);xn(t,i,t.position,!1)}}return!0}(t,d)||function(t,e){var i,r,n;if(39!==(i=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,r=n=t.position;0!==(i=t.input.charCodeAt(t.position));)if(39===i){if(xn(t,r,t.position,!0),39!==(i=t.input.charCodeAt(++t.position)))return!0;r=t.position,t.position++,n=t.position}else rn(i)?(xn(t,r,n,!0),Tn(t,vn(t,!1,e)),r=n=t.position):t.position===t.lineStart&&kn(t)?gn(t,"unexpected end of the document within a single quoted scalar"):(t.position++,n=t.position);gn(t,"unexpected end of the stream within a single quoted scalar")}(t,d)||function(t,e){var i,r,n,o,a,s,l;if(34!==(s=t.input.charCodeAt(t.position)))return!1;for(t.kind="scalar",t.result="",t.position++,i=r=t.position;0!==(s=t.input.charCodeAt(t.position));){if(34===s)return xn(t,i,t.position,!0),t.position++,!0;if(92===s){if(xn(t,i,t.position,!0),rn(s=t.input.charCodeAt(++t.position)))vn(t,!1,e);else if(s<256&&hn[s])t.result+=un[s],t.position++;else if((a=120===(l=s)?2:117===l?4:85===l?8:0)>0){for(n=a,o=0;n>0;n--)(a=sn(s=t.input.charCodeAt(++t.position)))>=0?o=(o<<4)+a:gn(t,"expected hexadecimal character");t.result+=cn(o),t.position++}else gn(t,"unknown escape sequence");i=r=t.position}else rn(s)?(xn(t,i,r,!0),Tn(t,vn(t,!1,e)),i=r=t.position):t.position===t.lineStart&&kn(t)?gn(t,"unexpected end of the document within a double quoted scalar"):(t.position++,r=t.position)}gn(t,"unexpected end of the stream within a double quoted scalar")}(t,d)?m=!0:!function(t){var e,i,r;if(42!==(r=t.input.charCodeAt(t.position)))return!1;for(r=t.input.charCodeAt(++t.position),e=t.position;0!==r&&!on(r)&&!an(r);)r=t.input.charCodeAt(++t.position);return t.position===e&&gn(t,"name of an alias node must contain at least one character"),i=t.input.slice(e,t.position),Pr.call(t.anchorMap,i)||gn(t,'unidentified alias "'+i+'"'),t.result=t.anchorMap[i],vn(t,!0,-1),!0}(t)?function(t,e,i){var r,n,o,a,s,l,c,h,u=t.kind,d=t.result;if(on(h=t.input.charCodeAt(t.position))||an(h)||35===h||38===h||42===h||33===h||124===h||62===h||39===h||34===h||37===h||64===h||96===h)return!1;if((63===h||45===h)&&(on(r=t.input.charCodeAt(t.position+1))||i&&an(r)))return!1;for(t.kind="scalar",t.result="",n=o=t.position,a=!1;0!==h;){if(58===h){if(on(r=t.input.charCodeAt(t.position+1))||i&&an(r))break}else if(35===h){if(on(t.input.charCodeAt(t.position-1)))break}else{if(t.position===t.lineStart&&kn(t)||i&&an(h))break;if(rn(h)){if(s=t.line,l=t.lineStart,c=t.lineIndent,vn(t,!1,-1),t.lineIndent>=e){a=!0,h=t.input.charCodeAt(t.position);continue}t.position=o,t.line=s,t.lineStart=l,t.lineIndent=c;break}}a&&(xn(t,n,o,!1),Tn(t,t.line-s),n=o=t.position,a=!1),nn(h)||(o=t.position+1),h=t.input.charCodeAt(++t.position)}return xn(t,n,o,!1),!!t.result||(t.kind=u,t.result=d,!1)}(t,d,Rr===i)&&(m=!0,null===t.tag&&(t.tag="?")):(m=!0,null===t.tag&&null===t.anchor||gn(t,"alias node should not have any properties")),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):0===p&&(m=s&&wn(t,f))),null===t.tag)null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);else if("?"===t.tag){for(null!==t.result&&"scalar"!==t.kind&&gn(t,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+t.kind+'"'),l=0,c=t.implicitTypes.length;l<c;l+=1)if((u=t.implicitTypes[l]).resolve(t.result)){t.result=u.construct(t.result),t.tag=u.tag,null!==t.anchor&&(t.anchorMap[t.anchor]=t.result);break}}else if("!"!==t.tag){if(Pr.call(t.typeMap[t.kind||"fallback"],t.tag))u=t.typeMap[t.kind||"fallback"][t.tag];else for(u=null,l=0,c=(h=t.typeMap.multi[t.kind||"fallback"]).length;l<c;l+=1)if(t.tag.slice(0,h[l].tag.length)===h[l].tag){u=h[l];break}u||gn(t,"unknown tag !<"+t.tag+">"),null!==t.result&&u.kind!==t.kind&&gn(t,"unacceptable node kind for !<"+t.tag+'> tag; it should be "'+u.kind+'", not "'+t.kind+'"'),u.resolve(t.result,t.tag)?(t.result=u.construct(t.result,t.tag),null!==t.anchor&&(t.anchorMap[t.anchor]=t.result)):gn(t,"cannot resolve a node with !<"+t.tag+"> explicit tag")}return null!==t.listener&&t.listener("close",t),null!==t.tag||null!==t.anchor||m}function An(t){var e,i,r,n,o=t.position,a=!1;for(t.version=null,t.checkLineBreaks=t.legacy,t.tagMap=Object.create(null),t.anchorMap=Object.create(null);0!==(n=t.input.charCodeAt(t.position))&&(vn(t,!0,-1),n=t.input.charCodeAt(t.position),!(t.lineIndent>0||37!==n));){for(a=!0,n=t.input.charCodeAt(++t.position),e=t.position;0!==n&&!on(n);)n=t.input.charCodeAt(++t.position);for(r=[],(i=t.input.slice(e,t.position)).length<1&&gn(t,"directive name must not be less than one character in length");0!==n;){for(;nn(n);)n=t.input.charCodeAt(++t.position);if(35===n){do{n=t.input.charCodeAt(++t.position)}while(0!==n&&!rn(n));break}if(rn(n))break;for(e=t.position;0!==n&&!on(n);)n=t.input.charCodeAt(++t.position);r.push(t.input.slice(e,t.position))}0!==n&&_n(t),Pr.call(yn,i)?yn[i](t,i,r):mn(t,'unknown document directive "'+i+'"')}vn(t,!0,-1),0===t.lineIndent&&45===t.input.charCodeAt(t.position)&&45===t.input.charCodeAt(t.position+1)&&45===t.input.charCodeAt(t.position+2)?(t.position+=3,vn(t,!0,-1)):a&&gn(t,"directives end mark is expected"),Fn(t,t.lineIndent-1,Ur,!1,!0),vn(t,!0,-1),t.checkLineBreaks&&Qr.test(t.input.slice(o,t.position))&&mn(t,"non-ASCII line breaks are interpreted as content"),t.documents.push(t.result),t.position===t.lineStart&&kn(t)?46===t.input.charCodeAt(t.position)&&(t.position+=3,vn(t,!0,-1)):t.position<t.length-1&&gn(t,"end of the stream or a document separator is expected")}function Ln(t,e){e=e||{},0!==(t=String(t)).length&&(10!==t.charCodeAt(t.length-1)&&13!==t.charCodeAt(t.length-1)&&(t+="\n"),65279===t.charCodeAt(0)&&(t=t.slice(1)));var i=new fn(t,e),r=t.indexOf("\0");for(-1!==r&&(i.position=r,gn(i,"null byte is not allowed in input")),i.input+="\0";32===i.input.charCodeAt(i.position);)i.lineIndent+=1,i.position+=1;for(;i.position<i.length-1;)An(i);return i.documents}var Mn=Sr,En={loadAll:function(t,e,i){null!==e&&"object"==typeof e&&void 0===i&&(i=e,e=null);var r=Ln(t,i);if("function"!=typeof e)return r;for(var n=0,o=r.length;n<o;n+=1)e(r[n])},load:function(t,e){var i=Ln(t,e);if(0!==i.length){if(1===i.length)return i[0];throw new lr("expected a single document in the stream, but found more")}}}.load;const Zn=t=>t.replace(/\r\n?/g,"\n").replace(/<(\w+)([^>]*)>/g,((t,e,i)=>"<"+e+i.replace(/="([^"]*)"/g,"='$1'")+">")),Nn=t=>{const{text:e,metadata:i}=function(t){const e=t.match(Dt);if(!e)return{text:t,metadata:{}};let i=En(e[1],{schema:Mn})??{};i="object"!=typeof i||Array.isArray(i)?{}:i;const r={};return i.displayMode&&(r.displayMode=i.displayMode.toString()),i.title&&(r.title=i.title.toString()),i.config&&(r.config=i.config),{text:t.slice(e[0].length),metadata:r}}(t),{displayMode:r,title:n,config:o={}}=i;return r&&(o.gantt||(o.gantt={}),o.gantt.displayMode=r),{title:n,config:o,text:e}},On=t=>{const e=ye.detectInit(t)??{},i=ye.detectDirective(t,"wrap");return Array.isArray(i)?e.wrap=i.some((({type:t})=>{})):"wrap"===(null==i?void 0:i.type)&&(e.wrap=!0),{text:(r=t,r.replace($t,"")),directive:e};var r};const In=["foreignobject"],jn=["dominant-baseline"];function qn(t){const e=function(t){const e=Zn(t),i=Nn(e),r=On(i.text),n=me(i.config,r.directive);return{code:t=rr(r.text),title:i.title,config:n}}(t);return Le(),Ae(e.config??{}),e}const Dn=function(t){return t.replace(/\ufb02\xb0\xb0/g,"&#").replace(/\ufb02\xb0/g,"&").replace(/\xb6\xdf/g,";")},$n=(t,e,i=[])=>`\n.${t} ${e} { ${i.join(" !important; ")} !important; }`,zn=(t,e,i,r)=>{const n=((t,e={})=>{var i;let r="";if(void 0!==t.themeCSS&&(r+=`\n${t.themeCSS}`),void 0!==t.fontFamily&&(r+=`\n:root { --mermaid-font-family: ${t.fontFamily}}`),void 0!==t.altFontFamily&&(r+=`\n:root { --mermaid-alt-font-family: ${t.altFontFamily}}`),!(0,ot.Z)(e)){const n=t.htmlLabels||(null==(i=t.flowchart)?void 0:i.htmlLabels)?["> *","span"]:["rect","polygon","ellipse","circle","path"];for(const t in e){const i=e[t];(0,ot.Z)(i.styles)||n.forEach((t=>{r+=$n(i.id,t,i.styles)})),(0,ot.Z)(i.textStyles)||(r+=$n(i.id,"tspan",i.textStyles))}}return r})(t,i);return M(tt(`${r}{${pi(e,n,t.themeVariables)}}`),E)},Pn=(t,e,i,r,n)=>{const o=t.append("div");o.attr("id",i),r&&o.attr("style",r);const a=o.append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg");return n&&a.attr("xmlns:xlink",n),a.append("g"),t};function Rn(t,e){return t.append("iframe").attr("id",e).attr("style","width: 100%; height: 100%;").attr("sandbox","")}const Wn=Object.freeze({render:async function(t,e,i){var r,n,o,l,c,h;Qi();const u=qn(e);e=u.code;const d=Be();st.debug(d),e.length>((null==d?void 0:d.maxTextSize)??5e4)&&(e="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa");const f="#"+t,p="i"+t,g="#"+p,m="d"+t,y="#"+m;let x=(0,a.Ys)("body");const C="sandbox"===d.securityLevel,b="loose"===d.securityLevel,_=d.fontFamily;if(void 0!==i){if(i&&(i.innerHTML=""),C){const t=Rn((0,a.Ys)(i),p);x=(0,a.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ys)(i);Pn(x,t,m,`font-family: ${_}`,"http://www.w3.org/1999/xlink")}else{if(((t,e,i,r)=>{var n,o,a;null==(n=t.getElementById(e))||n.remove(),null==(o=t.getElementById(i))||o.remove(),null==(a=t.getElementById(r))||a.remove()})(document,t,m,p),C){const t=Rn((0,a.Ys)("body"),p);x=(0,a.Ys)(t.nodes()[0].contentDocument.body),x.node().style.margin=0}else x=(0,a.Ys)("body");Pn(x,t,m)}let v,k;e=function(t){let e=t;return e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)})),e=e.replace(/#\w+;/g,(function(t){const e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"\ufb02\xb0\xb0"+e+"\xb6\xdf":"\ufb02\xb0"+e+"\xb6\xdf"})),e}(e);try{v=await Ki(e,{title:u.title})}catch(N){v=new Ji("error"),k=N}const T=x.select(y).node(),w=v.type,S=T.firstChild,B=S.firstChild,F=null==(n=(r=v.renderer).getClasses)?void 0:n.call(r,e,v),A=zn(d,w,F,f),L=document.createElement("style");L.innerHTML=A,S.insertBefore(L,B);try{await v.renderer.draw(e,t,xe,v)}catch(O){throw $i.draw(e,t,xe),O}!function(t,e,i,r){(function(t,e){t.attr("role",ir),""!==e&&t.attr("aria-roledescription",e)})(e,t),function(t,e,i,r){if(void 0!==t.insert){if(i){const e=`chart-desc-${r}`;t.attr("aria-describedby",e),t.insert("desc",":first-child").attr("id",e).text(i)}if(e){const i=`chart-title-${r}`;t.attr("aria-labelledby",i),t.insert("title",":first-child").attr("id",i).text(e)}}}(e,i,r,e.attr("id"))}(w,x.select(`${y} svg`),null==(l=(o=v.db).getAccTitle)?void 0:l.call(o),null==(h=(c=v.db).getAccDescription)?void 0:h.call(c)),x.select(`[id="${t}"]`).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");let M=x.select(y).node().innerHTML;if(st.debug("config.arrowMarkerAbsolute",d.arrowMarkerAbsolute),M=((t="",e,i)=>{let r=t;return i||e||(r=r.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g,'marker-end="url(#')),r=Dn(r),r=r.replace(/<br>/g,"<br/>"),r})(M,C,mt(d.arrowMarkerAbsolute)),C){M=((t="",e)=>{var i,r;return`<iframe style="width:100%;height:${(null==(r=null==(i=null==e?void 0:e.viewBox)?void 0:i.baseVal)?void 0:r.height)?e.viewBox.baseVal.height+"px":"100%"};border:0;margin:0;" src="data:text/html;base64,${btoa('<body style="margin:0">'+t+"</body>")}" sandbox="allow-top-navigation-by-user-activation allow-popups">\n The "iframe" tag is not supported by your browser.\n</iframe>`})(M,x.select(y+" svg").node())}else b||(M=s.sanitize(M,{ADD_TAGS:In,ADD_ATTR:jn}));if(tr.forEach((t=>{t()})),tr=[],k)throw k;const E=C?g:y,Z=(0,a.Ys)(E).node();return Z&&"remove"in Z&&Z.remove(),{svg:M,bindFunctions:v.db.bindFunctions}},parse:async function(t,e){Qi(),t=qn(t).code;try{await Ki(t)}catch(i){if(null==e?void 0:e.suppressErrors)return!1;throw i}return!0},getDiagramFromText:Ki,initialize:function(t={}){var e;(null==t?void 0:t.fontFamily)&&!(null==(e=t.themeVariables)?void 0:e.fontFamily)&&(t.themeVariables||(t.themeVariables={}),t.themeVariables.fontFamily=t.fontFamily),be=Vt({},t),(null==t?void 0:t.theme)&&t.theme in Mt?t.themeVariables=Mt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=Mt.default.getThemeVariables(t.themeVariables));const i="object"==typeof t?(t=>(_e=Vt({},Ce),_e=Vt(_e,t),t.theme&&Mt[t.theme]&&(_e.themeVariables=Mt[t.theme].getThemeVariables(t.themeVariables)),Te(_e,ve),_e))(t):we();lt(i.logLevel),Qi()},getConfig:Be,setConfig:Se,getSiteConfig:we,updateSiteConfig:t=>(_e=Vt(_e,t),Te(_e,ve),_e),reset:()=>{Le()},globalReset:()=>{Le(Ce)},defaultConfig:Ce});lt(Be().logLevel),Le(Be());const Hn=(t,e,i)=>{st.warn(t),pe(t)?(i&&i(t.str,t.hash),e.push({...t,message:t.str,error:t})):(i&&i(t),t instanceof Error&&e.push({str:t.message,message:t.message,hash:t.name,error:t}))},Un=async function(t={querySelector:".mermaid"}){try{await Yn(t)}catch(e){if(pe(e)&&st.error(e.str),to.parseError&&to.parseError(e),!t.suppressErrors)throw st.error("Use the suppressErrors option to suppress these errors"),e}},Yn=async function({postRenderCallback:t,querySelector:e,nodes:i}={querySelector:".mermaid"}){const n=Wn.getConfig();let o;if(st.debug((t?"":"No ")+"Callback function found"),i)o=i;else{if(!e)throw new Error("Nodes and querySelector are both undefined");o=document.querySelectorAll(e)}st.debug(`Found ${o.length} diagrams`),void 0!==(null==n?void 0:n.startOnLoad)&&(st.debug("Start On Load: "+(null==n?void 0:n.startOnLoad)),Wn.updateSiteConfig({startOnLoad:null==n?void 0:n.startOnLoad}));const a=new ye.InitIDGenerator(n.deterministicIds,n.deterministicIDSeed);let s;const l=[];for(const h of Array.from(o)){if(st.info("Rendering diagram: "+h.id),h.getAttribute("data-processed"))continue;h.setAttribute("data-processed","true");const e=`mermaid-${a.next()}`;s=h.innerHTML,s=(0,r.Z)(ye.entityDecode(s)).trim().replace(/<br\s*\/?>/gi,"<br/>");const i=ye.detectInit(s);i&&st.debug("Detected early reinit: ",i);try{const{svg:i,bindFunctions:r}=await Kn(e,s,h);h.innerHTML=i,t&&await t(e),r&&r(h)}catch(c){Hn(c,l,to.parseError)}}if(l.length>0)throw l[0]},Vn=function(t){Wn.initialize(t)},Gn=function(){if(to.startOnLoad){const{startOnLoad:t}=Wn.getConfig();t&&to.run().catch((t=>st.error("Mermaid failed to initialize",t)))}};"undefined"!=typeof document&&window.addEventListener("load",Gn,!1);const Xn=[];let Qn=!1;const Jn=async()=>{if(!Qn){for(Qn=!0;Xn.length>0;){const e=Xn.shift();if(e)try{await e()}catch(t){st.error("Error executing queue",t)}}Qn=!1}},Kn=(t,e,i)=>new Promise(((r,n)=>{Xn.push((()=>new Promise(((o,a)=>{Wn.render(t,e,i).then((t=>{o(t),r(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=to.parseError)||e.call(to,t),a(t),n(t)}))})))),Jn().catch(n)})),to={startOnLoad:!0,mermaidAPI:Wn,parse:async(t,e)=>new Promise(((i,r)=>{Xn.push((()=>new Promise(((n,o)=>{Wn.parse(t,e).then((t=>{n(t),i(t)}),(t=>{var e;st.error("Error parsing",t),null==(e=to.parseError)||e.call(to,t),o(t),r(t)}))})))),Jn().catch(r)})),render:Kn,init:async function(t,e,i){st.warn("mermaid.init is deprecated. Please use run instead."),t&&Vn(t);const r={postRenderCallback:i,querySelector:".mermaid"};"string"==typeof e?r.querySelector=e:e&&(e instanceof HTMLElement?r.nodes=[e]:r.nodes=e),await Un(r)},run:Un,registerExternalDiagrams:async(t,{lazyLoad:e=!0}={})=>{Ht(...t),!1===e&&await(async()=>{st.debug("Loading registered diagrams");const t=(await Promise.allSettled(Object.entries(Rt).map((async([t,{detector:e,loader:i}])=>{if(i)try{Ii(t)}catch(r){try{const{diagram:t,id:r}=await i();Oi(r,t,e)}catch(n){throw st.error(`Failed to load external diagram with key ${t}. Removing from detectors.`),delete Rt[t],n}}})))).filter((t=>"rejected"===t.status));if(t.length>0){st.error(`Failed to load ${t.length} external diagrams`);for(const e of t)st.error(e);throw new Error(`Failed to load ${t.length} external diagrams`)}})()},initialize:Vn,parseError:void 0,contentLoaded:Gn,setParseErrorHandler:function(t){to.parseError=t},detectType:Wt}}}]); \ No newline at end of file diff --git a/assets/js/1325.f9a9e4dd.js.LICENSE.txt b/assets/js/9365.b3ca15d6.js.LICENSE.txt similarity index 100% rename from assets/js/1325.f9a9e4dd.js.LICENSE.txt rename to assets/js/9365.b3ca15d6.js.LICENSE.txt diff --git a/assets/js/95b96bb9.ce1e4720.js b/assets/js/95b96bb9.ce1e4720.js new file mode 100644 index 0000000..07deeea --- /dev/null +++ b/assets/js/95b96bb9.ce1e4720.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3561],{24577:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"Mixed feelings on Rust","permalink":"/blog/2024/01/28/rust-opinion","unlisted":false},{"title":"How can Copr help with broken dependencies","permalink":"/blog/2023/08/02/copr","unlisted":false},{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week","unlisted":false},{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week","unlisted":false},{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/95b96bb9.f1e9070e.js b/assets/js/95b96bb9.f1e9070e.js deleted file mode 100644 index 6fc5b70..0000000 --- a/assets/js/95b96bb9.f1e9070e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3561],{24577:e=>{e.exports=JSON.parse('{"title":"Recent posts","items":[{"title":"How can Copr help with broken dependencies","permalink":"/blog/2023/08/02/copr","unlisted":false},{"title":"4th week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/4th-week","unlisted":false},{"title":"3rd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/3rd-week","unlisted":false},{"title":"Sort the matrix diagonally","permalink":"/blog/leetcode/sort-diagonally","unlisted":false},{"title":"2nd week of Advent of Code \'22 in Rust","permalink":"/blog/aoc-2022/2nd-week","unlisted":false}]}')}}]); \ No newline at end of file diff --git a/assets/js/9e4087bc.c1ded62d.js b/assets/js/9e4087bc.1ba69630.js similarity index 96% rename from assets/js/9e4087bc.c1ded62d.js rename to assets/js/9e4087bc.1ba69630.js index 7377995..f3e9806 100644 --- a/assets/js/9e4087bc.c1ded62d.js +++ b/assets/js/9e4087bc.1ba69630.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3608],{63169:(e,r,s)=>{s.r(r),s.d(r,{default:()=>o});s(67294);var t=s(39960),a=s(95999),i=s(10833),n=s(80647),c=s(92503),l=s(85893);function h(e){let{year:r,posts:s}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Z,{as:"h3",id:r,children:r}),(0,l.jsx)("ul",{children:s.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(t.Z,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})},e.metadata.date)))})]})}function d(e){let{years:r}=e;return(0,l.jsx)("section",{className:"margin-vert--lg",children:(0,l.jsx)("div",{className:"container",children:(0,l.jsx)("div",{className:"row",children:r.map(((e,r)=>(0,l.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,l.jsx)(h,{...e})},r)))})})})}function o(e){let{archive:r}=e;const s=(0,a.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),t=(0,a.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),h=function(e){const r=e.reduce(((e,r)=>{const s=r.metadata.date.split("-")[0],t=e.get(s)??[];return e.set(s,[r,...t])}),new Map);return Array.from(r,(e=>{let[r,s]=e;return{year:r,posts:s}}))}(r.blogPosts);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.d,{title:s,description:t}),(0,l.jsxs)(n.Z,{children:[(0,l.jsx)("header",{className:"hero hero--primary",children:(0,l.jsxs)("div",{className:"container",children:[(0,l.jsx)(c.Z,{as:"h1",className:"hero__title",children:s}),(0,l.jsx)("p",{className:"hero__subtitle",children:t})]})}),(0,l.jsx)("main",{children:h.length>0&&(0,l.jsx)(d,{years:h})})]})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3608],{63169:(e,r,s)=>{s.r(r),s.d(r,{default:()=>o});s(67294);var t=s(33692),a=s(95999),i=s(10833),n=s(80647),c=s(92503),l=s(85893);function h(e){let{year:r,posts:s}=e;return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c.Z,{as:"h3",id:r,children:r}),(0,l.jsx)("ul",{children:s.map((e=>(0,l.jsx)("li",{children:(0,l.jsxs)(t.Z,{to:e.metadata.permalink,children:[e.metadata.formattedDate," - ",e.metadata.title]})},e.metadata.date)))})]})}function d(e){let{years:r}=e;return(0,l.jsx)("section",{className:"margin-vert--lg",children:(0,l.jsx)("div",{className:"container",children:(0,l.jsx)("div",{className:"row",children:r.map(((e,r)=>(0,l.jsx)("div",{className:"col col--4 margin-vert--lg",children:(0,l.jsx)(h,{...e})},r)))})})})}function o(e){let{archive:r}=e;const s=(0,a.I)({id:"theme.blog.archive.title",message:"Archive",description:"The page & hero title of the blog archive page"}),t=(0,a.I)({id:"theme.blog.archive.description",message:"Archive",description:"The page & hero description of the blog archive page"}),h=function(e){const r=e.reduce(((e,r)=>{const s=r.metadata.date.split("-")[0],t=e.get(s)??[];return e.set(s,[r,...t])}),new Map);return Array.from(r,(e=>{let[r,s]=e;return{year:r,posts:s}}))}(r.blogPosts);return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(i.d,{title:s,description:t}),(0,l.jsxs)(n.Z,{children:[(0,l.jsx)("header",{className:"hero hero--primary",children:(0,l.jsxs)("div",{className:"container",children:[(0,l.jsx)(c.Z,{as:"h1",className:"hero__title",children:s}),(0,l.jsx)("p",{className:"hero__subtitle",children:t})]})}),(0,l.jsx)("main",{children:h.length>0&&(0,l.jsx)(d,{years:h})})]})]})}}}]); \ No newline at end of file diff --git a/assets/js/a7098721.33f429e4.js b/assets/js/a7098721.3c1f60c5.js similarity index 72% rename from assets/js/a7098721.33f429e4.js rename to assets/js/a7098721.3c1f60c5.js index 3637de6..95cfb29 100644 --- a/assets/js/a7098721.33f429e4.js +++ b/assets/js/a7098721.3c1f60c5.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1050],{26615:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":7,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[1050],{26615:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":10,"totalPages":1,"totalCount":8,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/a94703ab.efd630be.js b/assets/js/a94703ab.41c675cc.js similarity index 99% rename from assets/js/a94703ab.efd630be.js rename to assets/js/a94703ab.41c675cc.js index b4f2940..8347f11 100644 --- a/assets/js/a94703ab.efd630be.js +++ b/assets/js/a94703ab.41c675cc.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4368],{12674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(67294),o=n(36905),i=n(10833),s=n(35281),l=n(53438),r=n(1116),c=n(95999),d=n(12466),u=n(85936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(85893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(91442),x=n(16550),f=n(87524),j=n(86668),k=n(21327);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:v.collapseSidebarButtonIcon})})}var C=n(59689),S=n(902);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(86043),Z=n(48596),A=n(39960),L=n(72389);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),_=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(13919),H=n(39471);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(13102),X=n(93163);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5658);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5658:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var a=n(36905),o=n(95999),i=n(92503),s=n(85893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[4368],{12674:(e,t,n)=>{n.r(t),n.d(t,{default:()=>be});var a=n(67294),o=n(36905),i=n(10833),s=n(35281),l=n(53438),r=n(1116),c=n(95999),d=n(12466),u=n(85936);const m={backToTopButton:"backToTopButton_sjWU",backToTopButtonShow:"backToTopButtonShow_xfvO"};var b=n(85893);function h(){const{shown:e,scrollToTop:t}=function(e){let{threshold:t}=e;const[n,o]=(0,a.useState)(!1),i=(0,a.useRef)(!1),{startScroll:s,cancelScroll:l}=(0,d.Ct)();return(0,d.RF)(((e,n)=>{let{scrollY:a}=e;const s=n?.scrollY;s&&(i.current?i.current=!1:a>=s?(l(),o(!1)):a<t?o(!1):a+window.innerHeight<document.documentElement.scrollHeight&&o(!0))})),(0,u.S)((e=>{e.location.hash&&(i.current=!0,o(!1))})),{shown:n,scrollToTop:()=>s(0)}}({threshold:300});return(0,b.jsx)("button",{"aria-label":(0,c.I)({id:"theme.BackToTopButton.buttonAriaLabel",message:"Scroll back to top",description:"The ARIA label for the back to top button"}),className:(0,o.Z)("clean-btn",s.k.common.backToTopButton,m.backToTopButton,e&&m.backToTopButtonShow),type:"button",onClick:t})}var p=n(91442),x=n(16550),f=n(87524),j=n(86668),k=n(21327);function _(e){return(0,b.jsx)("svg",{width:"20",height:"20","aria-hidden":"true",...e,children:(0,b.jsxs)("g",{fill:"#7a7a7a",children:[(0,b.jsx)("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),(0,b.jsx)("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})]})})}const v={collapseSidebarButton:"collapseSidebarButton_PEFL",collapseSidebarButtonIcon:"collapseSidebarButtonIcon_kv0_"};function g(e){let{onClick:t}=e;return(0,b.jsx)("button",{type:"button",title:(0,c.I)({id:"theme.docs.sidebar.collapseButtonTitle",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.collapseButtonAriaLabel",message:"Collapse sidebar",description:"The title attribute for collapse button of doc sidebar"}),className:(0,o.Z)("button button--secondary button--outline",v.collapseSidebarButton),onClick:t,children:(0,b.jsx)(_,{className:v.collapseSidebarButtonIcon})})}var C=n(59689),S=n(902);const I=Symbol("EmptyContext"),N=a.createContext(I);function T(e){let{children:t}=e;const[n,o]=(0,a.useState)(null),i=(0,a.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return(0,b.jsx)(N.Provider,{value:i,children:t})}var B=n(86043),Z=n(48596),A=n(33692),L=n(72389);function y(e){let{collapsed:t,categoryLabel:n,onClick:a}=e;return(0,b.jsx)("button",{"aria-label":t?(0,c.I)({id:"theme.DocSidebarItem.expandCategoryAriaLabel",message:"Expand sidebar category '{label}'",description:"The ARIA label to expand the sidebar category"},{label:n}):(0,c.I)({id:"theme.DocSidebarItem.collapseCategoryAriaLabel",message:"Collapse sidebar category '{label}'",description:"The ARIA label to collapse the sidebar category"},{label:n}),type:"button",className:"clean-btn menu__caret",onClick:a})}function w(e){let{item:t,onItemClick:n,activePath:i,level:r,index:c,...d}=e;const{items:u,label:m,collapsible:h,className:p,href:x}=t,{docs:{sidebar:{autoCollapseCategories:f}}}=(0,j.L)(),k=function(e){const t=(0,L.Z)();return(0,a.useMemo)((()=>e.href&&!e.linkUnlisted?e.href:!t&&e.collapsible?(0,l.LM)(e):void 0),[e,t])}(t),_=(0,l._F)(t,i),v=(0,Z.Mg)(x,i),{collapsed:g,setCollapsed:C}=(0,B.u)({initialState:()=>!!h&&(!_&&t.collapsed)}),{expandedItem:T,setExpandedItem:w}=function(){const e=(0,a.useContext)(N);if(e===I)throw new S.i6("DocSidebarItemsExpandedStateProvider");return e}(),E=function(e){void 0===e&&(e=!g),w(e?null:c),C(e)};return function(e){let{isActive:t,collapsed:n,updateCollapsed:o}=e;const i=(0,S.D9)(t);(0,a.useEffect)((()=>{t&&!i&&n&&o(!1)}),[t,i,n,o])}({isActive:_,collapsed:g,updateCollapsed:E}),(0,a.useEffect)((()=>{h&&null!=T&&T!==c&&f&&C(!0)}),[h,T,c,C,f]),(0,b.jsxs)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemCategory,s.k.docs.docSidebarItemCategoryLevel(r),"menu__list-item",{"menu__list-item--collapsed":g},p),children:[(0,b.jsxs)("div",{className:(0,o.Z)("menu__list-item-collapsible",{"menu__list-item-collapsible--active":v}),children:[(0,b.jsx)(A.Z,{className:(0,o.Z)("menu__link",{"menu__link--sublist":h,"menu__link--sublist-caret":!x&&h,"menu__link--active":_}),onClick:h?e=>{n?.(t),x?E(!1):(e.preventDefault(),E())}:()=>{n?.(t)},"aria-current":v?"page":void 0,"aria-expanded":h?!g:void 0,href:h?k??"#":k,...d,children:m}),x&&h&&(0,b.jsx)(y,{collapsed:g,categoryLabel:m,onClick:e=>{e.preventDefault(),E()}})]}),(0,b.jsx)(B.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:g,children:(0,b.jsx)(V,{items:u,tabIndex:g?-1:0,onItemClick:n,activePath:i,level:r+1})})]})}var E=n(13919),H=n(39471);const M={menuExternalLink:"menuExternalLink_NmtK"};function R(e){let{item:t,onItemClick:n,activePath:a,level:i,index:r,...c}=e;const{href:d,label:u,className:m,autoAddBaseUrl:h}=t,p=(0,l._F)(t,a),x=(0,E.Z)(d);return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(i),"menu__list-item",m),children:(0,b.jsxs)(A.Z,{className:(0,o.Z)("menu__link",!x&&M.menuExternalLink,{"menu__link--active":p}),autoAddBaseUrl:h,"aria-current":p?"page":void 0,to:d,...x&&{onClick:n?()=>n(t):void 0},...c,children:[u,!x&&(0,b.jsx)(H.Z,{})]})},u)}const W={menuHtmlItem:"menuHtmlItem_M9Kj"};function F(e){let{item:t,level:n,index:a}=e;const{value:i,defaultStyle:l,className:r}=t;return(0,b.jsx)("li",{className:(0,o.Z)(s.k.docs.docSidebarItemLink,s.k.docs.docSidebarItemLinkLevel(n),l&&[W.menuHtmlItem,"menu__list-item"],r),dangerouslySetInnerHTML:{__html:i}},a)}function P(e){let{item:t,...n}=e;switch(t.type){case"category":return(0,b.jsx)(w,{item:t,...n});case"html":return(0,b.jsx)(F,{item:t,...n});default:return(0,b.jsx)(R,{item:t,...n})}}function D(e){let{items:t,...n}=e;const a=(0,l.f)(t,n.activePath);return(0,b.jsx)(T,{children:a.map(((e,t)=>(0,b.jsx)(P,{item:e,index:t,...n},t)))})}const V=(0,a.memo)(D),U={menu:"menu_SIkG",menuWithAnnouncementBar:"menuWithAnnouncementBar_GW3s"};function K(e){let{path:t,sidebar:n,className:i}=e;const l=function(){const{isActive:e}=(0,C.nT)(),[t,n]=(0,a.useState)(e);return(0,d.RF)((t=>{let{scrollY:a}=t;e&&n(0===a)}),[e]),e&&t}();return(0,b.jsx)("nav",{"aria-label":(0,c.I)({id:"theme.docs.sidebar.navAriaLabel",message:"Docs sidebar",description:"The ARIA label for the sidebar navigation"}),className:(0,o.Z)("menu thin-scrollbar",U.menu,l&&U.menuWithAnnouncementBar,i),children:(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:n,activePath:t,level:1})})})}const Y="sidebar_njMd",z="sidebarWithHideableNavbar_wUlq",G="sidebarHidden_VK0M",O="sidebarLogo_isFc";function q(e){let{path:t,sidebar:n,onCollapse:a,isHidden:i}=e;const{navbar:{hideOnScroll:s},docs:{sidebar:{hideable:l}}}=(0,j.L)();return(0,b.jsxs)("div",{className:(0,o.Z)(Y,s&&z,i&&G),children:[s&&(0,b.jsx)(k.Z,{tabIndex:-1,className:O}),(0,b.jsx)(K,{path:t,sidebar:n}),l&&(0,b.jsx)(g,{onClick:a})]})}const J=a.memo(q);var Q=n(13102),X=n(93163);const $=e=>{let{sidebar:t,path:n}=e;const a=(0,X.e)();return(0,b.jsx)("ul",{className:(0,o.Z)(s.k.docs.docSidebarMenu,"menu__list"),children:(0,b.jsx)(V,{items:t,activePath:n,onItemClick:e=>{"category"===e.type&&e.href&&a.toggle(),"link"===e.type&&a.toggle()},level:1})})};function ee(e){return(0,b.jsx)(Q.Zo,{component:$,props:e})}const te=a.memo(ee);function ne(e){const t=(0,f.i)(),n="desktop"===t||"ssr"===t,a="mobile"===t;return(0,b.jsxs)(b.Fragment,{children:[n&&(0,b.jsx)(J,{...e}),a&&(0,b.jsx)(te,{...e})]})}const ae={expandButton:"expandButton_TmdG",expandButtonIcon:"expandButtonIcon_i1dp"};function oe(e){let{toggleSidebar:t}=e;return(0,b.jsx)("div",{className:ae.expandButton,title:(0,c.I)({id:"theme.docs.sidebar.expandButtonTitle",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),"aria-label":(0,c.I)({id:"theme.docs.sidebar.expandButtonAriaLabel",message:"Expand sidebar",description:"The ARIA label and title attribute for expand button of doc sidebar"}),tabIndex:0,role:"button",onKeyDown:t,onClick:t,children:(0,b.jsx)(_,{className:ae.expandButtonIcon})})}const ie={docSidebarContainer:"docSidebarContainer_YfHR",docSidebarContainerHidden:"docSidebarContainerHidden_DPk8",sidebarViewport:"sidebarViewport_aRkj"};function se(e){let{children:t}=e;const n=(0,r.V)();return(0,b.jsx)(a.Fragment,{children:t},n?.name??"noSidebar")}function le(e){let{sidebar:t,hiddenSidebarContainer:n,setHiddenSidebarContainer:i}=e;const{pathname:l}=(0,x.TH)(),[r,c]=(0,a.useState)(!1),d=(0,a.useCallback)((()=>{r&&c(!1),!r&&(0,p.n)()&&c(!0),i((e=>!e))}),[i,r]);return(0,b.jsx)("aside",{className:(0,o.Z)(s.k.docs.docSidebarContainer,ie.docSidebarContainer,n&&ie.docSidebarContainerHidden),onTransitionEnd:e=>{e.currentTarget.classList.contains(ie.docSidebarContainer)&&n&&c(!0)},children:(0,b.jsx)(se,{children:(0,b.jsxs)("div",{className:(0,o.Z)(ie.sidebarViewport,r&&ie.sidebarViewportHidden),children:[(0,b.jsx)(ne,{sidebar:t,path:l,onCollapse:d,isHidden:r}),r&&(0,b.jsx)(oe,{toggleSidebar:d})]})})})}const re={docMainContainer:"docMainContainer_TBSr",docMainContainerEnhanced:"docMainContainerEnhanced_lQrH",docItemWrapperEnhanced:"docItemWrapperEnhanced_JWYK"};function ce(e){let{hiddenSidebarContainer:t,children:n}=e;const a=(0,r.V)();return(0,b.jsx)("main",{className:(0,o.Z)(re.docMainContainer,(t||!a)&&re.docMainContainerEnhanced),children:(0,b.jsx)("div",{className:(0,o.Z)("container padding-top--md padding-bottom--lg",re.docItemWrapper,t&&re.docItemWrapperEnhanced),children:n})})}const de={docRoot:"docRoot_UBD9",docsWrapper:"docsWrapper_hBAB"};function ue(e){let{children:t}=e;const n=(0,r.V)(),[o,i]=(0,a.useState)(!1);return(0,b.jsxs)("div",{className:de.docsWrapper,children:[(0,b.jsx)(h,{}),(0,b.jsxs)("div",{className:de.docRoot,children:[n&&(0,b.jsx)(le,{sidebar:n.items,hiddenSidebarContainer:o,setHiddenSidebarContainer:i}),(0,b.jsx)(ce,{hiddenSidebarContainer:o,children:t})]})]})}var me=n(5658);function be(e){const t=(0,l.SN)(e);if(!t)return(0,b.jsx)(me.Z,{});const{docElement:n,sidebarName:a,sidebarItems:c}=t;return(0,b.jsx)(i.FG,{className:(0,o.Z)(s.k.page.docsDocPage),children:(0,b.jsx)(r.b,{name:a,items:c,children:(0,b.jsx)(ue,{children:n})})})}},5658:(e,t,n)=>{n.d(t,{Z:()=>l});n(67294);var a=n(36905),o=n(95999),i=n(92503),s=n(85893);function l(e){let{className:t}=e;return(0,s.jsx)("main",{className:(0,a.Z)("container margin-vert--xl",t),children:(0,s.jsx)("div",{className:"row",children:(0,s.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,s.jsx)(i.Z,{as:"h1",className:"hero__title",children:(0,s.jsx)(o.Z,{id:"theme.NotFound.title",description:"The title of the 404 page",children:"Page Not Found"})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page",children:"We could not find what you were looking for."})}),(0,s.jsx)("p",{children:(0,s.jsx)(o.Z,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page",children:"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."})})]})})})}}}]); \ No newline at end of file diff --git a/assets/js/af8b72a7.37a3aa6c.js b/assets/js/af8b72a7.b40642af.js similarity index 60% rename from assets/js/af8b72a7.37a3aa6c.js rename to assets/js/af8b72a7.b40642af.js index 6b382d2..a7e9680 100644 --- a/assets/js/af8b72a7.37a3aa6c.js +++ b/assets/js/af8b72a7.b40642af.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5658],{10507:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var n=o(85893),a=o(11151);const r={title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:new Date("2023-08-02T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},i=void 0,s={permalink:"/blog/2023/08/02/copr",editUrl:"https://github.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md",source:"@site/blog/2023-08-02-copr.md",title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",formattedDate:"August 2, 2023",tags:[{label:"\ud83c\udfed",permalink:"/blog/tags/\ud83c\udfed"},{label:"red-hat",permalink:"/blog/tags/red-hat"},{label:"copr",permalink:"/blog/tags/copr"},{label:"admin",permalink:"/blog/tags/admin"},{label:"vps",permalink:"/blog/tags/vps"}],readingTime:3.44,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. your opinionated admin",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},unlisted:!1,nextItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"}},c={authorsImageUrls:[void 0]},p=[];function l(e){const t={p:"p",...(0,a.a)(),...e.components};return(0,n.jsx)(t.p,{children:"When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories\u2026"})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,t,o)=>{o.d(t,{Z:()=>s,a:()=>i});var n=o(67294);const a={},r=n.createContext(a);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[5658],{10507:(e,t,o)=>{o.r(t),o.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var n=o(85893),a=o(11151);const r={title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:new Date("2023-08-02T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},i=void 0,s={permalink:"/blog/2023/08/02/copr",editUrl:"https://github.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md",source:"@site/blog/2023-08-02-copr.md",title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",formattedDate:"August 2, 2023",tags:[{label:"\ud83c\udfed",permalink:"/blog/tags/\ud83c\udfed"},{label:"red-hat",permalink:"/blog/tags/red-hat"},{label:"copr",permalink:"/blog/tags/copr"},{label:"admin",permalink:"/blog/tags/admin"},{label:"vps",permalink:"/blog/tags/vps"}],readingTime:3.44,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. your opinionated admin",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},unlisted:!1,prevItem:{title:"Mixed feelings on Rust",permalink:"/blog/2024/01/28/rust-opinion"},nextItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"}},c={authorsImageUrls:[void 0]},p=[];function l(e){const t={p:"p",...(0,a.a)(),...e.components};return(0,n.jsx)(t.p,{children:"When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories\u2026"})}function d(e={}){const{wrapper:t}={...(0,a.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,t,o)=>{o.d(t,{Z:()=>s,a:()=>i});var n=o(67294);const a={},r=n.createContext(a);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function s(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b1288602.19054c2d.js b/assets/js/b1288602.19054c2d.js new file mode 100644 index 0000000..150fa61 --- /dev/null +++ b/assets/js/b1288602.19054c2d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[59],{51456:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>h});var r=t(85893),s=t(11151);const o={title:"Submitting merge requests"},i="Submitting merge requests for review",a={id:"mr",title:"Submitting merge requests",description:"This tutorial aims to show you how to follow basic git workflow and submit changes",source:"@site/c/mr.md",sourceDirName:".",slug:"/mr",permalink:"/c/mr",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/mr.md",tags:[],version:"current",lastUpdatedAt:1706528814,formattedLastUpdatedAt:"Jan 29, 2024",frontMatter:{title:"Submitting merge requests"},sidebar:"autogeneratedBar",previous:{title:"Practice exam C",permalink:"/c/pexam/cams"}},c={},h=[{value:"Tutorial",id:"tutorial",level:2},{value:"Step #1 - Starting from the clean repository",id:"step-1---starting-from-the-clean-repository",level:3},{value:"Step #2 - Create new branch",id:"step-2---create-new-branch",level:3},{value:"Step #3 - Do the assignment",id:"step-3---do-the-assignment",level:3},{value:"Step #4 - Commit and upload the changes to GitLab",id:"step-4---commit-and-upload-the-changes-to-gitlab",level:3},{value:"Step #5 - Creating a merge request manually",id:"step-5---creating-a-merge-request-manually",level:3},{value:"Step #6 - Set assignees",id:"step-6---set-assignees",level:3},{value:"Step #7 - Return to default branch",id:"step-7---return-to-default-branch",level:3}];function l(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"submitting-merge-requests-for-review",children:"Submitting merge requests for review"}),"\n",(0,r.jsxs)(n.p,{children:["This tutorial aims to show you how to follow basic git workflow and submit changes\nthrough ",(0,r.jsx)(n.em,{children:"Merge Requests"})," for review."]}),"\n",(0,r.jsxs)(n.p,{children:["The rudimentary idea behind aims for changes to be present on a separate branch\nthat is supposedly ",(0,r.jsx)(n.em,{children:"merged"})," into the default branch. Till then changes can be reviewed\non ",(0,r.jsx)(n.em,{children:"Merge Request"})," and additional changes may be made based on the reviews. Once\nthe changes satisfy requirements, the merge request is merged."]}),"\n",(0,r.jsx)(n.h2,{id:"tutorial",children:"Tutorial"}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Use this tutorial only for bonus assignments ",(0,r.jsx)(n.strong,{children:"made by your tutors"})," or in case\nyou need to make up for the absence."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"step-1---starting-from-the-clean-repository",children:"Step #1 - Starting from the clean repository"}),"\n",(0,r.jsxs)(n.p,{children:["In your repository (either locally or on aisa) type ",(0,r.jsx)(n.code,{children:"git status"})," and check if your\nrepository is clean and you are present on the main branch (",(0,r.jsx)(n.code,{children:"master"}),", ",(0,r.jsx)(n.code,{children:"main"})," or\n",(0,r.jsx)(n.code,{children:"trunk"}),"). If you do not know what your default branch is, it is probably ",(0,r.jsx)(n.code,{children:"master"}),"\nand you should not be on any other branch."]}),"\n",(0,r.jsx)(n.p,{children:"Output of the command should look like this:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git status\nOn branch master # Or main or trunk.\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n"})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["In case you are on different branch or there are uncommitted changes,\n",(0,r.jsx)(n.strong,{children:"do not continue!!!"})," Clean your repository (commit the changes or discard\nthem), before you continue."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"step-2---create-new-branch",children:"Step #2 - Create new branch"}),"\n",(0,r.jsx)(n.p,{children:"In your repository write command:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git checkout -b BRANCH\nSwitched to a new branch 'BRANCH'\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Instead of ",(0,r.jsx)(n.code,{children:"BRANCH"})," use some reasonable name for the branch. For example if you\nare working on the seminar from 3rd week, name the branch ",(0,r.jsx)(n.code,{children:"seminar-03"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"step-3---do-the-assignment",children:"Step #3 - Do the assignment"}),"\n",(0,r.jsx)(n.p,{children:"Download the skeleton for the seminar assignment, extract and program. For example\nif you are working on 3rd seminar, you can do so by:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ wget https://www.fi.muni.cz/pb071/seminars/seminar-03/pb071-seminar-03.zip\naisa$ unzip pb071-seminar-03.zip\n# Now you should have directory 'seminar-03'.\naisa$ rm pb071-seminar-03.zip\naisa$ cd seminar-03\n# You can work on the assignment.\n"})}),"\n",(0,r.jsx)(n.h3,{id:"step-4---commit-and-upload-the-changes-to-gitlab",children:"Step #4 - Commit and upload the changes to GitLab"}),"\n",(0,r.jsxs)(n.p,{children:["The same way you ",(0,r.jsx)(n.em,{children:"add"})," and ",(0,r.jsx)(n.em,{children:"commit"})," files for the homework assignments, you do for\nthe seminar."]}),"\n",(0,r.jsxs)(n.p,{children:["Now you can upload the changes to GitLab. ",(0,r.jsx)(n.code,{children:"git push"})," is not enough, since repository\non GitLab does not know your new branch. You can solve this by adding arguments:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git push origin BRANCH\n...\nremote: To create a merge request for BRANCH, visit:\nremote: https://gitlab.fi.muni.cz/login/pb071/merge_requests/new?merge_request%5Bsource_branch%5D=BRANCH\n...\n"})}),"\n",(0,r.jsx)(n.p,{children:"In the output you should have a link for creating a merge request. If you see this\nlink, open it and skip next step."}),"\n",(0,r.jsx)(n.h3,{id:"step-5---creating-a-merge-request-manually",children:"Step #5 - Creating a merge request manually"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Open your repository on GitLab."}),"\n",(0,r.jsxs)(n.li,{children:["On the left panel click on ",(0,r.jsx)(n.em,{children:"Merge Requests"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Click on ",(0,r.jsx)(n.em,{children:"New Merge Request"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In ",(0,r.jsx)(n.em,{children:"Source branch"})," select ",(0,r.jsx)(n.code,{children:"login/pb071"})," and ",(0,r.jsx)(n.code,{children:"BRANCH"}),", which you created."]}),"\n",(0,r.jsxs)(n.li,{children:["In ",(0,r.jsx)(n.em,{children:"Target branch"})," select ",(0,r.jsx)(n.code,{children:"login/pb071"})," and your default branch you have seen\nin the output of the first command. (most likely ",(0,r.jsx)(n.code,{children:"master"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Click on ",(0,r.jsx)(n.em,{children:"Compare branches and continue"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"step-6---set-assignees",children:"Step #6 - Set assignees"}),"\n",(0,r.jsxs)(n.p,{children:["On the page that is opened, please check at the top that you are creating merge\nrequest ",(0,r.jsx)(n.strong,{children:"from"})," your new branch ",(0,r.jsx)(n.strong,{children:"to"})," your default branch (one of ",(0,r.jsx)(n.code,{children:"master"}),", ",(0,r.jsx)(n.code,{children:"main"}),"\nor ",(0,r.jsx)(n.code,{children:"trunk"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Then in the field ",(0,r.jsx)(n.em,{children:"Assignees"})," set your tutors based on the seminar group. You can\nuse login for a quick look up."]}),"\n",(0,r.jsxs)(n.p,{children:["In the end click on ",(0,r.jsx)(n.em,{children:"Submit merge request"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"step-7---return-to-default-branch",children:"Step #7 - Return to default branch"}),"\n",(0,r.jsx)(n.p,{children:"Homework assignments can be submitted only from branches specified in the rules\nfor the course. Because of that, before you do anything else, you should switch\nback to your default branch."}),"\n",(0,r.jsxs)(n.p,{children:["First of all, same as in step #1, check that your repository is clean with ",(0,r.jsx)(n.code,{children:"git status"}),".\nFor the sake of safety, do not continue without clean repository. Then with command\n",(0,r.jsx)(n.code,{children:"git checkout BRANCH"})," switch to your default branch ",(0,r.jsx)(n.code,{children:"BRANCH"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you do not know which branch is your default, try ",(0,r.jsx)(n.code,{children:"git branch"})," that outputs all branches in your repository. Default branch is typically ",(0,r.jsx)(n.code,{children:"master"}),", but can\nbe ",(0,r.jsx)(n.code,{children:"main"})," or ",(0,r.jsx)(n.code,{children:"trunk"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git status\n# Check if repository is clean\n\n# If you know, what is your default branch, you can skip next command.\naisa$ git branch\n# Find the default branch in the list; should be one of the `master`, `main` or\n# `trunk` and you should not have more than one of those.\n# In case the list clears the terminal and you cannot see shell prompt, you can\n# press `q` to quit the pager.\n\naisa$ git checkout master\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsxs)(n.p,{children:["Adapted from: ",(0,r.jsx)(n.a,{href:"https://www.fi.muni.cz/~xlacko1/pb071/mr.html",children:"https://www.fi.muni.cz/~xlacko1/pb071/mr.html"})]})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var r=t(67294);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b1288602.cc4934c1.js b/assets/js/b1288602.cc4934c1.js deleted file mode 100644 index 2f2d02c..0000000 --- a/assets/js/b1288602.cc4934c1.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[59],{51456:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>a,toc:()=>h});var r=t(85893),s=t(11151);const o={title:"Submitting merge requests"},i="Submitting merge requests for review",a={id:"mr",title:"Submitting merge requests",description:"This tutorial aims to show you how to follow basic git workflow and submit changes",source:"@site/c/mr.md",sourceDirName:".",slug:"/mr",permalink:"/c/mr",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/mr.md",tags:[],version:"current",lastUpdatedAt:1704571953,formattedLastUpdatedAt:"Jan 6, 2024",frontMatter:{title:"Submitting merge requests"},sidebar:"autogeneratedBar",previous:{title:"Practice exam C",permalink:"/c/pexam/cams"}},c={},h=[{value:"Tutorial",id:"tutorial",level:2},{value:"Step #1 - Starting from the clean repository",id:"step-1---starting-from-the-clean-repository",level:3},{value:"Step #2 - Create new branch",id:"step-2---create-new-branch",level:3},{value:"Step #3 - Do the assignment",id:"step-3---do-the-assignment",level:3},{value:"Step #4 - Commit and upload the changes to GitLab",id:"step-4---commit-and-upload-the-changes-to-gitlab",level:3},{value:"Step #5 - Creating a merge request manually",id:"step-5---creating-a-merge-request-manually",level:3},{value:"Step #6 - Set assignees",id:"step-6---set-assignees",level:3},{value:"Step #7 - Return to default branch",id:"step-7---return-to-default-branch",level:3}];function l(e){const n={a:"a",blockquote:"blockquote",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.h1,{id:"submitting-merge-requests-for-review",children:"Submitting merge requests for review"}),"\n",(0,r.jsxs)(n.p,{children:["This tutorial aims to show you how to follow basic git workflow and submit changes\nthrough ",(0,r.jsx)(n.em,{children:"Merge Requests"})," for review."]}),"\n",(0,r.jsxs)(n.p,{children:["The rudimentary idea behind aims for changes to be present on a separate branch\nthat is supposedly ",(0,r.jsx)(n.em,{children:"merged"})," into the default branch. Till then changes can be reviewed\non ",(0,r.jsx)(n.em,{children:"Merge Request"})," and additional changes may be made based on the reviews. Once\nthe changes satisfy requirements, the merge request is merged."]}),"\n",(0,r.jsx)(n.h2,{id:"tutorial",children:"Tutorial"}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["Use this tutorial only for bonus assignments ",(0,r.jsx)(n.strong,{children:"made by your tutors"})," or in case\nyou need to make up for the absence."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"step-1---starting-from-the-clean-repository",children:"Step #1 - Starting from the clean repository"}),"\n",(0,r.jsxs)(n.p,{children:["In your repository (either locally or on aisa) type ",(0,r.jsx)(n.code,{children:"git status"})," and check if your\nrepository is clean and you are present on the main branch (",(0,r.jsx)(n.code,{children:"master"}),", ",(0,r.jsx)(n.code,{children:"main"})," or\n",(0,r.jsx)(n.code,{children:"trunk"}),"). If you do not know what your default branch is, it is probably ",(0,r.jsx)(n.code,{children:"master"}),"\nand you should not be on any other branch."]}),"\n",(0,r.jsx)(n.p,{children:"Output of the command should look like this:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git status\nOn branch master # Or main or trunk.\nYour branch is up to date with 'origin/master'.\n\nnothing to commit, working tree clean\n"})}),"\n",(0,r.jsxs)(n.blockquote,{children:["\n",(0,r.jsxs)(n.p,{children:["In case you are on different branch or there are uncommitted changes,\n",(0,r.jsx)(n.strong,{children:"do not continue!!!"})," Clean your repository (commit the changes or discard\nthem), before you continue."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"step-2---create-new-branch",children:"Step #2 - Create new branch"}),"\n",(0,r.jsx)(n.p,{children:"In your repository write command:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git checkout -b BRANCH\nSwitched to a new branch 'BRANCH'\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Instead of ",(0,r.jsx)(n.code,{children:"BRANCH"})," use some reasonable name for the branch. For example if you\nare working on the seminar from 3rd week, name the branch ",(0,r.jsx)(n.code,{children:"seminar-03"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"step-3---do-the-assignment",children:"Step #3 - Do the assignment"}),"\n",(0,r.jsx)(n.p,{children:"Download the skeleton for the seminar assignment, extract and program. For example\nif you are working on 3rd seminar, you can do so by:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ wget https://www.fi.muni.cz/pb071/seminars/seminar-03/pb071-seminar-03.zip\naisa$ unzip pb071-seminar-03.zip\n# Now you should have directory 'seminar-03'.\naisa$ rm pb071-seminar-03.zip\naisa$ cd seminar-03\n# You can work on the assignment.\n"})}),"\n",(0,r.jsx)(n.h3,{id:"step-4---commit-and-upload-the-changes-to-gitlab",children:"Step #4 - Commit and upload the changes to GitLab"}),"\n",(0,r.jsxs)(n.p,{children:["The same way you ",(0,r.jsx)(n.em,{children:"add"})," and ",(0,r.jsx)(n.em,{children:"commit"})," files for the homework assignments, you do for\nthe seminar."]}),"\n",(0,r.jsxs)(n.p,{children:["Now you can upload the changes to GitLab. ",(0,r.jsx)(n.code,{children:"git push"})," is not enough, since repository\non GitLab does not know your new branch. You can solve this by adding arguments:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git push origin BRANCH\n...\nremote: To create a merge request for BRANCH, visit:\nremote: https://gitlab.fi.muni.cz/login/pb071/merge_requests/new?merge_request%5Bsource_branch%5D=BRANCH\n...\n"})}),"\n",(0,r.jsx)(n.p,{children:"In the output you should have a link for creating a merge request. If you see this\nlink, open it and skip next step."}),"\n",(0,r.jsx)(n.h3,{id:"step-5---creating-a-merge-request-manually",children:"Step #5 - Creating a merge request manually"}),"\n",(0,r.jsxs)(n.ol,{children:["\n",(0,r.jsx)(n.li,{children:"Open your repository on GitLab."}),"\n",(0,r.jsxs)(n.li,{children:["On the left panel click on ",(0,r.jsx)(n.em,{children:"Merge Requests"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["Click on ",(0,r.jsx)(n.em,{children:"New Merge Request"}),"."]}),"\n",(0,r.jsxs)(n.li,{children:["In ",(0,r.jsx)(n.em,{children:"Source branch"})," select ",(0,r.jsx)(n.code,{children:"login/pb071"})," and ",(0,r.jsx)(n.code,{children:"BRANCH"}),", which you created."]}),"\n",(0,r.jsxs)(n.li,{children:["In ",(0,r.jsx)(n.em,{children:"Target branch"})," select ",(0,r.jsx)(n.code,{children:"login/pb071"})," and your default branch you have seen\nin the output of the first command. (most likely ",(0,r.jsx)(n.code,{children:"master"}),")"]}),"\n",(0,r.jsxs)(n.li,{children:["Click on ",(0,r.jsx)(n.em,{children:"Compare branches and continue"}),"."]}),"\n"]}),"\n",(0,r.jsx)(n.h3,{id:"step-6---set-assignees",children:"Step #6 - Set assignees"}),"\n",(0,r.jsxs)(n.p,{children:["On the page that is opened, please check at the top that you are creating merge\nrequest ",(0,r.jsx)(n.strong,{children:"from"})," your new branch ",(0,r.jsx)(n.strong,{children:"to"})," your default branch (one of ",(0,r.jsx)(n.code,{children:"master"}),", ",(0,r.jsx)(n.code,{children:"main"}),"\nor ",(0,r.jsx)(n.code,{children:"trunk"}),")."]}),"\n",(0,r.jsxs)(n.p,{children:["Then in the field ",(0,r.jsx)(n.em,{children:"Assignees"})," set your tutors based on the seminar group. You can\nuse login for a quick look up."]}),"\n",(0,r.jsxs)(n.p,{children:["In the end click on ",(0,r.jsx)(n.em,{children:"Submit merge request"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"step-7---return-to-default-branch",children:"Step #7 - Return to default branch"}),"\n",(0,r.jsx)(n.p,{children:"Homework assignments can be submitted only from branches specified in the rules\nfor the course. Because of that, before you do anything else, you should switch\nback to your default branch."}),"\n",(0,r.jsxs)(n.p,{children:["First of all, same as in step #1, check that your repository is clean with ",(0,r.jsx)(n.code,{children:"git status"}),".\nFor the sake of safety, do not continue without clean repository. Then with command\n",(0,r.jsx)(n.code,{children:"git checkout BRANCH"})," switch to your default branch ",(0,r.jsx)(n.code,{children:"BRANCH"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:["If you do not know which branch is your default, try ",(0,r.jsx)(n.code,{children:"git branch"})," that outputs all branches in your repository. Default branch is typically ",(0,r.jsx)(n.code,{children:"master"}),", but can\nbe ",(0,r.jsx)(n.code,{children:"main"})," or ",(0,r.jsx)(n.code,{children:"trunk"}),"."]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{children:"aisa$ git status\n# Check if repository is clean\n\n# If you know, what is your default branch, you can skip next command.\naisa$ git branch\n# Find the default branch in the list; should be one of the `master`, `main` or\n# `trunk` and you should not have more than one of those.\n# In case the list clears the terminal and you cannot see shell prompt, you can\n# press `q` to quit the pager.\n\naisa$ git checkout master\n"})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsxs)(n.p,{children:["Adapted from: ",(0,r.jsx)(n.a,{href:"https://www.fi.muni.cz/~xlacko1/pb071/mr.html",children:"https://www.fi.muni.cz/~xlacko1/pb071/mr.html"})]})]})}function d(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>a,a:()=>i});var r=t(67294);const s={},o=r.createContext(s);function i(e){const n=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),r.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b5a32f14.68cedca8.js b/assets/js/b5a32f14.68cedca8.js deleted file mode 100644 index 6ff6609..0000000 --- a/assets/js/b5a32f14.68cedca8.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2433],{31976:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var t=o(85893),r=o(11151);const s={title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:new Date("2023-08-02T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},a=void 0,i={permalink:"/blog/2023/08/02/copr",editUrl:"https://github.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md",source:"@site/blog/2023-08-02-copr.md",title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",formattedDate:"August 2, 2023",tags:[{label:"\ud83c\udfed",permalink:"/blog/tags/\ud83c\udfed"},{label:"red-hat",permalink:"/blog/tags/red-hat"},{label:"copr",permalink:"/blog/tags/copr"},{label:"admin",permalink:"/blog/tags/admin"},{label:"vps",permalink:"/blog/tags/vps"}],readingTime:3.44,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. your opinionated admin",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},unlisted:!1,nextItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"}},d={authorsImageUrls:[void 0]},l=[{value:"How does Copr repositories work?",id:"how-does-copr-repositories-work",level:2},{value:"My issue",id:"my-issue",level:2},{value:"How can Copr help?",id:"how-can-copr-help",level:2},{value:"Conclusion",id:"conclusion",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",section:"section",strong:"strong",sup:"sup",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories\u2026"}),"\n",(0,t.jsxs)(n.p,{children:["When I \u201creserved\u201d my VPS",(0,t.jsx)(n.sup,{children:(0,t.jsx)(n.a,{href:"#user-content-fn-1-d4045e",id:"user-content-fnref-1-d4045e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," back in June '20, I slapped Fedora on it without\nthinking. I bet 99% of people would say that I'm crazy for doing such thing",(0,t.jsx)(n.sup,{children:(0,t.jsx)(n.a,{href:"#user-content-fn-2-d4045e",id:"user-content-fnref-2-d4045e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})}),",\n",(0,t.jsx)(n.strong,{children:"BUT"})," I've been using Fedora on my PCs for some time already and it felt very\nstable and natural to just use, even for VPS."]}),"\n",(0,t.jsxs)(n.p,{children:["One of the first things I've done was setting up a mail server. You may guess\nwhat's the fun part about having a mail server\u2026 Yes, it's all the spam you\nreceive and only then you realize how much \u201ccrap\u201d gets filtered on free mail\nservices. To battle this problem I chose to use\n",(0,t.jsx)(n.a,{href:"https://github.com/rspamd/rspamd",children:"rspamd"})," that had CentOS support, but someone\nhad a ",(0,t.jsx)(n.a,{href:"https://copr.fedorainfracloud.org/",children:"Copr"})," repository that I used to\ninstall it."]}),"\n",(0,t.jsx)(n.h2,{id:"how-does-copr-repositories-work",children:"How does Copr repositories work?"}),"\n",(0,t.jsxs)(n.p,{children:["If you have ever used Ubuntu, you might be familiar with the concept since it is\nvery close to ",(0,t.jsx)(n.a,{href:"https://help.ubuntu.com/community/PPA",children:"PPAs"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"tl;dr of the whole process consists of"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"enabling the Copr repository, and"}),"\n",(0,t.jsx)(n.li,{children:"installing the desired package."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"So in shell you would do"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"# dnf copr enable \u2039copr-repository\u203a\n# dnf install \u2039package-from-the-repository\u203a\n"})}),"\n",(0,t.jsx)(n.p,{children:"And\u2026 that's it! Nothing else needed! Simple, right? And literally same process\nas you would do for the PPA."}),"\n",(0,t.jsx)(n.admonition,{title:"AUR",type:"tip",children:(0,t.jsx)(n.p,{children:"On the other hand, if you are familiar with the archLinux, you definitely know\nAUR and what it can do for you. Copr repository is pretty similar, but the\npackages are prebuilt in Copr and Copr repositories can carry the required\ndependencies for said packages, which simplifies the distribution, and can even\nhelp with installing singular packages (when you just need the dependency, not\neverything)."})}),"\n",(0,t.jsx)(n.h2,{id:"my-issue",children:"My issue"}),"\n",(0,t.jsx)(n.p,{children:"Now you might wonder how would I use it on my VPS. It's rather simple, once in\n6 months a new Fedora release comes out. And you need to upgrade to newer\nrelease\u2026 You don't need to do it right away and for such setup it probably isn't\neven recommended."}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"Fedora releases are supported for a year, i.e. they live 6 months till the next\nrelease and then another 6 months till another release."}),(0,t.jsxs)(n.p,{children:["Some people prefer to run one version \u201cbehind\u201d. If you ever decide to run it on\nyour home server or in a similar setup, it might be a pretty good idea to\nfollow. I'm using the \u201clatest greatest\u201d, cause why not ","\ud83d\ude04"]}),(0,t.jsx)(n.p,{children:"One way or another, you still need to bump the release every six months, unless\nyou'd bump 2 releases at once every year, which would be a decision, since, at\nleast I, cannot see any benefits in it\u2026 You don't go for \u201cstability\u201d, cause once\na year you switch to the latest release and then, before you bump, you use one\nyear old software, so you're not even using the latest."})]}),"\n",(0,t.jsx)(n.p,{children:"Fast-forward 2 years in the future, new Fedora release came out (October '22)\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\nupgrade, but can either ignore the dependencies or uninstall the rspamd\u2026"}),"\n",(0,t.jsx)(n.h2,{id:"how-can-copr-help",children:"How can Copr help?"}),"\n",(0,t.jsxs)(n.p,{children:["I have managed to find\n",(0,t.jsx)(n.a,{href:"https://github.com/rspamd/rspamd/blob/master/rpm/rspamd.spec",children:"specfile"})," for the\nrspamd package that they use for CentOS. There were some files apart from the\nspecfile, so I had to make an SRPM locally and then\u2026 I just uploaded the SRPM\nto the Copr to\n",(0,t.jsx)(n.a,{href:"https://copr.fedorainfracloud.org/coprs/mfocko/rspamd/build/5046567/",children:"build"}),"\nan RPM."]}),"\n",(0,t.jsx)(n.p,{children:"I have switched the previous Copr repository for rspamd with my own and happily\nproceeded with the upgrade."}),"\n",(0,t.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsxs)(n.p,{children:["Copr is heavily used for testing builds on the upstream with\n",(0,t.jsx)(n.a,{href:"https://packit.dev",children:"Packit"}),". However, as you can see, it is possible to use it\n",(0,t.jsx)(n.strong,{children:"very well"})," for packaging your own stuff and avoiding issues (such as the one\nI have described above), if need be."]}),"\n",(0,t.jsxs)(n.section,{"data-footnotes":!0,className:"footnotes",children:[(0,t.jsx)(n.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{id:"user-content-fn-1-d4045e",children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://vpsfree.cz",children:"vpsFree.cz"})," ",(0,t.jsx)(n.a,{href:"#user-content-fnref-1-d4045e","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{id:"user-content-fn-2-d4045e",children:["\n",(0,t.jsxs)(n.p,{children:["Even though I've been running archLinux on some Raspberry Pi's and also\non one of my \u201chome servers\u201d, before getting the VPS. You could say I like\nto live on the edge\u2026 ",(0,t.jsx)(n.a,{href:"#user-content-fnref-2-d4045e","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>i,a:()=>a});var t=o(67294);const r={},s=t.createContext(r);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/b5a32f14.b58aa0f1.js b/assets/js/b5a32f14.b58aa0f1.js new file mode 100644 index 0000000..19554da --- /dev/null +++ b/assets/js/b5a32f14.b58aa0f1.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2433],{31976:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var t=o(85893),r=o(11151);const s={title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:new Date("2023-08-02T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},a=void 0,i={permalink:"/blog/2023/08/02/copr",editUrl:"https://github.com/mfocko/blog/tree/main/blog/2023-08-02-copr.md",source:"@site/blog/2023-08-02-copr.md",title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",formattedDate:"August 2, 2023",tags:[{label:"\ud83c\udfed",permalink:"/blog/tags/\ud83c\udfed"},{label:"red-hat",permalink:"/blog/tags/red-hat"},{label:"copr",permalink:"/blog/tags/copr"},{label:"admin",permalink:"/blog/tags/admin"},{label:"vps",permalink:"/blog/tags/vps"}],readingTime:3.44,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. your opinionated admin",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"How can Copr help with broken dependencies",description:"Copr comes to save you when maintainer doesn't care.",date:"2023-08-02T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. your opinionated admin"}],tags:["\ud83c\udfed","red-hat","copr","admin","vps"]},unlisted:!1,prevItem:{title:"Mixed feelings on Rust",permalink:"/blog/2024/01/28/rust-opinion"},nextItem:{title:"4th week of Advent of Code '22 in Rust",permalink:"/blog/aoc-2022/4th-week"}},d={authorsImageUrls:[void 0]},l=[{value:"How does Copr repositories work?",id:"how-does-copr-repositories-work",level:2},{value:"My issue",id:"my-issue",level:2},{value:"How can Copr help?",id:"how-can-copr-help",level:2},{value:"Conclusion",id:"conclusion",level:2}];function h(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",section:"section",strong:"strong",sup:"sup",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.p,{children:"When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories\u2026"}),"\n",(0,t.jsxs)(n.p,{children:["When I \u201creserved\u201d my VPS",(0,t.jsx)(n.sup,{children:(0,t.jsx)(n.a,{href:"#user-content-fn-1-d4045e",id:"user-content-fnref-1-d4045e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," back in June '20, I slapped Fedora on it without\nthinking. I bet 99% of people would say that I'm crazy for doing such thing",(0,t.jsx)(n.sup,{children:(0,t.jsx)(n.a,{href:"#user-content-fn-2-d4045e",id:"user-content-fnref-2-d4045e","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})}),",\n",(0,t.jsx)(n.strong,{children:"BUT"})," I've been using Fedora on my PCs for some time already and it felt very\nstable and natural to just use, even for VPS."]}),"\n",(0,t.jsxs)(n.p,{children:["One of the first things I've done was setting up a mail server. You may guess\nwhat's the fun part about having a mail server\u2026 Yes, it's all the spam you\nreceive and only then you realize how much \u201ccrap\u201d gets filtered on free mail\nservices. To battle this problem I chose to use\n",(0,t.jsx)(n.a,{href:"https://github.com/rspamd/rspamd",children:"rspamd"})," that had CentOS support, but someone\nhad a ",(0,t.jsx)(n.a,{href:"https://copr.fedorainfracloud.org/",children:"Copr"})," repository that I used to\ninstall it."]}),"\n",(0,t.jsx)(n.h2,{id:"how-does-copr-repositories-work",children:"How does Copr repositories work?"}),"\n",(0,t.jsxs)(n.p,{children:["If you have ever used Ubuntu, you might be familiar with the concept since it is\nvery close to ",(0,t.jsx)(n.a,{href:"https://help.ubuntu.com/community/PPA",children:"PPAs"}),"."]}),"\n",(0,t.jsx)(n.p,{children:"tl;dr of the whole process consists of"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"enabling the Copr repository, and"}),"\n",(0,t.jsx)(n.li,{children:"installing the desired package."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"So in shell you would do"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"# dnf copr enable \u2039copr-repository\u203a\n# dnf install \u2039package-from-the-repository\u203a\n"})}),"\n",(0,t.jsx)(n.p,{children:"And\u2026 that's it! Nothing else needed! Simple, right? And literally same process\nas you would do for the PPA."}),"\n",(0,t.jsx)(n.admonition,{title:"AUR",type:"tip",children:(0,t.jsx)(n.p,{children:"On the other hand, if you are familiar with the archLinux, you definitely know\nAUR and what it can do for you. Copr repository is pretty similar, but the\npackages are prebuilt in Copr and Copr repositories can carry the required\ndependencies for said packages, which simplifies the distribution, and can even\nhelp with installing singular packages (when you just need the dependency, not\neverything)."})}),"\n",(0,t.jsx)(n.h2,{id:"my-issue",children:"My issue"}),"\n",(0,t.jsx)(n.p,{children:"Now you might wonder how would I use it on my VPS. It's rather simple, once in\n6 months a new Fedora release comes out. And you need to upgrade to newer\nrelease\u2026 You don't need to do it right away and for such setup it probably isn't\neven recommended."}),"\n",(0,t.jsxs)(n.admonition,{type:"tip",children:[(0,t.jsx)(n.p,{children:"Fedora releases are supported for a year, i.e. they live 6 months till the next\nrelease and then another 6 months till another release."}),(0,t.jsxs)(n.p,{children:["Some people prefer to run one version \u201cbehind\u201d. If you ever decide to run it on\nyour home server or in a similar setup, it might be a pretty good idea to\nfollow. I'm using the \u201clatest greatest\u201d, cause why not ","\ud83d\ude04"]}),(0,t.jsx)(n.p,{children:"One way or another, you still need to bump the release every six months, unless\nyou'd bump 2 releases at once every year, which would be a decision, since, at\nleast I, cannot see any benefits in it\u2026 You don't go for \u201cstability\u201d, cause once\na year you switch to the latest release and then, before you bump, you use one\nyear old software, so you're not even using the latest."})]}),"\n",(0,t.jsx)(n.p,{children:"Fast-forward 2 years in the future, new Fedora release came out (October '22)\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\nupgrade, but can either ignore the dependencies or uninstall the rspamd\u2026"}),"\n",(0,t.jsx)(n.h2,{id:"how-can-copr-help",children:"How can Copr help?"}),"\n",(0,t.jsxs)(n.p,{children:["I have managed to find\n",(0,t.jsx)(n.a,{href:"https://github.com/rspamd/rspamd/blob/master/rpm/rspamd.spec",children:"specfile"})," for the\nrspamd package that they use for CentOS. There were some files apart from the\nspecfile, so I had to make an SRPM locally and then\u2026 I just uploaded the SRPM\nto the Copr to\n",(0,t.jsx)(n.a,{href:"https://copr.fedorainfracloud.org/coprs/mfocko/rspamd/build/5046567/",children:"build"}),"\nan RPM."]}),"\n",(0,t.jsx)(n.p,{children:"I have switched the previous Copr repository for rspamd with my own and happily\nproceeded with the upgrade."}),"\n",(0,t.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,t.jsxs)(n.p,{children:["Copr is heavily used for testing builds on the upstream with\n",(0,t.jsx)(n.a,{href:"https://packit.dev",children:"Packit"}),". However, as you can see, it is possible to use it\n",(0,t.jsx)(n.strong,{children:"very well"})," for packaging your own stuff and avoiding issues (such as the one\nI have described above), if need be."]}),"\n",(0,t.jsxs)(n.section,{"data-footnotes":!0,className:"footnotes",children:[(0,t.jsx)(n.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{id:"user-content-fn-1-d4045e",children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.a,{href:"https://vpsfree.cz",children:"vpsFree.cz"})," ",(0,t.jsx)(n.a,{href:"#user-content-fnref-1-d4045e","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,t.jsxs)(n.li,{id:"user-content-fn-2-d4045e",children:["\n",(0,t.jsxs)(n.p,{children:["Even though I've been running archLinux on some Raspberry Pi's and also\non one of my \u201chome servers\u201d, before getting the VPS. You could say I like\nto live on the edge\u2026 ",(0,t.jsx)(n.a,{href:"#user-content-fnref-2-d4045e","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function c(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(h,{...e})}):h(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>i,a:()=>a});var t=o(67294);const r={},s=t.createContext(r);function a(e){const n=t.useContext(s);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:a(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/c90b7ff3.66a8d664.js b/assets/js/c90b7ff3.66a8d664.js new file mode 100644 index 0000000..cf8a279 --- /dev/null +++ b/assets/js/c90b7ff3.66a8d664.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[3602],{44960:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/hype","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/ccc49370.78004ce5.js b/assets/js/ccc49370.b0a72ab4.js similarity index 99% rename from assets/js/ccc49370.78004ce5.js rename to assets/js/ccc49370.b0a72ab4.js index 5b8aa8d..8e36325 100644 --- a/assets/js/ccc49370.78004ce5.js +++ b/assets/js/ccc49370.b0a72ab4.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6103],{65203:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(67294);var i=t(36905),a=t(10833),s=t(35281),o=t(9460),l=t(61460),r=t(30390),c=t(95999),d=t(32244),u=t(85893);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[t&&(0,u.jsx)(d.Z,{...t,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),n&&(0,u.jsx)(d.Z,{...n,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:n}=(0,o.C)(),{title:t,description:i,date:s,tags:l,authors:r,frontMatter:c}=n,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(a.d,{title:t,description:i,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:s}),r.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:r.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var f=t(39407),h=t(22212);function v(e){let{sidebar:n,children:t}=e;const{metadata:i,toc:a}=(0,o.C)(),{nextItem:s,prevItem:c,frontMatter:d,unlisted:g}=i,{hide_table_of_contents:v,toc_min_heading_level:p,toc_max_heading_level:x}=d;return(0,u.jsxs)(l.Z,{sidebar:n,toc:!v&&a.length>0?(0,u.jsx)(f.Z,{toc:a,minHeadingLevel:p,maxHeadingLevel:x}):void 0,children:[g&&(0,u.jsx)(h.Z,{}),(0,u.jsx)(r.Z,{children:t}),(s||c)&&(0,u.jsx)(m,{nextItem:s,prevItem:c})]})}function p(e){const n=e.content;return(0,u.jsx)(o.n,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(a.FG,{className:(0,i.Z)(s.k.wrapper.blogPages,s.k.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(v,{sidebar:e.sidebar,children:(0,u.jsx)(n,{})})]})})}},39407:(e,n,t)=>{t.d(n,{Z:()=>c});t(67294);var i=t(36905),a=t(93743);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=t(85893);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,i.Z)(s.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(a.Z,{...t,linkClassName:l,linkActiveClassName:r})})}},93743:(e,n,t)=>{t.d(n,{Z:()=>h});var i=t(67294),a=t(86668);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const i=t.slice(2,e.level);e.parentIndex=Math.max(...i),t[e.level]=n}));const i=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):i.push(a)})),i}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:i});return function(e){return e.level>=t&&e.level<=i}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function r(e,n){let{anchorTopOffset:t}=n;const i=e.find((e=>l(e).top>=t));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(l(i))?i:e[e.indexOf(i)-1]??null}return e[e.length-1]??null}function c(){const e=(0,i.useRef)(0),{navbar:{hideOnScroll:n}}=(0,a.L)();return(0,i.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,i.useRef)(void 0),t=c();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:s,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const i=[];for(let a=n;a<=t;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:s,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:t.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(39960),m=t(85893);function g(e){let{toc:n,className:t,linkClassName:i,isChild:a}=e;return n.length?(0,m.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:t,linkClassName:i})]},e.id)))}):null}const f=i.memo(g);function h(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const h=(0,a.L)(),v=c??h.tableOfContents.minHeadingLevel,p=u??h.tableOfContents.maxHeadingLevel,x=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>o({toc:s(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:v,maxHeadingLevel:p});return d((0,i.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:v,maxHeadingLevel:p}}),[l,r,v,p])),(0,m.jsx)(f,{toc:x,className:t,linkClassName:l,...g})}},22212:(e,n,t)=>{t.d(n,{Z:()=>g});t(67294);var i=t(36905),a=t(95999),s=t(35742),o=t(85893);function l(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,o.jsx)(s.Z,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(35281),u=t(59047);function m(e){let{className:n}=e;return(0,o.jsx)(u.Z,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,o.jsx)(r,{})})}function g(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(c,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6103],{65203:(e,n,t)=>{t.r(n),t.d(n,{default:()=>p});t(67294);var i=t(36905),a=t(10833),s=t(35281),o=t(9460),l=t(61460),r=t(30390),c=t(95999),d=t(32244),u=t(85893);function m(e){const{nextItem:n,prevItem:t}=e;return(0,u.jsxs)("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,c.I)({id:"theme.blog.post.paginator.navAriaLabel",message:"Blog post page navigation",description:"The ARIA label for the blog posts pagination"}),children:[t&&(0,u.jsx)(d.Z,{...t,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.newerPost",description:"The blog post button label to navigate to the newer/previous post",children:"Newer Post"})}),n&&(0,u.jsx)(d.Z,{...n,subLabel:(0,u.jsx)(c.Z,{id:"theme.blog.post.paginator.olderPost",description:"The blog post button label to navigate to the older/next post",children:"Older Post"}),isNext:!0})]})}function g(){const{assets:e,metadata:n}=(0,o.C)(),{title:t,description:i,date:s,tags:l,authors:r,frontMatter:c}=n,{keywords:d}=c,m=e.image??c.image;return(0,u.jsxs)(a.d,{title:t,description:i,keywords:d,image:m,children:[(0,u.jsx)("meta",{property:"og:type",content:"article"}),(0,u.jsx)("meta",{property:"article:published_time",content:s}),r.some((e=>e.url))&&(0,u.jsx)("meta",{property:"article:author",content:r.map((e=>e.url)).filter(Boolean).join(",")}),l.length>0&&(0,u.jsx)("meta",{property:"article:tag",content:l.map((e=>e.label)).join(",")})]})}var f=t(39407),h=t(22212);function v(e){let{sidebar:n,children:t}=e;const{metadata:i,toc:a}=(0,o.C)(),{nextItem:s,prevItem:c,frontMatter:d,unlisted:g}=i,{hide_table_of_contents:v,toc_min_heading_level:p,toc_max_heading_level:x}=d;return(0,u.jsxs)(l.Z,{sidebar:n,toc:!v&&a.length>0?(0,u.jsx)(f.Z,{toc:a,minHeadingLevel:p,maxHeadingLevel:x}):void 0,children:[g&&(0,u.jsx)(h.Z,{}),(0,u.jsx)(r.Z,{children:t}),(s||c)&&(0,u.jsx)(m,{nextItem:s,prevItem:c})]})}function p(e){const n=e.content;return(0,u.jsx)(o.n,{content:e.content,isBlogPostPage:!0,children:(0,u.jsxs)(a.FG,{className:(0,i.Z)(s.k.wrapper.blogPages,s.k.page.blogPostPage),children:[(0,u.jsx)(g,{}),(0,u.jsx)(v,{sidebar:e.sidebar,children:(0,u.jsx)(n,{})})]})})}},39407:(e,n,t)=>{t.d(n,{Z:()=>c});t(67294);var i=t(36905),a=t(93743);const s={tableOfContents:"tableOfContents_bqdL",docItemContainer:"docItemContainer_F8PC"};var o=t(85893);const l="table-of-contents__link toc-highlight",r="table-of-contents__link--active";function c(e){let{className:n,...t}=e;return(0,o.jsx)("div",{className:(0,i.Z)(s.tableOfContents,"thin-scrollbar",n),children:(0,o.jsx)(a.Z,{...t,linkClassName:l,linkActiveClassName:r})})}},93743:(e,n,t)=>{t.d(n,{Z:()=>h});var i=t(67294),a=t(86668);function s(e){const n=e.map((e=>({...e,parentIndex:-1,children:[]}))),t=Array(7).fill(-1);n.forEach(((e,n)=>{const i=t.slice(2,e.level);e.parentIndex=Math.max(...i),t[e.level]=n}));const i=[];return n.forEach((e=>{const{parentIndex:t,...a}=e;t>=0?n[t].children.push(a):i.push(a)})),i}function o(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:i}=e;return n.flatMap((e=>{const n=o({toc:e.children,minHeadingLevel:t,maxHeadingLevel:i});return function(e){return e.level>=t&&e.level<=i}(e)?[{...e,children:n}]:n}))}function l(e){const n=e.getBoundingClientRect();return n.top===n.bottom?l(e.parentNode):n}function r(e,n){let{anchorTopOffset:t}=n;const i=e.find((e=>l(e).top>=t));if(i){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(l(i))?i:e[e.indexOf(i)-1]??null}return e[e.length-1]??null}function c(){const e=(0,i.useRef)(0),{navbar:{hideOnScroll:n}}=(0,a.L)();return(0,i.useEffect)((()=>{e.current=n?0:document.querySelector(".navbar").clientHeight}),[n]),e}function d(e){const n=(0,i.useRef)(void 0),t=c();(0,i.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:i,linkActiveClassName:a,minHeadingLevel:s,maxHeadingLevel:o}=e;function l(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(i),l=function(e){let{minHeadingLevel:n,maxHeadingLevel:t}=e;const i=[];for(let a=n;a<=t;a+=1)i.push(`h${a}.anchor`);return Array.from(document.querySelectorAll(i.join()))}({minHeadingLevel:s,maxHeadingLevel:o}),c=r(l,{anchorTopOffset:t.current}),d=e.find((e=>c&&c.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,t){t?(n.current&&n.current!==e&&n.current.classList.remove(a),e.classList.add(a),n.current=e):e.classList.remove(a)}(e,e===d)}))}return document.addEventListener("scroll",l),document.addEventListener("resize",l),l(),()=>{document.removeEventListener("scroll",l),document.removeEventListener("resize",l)}}),[e,t])}var u=t(33692),m=t(85893);function g(e){let{toc:n,className:t,linkClassName:i,isChild:a}=e;return n.length?(0,m.jsx)("ul",{className:a?void 0:t,children:n.map((e=>(0,m.jsxs)("li",{children:[(0,m.jsx)(u.Z,{to:`#${e.id}`,className:i??void 0,dangerouslySetInnerHTML:{__html:e.value}}),(0,m.jsx)(g,{isChild:!0,toc:e.children,className:t,linkClassName:i})]},e.id)))}):null}const f=i.memo(g);function h(e){let{toc:n,className:t="table-of-contents table-of-contents__left-border",linkClassName:l="table-of-contents__link",linkActiveClassName:r,minHeadingLevel:c,maxHeadingLevel:u,...g}=e;const h=(0,a.L)(),v=c??h.tableOfContents.minHeadingLevel,p=u??h.tableOfContents.maxHeadingLevel,x=function(e){let{toc:n,minHeadingLevel:t,maxHeadingLevel:a}=e;return(0,i.useMemo)((()=>o({toc:s(n),minHeadingLevel:t,maxHeadingLevel:a})),[n,t,a])}({toc:n,minHeadingLevel:v,maxHeadingLevel:p});return d((0,i.useMemo)((()=>{if(l&&r)return{linkClassName:l,linkActiveClassName:r,minHeadingLevel:v,maxHeadingLevel:p}}),[l,r,v,p])),(0,m.jsx)(f,{toc:x,className:t,linkClassName:l,...g})}},22212:(e,n,t)=>{t.d(n,{Z:()=>g});t(67294);var i=t(36905),a=t(95999),s=t(35742),o=t(85893);function l(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,o.jsx)(a.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,o.jsx)(s.Z,{children:(0,o.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(35281),u=t(59047);function m(e){let{className:n}=e;return(0,o.jsx)(u.Z,{type:"caution",title:(0,o.jsx)(l,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,o.jsx)(r,{})})}function g(e){return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(c,{}),(0,o.jsx)(m,{...e})]})}}}]); \ No newline at end of file diff --git a/assets/js/d05e838c.642ce149.js b/assets/js/d05e838c.642ce149.js new file mode 100644 index 0000000..53a011b --- /dev/null +++ b/assets/js/d05e838c.642ce149.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6544],{63004:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>a,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=r(85893),t=r(11151);const i={id:"seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n"},c=void 0,o={id:"bonuses/seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n",source:"@site/c/bonuses/05-06.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-05-06",permalink:"/c/bonuses/seminar-05-06",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/bonuses/05-06.md",tags:[],version:"current",lastUpdatedAt:1706528814,formattedLastUpdatedAt:"Jan 29, 2024",frontMatter:{id:"seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n"},sidebar:"autogeneratedBar",previous:{title:"4th seminar",permalink:"/c/bonuses/seminar-04"},next:{title:"8th seminar",permalink:"/c/bonuses/seminar-08"}},d={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Task no. 1: Reverse (0.5 K\u20a1)",id:"task-no-1-reverse-05-k",level:3},{value:"Task no. 2: Vigen\xe8re (0.5 K\u20a1)",id:"task-no-2-vigen\xe8re-05-k",level:3},{value:"Bonus part (0.5 K\u20a1)",id:"bonus-part-05-k",level:4},{value:"Task no. 3: Bit madness (0.5 K\u20a1)",id:"task-no-3-bit-madness-05-k",level:3},{value:"Task no. 4: All combined to BMP (0.5 K\u20a1)",id:"task-no-4-all-combined-to-bmp-05-k",level:3},{value:"Submitting",id:"submitting",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"For this bonus you can get at maximum 2.5 K\u20a1."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"pathname:///files/c/bonuses/05-06.tar.gz",children:"Source"})}),"\n",(0,s.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,s.jsx)(n.p,{children:"In this bonus you will implement few functions that will be used together for\nimplementing a very special cipher."}),"\n",(0,s.jsx)(n.h3,{id:"task-no-1-reverse-05-k",children:"Task no. 1: Reverse (0.5 K\u20a1)"}),"\n",(0,s.jsxs)(n.p,{children:["Write a function ",(0,s.jsx)(n.code,{children:"char* reverse(const char* text)"})," that returns copy of the input\nstring in reversed order (also uppercase)."]}),"\n",(0,s.jsxs)(n.p,{children:["In case you are given ",(0,s.jsx)(n.code,{children:"NULL"}),", return ",(0,s.jsx)(n.code,{children:"NULL"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Example (more in tests):"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'char* reversed = reverse("Hello world!");\n\nprintf("%s\\n", reversed);\n// "!DLROW OLLEH"\n\nif (reversed != NULL) {\n free(reversed);\n}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"task-no-2-vigen\xe8re-05-k",children:"Task no. 2: Vigen\xe8re (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"Vigen\xe8re cipher is similar to the Caesar cipher, but you also have a key that is\nused for encrypting (or decrypting)."}),"\n",(0,s.jsx)(n.p,{children:"Your task is to write two functions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"char* vigenere_encrypt(const char* key, const char* text)"})," for encrypting"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"char* vigenere_decrypt(const char* key, const char* text)"})," for decrypting"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"In both of those you should return uppercase characters."}),"\n",(0,s.jsx)(n.p,{children:"Meaning of the parameters you are given:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"key"})," - String that represents key that is used for *crypting. It consists of\none word and can have only characters of the alphabet. Does not matter if they\nare uppercase or lowercase."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"text"})," - String that is to be *crypted."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Function returns address of the encrypted (or decrypted) string. Or ",(0,s.jsx)(n.code,{children:"NULL"})," in case\nerror occurs."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'char *encrypted = vigenere_encrypt("CoMPuTeR", "Hello world!");\n\nprintf("%s\\n", encrypted);\n// "JSXAI PSINR!"\n\nif (encrypted != NULL) {\n free(encrypted)\n}\n'})}),"\n",(0,s.jsx)(n.h4,{id:"bonus-part-05-k",children:"Bonus part (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"If you can utilize helper function that would do both encrypting and decrypting,\nyou can gain 0.5 K\u20a1."}),"\n",(0,s.jsxs)(n.p,{children:["Usage of ",(0,s.jsx)(n.code,{children:"true"}),"/",(0,s.jsx)(n.code,{children:"false"})," to decide path in code is prohibited. It leads to merging\nof both functions into one. Point of this part is to discover a way to do this\ngenerically in such way that there are no separate paths for one or the other. One\nfunction with no branching for both of them, parametrization is your friend :)"]}),"\n",(0,s.jsx)(n.h3,{id:"task-no-3-bit-madness-05-k",children:"Task no. 3: Bit madness (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"This is a state of the art crypto. Please do not share :)"}),"\n",(0,s.jsx)(n.p,{children:"For encrypting:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Split the character that is to be encrypted in halves (4 and 4 bits each)."}),"\n",(0,s.jsx)(n.li,{children:"Bits in 1st half are to be split into pairs. Swap bits in those pairs."}),"\n",(0,s.jsxs)(n.li,{children:["Then use the 4 bits that you created in the 2nd step for ",(0,s.jsx)(n.code,{children:"XOR"})," with the other\n4 bits."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This simple and ingenious principle will be illustrated on the following example.\nString we want to encrypt is ",(0,s.jsx)(n.code,{children:"Hello world!"}),". We need to encrypt each letter separately,\nso we will demonstrate on letter ",(0,s.jsx)(n.code,{children:"H"}),":"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Letter ",(0,s.jsx)(n.code,{children:"H"})," is represented in ASCII as ",(0,s.jsx)(n.code,{children:"72"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"72"})," represented in binary is: ",(0,s.jsx)(n.code,{children:"01001000"}),". So first 4 bits are: ",(0,s.jsx)(n.code,{children:"0100"})," and last\n4 bits are ",(0,s.jsx)(n.code,{children:"1000"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["First half of bits (",(0,s.jsx)(n.code,{children:"0100"}),") consists of 2 pairs (",(0,s.jsx)(n.code,{children:"01"})," and ",(0,s.jsx)(n.code,{children:"00"}),") which we swap\n(",(0,s.jsx)(n.code,{children:"01 ~> 10"})," and ",(0,s.jsx)(n.code,{children:"00 ~> 00"}),"). That way we get ",(0,s.jsx)(n.code,{children:"1000"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"That half is used for xor with the other 4 bits:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:" 1000 // second half\nXOR 1000 // first half after 2nd step\n--------\n 0000\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Now we combine both halves (first one is ",(0,s.jsx)(n.code,{children:"1000"}),", which we got from the 2nd step\nand second one is ",(0,s.jsx)(n.code,{children:"0000"}),", which we got from the 3rd step) and get ",(0,s.jsx)(n.code,{children:"10000000"}),",\nwhich is encrypted character ",(0,s.jsx)(n.code,{children:"H"})," using this method."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"In case of decryption, reverse those steps."}),"\n",(0,s.jsx)(n.p,{children:"Your task is to implement functions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"unsigned char* bit_encrypt(const char* text)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"char* bit_decrypt(const unsigned char* text)"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'unsigned char* encrypted = bit_encrypt("Hello world!");\n\nfor (int i = 0; i < 12;i++) {\n printf("%x ", encrypted[i]);\n //80 9c 95 95 96 11 bc 96 b9 95 9d 10\n}\n\nif (encrypted != NULL) {\n free(encrypted);\n}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"task-no-4-all-combined-to-bmp-05-k",children:"Task no. 4: All combined to BMP (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"Authors of the BMP cipher are non-disclosed :)"}),"\n",(0,s.jsx)(n.p,{children:"Create pair of functions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"unsigned char* bmp_encrypt(const char* key, const char* text)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"char* bmp_decrypt(const char* key, const unsigned char* text)"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"BMP cipher consists of following steps for encrypting:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Reverse the input string"}),"\n",(0,s.jsx)(n.li,{children:"Use Vigenere on the string you got from step #1"}),"\n",(0,s.jsx)(n.li,{children:"Use bit madness on the string you got from step #2"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"For decrypting, reverse the steps."}),"\n",(0,s.jsx)(n.h2,{id:"submitting",children:"Submitting"}),"\n",(0,s.jsx)(n.p,{children:"In case you have any questions, feel free to reach out to me."}),"\n",(0,s.jsx)(n.hr,{})]})}function a(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>o,a:()=>c});var s=r(67294);const t={},i=s.createContext(t);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/d05e838c.ce5946c6.js b/assets/js/d05e838c.ce5946c6.js deleted file mode 100644 index 0a8a2eb..0000000 --- a/assets/js/d05e838c.ce5946c6.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6544],{63004:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>a,frontMatter:()=>i,metadata:()=>o,toc:()=>l});var s=r(85893),t=r(11151);const i={id:"seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n"},c=void 0,o={id:"bonuses/seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n",source:"@site/c/bonuses/05-06.md",sourceDirName:"bonuses",slug:"/bonuses/seminar-05-06",permalink:"/c/bonuses/seminar-05-06",draft:!1,unlisted:!1,editUrl:"https://github.com/mfocko/blog/tree/main/c/bonuses/05-06.md",tags:[],version:"current",lastUpdatedAt:1704571953,formattedLastUpdatedAt:"Jan 6, 2024",frontMatter:{id:"seminar-05-06",title:"5th and 6th seminar",description:"200IQ encryption.\n"},sidebar:"autogeneratedBar",previous:{title:"4th seminar",permalink:"/c/bonuses/seminar-04"},next:{title:"8th seminar",permalink:"/c/bonuses/seminar-08"}},d={},l=[{value:"Introduction",id:"introduction",level:2},{value:"Task no. 1: Reverse (0.5 K\u20a1)",id:"task-no-1-reverse-05-k",level:3},{value:"Task no. 2: Vigen\xe8re (0.5 K\u20a1)",id:"task-no-2-vigen\xe8re-05-k",level:3},{value:"Bonus part (0.5 K\u20a1)",id:"bonus-part-05-k",level:4},{value:"Task no. 3: Bit madness (0.5 K\u20a1)",id:"task-no-3-bit-madness-05-k",level:3},{value:"Task no. 4: All combined to BMP (0.5 K\u20a1)",id:"task-no-4-all-combined-to-bmp-05-k",level:3},{value:"Submitting",id:"submitting",level:2}];function h(e){const n={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",hr:"hr",li:"li",ol:"ol",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.p,{children:"For this bonus you can get at maximum 2.5 K\u20a1."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"pathname:///files/c/bonuses/05-06.tar.gz",children:"Source"})}),"\n",(0,s.jsx)(n.h2,{id:"introduction",children:"Introduction"}),"\n",(0,s.jsx)(n.p,{children:"In this bonus you will implement few functions that will be used together for\nimplementing a very special cipher."}),"\n",(0,s.jsx)(n.h3,{id:"task-no-1-reverse-05-k",children:"Task no. 1: Reverse (0.5 K\u20a1)"}),"\n",(0,s.jsxs)(n.p,{children:["Write a function ",(0,s.jsx)(n.code,{children:"char* reverse(const char* text)"})," that returns copy of the input\nstring in reversed order (also uppercase)."]}),"\n",(0,s.jsxs)(n.p,{children:["In case you are given ",(0,s.jsx)(n.code,{children:"NULL"}),", return ",(0,s.jsx)(n.code,{children:"NULL"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"Example (more in tests):"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'char* reversed = reverse("Hello world!");\n\nprintf("%s\\n", reversed);\n// "!DLROW OLLEH"\n\nif (reversed != NULL) {\n free(reversed);\n}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"task-no-2-vigen\xe8re-05-k",children:"Task no. 2: Vigen\xe8re (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"Vigen\xe8re cipher is similar to the Caesar cipher, but you also have a key that is\nused for encrypting (or decrypting)."}),"\n",(0,s.jsx)(n.p,{children:"Your task is to write two functions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"char* vigenere_encrypt(const char* key, const char* text)"})," for encrypting"]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"char* vigenere_decrypt(const char* key, const char* text)"})," for decrypting"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"In both of those you should return uppercase characters."}),"\n",(0,s.jsx)(n.p,{children:"Meaning of the parameters you are given:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"key"})," - String that represents key that is used for *crypting. It consists of\none word and can have only characters of the alphabet. Does not matter if they\nare uppercase or lowercase."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"text"})," - String that is to be *crypted."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Function returns address of the encrypted (or decrypted) string. Or ",(0,s.jsx)(n.code,{children:"NULL"})," in case\nerror occurs."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'char *encrypted = vigenere_encrypt("CoMPuTeR", "Hello world!");\n\nprintf("%s\\n", encrypted);\n// "JSXAI PSINR!"\n\nif (encrypted != NULL) {\n free(encrypted)\n}\n'})}),"\n",(0,s.jsx)(n.h4,{id:"bonus-part-05-k",children:"Bonus part (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"If you can utilize helper function that would do both encrypting and decrypting,\nyou can gain 0.5 K\u20a1."}),"\n",(0,s.jsxs)(n.p,{children:["Usage of ",(0,s.jsx)(n.code,{children:"true"}),"/",(0,s.jsx)(n.code,{children:"false"})," to decide path in code is prohibited. It leads to merging\nof both functions into one. Point of this part is to discover a way to do this\ngenerically in such way that there are no separate paths for one or the other. One\nfunction with no branching for both of them, parametrization is your friend :)"]}),"\n",(0,s.jsx)(n.h3,{id:"task-no-3-bit-madness-05-k",children:"Task no. 3: Bit madness (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"This is a state of the art crypto. Please do not share :)"}),"\n",(0,s.jsx)(n.p,{children:"For encrypting:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Split the character that is to be encrypted in halves (4 and 4 bits each)."}),"\n",(0,s.jsx)(n.li,{children:"Bits in 1st half are to be split into pairs. Swap bits in those pairs."}),"\n",(0,s.jsxs)(n.li,{children:["Then use the 4 bits that you created in the 2nd step for ",(0,s.jsx)(n.code,{children:"XOR"})," with the other\n4 bits."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["This simple and ingenious principle will be illustrated on the following example.\nString we want to encrypt is ",(0,s.jsx)(n.code,{children:"Hello world!"}),". We need to encrypt each letter separately,\nso we will demonstrate on letter ",(0,s.jsx)(n.code,{children:"H"}),":"]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Letter ",(0,s.jsx)(n.code,{children:"H"})," is represented in ASCII as ",(0,s.jsx)(n.code,{children:"72"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.code,{children:"72"})," represented in binary is: ",(0,s.jsx)(n.code,{children:"01001000"}),". So first 4 bits are: ",(0,s.jsx)(n.code,{children:"0100"})," and last\n4 bits are ",(0,s.jsx)(n.code,{children:"1000"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["First half of bits (",(0,s.jsx)(n.code,{children:"0100"}),") consists of 2 pairs (",(0,s.jsx)(n.code,{children:"01"})," and ",(0,s.jsx)(n.code,{children:"00"}),") which we swap\n(",(0,s.jsx)(n.code,{children:"01 ~> 10"})," and ",(0,s.jsx)(n.code,{children:"00 ~> 00"}),"). That way we get ",(0,s.jsx)(n.code,{children:"1000"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"That half is used for xor with the other 4 bits:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:" 1000 // second half\nXOR 1000 // first half after 2nd step\n--------\n 0000\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Now we combine both halves (first one is ",(0,s.jsx)(n.code,{children:"1000"}),", which we got from the 2nd step\nand second one is ",(0,s.jsx)(n.code,{children:"0000"}),", which we got from the 3rd step) and get ",(0,s.jsx)(n.code,{children:"10000000"}),",\nwhich is encrypted character ",(0,s.jsx)(n.code,{children:"H"})," using this method."]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"In case of decryption, reverse those steps."}),"\n",(0,s.jsx)(n.p,{children:"Your task is to implement functions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"unsigned char* bit_encrypt(const char* text)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"char* bit_decrypt(const unsigned char* text)"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-c",children:'unsigned char* encrypted = bit_encrypt("Hello world!");\n\nfor (int i = 0; i < 12;i++) {\n printf("%x ", encrypted[i]);\n //80 9c 95 95 96 11 bc 96 b9 95 9d 10\n}\n\nif (encrypted != NULL) {\n free(encrypted);\n}\n'})}),"\n",(0,s.jsx)(n.h3,{id:"task-no-4-all-combined-to-bmp-05-k",children:"Task no. 4: All combined to BMP (0.5 K\u20a1)"}),"\n",(0,s.jsx)(n.p,{children:"Authors of the BMP cipher are non-disclosed :)"}),"\n",(0,s.jsx)(n.p,{children:"Create pair of functions:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"unsigned char* bmp_encrypt(const char* key, const char* text)"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"char* bmp_decrypt(const char* key, const unsigned char* text)"})}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"BMP cipher consists of following steps for encrypting:"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsx)(n.li,{children:"Reverse the input string"}),"\n",(0,s.jsx)(n.li,{children:"Use Vigenere on the string you got from step #1"}),"\n",(0,s.jsx)(n.li,{children:"Use bit madness on the string you got from step #2"}),"\n"]}),"\n",(0,s.jsx)(n.p,{children:"For decrypting, reverse the steps."}),"\n",(0,s.jsx)(n.h2,{id:"submitting",children:"Submitting"}),"\n",(0,s.jsx)(n.p,{children:"In case you have any questions, feel free to reach out to me."}),"\n",(0,s.jsx)(n.hr,{})]})}function a(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>o,a:()=>c});var s=r(67294);const t={},i=s.createContext(t);function c(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:c(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/df203c0f.a5b6acbb.js b/assets/js/df203c0f.f951d8f1.js similarity index 99% rename from assets/js/df203c0f.a5b6acbb.js rename to assets/js/df203c0f.f951d8f1.js index fab1716..b787e9f 100644 --- a/assets/js/df203c0f.a5b6acbb.js +++ b/assets/js/df203c0f.f951d8f1.js @@ -1 +1 @@ -"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9924],{59047:(e,n,t)=>{t.d(n,{Z:()=>M});var i=t(67294),s=t(85893);function o(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=i.Children.toArray(e),t=n.find((e=>i.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=n.filter((e=>e!==t)),l=t?.props.children;return{mdxAdmonitionTitle:l,rest:o.length>0?(0,s.jsx)(s.Fragment,{children:o}):null}}(e.children),o=e.title??n;return{...e,...o&&{title:o},children:t}}var l=t(36905),a=t(95999),r=t(35281);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:n,className:t,children:i}=e;return(0,s.jsx)("div",{className:(0,l.Z)(r.k.common.admonition,r.k.common.admonitionType(n),c.admonition,t),children:i})}function u(e){let{icon:n,title:t}=e;return(0,s.jsxs)("div",{className:c.admonitionHeading,children:[(0,s.jsx)("span",{className:c.admonitionIcon,children:n}),t]})}function h(e){let{children:n}=e;return n?(0,s.jsx)("div",{className:c.admonitionContent,children:n}):null}function m(e){const{type:n,icon:t,title:i,children:o,className:l}=e;return(0,s.jsxs)(d,{type:n,className:l,children:[(0,s.jsx)(u,{title:i,icon:t}),(0,s.jsx)(h,{children:o})]})}function g(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,s.jsx)(g,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function x(e){return(0,s.jsx)(m,{...f,...e,className:(0,l.Z)("alert alert--secondary",e.className),children:e.children})}function j(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const p={icon:(0,s.jsx)(j,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,s.jsx)(m,{...p,...e,className:(0,l.Z)("alert alert--success",e.className),children:e.children})}function N(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const Z={icon:(0,s.jsx)(N,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,s.jsx)(m,{...Z,...e,className:(0,l.Z)("alert alert--info",e.className),children:e.children})}function T(e){return(0,s.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const b={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function y(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const z={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const C={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const k={...{note:x,tip:v,info:w,warning:function(e){return(0,s.jsx)(m,{...b,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,s.jsx)(m,{...z,...e,className:(0,l.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,s.jsx)(x,{title:"secondary",...e}),important:e=>(0,s.jsx)(w,{title:"important",...e}),success:e=>(0,s.jsx)(v,{title:"success",...e}),caution:function(e){return(0,s.jsx)(m,{...C,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})}}};function M(e){const n=o(e),t=(i=n.type,k[i]||(console.warn(`No admonition component found for admonition type "${i}". Using Info as fallback.`),k.info));var i;return(0,s.jsx)(t,{...n})}},40491:(e,n,t)=>{t.r(n),t.d(n,{default:()=>j});t(67294);var i=t(36905),s=t(39960),o=t(88824),l=t(10833),a=t(35281),r=t(95999),c=t(90197),d=t(22212),u=t(92503),h=t(85893);function m(e){const n=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,r.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:n}))}();return(0,r.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:n(e.tag.count),tagName:e.tag.label})}function g(e){let{doc:n}=e;return(0,h.jsxs)("article",{className:"margin-vert--lg",children:[(0,h.jsx)(s.Z,{to:n.permalink,children:(0,h.jsx)(u.Z,{as:"h2",children:n.title})}),n.description&&(0,h.jsx)("p",{children:n.description})]})}function f(e){let{title:n}=e;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l.d,{title:n}),(0,h.jsx)(c.Z,{tag:"doc_tag_doc_list"})]})}function x(e){let{tag:n,title:t}=e;return(0,h.jsx)(l.FG,{className:(0,i.Z)(a.k.page.docsTagDocListPage),children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsx)("div",{className:"row",children:(0,h.jsxs)("main",{className:"col col--8 col--offset-2",children:[n.unlisted&&(0,h.jsx)(d.Z,{}),(0,h.jsxs)("header",{className:"margin-bottom--xl",children:[(0,h.jsx)(u.Z,{as:"h1",children:t}),(0,h.jsx)(s.Z,{href:n.allTagsPath,children:(0,h.jsx)(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,h.jsx)("section",{className:"margin-vert--lg",children:n.items.map((e=>(0,h.jsx)(g,{doc:e},e.id)))})]})})})})}function j(e){const n=m(e);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(f,{...e,title:n}),(0,h.jsx)(x,{...e,title:n})]})}},22212:(e,n,t)=>{t.d(n,{Z:()=>m});t(67294);var i=t(36905),s=t(95999),o=t(35742),l=t(85893);function a(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(o.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(35281),u=t(59047);function h(e){let{className:n}=e;return(0,l.jsx)(u.Z,{type:"caution",title:(0,l.jsx)(a,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,l.jsx)(r,{})})}function m(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(h,{...e})]})}},88824:(e,n,t)=>{t.d(n,{c:()=>c});var i=t(67294),s=t(52263);const o=["zero","one","two","few","many","other"];function l(e){return o.filter((n=>e.includes(n)))}const a={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function r(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,i.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:l(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),a}}),[e])}function c(){const e=r();return{selectMessage:(n,t)=>function(e,n,t){const i=e.split("|");if(1===i.length)return i[0];i.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${i.length}: ${e}`);const s=t.select(n),o=t.pluralForms.indexOf(s);return i[Math.min(o,i.length-1)]}(t,n,e)}}}}]); \ No newline at end of file +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[9924],{59047:(e,n,t)=>{t.d(n,{Z:()=>M});var i=t(67294),s=t(85893);function o(e){const{mdxAdmonitionTitle:n,rest:t}=function(e){const n=i.Children.toArray(e),t=n.find((e=>i.isValidElement(e)&&"mdxAdmonitionTitle"===e.type)),o=n.filter((e=>e!==t)),l=t?.props.children;return{mdxAdmonitionTitle:l,rest:o.length>0?(0,s.jsx)(s.Fragment,{children:o}):null}}(e.children),o=e.title??n;return{...e,...o&&{title:o},children:t}}var l=t(36905),a=t(95999),r=t(35281);const c={admonition:"admonition_xJq3",admonitionHeading:"admonitionHeading_Gvgb",admonitionIcon:"admonitionIcon_Rf37",admonitionContent:"admonitionContent_BuS1"};function d(e){let{type:n,className:t,children:i}=e;return(0,s.jsx)("div",{className:(0,l.Z)(r.k.common.admonition,r.k.common.admonitionType(n),c.admonition,t),children:i})}function u(e){let{icon:n,title:t}=e;return(0,s.jsxs)("div",{className:c.admonitionHeading,children:[(0,s.jsx)("span",{className:c.admonitionIcon,children:n}),t]})}function h(e){let{children:n}=e;return n?(0,s.jsx)("div",{className:c.admonitionContent,children:n}):null}function m(e){const{type:n,icon:t,title:i,children:o,className:l}=e;return(0,s.jsxs)(d,{type:n,className:l,children:[(0,s.jsx)(u,{title:i,icon:t}),(0,s.jsx)(h,{children:o})]})}function g(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"})})}const f={icon:(0,s.jsx)(g,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)",children:"note"})};function x(e){return(0,s.jsx)(m,{...f,...e,className:(0,l.Z)("alert alert--secondary",e.className),children:e.children})}function j(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"})})}const p={icon:(0,s.jsx)(j,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)",children:"tip"})};function v(e){return(0,s.jsx)(m,{...p,...e,className:(0,l.Z)("alert alert--success",e.className),children:e.children})}function N(e){return(0,s.jsx)("svg",{viewBox:"0 0 14 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"})})}const Z={icon:(0,s.jsx)(N,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)",children:"info"})};function w(e){return(0,s.jsx)(m,{...Z,...e,className:(0,l.Z)("alert alert--info",e.className),children:e.children})}function T(e){return(0,s.jsx)("svg",{viewBox:"0 0 16 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"})})}const b={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.warning",description:"The default label used for the Warning admonition (:::warning)",children:"warning"})};function y(e){return(0,s.jsx)("svg",{viewBox:"0 0 12 16",...e,children:(0,s.jsx)("path",{fillRule:"evenodd",d:"M5.05.31c.81 2.17.41 3.38-.52 4.31C3.55 5.67 1.98 6.45.9 7.98c-1.45 2.05-1.7 6.53 3.53 7.7-2.2-1.16-2.67-4.52-.3-6.61-.61 2.03.53 3.33 1.94 2.86 1.39-.47 2.3.53 2.27 1.67-.02.78-.31 1.44-1.13 1.81 3.42-.59 4.78-3.42 4.78-5.56 0-2.84-2.53-3.22-1.25-5.61-1.52.13-2.03 1.13-1.89 2.75.09 1.08-1.02 1.8-1.86 1.33-.67-.41-.66-1.19-.06-1.78C8.18 5.31 8.68 2.45 5.05.32L5.03.3l.02.01z"})})}const z={icon:(0,s.jsx)(y,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)",children:"danger"})};const C={icon:(0,s.jsx)(T,{}),title:(0,s.jsx)(a.Z,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)",children:"caution"})};const k={...{note:x,tip:v,info:w,warning:function(e){return(0,s.jsx)(m,{...b,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})},danger:function(e){return(0,s.jsx)(m,{...z,...e,className:(0,l.Z)("alert alert--danger",e.className),children:e.children})}},...{secondary:e=>(0,s.jsx)(x,{title:"secondary",...e}),important:e=>(0,s.jsx)(w,{title:"important",...e}),success:e=>(0,s.jsx)(v,{title:"success",...e}),caution:function(e){return(0,s.jsx)(m,{...C,...e,className:(0,l.Z)("alert alert--warning",e.className),children:e.children})}}};function M(e){const n=o(e),t=(i=n.type,k[i]||(console.warn(`No admonition component found for admonition type "${i}". Using Info as fallback.`),k.info));var i;return(0,s.jsx)(t,{...n})}},40491:(e,n,t)=>{t.r(n),t.d(n,{default:()=>j});t(67294);var i=t(36905),s=t(33692),o=t(88824),l=t(10833),a=t(35281),r=t(95999),c=t(90197),d=t(22212),u=t(92503),h=t(85893);function m(e){const n=function(){const{selectMessage:e}=(0,o.c)();return n=>e(n,(0,r.I)({id:"theme.docs.tagDocListPageTitle.nDocsTagged",description:'Pluralized label for "{count} docs tagged". Use as much plural forms (separated by "|") as your language support (see https://www.unicode.org/cldr/cldr-aux/charts/34/supplemental/language_plural_rules.html)',message:"One doc tagged|{count} docs tagged"},{count:n}))}();return(0,r.I)({id:"theme.docs.tagDocListPageTitle",description:"The title of the page for a docs tag",message:'{nDocsTagged} with "{tagName}"'},{nDocsTagged:n(e.tag.count),tagName:e.tag.label})}function g(e){let{doc:n}=e;return(0,h.jsxs)("article",{className:"margin-vert--lg",children:[(0,h.jsx)(s.Z,{to:n.permalink,children:(0,h.jsx)(u.Z,{as:"h2",children:n.title})}),n.description&&(0,h.jsx)("p",{children:n.description})]})}function f(e){let{title:n}=e;return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(l.d,{title:n}),(0,h.jsx)(c.Z,{tag:"doc_tag_doc_list"})]})}function x(e){let{tag:n,title:t}=e;return(0,h.jsx)(l.FG,{className:(0,i.Z)(a.k.page.docsTagDocListPage),children:(0,h.jsx)("div",{className:"container margin-vert--lg",children:(0,h.jsx)("div",{className:"row",children:(0,h.jsxs)("main",{className:"col col--8 col--offset-2",children:[n.unlisted&&(0,h.jsx)(d.Z,{}),(0,h.jsxs)("header",{className:"margin-bottom--xl",children:[(0,h.jsx)(u.Z,{as:"h1",children:t}),(0,h.jsx)(s.Z,{href:n.allTagsPath,children:(0,h.jsx)(r.Z,{id:"theme.tags.tagsPageLink",description:"The label of the link targeting the tag list page",children:"View All Tags"})})]}),(0,h.jsx)("section",{className:"margin-vert--lg",children:n.items.map((e=>(0,h.jsx)(g,{doc:e},e.id)))})]})})})})}function j(e){const n=m(e);return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(f,{...e,title:n}),(0,h.jsx)(x,{...e,title:n})]})}},22212:(e,n,t)=>{t.d(n,{Z:()=>m});t(67294);var i=t(36905),s=t(95999),o=t(35742),l=t(85893);function a(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.title",description:"The unlisted content banner title",children:"Unlisted page"})}function r(){return(0,l.jsx)(s.Z,{id:"theme.unlistedContent.message",description:"The unlisted content banner message",children:"This page is unlisted. Search engines will not index it, and only users having a direct link can access it."})}function c(){return(0,l.jsx)(o.Z,{children:(0,l.jsx)("meta",{name:"robots",content:"noindex, nofollow"})})}var d=t(35281),u=t(59047);function h(e){let{className:n}=e;return(0,l.jsx)(u.Z,{type:"caution",title:(0,l.jsx)(a,{}),className:(0,i.Z)(n,d.k.common.unlistedBanner),children:(0,l.jsx)(r,{})})}function m(e){return(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(c,{}),(0,l.jsx)(h,{...e})]})}},88824:(e,n,t)=>{t.d(n,{c:()=>c});var i=t(67294),s=t(52263);const o=["zero","one","two","few","many","other"];function l(e){return o.filter((n=>e.includes(n)))}const a={locale:"en",pluralForms:l(["one","other"]),select:e=>1===e?"one":"other"};function r(){const{i18n:{currentLocale:e}}=(0,s.Z)();return(0,i.useMemo)((()=>{try{return function(e){const n=new Intl.PluralRules(e);return{locale:e,pluralForms:l(n.resolvedOptions().pluralCategories),select:e=>n.select(e)}}(e)}catch(n){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${n.message}\n`),a}}),[e])}function c(){const e=r();return{selectMessage:(n,t)=>function(e,n,t){const i=e.split("|");if(1===i.length)return i[0];i.length>t.pluralForms.length&&console.error(`For locale=${t.locale}, a maximum of ${t.pluralForms.length} plural forms are expected (${t.pluralForms.join(",")}), but the message contains ${i.length}: ${e}`);const s=t.select(n),o=t.pluralForms.indexOf(s);return i[Math.min(o,i.length-1)]}(t,n,e)}}}}]); \ No newline at end of file diff --git a/assets/js/f44abc07.3c3d35fa.js b/assets/js/f44abc07.3c3d35fa.js new file mode 100644 index 0000000..aaaf48c --- /dev/null +++ b/assets/js/f44abc07.3c3d35fa.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[2204],{39006:l=>{l.exports=JSON.parse('{"label":"cult","permalink":"/blog/tags/cult","allTagsPath":"/blog/tags","count":1,"unlisted":false}')}}]); \ No newline at end of file diff --git a/assets/js/f71d1f68.da144fe6.js b/assets/js/f71d1f68.da144fe6.js new file mode 100644 index 0000000..926abe0 --- /dev/null +++ b/assets/js/f71d1f68.da144fe6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[6069],{13068:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>r,toc:()=>h});var s=t(85893),o=t(11151);const i={title:"Mixed feelings on Rust",description:"Discussing my mixed feelings about the Rust language.\n",date:new Date("2024-01-28T00:00:00.000Z"),authors:[{key:"mf",title:"a.k.a. passionate language hater"}],tags:["rust","memory safety","cult","hype"],hide_table_of_contents:!1},a=void 0,r={permalink:"/blog/2024/01/28/rust-opinion",editUrl:"https://github.com/mfocko/blog/tree/main/blog/2024-01-28-rust-opinion.md",source:"@site/blog/2024-01-28-rust-opinion.md",title:"Mixed feelings on Rust",description:"Discussing my mixed feelings about the Rust language.\n",date:"2024-01-28T00:00:00.000Z",formattedDate:"January 28, 2024",tags:[{label:"rust",permalink:"/blog/tags/rust"},{label:"memory safety",permalink:"/blog/tags/memory-safety"},{label:"cult",permalink:"/blog/tags/cult"},{label:"hype",permalink:"/blog/tags/hype"}],readingTime:15.395,hasTruncateMarker:!0,authors:[{name:"Matej Focko",email:"me+blog@mfocko.xyz",title:"a.k.a. passionate language hater",url:"https://gitlab.com/mfocko",imageURL:"https://github.com/mfocko.png",key:"mf"}],frontMatter:{title:"Mixed feelings on Rust",description:"Discussing my mixed feelings about the Rust language.\n",date:"2024-01-28T00:00:00.000Z",authors:[{key:"mf",title:"a.k.a. passionate language hater"}],tags:["rust","memory safety","cult","hype"],hide_table_of_contents:!1},unlisted:!1,nextItem:{title:"How can Copr help with broken dependencies",permalink:"/blog/2023/08/02/copr"}},l={authorsImageUrls:[void 0]},h=[{value:"Memory safety",id:"memory-safety",level:2},{value:"Compiler",id:"compiler",level:3},{value:"Enforcing the safety",id:"enforcing-the-safety",level:3},{value:"Consequences",id:"consequences",level:3},{value:"Development & design",id:"development--design",level:2},{value:"Fast development cycle",id:"fast-development-cycle",level:3},{value:"RFCs",id:"rfcs",level:3},{value:"Community and hype train",id:"community-and-hype-train",level:2},{value:"Rust in Linux",id:"rust-in-linux",level:3},{value:"Packaging",id:"packaging",level:2},{value:"Likes",id:"likes",level:2},{value:"Workflow and toolchain",id:"workflow-and-toolchain",level:3},{value:"Standard library",id:"standard-library",level:3},{value:"<code>unsafe</code>",id:"unsafe",level:3},{value:"Traits",id:"traits",level:3},{value:"Influence of functional paradigm",id:"influence-of-functional-paradigm",level:3},{value:"Macros",id:"macros",level:3},{value:"Summary",id:"summary",level:2}];function c(e){const n={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",em:"em",h2:"h2",h3:"h3",img:"img",li:"li",mdxAdmonitionTitle:"mdxAdmonitionTitle",ol:"ol",p:"p",pre:"pre",section:"section",strong:"strong",sup:"sup",ul:"ul",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)(n.p,{children:["Rust has become a rather popular language these days. I've managed to get my\nhands dirty with it during ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.a,{href:"https://adventofcode.com",children:"Advent of Code"})})," \u201822 and partially \u201823. I've also\nused it for few rounds of ",(0,s.jsx)(n.em,{children:(0,s.jsx)(n.a,{href:"https://codeforces.com",children:"Codeforces"})})," and I have to try very hard to maintain\nsome variety of languages for LeetCode challenges along with the Rust. I'll\ndisclaim up front that I won't be only positive, since this post is a result of\nmultiple discussions about Rust and I stand behind\n",(0,s.jsx)(n.em,{children:"\u201cAll that glitters is not gold\u201d"}),", so if you can't stand your favorite language\nbeing criticized in any way, don't even proceed. ","\ud83d\ude09"]}),"\n",(0,s.jsx)(n.h2,{id:"memory-safety",children:"Memory safety"}),"\n",(0,s.jsx)(n.p,{children:"I'll start by kicking the biggest benefit of the language, the memory safety.\nLet's be honest here, majority of the checks rely on the static analysis, cause\nyou can't do anything else during the compile-time, right? Therefore we can\nbasically say that we are relying on the compiler to \u201csolve\u201d all of our issues."}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["I'm not doubting the fact that compiler can prevent ",(0,s.jsx)(n.strong,{children:"a lot"})," of the memory\nerrors, I'm just saying it's not realistic to cover ",(0,s.jsx)(n.strong,{children:"everything"}),"."]})}),"\n",(0,s.jsx)(n.h3,{id:"compiler",children:"Compiler"}),"\n",(0,s.jsxs)(n.p,{children:["I guess we can safely",(0,s.jsx)(n.sup,{children:(0,s.jsx)(n.a,{href:"#user-content-fn-2-e21849",id:"user-content-fnref-2-e21849","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," agree on the fact that we 100% rely on the compiler to\n",(0,s.jsx)(n.em,{children:"have our back"}),". Is the compiler bug-free? I doubt it. This is not meant in an\noffensive way to the Rust compiler developers, but we need to be realistic here.\nIt's a compiler, even older and larger projects like ",(0,s.jsx)(n.em,{children:"gcc"})," or ",(0,s.jsx)(n.em,{children:"llvm"})," can't avoid\nbugs to appear."]}),"\n",(0,s.jsxs)(n.p,{children:["When I was trying out Rust for some of the LeetCode challenges I've stumbled\nupon the following warning:\n",(0,s.jsx)(n.img,{src:"https://i.imgur.com/NfPLF6o.png",alt:"Example of a compiler bug"})]}),"\n",(0,s.jsxs)(n.admonition,{type:"danger",children:[(0,s.jsx)(n.mdxAdmonitionTitle,{children:(0,s.jsx)(n.a,{href:"https://github.com/rust-lang/rust/issues/59159",children:"Issue"})}),(0,s.jsx)(n.p,{children:"The issue here comes from the fact that we have 2 simultaneous references to the\nsame memory (one is mutable and one immutable). If you cannot think of any way\nthis can break, I'll give you a rather simple example from C++ where this could\ncause an issue."}),(0,s.jsx)(n.p,{children:"Imagine a function that has some complex object and also calls a coroutine which\nutilizes read-only reference to that object. When the coroutine suspends, the\ncaller can modify the object. This can break the integrity of data read by the\ncoroutine."}),(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Yes, this ",(0,s.jsx)(n.strong,{children:"can"})," cause a memory error."]}),"\n",(0,s.jsxs)(n.li,{children:["Yes, this ",(0,s.jsx)(n.strong,{children:"hasn't"})," been handled until someone noticed it."]}),"\n"]}),(0,s.jsx)(n.p,{children:"Fixing this bug is not backwards compatible, cause you're covering a case that\nhasn't been covered before."})]}),"\n",(0,s.jsx)(n.h3,{id:"enforcing-the-safety",children:"Enforcing the safety"}),"\n",(0,s.jsxs)(n.p,{children:["One of the ways Rust enforces the safety is by restricting what you can do, like\nthe example above. Aforementioned issue ",(0,s.jsx)(n.em,{children:"can"})," happen, but ",(0,s.jsx)(n.strong,{children:"doesn't have to"}),".\nRule of the thumb in the Rust compiler is to ",(0,s.jsx)(n.em,{children:"\u201cblock\u201d"})," anything that can be an\nissue, static analysis can't do much more, it cannot decide whether it's safe to\ndo it or not."]}),"\n",(0,s.jsxs)(n.p,{children:["Satisfying the Rust compiler is sometimes a brutal pain in the ass, because you\ncannot do things like you're used to, you need to work around them ",(0,s.jsx)(n.em,{children:"somehow"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{type:"tip",children:[(0,s.jsxs)(n.p,{children:["Key difference between Rust and C or C++ lies in the fact that Rust chooses to\n",(0,s.jsx)(n.em,{children:"ban"})," all \u201cpotentially offensive\u201d actions, C and C++ ",(0,s.jsx)(n.em,{children:"relies"})," on ",(0,s.jsx)(n.strong,{children:"you"})," to be\nsure it's safe to do."]}),(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{src:"https://i.imgur.com/0vbkYPp.png",alt:"C++ v. Rust"})})]}),"\n",(0,s.jsx)(n.h3,{id:"consequences",children:"Consequences"}),"\n",(0,s.jsx)(n.p,{children:"Where are we heading with this approach of \u201cif it compiles, it runs\u201d though?\nIn this aspect I have a rather similar opinion as with regards to the ChatGPT\nand its derivatives."}),"\n",(0,s.jsxs)(n.p,{children:["If you teach people to 100% depend on the compiler, they will do it, cause it's\n",(0,s.jsx)(n.em,{children:"easy"}),". All you need to do is make the compiler ",(0,s.jsx)(n.em,{children:"shut up"}),(0,s.jsx)(n.sup,{children:(0,s.jsx)(n.a,{href:"#user-content-fn-3-e21849",id:"user-content-fnref-3-e21849","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"2"})}),". Giving up the\n",(0,s.jsx)(n.em,{children:"intellectual masturbation"})," about the memory safety will make you lose your edge\nover the time. When we get to the point of everyone being in the mindset\nmentioned above, who's going to maintain the compiler? This is the place where\nyou ",(0,s.jsx)(n.strong,{children:"need to"})," think about the memory safety and furthermore in a much more\ngeneral way than in your own projects, because it is the thing that everyone\n",(0,s.jsx)(n.em,{children:"blindly believes in"})," in the end."]}),"\n",(0,s.jsxs)(n.p,{children:["I'm not saying that everyone should give up Rust and think about their memory\nmanagement and potential memory issues. I'm just saying that going the easy way\nwill make people ",(0,s.jsx)(n.em,{children:"dull"})," and they should think about it anyways, that's how the\nissue above has been discovered. If everyone walked past and didn't think about\nit, no one would discover this issue till it bit them hard."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Standard library",type:"tip",children:[(0,s.jsxs)(n.p,{children:["Even the standard library is littered with ",(0,s.jsx)(n.code,{children:"unsafe"})," blocks that are prefixed\nwith comments in style:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-rs",children:"// SAFETY: \u2026\n"})}),(0,s.jsxs)(n.p,{children:["The fact that the ",(0,s.jsx)(n.em,{children:"casual"})," Rust dev doesn't have to think much about safety,\ncause the compiler has their back, doesn't mean that the Rust compiler dev\ndoesn't either."]}),(0,s.jsxs)(n.p,{children:["I gotta admit that I adopted this concept in other languages (even in Python),\ncause you can encounter situations where it doesn't have to be clear ",(0,s.jsx)(n.em,{children:"why"})," you\ncan do ",(0,s.jsx)(n.em,{children:"what"})," you're doing."]})]}),"\n",(0,s.jsx)(n.h2,{id:"development--design",children:"Development & design"}),"\n",(0,s.jsx)(n.p,{children:"Development of Rust is\u2026 very fast. One positive is that they're trying to be as\nbackward compatible as possible at least by verifying against all the published\ncrates in the process. Of course, you cannot be backward compatible about fixing\nthe bugs that have been found, but such is life."}),"\n",(0,s.jsx)(n.h3,{id:"fast-development-cycle",children:"Fast development cycle"}),"\n",(0,s.jsx)(n.p,{children:"One of the negatives of the fast development cycle is the fact that they're\nusing the latest features already in the next release of the Rust. Yes, it is\nsomething that you can use for verifying and testing your own changes, but at\nthe same time it places a requirement of the latest release to compile the next\none."}),"\n",(0,s.jsx)(n.admonition,{type:"tip",children:(0,s.jsxs)(n.p,{children:["If you check ",(0,s.jsx)(n.code,{children:"gcc"})," for example, they have a requirement of minimal version of\ncompiler that you need for the build. Though gcc's requirement is not so ",(0,s.jsx)(n.em,{children:"needy"}),"\nas the Rust one."]})}),"\n",(0,s.jsx)(n.p,{children:"One of the other negatives is the introduction of bugs. If you're pushing\nchanges, somewhat mindlessly, at such a fast pace, it is inevitable to introduce\na bunch bugs in the process. Checking the GitHub issue tracker with"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"is:issue is:open label:C-bug label:T-compiler\n"})}),"\n",(0,s.jsxs)(n.p,{children:["yields ",(0,s.jsx)(n.strong,{children:"2,224"})," open issues at the time of writing this post."]}),"\n",(0,s.jsx)(n.h3,{id:"rfcs",children:"RFCs"}),"\n",(0,s.jsxs)(n.p,{children:["You can find ",(0,s.jsx)(n.strong,{children:"a lot"})," of RFCs for the Rust. Some of them are more questionable\nthan the others. Fun thing is that a lot of them make it to the nightly builds,\nso they can be tested and polished off. Even the questionable ones\u2026 I'll leave\nfew examples for a better understanding."]}),"\n",(0,s.jsxs)(n.p,{children:["One of such features is the ",(0,s.jsx)(n.code,{children:"do yeet"})," expression:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-rust",children:"#![feature(yeet_expr)]\n\nfn foo() -> Result<String, i32> {\n do yeet 4;\n}\nassert_eq!(foo(), Err(4));\n\nfn bar() -> Option<String> {\n do yeet;\n}\nassert_eq!(bar(), None);\n"})}),"\n",(0,s.jsxs)(n.p,{children:["It allows you to \u201cyeet\u201d the errors out of the functions that return ",(0,s.jsx)(n.code,{children:"Result"})," or\n",(0,s.jsx)(n.code,{children:"Option"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://github.com/rust-lang/rfcs/pull/3503",children:"One"})," of the more recent ones is\nthe ability to include Cargo manifests into the sources, so you can do something\nlike:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-rust",children:'#!/usr/bin/env cargo\n---\n[dependencies]\nclap = { version = "4.2", features = ["derive"] }\n---\n\nuse clap::Parser;\n\n#[derive(Parser, Debug)]\n#[clap(version)]\nstruct Args {\n #[clap(short, long, help = "Path to config")]\n config: Option<std::path::PathBuf>,\n}\n\nfn main() {\n let args = Args::parse();\n println!("{:?}", args);\n}\n'})}),"\n",(0,s.jsx)(n.p,{children:"I would say you can get almost anything into the language\u2026"}),"\n",(0,s.jsx)(n.h2,{id:"community-and-hype-train",children:"Community and hype train"}),"\n",(0,s.jsxs)(n.p,{children:["Rust community is a rather unique thing. A lot of people will hate me for this,\nbut I can't help, but to compare them to ",(0,s.jsx)(n.em,{children:"militant vegans"}),". I'll go through some\nof the things related to it, so I can support my opinion at least."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Rust is the best language."})," It is not. There is no best language, each has its\nown positives and negatives, you need to choose the language that's ",(0,s.jsx)(n.strong,{children:"the most"}),"\n",(0,s.jsx)(n.strong,{children:"suitable for your use case"}),". There are areas where Rust excels, though I have\nto admit it's very close to being a universal hammer regardless of how suitable\nit is. There is a very steep learning curve to it, beginnings in Rust are very\npainful."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Rewrite everything in Rust."})," Just no. There are multiple feedbacks on doing\nrewrites, it is very common to fix ",(0,s.jsx)(n.em,{children:"N"})," bugs with a rewrite while introducing\n",(0,s.jsx)(n.em,{children:"N + 1"})," other bugs in the process. It doesn't solve anything unless there are\nsome strong reasons to go with it. Majority of such suggested rewrites don't\nhave those reasons though."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.em,{children:"Language \u2039x\u203a is bad, though in Rust\u2026"})," Cherry-picking one specific pain point of\none language and reflecting how it is better in other language can go both ways.\nFor example it is rather easy to pick the limitations imposed by Rust compiler\nand show how it's possible in other languages ","\ud83e\udd37\u200d\u2642\ufe0f"]}),"\n",(0,s.jsx)(n.p,{children:"I don't mind any of those opinions, you're free to have them, as long as you\ndon't rub them in my face which is not the usual case\u2026 This experience makes it\njust worse for me, part of this post may be also influenced by this fact."}),"\n",(0,s.jsx)(n.h3,{id:"rust-in-linux",children:"Rust in Linux"}),"\n",(0,s.jsx)(n.admonition,{type:"caution",children:(0,s.jsx)(n.p,{children:"As someone who has seen the way Linux kernel is built in the RHEL ecosystem, how\ncomplex the whole thing is and how much resources you need to proceed, I have\nvery strong opinions on this topic."})}),"\n",(0,s.jsx)(n.p,{children:"It took years of work to even \u201cincorporate\u201d Rust into the Linux codebase, just\nto get the \u201cHello World!\u201d. I don't have anything against the idea of writing\ndrivers in the Rust, I bet it can catch a lot of common mistakes, but still\nintroducing Rust to the kernel is another step to enlarge the monster."}),"\n",(0,s.jsxs)(n.p,{children:["I have to admit though that the ",(0,s.jsx)(n.em,{children:"Apple GPU"})," driver for Linux written in Rust is\nquite impressive. Apart from that there are not so many benefits, yet\u2026"]}),"\n",(0,s.jsx)(n.h2,{id:"packaging",children:"Packaging"}),"\n",(0,s.jsx)(n.p,{children:"I'll divide the packaging into the packaging of the language itself and the\nprograms written in Rust."}),"\n",(0,s.jsxs)(n.p,{children:["Let's start with the ",(0,s.jsx)(n.code,{children:"cargo"})," itself though. Package managers of the languages\nusually get a lot of hate (you can take ",(0,s.jsx)(n.code,{children:"npm"})," or ",(0,s.jsx)(n.code,{children:"pip"})," as examples",(0,s.jsx)(n.sup,{children:(0,s.jsx)(n.a,{href:"#user-content-fn-1-e21849",id:"user-content-fnref-1-e21849","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"3"})}),"). If\nyou've ever tried out Rust, I bet you already know where I'm going with this.\nYes, I mean the compilation times, or even Cargo downloading ",(0,s.jsx)(n.em,{children:"whole"})," index of\ncrates just so you can update that one dependency (and 3 millions of indirect\ndeps). When I was doing AoC \u201822 in Rust, I've set up ",(0,s.jsx)(n.code,{children:"sccache"})," right away on the\nfirst day."]}),"\n",(0,s.jsxs)(n.p,{children:["Let's move to the packaging of the Rust itself, it's tedious. Rust has a very\nfast development cycle and doesn't even try to make the builds backward\ncompatible. If there is a new release of Rust, there is a very high chance that\nyou cannot build that release with anything other than ",(0,s.jsx)(n.strong,{children:"the latest"})," Rust\nrelease. If you have ever touched the packaging, you know that this is something\nthat can cause a lot of problems, cause you need the second-to-latest version to\ncompile the latest version, don't forget that this applies inductively\u2026 People\nrunning ",(0,s.jsx)(n.em,{children:"Gentoo"})," could tell you a lot about this."]}),"\n",(0,s.jsx)(n.admonition,{type:"info",children:(0,s.jsx)(n.p,{children:"Compiling the compilers takes usually more time than compiling the kernel\nitself\u2026"})}),"\n",(0,s.jsxs)(n.p,{children:["I cannot speak about packaging of Rust programs in other than RHEL-based\ndistros, though I can speak about RHEL ecosystem. Fedora packaging guidelines\nspecify that you need to build each and every dependency of the program\nseparately. I wanted to try out ",(0,s.jsx)(n.em,{children:"AlmaLinux"})," and install Alacritty there and I\nfailed miserably. The solution that worked, consisted of ignoring the packaging\nguidelines, running ",(0,s.jsx)(n.code,{children:"cargo build"})," and consuming the binaries afterwards.\nDependencies of the Rust programs are of a similar nature as JS dependencies."]}),"\n",(0,s.jsxs)(n.blockquote,{children:["\n",(0,s.jsxs)(n.p,{children:["I'm tipping my fedora",(0,s.jsx)(n.sup,{children:(0,s.jsx)(n.a,{href:"#user-content-fn-2-e21849",id:"user-content-fnref-2-e21849-2","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"1"})})," in the general direction of the maintainers of Rust\npackages in RHEL ecosystem. I wouldn't be able to do this without losing my\nsanity."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"likes",children:"Likes"}),"\n",(0,s.jsxs)(n.p,{children:["If you've come all the way here and you're a Rustacean, I believe I've managed\nto get your blood boiling, so it's time to finish this off by stuff I like about\nRust. I doubt I will be able to cover everything, but I can try at least. You\nhave to admit it's much easier to remember the bad stuff as opposed to the good.\n","\ud83d\ude09"]}),"\n",(0,s.jsx)(n.h3,{id:"workflow-and-toolchain",children:"Workflow and toolchain"}),"\n",(0,s.jsxs)(n.p,{children:["I prefered using Rust for the ",(0,s.jsx)(n.em,{children:"Advent of Code"})," and ",(0,s.jsx)(n.em,{children:"Codeforces"})," as it provides\na rather easy way to test the solutions before running them with the challenge\ninput (or test runner). I can give an example from the ",(0,s.jsx)(n.em,{children:"Advent of Code"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-rust",children:"use aoc_2023::*;\n\ntype Output1 = i32;\ntype Output2 = Output1;\n\nstruct DayXX {}\nimpl Solution<Output1, Output2> for DayXX {\n fn new<P: AsRef<Path>>(pathname: P) -> Self {\n let lines: Vec<String> = file_to_lines(pathname);\n\n todo!()\n }\n\n fn part_1(&mut self) -> Output1 {\n todo!()\n }\n\n fn part_2(&mut self) -> Output2 {\n todo!()\n }\n}\n\nfn main() -> Result<()> {\n DayXX::main()\n}\n\ntest_sample!(day_XX, DayXX, 42, 69);\n"})}),"\n",(0,s.jsx)(n.p,{children:"This was the skeleton I've used and the macro at the end is my own creation that\nexpands to:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-rust",children:"#[cfg(test)]\nmod day_XX {\n use super::*;\n\n #[test]\n fn part_1() {\n let path = DayXX::get_sample(1);\n let mut day = DayXX::new(path);\n assert_eq!(day.part_1(), 42);\n }\n\n #[test]\n fn part_2() {\n let path = DayXX::get_sample(2);\n let mut day = DayXX::new(path);\n assert_eq!(day.part_2(), 69);\n }\n}\n"})}),"\n",(0,s.jsxs)(n.p,{children:["When you're solving the problem, all you need to do is switch between\n",(0,s.jsx)(n.code,{children:"cargo test"})," and ",(0,s.jsx)(n.code,{children:"cargo run"})," to check the answer to either sample or the\nchallenge input itself."]}),"\n",(0,s.jsxs)(n.p,{children:["Introduce ",(0,s.jsx)(n.a,{href:"https://dystroy.org/bacon/",children:"bacon"})," and it gets even better. Bacon is a CLI tool that wraps around\nthe ",(0,s.jsx)(n.code,{children:"cargo"})," and allows you to check, run, lint or run tests on each file save.\nIt's a very pleasant thing for a so-called ",(0,s.jsx)(n.em,{children:"compiler-assisted"})," development."]}),"\n",(0,s.jsxs)(n.p,{children:["Speaking of linting from within the bacon, you cannot leave out the ",(0,s.jsx)(n.a,{href:"https://github.com/rust-lang/rust-clippy",children:"clippy"}),".\nNot only it can whip your ass because of errors, but it can also produce a lot\nof helpful suggestions, for example passing slices by borrow instead of\nborrowing the ",(0,s.jsx)(n.code,{children:"Vec"})," itself when you don't need it."]}),"\n",(0,s.jsx)(n.h3,{id:"standard-library",children:"Standard library"}),"\n",(0,s.jsxs)(n.p,{children:["There's ",(0,s.jsx)(n.strong,{children:"a lot"})," included in the standard library. It almost feels like you\nhave all you need",(0,s.jsx)(n.sup,{children:(0,s.jsx)(n.a,{href:"#user-content-fn-4-e21849",id:"user-content-fnref-4-e21849","data-footnote-ref":!0,"aria-describedby":"footnote-label",children:"4"})}),". I like placeholders (like ",(0,s.jsx)(n.code,{children:"todo!()"}),", ",(0,s.jsx)(n.code,{children:"unreachable!()"}),",\n",(0,s.jsx)(n.code,{children:"unimplemented!()"}),") to the extent of\n",(0,s.jsx)(n.a,{href:"/cpp/exceptions-and-raii/placeholders",children:"implementing"})," them as exceptions in C++."]}),"\n",(0,s.jsx)(n.p,{children:"You can find almost anything. Though you can also hit some very weird issues\nwith some of the nuances of the type system."}),"\n",(0,s.jsx)(n.h3,{id:"unsafe",children:(0,s.jsx)(n.code,{children:"unsafe"})}),"\n",(0,s.jsxs)(n.p,{children:["This might be something that people like to avoid as much as possible. However I\nthink that forming a habit of commenting posibly unsafe operations in ",(0,s.jsx)(n.strong,{children:"any"}),"\nlanguage is a good habit, as I've mentioned above. You should be able to argue\nwhy you can do something safely, even if the compiler is not kicking your ass\nbecause of it."]}),"\n",(0,s.jsx)(n.p,{children:"Excerpt of such comment from work:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-py",children:"# SAFETY: Taking first package instead of specific package should be\n# safe, since we have put a requirement on \xbbone\xab \u2039upstream_project_url\u203a\n# per Packit config, i.e. even if we're dealing with a monorepo, there\n# is only \xbbone\xab upstream. If there is one upstream, there is only one\n# set of GPG keys that can be allowed.\nreturn self.downstream_config.packages[\n self.downstream_config._first_package\n].allowed_gpg_keys\n"})}),"\n",(0,s.jsx)(n.h3,{id:"traits",children:"Traits"}),"\n",(0,s.jsxs)(n.p,{children:["One of the other things I like are the traits. They are more restrictive than\ntemplates or concepts in C++, but they're doing their job pretty good. If you\nare building library and require multiple traits to be satisfied it means a lot\nof copy-paste, but that's soon to be fixed by the ",(0,s.jsx)(n.a,{href:"https://github.com/rust-lang/rfcs/blob/master/text/1733-trait-alias.md",children:"trait aliases"}),"."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Comparing to other languages",type:"tip",children:[(0,s.jsxs)(n.p,{children:["On Wikipedia I've seen trait being defined as a more restrictive type class as\nyou may know it from the Haskell for example. C++ isn't behind either with its\n",(0,s.jsx)(n.em,{children:"constraints and concepts"}),". I would say that we can order them in the following\norder based on the complexity they can express:"]}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"Rust's trait < Haskell's type class < C++'s concept\n"})})]}),"\n",(0,s.jsxs)(n.p,{children:["You can also hit some issues, like me when trying to support conversions between\nunderlying numeric types of a 2D vectors or support for using an operator from\nboth sides (I couldn't get ",(0,s.jsx)(n.code,{children:"c * u"})," to work in the same way as ",(0,s.jsx)(n.code,{children:"u * c"})," because\nthe first one requires you to implement the trait of a built-in type)."]}),"\n",(0,s.jsxs)(n.admonition,{title:"Implementation",type:"warning",children:[(0,s.jsx)(n.p,{children:"Implementing traits lies in"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-rust",children:"impl SomeTrait for SomeStruct {\n // implementation goes here\n}\n"})}),(0,s.jsxs)(n.p,{children:["One of the things I ",(0,s.jsx)(n.strong,{children:"would love to"})," see is being able to define the helper\nfunctions within the same block. As of now, the only things allowed are the ones\nthat are required by the trait, which in the end results in a randomly lying\nfunctions around (or in a implementation of the structure itself). I don't like\nthis mess at all\u2026"]})]}),"\n",(0,s.jsx)(n.h3,{id:"influence-of-functional-paradigm",children:"Influence of functional paradigm"}),"\n",(0,s.jsxs)(n.p,{children:["You can see a big influence of the functional paradigm. Not only in iterators,\nbut also in the other parts of the language. For example I prefer ",(0,s.jsx)(n.code,{children:"Option<T>"})," or\n",(0,s.jsx)(n.code,{children:"Result<T, E>"})," to ",(0,s.jsx)(n.code,{children:"null"}),"s and exceptions. Pattern matching together with\ncompiler both enforces handling of the errors and rather user-friendly way of\ndoing it."]}),"\n",(0,s.jsxs)(n.p,{children:["Not to mention ",(0,s.jsx)(n.code,{children:".and_then()"})," and such. However spending most of the time with\nthe AoC you get pretty annoyed of the repetitive ",(0,s.jsx)(n.code,{children:".unwrap()"})," during parsing,\nsince you are guaranteed correct input."]}),"\n",(0,s.jsx)(n.h3,{id:"macros",children:"Macros"}),"\n",(0,s.jsx)(n.p,{children:"Macros are a very strong pro of the Rust. And no, we're not going to talk about\nthe procedural macros\u2026"}),"\n",(0,s.jsx)(n.p,{children:"As I've shown above I've managed to \u201ctame\u201d a lot of copy-paste in the tests for\nthe AoC by utilizing a macro that generated a very basic template for the tests."}),"\n",(0,s.jsxs)(n.p,{children:["As I have mentioned the traits above, I cannot forget to give props to ",(0,s.jsx)(n.code,{children:"derive"}),"\nmacro that allows you to \u201cdeduce\u201d the default implementation. It is very helpful\nfor a tedious tasks like implementing ",(0,s.jsx)(n.code,{children:"Debug"})," (for printing out the structures)\nor comparisons, though with the comparisons you need to be careful about the\ndefault implementation, it has already bitten me once or twice."]}),"\n",(0,s.jsx)(n.h2,{id:"summary",children:"Summary"}),"\n",(0,s.jsxs)(n.p,{children:["Overall there are many things about the Rust I like and would love to see them\nimplemented in other languages. However there are also many things I don't like.\nNothing is ",(0,s.jsx)(n.strong,{children:"exclusively"})," black and white."]}),"\n",(0,s.jsxs)(n.section,{"data-footnotes":!0,className:"footnotes",children:[(0,s.jsx)(n.h2,{className:"sr-only",id:"footnote-label",children:"Footnotes"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{id:"user-content-fn-2-e21849",children:["\n",(0,s.jsxs)(n.p,{children:["pun intended ",(0,s.jsx)(n.a,{href:"#user-content-fnref-2-e21849","data-footnote-backref":"","aria-label":"Back to reference 1",className:"data-footnote-backref",children:"\u21a9"})," ",(0,s.jsxs)(n.a,{href:"#user-content-fnref-2-e21849-2","data-footnote-backref":"","aria-label":"Back to reference 1-2",className:"data-footnote-backref",children:["\u21a9",(0,s.jsx)(n.sup,{children:"2"})]})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{id:"user-content-fn-3-e21849",children:["\n",(0,s.jsxs)(n.p,{children:["It's not that easy with the Rust compiler, but OK\u2026 ",(0,s.jsx)(n.a,{href:"#user-content-fnref-3-e21849","data-footnote-backref":"","aria-label":"Back to reference 2",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{id:"user-content-fn-1-e21849",children:["\n",(0,s.jsxs)(n.p,{children:["not to even mention multiple different packaging standards Python has, which\nis borderline ",(0,s.jsx)(n.a,{href:"https://xkcd.com/927/",children:"https://xkcd.com/927/"})," ",(0,s.jsx)(n.a,{href:"#user-content-fnref-1-e21849","data-footnote-backref":"","aria-label":"Back to reference 3",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{id:"user-content-fn-4-e21849",children:["\n",(0,s.jsxs)(n.p,{children:["unlike Python where there's whole universe in the language itself, yet there\nare essential things not present\u2026 ",(0,s.jsx)(n.a,{href:"#user-content-fnref-4-e21849","data-footnote-backref":"","aria-label":"Back to reference 4",className:"data-footnote-backref",children:"\u21a9"})]}),"\n"]}),"\n"]}),"\n"]})]})}function d(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>r,a:()=>a});var s=t(67294);const o={},i=s.createContext(o);function a(e){const n=s.useContext(i);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),s.createElement(i.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/f7d29e9b.8fd5a1ab.js b/assets/js/f7d29e9b.8fd5a1ab.js new file mode 100644 index 0000000..8e843e1 --- /dev/null +++ b/assets/js/f7d29e9b.8fd5a1ab.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkfi=self.webpackChunkfi||[]).push([[7959],{89266:e=>{e.exports=JSON.parse('{"permalink":"/blog/tags/memory-safety","page":1,"postsPerPage":10,"totalPages":1,"totalCount":1,"blogDescription":"Blog","blogTitle":"Blog"}')}}]); \ No newline at end of file diff --git a/assets/js/main.034f2fcf.js b/assets/js/main.034f2fcf.js deleted file mode 100644 index a28420c..0000000 --- a/assets/js/main.034f2fcf.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see main.034f2fcf.js.LICENSE.txt */ -(self.webpackChunkfi=self.webpackChunkfi||[]).push([[179],{20830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(67294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(67294);var r=n(68356),a=n.n(r),o=n(16887);const i={"0123bc76":[()=>n.e(3734).then(n.t.bind(n,76554,19)),"~docs/algorithms/tag-algorithms-tags-c-e22.json",76554],"0178f9ad":[()=>n.e(9898).then(n.bind(n,35610)),"@site/algorithms/08-rb-trees/2022-04-05-applications.md",35610],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,24524)),"@theme/BlogTagsListPage",24524],"0220f5fc":[()=>n.e(1378).then(n.t.bind(n,85804,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-blog/blog/plugin-route-context-module-100.json",85804],"0608d96f":[()=>n.e(7568).then(n.t.bind(n,77158,19)),"~blog/blog/blog-tags-vps-843-list.json",77158],"06c4a8fc":[()=>n.e(2125).then(n.t.bind(n,4697,19)),"~docs/algorithms/tag-algorithms-tags-testing-0c4.json",4697],"087808f1":[()=>n.e(3731).then(n.bind(n,48157)),"@site/algorithms/12-hash-tables/2023-11-28-breaking/index.md",48157],"08dfa3a2":[()=>n.e(2606).then(n.t.bind(n,32412,19)),"~docs/algorithms/tag-algorithms-tags-astar-f6e.json",32412],"0bfe45d5":[()=>n.e(4269).then(n.t.bind(n,13847,19)),"~blog/blog/blog-tags-rust-0c9-list.json",13847],"0fcbc6ca":[()=>Promise.all([n.e(532),n.e(1851)]).then(n.bind(n,39900)),"@site/src/pages/talks.tsx",39900],"146d9b84":[()=>n.e(9300).then(n.t.bind(n,96671,19)),"~blog/blog/blog-tags-admin-b05-list.json",96671],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,34228)),"@theme/DocCategoryGeneratedIndexPage",34228],"1535ede8":[()=>n.e(5376).then(n.bind(n,44969)),"@site/c/bonuses/10.md",44969],15966941:[()=>n.e(8326).then(n.bind(n,16721)),"@site/algorithms/12-hash-tables/2023-11-28-breaking/02-mitigations.md",16721],"16cbc838":[()=>n.e(1494).then(n.t.bind(n,98252,19)),"~docs/algorithms/tag-algorithms-tags-iterative-d5b.json",98252],17896441:[()=>Promise.all([n.e(532),n.e(1325),n.e(7918)]).then(n.bind(n,15154)),"@theme/DocItem",15154],"19d7c045":[()=>n.e(4637).then(n.t.bind(n,67772,19)),"~blog/blog/blog-tags-advent-of-code-49f.json",67772],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,48852)),"@theme/SearchPage",48852],"1a606400":[()=>n.e(494).then(n.t.bind(n,82400,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/algorithms/plugin-route-context-module-100.json",82400],"1acf65cc":[()=>n.e(8529).then(n.bind(n,34568)),"@site/c/pexam/b-garbage_collect.md",34568],"1cd58e77":[()=>n.e(1547).then(n.bind(n,32090)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/04-bottom-up-dp.md",32090],"22a175ec":[()=>Promise.all([n.e(532),n.e(6890)]).then(n.bind(n,40707)),"@site/src/pages/contributions.tsx",40707],"24fecc0a":[()=>n.e(3707).then(n.bind(n,69383)),"@site/algorithms/03-time-complexity/2021-03-31-extend.md",69383],"28d80ff8":[()=>n.e(6435).then(n.t.bind(n,7465,19)),"~docs/algorithms/tag-algorithms-tags-sorting-d73.json",7465],29694455:[()=>n.e(3388).then(n.t.bind(n,39828,19)),"~blog/blog/blog-tags-iterators-977-list.json",39828],"2af5d0a7":[()=>n.e(3979).then(n.t.bind(n,53703,19)),"~docs/algorithms/tag-algorithms-tags-a-star-775.json",53703],"2b89902a":[()=>n.e(6342).then(n.t.bind(n,45443,19)),"~docs/algorithms/tag-algorithms-tags-recursion-1bd.json",45443],"2ca64e35":[()=>n.e(281).then(n.bind(n,99544)),"@site/algorithms/04-recursion/2022-11-29-karel/index.md",99544],"2fcf0558":[()=>n.e(4638).then(n.t.bind(n,69470,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-hash-tables-062.json",69470],"3011a4c0":[()=>n.e(7926).then(n.t.bind(n,31670,19)),"~blog/blog/blog-tags-copr-70b-list.json",31670],30814625:[()=>n.e(115).then(n.bind(n,78416)),"@site/algorithms/04-recursion/2022-11-29-karel/2023-12-24-solution.md",78416],"34ab65f4":[()=>n.e(3220).then(n.t.bind(n,28865,19)),"~docs/algorithms/tag-algorithms-tags-postconditions-1f3.json",28865],"354a7b72":[()=>n.e(9414).then(n.bind(n,46617)),"@site/algorithms/10-graphs/2022-04-30-bfs-tree.md",46617],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,10727)),"@theme/DocTagsListPage",10727],"377f3aa1":[()=>n.e(1011).then(n.bind(n,7582)),"@site/blog/aoc-2022/02-week-2.md",7582],"3adcbc3a":[()=>n.e(5701).then(n.bind(n,62535)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/01-bf.md",62535],"3d92ba6e":[()=>n.e(8236).then(n.t.bind(n,77778,19)),"~docs/algorithms/tag-algorithms-tags-dijkstra-48e.json",77778],"3da4b779":[()=>n.e(2177).then(n.bind(n,28737)),"@site/blog/aoc-2022/04-week-4.md",28737],"4200b1a9":[()=>n.e(866).then(n.t.bind(n,24612,19)),"~blog/blog/blog-archive-80c.json",24612],"45c9e308":[()=>n.e(7084).then(n.bind(n,53181)),"@site/cpp/07-exceptions-and-raii/2023-11-24-placeholders.md",53181],"4621632b":[()=>n.e(3519).then(n.t.bind(n,29760,19)),"~blog/blog/blog-tags-cpp-7c7-list.json",29760],"48b268a6":[()=>n.e(1648).then(n.t.bind(n,35067,19)),"~docs/c/category-c-autogeneratedbar-category-bonuses-216.json",35067],"493c0536":[()=>n.e(7292).then(n.bind(n,45594)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/03-astar.md",45594],"4e546705":[()=>n.e(4327).then(n.t.bind(n,61795,19)),"~docs/c/version-current-metadata-prop-751.json",61795],"4edd2021":[()=>n.e(5975).then(n.t.bind(n,21705,19)),"~blog/blog/blog-tags-cpp-7c7.json",21705],"4f96b16e":[()=>n.e(6306).then(n.bind(n,24693)),"@site/c/pexam/c-cams.md",24693],51624505:[()=>n.e(4394).then(n.bind(n,32609)),"@site/blog/aoc-2022/00-intro.md",32609],"520f8175":[()=>n.e(8058).then(n.t.bind(n,24353,19)),"~docs/algorithms/tag-algorithms-tags-cpp-0d2.json",24353],"52f2a5bf":[()=>n.e(5430).then(n.t.bind(n,61387,19)),"~blog/blog/blog-tags-red-hat-df4.json",61387],"534d4833":[()=>n.e(9771).then(n.bind(n,93019)),"@site/algorithms/02-algorithms-correctness/2021-03-18-postcondition-ambiguity.md",93019],"595c7293":[()=>n.e(5634).then(n.bind(n,58396)),"@site/c/bonuses/08.md",58396],"5c15401e":[()=>n.e(9579).then(n.t.bind(n,43761,19)),"~docs/algorithms/tag-algorithms-tags-bellman-ford-731.json",43761],"5ca803d2":[()=>n.e(9173).then(n.t.bind(n,24890,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/c/plugin-route-context-module-100.json",24890],"5e95c892":[()=>n.e(9661).then(n.bind(n,41892)),"@theme/DocsRoot",41892],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"62d847b3":[()=>n.e(8520).then(n.t.bind(n,91901,19)),"~blog/blog/blog-tags-advent-of-code-2022-3db-list.json",91901],"66d5ef6c":[()=>n.e(9228).then(n.t.bind(n,4087,19)),"~blog/blog/blog-tags-tags-4c2.json",4087],"686a7a89":[()=>n.e(728).then(n.t.bind(n,77507,19)),"~docs/algorithms/tag-algorithms-tags-graphs-31d.json",77507],"6875c492":[()=>Promise.all([n.e(532),n.e(1325),n.e(130),n.e(8610)]).then(n.bind(n,41714)),"@theme/BlogTagsPostsPage",41714],"698e2076":[()=>n.e(3713).then(n.bind(n,38961)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/02-dijkstra.md",38961],"6bc697d0":[()=>n.e(5287).then(n.t.bind(n,68529,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/cpp/plugin-route-context-module-100.json",68529],"6e3cbca1":[()=>n.e(3276).then(n.t.bind(n,29538,19)),"~docs/algorithms/version-current-metadata-prop-751.json",29538],"7052c0bc":[()=>n.e(9731).then(n.bind(n,42286)),"@site/cpp/00-intro.md",42286],"70a4540f":[()=>n.e(9249).then(n.bind(n,44493)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/01-naive.md",44493],"75cccf44":[()=>n.e(4256).then(n.bind(n,98215)),"@site/blog/leetcode/sort-matrix-diagonally.md?truncated=true",98215],"765ea78b":[()=>n.e(3039).then(n.t.bind(n,83010,19)),"~blog/blog/blog-tags-\ud83c\udfed-551.json",83010],"794ef108":[()=>n.e(3803).then(n.bind(n,86427)),"@site/c/00-intro.md",86427],"7ce7faac":[()=>n.e(6064).then(n.t.bind(n,12884,19)),"~docs/algorithms/tag-algorithms-tags-solution-61b.json",12884],"7e6d325b":[()=>n.e(3184).then(n.t.bind(n,26139,19)),"~docs/cpp/version-current-metadata-prop-751.json",26139],"84d1e0d8":[()=>n.e(1885).then(n.bind(n,49713)),"@site/algorithms/00-intro.md",49713],"86cd1460":[()=>n.e(1235).then(n.t.bind(n,38968,19)),"~blog/blog/blog-tags-leetcode-042.json",38968],"8a25f659":[()=>n.e(7728).then(n.bind(n,73212)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/03-top-down-dp.md",73212],"8b1802c5":[()=>n.e(8480).then(n.t.bind(n,60832,19)),"~blog/blog/blog-tags-advent-of-code-49f-list.json",60832],"8c0e532b":[()=>n.e(822).then(n.t.bind(n,73968,19)),"~blog/blog/blog-tags-vps-843.json",73968],"8d31a880":[()=>n.e(9066).then(n.t.bind(n,72232,19)),"~docs/algorithms/tag-algorithms-tags-python-48f.json",72232],"8e6bb954":[()=>n.e(5775).then(n.t.bind(n,76206,19)),"~docs/algorithms/tag-algorithms-tags-exponential-60a.json",76206],"9287eafd":[()=>n.e(5521).then(n.t.bind(n,90716,19)),"~blog/blog/blog-tags-rust-0c9.json",90716],"933b95b3":[()=>n.e(3887).then(n.t.bind(n,7405,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-recursion-257.json",7405],"947341b7":[()=>n.e(1145).then(n.t.bind(n,2897,19)),"~docs/algorithms/tag-algorithms-tags-bfs-69f.json",2897],"95b96bb9":[()=>n.e(3561).then(n.t.bind(n,24577,19)),"~blog/blog/blog-post-list-prop-blog.json",24577],"95f41f0b":[()=>n.e(9385).then(n.bind(n,93195)),"@site/blog/aoc-2022/01-week-1.md?truncated=true",93195],"962da50c":[()=>n.e(2264).then(n.t.bind(n,9705,19)),"~docs/c/category-c-autogeneratedbar-category-practice-exams-e97.json",9705],"976c4f3b":[()=>n.e(4562).then(n.t.bind(n,69019,19)),"~docs/algorithms/tag-algorithms-tags-java-6c3.json",69019],"97a42631":[()=>n.e(1464).then(n.t.bind(n,77343,19)),"~docs/algorithms/tags-list-current-prop-15a.json",77343],"9a3dc578":[()=>n.e(655).then(n.t.bind(n,9916,19)),"~docs/algorithms/tag-algorithms-tags-dynamic-array-5d3.json",9916],"9b91a88c":[()=>n.e(2545).then(n.bind(n,19466)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/index.md",19466],"9df0e937":[()=>n.e(2210).then(n.t.bind(n,55256,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-graphs-2e2.json",55256],"9e4087bc":[()=>n.e(3608).then(n.bind(n,63169)),"@theme/BlogArchivePage",63169],a082abd3:[()=>n.e(8786).then(n.t.bind(n,73276,19)),"~blog/blog/blog-tags-admin-b05.json",73276],a2ba8888:[()=>n.e(8289).then(n.t.bind(n,55941,19)),"~docs/algorithms/tag-algorithms-tags-brute-force-3cb.json",55941],a4c10cf4:[()=>n.e(4382).then(n.t.bind(n,30685,19)),"~docs/algorithms/tag-algorithms-tags-time-complexity-c50.json",30685],a6a48ea2:[()=>n.e(3618).then(n.bind(n,1176)),"@site/blog/aoc-2022/02-week-2.md?truncated=true",1176],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(1325),n.e(130),n.e(3089)]).then(n.bind(n,80046)),"@theme/BlogListPage",80046],a7098721:[()=>n.e(1050).then(n.t.bind(n,26615,19)),"~blog/blog/blog-c06.json",26615],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a80747a0:[()=>n.e(5824).then(n.t.bind(n,4464,19)),"~blog/blog/blog-tags-advent-of-code-2022-3db.json",4464],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,12674)),"@theme/DocRoot",12674],aa24fd5d:[()=>n.e(7257).then(n.bind(n,90251)),"@site/algorithms/12-hash-tables/2023-11-28-breaking/01-python.md",90251],ab2721d4:[()=>n.e(7755).then(n.bind(n,53037)),"@site/blog/aoc-2022/04-week-4.md?truncated=true",53037],af8b72a7:[()=>n.e(5658).then(n.bind(n,10507)),"@site/blog/2023-08-02-copr.md?truncated=true",10507],b0291f37:[()=>n.e(6097).then(n.t.bind(n,7085,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],b1288602:[()=>n.e(59).then(n.bind(n,51456)),"@site/c/mr.md",51456],b25fbc58:[()=>n.e(9197).then(n.t.bind(n,75617,19)),"~blog/blog/blog-tags-\ud83c\udfed-551-list.json",75617],b45dccf0:[()=>n.e(9679).then(n.t.bind(n,58296,19)),"~blog/blog/blog-tags-copr-70b.json",58296],b5a32f14:[()=>n.e(2433).then(n.bind(n,31976)),"@site/blog/2023-08-02-copr.md",31976],b8cbf382:[()=>n.e(7438).then(n.t.bind(n,74632,19)),"~docs/algorithms/tag-algorithms-tags-greedy-02f.json",74632],b9f7f5c4:[()=>n.e(9179).then(n.bind(n,76699)),"@site/cpp/environment.md",76699],bb882650:[()=>n.e(8091).then(n.bind(n,66765)),"@site/blog/aoc-2022/03-week-3.md?truncated=true",66765],bb984793:[()=>n.e(6864).then(n.t.bind(n,82505,19)),"~docs/algorithms/tag-algorithms-tags-karel-df7.json",82505],bc0c9d90:[()=>n.e(354).then(n.bind(n,50476)),"@site/c/bonuses/04.md",50476],bc2d22bc:[()=>n.e(6519).then(n.t.bind(n,70428,19)),"~docs/algorithms/tag-algorithms-tags-bottom-up-dp-4f9.json",70428],c4c4056e:[()=>n.e(635).then(n.bind(n,61381)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/index.md",61381],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,53261)),"@site/src/pages/index.js",53261],c580b66a:[()=>n.e(6573).then(n.t.bind(n,45021,19)),"~docs/algorithms/tag-algorithms-tags-top-down-dp-c2f.json",45021],ccc49370:[()=>Promise.all([n.e(532),n.e(1325),n.e(130),n.e(6103)]).then(n.bind(n,65203)),"@theme/BlogPostPage",65203],cfa2b263:[()=>n.e(3086).then(n.bind(n,34437)),"@site/blog/leetcode/sort-matrix-diagonally.md",34437],d05e838c:[()=>n.e(6544).then(n.bind(n,63004)),"@site/c/bonuses/05-06.md",63004],d255bd7f:[()=>n.e(6292).then(n.t.bind(n,60341,19)),"~docs/algorithms/tag-algorithms-tags-red-black-trees-c61.json",60341],d309b5b1:[()=>n.e(8908).then(n.t.bind(n,26102,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-algorithms-and-correctness-d51.json",26102],d4b1e057:[()=>n.e(1492).then(n.t.bind(n,12842,19)),"~docs/algorithms/tag-algorithms-tags-balanced-trees-b3e.json",12842],d57b4369:[()=>n.e(6179).then(n.t.bind(n,52715,19)),"~docs/algorithms/tag-algorithms-tags-csharp-d1d.json",52715],d675395f:[()=>n.e(2741).then(n.t.bind(n,15745,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],d79dd549:[()=>n.e(5169).then(n.t.bind(n,29261,19)),"~blog/blog/blog-tags-red-hat-df4-list.json",29261],d7f7fb17:[()=>n.e(1171).then(n.bind(n,3455)),"@site/blog/aoc-2022/00-intro.md?truncated=true",3455],d8f4410e:[()=>n.e(2997).then(n.t.bind(n,41941,19)),"~docs/algorithms/tag-algorithms-tags-hash-tables-b36.json",41941],dd841e73:[()=>n.e(2482).then(n.t.bind(n,40155,19)),"~docs/algorithms/tag-algorithms-tags-dynamic-programming-3e6.json",40155],ddc7679f:[()=>n.e(569).then(n.bind(n,64322)),"@site/algorithms/10-graphs/2021-05-18-iterative-and-iterators.md",64322],dead8108:[()=>n.e(8807).then(n.bind(n,21431)),"@site/c/bonuses/03.md",21431],decbf9d1:[()=>n.e(2445).then(n.t.bind(n,88876,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-asymptotic-notation-and-time-complexity-e0d.json",88876],df078f58:[()=>n.e(7743).then(n.t.bind(n,88298,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-paths-in-graphs-202.json",88298],df0885f0:[()=>n.e(4343).then(n.t.bind(n,34175,19)),"~docs/algorithms/tag-algorithms-tags-iterators-13a.json",34175],df203c0f:[()=>Promise.all([n.e(532),n.e(9924)]).then(n.bind(n,40491)),"@theme/DocTagDocListPage",40491],dff2ebad:[()=>n.e(146).then(n.bind(n,42492)),"@site/blog/aoc-2022/01-week-1.md",42492],e1d2ae23:[()=>n.e(1475).then(n.t.bind(n,36302,19)),"~docs/algorithms/tag-algorithms-tags-applications-020.json",36302],e31003e9:[()=>n.e(1960).then(n.t.bind(n,81695,19)),"~docs/cpp/category-cpp-autogeneratedbar-category-exceptions-and-raii-6e9.json",81695],e89da83e:[()=>n.e(8757).then(n.t.bind(n,97416,19)),"~blog/blog/blog-tags-leetcode-042-list.json",97416],eba2374c:[()=>n.e(8387).then(n.t.bind(n,47662,19)),"~docs/algorithms/tag-algorithms-tags-backtracking-bb2.json",47662],f48be158:[()=>n.e(4064).then(n.bind(n,12326)),"@site/blog/aoc-2022/03-week-3.md",12326],f75910c4:[()=>n.e(5934).then(n.bind(n,1910)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/02-greedy.md",1910],fb4361d3:[()=>n.e(6327).then(n.t.bind(n,9631,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-red-black-trees-d8a.json",9631],ff472cd9:[()=>n.e(8643).then(n.t.bind(n,7122,19)),"~blog/blog/blog-tags-iterators-977.json",7122],ff82dde7:[()=>Promise.all([n.e(532),n.e(8472)]).then(n.bind(n,63935)),"@site/algorithms/08-rb-trees/2023-06-10-rules.md",63935]};var s=n(85893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(99670),u=n(30226);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(1772).then(n.bind(n,51772)),modules:["@theme/NotFound"],webpack:()=>[51772],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},p=[],f=[],g=(0,c.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(o,{...a,...n})})}})}const p=[{path:"/blog/",component:d("/blog/","608"),exact:!0},{path:"/blog/2023/08/02/copr/",component:d("/blog/2023/08/02/copr/","69d"),exact:!0},{path:"/blog/aoc-2022/1st-week/",component:d("/blog/aoc-2022/1st-week/","df4"),exact:!0},{path:"/blog/aoc-2022/2nd-week/",component:d("/blog/aoc-2022/2nd-week/","783"),exact:!0},{path:"/blog/aoc-2022/3rd-week/",component:d("/blog/aoc-2022/3rd-week/","7c5"),exact:!0},{path:"/blog/aoc-2022/4th-week/",component:d("/blog/aoc-2022/4th-week/","1ac"),exact:!0},{path:"/blog/aoc-2022/intro/",component:d("/blog/aoc-2022/intro/","ada"),exact:!0},{path:"/blog/archive/",component:d("/blog/archive/","22d"),exact:!0},{path:"/blog/leetcode/sort-diagonally/",component:d("/blog/leetcode/sort-diagonally/","d97"),exact:!0},{path:"/blog/tags/",component:d("/blog/tags/","f23"),exact:!0},{path:"/blog/tags/\ud83c\udfed/",component:d("/blog/tags/\ud83c\udfed/","ffd"),exact:!0},{path:"/blog/tags/admin/",component:d("/blog/tags/admin/","d3a"),exact:!0},{path:"/blog/tags/advent-of-code-2022/",component:d("/blog/tags/advent-of-code-2022/","7bd"),exact:!0},{path:"/blog/tags/advent-of-code/",component:d("/blog/tags/advent-of-code/","313"),exact:!0},{path:"/blog/tags/copr/",component:d("/blog/tags/copr/","959"),exact:!0},{path:"/blog/tags/cpp/",component:d("/blog/tags/cpp/","770"),exact:!0},{path:"/blog/tags/iterators/",component:d("/blog/tags/iterators/","2eb"),exact:!0},{path:"/blog/tags/leetcode/",component:d("/blog/tags/leetcode/","e31"),exact:!0},{path:"/blog/tags/red-hat/",component:d("/blog/tags/red-hat/","a58"),exact:!0},{path:"/blog/tags/rust/",component:d("/blog/tags/rust/","281"),exact:!0},{path:"/blog/tags/vps/",component:d("/blog/tags/vps/","1b8"),exact:!0},{path:"/contributions/",component:d("/contributions/","541"),exact:!0},{path:"/search/",component:d("/search/","c7b"),exact:!0},{path:"/talks/",component:d("/talks/","819"),exact:!0},{path:"/algorithms/",component:d("/algorithms/","c61"),routes:[{path:"/algorithms/",component:d("/algorithms/","b39"),routes:[{path:"/algorithms/tags/",component:d("/algorithms/tags/","bb8"),exact:!0},{path:"/algorithms/tags/a-star/",component:d("/algorithms/tags/a-star/","83e"),exact:!0},{path:"/algorithms/tags/applications/",component:d("/algorithms/tags/applications/","b32"),exact:!0},{path:"/algorithms/tags/astar/",component:d("/algorithms/tags/astar/","08b"),exact:!0},{path:"/algorithms/tags/backtracking/",component:d("/algorithms/tags/backtracking/","e2d"),exact:!0},{path:"/algorithms/tags/balanced-trees/",component:d("/algorithms/tags/balanced-trees/","591"),exact:!0},{path:"/algorithms/tags/bellman-ford/",component:d("/algorithms/tags/bellman-ford/","2bc"),exact:!0},{path:"/algorithms/tags/bfs/",component:d("/algorithms/tags/bfs/","334"),exact:!0},{path:"/algorithms/tags/bottom-up-dp/",component:d("/algorithms/tags/bottom-up-dp/","9e5"),exact:!0},{path:"/algorithms/tags/brute-force/",component:d("/algorithms/tags/brute-force/","99b"),exact:!0},{path:"/algorithms/tags/c/",component:d("/algorithms/tags/c/","cc5"),exact:!0},{path:"/algorithms/tags/cpp/",component:d("/algorithms/tags/cpp/","f5b"),exact:!0},{path:"/algorithms/tags/csharp/",component:d("/algorithms/tags/csharp/","7a9"),exact:!0},{path:"/algorithms/tags/dijkstra/",component:d("/algorithms/tags/dijkstra/","aa8"),exact:!0},{path:"/algorithms/tags/dynamic-array/",component:d("/algorithms/tags/dynamic-array/","00e"),exact:!0},{path:"/algorithms/tags/dynamic-programming/",component:d("/algorithms/tags/dynamic-programming/","f82"),exact:!0},{path:"/algorithms/tags/exponential/",component:d("/algorithms/tags/exponential/","a74"),exact:!0},{path:"/algorithms/tags/graphs/",component:d("/algorithms/tags/graphs/","d5b"),exact:!0},{path:"/algorithms/tags/greedy/",component:d("/algorithms/tags/greedy/","079"),exact:!0},{path:"/algorithms/tags/hash-tables/",component:d("/algorithms/tags/hash-tables/","ae4"),exact:!0},{path:"/algorithms/tags/iterative/",component:d("/algorithms/tags/iterative/","783"),exact:!0},{path:"/algorithms/tags/iterators/",component:d("/algorithms/tags/iterators/","1bc"),exact:!0},{path:"/algorithms/tags/java/",component:d("/algorithms/tags/java/","2b4"),exact:!0},{path:"/algorithms/tags/karel/",component:d("/algorithms/tags/karel/","79f"),exact:!0},{path:"/algorithms/tags/postconditions/",component:d("/algorithms/tags/postconditions/","a27"),exact:!0},{path:"/algorithms/tags/python/",component:d("/algorithms/tags/python/","eb2"),exact:!0},{path:"/algorithms/tags/recursion/",component:d("/algorithms/tags/recursion/","2b0"),exact:!0},{path:"/algorithms/tags/red-black-trees/",component:d("/algorithms/tags/red-black-trees/","9ca"),exact:!0},{path:"/algorithms/tags/solution/",component:d("/algorithms/tags/solution/","fa0"),exact:!0},{path:"/algorithms/tags/sorting/",component:d("/algorithms/tags/sorting/","7ca"),exact:!0},{path:"/algorithms/tags/testing/",component:d("/algorithms/tags/testing/","2af"),exact:!0},{path:"/algorithms/tags/time-complexity/",component:d("/algorithms/tags/time-complexity/","2d3"),exact:!0},{path:"/algorithms/tags/top-down-dp/",component:d("/algorithms/tags/top-down-dp/","779"),exact:!0},{path:"/algorithms/",component:d("/algorithms/","b7c"),routes:[{path:"/algorithms/",component:d("/algorithms/","9b0"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/algorithms-correctness/postcondition-ambiguity/",component:d("/algorithms/algorithms-correctness/postcondition-ambiguity/","c18"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/algorithms-and-correctness/",component:d("/algorithms/category/algorithms-and-correctness/","ea2"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/asymptotic-notation-and-time-complexity/",component:d("/algorithms/category/asymptotic-notation-and-time-complexity/","fba"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/graphs/",component:d("/algorithms/category/graphs/","a92"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/hash-tables/",component:d("/algorithms/category/hash-tables/","ddd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/paths-in-graphs/",component:d("/algorithms/category/paths-in-graphs/","7c7"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/recursion/",component:d("/algorithms/category/recursion/","61f"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/red-black-trees/",component:d("/algorithms/category/red-black-trees/","0c0"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/graphs/bfs-tree/",component:d("/algorithms/graphs/bfs-tree/","2fb"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/graphs/iterative-and-iterators/",component:d("/algorithms/graphs/iterative-and-iterators/","bfd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/hash-tables/breaking/",component:d("/algorithms/hash-tables/breaking/","319"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/hash-tables/breaking/mitigations/",component:d("/algorithms/hash-tables/breaking/mitigations/","4c2"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/hash-tables/breaking/python/",component:d("/algorithms/hash-tables/breaking/python/","3d1"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/",component:d("/algorithms/paths/bf-to-astar/","050"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/astar/",component:d("/algorithms/paths/bf-to-astar/astar/","b4d"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/bf/",component:d("/algorithms/paths/bf-to-astar/bf/","e9c"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/dijkstra/",component:d("/algorithms/paths/bf-to-astar/dijkstra/","fe4"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/rb-trees/applications/",component:d("/algorithms/rb-trees/applications/","46a"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/rb-trees/rules/",component:d("/algorithms/rb-trees/rules/","21a"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/karel/",component:d("/algorithms/recursion/karel/","4cf"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/karel/solution/",component:d("/algorithms/recursion/karel/solution/","115"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/",component:d("/algorithms/recursion/pyramid-slide-down/","236"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/bottom-up-dp/",component:d("/algorithms/recursion/pyramid-slide-down/bottom-up-dp/","00d"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/greedy/",component:d("/algorithms/recursion/pyramid-slide-down/greedy/","4bf"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/naive/",component:d("/algorithms/recursion/pyramid-slide-down/naive/","c1b"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/top-down-dp/",component:d("/algorithms/recursion/pyramid-slide-down/top-down-dp/","fe9"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/time-complexity/extend/",component:d("/algorithms/time-complexity/extend/","250"),exact:!0,sidebar:"autogeneratedBar"}]}]}]},{path:"/c/",component:d("/c/","dae"),routes:[{path:"/c/",component:d("/c/","fc8"),routes:[{path:"/c/",component:d("/c/","1c4"),routes:[{path:"/c/",component:d("/c/","a0f"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-03/",component:d("/c/bonuses/seminar-03/","aaa"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-04/",component:d("/c/bonuses/seminar-04/","ffe"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-05-06/",component:d("/c/bonuses/seminar-05-06/","4cd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-08/",component:d("/c/bonuses/seminar-08/","09a"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-10/",component:d("/c/bonuses/seminar-10/","b9e"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/category/bonuses/",component:d("/c/category/bonuses/","17e"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/category/practice-exams/",component:d("/c/category/practice-exams/","009"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/mr/",component:d("/c/mr/","4c5"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/pexam/cams/",component:d("/c/pexam/cams/","a10"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/pexam/garbage_collect/",component:d("/c/pexam/garbage_collect/","44e"),exact:!0,sidebar:"autogeneratedBar"}]}]}]},{path:"/cpp/",component:d("/cpp/","269"),routes:[{path:"/cpp/",component:d("/cpp/","187"),routes:[{path:"/cpp/",component:d("/cpp/","102"),routes:[{path:"/cpp/",component:d("/cpp/","fcd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/cpp/category/exceptions-and-raii/",component:d("/cpp/category/exceptions-and-raii/","cfa"),exact:!0,sidebar:"autogeneratedBar"},{path:"/cpp/environment/",component:d("/cpp/environment/","e0b"),exact:!0,sidebar:"autogeneratedBar"},{path:"/cpp/exceptions-and-raii/placeholders/",component:d("/cpp/exceptions-and-raii/placeholders/","9b3"),exact:!0,sidebar:"autogeneratedBar"}]}]}]},{path:"/",component:d("/","dfb"),exact:!0},{path:"*",component:d("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(67294),a=n(85893);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},97221:(e,t,n)=>{"use strict";var r=n(67294),a=n(20745),o=n(73727),i=n(70405),s=n(10412);const l=[n(32497),n(3310),n(18320),n(7439),n(57800)];var c=n(723),u=n(16550),d=n(18790),p=n(85893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var g=n(35742),h=n(52263),m=n(44996),b=n(86668),y=n(10833),v=n(94711),w=n(19727),k=n(43320),x=n(18780),S=n(90197);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,v.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,p.jsxs)(g.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,x.applyTrailingSlash)((0,m.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(y.d,{image:n}),(0,p.jsx)(E,{}),(0,p.jsx)(_,{}),(0,p.jsx)(S.Z,{tag:k.HX,locale:e}),(0,p.jsx)(g.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var j=n(98934),N=n(58940),L=n(20469);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(I,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const F=O,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${D}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${B}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${B}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,p.jsx)(p.Fragment,{children:!s.Z.canUseDOM&&(0,p.jsx)(g.Z,{children:(0,p.jsx)("script",{children:z(e)})})})}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?(0,p.jsx)($,{}):null}function Z(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:a}}=(0,h.Z)(),o=(0,m.Z)(e),{htmlLang:i,direction:s}=a[r];return(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("html",{lang:i,dir:s}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:o})]})}var H=n(44763),V=n(72389);function W(){const e=(0,V.Z)();return(0,p.jsx)(g.Z,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function G(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return(0,p.jsx)(H.Z,{children:(0,p.jsx)(N.M,{children:(0,p.jsxs)(j.t,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)(Z,{}),(0,p.jsx)(C,{}),(0,p.jsx)(U,{}),(0,p.jsx)(F,{location:A(t),children:e})]}),(0,p.jsx)(W,{})]})})})}var q=n(16887);const K=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(99670);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.B6,{children:(0,p.jsx)(o.VK,{children:(0,p.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};R(window.location.pathname).then(s)}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(67294),a=n(36809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"cpp":{"path":"/cpp","versions":[{"name":"current","label":"Next","isLast":true,"path":"/cpp","mainDocId":"cpp-intro","docs":[{"id":"cpp-intro","path":"/cpp/","sidebar":"autogeneratedBar"},{"id":"environment","path":"/cpp/environment","sidebar":"autogeneratedBar"},{"id":"exceptions-and-raii/2023-11-24-placeholders","path":"/cpp/exceptions-and-raii/placeholders","sidebar":"autogeneratedBar"},{"id":"/category/exceptions-and-raii","path":"/cpp/category/exceptions-and-raii","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/cpp/","label":"cpp-intro"}}}}],"breadcrumbs":true},"algorithms":{"path":"/algorithms","versions":[{"name":"current","label":"Next","isLast":true,"path":"/algorithms","mainDocId":"algorithms-intro","docs":[{"id":"algorithms-correctness/postcondition-ambiguity","path":"/algorithms/algorithms-correctness/postcondition-ambiguity","sidebar":"autogeneratedBar"},{"id":"algorithms-intro","path":"/algorithms/","sidebar":"autogeneratedBar"},{"id":"graphs/bfs-tree","path":"/algorithms/graphs/bfs-tree","sidebar":"autogeneratedBar"},{"id":"graphs/iterative-and-iterators","path":"/algorithms/graphs/iterative-and-iterators","sidebar":"autogeneratedBar"},{"id":"hash-tables/2023-11-28-breaking/breaking","path":"/algorithms/hash-tables/breaking","sidebar":"autogeneratedBar"},{"id":"hash-tables/2023-11-28-breaking/mitigations","path":"/algorithms/hash-tables/breaking/mitigations","sidebar":"autogeneratedBar"},{"id":"hash-tables/2023-11-28-breaking/python","path":"/algorithms/hash-tables/breaking/python","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/astar","path":"/algorithms/paths/bf-to-astar/astar","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/bf","path":"/algorithms/paths/bf-to-astar/bf","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/dijkstra","path":"/algorithms/paths/bf-to-astar/dijkstra","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/index","path":"/algorithms/paths/bf-to-astar","sidebar":"autogeneratedBar"},{"id":"rb-trees/applications","path":"/algorithms/rb-trees/applications","sidebar":"autogeneratedBar"},{"id":"rb-trees/rules","path":"/algorithms/rb-trees/rules","sidebar":"autogeneratedBar"},{"id":"recursion/2022-11-29-karel/karel","path":"/algorithms/recursion/karel","sidebar":"autogeneratedBar"},{"id":"recursion/2022-11-29-karel/solution","path":"/algorithms/recursion/karel/solution","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/bottom-up-dp","path":"/algorithms/recursion/pyramid-slide-down/bottom-up-dp","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/greedy","path":"/algorithms/recursion/pyramid-slide-down/greedy","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/naive","path":"/algorithms/recursion/pyramid-slide-down/naive","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/pyramid-slide-down","path":"/algorithms/recursion/pyramid-slide-down","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/top-down-dp","path":"/algorithms/recursion/pyramid-slide-down/top-down-dp","sidebar":"autogeneratedBar"},{"id":"time-complexity/extend","path":"/algorithms/time-complexity/extend","sidebar":"autogeneratedBar"},{"id":"/category/algorithms-and-correctness","path":"/algorithms/category/algorithms-and-correctness","sidebar":"autogeneratedBar"},{"id":"/category/asymptotic-notation-and-time-complexity","path":"/algorithms/category/asymptotic-notation-and-time-complexity","sidebar":"autogeneratedBar"},{"id":"/category/recursion","path":"/algorithms/category/recursion","sidebar":"autogeneratedBar"},{"id":"/category/red-black-trees","path":"/algorithms/category/red-black-trees","sidebar":"autogeneratedBar"},{"id":"/category/graphs","path":"/algorithms/category/graphs","sidebar":"autogeneratedBar"},{"id":"/category/paths-in-graphs","path":"/algorithms/category/paths-in-graphs","sidebar":"autogeneratedBar"},{"id":"/category/hash-tables","path":"/algorithms/category/hash-tables","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/algorithms/","label":"algorithms-intro"}}}}],"breadcrumbs":true},"c":{"path":"/c","versions":[{"name":"current","label":"Next","isLast":true,"path":"/c","mainDocId":"c-intro","docs":[{"id":"bonuses/seminar-03","path":"/c/bonuses/seminar-03","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-04","path":"/c/bonuses/seminar-04","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-05-06","path":"/c/bonuses/seminar-05-06","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-08","path":"/c/bonuses/seminar-08","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-10","path":"/c/bonuses/seminar-10","sidebar":"autogeneratedBar"},{"id":"c-intro","path":"/c/","sidebar":"autogeneratedBar"},{"id":"mr","path":"/c/mr","sidebar":"autogeneratedBar"},{"id":"pexam/b-garbage_collect","path":"/c/pexam/garbage_collect","sidebar":"autogeneratedBar"},{"id":"pexam/c-cams","path":"/c/pexam/cams","sidebar":"autogeneratedBar"},{"id":"/category/bonuses","path":"/c/category/bonuses","sidebar":"autogeneratedBar"},{"id":"/category/practice-exams","path":"/c/category/practice-exams","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/c/","label":"c-intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const l=JSON.parse('{"docusaurusVersion":"3.0.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.0.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.0.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.0.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.0.1"},"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.0.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.0.1"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.5"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.0.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.0.1"}}}');var c=n(85893);const u={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),a=n(10412),o=n(35742),i=n(18780),s=n(80647),l=n(85893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(o.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);var r=n(70405),a=n(85893);function o(e){return(0,a.jsx)(r.ql,{...e})}},39960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),a=n(73727),o=n(18780),i=n(52263),s=n(13919),l=n(10412),c=n(85893);const u=r.createContext({collectLink:()=>{}});var d=n(44996);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:g,isActive:h,"data-noBrokenLinkCheck":m,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,d.C)(),x=(0,r.useContext)(u),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const _=p||f;const E=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&E&&(T=(0,o.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const j=(0,r.useRef)(!1),N=n?a.OL:a.rU,L=l.Z.canUseIntersectionObserver,P=(0,r.useRef)(),I=()=>{j.current||null==T||(window.docusaurus.preload(T),j.current=!0)};(0,r.useEffect)((()=>(!L&&E&&null!=T&&window.docusaurus.prefetch(T),()=>{L&&P.current&&P.current.disconnect()})),[P,T,L,E]);const R=T?.startsWith("#")??!1,O=!T||!E||R;return O||m||x.collectLink(T),O?(0,c.jsx)("a",{ref:S,href:T,..._&&!E&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,c.jsx)(N,{...y,onMouseEnter:I,onTouchStart:I,innerRef:e=>{S.current=e,L&&e&&E&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T,...n&&{isActive:h,activeClassName:g}})}const f=r.forwardRef(p)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(67294),a=n(85893);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(57529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},13919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(67294),a=n(52263),o=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(58940);function o(){return(0,r.useContext)(a._)}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(98934);function o(){return(0,r.useContext)(a._)}},20469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294);const a=n(10412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(67294),a=n(85893);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},80143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>f,WS:()=>g,_r:()=>d,Jo:()=>y,zh:()=>p,yW:()=>m,gB:()=>h});var r=n(16550),a=n(52263),o=n(29935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,p=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function g(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function h(e){return p(e).versions}function m(e){const t=p(e);return s(t)}function b(e){const t=p(e),{pathname:n}=(0,r.TH)();return c(t,n)}function y(e){const t=p(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(74865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(14965),a=n(36809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(96854),n(30218)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},92503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});n(67294);var r=n(36905),a=n(95999),o=n(86668),i=n(39960);const s={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var l=n(85893);function c(e){let{as:t,id:n,...c}=e;const{navbar:{hideOnScroll:u}}=(0,o.L)();if("h1"===t||!n)return(0,l.jsx)(t,{...c,id:void 0});const d=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof c.children?c.children:n});return(0,l.jsxs)(t,{...c,className:(0,r.Z)("anchor",u?s.anchorWithHideOnScrollNavbar:s.anchorWithStickyNavbar,c.className),id:n,children:[c.children,(0,l.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":d,title:d,children:"\u200b"})]})}},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(85893);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},80647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>At});var r=n(67294),a=n(36905),o=n(44763),i=n(10833),s=n(16550),l=n(95999),c=n(85936),u=n(85893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??g,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(35281),b=n(19727);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(h,{className:y.skipToContent})}var w=n(86668),k=n(59689);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function _(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.Z)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),o&&(0,u.jsx)(_,{onClick:n,className:T.announcementBarClose})]})}var j=n(93163),N=n(12466);var L=n(902),P=n(13102);const I=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,j.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,u.jsx)(I.Provider,{value:n,children:t})}function O(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(I);if(!e)throw new L.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:O(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=F();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var D=n(92949),B=n(72389);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,B.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.Z)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,D.I)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var G=n(21327);function q(){return(0,u.jsx)(G.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(q,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Q=n(39960),X=n(44996),J=n(13919),ee=n(98022),te=n(39471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Z)(r),p=(0,X.Z)(t),f=(0,X.Z)(a,{forcePrependBaseUrl:!0}),g=o&&a&&!(0,J.Z)(a),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,g&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return a?(0,u.jsx)(Q.Z,{href:l?f:a,...c,...h}):(0,u.jsx)(Q.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,ee.F)(n,t.pathname):t.pathname.startsWith(p)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,u.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(86043),se=n(48596),le=n(52263);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!(0,ee.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(He,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[c,d,g]),(0,u.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(He,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var ge=n(94711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const me="iconLanguage_nlXk";function be(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ye=n(20830),ve=["translations"];function we(){return we=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},we.apply(this,arguments)}function ke(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,o=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(l){s=!0,a=l}finally{try{i||null==n.return||n.return()}finally{if(s)throw a}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return xe(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return xe(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function xe(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Se(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var _e="Ctrl";var Ee=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=Se(e,ve),i=a.buttonText,s=void 0===i?"Search":i,l=a.buttonAriaLabel,c=void 0===l?"Search":l,u=ke((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(_e))}),[]),r.createElement("button",we({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(ye.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===_e?r.createElement(be,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Ce=n(35742),Te=n(66177),Ae=n(239),je=n(43320);var Ne=n(73935);const Le={button:{buttonText:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Pe=null;function Ie(e){let{hit:t,children:n}=e;return(0,u.jsx)(Q.Z,{to:t.url,children:n})}function Re(e){let{state:t,onClose:n}=e;const r=(0,Te.M)();return(0,u.jsx)(Q.Z,{to:r(t.query),onClick:n,children:(0,u.jsx)(l.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Oe(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,le.Z)(),l=(0,Ae.l)(),c=function(){const{locale:e,tags:t}=(0,je._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],p=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,d):d,f={...o.searchParameters,facetFilters:p},g=(0,s.k6)(),h=(0,r.useRef)(null),m=(0,r.useRef)(null),[b,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)(void 0),k=(0,r.useCallback)((()=>Pe?Promise.resolve():Promise.all([n.e(1426).then(n.bind(n,61426)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,46945)),Promise.all([n.e(532),n.e(8894)]).then(n.bind(n,18894))]).then((e=>{let[{DocSearchModal:t}]=e;Pe=t}))),[]),x=(0,r.useCallback)((()=>{k().then((()=>{h.current=document.createElement("div"),document.body.insertBefore(h.current,document.body.firstChild),y(!0)}))}),[k,y]),S=(0,r.useCallback)((()=>{y(!1),h.current?.remove()}),[y]),_=(0,r.useCallback)((e=>{k().then((()=>{y(!0),w(e.key)}))}),[k,y,w]),E=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.F)(a,t)?window.location.href=t:g.push(t)}}).current,C=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:l(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>(0,u.jsx)(Re,{...e,onClose:S})),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:b,onOpen:x,onClose:S,onInput:_,searchButtonRef:m}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Ce.Z,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(Ee,{onTouchStart:k,onFocus:k,onMouseOver:k,onClick:x,ref:m,translations:Le.button}),b&&Pe&&h.current&&(0,Ne.createPortal)((0,u.jsx)(Pe,{onClose:S,initialScrollY:window.scrollY,initialQuery:v,navigator:E,transformItems:C,hitComponent:Ie,transformSearchClient:A,...o.searchPagePath&&{resultsFooterComponent:T},...o,searchParameters:f,placeholder:Le.placeholder,translations:Le.modal}),h.current)]})}function Fe(){const{siteConfig:e}=(0,le.Z)();return(0,u.jsx)(Oe,{...e.themeConfig.algolia})}const Me={navbarSearchContainer:"navbarSearchContainer_Bca1"};function De(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.Z)(n,Me.navbarSearchContainer),children:t})}var Be=n(80143),ze=n(53438);var $e=n(60373);const Ue=e=>e.docs.find((t=>t.id===e.mainDocId));const Ze={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,ge.l)(),{search:f,hash:g}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],m=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:me}),m]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(De,{className:n,children:(0,u.jsx)(Fe,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,u.jsx)(i,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,Be.Iw)(r),i=(0,ze.vY)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,Be.Iw)(r),i=(0,ze.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ze.lO)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:c,hash:d}=(0,s.TH)(),p=(0,Be.Iw)(n),f=(0,Be.gB)(n),{savePreferredVersionName:g}=(0,$e.J)(n),h=[...a,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Ue(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...o],m=(0,ze.lO)(n)[0],b=t&&h.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,y=t&&h.length>1?void 0:Ue(m).path;return h.length<=1?(0,u.jsx)(oe,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:h,isActive:r?()=>!1:void 0})}};function He(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ze[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(a,{...n})}function Ve(){const e=(0,j.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(He,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function We(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ge(){const e=0===(0,w.L)().navbar.items.length,t=F();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(We,{onClick:()=>t.hide()}),t.content]})}function qe(){const e=(0,j.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(M,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ve,{}),secondaryMenu:(0,u.jsx)(Ge,{})}):null}const Ke={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ye(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function Qe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,j.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-o.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ke.navbarHideable,!d&&Ke.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ye,{onClick:i.toggle}),(0,u.jsx)(qe,{})]})}var Xe=n(69690);const Je="right";function et(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function tt(){const{toggle:e,shown:t}=(0,j.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(et,{})})}const nt={colorModeToggle:"colorModeToggle_DEke"};function rt(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Xe.QW,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(He,{...e})},t)))})}function at(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ot(){const e=(0,j.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Je)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(at,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(tt,{}),(0,u.jsx)(q,{}),(0,u.jsx)(rt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(rt,{items:r}),(0,u.jsx)(W,{className:nt.colorModeToggle}),!a&&(0,u.jsx)(De,{children:(0,u.jsx)(Fe,{})})]})})}function it(){return(0,u.jsx)(Qe,{children:(0,u.jsx)(ot,{})})}function st(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Q.Z,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function lt(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(st,{item:t})},t.href??t.to)}function ct(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(lt,{item:e},t)))})]})}function ut(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(ct,{column:e},t)))})}function dt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function pt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(st,{item:t})}function ft(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(pt,{item:e}),t.length!==n+1&&(0,u.jsx)(dt,{})]},n)))})})}function gt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ut,{columns:t}):(0,u.jsx)(ft,{links:t})}var ht=n(19965);const mt={footerLogoLink:"footerLogoLink_BH7S"};function bt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(ht.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function yt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Q.Z,{href:t.href,className:mt.footerLogoLink,target:t.target,children:(0,u.jsx)(bt,{logo:t})}):(0,u.jsx)(bt,{logo:t})}function vt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function wt(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function kt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(wt,{style:a,links:n&&n.length>0&&(0,u.jsx)(gt,{links:n}),logo:r&&(0,u.jsx)(yt,{logo:r}),copyright:t&&(0,u.jsx)(vt,{copyright:t})})}const xt=r.memo(kt),St=(0,L.Qc)([D.S,k.pl,N.OC,$e.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(P.n2,{children:(0,u.jsx)(j.M,{children:(0,u.jsx)(R,{children:t})})})}]);function _t(e){let{children:t}=e;return(0,u.jsx)(St,{children:t})}var Et=n(92503);function Ct(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Et.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Xe.Cw,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Xe.aG,{error:t})})]})})})}const Tt={mainWrapper:"mainWrapper_z2l0"};function At(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.t)(),(0,u.jsxs)(_t,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(A,{}),(0,u.jsx)(it,{}),(0,u.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,Tt.mainWrapper,r),children:(0,u.jsx)(o.Z,{fallback:e=>(0,u.jsx)(Ct,{...e}),children:t})}),!n&&(0,u.jsx)(xt,{})]})}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(67294);var r=n(39960),a=n(44996),o=n(52263),i=n(86668),s=n(19965),l=n(85893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,o.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,a.Z)(s?.href||"/"),g=n?"":t,h=s?.alt??g;return(0,l.jsxs)(r.Z,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);var r=n(35742),a=n(85893);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},19965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(67294),a=n(788),o=n(72389),i=n(92949);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(85893);function c(e){let{className:t,children:n}=e;const c=(0,o.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(67294),a=n(10412),o=n(20469),i=n(91442),s=n(85893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return p(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!a.Z.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:u,style:c?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:a})}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,o.Z)((()=>{t||i(!0)}),[t]),(0,o.Z)((()=>{a&&c(t)}),[a,t]),a?(0,s.jsx)(h,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?m:h;return(0,s.jsx)(r,{...n})}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>g});var r=n(67294),a=n(72389),o=n(50012),i=n(902),s=n(86668),l=n(85893);const c=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>m});var r=n(67294),a=n(10412),o=n(902),i=n(50012),s=n(86668),l=n(85893);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,g=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,o]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&h(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[a,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b,Oh:()=>w});var r=n(67294),a=n(80143),o=n(29935),i=n(86668),s=n(53438),l=n(902),c=n(50012),u=n(85893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function h(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return(0,u.jsx)(g.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.cE?(0,u.jsx)(m,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(g);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,a._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(67294),a=n(902),o=n(85893);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},74477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(67294),a=n(902),o=n(85893);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},93163:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(67294),a=n(13102),o=n(87524),i=n(91980),s=n(86668),l=n(902),c=n(85893);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(67294),a=n(902),o=n(85893);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(67294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},66177:(e,t,n)=>{"use strict";n.d(t,{K:()=>s,M:()=>l});var r=n(67294),a=n(52263),o=n(91980);const i="q";function s(){return(0,o.Nc)(i)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(67294),a=n(10412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){const[e,t]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){t(function(){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>i?o.desktop:o.mobile}())}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[]),e}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},91442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},53438:(e,t,n)=>{"use strict";n.d(t,{LM:()=>g,MN:()=>T,SN:()=>C,_F:()=>y,cE:()=>p,f:()=>w,jA:()=>h,lO:()=>S,oz:()=>_,s1:()=>x,vY:()=>E,xz:()=>f});var r=n(67294),a=n(16550),o=n(18790),i=n(80143),s=n(60373),l=n(74477),c=n(1116),u=n(67392),d=n(48596);const p=!!i._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function g(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=g(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const m=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||b(e.items,t))}function v(e,t){switch(e.type){case"category":return y(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||y(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function x(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,a.LX)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,o.H)(i),sidebarName:c,sidebarItems:u}}function T(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!g(e)))}},69690:(e,t,n)=>{"use strict";n.d(t,{aG:()=>u,Ac:()=>c,Cw:()=>l,QW:()=>d});var r=n(67294),a=n(95999),o=n(18780);const i={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};var s=n(85893);function l(e){return(0,s.jsx)("button",{type:"button",...e,children:(0,s.jsx)(a.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{className:i.errorBoundaryFallback,children:[(0,s.jsx)("p",{children:t.message}),(0,s.jsx)(l,{onClick:n})]})}function u(e){let{error:t}=e;const n=(0,o.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{className:i.errorBoundaryError,children:n})}class d extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},82128:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(52263);function a(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},91980:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>l,Rb:()=>i,_X:()=>s});var r=n(67294),a=n(16550),o=n(902);function i(e){!function(e){const t=(0,a.k6)(),n=(0,o.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function l(e){const t=s(e)??"",n=function(){const e=(0,a.k6)();return(0,r.useCallback)(((t,n,r)=>{const a=new URLSearchParams(e.location.search);n?a.set(t,n):a.delete(t),(r?.push?e.push:e.replace)({search:a.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},67392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},10833:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>g});var r=n(67294),a=n(788),o=n(35742),i=n(30226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(44996),c=n(82128),u=n(85893);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=(0,c.p)(t),{withBaseUrl:d}=(0,l.C)(),p=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.Z,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,a.Z)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(o.Z,{children:(0,u.jsx)("html",{className:s})}),n]})}function g(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,a.Z)(r,o),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(67294),a=n(20469),o=n(85893);function i(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},98022:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(67294),a=n(723),o=n(52263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>h,OC:()=>u,RF:()=>f,o5:()=>g});var r=n(67294),a=n(10412),o=n(72389),i=n(20469),s=n(902),l=n(85893);const c=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.i6("ScrollControllerProvider");return e}const p=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(p()),o=(0,s.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function g(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.Z)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function h(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>l,os:()=>s});var r=n(80143),a=n(52263),o=n(60373);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,o.Oh)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=l[e],o=t[e].versions.find((e=>e.isLast));return s(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:c}}},50012:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>u,WA:()=>c});var r=n(67294);const a="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function i(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=i(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function u(e,t){const n=(0,r.useRef)((()=>null===e?l:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(52263),a=n(16550),o=n(18780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),a=n(16550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},6278:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},239:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(67294),a=n(98022),o=n(44996),i=n(6278);function s(){const{withBaseUrl:e}=(0,o.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,r.useCallback)((r=>{const o=new URL(r);if((0,a.F)(t,o.href))return r;const i=`${o.pathname+o.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},54143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},18780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},99318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>A,Ep:()=>p});var r=n(87462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&a(e),l=t&&a(t),c=s||l;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n(38776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function m(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,s.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,x=void 0===k?m:k,S=i.keyLength,_=void 0===S?6:S,E=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return E&&(o=u(o,E)),f(o,r,n)}function T(){return Math.random().toString(36).substr(2,_)}var A=g();function j(e){(0,r.Z)($,e),$.length=n.length,A.notifyListeners($.location,$.action)}function N(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||I(C(e.state))}function L(){I(C(v()))}var P=!1;function I(e){if(P)P=!1,j();else{A.confirmTransitionTo(e,"POP",x,(function(t){t?j({action:"POP",location:e}):function(e){var t=$.location,n=O.indexOf(t.key);-1===n&&(n=0);var r=O.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(P=!0,M(a))}(e)}))}}var R=C(v()),O=[R.key];function F(e){return E+p(e)}function M(e){n.go(e)}var D=0;function B(e){1===(D+=e)&&1===e?(window.addEventListener(b,N),o&&window.addEventListener(y,L)):0===D&&(window.removeEventListener(b,N),o&&window.removeEventListener(y,L))}var z=!1;var $={length:n.length,action:"POP",location:R,createHref:F,push:function(e,t){var r="PUSH",o=f(e,t,T(),$.location);A.confirmTransitionTo(o,r,x,(function(e){if(e){var t=F(o),i=o.key,s=o.state;if(a)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=O.indexOf($.location.key),c=O.slice(0,l+1);c.push(o.key),O=c,j({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,T(),$.location);A.confirmTransitionTo(o,r,x,(function(e){if(e){var t=F(o),i=o.key,s=o.state;if(a)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=O.indexOf($.location.key);-1!==l&&(O[l]=o.key),j({action:r,location:o})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=A.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var k="hashchange",x={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function E(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),h||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?m:a,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",y=x[c],v=y.encodePath,w=y.decodePath;function C(){var e=w(_());return b&&(e=u(e,b)),f(e)}var T=g();function A(e){(0,r.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var j=!1,N=null;function L(){var e,t,n=_(),r=v(n);if(n!==r)E(r);else{var a=C(),i=z.location;if(!j&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(N===p(a))return;N=null,function(e){if(j)j=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?A({action:t,location:e}):function(e){var t=z.location,n=O.lastIndexOf(p(t));-1===n&&(n=0);var r=O.lastIndexOf(p(e));-1===r&&(r=0);var a=n-r;a&&(j=!0,F(a))}(e)}))}}(a)}}var P=_(),I=v(P);P!==I&&E(I);var R=C(),O=[p(R)];function F(e){t.go(e)}var M=0;function D(e){1===(M+=e)&&1===e?window.addEventListener(k,L):0===M&&window.removeEventListener(k,L)}var B=!1;var z={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=v(b+t);if(_()!==a){N=t,function(e){window.location.hash=e}(a);var o=O.lastIndexOf(p(z.location)),i=O.slice(0,o+1);i.push(t),O=i,A({action:n,location:r})}else A()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=v(b+t);_()!==a&&(N=t,E(a));var o=O.indexOf(p(z.location));-1!==o&&(O[o]=t),A({action:n,location:r})}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return B||(D(1),B=!0),function(){return B&&(B=!1,D(-1)),t()}},listen:function(e){var t=T.appendListener(e);return D(1),function(){D(-1),t()}}};return z}function T(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=g();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,c)}var m=T(s,0,o.length-1),b=o.map((function(e){return f(e,void 0,"string"==typeof e?h():e.key||h())})),y=p;function v(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[m],index:m,entries:b,createHref:y,push:function(e,t){var r="PUSH",a=f(e,t,h(),w.location);u.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,h(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=f(n);a&&a!==g&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),m=0;m<i.length;++m){var b=i[m];if(!(o[b]||r&&r[b]||h&&h[b]||s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},41143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},7439:(e,t,n)=>{"use strict";n.r(t)},32497:(e,t,n)=>{"use strict";n.r(t)},57800:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},85795:()=>{Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],attribute:{pattern:/\b'\w+/,alias:"attr-name"},keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:false|true)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:\w)*\b/i}},57874:()=>{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash}(Prism)},79016:()=>{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n<t;n++)e=e.replace(/<<self>>/g,(function(){return"(?:"+e+")"}));return e.replace(/<<self>>/g,"[^\\s\\S]")}var a="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",o="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",s="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var c=l(o),u=RegExp(l(a+" "+o+" "+i+" "+s)),d=l(o+" "+i+" "+s),p=l(a+" "+o+" "+s),f=r(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),g=r(/\((?:[^()]|<<self>>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,m=t(/<<0>>(?:\s*<<1>>)?/.source,[h,f]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,m]),y=/\[\s*(?:,\s*)*\]/.source,v=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,y]),w=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[f,g,y]),k=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),x=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[k,b,y]),S={keyword:u,punctuation:/[<>()?,.:[\]]/},_=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,E=/"(?:\\.|[^\\"\r\n])*"/.source,C=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[C]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[E]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,x]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[c,m]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[v]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[x,p,h]),inside:S}],keyword:u,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[g]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[x,b]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[x]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,f]),inside:{function:n(/^<<0>>/.source,[h]),generic:{pattern:RegExp(f),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[c,m,h,x,u.source,g,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[m,g]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:u,"class-name":{pattern:RegExp(x),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var T=E+"|"+_,A=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[T]),j=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[A]),2),N=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,L=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,j]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[N,L]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[N]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[j]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var P=/:[^}\r\n]+/.source,I=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[A]),2),R=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[I,P]),O=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[T]),2),F=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[O,P]);function M(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,P]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[R]),lookbehind:!0,greedy:!0,inside:M(R,I)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[F]),lookbehind:!0,greedy:!0,inside:M(F,O)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},60397:()=>{!function(e){var t="(?:"+[/[a-zA-Z_\x80-\uFFFF][\w\x80-\uFFFF]*/.source,/-?(?:\.\d+|\d+(?:\.\d*)?)/.source,/"[^"\\]*(?:\\[\s\S][^"\\]*)*"/.source,/<(?:[^<>]|(?!<!--)<(?:[^<>"']|"[^"]*"|'[^']*')+>|<!--(?:[^-]|-(?!->))*-->)*>/.source].join("|")+")",n={markup:{pattern:/(^<)[\s\S]+(?=>$)/,lookbehind:!0,alias:["language-markup","language-html","language-xml"],inside:e.languages.markup}};function r(e,n){return RegExp(e.replace(/<ID>/g,(function(){return t})),n)}e.languages.dot={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,greedy:!0},"graph-name":{pattern:r(/(\b(?:digraph|graph|subgraph)[ \t\r\n]+)<ID>/.source,"i"),lookbehind:!0,greedy:!0,alias:"class-name",inside:n},"attr-value":{pattern:r(/(=[ \t\r\n]*)<ID>/.source),lookbehind:!0,greedy:!0,inside:n},"attr-name":{pattern:r(/([\[;, \t\r\n])<ID>(?=[ \t\r\n]*=)/.source),lookbehind:!0,greedy:!0,inside:n},keyword:/\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,"compass-point":{pattern:/(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,lookbehind:!0,alias:"builtin"},node:{pattern:r(/(^|[^-.\w\x80-\uFFFF\\])<ID>/.source),lookbehind:!0,greedy:!0,inside:n},operator:/[=:]|-[->]/,punctuation:/[\[\]{};,]/},e.languages.gv=e.languages.dot}(Prism)},81295:()=>{Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import|qualified)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},Prism.languages.hs=Prism.languages.haskell},52503:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},96854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(a>=o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),g=p.indexOf(f);if(g>-1){++a;var h=p.substring(0,g),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(g+f.length),y=[];h&&y.push.apply(y,i([h])),y.push(m),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},58704:()=>{Prism.languages.nix={comment:{pattern:/\/\*[\s\S]*?\*\/|#.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\[\s\S])*"|''(?:(?!'')[\s\S]|''(?:'|\\|\$\{))*''/,greedy:!0,inside:{interpolation:{pattern:/(^|(?:^|(?!'').)[^\\])\$\{(?:[^{}]|\{[^}]*\})*\}/,lookbehind:!0,inside:null}}},url:[/\b(?:[a-z]{3,7}:\/\/)[\w\-+%~\/.:#=?&]+/,{pattern:/([^\/])(?:[\w\-+%~.:#=?&]*(?!\/\/)[\w\-+%~\/.:#=?&])?(?!\/\/)\/[\w\-+%~\/.:#=?&]*/,lookbehind:!0}],antiquotation:{pattern:/\$(?=\{)/,alias:"important"},number:/\b\d+\b/,keyword:/\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\b/,function:/\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:Tarball|url)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\b|\bfoldl'\B/,boolean:/\b(?:false|true)\b/,operator:/[=!<>]=?|\+\+?|\|\||&&|\/\/|->?|[?@]/,punctuation:/[{}()[\].,:;]/},Prism.languages.nix.string.inside.interpolation.inside=Prism.languages.nix},13210:()=>{Prism.languages.pascal={directive:{pattern:/\{\$[\s\S]*?\}/,greedy:!0,alias:["marco","property"]},comment:{pattern:/\(\*[\s\S]*?\*\)|\{[\s\S]*?\}|\/\/.*/,greedy:!0},string:{pattern:/(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,greedy:!0},asm:{pattern:/(\basm\b)[\s\S]+?(?=\bend\s*[;[])/i,lookbehind:!0,greedy:!0,inside:null},keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/(?:[&%]\d+|\$[a-f\d]+)/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.pascal.asm.inside=Prism.languages.extend("pascal",{asm:void 0,keyword:void 0,operator:void 0}),Prism.languages.objectpascal=Prism.languages.pascal},80366:()=>{Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},59385:()=>{!function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",r=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+r),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+r+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism)},70767:()=>{!function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism)},30218:(e,t,n)=>{var r={"./prism-ada":85795,"./prism-bash":57874,"./prism-csharp":79016,"./prism-dot":60397,"./prism-haskell":81295,"./prism-java":52503,"./prism-nix":58704,"./prism-pascal":13210,"./prism-python":80366,"./prism-ruby":59385,"./prism-rust":70767};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=30218},92703:(e,t,n)=>{"use strict";var r=n(50414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),a=n(63840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var m={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){m[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];m[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){m[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){m[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){m[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){m[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){m[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){m[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){m[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var a=m.hasOwnProperty(t)?m[t]:null;(null!==a?0!==a.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!d.call(g,e)||!d.call(f,e)&&(p.test(e)?g[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){m[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),m.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){m[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),x=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),N=Symbol.for("react.suspense_list"),L=Symbol.for("react.memo"),P=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var I=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var R=Symbol.iterator;function O(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=R&&e[R]||e["@@iterator"])?e:null}var F,M=Object.assign;function D(e){if(void 0===F)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);F=t&&t[1]||""}return"\n"+F+e}var B=!1;function z(e,t){if(!e||B)return"";B=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var a=c.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(1!==i||1!==s)do{if(i--,0>--s||a[i]!==o[s]){var l="\n"+a[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{B=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?D(e):""}function $(e){switch(e.tag){case 5:return D(e.type);case 16:return D("Lazy");case 13:return D("Suspense");case 19:return D("SuspenseList");case 0:case 2:case 15:return e=z(e.type,!1);case 11:return e=z(e.type.render,!1);case 1:return e=z(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case x:return"Portal";case E:return"Profiler";case _:return"StrictMode";case j:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case L:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case P:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function Z(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===_?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function H(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function W(e){e._valueTracker||(e._valueTracker=function(e){var t=V(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function G(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function K(e,t){var n=t.checked;return M({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Q(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function X(e,t){Q(e,t);var n=H(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+H(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(o(91));return M({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ae(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(o(92));if(te(n)){if(1<n.length)throw Error(o(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:H(n)}}function oe(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ge=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function me(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(fe).forEach((function(e){ge.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=M({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(o(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(o(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(o(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(o(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Se=null,_e=null;function Ee(e){if(e=va(e)){if("function"!=typeof xe)throw Error(o(280));var t=e.stateNode;t&&(t=ka(t),xe(e.stateNode,e.type,t))}}function Ce(e){Se?_e?_e.push(e):_e=[e]:Se=e}function Te(){if(Se){var e=Se,t=_e;if(_e=Se=null,Ee(e),t)for(e=0;e<t.length;e++)Ee(t[e])}}function Ae(e,t){return e(t)}function je(){}var Ne=!1;function Le(e,t,n){if(Ne)return e(t,n);Ne=!0;try{return Ae(e,t,n)}finally{Ne=!1,(null!==Se||null!==_e)&&(je(),Te())}}function Pe(e,t){var n=e.stateNode;if(null===n)return null;var r=ka(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(o(231,t,typeof n));return n}var Ie=!1;if(u)try{var Re={};Object.defineProperty(Re,"passive",{get:function(){Ie=!0}}),window.addEventListener("test",Re,Re),window.removeEventListener("test",Re,Re)}catch(ue){Ie=!1}function Oe(e,t,n,r,a,o,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Fe=!1,Me=null,De=!1,Be=null,ze={onError:function(e){Fe=!0,Me=e}};function $e(e,t,n,r,a,o,i,s,l){Fe=!1,Me=null,Oe.apply(ze,arguments)}function Ue(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ze(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function He(e){if(Ue(e)!==e)throw Error(o(188))}function Ve(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(o(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var i=a.alternate;if(null===i){if(null!==(r=a.return)){n=r;continue}break}if(a.child===i.child){for(i=a.child;i;){if(i===n)return He(a),e;if(i===r)return He(a),t;i=i.sibling}throw Error(o(188))}if(n.return!==r.return)n=a,r=i;else{for(var s=!1,l=a.child;l;){if(l===n){s=!0,n=a,r=i;break}if(l===r){s=!0,r=a,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=a;break}if(l===r){s=!0,r=i,n=a;break}l=l.sibling}if(!s)throw Error(o(189))}}if(n.alternate!==r)throw Error(o(190))}if(3!==n.tag)throw Error(o(188));return n.stateNode.current===n?e:t}(e))?We(e):null}function We(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=We(e);if(null!==t)return t;e=e.sibling}return null}var Ge=a.unstable_scheduleCallback,qe=a.unstable_cancelCallback,Ke=a.unstable_shouldYield,Ye=a.unstable_requestPaint,Qe=a.unstable_now,Xe=a.unstable_getCurrentPriorityLevel,Je=a.unstable_ImmediatePriority,et=a.unstable_UserBlockingPriority,tt=a.unstable_NormalPriority,nt=a.unstable_LowPriority,rt=a.unstable_IdlePriority,at=null,ot=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~a;0!==s?r=dt(s):0!==(o&=i)&&(r=dt(o))}else 0!==(i=n&~a)?r=dt(i):0!==o&&(r=dt(o));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&a)&&((a=r&-r)>=(o=t&-t)||16===a&&0!=(4194240&o)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-it(t)),r|=e[n],t&=~a;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function gt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function mt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var kt,xt,St,_t,Et,Ct=!1,Tt=[],At=null,jt=null,Nt=null,Lt=new Map,Pt=new Map,It=[],Rt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ot(e,t){switch(e){case"focusin":case"focusout":At=null;break;case"dragenter":case"dragleave":jt=null;break;case"mouseover":case"mouseout":Nt=null;break;case"pointerover":case"pointerout":Lt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Pt.delete(t.pointerId)}}function Ft(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},null!==t&&(null!==(t=va(t))&&xt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function Mt(e){var t=ya(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ze(n)))return e.blockedOn=t,void Et(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Dt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Kt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=va(n))&&xt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function Bt(e,t,n){Dt(e)&&n.delete(t)}function zt(){Ct=!1,null!==At&&Dt(At)&&(At=null),null!==jt&&Dt(jt)&&(jt=null),null!==Nt&&Dt(Nt)&&(Nt=null),Lt.forEach(Bt),Pt.forEach(Bt)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,zt)))}function Ut(e){function t(t){return $t(t,e)}if(0<Tt.length){$t(Tt[0],e);for(var n=1;n<Tt.length;n++){var r=Tt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==At&&$t(At,e),null!==jt&&$t(jt,e),null!==Nt&&$t(Nt,e),Lt.forEach(t),Pt.forEach(t),n=0;n<It.length;n++)(r=It[n]).blockedOn===e&&(r.blockedOn=null);for(;0<It.length&&null===(n=It[0]).blockedOn;)Mt(n),null===n.blockedOn&&It.shift()}var Zt=w.ReactCurrentBatchConfig,Ht=!0;function Vt(e,t,n,r){var a=vt,o=Zt.transition;Zt.transition=null;try{vt=1,Gt(e,t,n,r)}finally{vt=a,Zt.transition=o}}function Wt(e,t,n,r){var a=vt,o=Zt.transition;Zt.transition=null;try{vt=4,Gt(e,t,n,r)}finally{vt=a,Zt.transition=o}}function Gt(e,t,n,r){if(Ht){var a=Kt(e,t,n,r);if(null===a)Hr(e,t,r,qt,n),Ot(e,r);else if(function(e,t,n,r,a){switch(t){case"focusin":return At=Ft(At,e,t,n,r,a),!0;case"dragenter":return jt=Ft(jt,e,t,n,r,a),!0;case"mouseover":return Nt=Ft(Nt,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return Lt.set(o,Ft(Lt.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,Pt.set(o,Ft(Pt.get(o)||null,e,t,n,r,a)),!0}return!1}(a,e,t,n,r))r.stopPropagation();else if(Ot(e,r),4&t&&-1<Rt.indexOf(e)){for(;null!==a;){var o=va(a);if(null!==o&&kt(o),null===(o=Kt(e,t,n,r))&&Hr(e,t,r,qt,n),o===a)break;a=o}null!==a&&r.stopPropagation()}else Hr(e,t,r,null,n)}}var qt=null;function Kt(e,t,n,r){if(qt=null,null!==(e=ya(e=ke(r))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=Ze(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return qt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Qt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,a="value"in Qt?Qt.value:Qt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return Jt=a.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function an(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return M(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var on,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=an(cn),dn=M({},cn,{view:0,detail:0}),pn=an(dn),fn=M({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:En,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(on=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=on=0,ln=e),on)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),gn=an(fn),hn=an(M({},fn,{dataTransfer:0})),mn=an(M({},dn,{relatedTarget:0})),bn=an(M({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=M({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=an(yn),wn=an(M({},cn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function _n(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function En(){return _n}var Cn=M({},dn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:En,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=an(Cn),An=an(M({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),jn=an(M({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:En})),Nn=an(M({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=M({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Pn=an(Ln),In=[9,13,27,32],Rn=u&&"CompositionEvent"in window,On=null;u&&"documentMode"in document&&(On=document.documentMode);var Fn=u&&"TextEvent"in window&&!On,Mn=u&&(!Rn||On&&8<On&&11>=On),Dn=String.fromCharCode(32),Bn=!1;function zn(e,t){switch(e){case"keyup":return-1!==In.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var Zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Zn[e.type]:"textarea"===t}function Vn(e,t,n,r){Ce(r),0<(t=Wr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Wn=null,Gn=null;function qn(e){Dr(e,0)}function Kn(e){if(G(wa(e)))return e}function Yn(e,t){if("change"===e)return t}var Qn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Wn&&(Wn.detachEvent("onpropertychange",nr),Gn=Wn=null)}function nr(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];Vn(t,Gn,e,ke(e)),Le(qn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Gn=n,(Wn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function ar(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function or(e,t){if("click"===e)return Kn(t)}function ir(e,t){if("input"===e||"change"===e)return Kn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var a=n[r];if(!d.call(t,a)||!sr(e[a],t[a]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=q((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function gr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=void 0===r.end?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=ur(n,o);var i=ur(n,r);a&&i&&(1!==e.rangeCount||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hr=u&&"documentMode"in document&&11>=document.documentMode,mr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==mr||mr!==q(r)||("selectionStart"in(r=mr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Wr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=mr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},Sr={},_r={};function Er(e){if(Sr[e])return Sr[e];if(!xr[e])return e;var t,n=xr[e];for(t in n)if(n.hasOwnProperty(t)&&t in _r)return Sr[e]=n[t];return e}u&&(_r=document.createElement("div").style,"AnimationEvent"in window||(delete xr.animationend.animation,delete xr.animationiteration.animation,delete xr.animationstart.animation),"TransitionEvent"in window||delete xr.transitionend.transition);var Cr=Er("animationend"),Tr=Er("animationiteration"),Ar=Er("animationstart"),jr=Er("transitionend"),Nr=new Map,Lr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Pr(e,t){Nr.set(e,t),l(t,[e])}for(var Ir=0;Ir<Lr.length;Ir++){var Rr=Lr[Ir];Pr(Rr.toLowerCase(),"on"+(Rr[0].toUpperCase()+Rr.slice(1)))}Pr(Cr,"onAnimationEnd"),Pr(Tr,"onAnimationIteration"),Pr(Ar,"onAnimationStart"),Pr("dblclick","onDoubleClick"),Pr("focusin","onFocus"),Pr("focusout","onBlur"),Pr(jr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Or="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Fr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Or));function Mr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,i,s,l,c){if($e.apply(this,arguments),Fe){if(!Fe)throw Error(o(198));var u=Me;Fe=!1,Me=null,De||(De=!0,Be=u)}}(r,t,void 0,e),e.currentTarget=null}function Dr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==o&&a.isPropagationStopped())break e;Mr(a,s,c),o=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;Mr(a,s,c),o=l}}}if(De)throw e=Be,De=!1,Be=null,e}function Br(e,t){var n=t[ha];void 0===n&&(n=t[ha]=new Set);var r=e+"__bubble";n.has(r)||(Zr(t,e,2,!1),n.add(r))}function zr(e,t,n){var r=0;t&&(r|=4),Zr(n,e,r,t)}var $r="_reactListening"+Math.random().toString(36).slice(2);function Ur(e){if(!e[$r]){e[$r]=!0,i.forEach((function(t){"selectionchange"!==t&&(Fr.has(t)||zr(t,!1,e),zr(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[$r]||(t[$r]=!0,zr("selectionchange",!1,t))}}function Zr(e,t,n,r){switch(Yt(t)){case 1:var a=Vt;break;case 4:a=Wt;break;default:a=Gt}n=a.bind(null,t,n,e),a=void 0,!Ie||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Hr(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===a||8===s.nodeType&&s.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===a||8===l.nodeType&&l.parentNode===a))return;i=i.return}for(;null!==s;){if(null===(i=ya(s)))return;if(5===(l=i.tag)||6===l){r=o=i;continue e}s=s.parentNode}}r=r.return}Le((function(){var r=o,a=ke(n),i=[];e:{var s=Nr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":c="focus",l=mn;break;case"focusout":c="blur",l=mn;break;case"beforeblur":case"afterblur":l=mn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=jn;break;case Cr:case Tr:case Ar:l=bn;break;case jr:l=Nn;break;case"scroll":l=pn;break;case"wheel":l=Pn;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=An}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,g=r;null!==g;){var h=(f=g).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&(null!=(h=Pe(g,p))&&u.push(Vr(g,h,f)))),d)break;g=g.return}0<u.length&&(s=new l(s,c,null,n,a),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!ya(c)&&!c[ga])&&(l||s)&&(s=a.window===a?a:(s=a.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?ya(c):null)&&(c!==(d=Ue(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=gn,h="onMouseLeave",p="onMouseEnter",g="mouse","pointerout"!==e&&"pointerover"!==e||(u=An,h="onPointerLeave",p="onPointerEnter",g="pointer"),d=null==l?s:wa(l),f=null==c?s:wa(c),(s=new u(h,g+"leave",l,n,a)).target=d,s.relatedTarget=f,h=null,ya(a)===r&&((u=new u(p,g+"enter",c,n,a)).target=f,u.relatedTarget=d,h=u),d=h,l&&c)e:{for(p=c,g=0,f=u=l;f;f=Gr(f))g++;for(f=0,h=p;h;h=Gr(h))f++;for(;0<g-f;)u=Gr(u),g--;for(;0<f-g;)p=Gr(p),f--;for(;g--;){if(u===p||null!==p&&u===p.alternate)break e;u=Gr(u),p=Gr(p)}u=null}else u=null;null!==l&&qr(i,s,l,u,!1),null!==c&&null!==d&&qr(i,d,c,u,!0)}if("select"===(l=(s=r?wa(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var m=Yn;else if(Hn(s))if(Qn)m=ir;else{m=ar;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(m=or);switch(m&&(m=m(e,r))?Vn(i,m,n,a):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?wa(r):window,e){case"focusin":(Hn(b)||"true"===b.contentEditable)&&(mr=b,br=r,yr=null);break;case"focusout":yr=br=mr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(i,n,a);break;case"selectionchange":if(hr)break;case"keydown":case"keyup":wr(i,n,a)}var y;if(Rn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Un?zn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Mn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==v?"onCompositionEnd"===v&&Un&&(y=en()):(Xt="value"in(Qt=a)?Qt.value:Qt.textContent,Un=!0)),0<(b=Wr(r,v)).length&&(v=new wn(v,e,null,n,a),i.push({event:v,listeners:b}),y?v.data=y:null!==(y=$n(n))&&(v.data=y))),(y=Fn?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(Bn=!0,Dn);case"textInput":return(e=t.data)===Dn&&Bn?null:e;default:return null}}(e,n):function(e,t){if(Un)return"compositionend"===e||!Rn&&zn(e,t)?(e=en(),Jt=Xt=Qt=null,Un=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Mn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Wr(r,"onBeforeInput")).length&&(a=new wn("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=y))}Dr(i,t)}))}function Vr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Wr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=Pe(e,n))&&r.unshift(Vr(e,o,a)),null!=(o=Pe(e,t))&&r.push(Vr(e,o,a))),e=e.return}return r}function Gr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function qr(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,a?null!=(l=Pe(n,o))&&i.unshift(Vr(n,l,s)):a||null!=(l=Pe(n,o))&&i.push(Vr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Kr=/\r\n?/g,Yr=/\u0000|\uFFFD/g;function Qr(e){return("string"==typeof e?e:""+e).replace(Kr,"\n").replace(Yr,"")}function Xr(e,t,n){if(t=Qr(t),Qr(e)!==t&&n)throw Error(o(425))}function Jr(){}var ea=null,ta=null;function na(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ra="function"==typeof setTimeout?setTimeout:void 0,aa="function"==typeof clearTimeout?clearTimeout:void 0,oa="function"==typeof Promise?Promise:void 0,ia="function"==typeof queueMicrotask?queueMicrotask:void 0!==oa?function(e){return oa.resolve(null).then(e).catch(sa)}:ra;function sa(e){setTimeout((function(){throw e}))}function la(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0===r)return e.removeChild(a),void Ut(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=a}while(n);Ut(t)}function ca(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function ua(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var da=Math.random().toString(36).slice(2),pa="__reactFiber$"+da,fa="__reactProps$"+da,ga="__reactContainer$"+da,ha="__reactEvents$"+da,ma="__reactListeners$"+da,ba="__reactHandles$"+da;function ya(e){var t=e[pa];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ga]||n[pa]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=ua(e);null!==e;){if(n=e[pa])return n;e=ua(e)}return t}n=(e=n).parentNode}return null}function va(e){return!(e=e[pa]||e[ga])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function wa(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(o(33))}function ka(e){return e[fa]||null}var xa=[],Sa=-1;function _a(e){return{current:e}}function Ea(e){0>Sa||(e.current=xa[Sa],xa[Sa]=null,Sa--)}function Ca(e,t){Sa++,xa[Sa]=e.current,e.current=t}var Ta={},Aa=_a(Ta),ja=_a(!1),Na=Ta;function La(e,t){var n=e.type.contextTypes;if(!n)return Ta;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Pa(e){return null!=(e=e.childContextTypes)}function Ia(){Ea(ja),Ea(Aa)}function Ra(e,t,n){if(Aa.current!==Ta)throw Error(o(168));Ca(Aa,t),Ca(ja,n)}function Oa(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in t))throw Error(o(108,Z(e)||"Unknown",a));return M({},n,r)}function Fa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ta,Na=Aa.current,Ca(Aa,e),Ca(ja,ja.current),!0}function Ma(e,t,n){var r=e.stateNode;if(!r)throw Error(o(169));n?(e=Oa(e,t,Na),r.__reactInternalMemoizedMergedChildContext=e,Ea(ja),Ea(Aa),Ca(Aa,e)):Ea(ja),Ca(ja,n)}var Da=null,Ba=!1,za=!1;function $a(e){null===Da?Da=[e]:Da.push(e)}function Ua(){if(!za&&null!==Da){za=!0;var e=0,t=vt;try{var n=Da;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Da=null,Ba=!1}catch(a){throw null!==Da&&(Da=Da.slice(e+1)),Ge(Je,Ua),a}finally{vt=t,za=!1}}return null}var Za=[],Ha=0,Va=null,Wa=0,Ga=[],qa=0,Ka=null,Ya=1,Qa="";function Xa(e,t){Za[Ha++]=Wa,Za[Ha++]=Va,Va=e,Wa=t}function Ja(e,t,n){Ga[qa++]=Ya,Ga[qa++]=Qa,Ga[qa++]=Ka,Ka=e;var r=Ya;e=Qa;var a=32-it(r)-1;r&=~(1<<a),n+=1;var o=32-it(t)+a;if(30<o){var i=a-a%5;o=(r&(1<<i)-1).toString(32),r>>=i,a-=i,Ya=1<<32-it(t)+a|n<<a|r,Qa=o+e}else Ya=1<<o|n<<a|r,Qa=e}function eo(e){null!==e.return&&(Xa(e,1),Ja(e,1,0))}function to(e){for(;e===Va;)Va=Za[--Ha],Za[Ha]=null,Wa=Za[--Ha],Za[Ha]=null;for(;e===Ka;)Ka=Ga[--qa],Ga[qa]=null,Qa=Ga[--qa],Ga[qa]=null,Ya=Ga[--qa],Ga[qa]=null}var no=null,ro=null,ao=!1,oo=null;function io(e,t){var n=Pc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function so(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,no=e,ro=ca(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,no=e,ro=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ka?{id:Ya,overflow:Qa}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Pc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,no=e,ro=null,!0);default:return!1}}function lo(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function co(e){if(ao){var t=ro;if(t){var n=t;if(!so(e,t)){if(lo(e))throw Error(o(418));t=ca(n.nextSibling);var r=no;t&&so(e,t)?io(r,n):(e.flags=-4097&e.flags|2,ao=!1,no=e)}}else{if(lo(e))throw Error(o(418));e.flags=-4097&e.flags|2,ao=!1,no=e}}}function uo(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;no=e}function po(e){if(e!==no)return!1;if(!ao)return uo(e),ao=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!na(e.type,e.memoizedProps)),t&&(t=ro)){if(lo(e))throw fo(),Error(o(418));for(;t;)io(e,t),t=ca(t.nextSibling)}if(uo(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(o(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){ro=ca(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}ro=null}}else ro=no?ca(e.stateNode.nextSibling):null;return!0}function fo(){for(var e=ro;e;)e=ca(e.nextSibling)}function go(){ro=no=null,ao=!1}function ho(e){null===oo?oo=[e]:oo.push(e)}var mo=w.ReactCurrentBatchConfig;function bo(e,t){if(e&&e.defaultProps){for(var n in t=M({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var yo=_a(null),vo=null,wo=null,ko=null;function xo(){ko=wo=vo=null}function So(e){var t=yo.current;Ea(yo),e._currentValue=t}function _o(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Eo(e,t){vo=e,ko=wo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(ws=!0),e.firstContext=null)}function Co(e){var t=e._currentValue;if(ko!==e)if(e={context:e,memoizedValue:t,next:null},null===wo){if(null===vo)throw Error(o(308));wo=e,vo.dependencies={lanes:0,firstContext:e}}else wo=wo.next=e;return t}var To=null;function Ao(e){null===To?To=[e]:To.push(e)}function jo(e,t,n,r){var a=t.interleaved;return null===a?(n.next=n,Ao(t)):(n.next=a.next,a.next=n),t.interleaved=n,No(e,r)}function No(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Lo=!1;function Po(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Io(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ro(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Oo(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&jl)){var a=r.pending;return null===a?t.next=t:(t.next=a.next,a.next=t),r.pending=t,No(e,n)}return null===(a=r.interleaved)?(t.next=t,Ao(r)):(t.next=a.next,a.next=t),r.interleaved=t,No(e,n)}function Fo(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Mo(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Do(e,t,n,r){var a=e.updateQueue;Lo=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?o=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==o){var d=a.baseState;for(i=0,u=c=l=null,s=o;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=e,h=s;switch(p=t,f=n,h.tag){case 1:if("function"==typeof(g=h.payload)){d=g.call(f,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p="function"==typeof(g=h.payload)?g.call(f,d,p):g))break e;d=M({},d,p);break e;case 2:Lo=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=a.effects)?a.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=a.shared.pending))break;s=(p=s).next,p.next=null,a.lastBaseUpdate=p,a.shared.pending=null}}if(null===u&&(l=d),a.baseState=l,a.firstBaseUpdate=c,a.lastBaseUpdate=u,null!==(t=a.shared.interleaved)){a=t;do{i|=a.lane,a=a.next}while(a!==t)}else null===o&&(a.shared.lanes=0);Ml|=i,e.lanes=i,e.memoizedState=d}}function Bo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(o(191,a));a.call(r)}}}var zo=(new r.Component).refs;function $o(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:M({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var Uo={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),a=nc(e),o=Ro(r,a);o.payload=t,null!=n&&(o.callback=n),null!==(t=Oo(e,o,a))&&(rc(t,e,a,r),Fo(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),a=nc(e),o=Ro(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),null!==(t=Oo(e,o,a))&&(rc(t,e,a,r),Fo(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),a=Ro(n,r);a.tag=2,null!=t&&(a.callback=t),null!==(t=Oo(e,a,r))&&(rc(t,e,r,n),Fo(t,e,r))}};function Zo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(a,o))}function Ho(e,t,n){var r=!1,a=Ta,o=t.contextType;return"object"==typeof o&&null!==o?o=Co(o):(a=Pa(t)?Na:Aa.current,o=(r=null!=(r=t.contextTypes))?La(e,a):Ta),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Uo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function Vo(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Uo.enqueueReplaceState(t,t.state,null)}function Wo(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=zo,Po(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=Co(o):(o=Pa(t)?Na:Aa.current,a.context=La(e,o)),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&($o(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&Uo.enqueueReplaceState(a,a.state,null),Do(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4194308)}function Go(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(o(309));var r=n.stateNode}if(!r)throw Error(o(147,e));var a=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=a.refs;t===zo&&(t=a.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(o(284));if(!n._owner)throw Error(o(290,e))}return e}function qo(e,t){throw e=Object.prototype.toString.call(t),Error(o(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ko(e){return(0,e._init)(e._payload)}function Yo(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Rc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Dc(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function c(e,t,n,r){var o=n.type;return o===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===o||"object"==typeof o&&null!==o&&o.$$typeof===P&&Ko(o)===t.type)?((r=a(t,n.props)).ref=Go(e,t,n),r.return=e,r):((r=Oc(n.type,n.key,n.props,null,e.mode,r)).ref=Go(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Bc(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=Fc(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Dc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Oc(t.type,t.key,t.props,null,e.mode,n)).ref=Go(e,null,t),n.return=e,n;case x:return(t=Bc(t,e.mode,n)).return=e,t;case P:return p(e,(0,t._init)(t._payload),n)}if(te(t)||O(t))return(t=Fc(t,e.mode,n,null)).return=e,t;qo(e,t)}return null}function f(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==a?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===a?c(e,t,n,r):null;case x:return n.key===a?u(e,t,n,r):null;case P:return f(e,t,(a=n._init)(n._payload),r)}if(te(n)||O(n))return null!==a?null:d(e,t,n,r,null);qo(e,n)}return null}function g(e,t,n,r,a){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a);case x:return u(t,e=e.get(null===r.key?n:r.key)||null,r,a);case P:return g(e,t,n,(0,r._init)(r._payload),a)}if(te(r)||O(r))return d(t,e=e.get(n)||null,r,a,null);qo(t,r)}return null}function h(a,o,s,l){for(var c=null,u=null,d=o,h=o=0,m=null;null!==d&&h<s.length;h++){d.index>h?(m=d,d=null):m=d.sibling;var b=f(a,d,s[h],l);if(null===b){null===d&&(d=m);break}e&&d&&null===b.alternate&&t(a,d),o=i(b,o,h),null===u?c=b:u.sibling=b,u=b,d=m}if(h===s.length)return n(a,d),ao&&Xa(a,h),c;if(null===d){for(;h<s.length;h++)null!==(d=p(a,s[h],l))&&(o=i(d,o,h),null===u?c=d:u.sibling=d,u=d);return ao&&Xa(a,h),c}for(d=r(a,d);h<s.length;h++)null!==(m=g(d,a,h,s[h],l))&&(e&&null!==m.alternate&&d.delete(null===m.key?h:m.key),o=i(m,o,h),null===u?c=m:u.sibling=m,u=m);return e&&d.forEach((function(e){return t(a,e)})),ao&&Xa(a,h),c}function m(a,s,l,c){var u=O(l);if("function"!=typeof u)throw Error(o(150));if(null==(l=u.call(l)))throw Error(o(151));for(var d=u=null,h=s,m=s=0,b=null,y=l.next();null!==h&&!y.done;m++,y=l.next()){h.index>m?(b=h,h=null):b=h.sibling;var v=f(a,h,y.value,c);if(null===v){null===h&&(h=b);break}e&&h&&null===v.alternate&&t(a,h),s=i(v,s,m),null===d?u=v:d.sibling=v,d=v,h=b}if(y.done)return n(a,h),ao&&Xa(a,m),u;if(null===h){for(;!y.done;m++,y=l.next())null!==(y=p(a,y.value,c))&&(s=i(y,s,m),null===d?u=y:d.sibling=y,d=y);return ao&&Xa(a,m),u}for(h=r(a,h);!y.done;m++,y=l.next())null!==(y=g(h,a,m,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?m:y.key),s=i(y,s,m),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(a,e)})),ao&&Xa(a,m),u}return function e(r,o,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var c=i.key,u=o;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(o=a(u,i.props.children)).return=r,r=o;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===P&&Ko(c)===u.type){n(r,u.sibling),(o=a(u,i.props)).ref=Go(r,u,i),o.return=r,r=o;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((o=Fc(i.props.children,r.mode,l,i.key)).return=r,r=o):((l=Oc(i.type,i.key,i.props,null,r.mode,l)).ref=Go(r,o,i),l.return=r,r=l)}return s(r);case x:e:{for(u=i.key;null!==o;){if(o.key===u){if(4===o.tag&&o.stateNode.containerInfo===i.containerInfo&&o.stateNode.implementation===i.implementation){n(r,o.sibling),(o=a(o,i.children||[])).return=r,r=o;break e}n(r,o);break}t(r,o),o=o.sibling}(o=Bc(i,r.mode,l)).return=r,r=o}return s(r);case P:return e(r,o,(u=i._init)(i._payload),l)}if(te(i))return h(r,o,i,l);if(O(i))return m(r,o,i,l);qo(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==o&&6===o.tag?(n(r,o.sibling),(o=a(o,i)).return=r,r=o):(n(r,o),(o=Dc(i,r.mode,l)).return=r,r=o),s(r)):n(r,o)}}var Qo=Yo(!0),Xo=Yo(!1),Jo={},ei=_a(Jo),ti=_a(Jo),ni=_a(Jo);function ri(e){if(e===Jo)throw Error(o(174));return e}function ai(e,t){switch(Ca(ni,t),Ca(ti,e),Ca(ei,Jo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Ea(ei),Ca(ei,t)}function oi(){Ea(ei),Ea(ti),Ea(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(Ca(ti,e),Ca(ei,n))}function si(e){ti.current===e&&(Ea(ei),Ea(ti))}var li=_a(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,gi=0,hi=null,mi=null,bi=null,yi=!1,vi=!1,wi=0,ki=0;function xi(){throw Error(o(321))}function Si(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function _i(e,t,n,r,a,i){if(gi=i,hi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:ls,e=n(r,a),vi){i=0;do{if(vi=!1,wi=0,25<=i)throw Error(o(301));i+=1,bi=mi=null,t.updateQueue=null,pi.current=cs,e=n(r,a)}while(vi)}if(pi.current=is,t=null!==mi&&null!==mi.next,gi=0,bi=mi=hi=null,yi=!1,t)throw Error(o(300));return e}function Ei(){var e=0!==wi;return wi=0,e}function Ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?hi.memoizedState=bi=e:bi=bi.next=e,bi}function Ti(){if(null===mi){var e=hi.alternate;e=null!==e?e.memoizedState:null}else e=mi.next;var t=null===bi?hi.memoizedState:bi.next;if(null!==t)bi=t,mi=e;else{if(null===e)throw Error(o(310));e={memoizedState:(mi=e).memoizedState,baseState:mi.baseState,baseQueue:mi.baseQueue,queue:mi.queue,next:null},null===bi?hi.memoizedState=bi=e:bi=bi.next=e}return bi}function Ai(e,t){return"function"==typeof t?t(e):t}function ji(e){var t=Ti(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=mi,a=r.baseQueue,i=n.pending;if(null!==i){if(null!==a){var s=a.next;a.next=i.next,i.next=s}r.baseQueue=a=i,n.pending=null}if(null!==a){i=a.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((gi&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,hi.lanes|=d,Ml|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ws=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){a=e;do{i=a.lane,hi.lanes|=i,Ml|=i,a=a.next}while(a!==e)}else null===a&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Ni(e){var t=Ti(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,i=t.memoizedState;if(null!==a){n.pending=null;var s=a=a.next;do{i=e(i,s.action),s=s.next}while(s!==a);sr(i,t.memoizedState)||(ws=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Li(){}function Pi(e,t){var n=hi,r=Ti(),a=t(),i=!sr(r.memoizedState,a);if(i&&(r.memoizedState=a,ws=!0),r=r.queue,Hi(Oi.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(n.flags|=2048,Bi(9,Ri.bind(null,n,r,a,t),void 0,null),null===Nl)throw Error(o(349));0!=(30&gi)||Ii(n,t,a)}return a}function Ii(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ri(e,t,n,r){t.value=n,t.getSnapshot=r,Fi(t)&&Mi(e)}function Oi(e,t,n){return n((function(){Fi(t)&&Mi(e)}))}function Fi(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function Mi(e){var t=No(e,1);null!==t&&rc(t,e,1,-1)}function Di(e){var t=Ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ai,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,hi,e),[t.memoizedState,e]}function Bi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function zi(){return Ti().memoizedState}function $i(e,t,n,r){var a=Ci();hi.flags|=e,a.memoizedState=Bi(1|t,n,void 0,void 0===r?null:r)}function Ui(e,t,n,r){var a=Ti();r=void 0===r?null:r;var o=void 0;if(null!==mi){var i=mi.memoizedState;if(o=i.destroy,null!==r&&Si(r,i.deps))return void(a.memoizedState=Bi(t,n,o,r))}hi.flags|=e,a.memoizedState=Bi(1|t,n,o,r)}function Zi(e,t){return $i(8390656,8,e,t)}function Hi(e,t){return Ui(2048,8,e,t)}function Vi(e,t){return Ui(4,2,e,t)}function Wi(e,t){return Ui(4,4,e,t)}function Gi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function qi(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4,4,Gi.bind(null,t,e),n)}function Ki(){}function Yi(e,t){var n=Ti();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Qi(e,t){var n=Ti();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Xi(e,t,n){return 0==(21&gi)?(e.baseState&&(e.baseState=!1,ws=!0),e.memoizedState=n):(sr(n,t)||(n=ht(),hi.lanes|=n,Ml|=n,e.baseState=!0),t)}function Ji(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fi.transition;fi.transition={};try{e(!1),t()}finally{vt=n,fi.transition=r}}function es(){return Ti().memoizedState}function ts(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e))as(t,n);else if(null!==(n=jo(e,t,n,r))){rc(n,e,r,tc()),os(n,t,r)}}function ns(e,t,n){var r=nc(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))as(t,a);else{var o=e.alternate;if(0===e.lanes&&(null===o||0===o.lanes)&&null!==(o=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(a.next=a,Ao(t)):(a.next=l.next,l.next=a),void(t.interleaved=a)}}catch(c){}null!==(n=jo(e,t,a,r))&&(rc(n,e,r,a=tc()),os(n,t,r))}}function rs(e){var t=e.alternate;return e===hi||null!==t&&t===hi}function as(e,t){vi=yi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function os(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var is={readContext:Co,useCallback:xi,useContext:xi,useEffect:xi,useImperativeHandle:xi,useInsertionEffect:xi,useLayoutEffect:xi,useMemo:xi,useReducer:xi,useRef:xi,useState:xi,useDebugValue:xi,useDeferredValue:xi,useTransition:xi,useMutableSource:xi,useSyncExternalStore:xi,useId:xi,unstable_isNewReconciler:!1},ss={readContext:Co,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Co,useEffect:Zi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,$i(4194308,4,Gi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return $i(4194308,4,e,t)},useInsertionEffect:function(e,t){return $i(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ci();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ts.bind(null,hi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:Di,useDebugValue:Ki,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=Di(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hi,a=Ci();if(ao){if(void 0===n)throw Error(o(407));n=n()}else{if(n=t(),null===Nl)throw Error(o(349));0!=(30&gi)||Ii(r,t,n)}a.memoizedState=n;var i={value:n,getSnapshot:t};return a.queue=i,Zi(Oi.bind(null,r,i,e),[e]),r.flags|=2048,Bi(9,Ri.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=Nl.identifierPrefix;if(ao){var n=Qa;t=":"+t+"R"+(n=(Ya&~(1<<32-it(Ya)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=ki++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Hi,useImperativeHandle:qi,useInsertionEffect:Vi,useLayoutEffect:Wi,useMemo:Qi,useReducer:ji,useRef:zi,useState:function(){return ji(Ai)},useDebugValue:Ki,useDeferredValue:function(e){return Xi(Ti(),mi.memoizedState,e)},useTransition:function(){return[ji(Ai)[0],Ti().memoizedState]},useMutableSource:Li,useSyncExternalStore:Pi,useId:es,unstable_isNewReconciler:!1},cs={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Hi,useImperativeHandle:qi,useInsertionEffect:Vi,useLayoutEffect:Wi,useMemo:Qi,useReducer:Ni,useRef:zi,useState:function(){return Ni(Ai)},useDebugValue:Ki,useDeferredValue:function(e){var t=Ti();return null===mi?t.memoizedState=e:Xi(t,mi.memoizedState,e)},useTransition:function(){return[Ni(Ai)[0],Ti().memoizedState]},useMutableSource:Li,useSyncExternalStore:Pi,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",r=t;do{n+=$(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function gs(e,t,n){(n=Ro(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Vl||(Vl=!0,Wl=r),ps(0,t)},n}function hs(e,t,n){(n=Ro(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){ps(0,t)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof r&&(null===Gl?Gl=new Set([this]):Gl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function ms(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fs;var a=new Set;r.set(t,a)}else void 0===(a=r.get(t))&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=Cc.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function ys(e,t,n,r,a){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Ro(-1,1)).tag=2,Oo(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=a,e)}var vs=w.ReactCurrentOwner,ws=!1;function ks(e,t,n,r){t.child=null===e?Xo(t,null,n,r):Qo(t,e.child,n,r)}function xs(e,t,n,r,a){n=n.render;var o=t.ref;return Eo(t,a),r=_i(e,t,n,r,o,a),n=Ei(),null===e||ws?(ao&&n&&eo(t),t.flags|=1,ks(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Vs(e,t,a))}function Ss(e,t,n,r,a){if(null===e){var o=n.type;return"function"!=typeof o||Ic(o)||void 0!==o.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Oc(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=o,_s(e,t,o,r,a))}if(o=e.child,0==(e.lanes&a)){var i=o.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Vs(e,t,a)}return t.flags|=1,(e=Rc(o,r)).ref=t.ref,e.return=t,t.child=e}function _s(e,t,n,r,a){if(null!==e){var o=e.memoizedProps;if(lr(o,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=o,0==(e.lanes&a))return t.lanes=e.lanes,Vs(e,t,a);0!=(131072&e.flags)&&(ws=!0)}}return Ts(e,t,n,r,a)}function Es(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ca(Rl,Il),Il|=n;else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ca(Rl,Il),Il|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==o?o.baseLanes:n,Ca(Rl,Il),Il|=r}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Ca(Rl,Il),Il|=r;return ks(e,t,a,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ts(e,t,n,r,a){var o=Pa(n)?Na:Aa.current;return o=La(t,o),Eo(t,a),n=_i(e,t,n,r,o,a),r=Ei(),null===e||ws?(ao&&r&&eo(t),t.flags|=1,ks(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Vs(e,t,a))}function As(e,t,n,r,a){if(Pa(n)){var o=!0;Fa(t)}else o=!1;if(Eo(t,a),null===t.stateNode)Hs(e,t),Ho(t,n,r),Wo(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Co(c):c=La(t,c=Pa(n)?Na:Aa.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&Vo(t,i,r,c),Lo=!1;var p=t.memoizedState;i.state=p,Do(t,r,i,a),l=t.memoizedState,s!==r||p!==l||ja.current||Lo?("function"==typeof u&&($o(t,n,u,r),l=t.memoizedState),(s=Lo||Zo(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Io(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:bo(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Co(l):l=La(t,l=Pa(n)?Na:Aa.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&Vo(t,i,r,l),Lo=!1,p=t.memoizedState,i.state=p,Do(t,r,i,a);var g=t.memoizedState;s!==d||p!==g||ja.current||Lo?("function"==typeof f&&($o(t,n,f,r),g=t.memoizedState),(c=Lo||Zo(t,n,c,r,p,g,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,g,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,g,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=g),i.props=r,i.state=g,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return js(e,t,n,r,o,a)}function js(e,t,n,r,a,o){Cs(e,t);var i=0!=(128&t.flags);if(!r&&!i)return a&&Ma(t,n,!1),Vs(e,t,o);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Qo(t,e.child,null,o),t.child=Qo(t,null,s,o)):ks(e,t,s,o),t.memoizedState=r.state,a&&Ma(t,n,!0),t.child}function Ns(e){var t=e.stateNode;t.pendingContext?Ra(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ra(0,t.context,!1),ai(e,t.containerInfo)}function Ls(e,t,n,r,a){return go(),ho(a),t.flags|=256,ks(e,t,n,r),t.child}var Ps,Is,Rs,Os,Fs={dehydrated:null,treeContext:null,retryLane:0};function Ms(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ds(e,t,n){var r,a=t.pendingProps,i=li.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Ca(li,1&i),null===e)return co(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=a.children,e=a.fallback,s?(a=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&a)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Mc(l,a,0,null),e=Fc(e,a,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Ms(n),t.memoizedState=Fs,e):Bs(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,a,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=ds(Error(o(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,a=t.mode,r=Mc({mode:"visible",children:r.children},a,0,null),(i=Fc(i,a,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Qo(t,e.child,null,s),t.child.memoizedState=Ms(s),t.memoizedState=Fs,i);if(0==(1&t.mode))return zs(e,t,s,null);if("$!"===a.data){if(r=a.nextSibling&&a.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=ds(i=Error(o(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=Nl)){switch(s&-s){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}0!==(a=0!=(a&(r.suspendedLanes|s))?0:a)&&a!==i.retryLane&&(i.retryLane=a,No(e,a),rc(r,e,a,-1))}return mc(),zs(e,t,s,r=ds(Error(o(421))))}return"$?"===a.data?(t.flags|=128,t.child=e.child,t=Ac.bind(null,e),a._reactRetry=t,null):(e=i.treeContext,ro=ca(a.nextSibling),no=t,ao=!0,oo=null,null!==e&&(Ga[qa++]=Ya,Ga[qa++]=Qa,Ga[qa++]=Ka,Ya=e.id,Qa=e.overflow,Ka=t),t=Bs(t,r.children),t.flags|=4096,t)}(e,t,l,a,r,i,n);if(s){s=a.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:a.children};return 0==(1&l)&&t.child!==i?((a=t.child).childLanes=0,a.pendingProps=c,t.deletions=null):(a=Rc(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Rc(r,s):(s=Fc(s,l,n,null)).flags|=2,s.return=t,a.return=t,a.sibling=s,t.child=a,a=s,s=t.child,l=null===(l=e.child.memoizedState)?Ms(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Fs,a}return e=(s=e.child).sibling,a=Rc(s,{mode:"visible",children:a.children}),0==(1&t.mode)&&(a.lanes=n),a.return=t,a.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=a,t.memoizedState=null,a}function Bs(e,t){return(t=Mc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ho(r),Qo(t,e.child,null,n),(e=Bs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function $s(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),_o(e.return,t,n)}function Us(e,t,n,r,a){var o=e.memoizedState;null===o?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function Zs(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(ks(e,t,r.children,n),0!=(2&(r=li.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&$s(e,n,t);else if(19===e.tag)$s(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Ca(li,r),0==(1&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),Us(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===ci(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}Us(t,!0,n,null,o);break;case"together":Us(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Hs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Vs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ml|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(o(153));if(null!==t.child){for(n=Rc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Rc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Ws(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Gs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=14680064&a.subtreeFlags,r|=14680064&a.flags,a.return=e,a=a.sibling;else for(a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function qs(e,t,n){var r=t.pendingProps;switch(to(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Gs(t),null;case 1:case 17:return Pa(t.type)&&Ia(),Gs(t),null;case 3:return r=t.stateNode,oi(),Ea(ja),Ea(Aa),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(po(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==oo&&(sc(oo),oo=null))),Is(e,t),Gs(t),null;case 5:si(t);var a=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Rs(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(o(166));return Gs(t),null}if(e=ri(ei.current),po(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[pa]=t,r[fa]=i,e=0!=(1&t.mode),n){case"dialog":Br("cancel",r),Br("close",r);break;case"iframe":case"object":case"embed":Br("load",r);break;case"video":case"audio":for(a=0;a<Or.length;a++)Br(Or[a],r);break;case"source":Br("error",r);break;case"img":case"image":case"link":Br("error",r),Br("load",r);break;case"details":Br("toggle",r);break;case"input":Y(r,i),Br("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},Br("invalid",r);break;case"textarea":ae(r,i),Br("invalid",r)}for(var l in ye(n,i),a=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),a=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),a=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Br("scroll",r)}switch(n){case"input":W(r),J(r,i,!0);break;case"textarea":W(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=a,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===a.nodeType?a:a.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[pa]=t,e[fa]=r,Ps(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Br("cancel",e),Br("close",e),a=r;break;case"iframe":case"object":case"embed":Br("load",e),a=r;break;case"video":case"audio":for(a=0;a<Or.length;a++)Br(Or[a],e);a=r;break;case"source":Br("error",e),a=r;break;case"img":case"image":case"link":Br("error",e),Br("load",e),a=r;break;case"details":Br("toggle",e),a=r;break;case"input":Y(e,r),a=K(e,r),Br("invalid",e);break;case"option":default:a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=M({},r,{value:void 0}),Br("invalid",e);break;case"textarea":ae(e,r),a=re(e,r),Br("invalid",e)}for(i in ye(n,a),c=a)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?me(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&Br("scroll",e):null!=u&&v(e,i,u,l))}switch(n){case"input":W(e),J(e,r,!1);break;case"textarea":W(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+H(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Gs(t),null;case 6:if(e&&null!=t.stateNode)Os(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(o(166));if(n=ri(ni.current),ri(ei.current),po(t)){if(r=t.stateNode,n=t.memoizedProps,r[pa]=t,(i=r.nodeValue!==n)&&null!==(e=no))switch(e.tag){case 3:Xr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[pa]=t,t.stateNode=r}return Gs(t),null;case 13:if(Ea(li),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ao&&null!==ro&&0!=(1&t.mode)&&0==(128&t.flags))fo(),go(),t.flags|=98560,i=!1;else if(i=po(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(o(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(o(317));i[pa]=t}else go(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Gs(t),i=!1}else null!==oo&&(sc(oo),oo=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&li.current)?0===Ol&&(Ol=3):mc())),null!==t.updateQueue&&(t.flags|=4),Gs(t),null);case 4:return oi(),Is(e,t),null===e&&Ur(t.stateNode.containerInfo),Gs(t),null;case 10:return So(t.type._context),Gs(t),null;case 19:if(Ea(li),null===(i=t.memoizedState))return Gs(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Ws(i,!1);else{if(0!==Ol||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ci(e))){for(t.flags|=128,Ws(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Ca(li,1&li.current|2),t.child}e=e.sibling}null!==i.tail&&Qe()>Zl&&(t.flags|=128,r=!0,Ws(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Ws(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!ao)return Gs(t),null}else 2*Qe()-i.renderingStartTime>Zl&&1073741824!==n&&(t.flags|=128,r=!0,Ws(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Qe(),t.sibling=null,n=li.current,Ca(li,r?1&n|2:1&n),t):(Gs(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Il)&&(Gs(t),6&t.subtreeFlags&&(t.flags|=8192)):Gs(t),null;case 24:case 25:return null}throw Error(o(156,t.tag))}function Ks(e,t){switch(to(t),t.tag){case 1:return Pa(t.type)&&Ia(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return oi(),Ea(ja),Ea(Aa),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Ea(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(o(340));go()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Ea(li),null;case 4:return oi(),null;case 10:return So(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}Ps=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Is=function(){},Rs=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,ri(ei.current);var o,i=null;switch(n){case"input":a=K(e,a),r=K(e,r),i=[];break;case"select":a=M({},a,{value:void 0}),r=M({},r,{value:void 0}),i=[];break;case"textarea":a=re(e,a),r=re(e,r),i=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&null!=a[u])if("style"===u){var l=a[u];for(o in l)l.hasOwnProperty(o)&&(n||(n={}),n[o]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=a?a[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(o in l)!l.hasOwnProperty(o)||c&&c.hasOwnProperty(o)||(n||(n={}),n[o]="");for(o in c)c.hasOwnProperty(o)&&l[o]!==c[o]&&(n||(n={}),n[o]=c[o])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Br("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Os=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ys=!1,Qs=!1,Xs="function"==typeof WeakSet?WeakSet:Set,Js=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){Ec(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){Ec(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,void 0!==o&&tl(t,n,o)}a=a.next}while(a!==r)}}function al(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[pa],delete t[fa],delete t[ha],delete t[ma],delete t[ba])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)gl(e,t,n),n=n.sibling}function gl(e,t,n){if(ot&&"function"==typeof ot.onCommitFiberUnmount)try{ot.onCommitFiberUnmount(at,n)}catch(s){}switch(n.tag){case 5:Qs||el(n,t);case 6:var r=dl,a=pl;dl=null,fl(e,t,n),pl=a,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?la(e.parentNode,n):1===e.nodeType&&la(e,n),Ut(e)):la(dl,n.stateNode));break;case 4:r=dl,a=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=a;break;case 0:case 11:case 14:case 15:if(!Qs&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,void 0!==i&&(0!=(2&o)||0!=(4&o))&&tl(n,t,i),a=a.next}while(a!==r)}fl(e,t,n);break;case 1:if(!Qs&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){Ec(n,t,s)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Qs=(r=Qs)||null!==n.memoizedState,fl(e,t,n),Qs=r):fl(e,t,n);break;default:fl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xs),t.forEach((function(t){var r=jc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function ml(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var a=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(o(160));gl(i,s,a),dl=null,pl=!1;var c=a.alternate;null!==c&&(c.return=null),a.return=null}catch(u){Ec(a,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(ml(t,e),yl(e),4&r){try{rl(3,e,e.return),al(3,e)}catch(m){Ec(e,e.return,m)}try{rl(5,e,e.return)}catch(m){Ec(e,e.return,m)}}break;case 1:ml(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(ml(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var a=e.stateNode;try{pe(a,"")}catch(m){Ec(e,e.return,m)}}if(4&r&&null!=(a=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&Q(a,i),ve(l,s);var u=ve(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?me(a,p):"dangerouslySetInnerHTML"===d?de(a,p):"children"===d?pe(a,p):v(a,d,p,u)}switch(l){case"input":X(a,i);break;case"textarea":oe(a,i);break;case"select":var f=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!i.multiple;var g=i.value;null!=g?ne(a,!!i.multiple,g,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(a,!!i.multiple,i.defaultValue,!0):ne(a,!!i.multiple,i.multiple?[]:"",!1))}a[fa]=i}catch(m){Ec(e,e.return,m)}}break;case 6:if(ml(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(o(162));a=e.stateNode,i=e.memoizedProps;try{a.nodeValue=i}catch(m){Ec(e,e.return,m)}}break;case 3:if(ml(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(m){Ec(e,e.return,m)}break;case 4:default:ml(t,e),yl(e);break;case 13:ml(t,e),yl(e),8192&(a=e.child).flags&&(i=null!==a.memoizedState,a.stateNode.isHidden=i,!i||null!==a.alternate&&null!==a.alternate.memoizedState||(Ul=Qe())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Qs=(u=Qs)||d,ml(t,e),Qs=u):ml(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Js=e,d=e.child;null!==d;){for(p=Js=d;null!==Js;){switch(g=(f=Js).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(m){Ec(r,n,m)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){xl(p);continue}}null!==g?(g.return=f,Js=g):xl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{a=p.stateNode,u?"function"==typeof(i=a.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=he("display",s))}catch(m){Ec(e,e.return,m)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(m){Ec(e,e.return,m)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:ml(t,e),yl(e),4&r&&hl(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(sl(n)){var r=n;break e}n=n.return}throw Error(o(160))}switch(r.tag){case 5:var a=r.stateNode;32&r.flags&&(pe(a,""),r.flags&=-33),ul(e,ll(e),a);break;case 3:case 4:var i=r.stateNode.containerInfo;cl(e,ll(e),i);break;default:throw Error(o(161))}}catch(s){Ec(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Js=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Js;){var a=Js,o=a.child;if(22===a.tag&&r){var i=null!==a.memoizedState||Ys;if(!i){var s=a.alternate,l=null!==s&&null!==s.memoizedState||Qs;s=Ys;var c=Qs;if(Ys=i,(Qs=l)&&!c)for(Js=a;null!==Js;)l=(i=Js).child,22===i.tag&&null!==i.memoizedState?Sl(a):null!==l?(l.return=i,Js=l):Sl(a);for(;null!==o;)Js=o,wl(o,t,n),o=o.sibling;Js=a,Ys=s,Qs=c}kl(e)}else 0!=(8772&a.subtreeFlags)&&null!==o?(o.return=a,Js=o):kl(e)}}function kl(e){for(;null!==Js;){var t=Js;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Qs||al(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Qs)if(null===n)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:bo(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Bo(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Bo(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&Ut(p)}}}break;default:throw Error(o(163))}Qs||512&t.flags&&ol(t)}catch(f){Ec(t,t.return,f)}}if(t===e){Js=null;break}if(null!==(n=t.sibling)){n.return=t.return,Js=n;break}Js=t.return}}function xl(e){for(;null!==Js;){var t=Js;if(t===e){Js=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Js=n;break}Js=t.return}}function Sl(e){for(;null!==Js;){var t=Js;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{al(4,t)}catch(l){Ec(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var a=t.return;try{r.componentDidMount()}catch(l){Ec(t,a,l)}}var o=t.return;try{ol(t)}catch(l){Ec(t,o,l)}break;case 5:var i=t.return;try{ol(t)}catch(l){Ec(t,i,l)}}}catch(l){Ec(t,t.return,l)}if(t===e){Js=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Js=s;break}Js=t.return}}var _l,El=Math.ceil,Cl=w.ReactCurrentDispatcher,Tl=w.ReactCurrentOwner,Al=w.ReactCurrentBatchConfig,jl=0,Nl=null,Ll=null,Pl=0,Il=0,Rl=_a(0),Ol=0,Fl=null,Ml=0,Dl=0,Bl=0,zl=null,$l=null,Ul=0,Zl=1/0,Hl=null,Vl=!1,Wl=null,Gl=null,ql=!1,Kl=null,Yl=0,Ql=0,Xl=null,Jl=-1,ec=0;function tc(){return 0!=(6&jl)?Qe():-1!==Jl?Jl:Jl=Qe()}function nc(e){return 0==(1&e.mode)?1:0!=(2&jl)&&0!==Pl?Pl&-Pl:null!==mo.transition?(0===ec&&(ec=ht()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function rc(e,t,n,r){if(50<Ql)throw Ql=0,Xl=null,Error(o(185));bt(e,n,r),0!=(2&jl)&&e===Nl||(e===Nl&&(0==(2&jl)&&(Dl|=n),4===Ol&&lc(e,Pl)),ac(e,r),1===n&&0===jl&&0==(1&t.mode)&&(Zl=Qe()+500,Ba&&Ua()))}function ac(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var i=31-it(o),s=1<<i,l=a[i];-1===l?0!=(s&n)&&0==(s&r)||(a[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),o&=~s}}(e,t);var r=pt(e,e===Nl?Pl:0);if(0===r)null!==n&&qe(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&qe(n),1===t)0===e.tag?function(e){Ba=!0,$a(e)}(cc.bind(null,e)):$a(cc.bind(null,e)),ia((function(){0==(6&jl)&&Ua()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Nc(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Jl=-1,ec=0,0!=(6&jl))throw Error(o(327));var n=e.callbackNode;if(Sc()&&e.callbackNode!==n)return null;var r=pt(e,e===Nl?Pl:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var a=jl;jl|=2;var i=hc();for(Nl===e&&Pl===t||(Hl=null,Zl=Qe()+500,fc(e,t));;)try{vc();break}catch(l){gc(e,l)}xo(),Cl.current=i,jl=a,null!==Ll?t=0:(Nl=null,Pl=0,t=Ol)}if(0!==t){if(2===t&&(0!==(a=gt(e))&&(r=a,t=ic(e,a))),1===t)throw n=Fl,fc(e,0),lc(e,r),ac(e,Qe()),n;if(6===t)lc(e,r);else{if(a=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var a=n[r],o=a.getSnapshot;a=a.value;try{if(!sr(o(),a))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(a)&&(2===(t=bc(e,r))&&(0!==(i=gt(e))&&(r=i,t=ic(e,i))),1===t))throw n=Fl,fc(e,0),lc(e,r),ac(e,Qe()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(o(345));case 2:case 5:xc(e,$l,Hl);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=Ul+500-Qe())){if(0!==pt(e,0))break;if(((a=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=ra(xc.bind(null,e,$l,Hl),t);break}xc(e,$l,Hl);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,a=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>a&&(a=s),r&=~i}if(r=a,10<(r=(120>(r=Qe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*El(r/1960))-r)){e.timeoutHandle=ra(xc.bind(null,e,$l,Hl),r);break}xc(e,$l,Hl);break;default:throw Error(o(329))}}}return ac(e,Qe()),e.callbackNode===n?oc.bind(null,e):null}function ic(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=$l,$l=n,null!==t&&sc(t)),e}function sc(e){null===$l?$l=e:$l.push.apply($l,e)}function lc(e,t){for(t&=~Bl,t&=~Dl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&jl))throw Error(o(327));Sc();var t=pt(e,0);if(0==(1&t))return ac(e,Qe()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=gt(e);0!==r&&(t=r,n=ic(e,r))}if(1===n)throw n=Fl,fc(e,0),lc(e,t),ac(e,Qe()),n;if(6===n)throw Error(o(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,xc(e,$l,Hl),ac(e,Qe()),null}function uc(e,t){var n=jl;jl|=1;try{return e(t)}finally{0===(jl=n)&&(Zl=Qe()+500,Ba&&Ua())}}function dc(e){null!==Kl&&0===Kl.tag&&0==(6&jl)&&Sc();var t=jl;jl|=1;var n=Al.transition,r=vt;try{if(Al.transition=null,vt=1,e)return e()}finally{vt=r,Al.transition=n,0==(6&(jl=t))&&Ua()}}function pc(){Il=Rl.current,Ea(Rl)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,aa(n)),null!==Ll)for(n=Ll.return;null!==n;){var r=n;switch(to(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Ia();break;case 3:oi(),Ea(ja),Ea(Aa),di();break;case 5:si(r);break;case 4:oi();break;case 13:case 19:Ea(li);break;case 10:So(r.type._context);break;case 22:case 23:pc()}n=n.return}if(Nl=e,Ll=e=Rc(e.current,null),Pl=Il=t,Ol=0,Fl=null,Bl=Dl=Ml=0,$l=zl=null,null!==To){for(t=0;t<To.length;t++)if(null!==(r=(n=To[t]).interleaved)){n.interleaved=null;var a=r.next,o=n.pending;if(null!==o){var i=o.next;o.next=a,r.next=i}n.pending=r}To=null}return e}function gc(e,t){for(;;){var n=Ll;try{if(xo(),pi.current=is,yi){for(var r=hi.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}yi=!1}if(gi=0,bi=mi=hi=null,vi=!1,wi=0,Tl.current=null,null===n||null===n.return){Ol=1,Fl=t,Ll=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Pl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var g=bs(s);if(null!==g){g.flags&=-257,ys(g,s,l,0,t),1&g.mode&&ms(i,u,t),c=u;var h=(t=g).updateQueue;if(null===h){var m=new Set;m.add(c),t.updateQueue=m}else h.add(c);break e}if(0==(1&t)){ms(i,u,t),mc();break e}c=Error(o(426))}else if(ao&&1&l.mode){var b=bs(s);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),ys(b,s,l,0,t),ho(us(c,l));break e}}i=c=us(c,l),4!==Ol&&(Ol=2),null===zl?zl=[i]:zl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Mo(i,gs(0,c,t));break e;case 1:l=c;var y=i.type,v=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Gl||!Gl.has(v)))){i.flags|=65536,t&=-t,i.lanes|=t,Mo(i,hs(i,l,t));break e}}i=i.return}while(null!==i)}kc(n)}catch(w){t=w,Ll===n&&null!==n&&(Ll=n=n.return);continue}break}}function hc(){var e=Cl.current;return Cl.current=is,null===e?is:e}function mc(){0!==Ol&&3!==Ol&&2!==Ol||(Ol=4),null===Nl||0==(268435455&Ml)&&0==(268435455&Dl)||lc(Nl,Pl)}function bc(e,t){var n=jl;jl|=2;var r=hc();for(Nl===e&&Pl===t||(Hl=null,fc(e,t));;)try{yc();break}catch(a){gc(e,a)}if(xo(),jl=n,Cl.current=r,null!==Ll)throw Error(o(261));return Nl=null,Pl=0,Ol}function yc(){for(;null!==Ll;)wc(Ll)}function vc(){for(;null!==Ll&&!Ke();)wc(Ll)}function wc(e){var t=_l(e.alternate,e,Il);e.memoizedProps=e.pendingProps,null===t?kc(e):Ll=t,Tl.current=null}function kc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=qs(n,t,Il)))return void(Ll=n)}else{if(null!==(n=Ks(n,t)))return n.flags&=32767,void(Ll=n);if(null===e)return Ol=6,void(Ll=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Ll=t);Ll=t=e}while(null!==t);0===Ol&&(Ol=5)}function xc(e,t,n){var r=vt,a=Al.transition;try{Al.transition=null,vt=1,function(e,t,n,r){do{Sc()}while(null!==Kl);if(0!=(6&jl))throw Error(o(327));n=e.finishedWork;var a=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(o(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var a=31-it(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}(e,i),e===Nl&&(Ll=Nl=null,Pl=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||ql||(ql=!0,Nc(tt,(function(){return Sc(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Al.transition,Al.transition=null;var s=vt;vt=1;var l=jl;jl|=4,Tl.current=null,function(e,t){if(ea=Ht,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(k){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var g;p!==n||0!==a&&3!==p.nodeType||(l=s+a),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(g=p.firstChild);)f=p,p=g;for(;;){if(p===e)break t;if(f===n&&++u===a&&(l=s),f===i&&++d===r&&(c=s),null!==(g=p.nextSibling))break;f=(p=f).parentNode}p=g}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(ta={focusedElem:e,selectionRange:n},Ht=!1,Js=t;null!==Js;)if(e=(t=Js).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Js=e;else for(;null!==Js;){t=Js;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var m=h.memoizedProps,b=h.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?m:bo(t.type,m),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(o(163))}}catch(k){Ec(t,t.return,k)}if(null!==(e=t.sibling)){e.return=t.return,Js=e;break}Js=t.return}h=nl,nl=!1}(e,n),bl(n,e),gr(ta),Ht=!!ea,ta=ea=null,e.current=n,vl(n,e,a),Ye(),jl=l,vt=s,Al.transition=i}else e.current=n;if(ql&&(ql=!1,Kl=e,Yl=a),i=e.pendingLanes,0===i&&(Gl=null),function(e){if(ot&&"function"==typeof ot.onCommitFiberRoot)try{ot.onCommitFiberRoot(at,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),ac(e,Qe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(Vl)throw Vl=!1,e=Wl,Wl=null,e;0!=(1&Yl)&&0!==e.tag&&Sc(),i=e.pendingLanes,0!=(1&i)?e===Xl?Ql++:(Ql=0,Xl=e):Ql=0,Ua()}(e,t,n,r)}finally{Al.transition=a,vt=r}return null}function Sc(){if(null!==Kl){var e=wt(Yl),t=Al.transition,n=vt;try{if(Al.transition=null,vt=16>e?16:e,null===Kl)var r=!1;else{if(e=Kl,Kl=null,Yl=0,0!=(6&jl))throw Error(o(331));var a=jl;for(jl|=4,Js=e.current;null!==Js;){var i=Js,s=i.child;if(0!=(16&Js.flags)){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Js=u;null!==Js;){var d=Js;switch(d.tag){case 0:case 11:case 15:rl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Js=p;else for(;null!==Js;){var f=(d=Js).sibling,g=d.return;if(il(d),d===u){Js=null;break}if(null!==f){f.return=g,Js=f;break}Js=g}}}var h=i.alternate;if(null!==h){var m=h.child;if(null!==m){h.child=null;do{var b=m.sibling;m.sibling=null,m=b}while(null!==m)}}Js=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Js=s;else e:for(;null!==Js;){if(0!=(2048&(i=Js).flags))switch(i.tag){case 0:case 11:case 15:rl(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,Js=y;break e}Js=i.return}}var v=e.current;for(Js=v;null!==Js;){var w=(s=Js).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Js=w;else e:for(s=v;null!==Js;){if(0!=(2048&(l=Js).flags))try{switch(l.tag){case 0:case 11:case 15:al(9,l)}}catch(x){Ec(l,l.return,x)}if(l===s){Js=null;break e}var k=l.sibling;if(null!==k){k.return=l.return,Js=k;break e}Js=l.return}}if(jl=a,Ua(),ot&&"function"==typeof ot.onPostCommitFiberRoot)try{ot.onPostCommitFiberRoot(at,e)}catch(x){}r=!0}return r}finally{vt=n,Al.transition=t}}return!1}function _c(e,t,n){e=Oo(e,t=gs(0,t=us(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),ac(e,t))}function Ec(e,t,n){if(3===e.tag)_c(e,e,n);else for(;null!==t;){if(3===t.tag){_c(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Gl||!Gl.has(r))){t=Oo(t,e=hs(t,e=us(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),ac(t,e));break}}t=t.return}}function Cc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,Nl===e&&(Pl&n)===n&&(4===Ol||3===Ol&&(130023424&Pl)===Pl&&500>Qe()-Ul?fc(e,0):Bl|=n),ac(e,t)}function Tc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=No(e,t))&&(bt(e,t,n),ac(e,n))}function Ac(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Tc(e,n)}function jc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;null!==a&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(o(314))}null!==r&&r.delete(t),Tc(e,n)}function Nc(e,t){return Ge(e,t)}function Lc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Pc(e,t,n,r){return new Lc(e,t,n,r)}function Ic(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Rc(e,t){var n=e.alternate;return null===n?((n=Pc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Oc(e,t,n,r,a,i){var s=2;if(r=e,"function"==typeof e)Ic(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Fc(n.children,a,i,t);case _:s=8,a|=8;break;case E:return(e=Pc(12,n,t,2|a)).elementType=E,e.lanes=i,e;case j:return(e=Pc(13,n,t,a)).elementType=j,e.lanes=i,e;case N:return(e=Pc(19,n,t,a)).elementType=N,e.lanes=i,e;case I:return Mc(n,a,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case A:s=11;break e;case L:s=14;break e;case P:s=16,r=null;break e}throw Error(o(130,null==e?e:typeof e,""))}return(t=Pc(s,n,t,a)).elementType=e,t.type=r,t.lanes=i,t}function Fc(e,t,n,r){return(e=Pc(7,e,r,t)).lanes=n,e}function Mc(e,t,n,r){return(e=Pc(22,e,r,t)).elementType=I,e.lanes=n,e.stateNode={isHidden:!1},e}function Dc(e,t,n){return(e=Pc(6,e,null,t)).lanes=n,e}function Bc(e,t,n){return(t=Pc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=mt(0),this.expirationTimes=mt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=mt(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function $c(e,t,n,r,a,o,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===o&&(t|=8)):t=0,o=Pc(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Po(o),e}function Uc(e){if(!e)return Ta;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(o(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Pa(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(o(171))}if(1===e.tag){var n=e.type;if(Pa(n))return Oa(e,n,t)}return t}function Zc(e,t,n,r,a,o,i,s,l){return(e=$c(n,r,!0,e,0,o,0,s,l)).context=Uc(null),n=e.current,(o=Ro(r=tc(),a=nc(n))).callback=null!=t?t:null,Oo(n,o,a),e.current.lanes=a,bt(e,a,r),ac(e,r),e}function Hc(e,t,n,r){var a=t.current,o=tc(),i=nc(a);return n=Uc(n),null===t.context?t.context=n:t.pendingContext=n,(t=Ro(o,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Oo(a,t,i))&&(rc(e,a,i,o),Fo(e,a,i)),i}function Vc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Wc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Gc(e,t){Wc(e,t),(e=e.alternate)&&Wc(e,t)}_l=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||ja.current)ws=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return ws=!1,function(e,t,n){switch(t.tag){case 3:Ns(t),go();break;case 5:ii(t);break;case 1:Pa(t.type)&&Fa(t);break;case 4:ai(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;Ca(yo,r._currentValue),r._currentValue=a;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Ca(li,1&li.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Ds(e,t,n):(Ca(li,1&li.current),null!==(e=Vs(e,t,n))?e.sibling:null);Ca(li,1&li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Zs(e,t,n);t.flags|=128}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),Ca(li,li.current),r)break;return null;case 22:case 23:return t.lanes=0,Es(e,t,n)}return Vs(e,t,n)}(e,t,n);ws=0!=(131072&e.flags)}else ws=!1,ao&&0!=(1048576&t.flags)&&Ja(t,Wa,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Hs(e,t),e=t.pendingProps;var a=La(t,Aa.current);Eo(t,n),a=_i(null,t,r,e,a,n);var i=Ei();return t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Pa(r)?(i=!0,Fa(t)):i=!1,t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,Po(t),a.updater=Uo,t.stateNode=a,a._reactInternals=t,Wo(t,r,e,n),t=js(null,t,r,!0,i,n)):(t.tag=0,ao&&i&&eo(t),ks(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Hs(e,t),e=t.pendingProps,r=(a=r._init)(r._payload),t.type=r,a=t.tag=function(e){if("function"==typeof e)return Ic(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===L)return 14}return 2}(r),e=bo(r,e),a){case 0:t=Ts(null,t,r,e,n);break e;case 1:t=As(null,t,r,e,n);break e;case 11:t=xs(null,t,r,e,n);break e;case 14:t=Ss(null,t,r,bo(r.type,e),n);break e}throw Error(o(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,Ts(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 1:return r=t.type,a=t.pendingProps,As(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 3:e:{if(Ns(t),null===e)throw Error(o(387));r=t.pendingProps,a=(i=t.memoizedState).element,Io(e,t),Do(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Ls(e,t,r,n,a=us(Error(o(423)),t));break e}if(r!==a){t=Ls(e,t,r,n,a=us(Error(o(424)),t));break e}for(ro=ca(t.stateNode.containerInfo.firstChild),no=t,ao=!0,oo=null,n=Xo(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(go(),r===a){t=Vs(e,t,n);break e}ks(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&co(t),r=t.type,a=t.pendingProps,i=null!==e?e.memoizedProps:null,s=a.children,na(r,a)?s=null:null!==i&&na(r,i)&&(t.flags|=32),Cs(e,t),ks(e,t,s,n),t.child;case 6:return null===e&&co(t),null;case 13:return Ds(e,t,n);case 4:return ai(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Qo(t,null,r,n):ks(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,xs(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 7:return ks(e,t,t.pendingProps,n),t.child;case 8:case 12:return ks(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,i=t.memoizedProps,s=a.value,Ca(yo,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===a.children&&!ja.current){t=Vs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=Ro(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),_o(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(o(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),_o(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}ks(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,Eo(t,n),r=r(a=Co(a)),t.flags|=1,ks(e,t,r,n),t.child;case 14:return a=bo(r=t.type,t.pendingProps),Ss(e,t,r,a=bo(r.type,a),n);case 15:return _s(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:bo(r,a),Hs(e,t),t.tag=1,Pa(r)?(e=!0,Fa(t)):e=!1,Eo(t,n),Ho(t,r,a),Wo(t,r,a,n),js(null,t,r,!0,e,n);case 19:return Zs(e,t,n);case 22:return Es(e,t,n)}throw Error(o(156,t.tag))};var qc="function"==typeof reportError?reportError:function(e){console.error(e)};function Kc(e){this._internalRoot=e}function Yc(e){this._internalRoot=e}function Qc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o;if("function"==typeof a){var s=a;a=function(){var e=Vc(i);s.call(e)}}Hc(t,i,e,a)}else i=function(e,t,n,r,a){if(a){if("function"==typeof r){var o=r;r=function(){var e=Vc(i);o.call(e)}}var i=Zc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=i,e[ga]=i.current,Ur(8===e.nodeType?e.parentNode:e),dc(),i}for(;a=e.lastChild;)e.removeChild(a);if("function"==typeof r){var s=r;r=function(){var e=Vc(l);s.call(e)}}var l=$c(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[ga]=l.current,Ur(8===e.nodeType?e.parentNode:e),dc((function(){Hc(t,l,n,r)})),l}(n,t,e,a,r);return Vc(i)}Yc.prototype.render=Kc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(o(409));Hc(e,t,null,null)},Yc.prototype.unmount=Kc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){Hc(null,e,null,null)})),t[ga]=null}},Yc.prototype.unstable_scheduleHydration=function(e){if(e){var t=_t();e={blockedOn:null,target:e,priority:t};for(var n=0;n<It.length&&0!==t&&t<It[n].priority;n++);It.splice(n,0,e),0===n&&Mt(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),ac(t,Qe()),0==(6&jl)&&(Zl=Qe()+500,Ua()))}break;case 13:dc((function(){var t=No(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Gc(e,1)}},xt=function(e){if(13===e.tag){var t=No(e,134217728);if(null!==t)rc(t,e,134217728,tc());Gc(e,134217728)}},St=function(e){if(13===e.tag){var t=nc(e),n=No(e,t);if(null!==n)rc(n,e,t,tc());Gc(e,t)}},_t=function(){return vt},Et=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},xe=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=ka(r);if(!a)throw Error(o(90));G(r),X(r,a)}}}break;case"textarea":oe(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ae=uc,je=dc;var tu={usingClientEntryPoint:!1,Events:[va,wa,ka,Ce,Te,uc]},nu={findFiberByHostInstance:ya,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ve(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var au=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!au.isDisabled&&au.supportsFiber)try{at=au.inject(ru),ot=au}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Qc(t))throw Error(o(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:x,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Qc(e))throw Error(o(299));var n=!1,r="",a=qc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(a=t.onRecoverableError)),t=$c(e,1,!1,null,0,n,0,r,a),e[ga]=t.current,Ur(8===e.nodeType?e.parentNode:e),new Kc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(o(188));throw e=Object.keys(e).join(","),Error(o(268,e))}return e=null===(e=Ve(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Xc(t))throw Error(o(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Qc(e))throw Error(o(405));var r=null!=n&&n.hydratedSources||null,a=!1,i="",s=qc;if(null!=n&&(!0===n.unstable_strictMode&&(a=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Zc(t,null,e,1,null!=n?n:null,a,0,i,s),e[ga]=t.current,Ur(e),r)for(e=0;e<r.length;e++)a=(a=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Yc(t)},t.render=function(e,t,n){if(!Xc(t))throw Error(o(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Xc(e))throw Error(o(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ga]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Xc(n))throw Error(o(200));if(null==e||void 0===e._reactInternals)throw Error(o(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},20745:(e,t,n)=>{"use strict";var r=n(73935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},73935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(64448)},69590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!o(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!o(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!o(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(67294),a=n(45697),o=n.n(a),i=n(69590),s=n.n(i),l=n(41143),c=n.n(l),u=n(96774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,g(e,t)}function g(e,t){return g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},g(e,t)}function h(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(m).map((function(e){return m[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=S(e,m.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},E=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[m.BASE]})).map((function(e){return e[m.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},A=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var s=o[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][c]&&(a[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var s=o[i],l=p({},r[s],a[s]);r[s]=l}return e}),[]).reverse()},j=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},N=function(e){return Array.isArray(e)?e.join(""):e},L=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},P=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},I=[m.NOSCRIPT,m.SCRIPT,m.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},O=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},F=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},D=function(e,t,n){switch(e){case m.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=F(n,a),[r.createElement(m.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=O(n),o=N(t);return a?"<"+e+' data-rh="true" '+a+">"+R(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return F(t)},toString:function(){return O(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===I.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var g=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=L(e.metaTags,v),o=L(t,b),i=L(n,y);return{priorityMethods:{toComponent:function(){return[].concat(M(m.META,a.priority),M(m.LINK,o.priority),M(m.SCRIPT,i.priority))},toString:function(){return D(m.META,a.priority,r)+" "+D(m.LINK,o.priority,r)+" "+D(m.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);f=g.priorityMethods,u=g.linkTags,d=g.metaTags,p=g.scriptTags}return{priority:f,base:D(m.BASE,t,r),bodyAttributes:D("bodyAttributes",n,r),htmlAttributes:D("htmlAttributes",a,r),link:D(m.LINK,u,r),meta:D(m.META,d,r),noscript:D(m.NOSCRIPT,o,r),script:D(m.SCRIPT,p,r),style:D(m.STYLE,i,r),title:D(m.TITLE,{title:l,titleAttributes:c},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),H="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=H,V.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var W=function(e,t){var n,r=document.head||document.querySelector(m.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},G=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===a.indexOf(l)&&a.push(l);var u=o.indexOf(l);-1!==u&&o.splice(u,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;G(m.BODY,e.bodyAttributes),G(m.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=N(e)),G(m.TITLE,t)}(u,d);var p={baseTag:W(m.BASE,n),linkTags:W(m.LINK,a),metaTags:W(m.META,o),noscriptTags:W(m.NOSCRIPT,i),scriptTags:W(m.SCRIPT,l),styleTags:W(m.STYLE,c)},f={},g={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(g[e]=p[e].oldTags)})),t&&t(),s(e,f,g)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:A(m.LINK,["rel","href"],e),metaTags:A(m.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(m.NOSCRIPT,["innerHTML"],e),onChangeClientState:E(e),scriptTags:A(m.SCRIPT,["src","innerHTML"],e),styleTags:A(m.STYLE,["cssText"],e),title:_(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:j(e,"prioritizeSeoTags")});V.canUseDOM?(t=o,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame((function(){q(t,(function(){K=null}))})):(q(t),K=null)):B&&(a=B(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:Z.isRequired},Y.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(P(this.props,"helmetData"),P(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case m.SCRIPT:case m.NOSCRIPT:return{innerHTML:t};case m.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case m.TITLE:return p({},a,((t={})[r.type]=i,t.titleAttributes=p({},o),t));case m.BODY:return p({},a,{bodyAttributes:p({},o)});case m.HTML:return p({},a,{htmlAttributes:p({},o)});default:return p({},a,((n={})[r.type]=p({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=h(r,Q),s=Object.keys(i).reduce((function(e,t){return e[x[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,o),l){case m.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:s,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),a=p({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof $||(o=new $(o.context,o.instances)),o?r.createElement(Y,p({},a,{context:o.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,p({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},69921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case o:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case m:case h:case l:return e;default:return t}}case a:return t}}}function x(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=o,t.Lazy=m,t.Memo=h,t.Portal=a,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return x(e)||k(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===o},t.isLazy=function(e){return k(e)===m},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===a},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===s||e===i||e===f||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},59864:(e,t,n)=>{"use strict";e.exports=n(69921)},68356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(67294),l=n(45697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function g(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var g=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function m(){return h||(h=e(g.loader)),h.promise}return c.push(m),"function"==typeof g.webpack&&u.push((function(){if((0,g.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return m()})),p=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(g.loader),r._loadModule()})),m(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return m()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(g.modules)&&g.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof g.delay&&(0===g.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),g.delay)),"number"==typeof g.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),g.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(g.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?g.render(this.state.loaded,this.props):null},n}(s.Component),o(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function h(e){return g(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return g(p,e)};var m=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(m,"propTypes",{report:l.func.isRequired}),o(m,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),h.Capture=m,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},18790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(16550),a=n(87462),o=n(67294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},73727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>m});var r=n(16550),a=n(75068),o=n(67294),i=n(99318),s=n(87462),l=n(63366),c=n(38776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},g=o.forwardRef;void 0===g&&(g=f);var h=g((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==g&&t||n,o.createElement("a",u)}));var m=g((function(e,t){var n=e.component,a=void 0===n?h:n,u=e.replace,m=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(m,e.location),e.location),l=r?n.createHref(r):"",h=(0,s.Z)({},y,{href:l,navigate:function(){var t=d(m,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==g?h.ref=t||b:h.innerRef=b,o.createElement(a,h)}))})),b=function(e){return e},y=o.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,g=e.className,h=e.exact,v=e.isActive,w=e.location,k=e.sensitive,x=e.strict,S=e.style,_=e.to,E=e.innerRef,C=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,i=p(d(_,n),n),l=i.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,r.LX)(n.pathname,{path:T,exact:h,sensitive:k,strict:x}):null,j=!!(v?v(A,n):A),N="function"==typeof g?g(j):g,L="function"==typeof S?S(j):S;j&&(N=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(N,u),L=(0,s.Z)({},L,f));var P=(0,s.Z)({"aria-current":j&&a||null,className:N,style:L,to:i},C);return b!==y?P.ref=t||E:P.innerRef=E,o.createElement(m,P)}))}))},16550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>v,LX:()=>S,TH:()=>I,k6:()=>P,rs:()=>N,s6:()=>y});var r=n(75068),a=n(67294),o=n(45697),i=n.n(o),s=n(99318),l=n(38776),c=n(87462),u=n(39658),d=n.n(u),p=(n(59864),n(63366)),f=(n(8679),1073741823),g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=a.createContext||function(e,t){var n,o,s="__create-react-context-"+function(){var e="__global_unique_id__";return g[e]=(g[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return(t=e.call.apply(e,[this].concat(o))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},a.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},a.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},a.getValue=function(){return this.context[s]?this.context[s].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return c.contextTypes=((o={})[s]=i().object,o),{Provider:l,Consumer:c}},m=function(e){var t=h();return t.displayName=e,t},b=m("Router-History"),y=m("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},k=1e4,x=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return x<k&&(r[e]=o,x++),o}(n,{end:o,strict:s,sensitive:c}),a=r.regexp,i=r.keys,l=a.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return o&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,c.Z)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===a.Children.count(e)}(s)&&(s=null),a.createElement(y.Provider,{value:o},o.match?s?"function"==typeof s?s(o):s:u?a.createElement(u,o):d?d(o):null:"function"==typeof s?s(o):null)}))},t}(a.Component);function E(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=E(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.Ep)(e)}function A(e){return function(){(0,l.Z)(!1)}}function j(){}a.Component;var N=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,c.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var L=a.useContext;function P(){return L(b)}function I(){return L(y).location}},39658:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var g=e[i],h=n[2],m=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=h&&null!=g&&g!==h,x="+"===v||"*"===v,S="?"===v||"*"===v,_=n[2]||u,E=b||y;r.push({name:m||o++,prefix:h||"",delimiter:_,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:E?c(E):w?".*":"[^"+l(_)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",s=t||{},l=(a||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');o+=u.prefix+d}}else o+=u}return o}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var g=l(n.delimiter||"/"),h=i.slice(-g.length)===g;return a||(i=(h?i.slice(0,-g.length):i)+"(?:"+g+"(?=$))?"),i+=o?"$":a&&h?"":"(?="+g+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(f(e[a],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(o(e,n),t,n)}(e,t,n)}},75251:(e,t,n)=>{"use strict";var r=n(67294),a=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:a,type:e,key:c,ref:u,props:o,_owner:s.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},72408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,m={};function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||g}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||g}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,h(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var a,o={},i=null,s=null;if(null!=t)for(a in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,a)&&!_.hasOwnProperty(a)&&(o[a]=t[a]);var l=arguments.length-2;if(1===l)o.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(a in l=e.defaultProps)void 0===o[a]&&(o[a]=l[a]);return{$$typeof:n,type:e,key:i,ref:s,props:o,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function A(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function j(e,t,a,o,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===o?"."+A(l,0):o,k(i)?(a="",null!=e&&(a=e.replace(T,"$&/")+"/"),j(i,t,a,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,a+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(l=0,o=""===o?".":o+":",k(e))for(var c=0;c<e.length;c++){var u=o+A(s=e[c],c);l+=j(s,t,a,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=j(s=s.value,t,a,u=o+A(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function N(e,t,n){if(null==e)return e;var r=[],a=0;return j(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function L(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var P={current:null},I={transition:null},R={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:I,ReactCurrentOwner:S};t.Children={map:N,forEach:function(e,t,n){N(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return N(e,(function(){t++})),t},toArray:function(e){return N(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=a,t.Profiler=i,t.PureComponent=v,t.StrictMode=o,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=R,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var a=h({},e.props),o=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=S.current),void 0!==t.key&&(o=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)x.call(t,c)&&!_.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}return{$$typeof:n,type:e.type,key:o,ref:i,props:a,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=I.transition;I.transition={};try{e()}finally{I.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return P.current.useCallback(e,t)},t.useContext=function(e){return P.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return P.current.useDeferredValue(e)},t.useEffect=function(e,t){return P.current.useEffect(e,t)},t.useId=function(){return P.current.useId()},t.useImperativeHandle=function(e,t,n){return P.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return P.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return P.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return P.current.useMemo(e,t)},t.useReducer=function(e,t,n){return P.current.useReducer(e,t,n)},t.useRef=function(e){return P.current.useRef(e)},t.useState=function(e){return P.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return P.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return P.current.useTransition()},t.version="18.2.0"},67294:(e,t,n)=>{"use strict";e.exports=n(72408)},85893:(e,t,n)=>{"use strict";e.exports=n(75251)},60053:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,a=e[r];if(!(0<o(a,t)))break e;e[r]=t,e[n]=a,n=r}}function r(e){return 0===e.length?null:e[0]}function a(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length,i=a>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>o(l,n))c<a&&0>o(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<a&&0>o(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function o(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,g=!1,h=!1,m=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)a(u);else{if(!(t.startTime<=e))break;a(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(m=!1,w(e),!h)if(null!==r(c))h=!0,I(x);else{var t=r(u);null!==t&&R(k,t.startTime-e)}}function x(e,n){h=!1,m&&(m=!1,y(C),C=-1),g=!0;var o=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!j());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&a(c),w(n)}else a(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&R(k,d.startTime-n),l=!1}return l}finally{p=null,f=o,g=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,_=!1,E=null,C=-1,T=5,A=-1;function j(){return!(t.unstable_now()-A<T)}function N(){if(null!==E){var e=t.unstable_now();A=e;var n=!0;try{n=E(!0,e)}finally{n?S():(_=!1,E=null)}}else _=!1}if("function"==typeof v)S=function(){v(N)};else if("undefined"!=typeof MessageChannel){var L=new MessageChannel,P=L.port2;L.port1.onmessage=N,S=function(){P.postMessage(null)}}else S=function(){b(N,0)};function I(e){E=e,_||(_=!0,S())}function R(e,n){C=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||g||(h=!0,I(x))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,a,o){var i=t.unstable_now();switch("object"==typeof o&&null!==o?o="number"==typeof(o=o.delay)&&0<o?i+o:i:o=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:a,priorityLevel:e,startTime:o,expirationTime:s=o+s,sortIndex:-1},o>i?(e.sortIndex=o,n(u,e),null===r(c)&&e===r(u)&&(m?(y(C),C=-1):m=!0,R(k,o-i))):(e.sortIndex=s,n(c,e),h||g||(h=!0,I(x))),e},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},63840:(e,t,n)=>{"use strict";e.exports=n(60053)},96774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<o.length;l++){var c=o[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(a=n?n.call(r,u,d,c):void 0)||void 0===a&&u!==d)return!1}return!0}},36809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"mf",tagline:"blog and additional materials for courses at \u03c6",url:"https://blog.mfocko.xyz",baseUrl:"/",organizationName:"mfocko",projectName:"blog",trailingSlash:!0,onBrokenLinks:"throw",onBrokenMarkdownLinks:"throw",favicon:"img/favicon.ico",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:!1,blog:!1,theme:{customCss:["/home/runner/work/blog/blog/src/css/custom.scss","/home/runner/work/blog/blog/src/css/jetbrains_mono.css"]}}]],plugins:[["@docusaurus/plugin-content-docs",{id:"algorithms",path:"algorithms",routeBasePath:"algorithms",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-docs",{id:"c",path:"c",routeBasePath:"c",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-docs",{id:"cpp",path:"cpp",routeBasePath:"cpp",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-blog",{id:"blog",routeBasePath:"blog",path:"./blog",feedOptions:{type:"all",description:"mf's blog"},editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],"docusaurus-plugin-sass",["@docusaurus/plugin-client-redirects",{}]],stylesheets:[{href:"https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css",type:"text/css",integrity:"sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM",crossorigin:"anonymous"}],themeConfig:{navbar:{title:"mf",items:[{type:"dropdown",label:"Additional FI MU materials",items:[{type:"doc",docId:"algorithms-intro",docsPluginId:"algorithms",label:"Algorithms"},{type:"doc",docId:"c-intro",docsPluginId:"c",label:"C"},{type:"doc",docId:"cpp-intro",docsPluginId:"cpp",label:"C++"}],position:"left"},{to:"contributions",label:"Contributions",position:"left"},{to:"talks",label:"Talks",position:"left"},{to:"blog",position:"right",label:"Blog"}],hideOnScroll:!1},footer:{style:"dark",copyright:"Copyright \xa9 2024 Matej Focko.",links:[{title:"Git",items:[{label:"GitHub",href:"https://github.com/mfocko"},{label:"GitLab",href:"https://gitlab.com/mfocko"},{label:"Gitea (self-hosted)",href:"https://git.mfocko.xyz/mfocko"}]},{title:"Social #1",items:[{label:"LinkedIn",href:"https://www.linkedin.com/in/mfocko/"},{label:"Fosstodon",href:"https://fosstodon.org/@m4tt_314"},{label:"Hachyderm.io",href:"https://hachyderm.io/@m4tt_314"}]},{title:"Social #2",items:[{label:"Twitter",href:"https://twitter.com/m4tt_314"},{label:"Twitch",href:"https://twitch.tv/m4tt_314"},{label:"Ko-fi",href:"https://ko-fi.com/m4tt_314"}]}]},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["ada","bash","csharp","dot","haskell","java","nix","pascal","python","ruby","rust"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},docs:{sidebar:{hideable:!0,autoCollapseCategories:!1},versionPersistence:"localStorage"},mermaid:{options:{fontFamily:"Iosevka,'Iosevka Term','Cascadia Code','JetBrains Mono','Fira Code',monospace"},theme:{dark:"dark",light:"default"}},algolia:{appId:"0VXRFPR4QF",apiKey:"9d4d452117cfaaae3e51b9568e22aa16",indexName:"mfocko",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},markdown:{mermaid:!0,format:"mdx",mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}},themes:["@docusaurus/theme-mermaid"],baseUrlIssueBanner:!0,onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},scripts:[],headTags:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},87462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},75068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},63366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},36905:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},788:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},14965:(e,t,n)=>{"use strict";n.d(t,{y$:()=>J,p1:()=>C});var r=n(67294);function a(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(r&&(r+=" "),r+=n);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}const o=function(){for(var e,t,n=0,r="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,g=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyDescriptors,m=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t)=>{for(var n in t||(t={}))v.call(t,n)&&k(e,n,t[n]);if(b)for(var n of b(t))w.call(t,n)&&k(e,n,t[n]);return e},S=(e,t)=>f(e,h(t)),_=(e,t)=>{var n={};for(var r in e)v.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},E=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var s in o)if(o.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=o[s])}var c=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],a||s);var l=t[s],c=r.util.type(l);"Object"!==c||o[i(l)]?"Array"!==c||o[i(l)]||(o[i(l)]=!0,e(l,n,s,o)):(o[i(l)]=!0,e(l,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",o),!o.grammar)throw new Error('The language "'+o.language+'" has no grammar.');return o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new s;return l(a,a.head,e),i(e,a,t,a.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var g=0;g<f.length;++g){if(d&&d.cause==p+","+g)return;var h=f[g],m=h.inside,b=!!h.lookbehind,y=!!h.greedy,v=h.alias;if(y&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var k=h.pattern||h,x=s.next,S=u;x!==t.tail&&!(d&&S>=d.reach);S+=x.value.length,x=x.next){var _=x.value;if(t.length>e.length)return;if(!(_ instanceof a)){var E,C=1;if(y){if(!(E=o(k,S,e,b))||E.index>=e.length)break;var T=E.index,A=E.index+E[0].length,j=S;for(j+=x.value.length;T>=j;)j+=(x=x.next).value.length;if(S=j-=x.value.length,x.value instanceof a)continue;for(var N=x;N!==t.tail&&(j<A||"string"==typeof N.value);N=N.next)C++,j+=N.value.length;C--,_=e.slice(S,j),E.index-=S}else if(!(E=o(k,0,_,b)))continue;T=E.index;var L=E[0],P=_.slice(0,T),I=_.slice(T+L.length),R=S+_.length;d&&R>d.reach&&(d.reach=R);var O=x.prev;if(P&&(O=l(t,O,P),S+=P.length),c(t,O,C),x=l(t,O,new a(p,m?r.tokenize(L,m):L,v,L)),I&&l(t,x,I),C>1){var F={cause:p+","+g,reach:R};i(e,t,n,x.prev,S,F),d&&F.reach>d.reach&&(d.reach=F.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var s="";for(var l in o.attributes)s+=" "+l+'="'+(o.attributes[l]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+s+">"+o.content+"</"+o.tag+">"},r}();t.exports=n,n.default=n}},function(){return s||(0,i[m(i)[0]])((s={exports:{}}).exports,s),s.exports}),C=((e,t,n)=>(n=null!=e?d(y(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of m(t))v.call(e,a)||a===n||p(e,a,{get:()=>t[a],enumerable:!(r=g(t,a))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(E());C.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},C.languages.markup.tag.inside["attr-value"].inside.entity=C.languages.markup.entity,C.languages.markup.doctype.inside["internal-subset"].inside=C.languages.markup,C.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(C.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:C.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:C.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},C.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(C.languages.markup.tag,"addAttribute",{value:function(e,t){C.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:C.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),C.languages.html=C.languages.markup,C.languages.mathml=C.languages.markup,C.languages.svg=C.languages.markup,C.languages.xml=C.languages.extend("markup",{}),C.languages.ssml=C.languages.xml,C.languages.atom=C.languages.xml,C.languages.rss=C.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",a=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":a}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":a}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(C),C.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},C.languages.javascript=C.languages.extend("clike",{"class-name":[C.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),C.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,C.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:C.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:C.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:C.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:C.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:C.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),C.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:C.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),C.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),C.languages.markup&&(C.languages.markup.tag.addInlined("script","javascript"),C.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),C.languages.js=C.languages.javascript,C.languages.actionscript=C.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),C.languages.actionscript["class-name"].alias="function",delete C.languages.actionscript.parameter,delete C.languages.actionscript["literal-property"],C.languages.markup&&C.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:C.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=C).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},a="doc-comment";if(o=e.languages[t]){var o,i=o[a];if((i=i||(o=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[a])instanceof RegExp&&(i=o[a]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(C),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(C),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(C),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(C),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a,o=t[n];"code"!==o.type?e(o.content):(a=o.content[1],o=o.content[3],a&&o&&"code-language"===a.type&&"code-block"===o.type&&"string"==typeof a.content&&(a=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),a="language-"+(a=(/[a-z][\w-]*/i.exec(a)||[""])[0].toLowerCase()),o.alias?"string"==typeof o.alias?o.alias=[o.alias,a]:o.alias.push(a):o.alias=[a]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r];if(o=/language-(.+)/.exec(o)){n=o[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(C),C.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:C.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},C.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var o=p(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<a.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=a.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))a++;else if(r.test(s)&&0==--a)return o}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),C.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var o=0;o<n.length;o++){if(c>=d.length)return;var i,l,p,f,g,h,m,b=n[o];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(m=(h="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=h.substring(0,m),g=u[i],p=void 0,(f={})["interpolation-punctuation"]=a,3===(f=e.tokenize(g,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,g),f=h.substring(m+i.length),g=[],l&&g.push(l),g.push(p),f&&(t(h=[f]),g.push.apply(g,h)),"string"==typeof b?(n.splice.apply(n,[o,1].concat(g)),o+=g.length-1):b.content=g)):(m=b.content,Array.isArray(m)?t(m):t([m]))}}(l),new e.Token(i,l,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,a=n.length;r<a;r++){var o,i,s,c=n[r];"string"!=typeof c&&(o=c.content,Array.isArray(o)?"template-string"===c.type?(c=o[1],3===o.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(o[1]=l(i,s,c))):t(o):"string"!=typeof o&&t([o]))}}(t.tokens)}))}(C),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(C),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(C),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(C),C.languages.n4js=C.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),C.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),C.languages.n4jsd=C.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];a=(o="RegExp"===e.util.type(o)?e.languages.javascript[a]={pattern:o}:o).inside||{};(o.inside=a)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(C),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;"string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(a.content[0].content[1])&&n.pop():"/>"!==a.content[a.content.length-1].content&&n.push({tagName:s(a.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&0<n.length&&0===n[n.length-1].openedBraces&&(o=s(a),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(o+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(o=s(t[r-1])+o,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",o,null,o)),a.content&&"string"!=typeof a.content&&i(a.content)}}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(C),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(C),C.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},C.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=C.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(C),C.languages.c=C.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),C.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),C.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},C.languages.c.string],char:C.languages.c.char,comment:C.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:C.languages.c}}}}),C.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete C.languages.c.boolean,C.languages.objectivec=C.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete C.languages.objectivec["class-name"],C.languages.objc=C.languages.objectivec,C.languages.reason=C.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),C.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete C.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(C),C.languages.go=C.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),C.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete C.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(C),C.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},C.languages.python["string-interpolation"].inside.interpolation.inside.rest=C.languages.python,C.languages.py=C.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>A,duotoneLight:()=>j,github:()=>N,jettwaveDark:()=>Z,jettwaveLight:()=>H,nightOwl:()=>L,nightOwlLight:()=>P,oceanicNext:()=>O,okaidia:()=>F,oneDark:()=>V,oneLight:()=>W,palenight:()=>M,shadesOfPurple:()=>D,synthwave84:()=>B,ultramin:()=>z,vsDark:()=>$,vsLight:()=>U});var T={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},A={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},j={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},N={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},L={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},P={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},I="#c5a5c5",R="#8dc891",O={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:I}},{types:["attr-value"],style:{color:R}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:R}},{types:["punctuation"],style:{color:R}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:I}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},F={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},M={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},D={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},z={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},U={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},Z={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},W={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},G=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:a}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=x(x({},e[t]),a);e[t]=n})),e}),{});return r.root=n,r.plain=S(x({},n),{backgroundColor:void 0}),r},q=/\r\n|\r|\n/,K=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Y=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},Q=e=>{const t=[[]],n=[e],r=[0],a=[e.length];let o=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(o=r[i]++)<a[i];){let e,c=t[i];const u=n[i][o];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=Y(c,u.type),u.alias&&(c=Y(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),a.push(e.length);continue}const d=e.split(q),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)K(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),a.pop()}return K(s),l},X=({children:e,language:t,code:n,theme:a,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,a]=(0,r.useState)(G(t,e)),o=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===o.current&&e===i.current||(o.current=t,i.current=e,a(G(t,e)))}),[e,t]),n})(s,a),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:a,line:i}=n,s=_(n,["className","style","line"]);const l=S(x({},s),{className:o("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof a&&(l.style=x(x({},l.style||{}),a)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:a,style:i}=n,s=_(n,["token","className","style"]);const l=S(x({},s),{className:o("token",...r.types,a),children:r.content,style:t(r)});return null!=i&&(l.style=x(x({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:a})=>{const o=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return Q([t]);const e={code:t,grammar:n,language:a,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,n),o.current.hooks.run("after-tokenize",e),Q(e.tokens)}),[t,n,a])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(X,S(x({},e),{prism:e.prism||C,theme:e.theme||$,code:e.code,language:e.language}))},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/blog/-608":{"__comp":"a6aa9e1f","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"},{"content":"ab2721d4"},{"content":"bb882650"},{"content":"75cccf44"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"metadata":"a7098721"},"/blog/2023/08/02/copr/-69d":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"b5a32f14"},"/blog/aoc-2022/1st-week/-df4":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"dff2ebad"},"/blog/aoc-2022/2nd-week/-783":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"377f3aa1"},"/blog/aoc-2022/3rd-week/-7c5":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"f48be158"},"/blog/aoc-2022/4th-week/-1ac":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"3da4b779"},"/blog/aoc-2022/intro/-ada":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"51624505"},"/blog/archive/-22d":{"__comp":"9e4087bc","__context":{"plugin":"0220f5fc"},"archive":"4200b1a9"},"/blog/leetcode/sort-diagonally/-d97":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"cfa2b263"},"/blog/tags/-f23":{"__comp":"01a85c17","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","tags":"66d5ef6c"},"/blog/tags/\ud83c\udfed/-ffd":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"765ea78b","listMetadata":"b25fbc58"},"/blog/tags/admin/-d3a":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"a082abd3","listMetadata":"146d9b84"},"/blog/tags/advent-of-code-2022/-7bd":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"a80747a0","listMetadata":"62d847b3"},"/blog/tags/advent-of-code/-313":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"19d7c045","listMetadata":"8b1802c5"},"/blog/tags/copr/-959":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"b45dccf0","listMetadata":"3011a4c0"},"/blog/tags/cpp/-770":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"4edd2021","listMetadata":"4621632b"},"/blog/tags/iterators/-2eb":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"ff472cd9","listMetadata":"29694455"},"/blog/tags/leetcode/-e31":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"86cd1460","listMetadata":"e89da83e"},"/blog/tags/red-hat/-a58":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"52f2a5bf","listMetadata":"d79dd549"},"/blog/tags/rust/-281":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"9287eafd","listMetadata":"0bfe45d5"},"/blog/tags/vps/-1b8":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"8c0e532b","listMetadata":"0608d96f"},"/contributions/-541":{"__comp":"22a175ec","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"},"/search/-c7b":{"__comp":"1a4e3797","__context":{"plugin":"b0291f37"}},"/talks/-819":{"__comp":"0fcbc6ca","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"},"/algorithms/-c61":{"__comp":"5e95c892","__context":{"plugin":"1a606400"}},"/algorithms/-b39":{"__comp":"a7bd4aaa","version":"6e3cbca1"},"/algorithms/tags/-bb8":{"__comp":"3720c009","tags":"97a42631"},"/algorithms/tags/a-star/-83e":{"__comp":"df203c0f","tag":"2af5d0a7"},"/algorithms/tags/applications/-b32":{"__comp":"df203c0f","tag":"e1d2ae23"},"/algorithms/tags/astar/-08b":{"__comp":"df203c0f","tag":"08dfa3a2"},"/algorithms/tags/backtracking/-e2d":{"__comp":"df203c0f","tag":"eba2374c"},"/algorithms/tags/balanced-trees/-591":{"__comp":"df203c0f","tag":"d4b1e057"},"/algorithms/tags/bellman-ford/-2bc":{"__comp":"df203c0f","tag":"5c15401e"},"/algorithms/tags/bfs/-334":{"__comp":"df203c0f","tag":"947341b7"},"/algorithms/tags/bottom-up-dp/-9e5":{"__comp":"df203c0f","tag":"bc2d22bc"},"/algorithms/tags/brute-force/-99b":{"__comp":"df203c0f","tag":"a2ba8888"},"/algorithms/tags/c/-cc5":{"__comp":"df203c0f","tag":"0123bc76"},"/algorithms/tags/cpp/-f5b":{"__comp":"df203c0f","tag":"520f8175"},"/algorithms/tags/csharp/-7a9":{"__comp":"df203c0f","tag":"d57b4369"},"/algorithms/tags/dijkstra/-aa8":{"__comp":"df203c0f","tag":"3d92ba6e"},"/algorithms/tags/dynamic-array/-00e":{"__comp":"df203c0f","tag":"9a3dc578"},"/algorithms/tags/dynamic-programming/-f82":{"__comp":"df203c0f","tag":"dd841e73"},"/algorithms/tags/exponential/-a74":{"__comp":"df203c0f","tag":"8e6bb954"},"/algorithms/tags/graphs/-d5b":{"__comp":"df203c0f","tag":"686a7a89"},"/algorithms/tags/greedy/-079":{"__comp":"df203c0f","tag":"b8cbf382"},"/algorithms/tags/hash-tables/-ae4":{"__comp":"df203c0f","tag":"d8f4410e"},"/algorithms/tags/iterative/-783":{"__comp":"df203c0f","tag":"16cbc838"},"/algorithms/tags/iterators/-1bc":{"__comp":"df203c0f","tag":"df0885f0"},"/algorithms/tags/java/-2b4":{"__comp":"df203c0f","tag":"976c4f3b"},"/algorithms/tags/karel/-79f":{"__comp":"df203c0f","tag":"bb984793"},"/algorithms/tags/postconditions/-a27":{"__comp":"df203c0f","tag":"34ab65f4"},"/algorithms/tags/python/-eb2":{"__comp":"df203c0f","tag":"8d31a880"},"/algorithms/tags/recursion/-2b0":{"__comp":"df203c0f","tag":"2b89902a"},"/algorithms/tags/red-black-trees/-9ca":{"__comp":"df203c0f","tag":"d255bd7f"},"/algorithms/tags/solution/-fa0":{"__comp":"df203c0f","tag":"7ce7faac"},"/algorithms/tags/sorting/-7ca":{"__comp":"df203c0f","tag":"28d80ff8"},"/algorithms/tags/testing/-2af":{"__comp":"df203c0f","tag":"06c4a8fc"},"/algorithms/tags/time-complexity/-2d3":{"__comp":"df203c0f","tag":"a4c10cf4"},"/algorithms/tags/top-down-dp/-779":{"__comp":"df203c0f","tag":"c580b66a"},"/algorithms/-b7c":{"__comp":"a94703ab"},"/algorithms/-9b0":{"__comp":"17896441","content":"84d1e0d8"},"/algorithms/algorithms-correctness/postcondition-ambiguity/-c18":{"__comp":"17896441","content":"534d4833"},"/algorithms/category/algorithms-and-correctness/-ea2":{"__comp":"14eb3368","categoryGeneratedIndex":"d309b5b1"},"/algorithms/category/asymptotic-notation-and-time-complexity/-fba":{"__comp":"14eb3368","categoryGeneratedIndex":"decbf9d1"},"/algorithms/category/graphs/-a92":{"__comp":"14eb3368","categoryGeneratedIndex":"9df0e937"},"/algorithms/category/hash-tables/-ddd":{"__comp":"14eb3368","categoryGeneratedIndex":"2fcf0558"},"/algorithms/category/paths-in-graphs/-7c7":{"__comp":"14eb3368","categoryGeneratedIndex":"df078f58"},"/algorithms/category/recursion/-61f":{"__comp":"14eb3368","categoryGeneratedIndex":"933b95b3"},"/algorithms/category/red-black-trees/-0c0":{"__comp":"14eb3368","categoryGeneratedIndex":"fb4361d3"},"/algorithms/graphs/bfs-tree/-2fb":{"__comp":"17896441","content":"354a7b72"},"/algorithms/graphs/iterative-and-iterators/-bfd":{"__comp":"17896441","content":"ddc7679f"},"/algorithms/hash-tables/breaking/-319":{"__comp":"17896441","content":"087808f1"},"/algorithms/hash-tables/breaking/mitigations/-4c2":{"__comp":"17896441","content":"15966941"},"/algorithms/hash-tables/breaking/python/-3d1":{"__comp":"17896441","content":"aa24fd5d"},"/algorithms/paths/bf-to-astar/-050":{"__comp":"17896441","content":"c4c4056e"},"/algorithms/paths/bf-to-astar/astar/-b4d":{"__comp":"17896441","content":"493c0536"},"/algorithms/paths/bf-to-astar/bf/-e9c":{"__comp":"17896441","content":"3adcbc3a"},"/algorithms/paths/bf-to-astar/dijkstra/-fe4":{"__comp":"17896441","content":"698e2076"},"/algorithms/rb-trees/applications/-46a":{"__comp":"17896441","content":"0178f9ad"},"/algorithms/rb-trees/rules/-21a":{"__comp":"17896441","content":"ff82dde7"},"/algorithms/recursion/karel/-4cf":{"__comp":"17896441","content":"2ca64e35"},"/algorithms/recursion/karel/solution/-115":{"__comp":"17896441","content":"30814625"},"/algorithms/recursion/pyramid-slide-down/-236":{"__comp":"17896441","content":"9b91a88c"},"/algorithms/recursion/pyramid-slide-down/bottom-up-dp/-00d":{"__comp":"17896441","content":"1cd58e77"},"/algorithms/recursion/pyramid-slide-down/greedy/-4bf":{"__comp":"17896441","content":"f75910c4"},"/algorithms/recursion/pyramid-slide-down/naive/-c1b":{"__comp":"17896441","content":"70a4540f"},"/algorithms/recursion/pyramid-slide-down/top-down-dp/-fe9":{"__comp":"17896441","content":"8a25f659"},"/algorithms/time-complexity/extend/-250":{"__comp":"17896441","content":"24fecc0a"},"/c/-dae":{"__comp":"5e95c892","__context":{"plugin":"5ca803d2"}},"/c/-fc8":{"__comp":"a7bd4aaa","version":"4e546705"},"/c/-1c4":{"__comp":"a94703ab"},"/c/-a0f":{"__comp":"17896441","content":"794ef108"},"/c/bonuses/seminar-03/-aaa":{"__comp":"17896441","content":"dead8108"},"/c/bonuses/seminar-04/-ffe":{"__comp":"17896441","content":"bc0c9d90"},"/c/bonuses/seminar-05-06/-4cd":{"__comp":"17896441","content":"d05e838c"},"/c/bonuses/seminar-08/-09a":{"__comp":"17896441","content":"595c7293"},"/c/bonuses/seminar-10/-b9e":{"__comp":"17896441","content":"1535ede8"},"/c/category/bonuses/-17e":{"__comp":"14eb3368","categoryGeneratedIndex":"48b268a6"},"/c/category/practice-exams/-009":{"__comp":"14eb3368","categoryGeneratedIndex":"962da50c"},"/c/mr/-4c5":{"__comp":"17896441","content":"b1288602"},"/c/pexam/cams/-a10":{"__comp":"17896441","content":"4f96b16e"},"/c/pexam/garbage_collect/-44e":{"__comp":"17896441","content":"1acf65cc"},"/cpp/-269":{"__comp":"5e95c892","__context":{"plugin":"6bc697d0"}},"/cpp/-187":{"__comp":"a7bd4aaa","version":"7e6d325b"},"/cpp/-102":{"__comp":"a94703ab"},"/cpp/-fcd":{"__comp":"17896441","content":"7052c0bc"},"/cpp/category/exceptions-and-raii/-cfa":{"__comp":"14eb3368","categoryGeneratedIndex":"e31003e9"},"/cpp/environment/-e0b":{"__comp":"17896441","content":"b9f7f5c4"},"/cpp/exceptions-and-raii/placeholders/-9b3":{"__comp":"17896441","content":"45c9e308"},"/-dfb":{"__comp":"c4f5d8e4","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=97221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.5d53fbfc.js b/assets/js/main.5d53fbfc.js new file mode 100644 index 0000000..ea46cc2 --- /dev/null +++ b/assets/js/main.5d53fbfc.js @@ -0,0 +1,2 @@ +/*! For license information please see main.5d53fbfc.js.LICENSE.txt */ +(self.webpackChunkfi=self.webpackChunkfi||[]).push([[179],{20830:(e,t,n)=>{"use strict";n.d(t,{W:()=>a});var r=n(67294);function a(){return r.createElement("svg",{width:"20",height:"20",className:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},r.createElement("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none",fillRule:"evenodd",strokeLinecap:"round",strokeLinejoin:"round"}))}},723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(67294);var r=n(68356),a=n.n(r),o=n(16887);const i={"0123bc76":[()=>n.e(3734).then(n.t.bind(n,76554,19)),"~docs/algorithms/tag-algorithms-tags-c-e22.json",76554],"0178f9ad":[()=>n.e(9898).then(n.bind(n,35610)),"@site/algorithms/08-rb-trees/2022-04-05-applications.md",35610],"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,24524)),"@theme/BlogTagsListPage",24524],"0220f5fc":[()=>n.e(1378).then(n.t.bind(n,85804,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-blog/blog/plugin-route-context-module-100.json",85804],"0608d96f":[()=>n.e(7568).then(n.t.bind(n,77158,19)),"~blog/blog/blog-tags-vps-843-list.json",77158],"06c4a8fc":[()=>n.e(2125).then(n.t.bind(n,4697,19)),"~docs/algorithms/tag-algorithms-tags-testing-0c4.json",4697],"0816068a":[()=>n.e(2948).then(n.t.bind(n,17702,19)),"~blog/blog/blog-tags-hype-1ee.json",17702],"087808f1":[()=>n.e(3731).then(n.bind(n,48157)),"@site/algorithms/12-hash-tables/2023-11-28-breaking/index.md",48157],"08dfa3a2":[()=>n.e(2606).then(n.t.bind(n,32412,19)),"~docs/algorithms/tag-algorithms-tags-astar-f6e.json",32412],"0bfe45d5":[()=>n.e(4269).then(n.t.bind(n,13847,19)),"~blog/blog/blog-tags-rust-0c9-list.json",13847],"0fcbc6ca":[()=>Promise.all([n.e(532),n.e(1851)]).then(n.bind(n,39900)),"@site/src/pages/talks.tsx",39900],"146d9b84":[()=>n.e(9300).then(n.t.bind(n,96671,19)),"~blog/blog/blog-tags-admin-b05-list.json",96671],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,34228)),"@theme/DocCategoryGeneratedIndexPage",34228],"1535ede8":[()=>n.e(5376).then(n.bind(n,44969)),"@site/c/bonuses/10.md",44969],15966941:[()=>n.e(8326).then(n.bind(n,16721)),"@site/algorithms/12-hash-tables/2023-11-28-breaking/02-mitigations.md",16721],"16cbc838":[()=>n.e(1494).then(n.t.bind(n,98252,19)),"~docs/algorithms/tag-algorithms-tags-iterative-d5b.json",98252],17896441:[()=>Promise.all([n.e(532),n.e(9365),n.e(7918)]).then(n.bind(n,15154)),"@theme/DocItem",15154],"182b5a8d":[()=>n.e(6048).then(n.bind(n,32582)),"@site/blog/2024-01-28-rust-opinion.md?truncated=true",32582],"19d7c045":[()=>n.e(4637).then(n.t.bind(n,67772,19)),"~blog/blog/blog-tags-advent-of-code-49f.json",67772],"1a4e3797":[()=>Promise.all([n.e(532),n.e(7920)]).then(n.bind(n,48852)),"@theme/SearchPage",48852],"1a606400":[()=>n.e(494).then(n.t.bind(n,82400,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/algorithms/plugin-route-context-module-100.json",82400],"1acf65cc":[()=>n.e(8529).then(n.bind(n,34568)),"@site/c/pexam/b-garbage_collect.md",34568],"1cd58e77":[()=>n.e(1547).then(n.bind(n,32090)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/04-bottom-up-dp.md",32090],"22a175ec":[()=>Promise.all([n.e(532),n.e(6890)]).then(n.bind(n,40707)),"@site/src/pages/contributions.tsx",40707],"24fecc0a":[()=>n.e(3707).then(n.bind(n,69383)),"@site/algorithms/03-time-complexity/2021-03-31-extend.md",69383],"257fa000":[()=>n.e(9595).then(n.t.bind(n,35455,19)),"~blog/blog/blog-tags-cult-e97-list.json",35455],"28d80ff8":[()=>n.e(6435).then(n.t.bind(n,7465,19)),"~docs/algorithms/tag-algorithms-tags-sorting-d73.json",7465],29694455:[()=>n.e(3388).then(n.t.bind(n,39828,19)),"~blog/blog/blog-tags-iterators-977-list.json",39828],"2af5d0a7":[()=>n.e(3979).then(n.t.bind(n,53703,19)),"~docs/algorithms/tag-algorithms-tags-a-star-775.json",53703],"2b89902a":[()=>n.e(6342).then(n.t.bind(n,45443,19)),"~docs/algorithms/tag-algorithms-tags-recursion-1bd.json",45443],"2ca64e35":[()=>n.e(281).then(n.bind(n,99544)),"@site/algorithms/04-recursion/2022-11-29-karel/index.md",99544],"2fcf0558":[()=>n.e(4638).then(n.t.bind(n,69470,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-hash-tables-062.json",69470],"3011a4c0":[()=>n.e(7926).then(n.t.bind(n,31670,19)),"~blog/blog/blog-tags-copr-70b-list.json",31670],30814625:[()=>n.e(115).then(n.bind(n,78416)),"@site/algorithms/04-recursion/2022-11-29-karel/2023-12-24-solution.md",78416],"34ab65f4":[()=>n.e(3220).then(n.t.bind(n,28865,19)),"~docs/algorithms/tag-algorithms-tags-postconditions-1f3.json",28865],"354a7b72":[()=>n.e(9414).then(n.bind(n,46617)),"@site/algorithms/10-graphs/2022-04-30-bfs-tree.md",46617],"3720c009":[()=>Promise.all([n.e(532),n.e(3751)]).then(n.bind(n,10727)),"@theme/DocTagsListPage",10727],"377f3aa1":[()=>n.e(1011).then(n.bind(n,7582)),"@site/blog/aoc-2022/02-week-2.md",7582],"3adcbc3a":[()=>n.e(5701).then(n.bind(n,62535)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/01-bf.md",62535],"3d92ba6e":[()=>n.e(8236).then(n.t.bind(n,77778,19)),"~docs/algorithms/tag-algorithms-tags-dijkstra-48e.json",77778],"3da4b779":[()=>n.e(2177).then(n.bind(n,28737)),"@site/blog/aoc-2022/04-week-4.md",28737],"4200b1a9":[()=>n.e(866).then(n.t.bind(n,24612,19)),"~blog/blog/blog-archive-80c.json",24612],"45c9e308":[()=>n.e(7084).then(n.bind(n,53181)),"@site/cpp/07-exceptions-and-raii/2023-11-24-placeholders.md",53181],"4621632b":[()=>n.e(3519).then(n.t.bind(n,29760,19)),"~blog/blog/blog-tags-cpp-7c7-list.json",29760],"48b268a6":[()=>n.e(1648).then(n.t.bind(n,35067,19)),"~docs/c/category-c-autogeneratedbar-category-bonuses-216.json",35067],"493c0536":[()=>n.e(7292).then(n.bind(n,45594)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/03-astar.md",45594],"4e546705":[()=>n.e(4327).then(n.t.bind(n,61795,19)),"~docs/c/version-current-metadata-prop-751.json",61795],"4edd2021":[()=>n.e(5975).then(n.t.bind(n,21705,19)),"~blog/blog/blog-tags-cpp-7c7.json",21705],"4f96b16e":[()=>n.e(6306).then(n.bind(n,24693)),"@site/c/pexam/c-cams.md",24693],51624505:[()=>n.e(4394).then(n.bind(n,32609)),"@site/blog/aoc-2022/00-intro.md",32609],"520f8175":[()=>n.e(8058).then(n.t.bind(n,24353,19)),"~docs/algorithms/tag-algorithms-tags-cpp-0d2.json",24353],"52f2a5bf":[()=>n.e(5430).then(n.t.bind(n,61387,19)),"~blog/blog/blog-tags-red-hat-df4.json",61387],"534d4833":[()=>n.e(9771).then(n.bind(n,93019)),"@site/algorithms/02-algorithms-correctness/2021-03-18-postcondition-ambiguity.md",93019],"595c7293":[()=>n.e(5634).then(n.bind(n,58396)),"@site/c/bonuses/08.md",58396],"5c15401e":[()=>n.e(9579).then(n.t.bind(n,43761,19)),"~docs/algorithms/tag-algorithms-tags-bellman-ford-731.json",43761],"5ca803d2":[()=>n.e(9173).then(n.t.bind(n,24890,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/c/plugin-route-context-module-100.json",24890],"5e95c892":[()=>n.e(9661).then(n.bind(n,41892)),"@theme/DocsRoot",41892],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"62d847b3":[()=>n.e(8520).then(n.t.bind(n,91901,19)),"~blog/blog/blog-tags-advent-of-code-2022-3db-list.json",91901],"66d5ef6c":[()=>n.e(9228).then(n.t.bind(n,4087,19)),"~blog/blog/blog-tags-tags-4c2.json",4087],"686a7a89":[()=>n.e(728).then(n.t.bind(n,77507,19)),"~docs/algorithms/tag-algorithms-tags-graphs-31d.json",77507],"6875c492":[()=>Promise.all([n.e(532),n.e(9365),n.e(130),n.e(8610)]).then(n.bind(n,41714)),"@theme/BlogTagsPostsPage",41714],"698e2076":[()=>n.e(3713).then(n.bind(n,38961)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/02-dijkstra.md",38961],"6bc697d0":[()=>n.e(5287).then(n.t.bind(n,68529,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-docs/cpp/plugin-route-context-module-100.json",68529],"6e3cbca1":[()=>n.e(3276).then(n.t.bind(n,29538,19)),"~docs/algorithms/version-current-metadata-prop-751.json",29538],"7052c0bc":[()=>n.e(9731).then(n.bind(n,42286)),"@site/cpp/00-intro.md",42286],"70a4540f":[()=>n.e(9249).then(n.bind(n,44493)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/01-naive.md",44493],"75cccf44":[()=>n.e(4256).then(n.bind(n,98215)),"@site/blog/leetcode/sort-matrix-diagonally.md?truncated=true",98215],"765ea78b":[()=>n.e(3039).then(n.t.bind(n,83010,19)),"~blog/blog/blog-tags-\ud83c\udfed-551.json",83010],"794ef108":[()=>n.e(3803).then(n.bind(n,86427)),"@site/c/00-intro.md",86427],"7a5bb070":[()=>n.e(4582).then(n.t.bind(n,64863,19)),"~blog/blog/blog-tags-memory-safety-1ae.json",64863],"7ce7faac":[()=>n.e(6064).then(n.t.bind(n,12884,19)),"~docs/algorithms/tag-algorithms-tags-solution-61b.json",12884],"7e6d325b":[()=>n.e(3184).then(n.t.bind(n,26139,19)),"~docs/cpp/version-current-metadata-prop-751.json",26139],"84d1e0d8":[()=>n.e(1885).then(n.bind(n,49713)),"@site/algorithms/00-intro.md",49713],"86cd1460":[()=>n.e(1235).then(n.t.bind(n,38968,19)),"~blog/blog/blog-tags-leetcode-042.json",38968],"8a25f659":[()=>n.e(7728).then(n.bind(n,73212)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/03-top-down-dp.md",73212],"8b1802c5":[()=>n.e(8480).then(n.t.bind(n,60832,19)),"~blog/blog/blog-tags-advent-of-code-49f-list.json",60832],"8c0e532b":[()=>n.e(822).then(n.t.bind(n,73968,19)),"~blog/blog/blog-tags-vps-843.json",73968],"8d31a880":[()=>n.e(9066).then(n.t.bind(n,72232,19)),"~docs/algorithms/tag-algorithms-tags-python-48f.json",72232],"8e6bb954":[()=>n.e(5775).then(n.t.bind(n,76206,19)),"~docs/algorithms/tag-algorithms-tags-exponential-60a.json",76206],"9287eafd":[()=>n.e(5521).then(n.t.bind(n,90716,19)),"~blog/blog/blog-tags-rust-0c9.json",90716],"933b95b3":[()=>n.e(3887).then(n.t.bind(n,7405,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-recursion-257.json",7405],"947341b7":[()=>n.e(1145).then(n.t.bind(n,2897,19)),"~docs/algorithms/tag-algorithms-tags-bfs-69f.json",2897],"95b96bb9":[()=>n.e(3561).then(n.t.bind(n,24577,19)),"~blog/blog/blog-post-list-prop-blog.json",24577],"95f41f0b":[()=>n.e(9385).then(n.bind(n,93195)),"@site/blog/aoc-2022/01-week-1.md?truncated=true",93195],"962da50c":[()=>n.e(2264).then(n.t.bind(n,9705,19)),"~docs/c/category-c-autogeneratedbar-category-practice-exams-e97.json",9705],"976c4f3b":[()=>n.e(4562).then(n.t.bind(n,69019,19)),"~docs/algorithms/tag-algorithms-tags-java-6c3.json",69019],"97a42631":[()=>n.e(1464).then(n.t.bind(n,77343,19)),"~docs/algorithms/tags-list-current-prop-15a.json",77343],"9a3dc578":[()=>n.e(655).then(n.t.bind(n,9916,19)),"~docs/algorithms/tag-algorithms-tags-dynamic-array-5d3.json",9916],"9b91a88c":[()=>n.e(2545).then(n.bind(n,19466)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/index.md",19466],"9df0e937":[()=>n.e(2210).then(n.t.bind(n,55256,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-graphs-2e2.json",55256],"9e4087bc":[()=>n.e(3608).then(n.bind(n,63169)),"@theme/BlogArchivePage",63169],a082abd3:[()=>n.e(8786).then(n.t.bind(n,73276,19)),"~blog/blog/blog-tags-admin-b05.json",73276],a2ba8888:[()=>n.e(8289).then(n.t.bind(n,55941,19)),"~docs/algorithms/tag-algorithms-tags-brute-force-3cb.json",55941],a4c10cf4:[()=>n.e(4382).then(n.t.bind(n,30685,19)),"~docs/algorithms/tag-algorithms-tags-time-complexity-c50.json",30685],a6a48ea2:[()=>n.e(3618).then(n.bind(n,1176)),"@site/blog/aoc-2022/02-week-2.md?truncated=true",1176],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(9365),n.e(130),n.e(3089)]).then(n.bind(n,80046)),"@theme/BlogListPage",80046],a7098721:[()=>n.e(1050).then(n.t.bind(n,26615,19)),"~blog/blog/blog-c06.json",26615],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,8564)),"@theme/DocVersionRoot",8564],a80747a0:[()=>n.e(5824).then(n.t.bind(n,4464,19)),"~blog/blog/blog-tags-advent-of-code-2022-3db.json",4464],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,12674)),"@theme/DocRoot",12674],aa24fd5d:[()=>n.e(7257).then(n.bind(n,90251)),"@site/algorithms/12-hash-tables/2023-11-28-breaking/01-python.md",90251],ab2721d4:[()=>n.e(7755).then(n.bind(n,53037)),"@site/blog/aoc-2022/04-week-4.md?truncated=true",53037],af8b72a7:[()=>n.e(5658).then(n.bind(n,10507)),"@site/blog/2023-08-02-copr.md?truncated=true",10507],b0291f37:[()=>n.e(6097).then(n.t.bind(n,7085,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-theme-search-algolia/default/plugin-route-context-module-100.json",7085],b1288602:[()=>n.e(59).then(n.bind(n,51456)),"@site/c/mr.md",51456],b25fbc58:[()=>n.e(9197).then(n.t.bind(n,75617,19)),"~blog/blog/blog-tags-\ud83c\udfed-551-list.json",75617],b45dccf0:[()=>n.e(9679).then(n.t.bind(n,58296,19)),"~blog/blog/blog-tags-copr-70b.json",58296],b5a32f14:[()=>n.e(2433).then(n.bind(n,31976)),"@site/blog/2023-08-02-copr.md",31976],b8cbf382:[()=>n.e(7438).then(n.t.bind(n,74632,19)),"~docs/algorithms/tag-algorithms-tags-greedy-02f.json",74632],b9f7f5c4:[()=>n.e(9179).then(n.bind(n,76699)),"@site/cpp/environment.md",76699],bb882650:[()=>n.e(8091).then(n.bind(n,66765)),"@site/blog/aoc-2022/03-week-3.md?truncated=true",66765],bb984793:[()=>n.e(6864).then(n.t.bind(n,82505,19)),"~docs/algorithms/tag-algorithms-tags-karel-df7.json",82505],bc0c9d90:[()=>n.e(354).then(n.bind(n,50476)),"@site/c/bonuses/04.md",50476],bc2d22bc:[()=>n.e(6519).then(n.t.bind(n,70428,19)),"~docs/algorithms/tag-algorithms-tags-bottom-up-dp-4f9.json",70428],c4c4056e:[()=>n.e(635).then(n.bind(n,61381)),"@site/algorithms/11-paths/2024-01-01-bf-to-astar/index.md",61381],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(4195)]).then(n.bind(n,53261)),"@site/src/pages/index.js",53261],c580b66a:[()=>n.e(6573).then(n.t.bind(n,45021,19)),"~docs/algorithms/tag-algorithms-tags-top-down-dp-c2f.json",45021],c90b7ff3:[()=>n.e(3602).then(n.t.bind(n,44960,19)),"~blog/blog/blog-tags-hype-1ee-list.json",44960],ccc49370:[()=>Promise.all([n.e(532),n.e(9365),n.e(130),n.e(6103)]).then(n.bind(n,65203)),"@theme/BlogPostPage",65203],cfa2b263:[()=>n.e(3086).then(n.bind(n,34437)),"@site/blog/leetcode/sort-matrix-diagonally.md",34437],d05e838c:[()=>n.e(6544).then(n.bind(n,63004)),"@site/c/bonuses/05-06.md",63004],d255bd7f:[()=>n.e(6292).then(n.t.bind(n,60341,19)),"~docs/algorithms/tag-algorithms-tags-red-black-trees-c61.json",60341],d309b5b1:[()=>n.e(8908).then(n.t.bind(n,26102,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-algorithms-and-correctness-d51.json",26102],d4b1e057:[()=>n.e(1492).then(n.t.bind(n,12842,19)),"~docs/algorithms/tag-algorithms-tags-balanced-trees-b3e.json",12842],d57b4369:[()=>n.e(6179).then(n.t.bind(n,52715,19)),"~docs/algorithms/tag-algorithms-tags-csharp-d1d.json",52715],d675395f:[()=>n.e(2741).then(n.t.bind(n,15745,19)),"/home/runner/work/blog/blog/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],d79dd549:[()=>n.e(5169).then(n.t.bind(n,29261,19)),"~blog/blog/blog-tags-red-hat-df4-list.json",29261],d7f7fb17:[()=>n.e(1171).then(n.bind(n,3455)),"@site/blog/aoc-2022/00-intro.md?truncated=true",3455],d8f4410e:[()=>n.e(2997).then(n.t.bind(n,41941,19)),"~docs/algorithms/tag-algorithms-tags-hash-tables-b36.json",41941],dd841e73:[()=>n.e(2482).then(n.t.bind(n,40155,19)),"~docs/algorithms/tag-algorithms-tags-dynamic-programming-3e6.json",40155],ddc7679f:[()=>n.e(569).then(n.bind(n,64322)),"@site/algorithms/10-graphs/2021-05-18-iterative-and-iterators.md",64322],dead8108:[()=>n.e(8807).then(n.bind(n,21431)),"@site/c/bonuses/03.md",21431],decbf9d1:[()=>n.e(2445).then(n.t.bind(n,88876,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-asymptotic-notation-and-time-complexity-e0d.json",88876],df078f58:[()=>n.e(7743).then(n.t.bind(n,88298,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-paths-in-graphs-202.json",88298],df0885f0:[()=>n.e(4343).then(n.t.bind(n,34175,19)),"~docs/algorithms/tag-algorithms-tags-iterators-13a.json",34175],df203c0f:[()=>Promise.all([n.e(532),n.e(9924)]).then(n.bind(n,40491)),"@theme/DocTagDocListPage",40491],dff2ebad:[()=>n.e(146).then(n.bind(n,42492)),"@site/blog/aoc-2022/01-week-1.md",42492],e1d2ae23:[()=>n.e(1475).then(n.t.bind(n,36302,19)),"~docs/algorithms/tag-algorithms-tags-applications-020.json",36302],e31003e9:[()=>n.e(1960).then(n.t.bind(n,81695,19)),"~docs/cpp/category-cpp-autogeneratedbar-category-exceptions-and-raii-6e9.json",81695],e89da83e:[()=>n.e(8757).then(n.t.bind(n,97416,19)),"~blog/blog/blog-tags-leetcode-042-list.json",97416],eba2374c:[()=>n.e(8387).then(n.t.bind(n,47662,19)),"~docs/algorithms/tag-algorithms-tags-backtracking-bb2.json",47662],f44abc07:[()=>n.e(2204).then(n.t.bind(n,39006,19)),"~blog/blog/blog-tags-cult-e97.json",39006],f48be158:[()=>n.e(4064).then(n.bind(n,12326)),"@site/blog/aoc-2022/03-week-3.md",12326],f71d1f68:[()=>n.e(6069).then(n.bind(n,13068)),"@site/blog/2024-01-28-rust-opinion.md",13068],f75910c4:[()=>n.e(5934).then(n.bind(n,1910)),"@site/algorithms/04-recursion/2023-08-17-pyramid-slide-down/02-greedy.md",1910],f7d29e9b:[()=>n.e(7959).then(n.t.bind(n,89266,19)),"~blog/blog/blog-tags-memory-safety-1ae-list.json",89266],fb4361d3:[()=>n.e(6327).then(n.t.bind(n,9631,19)),"~docs/algorithms/category-algorithms-autogeneratedbar-category-red-black-trees-d8a.json",9631],ff472cd9:[()=>n.e(8643).then(n.t.bind(n,7122,19)),"~blog/blog/blog-tags-iterators-977.json",7122],ff82dde7:[()=>Promise.all([n.e(532),n.e(8472)]).then(n.bind(n,63935)),"@site/algorithms/08-rb-trees/2023-06-10-rules.md",63935]};var s=n(85893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(99670),u=n(30226);function d(e,t){if("*"===e)return a()({loading:l,loader:()=>n.e(1772).then(n.bind(n,51772)),modules:["@theme/NotFound"],webpack:()=>[51772],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=o[`${e}-${t}`],d={},p=[],f=[],g=(0,c.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),a().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const a=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let i=a;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=o}));const o=a.__comp;delete a.__comp;const i=a.__context;return delete a.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(o,{...a,...n})})}})}const p=[{path:"/blog/",component:d("/blog/","892"),exact:!0},{path:"/blog/2023/08/02/copr/",component:d("/blog/2023/08/02/copr/","69d"),exact:!0},{path:"/blog/2024/01/28/rust-opinion/",component:d("/blog/2024/01/28/rust-opinion/","98d"),exact:!0},{path:"/blog/aoc-2022/1st-week/",component:d("/blog/aoc-2022/1st-week/","df4"),exact:!0},{path:"/blog/aoc-2022/2nd-week/",component:d("/blog/aoc-2022/2nd-week/","783"),exact:!0},{path:"/blog/aoc-2022/3rd-week/",component:d("/blog/aoc-2022/3rd-week/","7c5"),exact:!0},{path:"/blog/aoc-2022/4th-week/",component:d("/blog/aoc-2022/4th-week/","1ac"),exact:!0},{path:"/blog/aoc-2022/intro/",component:d("/blog/aoc-2022/intro/","ada"),exact:!0},{path:"/blog/archive/",component:d("/blog/archive/","22d"),exact:!0},{path:"/blog/leetcode/sort-diagonally/",component:d("/blog/leetcode/sort-diagonally/","d97"),exact:!0},{path:"/blog/tags/",component:d("/blog/tags/","f23"),exact:!0},{path:"/blog/tags/\ud83c\udfed/",component:d("/blog/tags/\ud83c\udfed/","ffd"),exact:!0},{path:"/blog/tags/admin/",component:d("/blog/tags/admin/","d3a"),exact:!0},{path:"/blog/tags/advent-of-code-2022/",component:d("/blog/tags/advent-of-code-2022/","7bd"),exact:!0},{path:"/blog/tags/advent-of-code/",component:d("/blog/tags/advent-of-code/","313"),exact:!0},{path:"/blog/tags/copr/",component:d("/blog/tags/copr/","959"),exact:!0},{path:"/blog/tags/cpp/",component:d("/blog/tags/cpp/","770"),exact:!0},{path:"/blog/tags/cult/",component:d("/blog/tags/cult/","73d"),exact:!0},{path:"/blog/tags/hype/",component:d("/blog/tags/hype/","d35"),exact:!0},{path:"/blog/tags/iterators/",component:d("/blog/tags/iterators/","2eb"),exact:!0},{path:"/blog/tags/leetcode/",component:d("/blog/tags/leetcode/","e31"),exact:!0},{path:"/blog/tags/memory-safety/",component:d("/blog/tags/memory-safety/","d15"),exact:!0},{path:"/blog/tags/red-hat/",component:d("/blog/tags/red-hat/","a58"),exact:!0},{path:"/blog/tags/rust/",component:d("/blog/tags/rust/","bfd"),exact:!0},{path:"/blog/tags/vps/",component:d("/blog/tags/vps/","1b8"),exact:!0},{path:"/contributions/",component:d("/contributions/","541"),exact:!0},{path:"/search/",component:d("/search/","c7b"),exact:!0},{path:"/talks/",component:d("/talks/","819"),exact:!0},{path:"/algorithms/",component:d("/algorithms/","c61"),routes:[{path:"/algorithms/",component:d("/algorithms/","b39"),routes:[{path:"/algorithms/tags/",component:d("/algorithms/tags/","bb8"),exact:!0},{path:"/algorithms/tags/a-star/",component:d("/algorithms/tags/a-star/","83e"),exact:!0},{path:"/algorithms/tags/applications/",component:d("/algorithms/tags/applications/","b32"),exact:!0},{path:"/algorithms/tags/astar/",component:d("/algorithms/tags/astar/","08b"),exact:!0},{path:"/algorithms/tags/backtracking/",component:d("/algorithms/tags/backtracking/","e2d"),exact:!0},{path:"/algorithms/tags/balanced-trees/",component:d("/algorithms/tags/balanced-trees/","591"),exact:!0},{path:"/algorithms/tags/bellman-ford/",component:d("/algorithms/tags/bellman-ford/","2bc"),exact:!0},{path:"/algorithms/tags/bfs/",component:d("/algorithms/tags/bfs/","334"),exact:!0},{path:"/algorithms/tags/bottom-up-dp/",component:d("/algorithms/tags/bottom-up-dp/","9e5"),exact:!0},{path:"/algorithms/tags/brute-force/",component:d("/algorithms/tags/brute-force/","99b"),exact:!0},{path:"/algorithms/tags/c/",component:d("/algorithms/tags/c/","cc5"),exact:!0},{path:"/algorithms/tags/cpp/",component:d("/algorithms/tags/cpp/","f5b"),exact:!0},{path:"/algorithms/tags/csharp/",component:d("/algorithms/tags/csharp/","7a9"),exact:!0},{path:"/algorithms/tags/dijkstra/",component:d("/algorithms/tags/dijkstra/","aa8"),exact:!0},{path:"/algorithms/tags/dynamic-array/",component:d("/algorithms/tags/dynamic-array/","00e"),exact:!0},{path:"/algorithms/tags/dynamic-programming/",component:d("/algorithms/tags/dynamic-programming/","f82"),exact:!0},{path:"/algorithms/tags/exponential/",component:d("/algorithms/tags/exponential/","a74"),exact:!0},{path:"/algorithms/tags/graphs/",component:d("/algorithms/tags/graphs/","d5b"),exact:!0},{path:"/algorithms/tags/greedy/",component:d("/algorithms/tags/greedy/","079"),exact:!0},{path:"/algorithms/tags/hash-tables/",component:d("/algorithms/tags/hash-tables/","ae4"),exact:!0},{path:"/algorithms/tags/iterative/",component:d("/algorithms/tags/iterative/","783"),exact:!0},{path:"/algorithms/tags/iterators/",component:d("/algorithms/tags/iterators/","1bc"),exact:!0},{path:"/algorithms/tags/java/",component:d("/algorithms/tags/java/","2b4"),exact:!0},{path:"/algorithms/tags/karel/",component:d("/algorithms/tags/karel/","79f"),exact:!0},{path:"/algorithms/tags/postconditions/",component:d("/algorithms/tags/postconditions/","a27"),exact:!0},{path:"/algorithms/tags/python/",component:d("/algorithms/tags/python/","eb2"),exact:!0},{path:"/algorithms/tags/recursion/",component:d("/algorithms/tags/recursion/","2b0"),exact:!0},{path:"/algorithms/tags/red-black-trees/",component:d("/algorithms/tags/red-black-trees/","9ca"),exact:!0},{path:"/algorithms/tags/solution/",component:d("/algorithms/tags/solution/","fa0"),exact:!0},{path:"/algorithms/tags/sorting/",component:d("/algorithms/tags/sorting/","7ca"),exact:!0},{path:"/algorithms/tags/testing/",component:d("/algorithms/tags/testing/","2af"),exact:!0},{path:"/algorithms/tags/time-complexity/",component:d("/algorithms/tags/time-complexity/","2d3"),exact:!0},{path:"/algorithms/tags/top-down-dp/",component:d("/algorithms/tags/top-down-dp/","779"),exact:!0},{path:"/algorithms/",component:d("/algorithms/","b7c"),routes:[{path:"/algorithms/",component:d("/algorithms/","9b0"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/algorithms-correctness/postcondition-ambiguity/",component:d("/algorithms/algorithms-correctness/postcondition-ambiguity/","c18"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/algorithms-and-correctness/",component:d("/algorithms/category/algorithms-and-correctness/","ea2"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/asymptotic-notation-and-time-complexity/",component:d("/algorithms/category/asymptotic-notation-and-time-complexity/","fba"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/graphs/",component:d("/algorithms/category/graphs/","a92"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/hash-tables/",component:d("/algorithms/category/hash-tables/","ddd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/paths-in-graphs/",component:d("/algorithms/category/paths-in-graphs/","7c7"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/recursion/",component:d("/algorithms/category/recursion/","61f"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/category/red-black-trees/",component:d("/algorithms/category/red-black-trees/","0c0"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/graphs/bfs-tree/",component:d("/algorithms/graphs/bfs-tree/","2fb"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/graphs/iterative-and-iterators/",component:d("/algorithms/graphs/iterative-and-iterators/","bfd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/hash-tables/breaking/",component:d("/algorithms/hash-tables/breaking/","319"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/hash-tables/breaking/mitigations/",component:d("/algorithms/hash-tables/breaking/mitigations/","4c2"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/hash-tables/breaking/python/",component:d("/algorithms/hash-tables/breaking/python/","3d1"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/",component:d("/algorithms/paths/bf-to-astar/","050"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/astar/",component:d("/algorithms/paths/bf-to-astar/astar/","b4d"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/bf/",component:d("/algorithms/paths/bf-to-astar/bf/","e9c"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/paths/bf-to-astar/dijkstra/",component:d("/algorithms/paths/bf-to-astar/dijkstra/","fe4"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/rb-trees/applications/",component:d("/algorithms/rb-trees/applications/","46a"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/rb-trees/rules/",component:d("/algorithms/rb-trees/rules/","21a"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/karel/",component:d("/algorithms/recursion/karel/","4cf"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/karel/solution/",component:d("/algorithms/recursion/karel/solution/","115"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/",component:d("/algorithms/recursion/pyramid-slide-down/","236"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/bottom-up-dp/",component:d("/algorithms/recursion/pyramid-slide-down/bottom-up-dp/","00d"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/greedy/",component:d("/algorithms/recursion/pyramid-slide-down/greedy/","4bf"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/naive/",component:d("/algorithms/recursion/pyramid-slide-down/naive/","c1b"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/recursion/pyramid-slide-down/top-down-dp/",component:d("/algorithms/recursion/pyramid-slide-down/top-down-dp/","fe9"),exact:!0,sidebar:"autogeneratedBar"},{path:"/algorithms/time-complexity/extend/",component:d("/algorithms/time-complexity/extend/","250"),exact:!0,sidebar:"autogeneratedBar"}]}]}]},{path:"/c/",component:d("/c/","dae"),routes:[{path:"/c/",component:d("/c/","fc8"),routes:[{path:"/c/",component:d("/c/","1c4"),routes:[{path:"/c/",component:d("/c/","a0f"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-03/",component:d("/c/bonuses/seminar-03/","aaa"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-04/",component:d("/c/bonuses/seminar-04/","ffe"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-05-06/",component:d("/c/bonuses/seminar-05-06/","4cd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-08/",component:d("/c/bonuses/seminar-08/","09a"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/bonuses/seminar-10/",component:d("/c/bonuses/seminar-10/","b9e"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/category/bonuses/",component:d("/c/category/bonuses/","17e"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/category/practice-exams/",component:d("/c/category/practice-exams/","009"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/mr/",component:d("/c/mr/","4c5"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/pexam/cams/",component:d("/c/pexam/cams/","a10"),exact:!0,sidebar:"autogeneratedBar"},{path:"/c/pexam/garbage_collect/",component:d("/c/pexam/garbage_collect/","44e"),exact:!0,sidebar:"autogeneratedBar"}]}]}]},{path:"/cpp/",component:d("/cpp/","269"),routes:[{path:"/cpp/",component:d("/cpp/","187"),routes:[{path:"/cpp/",component:d("/cpp/","102"),routes:[{path:"/cpp/",component:d("/cpp/","fcd"),exact:!0,sidebar:"autogeneratedBar"},{path:"/cpp/category/exceptions-and-raii/",component:d("/cpp/category/exceptions-and-raii/","cfa"),exact:!0,sidebar:"autogeneratedBar"},{path:"/cpp/environment/",component:d("/cpp/environment/","e0b"),exact:!0,sidebar:"autogeneratedBar"},{path:"/cpp/exceptions-and-raii/placeholders/",component:d("/cpp/exceptions-and-raii/placeholders/","9b3"),exact:!0,sidebar:"autogeneratedBar"}]}]}]},{path:"/",component:d("/","dfb"),exact:!0},{path:"*",component:d("*")}]},98934:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>i});var r=n(67294),a=n(85893);const o=r.createContext(!1);function i(e){let{children:t}=e;const[n,i]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{i(!0)}),[]),(0,a.jsx)(o.Provider,{value:n,children:t})}},97221:(e,t,n)=>{"use strict";var r=n(67294),a=n(20745),o=n(73727),i=n(70405),s=n(10412);const l=[n(32497),n(3310),n(18320),n(7439),n(57800)];var c=n(723),u=n(16550),d=n(18790),p=n(85893);function f(e){let{children:t}=e;return(0,p.jsx)(p.Fragment,{children:t})}var g=n(35742),h=n(52263),m=n(44996),b=n(86668),y=n(10833),v=n(94711),w=n(19727),k=n(43320),x=n(18780),S=n(90197);function _(){const{i18n:{currentLocale:e,defaultLocale:t,localeConfigs:n}}=(0,h.Z)(),r=(0,v.l)(),a=n[e].htmlLang,o=e=>e.replace("-","_");return(0,p.jsxs)(g.Z,{children:[Object.entries(n).map((e=>{let[t,{htmlLang:n}]=e;return(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:n},t)})),(0,p.jsx)("link",{rel:"alternate",href:r.createUrl({locale:t,fullyQualified:!0}),hrefLang:"x-default"}),(0,p.jsx)("meta",{property:"og:locale",content:o(a)}),Object.values(n).filter((e=>a!==e.htmlLang)).map((e=>(0,p.jsx)("meta",{property:"og:locale:alternate",content:o(e.htmlLang)},`meta-og-${e.htmlLang}`)))]})}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,h.Z)(),r=function(){const{siteConfig:{url:e,baseUrl:t,trailingSlash:n}}=(0,h.Z)(),{pathname:r}=(0,u.TH)();return e+(0,x.applyTrailingSlash)((0,m.Z)(r),{trailingSlash:n,baseUrl:t})}(),a=t?`${n}${t}`:r;return(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{property:"og:url",content:a}),(0,p.jsx)("link",{rel:"canonical",href:a})]})}function C(){const{i18n:{currentLocale:e}}=(0,h.Z)(),{metadata:t,image:n}=(0,b.L)();return(0,p.jsxs)(p.Fragment,{children:[(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),(0,p.jsx)("body",{className:w.h})]}),n&&(0,p.jsx)(y.d,{image:n}),(0,p.jsx)(E,{}),(0,p.jsx)(_,{}),(0,p.jsx)(S.Z,{tag:k.HX,locale:e}),(0,p.jsx)(g.Z,{children:t.map(((e,t)=>(0,p.jsx)("meta",{...e},t)))})]})}const T=new Map;function A(e){if(T.has(e.pathname))return{...e,pathname:T.get(e.pathname)};if((0,d.f)(c.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return T.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return T.set(e.pathname,t),{...e,pathname:t}}var j=n(98934),N=n(58940),L=n(20469);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const a=l.map((t=>{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const I=function(e){let{children:t,location:n,previousLocation:r}=e;return(0,L.Z)((()=>{r!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,a=t.hash===n.hash,o=t.search===n.search;if(r&&a&&!o)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:r}),P("onRouteDidUpdate",{previousLocation:r,location:n}))}),[r,n]),t};function R(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(c.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),R(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return(0,p.jsx)(I,{previousLocation:this.previousLocation,location:t,children:(0,p.jsx)(u.AW,{location:t,render:()=>e})})}}const F=O,M="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",B="__docusaurus-base-url-issue-banner-suggestion-container";function z(e){return`\ndocument.addEventListener('DOMContentLoaded', function maybeInsertBanner() {\n var shouldInsert = typeof window['docusaurus'] === 'undefined';\n shouldInsert && insertBanner();\n});\n\nfunction insertBanner() {\n var bannerContainer = document.createElement('div');\n bannerContainer.id = '${M}';\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="${D}" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${B}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n document.body.prepend(bannerContainer);\n var suggestionContainer = document.getElementById('${B}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function $(){const{siteConfig:{baseUrl:e}}=(0,h.Z)();return(0,p.jsx)(p.Fragment,{children:!s.Z.canUseDOM&&(0,p.jsx)(g.Z,{children:(0,p.jsx)("script",{children:z(e)})})})}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,h.Z)(),{pathname:n}=(0,u.TH)();return t&&n===e?(0,p.jsx)($,{}):null}function Z(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:r,localeConfigs:a}}=(0,h.Z)(),o=(0,m.Z)(e),{htmlLang:i,direction:s}=a[r];return(0,p.jsxs)(g.Z,{children:[(0,p.jsx)("html",{lang:i,dir:s}),(0,p.jsx)("title",{children:t}),(0,p.jsx)("meta",{property:"og:title",content:t}),(0,p.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&(0,p.jsx)("meta",{name:"robots",content:"noindex, nofollow"}),e&&(0,p.jsx)("link",{rel:"icon",href:o})]})}var H=n(44763),V=n(72389);function W(){const e=(0,V.Z)();return(0,p.jsx)(g.Z,{children:(0,p.jsx)("html",{"data-has-hydrated":e})})}function G(){const e=(0,d.H)(c.Z),t=(0,u.TH)();return(0,p.jsx)(H.Z,{children:(0,p.jsx)(N.M,{children:(0,p.jsxs)(j.t,{children:[(0,p.jsxs)(f,{children:[(0,p.jsx)(Z,{}),(0,p.jsx)(C,{}),(0,p.jsx)(U,{}),(0,p.jsx)(F,{location:A(t),children:e})]}),(0,p.jsx)(W,{})]})})})}var q=n(16887);const K=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;a?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Y=n(99670);const Q=new Set,X=new Set,J=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,ee={prefetch(e){if(!(e=>!J()&&!X.has(e)&&!Q.has(e))(e))return!1;Q.add(e);const t=(0,d.f)(c.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(q).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Y.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?K(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!J()&&!X.has(e))(e)&&(X.add(e),R(e))},te=Object.freeze(ee),ne=Boolean(!0);if(s.Z.canUseDOM){window.docusaurus=te;const e=document.getElementById("__docusaurus"),t=(0,p.jsx)(i.B6,{children:(0,p.jsx)(o.VK,{children:(0,p.jsx)(G,{})})}),n=(e,t)=>{console.error("Docusaurus React Root onRecoverableError:",e,t)},s=()=>{if(ne)r.startTransition((()=>{a.hydrateRoot(e,t,{onRecoverableError:n})}));else{const o=a.createRoot(e,{onRecoverableError:n});r.startTransition((()=>{o.render(t)}))}};R(window.location.pathname).then(s)}},58940:(e,t,n)=>{"use strict";n.d(t,{_:()=>d,M:()=>p});var r=n(67294),a=n(36809);const o=JSON.parse('{"docusaurus-plugin-content-docs":{"cpp":{"path":"/cpp","versions":[{"name":"current","label":"Next","isLast":true,"path":"/cpp","mainDocId":"cpp-intro","docs":[{"id":"cpp-intro","path":"/cpp/","sidebar":"autogeneratedBar"},{"id":"environment","path":"/cpp/environment","sidebar":"autogeneratedBar"},{"id":"exceptions-and-raii/2023-11-24-placeholders","path":"/cpp/exceptions-and-raii/placeholders","sidebar":"autogeneratedBar"},{"id":"/category/exceptions-and-raii","path":"/cpp/category/exceptions-and-raii","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/cpp/","label":"cpp-intro"}}}}],"breadcrumbs":true},"c":{"path":"/c","versions":[{"name":"current","label":"Next","isLast":true,"path":"/c","mainDocId":"c-intro","docs":[{"id":"bonuses/seminar-03","path":"/c/bonuses/seminar-03","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-04","path":"/c/bonuses/seminar-04","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-05-06","path":"/c/bonuses/seminar-05-06","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-08","path":"/c/bonuses/seminar-08","sidebar":"autogeneratedBar"},{"id":"bonuses/seminar-10","path":"/c/bonuses/seminar-10","sidebar":"autogeneratedBar"},{"id":"c-intro","path":"/c/","sidebar":"autogeneratedBar"},{"id":"mr","path":"/c/mr","sidebar":"autogeneratedBar"},{"id":"pexam/b-garbage_collect","path":"/c/pexam/garbage_collect","sidebar":"autogeneratedBar"},{"id":"pexam/c-cams","path":"/c/pexam/cams","sidebar":"autogeneratedBar"},{"id":"/category/bonuses","path":"/c/category/bonuses","sidebar":"autogeneratedBar"},{"id":"/category/practice-exams","path":"/c/category/practice-exams","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/c/","label":"c-intro"}}}}],"breadcrumbs":true},"algorithms":{"path":"/algorithms","versions":[{"name":"current","label":"Next","isLast":true,"path":"/algorithms","mainDocId":"algorithms-intro","docs":[{"id":"algorithms-correctness/postcondition-ambiguity","path":"/algorithms/algorithms-correctness/postcondition-ambiguity","sidebar":"autogeneratedBar"},{"id":"algorithms-intro","path":"/algorithms/","sidebar":"autogeneratedBar"},{"id":"graphs/bfs-tree","path":"/algorithms/graphs/bfs-tree","sidebar":"autogeneratedBar"},{"id":"graphs/iterative-and-iterators","path":"/algorithms/graphs/iterative-and-iterators","sidebar":"autogeneratedBar"},{"id":"hash-tables/2023-11-28-breaking/breaking","path":"/algorithms/hash-tables/breaking","sidebar":"autogeneratedBar"},{"id":"hash-tables/2023-11-28-breaking/mitigations","path":"/algorithms/hash-tables/breaking/mitigations","sidebar":"autogeneratedBar"},{"id":"hash-tables/2023-11-28-breaking/python","path":"/algorithms/hash-tables/breaking/python","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/astar","path":"/algorithms/paths/bf-to-astar/astar","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/bf","path":"/algorithms/paths/bf-to-astar/bf","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/dijkstra","path":"/algorithms/paths/bf-to-astar/dijkstra","sidebar":"autogeneratedBar"},{"id":"paths/2024-01-01-bf-to-astar/index","path":"/algorithms/paths/bf-to-astar","sidebar":"autogeneratedBar"},{"id":"rb-trees/applications","path":"/algorithms/rb-trees/applications","sidebar":"autogeneratedBar"},{"id":"rb-trees/rules","path":"/algorithms/rb-trees/rules","sidebar":"autogeneratedBar"},{"id":"recursion/2022-11-29-karel/karel","path":"/algorithms/recursion/karel","sidebar":"autogeneratedBar"},{"id":"recursion/2022-11-29-karel/solution","path":"/algorithms/recursion/karel/solution","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/bottom-up-dp","path":"/algorithms/recursion/pyramid-slide-down/bottom-up-dp","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/greedy","path":"/algorithms/recursion/pyramid-slide-down/greedy","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/naive","path":"/algorithms/recursion/pyramid-slide-down/naive","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/pyramid-slide-down","path":"/algorithms/recursion/pyramid-slide-down","sidebar":"autogeneratedBar"},{"id":"recursion/2023-08-17-pyramid-slide-down/top-down-dp","path":"/algorithms/recursion/pyramid-slide-down/top-down-dp","sidebar":"autogeneratedBar"},{"id":"time-complexity/extend","path":"/algorithms/time-complexity/extend","sidebar":"autogeneratedBar"},{"id":"/category/algorithms-and-correctness","path":"/algorithms/category/algorithms-and-correctness","sidebar":"autogeneratedBar"},{"id":"/category/asymptotic-notation-and-time-complexity","path":"/algorithms/category/asymptotic-notation-and-time-complexity","sidebar":"autogeneratedBar"},{"id":"/category/recursion","path":"/algorithms/category/recursion","sidebar":"autogeneratedBar"},{"id":"/category/red-black-trees","path":"/algorithms/category/red-black-trees","sidebar":"autogeneratedBar"},{"id":"/category/graphs","path":"/algorithms/category/graphs","sidebar":"autogeneratedBar"},{"id":"/category/paths-in-graphs","path":"/algorithms/category/paths-in-graphs","sidebar":"autogeneratedBar"},{"id":"/category/hash-tables","path":"/algorithms/category/hash-tables","sidebar":"autogeneratedBar"}],"draftIds":[],"sidebars":{"autogeneratedBar":{"link":{"path":"/algorithms/","label":"algorithms-intro"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(57529);const l=JSON.parse('{"docusaurusVersion":"3.1.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"3.1.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"3.1.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"3.1.1"},"docusaurus-theme-search-algolia":{"type":"package","name":"@docusaurus/theme-search-algolia","version":"3.1.1"},"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"3.1.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"3.1.1"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.5"},"docusaurus-plugin-client-redirects":{"type":"package","name":"@docusaurus/plugin-client-redirects","version":"3.1.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"3.1.1"}}}');var c=n(85893);const u={siteConfig:a.default,siteMetadata:l,globalData:o,i18n:i,codeTranslations:s},d=r.createContext(u);function p(e){let{children:t}=e;return(0,c.jsx)(d.Provider,{value:u,children:t})}},44763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),a=n(10412),o=n(35742),i=n(18780),s=n(80647),l=n(85893);function c(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"},children:[(0,l.jsx)("h1",{style:{fontSize:"3rem"},children:"This page crashed"}),(0,l.jsx)("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"},children:"Try again"}),(0,l.jsx)(u,{error:t})]})}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,l.jsx)("p",{style:{whiteSpace:"pre-wrap"},children:n})}function d(e){let{error:t,tryAgain:n}=e;return(0,l.jsxs)(f,{fallback:()=>(0,l.jsx)(c,{error:t,tryAgain:n}),children:[(0,l.jsx)(o.Z,{children:(0,l.jsx)("title",{children:"Page Error"})}),(0,l.jsx)(s.Z,{children:(0,l.jsx)(c,{error:t,tryAgain:n})})]})}const p=e=>(0,l.jsx)(d,{...e});class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){a.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??p)(e)}return e??null}}},10412:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,a={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},35742:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);var r=n(70405),a=n(85893);function o(e){return(0,a.jsx)(r.ql,{...e})}},33692:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(67294),a=n(73727),o=n(18780),i=n(52263),s=n(13919),l=n(10412),c=n(28138),u=n(44996),d=n(85893);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:g,isActive:h,"data-noBrokenLinkCheck":m,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:v,baseUrl:w}}=(0,i.Z)(),{withBaseUrl:k}=(0,u.C)(),x=(0,c.Z)(),S=(0,r.useRef)(null);(0,r.useImperativeHandle)(t,(()=>S.current));const _=p||f;const E=(0,s.Z)(_),C=_?.replace("pathname://","");let T=void 0!==C?(A=C,b&&(e=>e.startsWith("/"))(A)?k(A):A):void 0;var A;T&&E&&(T=(0,o.applyTrailingSlash)(T,{trailingSlash:v,baseUrl:w}));const j=(0,r.useRef)(!1),N=n?a.OL:a.rU,L=l.Z.canUseIntersectionObserver,P=(0,r.useRef)(),I=()=>{j.current||null==T||(window.docusaurus.preload(T),j.current=!0)};(0,r.useEffect)((()=>(!L&&E&&null!=T&&window.docusaurus.prefetch(T),()=>{L&&P.current&&P.current.disconnect()})),[P,T,L,E]);const R=T?.startsWith("#")??!1,O=!y.target||"_self"===y.target,F=!T||!E||!O||R;return m||!R&&F||x.collectLink(T),y.id&&x.collectAnchor(y.id),F?(0,d.jsx)("a",{ref:S,href:T,..._&&!E&&{target:"_blank",rel:"noopener noreferrer"},...y}):(0,d.jsx)(N,{...y,onMouseEnter:I,onTouchStart:I,innerRef:e=>{S.current=e,L&&e&&E&&(P.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(P.current.unobserve(e),P.current.disconnect(),null!=T&&window.docusaurus.prefetch(T))}))})),P.current.observe(e))},to:T,...n&&{isActive:h,activeClassName:g}})}const f=r.forwardRef(p)},95999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c,I:()=>l});var r=n(67294),a=n(85893);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var i=n(57529);function s(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return i[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(s({message:n,id:r}),t)}function c(e){let{children:t,id:n,values:r}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const i=s({message:t,id:n});return(0,a.jsx)(a.Fragment,{children:o(i,r)})}},29935:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},13919:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function a(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>a,b:()=>r})},44996:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(67294),a=n(52263),o=n(13919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},28138:(e,t,n)=>{"use strict";n.d(t,{Z:()=>i});var r=n(67294);n(85893);const a=r.createContext({collectAnchor:()=>{},collectLink:()=>{}}),o=()=>(0,r.useContext)(a);function i(){return o()}},52263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(58940);function o(){return(0,r.useContext)(a._)}},72389:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(67294),a=n(98934);function o(){return(0,r.useContext)(a._)}},20469:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294);const a=n(10412).Z.canUseDOM?r.useLayoutEffect:r.useEffect},99670:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function a(e){const t={};return function e(n,a){Object.entries(n).forEach((n=>{let[o,i]=n;const s=a?`${a}.${o}`:o;r(i)?e(i,s):t[s]=i}))}(e),t}},30226:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>i});var r=n(67294),a=n(85893);const o=r.createContext(null);function i(e){let{children:t,value:n}=e;const i=r.useContext(o),s=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:i,value:n})),[i,n]);return(0,a.jsx)(o.Provider,{value:s,children:t})}},80143:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>b,gA:()=>f,WS:()=>g,_r:()=>d,Jo:()=>y,zh:()=>p,yW:()=>m,gB:()=>h});var r=n(16550),a=n(52263),o=n(29935);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,a.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const s=e=>e.versions.find((e=>e.isLast));function l(e,t){const n=s(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function c(e,t){const n=l(e,t),a=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:a,alternateDocVersions:a?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(a.id):{}}}const u={},d=()=>i("docusaurus-plugin-content-docs")??u,p=e=>function(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=i(e),a=r?.[t];if(!a&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return a}("docusaurus-plugin-content-docs",e,{failfast:!0});function f(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const a=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),o=a?{pluginId:a[0],pluginData:a[1]}:void 0;if(!o&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return o}(t,n,e)}function g(e){void 0===e&&(e={});const t=f(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:l(t.pluginData,n)}}function h(e){return p(e).versions}function m(e){const t=p(e);return s(t)}function b(e){const t=p(e),{pathname:n}=(0,r.TH)();return c(t,n)}function y(e){const t=p(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=s(e);return{latestDocSuggestion:c(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},18320:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=n(74865),a=n.n(r);a().configure({showSpinner:!1});const o={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{a().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){a().done()}}},3310:(e,t,n)=>{"use strict";n.r(t);var r=n(14965),a=n(36809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{"php"===e&&n(96854),n(30218)(`./prism-${e}`)})),delete globalThis.Prism}(r.p1)},92503:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(67294);var r=n(36905),a=n(95999),o=n(86668),i=n(33692),s=n(28138);const l={anchorWithStickyNavbar:"anchorWithStickyNavbar_LWe7",anchorWithHideOnScrollNavbar:"anchorWithHideOnScrollNavbar_WYt5"};var c=n(85893);function u(e){let{as:t,id:n,...u}=e;const d=(0,s.Z)(),{navbar:{hideOnScroll:p}}=(0,o.L)();if("h1"===t||!n)return(0,c.jsx)(t,{...u,id:void 0});d.collectAnchor(n);const f=(0,a.I)({id:"theme.common.headingLinkTitle",message:"Direct link to {heading}",description:"Title for link to heading"},{heading:"string"==typeof u.children?u.children:n});return(0,c.jsxs)(t,{...u,className:(0,r.Z)("anchor",p?l.anchorWithHideOnScrollNavbar:l.anchorWithStickyNavbar,u.className),id:n,children:[u.children,(0,c.jsx)(i.Z,{className:"hash-link",to:`#${n}`,"aria-label":f,title:f,children:"\u200b"})]})}},39471:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);const r={iconExternalLink:"iconExternalLink_nPIU"};var a=n(85893);function o(e){let{width:t=13.5,height:n=13.5}=e;return(0,a.jsx)("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:r.iconExternalLink,children:(0,a.jsx)("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"})})}},80647:(e,t,n)=>{"use strict";n.d(t,{Z:()=>At});var r=n(67294),a=n(36905),o=n(44763),i=n(10833),s=n(16550),l=n(95999),c=n(85936),u=n(85893);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,s.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const g=(0,l.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??g,{containerRef:n,onClick:r}=f();return(0,u.jsx)("div",{ref:n,role:"region","aria-label":g,children:(0,u.jsx)("a",{...e,href:`#${d}`,onClick:r,children:t})})}var m=n(35281),b=n(19727);const y={skipToContent:"skipToContent_fXgn"};function v(){return(0,u.jsx)(h,{className:y.skipToContent})}var w=n(86668),k=n(59689);function x(e){let{width:t=21,height:n=21,color:r="currentColor",strokeWidth:a=1.2,className:o,...i}=e;return(0,u.jsx)("svg",{viewBox:"0 0 15 15",width:t,height:n,...i,children:(0,u.jsx)("g",{stroke:r,strokeWidth:a,children:(0,u.jsx)("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})})})}const S={closeButton:"closeButton_CVFx"};function _(e){return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"}),...e,className:(0,a.Z)("clean-btn close",S.closeButton,e.className),children:(0,u.jsx)(x,{width:14,height:14,strokeWidth:3.1})})}const E={content:"content_knG7"};function C(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return(0,u.jsx)("div",{...e,className:(0,a.Z)(E.content,e.className),dangerouslySetInnerHTML:{__html:n}})}const T={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function A(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:r,textColor:a,isCloseable:o}=e;return(0,u.jsxs)("div",{className:T.announcementBar,style:{backgroundColor:r,color:a},role:"banner",children:[o&&(0,u.jsx)("div",{className:T.announcementBarPlaceholder}),(0,u.jsx)(C,{className:T.announcementBarContent}),o&&(0,u.jsx)(_,{onClick:n,className:T.announcementBarClose})]})}var j=n(93163),N=n(12466);var L=n(902),P=n(13102);const I=r.createContext(null);function R(e){let{children:t}=e;const n=function(){const e=(0,j.e)(),t=(0,P.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,L.D9)(o);return(0,r.useEffect)((()=>{o&&!i&&a(!0)}),[o,i]),(0,r.useEffect)((()=>{o?e.shown||a(!0):a(!1)}),[e.shown,o]),(0,r.useMemo)((()=>[n,a]),[n])}();return(0,u.jsx)(I.Provider,{value:n,children:t})}function O(e){if(e.component){const t=e.component;return(0,u.jsx)(t,{...e.props})}}function F(){const e=(0,r.useContext)(I);if(!e)throw new L.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,P.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:O(o)})),[a,o,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:o}=F();return(0,u.jsxs)("div",{className:"navbar-sidebar",children:[t,(0,u.jsxs)("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":o}),children:[(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:n}),(0,u.jsx)("div",{className:"navbar-sidebar__item menu",children:r})]})]})}var D=n(92949),B=n(72389);function z(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})})}function $(e){return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:24,height:24,...e,children:(0,u.jsx)("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"})})}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function Z(e){let{className:t,buttonClassName:n,value:r,onChange:o}=e;const i=(0,B.Z)(),s=(0,l.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,l.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,l.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return(0,u.jsx)("div",{className:(0,a.Z)(U.toggle,t),children:(0,u.jsxs)("button",{className:(0,a.Z)("clean-btn",U.toggleButton,!i&&U.toggleButtonDisabled,n),type:"button",onClick:()=>o("dark"===r?"light":"dark"),disabled:!i,title:s,"aria-label":s,"aria-live":"polite",children:[(0,u.jsx)(z,{className:(0,a.Z)(U.toggleIcon,U.lightToggleIcon)}),(0,u.jsx)($,{className:(0,a.Z)(U.toggleIcon,U.darkToggleIcon)})]})})}const H=r.memo(Z),V={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function W(e){let{className:t}=e;const n=(0,w.L)().navbar.style,r=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,D.I)();return r?null:(0,u.jsx)(H,{className:t,buttonClassName:"dark"===n?V.darkNavbarColorModeToggle:void 0,value:a,onChange:o})}var G=n(21327);function q(){return(0,u.jsx)(G.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function K(){const e=(0,j.e)();return(0,u.jsx)("button",{type:"button","aria-label":(0,l.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle(),children:(0,u.jsx)(x,{color:"var(--ifm-color-emphasis-600)"})})}function Y(){return(0,u.jsxs)("div",{className:"navbar-sidebar__brand",children:[(0,u.jsx)(q,{}),(0,u.jsx)(W,{className:"margin-right--md"}),(0,u.jsx)(K,{})]})}var Q=n(33692),X=n(44996),J=n(13919),ee=n(98022),te=n(39471);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:a,label:o,html:i,isDropdownLink:s,prependBaseUrlToHref:l,...c}=e;const d=(0,X.Z)(r),p=(0,X.Z)(t),f=(0,X.Z)(a,{forcePrependBaseUrl:!0}),g=o&&a&&!(0,J.Z)(a),h=i?{dangerouslySetInnerHTML:{__html:i}}:{children:(0,u.jsxs)(u.Fragment,{children:[o,g&&(0,u.jsx)(te.Z,{...s&&{width:12,height:12}})]})};return a?(0,u.jsx)(Q.Z,{href:l?f:a,...c,...h}):(0,u.jsx)(Q.Z,{to:d,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,ee.F)(n,t.pathname):t.pathname.startsWith(p)},...c,...h})}function re(e){let{className:t,isDropdownItem:n=!1,...r}=e;const o=(0,u.jsx)(ne,{className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n,...r});return n?(0,u.jsx)("li",{children:o}):o}function ae(e){let{className:t,isDropdownItem:n,...r}=e;return(0,u.jsx)("li",{className:"menu__list-item",children:(0,u.jsx)(ne,{className:(0,a.Z)("menu__link",t),...r})})}function oe(e){let{mobile:t=!1,position:n,...r}=e;const a=t?ae:re;return(0,u.jsx)(a,{...r,activeClassName:r.activeClassName??(t?"menu__link--active":"navbar__link--active")})}var ie=n(86043),se=n(48596),le=n(52263);const ce={dropdownNavbarItemMobile:"dropdownNavbarItemMobile_S0Fm"};function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!(0,ee.F)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function de(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const l=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{l.current&&!l.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[l]),(0,u.jsxs)("div",{ref:l,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c}),children:[(0,u.jsx)(ne,{"aria-haspopup":"true","aria-expanded":c,role:"button",href:s.to?void 0:"#",className:(0,a.Z)("navbar__link",o),...s,onClick:s.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))},children:s.children??s.label}),(0,u.jsx)("ul",{className:"dropdown__menu",children:t.map(((e,t)=>(0,r.createElement)(He,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))})]})}function pe(e){let{items:t,className:n,position:o,onClick:i,...l}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:g}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&g(!d)}),[c,d,g]),(0,u.jsxs)("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":p}),children:[(0,u.jsx)(ne,{role:"button",className:(0,a.Z)(ce.dropdownNavbarItemMobile,"menu__link menu__link--sublist menu__link--sublist-caret",n),...l,onClick:e=>{e.preventDefault(),f()},children:l.children??l.label}),(0,u.jsx)(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p,children:t.map(((e,t)=>(0,r.createElement)(He,{mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active",...e,key:t})))})]})}function fe(e){let{mobile:t=!1,...n}=e;const r=t?pe:de;return(0,u.jsx)(r,{...n})}var ge=n(94711);function he(e){let{width:t=20,height:n=20,...r}=e;return(0,u.jsx)("svg",{viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0,...r,children:(0,u.jsx)("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"})})}const me="iconLanguage_nlXk";var be=n(73935);function ye(){return r.createElement("svg",{width:"15",height:"15",className:"DocSearch-Control-Key-Icon"},r.createElement("path",{d:"M4.505 4.496h2M5.505 5.496v5M8.216 4.496l.055 5.993M10 7.5c.333.333.5.667.5 1v2M12.326 4.5v5.996M8.384 4.496c1.674 0 2.116 0 2.116 1.5s-.442 1.5-2.116 1.5M3.205 9.303c-.09.448-.277 1.21-1.241 1.203C1 10.5.5 9.513.5 8V7c0-1.57.5-2.5 1.464-2.494.964.006 1.134.598 1.24 1.342M12.553 10.5h1.953",strokeWidth:"1.2",stroke:"currentColor",fill:"none",strokeLinecap:"square"}))}var ve=n(20830),we=["translations"];function ke(){return ke=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},ke.apply(this,arguments)}function xe(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,o=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(l){s=!0,a=l}finally{try{i||null==n.return||n.return()}finally{if(s)throw a}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return Se(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Se(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Se(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function _e(e,t){if(null==e)return{};var n,r,a=function(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var Ee="Ctrl";var Ce=r.forwardRef((function(e,t){var n=e.translations,a=void 0===n?{}:n,o=_e(e,we),i=a.buttonText,s=void 0===i?"Search":i,l=a.buttonAriaLabel,c=void 0===l?"Search":l,u=xe((0,r.useState)(null),2),d=u[0],p=u[1];return(0,r.useEffect)((function(){"undefined"!=typeof navigator&&(/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?p("\u2318"):p(Ee))}),[]),r.createElement("button",ke({type:"button",className:"DocSearch DocSearch-Button","aria-label":c},o,{ref:t}),r.createElement("span",{className:"DocSearch-Button-Container"},r.createElement(ve.W,null),r.createElement("span",{className:"DocSearch-Button-Placeholder"},s)),r.createElement("span",{className:"DocSearch-Button-Keys"},null!==d&&r.createElement(r.Fragment,null,r.createElement("kbd",{className:"DocSearch-Button-Key"},d===Ee?r.createElement(ye,null):d),r.createElement("kbd",{className:"DocSearch-Button-Key"},"K"))))})),Te=n(35742),Ae=n(66177),je=n(239),Ne=n(43320);const Le={button:{buttonText:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"}),buttonAriaLabel:(0,l.I)({id:"theme.SearchBar.label",message:"Search",description:"The ARIA label and placeholder for search button"})},modal:{searchBox:{resetButtonTitle:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),resetButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.resetButtonTitle",message:"Clear the query",description:"The label and ARIA label for search box reset button"}),cancelButtonText:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"}),cancelButtonAriaLabel:(0,l.I)({id:"theme.SearchModal.searchBox.cancelButtonText",message:"Cancel",description:"The label and ARIA label for search box cancel button"})},startScreen:{recentSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.recentSearchesTitle",message:"Recent",description:"The title for recent searches"}),noRecentSearchesText:(0,l.I)({id:"theme.SearchModal.startScreen.noRecentSearchesText",message:"No recent searches",description:"The text when no recent searches"}),saveRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.saveRecentSearchButtonTitle",message:"Save this search",description:"The label for save recent search button"}),removeRecentSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeRecentSearchButtonTitle",message:"Remove this search from history",description:"The label for remove recent search button"}),favoriteSearchesTitle:(0,l.I)({id:"theme.SearchModal.startScreen.favoriteSearchesTitle",message:"Favorite",description:"The title for favorite searches"}),removeFavoriteSearchButtonTitle:(0,l.I)({id:"theme.SearchModal.startScreen.removeFavoriteSearchButtonTitle",message:"Remove this search from favorites",description:"The label for remove favorite search button"})},errorScreen:{titleText:(0,l.I)({id:"theme.SearchModal.errorScreen.titleText",message:"Unable to fetch results",description:"The title for error screen of search modal"}),helpText:(0,l.I)({id:"theme.SearchModal.errorScreen.helpText",message:"You might want to check your network connection.",description:"The help text for error screen of search modal"})},footer:{selectText:(0,l.I)({id:"theme.SearchModal.footer.selectText",message:"to select",description:"The explanatory text of the action for the enter key"}),selectKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.selectKeyAriaLabel",message:"Enter key",description:"The ARIA label for the Enter key button that makes the selection"}),navigateText:(0,l.I)({id:"theme.SearchModal.footer.navigateText",message:"to navigate",description:"The explanatory text of the action for the Arrow up and Arrow down key"}),navigateUpKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateUpKeyAriaLabel",message:"Arrow up",description:"The ARIA label for the Arrow up key button that makes the navigation"}),navigateDownKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.navigateDownKeyAriaLabel",message:"Arrow down",description:"The ARIA label for the Arrow down key button that makes the navigation"}),closeText:(0,l.I)({id:"theme.SearchModal.footer.closeText",message:"to close",description:"The explanatory text of the action for Escape key"}),closeKeyAriaLabel:(0,l.I)({id:"theme.SearchModal.footer.closeKeyAriaLabel",message:"Escape key",description:"The ARIA label for the Escape key button that close the modal"}),searchByText:(0,l.I)({id:"theme.SearchModal.footer.searchByText",message:"Search by",description:"The text explain that the search is making by Algolia"})},noResultsScreen:{noResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.noResultsText",message:"No results for",description:"The text explains that there are no results for the following search"}),suggestedQueryText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.suggestedQueryText",message:"Try searching for",description:"The text for the suggested query when no results are found for the following search"}),reportMissingResultsText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsText",message:"Believe this query should return results?",description:"The text for the question where the user thinks there are missing results"}),reportMissingResultsLinkText:(0,l.I)({id:"theme.SearchModal.noResultsScreen.reportMissingResultsLinkText",message:"Let us know.",description:"The text for the link to report missing results"})}},placeholder:(0,l.I)({id:"theme.SearchModal.placeholder",message:"Search docs",description:"The placeholder of the input of the DocSearch pop-up modal"})};let Pe=null;function Ie(e){let{hit:t,children:n}=e;return(0,u.jsx)(Q.Z,{to:t.url,children:n})}function Re(e){let{state:t,onClose:n}=e;const r=(0,Ae.M)();return(0,u.jsx)(Q.Z,{to:r(t.query),onClick:n,children:(0,u.jsx)(l.Z,{id:"theme.SearchBar.seeAll",values:{count:t.context.nbHits},children:"See all {count} results"})})}function Oe(e){let{contextualSearch:t,externalUrlRegex:a,...o}=e;const{siteMetadata:i}=(0,le.Z)(),l=(0,je.l)(),c=function(){const{locale:e,tags:t}=(0,Ne._q)();return[`language:${e}`,t.map((e=>`docusaurus_tag:${e}`))]}(),d=o.searchParameters?.facetFilters??[],p=t?function(e,t){const n=e=>"string"==typeof e?[e]:e;return[...n(e),...n(t)]}(c,d):d,f={...o.searchParameters,facetFilters:p},g=(0,s.k6)(),h=(0,r.useRef)(null),m=(0,r.useRef)(null),[b,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)(void 0),k=(0,r.useCallback)((()=>Pe?Promise.resolve():Promise.all([n.e(1426).then(n.bind(n,61426)),Promise.all([n.e(532),n.e(6945)]).then(n.bind(n,46945)),Promise.all([n.e(532),n.e(8894)]).then(n.bind(n,18894))]).then((e=>{let[{DocSearchModal:t}]=e;Pe=t}))),[]),x=(0,r.useCallback)((()=>{k().then((()=>{h.current=document.createElement("div"),document.body.insertBefore(h.current,document.body.firstChild),y(!0)}))}),[k,y]),S=(0,r.useCallback)((()=>{y(!1),h.current?.remove()}),[y]),_=(0,r.useCallback)((e=>{k().then((()=>{y(!0),w(e.key)}))}),[k,y,w]),E=(0,r.useRef)({navigate(e){let{itemUrl:t}=e;(0,ee.F)(a,t)?window.location.href=t:g.push(t)}}).current,C=(0,r.useRef)((e=>o.transformItems?o.transformItems(e):e.map((e=>({...e,url:l(e.url)}))))).current,T=(0,r.useMemo)((()=>e=>(0,u.jsx)(Re,{...e,onClose:S})),[S]),A=(0,r.useCallback)((e=>(e.addAlgoliaAgent("docusaurus",i.docusaurusVersion),e)),[i.docusaurusVersion]);return function(e){var t=e.isOpen,n=e.onOpen,a=e.onClose,o=e.onInput,i=e.searchButtonRef;r.useEffect((function(){function e(e){var r;(27===e.keyCode&&t||"k"===(null===(r=e.key)||void 0===r?void 0:r.toLowerCase())&&(e.metaKey||e.ctrlKey)||!function(e){var t=e.target,n=t.tagName;return t.isContentEditable||"INPUT"===n||"SELECT"===n||"TEXTAREA"===n}(e)&&"/"===e.key&&!t)&&(e.preventDefault(),t?a():document.body.classList.contains("DocSearch--active")||document.body.classList.contains("DocSearch--active")||n()),i&&i.current===document.activeElement&&o&&/[a-zA-Z0-9]/.test(String.fromCharCode(e.keyCode))&&o(e)}return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}),[t,n,a,o,i])}({isOpen:b,onOpen:x,onClose:S,onInput:_,searchButtonRef:m}),(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(Te.Z,{children:(0,u.jsx)("link",{rel:"preconnect",href:`https://${o.appId}-dsn.algolia.net`,crossOrigin:"anonymous"})}),(0,u.jsx)(Ce,{onTouchStart:k,onFocus:k,onMouseOver:k,onClick:x,ref:m,translations:Le.button}),b&&Pe&&h.current&&(0,be.createPortal)((0,u.jsx)(Pe,{onClose:S,initialScrollY:window.scrollY,initialQuery:v,navigator:E,transformItems:C,hitComponent:Ie,transformSearchClient:A,...o.searchPagePath&&{resultsFooterComponent:T},...o,searchParameters:f,placeholder:Le.placeholder,translations:Le.modal}),h.current)]})}function Fe(){const{siteConfig:e}=(0,le.Z)();return(0,u.jsx)(Oe,{...e.themeConfig.algolia})}const Me={navbarSearchContainer:"navbarSearchContainer_Bca1"};function De(e){let{children:t,className:n}=e;return(0,u.jsx)("div",{className:(0,a.Z)(n,Me.navbarSearchContainer),children:t})}var Be=n(80143),ze=n(53438);var $e=n(60373);const Ue=e=>e.docs.find((t=>t.id===e.mainDocId));const Ze={default:oe,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:r,queryString:a="",...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,ge.l)(),{search:f,hash:g}=(0,s.TH)(),h=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${g}${a}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...r],m=t?(0,l.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return(0,u.jsx)(fe,{...o,mobile:t,label:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(he,{className:me}),m]}),items:h})},search:function(e){let{mobile:t,className:n}=e;return t?null:(0,u.jsx)(De,{className:n,children:(0,u.jsx)(Fe,{})})},dropdown:fe,html:function(e){let{value:t,className:n,mobile:r=!1,isDropdownItem:o=!1}=e;const i=o?"li":"div";return(0,u.jsx)(i,{className:(0,a.Z)({navbar__item:!r&&!o,"menu__list-item":r},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,Be.Iw)(r),i=(0,ze.vY)(t,r),s=o?.path===i?.path;return null===i||i.unlisted&&!s?null:(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>s||!!o?.sidebar&&o.sidebar===i.sidebar,label:n??i.id,to:i.path})},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:r,...a}=e;const{activeDoc:o}=(0,Be.Iw)(r),i=(0,ze.oz)(t,r).link;if(!i)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return(0,u.jsx)(oe,{exact:!0,...a,isActive:()=>o?.sidebar===t,label:n??i.label,to:i.path})},docsVersion:function(e){let{label:t,to:n,docsPluginId:r,...a}=e;const o=(0,ze.lO)(r)[0],i=t??o.label,s=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(o).path;return(0,u.jsx)(oe,{...a,label:i,to:s})},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:r,dropdownItemsBefore:a,dropdownItemsAfter:o,...i}=e;const{search:c,hash:d}=(0,s.TH)(),p=(0,Be.Iw)(n),f=(0,Be.gB)(n),{savePreferredVersionName:g}=(0,$e.J)(n),h=[...a,...f.map((e=>{const t=p.alternateDocVersions[e.name]??Ue(e);return{label:e.label,to:`${t.path}${c}${d}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...o],m=(0,ze.lO)(n)[0],b=t&&h.length>1?(0,l.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):m.label,y=t&&h.length>1?void 0:Ue(m).path;return h.length<=1?(0,u.jsx)(oe,{...i,mobile:t,label:b,to:y,isActive:r?()=>!1:void 0}):(0,u.jsx)(fe,{...i,mobile:t,label:b,to:y,items:h,isActive:r?()=>!1:void 0})}};function He(e){let{type:t,...n}=e;const r=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=Ze[r];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return(0,u.jsx)(a,{...n})}function Ve(){const e=(0,j.e)(),t=(0,w.L)().navbar.items;return(0,u.jsx)("ul",{className:"menu__list",children:t.map(((t,n)=>(0,r.createElement)(He,{mobile:!0,...t,onClick:()=>e.toggle(),key:n})))})}function We(e){return(0,u.jsx)("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back",children:(0,u.jsx)(l.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)",children:"\u2190 Back to main menu"})})}function Ge(){const e=0===(0,w.L)().navbar.items.length,t=F();return(0,u.jsxs)(u.Fragment,{children:[!e&&(0,u.jsx)(We,{onClick:()=>t.hide()}),t.content]})}function qe(){const e=(0,j.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?(0,u.jsx)(M,{header:(0,u.jsx)(Y,{}),primaryMenu:(0,u.jsx)(Ve,{}),secondaryMenu:(0,u.jsx)(Ge,{})}):null}const Ke={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Ye(e){return(0,u.jsx)("div",{role:"presentation",...e,className:(0,a.Z)("navbar-sidebar__backdrop",e.className)})}function Qe(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,w.L)(),i=(0,j.e)(),{navbarRef:s,isNavbarVisible:d}=function(e){const[t,n]=(0,r.useState)(e),a=(0,r.useRef)(!1),o=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,N.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(a.current)return void(a.current=!1);const s=r?.scrollY,l=document.documentElement.scrollHeight-o.current,c=window.innerHeight;s&&i>=s?n(!1):i+c<l&&n(!0)})),(0,c.S)((t=>{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return a.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return(0,u.jsxs)("nav",{ref:s,"aria-label":(0,l.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[Ke.navbarHideable,!d&&Ke.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown}),children:[t,(0,u.jsx)(Ye,{onClick:i.toggle}),(0,u.jsx)(qe,{})]})}var Xe=n(69690);const Je="right";function et(e){let{width:t=30,height:n=30,className:r,...a}=e;return(0,u.jsx)("svg",{className:r,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true",...a,children:(0,u.jsx)("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"})})}function tt(){const{toggle:e,shown:t}=(0,j.e)();return(0,u.jsx)("button",{onClick:e,"aria-label":(0,l.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button",children:(0,u.jsx)(et,{})})}const nt={colorModeToggle:"colorModeToggle_DEke"};function rt(e){let{items:t}=e;return(0,u.jsx)(u.Fragment,{children:t.map(((e,t)=>(0,u.jsx)(Xe.QW,{onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t}),children:(0,u.jsx)(He,{...e})},t)))})}function at(e){let{left:t,right:n}=e;return(0,u.jsxs)("div",{className:"navbar__inner",children:[(0,u.jsx)("div",{className:"navbar__items",children:t}),(0,u.jsx)("div",{className:"navbar__items navbar__items--right",children:n})]})}function ot(){const e=(0,j.e)(),t=(0,w.L)().navbar.items,[n,r]=function(e){function t(e){return"left"===(e.position??Je)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return(0,u.jsx)(at,{left:(0,u.jsxs)(u.Fragment,{children:[!e.disabled&&(0,u.jsx)(tt,{}),(0,u.jsx)(q,{}),(0,u.jsx)(rt,{items:n})]}),right:(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(rt,{items:r}),(0,u.jsx)(W,{className:nt.colorModeToggle}),!a&&(0,u.jsx)(De,{children:(0,u.jsx)(Fe,{})})]})})}function it(){return(0,u.jsx)(Qe,{children:(0,u.jsx)(ot,{})})}function st(e){let{item:t}=e;const{to:n,href:r,label:a,prependBaseUrlToHref:o,...i}=t,s=(0,X.Z)(n),l=(0,X.Z)(r,{forcePrependBaseUrl:!0});return(0,u.jsxs)(Q.Z,{className:"footer__link-item",...r?{href:o?l:r}:{to:s},...i,children:[a,r&&!(0,J.Z)(r)&&(0,u.jsx)(te.Z,{})]})}function lt(e){let{item:t}=e;return t.html?(0,u.jsx)("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)("li",{className:"footer__item",children:(0,u.jsx)(st,{item:t})},t.href??t.to)}function ct(e){let{column:t}=e;return(0,u.jsxs)("div",{className:"col footer__col",children:[(0,u.jsx)("div",{className:"footer__title",children:t.title}),(0,u.jsx)("ul",{className:"footer__items clean-list",children:t.items.map(((e,t)=>(0,u.jsx)(lt,{item:e},t)))})]})}function ut(e){let{columns:t}=e;return(0,u.jsx)("div",{className:"row footer__links",children:t.map(((e,t)=>(0,u.jsx)(ct,{column:e},t)))})}function dt(){return(0,u.jsx)("span",{className:"footer__link-separator",children:"\xb7"})}function pt(e){let{item:t}=e;return t.html?(0,u.jsx)("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):(0,u.jsx)(st,{item:t})}function ft(e){let{links:t}=e;return(0,u.jsx)("div",{className:"footer__links text--center",children:(0,u.jsx)("div",{className:"footer__links",children:t.map(((e,n)=>(0,u.jsxs)(r.Fragment,{children:[(0,u.jsx)(pt,{item:e}),t.length!==n+1&&(0,u.jsx)(dt,{})]},n)))})})}function gt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?(0,u.jsx)(ut,{columns:t}):(0,u.jsx)(ft,{links:t})}var ht=n(19965);const mt={footerLogoLink:"footerLogoLink_BH7S"};function bt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),r={light:n(t.src),dark:n(t.srcDark??t.src)};return(0,u.jsx)(ht.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:r,width:t.width,height:t.height,style:t.style})}function yt(e){let{logo:t}=e;return t.href?(0,u.jsx)(Q.Z,{href:t.href,className:mt.footerLogoLink,target:t.target,children:(0,u.jsx)(bt,{logo:t})}):(0,u.jsx)(bt,{logo:t})}function vt(e){let{copyright:t}=e;return(0,u.jsx)("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function wt(e){let{style:t,links:n,logo:r,copyright:o}=e;return(0,u.jsx)("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t}),children:(0,u.jsxs)("div",{className:"container container-fluid",children:[n,(r||o)&&(0,u.jsxs)("div",{className:"footer__bottom text--center",children:[r&&(0,u.jsx)("div",{className:"margin-bottom--sm",children:r}),o]})]})})}function kt(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:r,style:a}=e;return(0,u.jsx)(wt,{style:a,links:n&&n.length>0&&(0,u.jsx)(gt,{links:n}),logo:r&&(0,u.jsx)(yt,{logo:r}),copyright:t&&(0,u.jsx)(vt,{copyright:t})})}const xt=r.memo(kt),St=(0,L.Qc)([D.S,k.pl,N.OC,$e.L5,i.VC,function(e){let{children:t}=e;return(0,u.jsx)(P.n2,{children:(0,u.jsx)(j.M,{children:(0,u.jsx)(R,{children:t})})})}]);function _t(e){let{children:t}=e;return(0,u.jsx)(St,{children:t})}var Et=n(92503);function Ct(e){let{error:t,tryAgain:n}=e;return(0,u.jsx)("main",{className:"container margin-vert--xl",children:(0,u.jsx)("div",{className:"row",children:(0,u.jsxs)("div",{className:"col col--6 col--offset-3",children:[(0,u.jsx)(Et.Z,{as:"h1",className:"hero__title",children:(0,u.jsx)(l.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed",children:"This page crashed."})}),(0,u.jsx)("div",{className:"margin-vert--lg",children:(0,u.jsx)(Xe.Cw,{onClick:n,className:"button button--primary shadow--lw"})}),(0,u.jsx)("hr",{}),(0,u.jsx)("div",{className:"margin-vert--md",children:(0,u.jsx)(Xe.aG,{error:t})})]})})})}const Tt={mainWrapper:"mainWrapper_z2l0"};function At(e){const{children:t,noFooter:n,wrapperClassName:r,title:s,description:l}=e;return(0,b.t)(),(0,u.jsxs)(_t,{children:[(0,u.jsx)(i.d,{title:s,description:l}),(0,u.jsx)(v,{}),(0,u.jsx)(A,{}),(0,u.jsx)(it,{}),(0,u.jsx)("div",{id:d,className:(0,a.Z)(m.k.wrapper.main,Tt.mainWrapper,r),children:(0,u.jsx)(o.Z,{fallback:e=>(0,u.jsx)(Ct,{...e}),children:t})}),!n&&(0,u.jsx)(xt,{})]})}},21327:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});n(67294);var r=n(33692),a=n(44996),o=n(52263),i=n(86668),s=n(19965),l=n(85893);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const o={light:(0,a.Z)(t.src),dark:(0,a.Z)(t.srcDark||t.src)},i=(0,l.jsx)(s.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return r?(0,l.jsx)("div",{className:r,children:i}):i}function u(e){const{siteConfig:{title:t}}=(0,o.Z)(),{navbar:{title:n,logo:s}}=(0,i.L)(),{imageClassName:u,titleClassName:d,...p}=e,f=(0,a.Z)(s?.href||"/"),g=n?"":t,h=s?.alt??g;return(0,l.jsxs)(r.Z,{to:f,...p,...s?.target&&{target:s.target},children:[s&&(0,l.jsx)(c,{logo:s,alt:h,imageClassName:u}),null!=n&&(0,l.jsx)("b",{className:d,children:n})]})}},90197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});n(67294);var r=n(35742),a=n(85893);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return(0,a.jsxs)(r.Z,{children:[t&&(0,a.jsx)("meta",{name:"docusaurus_locale",content:t}),n&&(0,a.jsx)("meta",{name:"docusaurus_version",content:n}),o&&(0,a.jsx)("meta",{name:"docusaurus_tag",content:o}),i&&(0,a.jsx)("meta",{name:"docsearch:language",content:i}),n&&(0,a.jsx)("meta",{name:"docsearch:version",content:n}),o&&(0,a.jsx)("meta",{name:"docsearch:docusaurus_tag",content:o})]})}},19965:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(67294),a=n(788),o=n(72389),i=n(92949);const s={themedComponent:"themedComponent_mlkZ","themedComponent--light":"themedComponent--light_NVdE","themedComponent--dark":"themedComponent--dark_xIcU"};var l=n(85893);function c(e){let{className:t,children:n}=e;const c=(0,o.Z)(),{colorMode:u}=(0,i.I)();return(0,l.jsx)(l.Fragment,{children:(c?"dark"===u?["dark"]:["light"]:["light","dark"]).map((e=>{const o=n({theme:e,className:(0,a.Z)(t,s.themedComponent,s[`themedComponent--${e}`])});return(0,l.jsx)(r.Fragment,{children:o},e)}))})}function u(e){const{sources:t,className:n,alt:r,...a}=e;return(0,l.jsx)(c,{className:n,children:e=>{let{theme:n,className:o}=e;return(0,l.jsx)("img",{src:t[n],alt:r,className:o,...a})}})}},86043:(e,t,n)=>{"use strict";n.d(t,{u:()=>c,z:()=>b});var r=n(67294),a=n(10412),o=n(20469),i=n(91442),s=n(85893);const l="ease-in-out";function c(e){let{initialState:t}=e;const[n,a]=(0,r.useState)(t??!1),o=(0,r.useCallback)((()=>{a((e=>!e))}),[]);return{collapsed:n,setCollapsed:a,toggleCollapsed:o}}const u={display:"none",overflow:"hidden",height:"0px"},d={display:"block",overflow:"visible",height:"auto"};function p(e,t){const n=t?u:d;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function f(e){let{collapsibleRef:t,collapsed:n,animation:a}=e;const o=(0,r.useRef)(!1);(0,r.useEffect)((()=>{const e=t.current;function r(){const t=e.scrollHeight,n=a?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${a?.easing??l}`,height:`${t}px`}}function s(){const t=r();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return p(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(s(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{s()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,a])}function g(e){if(!a.Z.canUseDOM)return e?u:d}function h(e){let{as:t="div",collapsed:n,children:a,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:c}=e;const u=(0,r.useRef)(null);return f({collapsibleRef:u,collapsed:n,animation:o}),(0,s.jsx)(t,{ref:u,style:c?void 0:g(n),onTransitionEnd:e=>{"height"===e.propertyName&&(p(u.current,n),i?.(n))},className:l,children:a})}function m(e){let{collapsed:t,...n}=e;const[a,i]=(0,r.useState)(!t),[l,c]=(0,r.useState)(t);return(0,o.Z)((()=>{t||i(!0)}),[t]),(0,o.Z)((()=>{a&&c(t)}),[a,t]),a?(0,s.jsx)(h,{...n,collapsed:l}):null}function b(e){let{lazy:t,...n}=e;const r=t?m:h;return(0,s.jsx)(r,{...n})}},59689:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>g});var r=n(67294),a=n(72389),o=n(50012),i=n(902),s=n(86668),l=n(85893);const c=(0,o.WA)("docusaurus.announcement.dismiss"),u=(0,o.WA)("docusaurus.announcement.id"),d=()=>"true"===c.get(),p=e=>c.set(String(e)),f=r.createContext(null);function g(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,a.Z)(),[n,o]=(0,r.useState)((()=>!!t&&d()));(0,r.useEffect)((()=>{o(d())}),[]);const i=(0,r.useCallback)((()=>{p(!0),o(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&p(!1),!r&&d()||o(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return(0,l.jsx)(f.Provider,{value:n,children:t})}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},92949:(e,t,n)=>{"use strict";n.d(t,{I:()=>b,S:()=>m});var r=n(67294),a=n(10412),o=n(902),i=n(50012),s=n(86668),l=n(85893);const c=r.createContext(void 0),u="theme",d=(0,i.WA)(u),p={light:"light",dark:"dark"},f=e=>e===p.dark?p.dark:p.light,g=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),h=e=>{d.set(f(e))};function m(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[a,o]=(0,r.useState)(g(e));(0,r.useEffect)((()=>{t&&d.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&h(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?p.dark:p.light:e),d.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=d.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:i,get isDarkTheme(){return a===p.dark},setLightTheme(){i(p.light)},setDarkTheme(){i(p.dark)}})),[a,i])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function b(){const e=(0,r.useContext)(c);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},60373:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>b,Oh:()=>w});var r=n(67294),a=n(80143),o=n(29935),i=n(86668),s=n(53438),l=n(902),c=n(50012),u=n(85893);const d=e=>`docs-preferred-version-${e}`,p={save:(e,t,n)=>{(0,c.WA)(d(e),{persistence:t}).set(n)},read:(e,t)=>(0,c.WA)(d(e),{persistence:t}).get(),clear:(e,t)=>{(0,c.WA)(d(e),{persistence:t}).del()}},f=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const g=r.createContext(null);function h(){const e=(0,a._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[o,s]=(0,r.useState)((()=>f(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=p.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[o,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){p.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function m(e){let{children:t}=e;const n=h();return(0,u.jsx)(g.Provider,{value:n,children:t})}function b(e){let{children:t}=e;return s.cE?(0,u.jsx)(m,{children:t}):(0,u.jsx)(u.Fragment,{children:t})}function y(){const e=(0,r.useContext)(g);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=o.m);const t=(0,a.zh)(e),[n,i]=y(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,a._r)(),[t]=y();function n(n){const r=e[n],{preferredVersionName:a}=t[n];return r.versions.find((e=>e.name===a))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},1116:(e,t,n)=>{"use strict";n.d(t,{V:()=>c,b:()=>l});var r=n(67294),a=n(902),o=n(85893);const i=Symbol("EmptyContext"),s=r.createContext(i);function l(e){let{children:t,name:n,items:a}=e;const i=(0,r.useMemo)((()=>n&&a?{name:n,items:a}:null),[n,a]);return(0,o.jsx)(s.Provider,{value:i,children:t})}function c(){const e=(0,r.useContext)(s);if(e===i)throw new a.i6("DocsSidebarProvider");return e}},74477:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>s});var r=n(67294),a=n(902),o=n(85893);const i=r.createContext(null);function s(e){let{children:t,version:n}=e;return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(null===e)throw new a.i6("DocsVersionProvider");return e}},93163:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(67294),a=n(13102),o=n(87524),i=n(91980),s=n(86668),l=n(902),c=n(85893);const u=r.createContext(void 0);function d(){const e=function(){const e=(0,a.HY)(),{items:t}=(0,s.L)().navbar;return 0===t.length&&!e.component}(),t=(0,o.i)(),n=!e&&"mobile"===t,[l,c]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(l)return c(!1),!1}));const u=(0,r.useCallback)((()=>{c((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&c(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:u,shown:l})),[e,n,u,l])}function p(e){let{children:t}=e;const n=d();return(0,c.jsx)(u.Provider,{value:n,children:t})}function f(){const e=r.useContext(u);if(void 0===e)throw new l.i6("NavbarMobileSidebarProvider");return e}},13102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>c,n2:()=>s});var r=n(67294),a=n(902),o=n(85893);const i=r.createContext(null);function s(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return(0,o.jsx)(i.Provider,{value:n,children:t})}function l(){const e=(0,r.useContext)(i);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function c(e){let{component:t,props:n}=e;const o=(0,r.useContext)(i);if(!o)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,s]=o,l=(0,a.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},19727:(e,t,n)=>{"use strict";n.d(t,{h:()=>a,t:()=>o});var r=n(67294);const a="navigation-with-keyboard";function o(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(a),"mousedown"===e.type&&document.body.classList.remove(a)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(a),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},66177:(e,t,n)=>{"use strict";n.d(t,{K:()=>s,M:()=>l});var r=n(67294),a=n(52263),o=n(91980);const i="q";function s(){return(0,o.Nc)(i)}function l(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,a.Z)(),{algolia:{searchPagePath:n}}=t;return(0,r.useCallback)((t=>`${e}${n}?${i}=${encodeURIComponent(t)}`),[e,n])}},87524:(e,t,n)=>{"use strict";n.d(t,{i:()=>s});var r=n(67294),a=n(10412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(e){let{desktopBreakpoint:t=i}=void 0===e?{}:e;const[n,s]=(0,r.useState)((()=>"ssr"));return(0,r.useEffect)((()=>{function e(){s(function(e){if(!a.Z.canUseDOM)throw new Error("getWindowSize() should only be called after React hydration");return window.innerWidth>e?o.desktop:o.mobile}(t))}return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}}),[t]),n}},35281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",unlistedBanner:"theme-unlisted-banner",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},91442:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},53438:(e,t,n)=>{"use strict";n.d(t,{LM:()=>g,MN:()=>T,SN:()=>C,_F:()=>y,cE:()=>p,f:()=>w,jA:()=>h,lO:()=>S,oz:()=>_,s1:()=>x,vY:()=>E,xz:()=>f});var r=n(67294),a=n(16550),o=n(18790),i=n(80143),s=n(60373),l=n(74477),c=n(1116),u=n(67392),d=n(48596);const p=!!i._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function g(e){return"link"!==e.type||e.unlisted?"category"===e.type?function(e){if(e.href&&!e.linkUnlisted)return e.href;for(const t of e.items){const e=g(t);if(e)return e}}(e):void 0:e.href}function h(){const{pathname:e}=(0,a.TH)(),t=(0,c.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=k({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const m=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>y(e,t)));function y(e,t){return"link"===e.type?m(e.href,t):"category"===e.type&&(m(e.href,t)||b(e.items,t))}function v(e,t){switch(e.type){case"category":return y(e,t)||e.items.some((e=>v(e,t)));case"link":return!e.unlisted||y(e,t);default:return!0}}function w(e,t){return(0,r.useMemo)((()=>e.filter((e=>v(e,t)))),[e,t])}function k(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const a=[];return function e(t){for(const o of t)if("category"===o.type&&((0,d.Mg)(o.href,n)||e(o.items))||"link"===o.type&&(0,d.Mg)(o.href,n)){return r&&"category"!==o.type||a.unshift(o),!0}return!1}(t),a}function x(){const e=(0,c.V)(),{pathname:t}=(0,a.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?k({sidebarItems:e.items,pathname:t}):null}function S(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),a=(0,i.yW)(e);return(0,r.useMemo)((()=>(0,u.j)([t,n,a].filter(Boolean))),[t,n,a])}function _(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function E(e,t){const n=S(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,u.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function C(e){let{route:t}=e;const n=(0,a.TH)(),r=(0,l.E)(),i=t.routes,s=i.find((e=>(0,a.LX)(n.pathname,e)));if(!s)return null;const c=s.sidebar,u=c?r.docsSidebars[c]:void 0;return{docElement:(0,o.H)(i),sidebarName:c,sidebarItems:u}}function T(e){return e.filter((e=>!("category"===e.type||"link"===e.type)||!!g(e)))}},69690:(e,t,n)=>{"use strict";n.d(t,{aG:()=>u,Ac:()=>c,Cw:()=>l,QW:()=>d});var r=n(67294),a=n(95999),o=n(18780);const i={errorBoundaryError:"errorBoundaryError_a6uf",errorBoundaryFallback:"errorBoundaryFallback_VBag"};var s=n(85893);function l(e){return(0,s.jsx)("button",{type:"button",...e,children:(0,s.jsx)(a.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error",children:"Try again"})})}function c(e){let{error:t,tryAgain:n}=e;return(0,s.jsxs)("div",{className:i.errorBoundaryFallback,children:[(0,s.jsx)("p",{children:t.message}),(0,s.jsx)(l,{onClick:n})]})}function u(e){let{error:t}=e;const n=(0,o.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return(0,s.jsx)("p",{className:i.errorBoundaryError,children:n})}class d extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},82128:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(52263);function a(e){const{siteConfig:t}=(0,r.Z)(),{title:n,titleDelimiter:a}=t;return e?.trim().length?`${e.trim()} ${a} ${n}`:n}},91980:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>l,Rb:()=>i,_X:()=>s});var r=n(67294),a=n(16550),o=n(902);function i(e){!function(e){const t=(0,a.k6)(),n=(0,o.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){return function(e){const t=(0,a.k6)();return(0,r.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function l(e){const t=s(e)??"",n=function(){const e=(0,a.k6)();return(0,r.useCallback)(((t,n,r)=>{const a=new URLSearchParams(e.location.search);n?a.set(t,n):a.delete(t),(r?.push?e.push:e.replace)({search:a.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},67392:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function a(e){return Array.from(new Set(e))}n.d(t,{j:()=>a,l:()=>r})},10833:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>d,VC:()=>g});var r=n(67294),a=n(788),o=n(35742),i=n(30226);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(44996),c=n(82128),u=n(85893);function d(e){let{title:t,description:n,keywords:r,image:a,children:i}=e;const s=(0,c.p)(t),{withBaseUrl:d}=(0,l.C)(),p=a?d(a,{absolute:!0}):void 0;return(0,u.jsxs)(o.Z,{children:[t&&(0,u.jsx)("title",{children:s}),t&&(0,u.jsx)("meta",{property:"og:title",content:s}),n&&(0,u.jsx)("meta",{name:"description",content:n}),n&&(0,u.jsx)("meta",{property:"og:description",content:n}),r&&(0,u.jsx)("meta",{name:"keywords",content:Array.isArray(r)?r.join(","):r}),p&&(0,u.jsx)("meta",{property:"og:image",content:p}),p&&(0,u.jsx)("meta",{name:"twitter:image",content:p}),i]})}const p=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(p),s=(0,a.Z)(i,t);return(0,u.jsxs)(p.Provider,{value:s,children:[(0,u.jsx)(o.Z,{children:(0,u.jsx)("html",{className:s})}),n]})}function g(e){let{children:t}=e;const n=s(),r=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const o=`plugin-id-${n.plugin.id}`;return(0,u.jsx)(f,{className:(0,a.Z)(r,o),children:t})}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>s,Qc:()=>u,Ql:()=>c,i6:()=>l,zX:()=>i});var r=n(67294),a=n(20469),o=n(85893);function i(e){const t=(0,r.useRef)(e);return(0,a.Z)((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function s(e){const t=(0,r.useRef)();return(0,a.Z)((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function c(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return(0,o.jsx)(o.Fragment,{children:e.reduceRight(((e,t)=>(0,o.jsx)(t,{children:e})),n)})}}},98022:(e,t,n)=>{"use strict";function r(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}n.d(t,{F:()=>r})},48596:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(67294),a=n(723),o=n(52263);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,o.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function a(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(a).flatMap((e=>e.routes??[])))}(n)}({routes:a.Z,baseUrl:e})),[e])}},12466:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>h,OC:()=>u,RF:()=>f,o5:()=>g});var r=n(67294),a=n(10412),o=n(72389),i=n(20469),s=n(902),l=n(85893);const c=r.createContext(void 0);function u(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return(0,l.jsx)(c.Provider,{value:n,children:t})}function d(){const e=(0,r.useContext)(c);if(null==e)throw new s.i6("ScrollControllerProvider");return e}const p=()=>a.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function f(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=d(),a=(0,r.useRef)(p()),o=(0,s.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=p();o(e,a.current),a.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[o,n,...t])}function g(){const e=d(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),a=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,i.Z)((()=>{queueMicrotask((()=>n.current?.()))})),{blockElementScrollPositionUntilNextRender:a}}function h(){const e=(0,r.useRef)(null),t=(0,o.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const a=document.documentElement.scrollTop;(n&&a>e||!n&&a<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(a-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},43320:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>l,os:()=>s});var r=n(80143),a=n(52263),o=n(60373);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,a.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,o.Oh)();const c=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,a=l[e],o=t[e].versions.find((e=>e.isLast));return s(e,(r??a??o).name)}))];return{locale:e.currentLocale,tags:c}}},50012:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>u,WA:()=>c});var r=n(67294);const a="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:a}=e;if(n===r)return;const o=document.createEvent("StorageEvent");o.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,a),window.dispatchEvent(o)}function i(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=i(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function u(e,t){const n=(0,r.useRef)((()=>null===e?l:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,r.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}},94711:(e,t,n)=>{"use strict";n.d(t,{l:()=>i});var r=n(52263),a=n(16550),o=n(18780);function i(){const{siteConfig:{baseUrl:e,url:t,trailingSlash:n},i18n:{defaultLocale:i,currentLocale:s}}=(0,r.Z)(),{pathname:l}=(0,a.TH)(),c=(0,o.applyTrailingSlash)(l,{trailingSlash:n,baseUrl:e}),u=s===i?e:e.replace(`/${s}/`,"/"),d=c.replace(e,"");return{createUrl:function(e){let{locale:n,fullyQualified:r}=e;return`${r?t:""}${function(e){return e===i?`${u}`:`${u}${e}/`}(n)}${d}`}}}},85936:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),a=n(16550),o=n(902);function i(e){const t=(0,a.TH)(),n=(0,o.D9)(t),i=(0,o.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},86668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){return(0,r.Z)().siteConfig.themeConfig}},6278:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(52263);function a(){const{siteConfig:{themeConfig:e}}=(0,r.Z)();return e}},239:(e,t,n)=>{"use strict";n.d(t,{l:()=>s});var r=n(67294),a=n(98022),o=n(44996),i=n(6278);function s(){const{withBaseUrl:e}=(0,o.C)(),{algolia:{externalUrlRegex:t,replaceSearchResultPathname:n}}=(0,i.L)();return(0,r.useCallback)((r=>{const o=new URL(r);if((0,a.F)(t,o.href))return r;const i=`${o.pathname+o.hash}`;return e(function(e,t){return t?e.replaceAll(new RegExp(t.from,"g"),t.to):e}(i,n))}),[e,t,n])}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},54143:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},18780:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}});var o=n(54143);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return o.getErrorCausalChain}})},99318:(e,t,n)=>{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>f,PP:()=>A,Ep:()=>p});var r=n(87462);function a(e){return"/"===e.charAt(0)}function o(e,t){for(var n=t,r=n+1,a=e.length;r<a;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],s=e&&a(e),l=t&&a(t),c=s||l;if(e&&a(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var u=i[i.length-1];n="."===u||".."===u||""===u}else n=!1;for(var d=0,p=i.length;p>=0;p--){var f=i[p];"."===f?o(i,p):".."===f?(o(i,p),d++):d&&(o(i,p),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&a(i[0])||i.unshift("");var g=i.join("/");return n&&"/"!==g.substr(-1)&&(g+="/"),g};var s=n(38776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function c(e){return"/"===e.charAt(0)?e.substr(1):e}function u(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,a=t||"/";return n&&"?"!==n&&(a+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(a+="#"===r.charAt(0)?r:"#"+r),a}function f(e,t,n,a){var o;"string"==typeof e?(o=function(e){var t=e||"/",n="",r="",a=t.indexOf("#");-1!==a&&(r=t.substr(a),t=t.substr(0,a));var o=t.indexOf("?");return-1!==o&&(n=t.substr(o),t=t.substr(0,o)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),o.state=t):(void 0===(o=(0,r.Z)({},e)).pathname&&(o.pathname=""),o.search?"?"!==o.search.charAt(0)&&(o.search="?"+o.search):o.search="",o.hash?"#"!==o.hash.charAt(0)&&(o.hash="#"+o.hash):o.hash="",void 0!==t&&void 0===o.state&&(o.state=t));try{o.pathname=decodeURI(o.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(o.key=n),a?o.pathname?"/"!==o.pathname.charAt(0)&&(o.pathname=i(o.pathname,a.pathname)):o.pathname=a.pathname:o.pathname||(o.pathname="/"),o}function g(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,a){if(null!=e){var o="function"==typeof e?e(t,n):e;"string"==typeof o?"function"==typeof r?r(o,a):a(!0):a(!1!==o)}else a(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var h=!("undefined"==typeof window||!window.document||!window.document.createElement);function m(e,t){t(window.confirm(e))}var b="popstate",y="hashchange";function v(){try{return window.history.state||{}}catch(e){return{}}}function w(e){void 0===e&&(e={}),h||(0,s.Z)(!1);var t,n=window.history,a=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,o=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,c=i.forceRefresh,w=void 0!==c&&c,k=i.getUserConfirmation,x=void 0===k?m:k,S=i.keyLength,_=void 0===S?6:S,E=e.basename?d(l(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,a=window.location,o=a.pathname+a.search+a.hash;return E&&(o=u(o,E)),f(o,r,n)}function T(){return Math.random().toString(36).substr(2,_)}var A=g();function j(e){(0,r.Z)($,e),$.length=n.length,A.notifyListeners($.location,$.action)}function N(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||I(C(e.state))}function L(){I(C(v()))}var P=!1;function I(e){if(P)P=!1,j();else{A.confirmTransitionTo(e,"POP",x,(function(t){t?j({action:"POP",location:e}):function(e){var t=$.location,n=O.indexOf(t.key);-1===n&&(n=0);var r=O.indexOf(e.key);-1===r&&(r=0);var a=n-r;a&&(P=!0,M(a))}(e)}))}}var R=C(v()),O=[R.key];function F(e){return E+p(e)}function M(e){n.go(e)}var D=0;function B(e){1===(D+=e)&&1===e?(window.addEventListener(b,N),o&&window.addEventListener(y,L)):0===D&&(window.removeEventListener(b,N),o&&window.removeEventListener(y,L))}var z=!1;var $={length:n.length,action:"POP",location:R,createHref:F,push:function(e,t){var r="PUSH",o=f(e,t,T(),$.location);A.confirmTransitionTo(o,r,x,(function(e){if(e){var t=F(o),i=o.key,s=o.state;if(a)if(n.pushState({key:i,state:s},null,t),w)window.location.href=t;else{var l=O.indexOf($.location.key),c=O.slice(0,l+1);c.push(o.key),O=c,j({action:r,location:o})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,T(),$.location);A.confirmTransitionTo(o,r,x,(function(e){if(e){var t=F(o),i=o.key,s=o.state;if(a)if(n.replaceState({key:i,state:s},null,t),w)window.location.replace(t);else{var l=O.indexOf($.location.key);-1!==l&&(O[l]=o.key),j({action:r,location:o})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=A.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=A.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var k="hashchange",x={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+c(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:c,decodePath:l},slash:{encodePath:l,decodePath:l}};function S(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function _(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function E(e){window.location.replace(S(window.location.href)+"#"+e)}function C(e){void 0===e&&(e={}),h||(0,s.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),a=n.getUserConfirmation,o=void 0===a?m:a,i=n.hashType,c=void 0===i?"slash":i,b=e.basename?d(l(e.basename)):"",y=x[c],v=y.encodePath,w=y.decodePath;function C(){var e=w(_());return b&&(e=u(e,b)),f(e)}var T=g();function A(e){(0,r.Z)(z,e),z.length=t.length,T.notifyListeners(z.location,z.action)}var j=!1,N=null;function L(){var e,t,n=_(),r=v(n);if(n!==r)E(r);else{var a=C(),i=z.location;if(!j&&(t=a,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(N===p(a))return;N=null,function(e){if(j)j=!1,A();else{var t="POP";T.confirmTransitionTo(e,t,o,(function(n){n?A({action:t,location:e}):function(e){var t=z.location,n=O.lastIndexOf(p(t));-1===n&&(n=0);var r=O.lastIndexOf(p(e));-1===r&&(r=0);var a=n-r;a&&(j=!0,F(a))}(e)}))}}(a)}}var P=_(),I=v(P);P!==I&&E(I);var R=C(),O=[p(R)];function F(e){t.go(e)}var M=0;function D(e){1===(M+=e)&&1===e?window.addEventListener(k,L):0===M&&window.removeEventListener(k,L)}var B=!1;var z={length:t.length,action:"POP",location:R,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=S(window.location.href)),n+"#"+v(b+p(e))},push:function(e,t){var n="PUSH",r=f(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=v(b+t);if(_()!==a){N=t,function(e){window.location.hash=e}(a);var o=O.lastIndexOf(p(z.location)),i=O.slice(0,o+1);i.push(t),O=i,A({action:n,location:r})}else A()}}))},replace:function(e,t){var n="REPLACE",r=f(e,void 0,void 0,z.location);T.confirmTransitionTo(r,n,o,(function(e){if(e){var t=p(r),a=v(b+t);_()!==a&&(N=t,E(a));var o=O.indexOf(p(z.location));-1!==o&&(O[o]=t),A({action:n,location:r})}}))},go:F,goBack:function(){F(-1)},goForward:function(){F(1)},block:function(e){void 0===e&&(e=!1);var t=T.setPrompt(e);return B||(D(1),B=!0),function(){return B&&(B=!1,D(-1)),t()}},listen:function(e){var t=T.appendListener(e);return D(1),function(){D(-1),t()}}};return z}function T(e,t,n){return Math.min(Math.max(e,t),n)}function A(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,a=t.initialEntries,o=void 0===a?["/"]:a,i=t.initialIndex,s=void 0===i?0:i,l=t.keyLength,c=void 0===l?6:l,u=g();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,u.notifyListeners(w.location,w.action)}function h(){return Math.random().toString(36).substr(2,c)}var m=T(s,0,o.length-1),b=o.map((function(e){return f(e,void 0,"string"==typeof e?h():e.key||h())})),y=p;function v(e){var t=T(w.index+e,0,w.entries.length-1),r=w.entries[t];u.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:b.length,action:"POP",location:b[m],index:m,entries:b,createHref:y,push:function(e,t){var r="PUSH",a=f(e,t,h(),w.location);u.confirmTransitionTo(a,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,a):n.push(a),d({action:r,location:a,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",a=f(e,t,h(),w.location);u.confirmTransitionTo(a,r,n,(function(e){e&&(w.entries[w.index]=a,d({action:r,location:a}))}))},go:v,goBack:function(){v(-1)},goForward:function(){v(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),u.setPrompt(e)},listen:function(e){return u.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(59864),a={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},o={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||a}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var c=Object.defineProperty,u=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,g=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(g){var a=f(n);a&&a!==g&&e(t,a,r)}var i=u(n);d&&(i=i.concat(d(n)));for(var s=l(t),h=l(n),m=0;m<i.length;++m){var b=i[m];if(!(o[b]||r&&r[b]||h&&h[b]||s&&s[b])){var y=p(n,b);try{c(t,b,y)}catch(v){}}}}return t}},41143:e=>{"use strict";e.exports=function(e,t,n,r,a,o,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,r,a,o,i,s],u=0;(l=new Error(t.replace(/%s/g,(function(){return c[u++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},7439:(e,t,n)=>{"use strict";n.r(t)},32497:(e,t,n)=>{"use strict";n.r(t)},57800:(e,t,n)=>{"use strict";n.r(t)},74865:function(e,t,n){var r,a;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function a(e,t,n){return e<t?t:e>n?n:e}function o(e){return 100*(-1+e)}function i(e,t,n){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(e)+"%,0)"}:{"margin-left":o(e)+"%"}).transition="all "+t+"ms "+n,a}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=a(e,r.minimum,1),n.status=1===e?null:e;var o=n.render(!t),c=o.querySelector(r.barSelector),u=r.speed,d=r.easing;return o.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(c,i(e,u,d)),1===e?(l(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){l(o,{transition:"all "+u+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),u)}),u)):setTimeout(t,u)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*a(Math.random()*t,.1,.95)),t=a(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");u(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var a,i=t.querySelector(r.barSelector),s=e?"-100":o(n.status||0),c=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(a=t.querySelector(r.spinnerSelector))&&f(a),c!=document.body&&u(c,"nprogress-custom-parent"),c.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,a=e.length,o=t.charAt(0).toUpperCase()+t.slice(1);a--;)if((r=e[a]+o)in n)return r;return t}function a(e){return e=n(e),t[e]||(t[e]=r(e))}function o(e,t,n){t=a(t),e.style[t]=n}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function c(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function u(e,t){var n=p(e),r=n+t;c(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);c(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(a="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=a)},85795:()=>{Prism.languages.ada={comment:/--.*/,string:/"(?:""|[^"\r\f\n])*"/,number:[{pattern:/\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i},{pattern:/\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i}],attribute:{pattern:/\b'\w+/,alias:"attr-name"},keyword:/\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,boolean:/\b(?:false|true)\b/i,operator:/<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,punctuation:/\.\.?|[,;():]/,char:/'.'/,variable:/\b[a-z](?:\w)*\b/i}},57874:()=>{!function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?:\.\w+)*(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},parameter:{pattern:/(^|\s)-{1,2}(?:\w+:[+-]?)?\w+(?:\.\w+)*(?=[=\s]|$)/,alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cargo|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|java|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|sysctl|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","parameter","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i<a.length;i++)o[a[i]]=e.languages.bash[a[i]];e.languages.sh=e.languages.bash,e.languages.shell=e.languages.bash}(Prism)},79016:()=>{!function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,r){return RegExp(t(e,n),r||"")}function r(e,t){for(var n=0;n<t;n++)e=e.replace(/<<self>>/g,(function(){return"(?:"+e+")"}));return e.replace(/<<self>>/g,"[^\\s\\S]")}var a="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",o="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",s="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var c=l(o),u=RegExp(l(a+" "+o+" "+i+" "+s)),d=l(o+" "+i+" "+s),p=l(a+" "+o+" "+s),f=r(/<(?:[^<>;=+\-*/%&|^]|<<self>>)*>/.source,2),g=r(/\((?:[^()]|<<self>>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,m=t(/<<0>>(?:\s*<<1>>)?/.source,[h,f]),b=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,m]),y=/\[\s*(?:,\s*)*\]/.source,v=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[b,y]),w=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[f,g,y]),k=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[w]),x=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[k,b,y]),S={keyword:u,punctuation:/[<>()?,.:[\]]/},_=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,E=/"(?:\\.|[^\\"\r\n])*"/.source,C=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[C]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[E]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,x]),lookbehind:!0,inside:S},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[c,m]),lookbehind:!0,inside:S},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[b]),lookbehind:!0,inside:S},{pattern:n(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[v]),lookbehind:!0,inside:S},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[x,p,h]),inside:S}],keyword:u,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[g]),lookbehind:!0,alias:"class-name",inside:S},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[x,b]),inside:S,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[x]),lookbehind:!0,inside:S,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,f]),inside:{function:n(/^<<0>>/.source,[h]),generic:{pattern:RegExp(f),alias:"class-name",inside:S}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[c,m,h,x,u.source,g,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[m,g]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:u,"class-name":{pattern:RegExp(x),greedy:!0,inside:S},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var T=E+"|"+_,A=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[T]),j=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[A]),2),N=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,L=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[b,j]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[N,L]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[N]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[j]),inside:e.languages.csharp},"class-name":{pattern:RegExp(b),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var P=/:[^}\r\n]+/.source,I=r(t(/[^"'/()]|<<0>>|\(<<self>>*\)/.source,[A]),2),R=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[I,P]),O=r(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<<self>>*\)/.source,[T]),2),F=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[O,P]);function M(t,r){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[r,P]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[R]),lookbehind:!0,greedy:!0,inside:M(R,I)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[F]),lookbehind:!0,greedy:!0,inside:M(F,O)}],char:{pattern:RegExp(_),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(Prism)},60397:()=>{!function(e){var t="(?:"+[/[a-zA-Z_\x80-\uFFFF][\w\x80-\uFFFF]*/.source,/-?(?:\.\d+|\d+(?:\.\d*)?)/.source,/"[^"\\]*(?:\\[\s\S][^"\\]*)*"/.source,/<(?:[^<>]|(?!<!--)<(?:[^<>"']|"[^"]*"|'[^']*')+>|<!--(?:[^-]|-(?!->))*-->)*>/.source].join("|")+")",n={markup:{pattern:/(^<)[\s\S]+(?=>$)/,lookbehind:!0,alias:["language-markup","language-html","language-xml"],inside:e.languages.markup}};function r(e,n){return RegExp(e.replace(/<ID>/g,(function(){return t})),n)}e.languages.dot={comment:{pattern:/\/\/.*|\/\*[\s\S]*?\*\/|^#.*/m,greedy:!0},"graph-name":{pattern:r(/(\b(?:digraph|graph|subgraph)[ \t\r\n]+)<ID>/.source,"i"),lookbehind:!0,greedy:!0,alias:"class-name",inside:n},"attr-value":{pattern:r(/(=[ \t\r\n]*)<ID>/.source),lookbehind:!0,greedy:!0,inside:n},"attr-name":{pattern:r(/([\[;, \t\r\n])<ID>(?=[ \t\r\n]*=)/.source),lookbehind:!0,greedy:!0,inside:n},keyword:/\b(?:digraph|edge|graph|node|strict|subgraph)\b/i,"compass-point":{pattern:/(:[ \t\r\n]*)(?:[ewc_]|[ns][ew]?)(?![\w\x80-\uFFFF])/,lookbehind:!0,alias:"builtin"},node:{pattern:r(/(^|[^-.\w\x80-\uFFFF\\])<ID>/.source),lookbehind:!0,greedy:!0,inside:n},operator:/[=:]|-[->]/,punctuation:/[\[\]{};,]/},e.languages.gv=e.languages.dot}(Prism)},81295:()=>{Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import|qualified)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},Prism.languages.hs=Prism.languages.haskell},52503:()=>{!function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,r={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[r,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:r.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:r.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":r,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:r.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:r.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!<keyword>)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism)},96854:()=>{!function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,a,o){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(a,(function(e){if("function"==typeof o&&!o(e))return e;for(var a,s=i.length;-1!==n.code.indexOf(a=t(r,s));)++s;return i[s]=e,a})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var a=0,o=Object.keys(n.tokenStack);!function i(s){for(var l=0;l<s.length&&!(a>=o.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=o[a],d=n.tokenStack[u],p="string"==typeof c?c:c.content,f=t(r,u),g=p.indexOf(f);if(g>-1){++a;var h=p.substring(0,g),m=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(g+f.length),y=[];h&&y.push.apply(y,i([h])),y.push(m),b&&y.push.apply(y,i([b])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&i(c.content)}return s}(n.tokens)}}}})}(Prism)},58704:()=>{Prism.languages.nix={comment:{pattern:/\/\*[\s\S]*?\*\/|#.*/,greedy:!0},string:{pattern:/"(?:[^"\\]|\\[\s\S])*"|''(?:(?!'')[\s\S]|''(?:'|\\|\$\{))*''/,greedy:!0,inside:{interpolation:{pattern:/(^|(?:^|(?!'').)[^\\])\$\{(?:[^{}]|\{[^}]*\})*\}/,lookbehind:!0,inside:null}}},url:[/\b(?:[a-z]{3,7}:\/\/)[\w\-+%~\/.:#=?&]+/,{pattern:/([^\/])(?:[\w\-+%~.:#=?&]*(?!\/\/)[\w\-+%~\/.:#=?&])?(?!\/\/)\/[\w\-+%~\/.:#=?&]*/,lookbehind:!0}],antiquotation:{pattern:/\$(?=\{)/,alias:"important"},number:/\b\d+\b/,keyword:/\b(?:assert|builtins|else|if|in|inherit|let|null|or|then|with)\b/,function:/\b(?:abort|add|all|any|attrNames|attrValues|baseNameOf|compareVersions|concatLists|currentSystem|deepSeq|derivation|dirOf|div|elem(?:At)?|fetch(?:Tarball|url)|filter(?:Source)?|fromJSON|genList|getAttr|getEnv|hasAttr|hashString|head|import|intersectAttrs|is(?:Attrs|Bool|Function|Int|List|Null|String)|length|lessThan|listToAttrs|map|mul|parseDrvName|pathExists|read(?:Dir|File)|removeAttrs|replaceStrings|seq|sort|stringLength|sub(?:string)?|tail|throw|to(?:File|JSON|Path|String|XML)|trace|typeOf)\b|\bfoldl'\B/,boolean:/\b(?:false|true)\b/,operator:/[=!<>]=?|\+\+?|\|\||&&|\/\/|->?|[?@]/,punctuation:/[{}()[\].,:;]/},Prism.languages.nix.string.inside.interpolation.inside=Prism.languages.nix},13210:()=>{Prism.languages.pascal={directive:{pattern:/\{\$[\s\S]*?\}/,greedy:!0,alias:["marco","property"]},comment:{pattern:/\(\*[\s\S]*?\*\)|\{[\s\S]*?\}|\/\/.*/,greedy:!0},string:{pattern:/(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,greedy:!0},asm:{pattern:/(\basm\b)[\s\S]+?(?=\bend\s*[;[])/i,lookbehind:!0,greedy:!0,inside:null},keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/(?:[&%]\d+|\$[a-f\d]+)/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.pascal.asm.inside=Prism.languages.extend("pascal",{asm:void 0,keyword:void 0,operator:void 0}),Prism.languages.objectpascal=Prism.languages.pascal},80366:()=>{Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python},59385:()=>{!function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===|<?=>|[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",r=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+r),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+r+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(Prism)},70767:()=>{!function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(Prism)},30218:(e,t,n)=>{var r={"./prism-ada":85795,"./prism-bash":57874,"./prism-csharp":79016,"./prism-dot":60397,"./prism-haskell":81295,"./prism-java":52503,"./prism-nix":58704,"./prism-pascal":13210,"./prism-python":80366,"./prism-ruby":59385,"./prism-rust":70767};function a(e){var t=o(e);return n(t)}function o(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}a.keys=function(){return Object.keys(r)},a.resolve=o,e.exports=a,a.id=30218},92703:(e,t,n)=>{"use strict";var r=n(50414);function a(){}function o(){}o.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,o,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:o,resetWarningCache:a};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),a=n(63840);function o(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var i=new Set,s={};function l(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)i.add(t[e])}var u=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),d=Object.prototype.hasOwnProperty,p=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},g={};function h(e,t,n,r,a,o,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var m={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){m[e]=new h(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];m[t]=new h(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){m[e]=new h(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){m[e]=new h(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){m[e]=new h(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){m[e]=new h(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){m[e]=new h(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){m[e]=new h(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){m[e]=new h(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function v(e,t,n,r){var a=m.hasOwnProperty(t)?m[t]:null;(null!==a?0!==a.type:r||!(2<t.length)||"o"!==t[0]&&"O"!==t[0]||"n"!==t[1]&&"N"!==t[1])&&(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,a,r)&&(n=null),r||null===a?function(e){return!!d.call(g,e)||!d.call(f,e)&&(p.test(e)?g[e]=!0:(f[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):a.mustUseProperty?e[a.propertyName]=null===n?3!==a.type&&"":n:(t=a.attributeName,r=a.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(a=a.type)||4===a&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);m[t]=new h(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){m[e]=new h(e,1,!1,e.toLowerCase(),null,!1,!1)})),m.xlinkHref=new h("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){m[e]=new h(e,1,!1,e.toLowerCase(),null,!0,!0)}));var w=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,k=Symbol.for("react.element"),x=Symbol.for("react.portal"),S=Symbol.for("react.fragment"),_=Symbol.for("react.strict_mode"),E=Symbol.for("react.profiler"),C=Symbol.for("react.provider"),T=Symbol.for("react.context"),A=Symbol.for("react.forward_ref"),j=Symbol.for("react.suspense"),N=Symbol.for("react.suspense_list"),L=Symbol.for("react.memo"),P=Symbol.for("react.lazy");Symbol.for("react.scope"),Symbol.for("react.debug_trace_mode");var I=Symbol.for("react.offscreen");Symbol.for("react.legacy_hidden"),Symbol.for("react.cache"),Symbol.for("react.tracing_marker");var R=Symbol.iterator;function O(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=R&&e[R]||e["@@iterator"])?e:null}var F,M=Object.assign;function D(e){if(void 0===F)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);F=t&&t[1]||""}return"\n"+F+e}var B=!1;function z(e,t){if(!e||B)return"";B=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(c){var r=c}Reflect.construct(e,[],t)}else{try{t.call()}catch(c){r=c}e.call(t.prototype)}else{try{throw Error()}catch(c){r=c}e()}}catch(c){if(c&&r&&"string"==typeof c.stack){for(var a=c.stack.split("\n"),o=r.stack.split("\n"),i=a.length-1,s=o.length-1;1<=i&&0<=s&&a[i]!==o[s];)s--;for(;1<=i&&0<=s;i--,s--)if(a[i]!==o[s]){if(1!==i||1!==s)do{if(i--,0>--s||a[i]!==o[s]){var l="\n"+a[i].replace(" at new "," at ");return e.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",e.displayName)),l}}while(1<=i&&0<=s);break}}}finally{B=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?D(e):""}function $(e){switch(e.tag){case 5:return D(e.type);case 16:return D("Lazy");case 13:return D("Suspense");case 19:return D("SuspenseList");case 0:case 2:case 15:return e=z(e.type,!1);case 11:return e=z(e.type.render,!1);case 1:return e=z(e.type,!0);default:return""}}function U(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case S:return"Fragment";case x:return"Portal";case E:return"Profiler";case _:return"StrictMode";case j:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case T:return(e.displayName||"Context")+".Consumer";case C:return(e._context.displayName||"Context")+".Provider";case A:var t=e.render;return(e=e.displayName)||(e=""!==(e=t.displayName||t.name||"")?"ForwardRef("+e+")":"ForwardRef"),e;case L:return null!==(t=e.displayName||null)?t:U(e.type)||"Memo";case P:t=e._payload,e=e._init;try{return U(e(t))}catch(n){}}return null}function Z(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=(e=t.render).displayName||e.name||"",t.displayName||(""!==e?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return U(t);case 8:return t===_?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if("function"==typeof t)return t.displayName||t.name||null;if("string"==typeof t)return t}return null}function H(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":case"object":return e;default:return""}}function V(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function W(e){e._valueTracker||(e._valueTracker=function(e){var t=V(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(e){r=""+e,o.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function G(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=V(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function q(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function K(e,t){var n=t.checked;return M({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function Y(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=H(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function Q(e,t){null!=(t=t.checked)&&v(e,"checked",t,!1)}function X(e,t){Q(e,t);var n=H(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?ee(e,t.type,n):t.hasOwnProperty("defaultValue")&&ee(e,t.type,H(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function J(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function ee(e,t,n){"number"===t&&q(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var te=Array.isArray;function ne(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a<n.length;a++)t["$"+n[a]]=!0;for(n=0;n<e.length;n++)a=t.hasOwnProperty("$"+e[n].value),e[n].selected!==a&&(e[n].selected=a),a&&r&&(e[n].defaultSelected=!0)}else{for(n=""+H(n),t=null,a=0;a<e.length;a++){if(e[a].value===n)return e[a].selected=!0,void(r&&(e[a].defaultSelected=!0));null!==t||e[a].disabled||(t=e[a])}null!==t&&(t.selected=!0)}}function re(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(o(91));return M({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function ae(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(o(92));if(te(n)){if(1<n.length)throw Error(o(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:H(n)}}function oe(e,t){var n=H(t.value),r=H(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ie(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}function se(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function le(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?se(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var ce,ue,de=(ue=function(e,t){if("http://www.w3.org/2000/svg"!==e.namespaceURI||"innerHTML"in e)e.innerHTML=t;else{for((ce=ce||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=ce.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ue(e,t)}))}:ue);function pe(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var fe={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},ge=["Webkit","ms","Moz","O"];function he(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||fe.hasOwnProperty(e)&&fe[e]?(""+t).trim():t+"px"}function me(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),a=he(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}Object.keys(fe).forEach((function(e){ge.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),fe[t]=fe[e]}))}));var be=M({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function ye(e,t){if(t){if(be[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(o(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(o(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(o(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(o(62))}}function ve(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var we=null;function ke(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var xe=null,Se=null,_e=null;function Ee(e){if(e=va(e)){if("function"!=typeof xe)throw Error(o(280));var t=e.stateNode;t&&(t=ka(t),xe(e.stateNode,e.type,t))}}function Ce(e){Se?_e?_e.push(e):_e=[e]:Se=e}function Te(){if(Se){var e=Se,t=_e;if(_e=Se=null,Ee(e),t)for(e=0;e<t.length;e++)Ee(t[e])}}function Ae(e,t){return e(t)}function je(){}var Ne=!1;function Le(e,t,n){if(Ne)return e(t,n);Ne=!0;try{return Ae(e,t,n)}finally{Ne=!1,(null!==Se||null!==_e)&&(je(),Te())}}function Pe(e,t){var n=e.stateNode;if(null===n)return null;var r=ka(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(o(231,t,typeof n));return n}var Ie=!1;if(u)try{var Re={};Object.defineProperty(Re,"passive",{get:function(){Ie=!0}}),window.addEventListener("test",Re,Re),window.removeEventListener("test",Re,Re)}catch(ue){Ie=!1}function Oe(e,t,n,r,a,o,i,s,l){var c=Array.prototype.slice.call(arguments,3);try{t.apply(n,c)}catch(u){this.onError(u)}}var Fe=!1,Me=null,De=!1,Be=null,ze={onError:function(e){Fe=!0,Me=e}};function $e(e,t,n,r,a,o,i,s,l){Fe=!1,Me=null,Oe.apply(ze,arguments)}function Ue(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(4098&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Ze(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function He(e){if(Ue(e)!==e)throw Error(o(188))}function Ve(e){return null!==(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ue(e)))throw Error(o(188));return t!==e?null:e}for(var n=e,r=t;;){var a=n.return;if(null===a)break;var i=a.alternate;if(null===i){if(null!==(r=a.return)){n=r;continue}break}if(a.child===i.child){for(i=a.child;i;){if(i===n)return He(a),e;if(i===r)return He(a),t;i=i.sibling}throw Error(o(188))}if(n.return!==r.return)n=a,r=i;else{for(var s=!1,l=a.child;l;){if(l===n){s=!0,n=a,r=i;break}if(l===r){s=!0,r=a,n=i;break}l=l.sibling}if(!s){for(l=i.child;l;){if(l===n){s=!0,n=i,r=a;break}if(l===r){s=!0,r=i,n=a;break}l=l.sibling}if(!s)throw Error(o(189))}}if(n.alternate!==r)throw Error(o(190))}if(3!==n.tag)throw Error(o(188));return n.stateNode.current===n?e:t}(e))?We(e):null}function We(e){if(5===e.tag||6===e.tag)return e;for(e=e.child;null!==e;){var t=We(e);if(null!==t)return t;e=e.sibling}return null}var Ge=a.unstable_scheduleCallback,qe=a.unstable_cancelCallback,Ke=a.unstable_shouldYield,Ye=a.unstable_requestPaint,Qe=a.unstable_now,Xe=a.unstable_getCurrentPriorityLevel,Je=a.unstable_ImmediatePriority,et=a.unstable_UserBlockingPriority,tt=a.unstable_NormalPriority,nt=a.unstable_LowPriority,rt=a.unstable_IdlePriority,at=null,ot=null;var it=Math.clz32?Math.clz32:function(e){return e>>>=0,0===e?32:31-(st(e)/lt|0)|0},st=Math.log,lt=Math.LN2;var ct=64,ut=4194304;function dt(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return 4194240&e;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return 130023424&e;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function pt(e,t){var n=e.pendingLanes;if(0===n)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=268435455&n;if(0!==i){var s=i&~a;0!==s?r=dt(s):0!==(o&=i)&&(r=dt(o))}else 0!==(i=n&~a)?r=dt(i):0!==o&&(r=dt(o));if(0===r)return 0;if(0!==t&&t!==r&&0==(t&a)&&((a=r&-r)>=(o=t&-t)||16===a&&0!=(4194240&o)))return t;if(0!=(4&r)&&(r|=16&n),0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)a=1<<(n=31-it(t)),r|=e[n],t&=~a;return r}function ft(e,t){switch(e){case 1:case 2:case 4:return t+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;default:return-1}}function gt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function ht(){var e=ct;return 0==(4194240&(ct<<=1))&&(ct=64),e}function mt(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function bt(e,t,n){e.pendingLanes|=t,536870912!==t&&(e.suspendedLanes=0,e.pingedLanes=0),(e=e.eventTimes)[t=31-it(t)]=n}function yt(e,t){var n=e.entangledLanes|=t;for(e=e.entanglements;n;){var r=31-it(n),a=1<<r;a&t|e[r]&t&&(e[r]|=t),n&=~a}}var vt=0;function wt(e){return 1<(e&=-e)?4<e?0!=(268435455&e)?16:536870912:4:1}var kt,xt,St,_t,Et,Ct=!1,Tt=[],At=null,jt=null,Nt=null,Lt=new Map,Pt=new Map,It=[],Rt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function Ot(e,t){switch(e){case"focusin":case"focusout":At=null;break;case"dragenter":case"dragleave":jt=null;break;case"mouseover":case"mouseout":Nt=null;break;case"pointerover":case"pointerout":Lt.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":Pt.delete(t.pointerId)}}function Ft(e,t,n,r,a,o){return null===e||e.nativeEvent!==o?(e={blockedOn:t,domEventName:n,eventSystemFlags:r,nativeEvent:o,targetContainers:[a]},null!==t&&(null!==(t=va(t))&&xt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==a&&-1===t.indexOf(a)&&t.push(a),e)}function Mt(e){var t=ya(e.target);if(null!==t){var n=Ue(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Ze(n)))return e.blockedOn=t,void Et(e.priority,(function(){St(n)}))}else if(3===t&&n.stateNode.current.memoizedState.isDehydrated)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function Dt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Kt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=va(n))&&xt(t),e.blockedOn=n,!1;var r=new(n=e.nativeEvent).constructor(n.type,n);we=r,n.target.dispatchEvent(r),we=null,t.shift()}return!0}function Bt(e,t,n){Dt(e)&&n.delete(t)}function zt(){Ct=!1,null!==At&&Dt(At)&&(At=null),null!==jt&&Dt(jt)&&(jt=null),null!==Nt&&Dt(Nt)&&(Nt=null),Lt.forEach(Bt),Pt.forEach(Bt)}function $t(e,t){e.blockedOn===t&&(e.blockedOn=null,Ct||(Ct=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,zt)))}function Ut(e){function t(t){return $t(t,e)}if(0<Tt.length){$t(Tt[0],e);for(var n=1;n<Tt.length;n++){var r=Tt[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==At&&$t(At,e),null!==jt&&$t(jt,e),null!==Nt&&$t(Nt,e),Lt.forEach(t),Pt.forEach(t),n=0;n<It.length;n++)(r=It[n]).blockedOn===e&&(r.blockedOn=null);for(;0<It.length&&null===(n=It[0]).blockedOn;)Mt(n),null===n.blockedOn&&It.shift()}var Zt=w.ReactCurrentBatchConfig,Ht=!0;function Vt(e,t,n,r){var a=vt,o=Zt.transition;Zt.transition=null;try{vt=1,Gt(e,t,n,r)}finally{vt=a,Zt.transition=o}}function Wt(e,t,n,r){var a=vt,o=Zt.transition;Zt.transition=null;try{vt=4,Gt(e,t,n,r)}finally{vt=a,Zt.transition=o}}function Gt(e,t,n,r){if(Ht){var a=Kt(e,t,n,r);if(null===a)Hr(e,t,r,qt,n),Ot(e,r);else if(function(e,t,n,r,a){switch(t){case"focusin":return At=Ft(At,e,t,n,r,a),!0;case"dragenter":return jt=Ft(jt,e,t,n,r,a),!0;case"mouseover":return Nt=Ft(Nt,e,t,n,r,a),!0;case"pointerover":var o=a.pointerId;return Lt.set(o,Ft(Lt.get(o)||null,e,t,n,r,a)),!0;case"gotpointercapture":return o=a.pointerId,Pt.set(o,Ft(Pt.get(o)||null,e,t,n,r,a)),!0}return!1}(a,e,t,n,r))r.stopPropagation();else if(Ot(e,r),4&t&&-1<Rt.indexOf(e)){for(;null!==a;){var o=va(a);if(null!==o&&kt(o),null===(o=Kt(e,t,n,r))&&Hr(e,t,r,qt,n),o===a)break;a=o}null!==a&&r.stopPropagation()}else Hr(e,t,r,null,n)}}var qt=null;function Kt(e,t,n,r){if(qt=null,null!==(e=ya(e=ke(r))))if(null===(t=Ue(e)))e=null;else if(13===(n=t.tag)){if(null!==(e=Ze(t)))return e;e=null}else if(3===n){if(t.stateNode.current.memoizedState.isDehydrated)return 3===t.tag?t.stateNode.containerInfo:null;e=null}else t!==e&&(e=null);return qt=e,null}function Yt(e){switch(e){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(Xe()){case Je:return 1;case et:return 4;case tt:case nt:return 16;case rt:return 536870912;default:return 16}default:return 16}}var Qt=null,Xt=null,Jt=null;function en(){if(Jt)return Jt;var e,t,n=Xt,r=n.length,a="value"in Qt?Qt.value:Qt.textContent,o=a.length;for(e=0;e<r&&n[e]===a[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===a[o-t];t++);return Jt=a.slice(e,1<t?1-t:void 0)}function tn(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function nn(){return!0}function rn(){return!1}function an(e){function t(t,n,r,a,o){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=a,this.target=o,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(a):a[i]);return this.isDefaultPrevented=(null!=a.defaultPrevented?a.defaultPrevented:!1===a.returnValue)?nn:rn,this.isPropagationStopped=rn,this}return M(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=nn)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=nn)},persist:function(){},isPersistent:nn}),t}var on,sn,ln,cn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},un=an(cn),dn=M({},cn,{view:0,detail:0}),pn=an(dn),fn=M({},dn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:En,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==ln&&(ln&&"mousemove"===e.type?(on=e.screenX-ln.screenX,sn=e.screenY-ln.screenY):sn=on=0,ln=e),on)},movementY:function(e){return"movementY"in e?e.movementY:sn}}),gn=an(fn),hn=an(M({},fn,{dataTransfer:0})),mn=an(M({},dn,{relatedTarget:0})),bn=an(M({},cn,{animationName:0,elapsedTime:0,pseudoElement:0})),yn=M({},cn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),vn=an(yn),wn=an(M({},cn,{data:0})),kn={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},xn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Sn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function _n(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Sn[e])&&!!t[e]}function En(){return _n}var Cn=M({},dn,{key:function(e){if(e.key){var t=kn[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=tn(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?xn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:En,charCode:function(e){return"keypress"===e.type?tn(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?tn(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Tn=an(Cn),An=an(M({},fn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),jn=an(M({},dn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:En})),Nn=an(M({},cn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=M({},fn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Pn=an(Ln),In=[9,13,27,32],Rn=u&&"CompositionEvent"in window,On=null;u&&"documentMode"in document&&(On=document.documentMode);var Fn=u&&"TextEvent"in window&&!On,Mn=u&&(!Rn||On&&8<On&&11>=On),Dn=String.fromCharCode(32),Bn=!1;function zn(e,t){switch(e){case"keyup":return-1!==In.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function $n(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var Un=!1;var Zn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Hn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Zn[e.type]:"textarea"===t}function Vn(e,t,n,r){Ce(r),0<(t=Wr(t,"onChange")).length&&(n=new un("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Wn=null,Gn=null;function qn(e){Dr(e,0)}function Kn(e){if(G(wa(e)))return e}function Yn(e,t){if("change"===e)return t}var Qn=!1;if(u){var Xn;if(u){var Jn="oninput"in document;if(!Jn){var er=document.createElement("div");er.setAttribute("oninput","return;"),Jn="function"==typeof er.oninput}Xn=Jn}else Xn=!1;Qn=Xn&&(!document.documentMode||9<document.documentMode)}function tr(){Wn&&(Wn.detachEvent("onpropertychange",nr),Gn=Wn=null)}function nr(e){if("value"===e.propertyName&&Kn(Gn)){var t=[];Vn(t,Gn,e,ke(e)),Le(qn,t)}}function rr(e,t,n){"focusin"===e?(tr(),Gn=n,(Wn=t).attachEvent("onpropertychange",nr)):"focusout"===e&&tr()}function ar(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Gn)}function or(e,t){if("click"===e)return Kn(t)}function ir(e,t){if("input"===e||"change"===e)return Kn(t)}var sr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t};function lr(e,t){if(sr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++){var a=n[r];if(!d.call(t,a)||!sr(e[a],t[a]))return!1}return!0}function cr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function ur(e,t){var n,r=cr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=cr(r)}}function dr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?dr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function pr(){for(var e=window,t=q();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=q((e=t.contentWindow).document)}return t}function fr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}function gr(e){var t=pr(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&dr(n.ownerDocument.documentElement,n)){if(null!==r&&fr(n))if(t=r.start,void 0===(e=r.end)&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if((e=(t=n.ownerDocument||document)&&t.defaultView||window).getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=void 0===r.end?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=ur(n,o);var i=ur(n,r);a&&i&&(1!==e.rangeCount||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&((t=t.createRange()).setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}for(t=[],e=n;e=e.parentNode;)1===e.nodeType&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for("function"==typeof n.focus&&n.focus(),n=0;n<t.length;n++)(e=t[n]).element.scrollLeft=e.left,e.element.scrollTop=e.top}}var hr=u&&"documentMode"in document&&11>=document.documentMode,mr=null,br=null,yr=null,vr=!1;function wr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;vr||null==mr||mr!==q(r)||("selectionStart"in(r=mr)&&fr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},yr&&lr(yr,r)||(yr=r,0<(r=Wr(br,"onSelect")).length&&(t=new un("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=mr)))}function kr(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var xr={animationend:kr("Animation","AnimationEnd"),animationiteration:kr("Animation","AnimationIteration"),animationstart:kr("Animation","AnimationStart"),transitionend:kr("Transition","TransitionEnd")},Sr={},_r={};function Er(e){if(Sr[e])return Sr[e];if(!xr[e])return e;var t,n=xr[e];for(t in n)if(n.hasOwnProperty(t)&&t in _r)return Sr[e]=n[t];return e}u&&(_r=document.createElement("div").style,"AnimationEvent"in window||(delete xr.animationend.animation,delete xr.animationiteration.animation,delete xr.animationstart.animation),"TransitionEvent"in window||delete xr.transitionend.transition);var Cr=Er("animationend"),Tr=Er("animationiteration"),Ar=Er("animationstart"),jr=Er("transitionend"),Nr=new Map,Lr="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function Pr(e,t){Nr.set(e,t),l(t,[e])}for(var Ir=0;Ir<Lr.length;Ir++){var Rr=Lr[Ir];Pr(Rr.toLowerCase(),"on"+(Rr[0].toUpperCase()+Rr.slice(1)))}Pr(Cr,"onAnimationEnd"),Pr(Tr,"onAnimationIteration"),Pr(Ar,"onAnimationStart"),Pr("dblclick","onDoubleClick"),Pr("focusin","onFocus"),Pr("focusout","onBlur"),Pr(jr,"onTransitionEnd"),c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),l("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),l("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),l("onBeforeInput",["compositionend","keypress","textInput","paste"]),l("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),l("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Or="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Fr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Or));function Mr(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,a,i,s,l,c){if($e.apply(this,arguments),Fe){if(!Fe)throw Error(o(198));var u=Me;Fe=!1,Me=null,De||(De=!0,Be=u)}}(r,t,void 0,e),e.currentTarget=null}function Dr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],a=r.event;r=r.listeners;e:{var o=void 0;if(t)for(var i=r.length-1;0<=i;i--){var s=r[i],l=s.instance,c=s.currentTarget;if(s=s.listener,l!==o&&a.isPropagationStopped())break e;Mr(a,s,c),o=l}else for(i=0;i<r.length;i++){if(l=(s=r[i]).instance,c=s.currentTarget,s=s.listener,l!==o&&a.isPropagationStopped())break e;Mr(a,s,c),o=l}}}if(De)throw e=Be,De=!1,Be=null,e}function Br(e,t){var n=t[ha];void 0===n&&(n=t[ha]=new Set);var r=e+"__bubble";n.has(r)||(Zr(t,e,2,!1),n.add(r))}function zr(e,t,n){var r=0;t&&(r|=4),Zr(n,e,r,t)}var $r="_reactListening"+Math.random().toString(36).slice(2);function Ur(e){if(!e[$r]){e[$r]=!0,i.forEach((function(t){"selectionchange"!==t&&(Fr.has(t)||zr(t,!1,e),zr(t,!0,e))}));var t=9===e.nodeType?e:e.ownerDocument;null===t||t[$r]||(t[$r]=!0,zr("selectionchange",!1,t))}}function Zr(e,t,n,r){switch(Yt(t)){case 1:var a=Vt;break;case 4:a=Wt;break;default:a=Gt}n=a.bind(null,t,n,e),a=void 0,!Ie||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(a=!0),r?void 0!==a?e.addEventListener(t,n,{capture:!0,passive:a}):e.addEventListener(t,n,!0):void 0!==a?e.addEventListener(t,n,{passive:a}):e.addEventListener(t,n,!1)}function Hr(e,t,n,r,a){var o=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var s=r.stateNode.containerInfo;if(s===a||8===s.nodeType&&s.parentNode===a)break;if(4===i)for(i=r.return;null!==i;){var l=i.tag;if((3===l||4===l)&&((l=i.stateNode.containerInfo)===a||8===l.nodeType&&l.parentNode===a))return;i=i.return}for(;null!==s;){if(null===(i=ya(s)))return;if(5===(l=i.tag)||6===l){r=o=i;continue e}s=s.parentNode}}r=r.return}Le((function(){var r=o,a=ke(n),i=[];e:{var s=Nr.get(e);if(void 0!==s){var l=un,c=e;switch(e){case"keypress":if(0===tn(n))break e;case"keydown":case"keyup":l=Tn;break;case"focusin":c="focus",l=mn;break;case"focusout":c="blur",l=mn;break;case"beforeblur":case"afterblur":l=mn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":l=gn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":l=hn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":l=jn;break;case Cr:case Tr:case Ar:l=bn;break;case jr:l=Nn;break;case"scroll":l=pn;break;case"wheel":l=Pn;break;case"copy":case"cut":case"paste":l=vn;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":l=An}var u=0!=(4&t),d=!u&&"scroll"===e,p=u?null!==s?s+"Capture":null:s;u=[];for(var f,g=r;null!==g;){var h=(f=g).stateNode;if(5===f.tag&&null!==h&&(f=h,null!==p&&(null!=(h=Pe(g,p))&&u.push(Vr(g,h,f)))),d)break;g=g.return}0<u.length&&(s=new l(s,c,null,n,a),i.push({event:s,listeners:u}))}}if(0==(7&t)){if(l="mouseout"===e||"pointerout"===e,(!(s="mouseover"===e||"pointerover"===e)||n===we||!(c=n.relatedTarget||n.fromElement)||!ya(c)&&!c[ga])&&(l||s)&&(s=a.window===a?a:(s=a.ownerDocument)?s.defaultView||s.parentWindow:window,l?(l=r,null!==(c=(c=n.relatedTarget||n.toElement)?ya(c):null)&&(c!==(d=Ue(c))||5!==c.tag&&6!==c.tag)&&(c=null)):(l=null,c=r),l!==c)){if(u=gn,h="onMouseLeave",p="onMouseEnter",g="mouse","pointerout"!==e&&"pointerover"!==e||(u=An,h="onPointerLeave",p="onPointerEnter",g="pointer"),d=null==l?s:wa(l),f=null==c?s:wa(c),(s=new u(h,g+"leave",l,n,a)).target=d,s.relatedTarget=f,h=null,ya(a)===r&&((u=new u(p,g+"enter",c,n,a)).target=f,u.relatedTarget=d,h=u),d=h,l&&c)e:{for(p=c,g=0,f=u=l;f;f=Gr(f))g++;for(f=0,h=p;h;h=Gr(h))f++;for(;0<g-f;)u=Gr(u),g--;for(;0<f-g;)p=Gr(p),f--;for(;g--;){if(u===p||null!==p&&u===p.alternate)break e;u=Gr(u),p=Gr(p)}u=null}else u=null;null!==l&&qr(i,s,l,u,!1),null!==c&&null!==d&&qr(i,d,c,u,!0)}if("select"===(l=(s=r?wa(r):window).nodeName&&s.nodeName.toLowerCase())||"input"===l&&"file"===s.type)var m=Yn;else if(Hn(s))if(Qn)m=ir;else{m=ar;var b=rr}else(l=s.nodeName)&&"input"===l.toLowerCase()&&("checkbox"===s.type||"radio"===s.type)&&(m=or);switch(m&&(m=m(e,r))?Vn(i,m,n,a):(b&&b(e,s,r),"focusout"===e&&(b=s._wrapperState)&&b.controlled&&"number"===s.type&&ee(s,"number",s.value)),b=r?wa(r):window,e){case"focusin":(Hn(b)||"true"===b.contentEditable)&&(mr=b,br=r,yr=null);break;case"focusout":yr=br=mr=null;break;case"mousedown":vr=!0;break;case"contextmenu":case"mouseup":case"dragend":vr=!1,wr(i,n,a);break;case"selectionchange":if(hr)break;case"keydown":case"keyup":wr(i,n,a)}var y;if(Rn)e:{switch(e){case"compositionstart":var v="onCompositionStart";break e;case"compositionend":v="onCompositionEnd";break e;case"compositionupdate":v="onCompositionUpdate";break e}v=void 0}else Un?zn(e,n)&&(v="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(v="onCompositionStart");v&&(Mn&&"ko"!==n.locale&&(Un||"onCompositionStart"!==v?"onCompositionEnd"===v&&Un&&(y=en()):(Xt="value"in(Qt=a)?Qt.value:Qt.textContent,Un=!0)),0<(b=Wr(r,v)).length&&(v=new wn(v,e,null,n,a),i.push({event:v,listeners:b}),y?v.data=y:null!==(y=$n(n))&&(v.data=y))),(y=Fn?function(e,t){switch(e){case"compositionend":return $n(t);case"keypress":return 32!==t.which?null:(Bn=!0,Dn);case"textInput":return(e=t.data)===Dn&&Bn?null:e;default:return null}}(e,n):function(e,t){if(Un)return"compositionend"===e||!Rn&&zn(e,t)?(e=en(),Jt=Xt=Qt=null,Un=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return Mn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Wr(r,"onBeforeInput")).length&&(a=new wn("onBeforeInput","beforeinput",null,n,a),i.push({event:a,listeners:r}),a.data=y))}Dr(i,t)}))}function Vr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Wr(e,t){for(var n=t+"Capture",r=[];null!==e;){var a=e,o=a.stateNode;5===a.tag&&null!==o&&(a=o,null!=(o=Pe(e,n))&&r.unshift(Vr(e,o,a)),null!=(o=Pe(e,t))&&r.push(Vr(e,o,a))),e=e.return}return r}function Gr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function qr(e,t,n,r,a){for(var o=t._reactName,i=[];null!==n&&n!==r;){var s=n,l=s.alternate,c=s.stateNode;if(null!==l&&l===r)break;5===s.tag&&null!==c&&(s=c,a?null!=(l=Pe(n,o))&&i.unshift(Vr(n,l,s)):a||null!=(l=Pe(n,o))&&i.push(Vr(n,l,s))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}var Kr=/\r\n?/g,Yr=/\u0000|\uFFFD/g;function Qr(e){return("string"==typeof e?e:""+e).replace(Kr,"\n").replace(Yr,"")}function Xr(e,t,n){if(t=Qr(t),Qr(e)!==t&&n)throw Error(o(425))}function Jr(){}var ea=null,ta=null;function na(e,t){return"textarea"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var ra="function"==typeof setTimeout?setTimeout:void 0,aa="function"==typeof clearTimeout?clearTimeout:void 0,oa="function"==typeof Promise?Promise:void 0,ia="function"==typeof queueMicrotask?queueMicrotask:void 0!==oa?function(e){return oa.resolve(null).then(e).catch(sa)}:ra;function sa(e){setTimeout((function(){throw e}))}function la(e,t){var n=t,r=0;do{var a=n.nextSibling;if(e.removeChild(n),a&&8===a.nodeType)if("/$"===(n=a.data)){if(0===r)return e.removeChild(a),void Ut(t);r--}else"$"!==n&&"$?"!==n&&"$!"!==n||r++;n=a}while(n);Ut(t)}function ca(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break;if(8===t){if("$"===(t=e.data)||"$!"===t||"$?"===t)break;if("/$"===t)return null}}return e}function ua(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var da=Math.random().toString(36).slice(2),pa="__reactFiber$"+da,fa="__reactProps$"+da,ga="__reactContainer$"+da,ha="__reactEvents$"+da,ma="__reactListeners$"+da,ba="__reactHandles$"+da;function ya(e){var t=e[pa];if(t)return t;for(var n=e.parentNode;n;){if(t=n[ga]||n[pa]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=ua(e);null!==e;){if(n=e[pa])return n;e=ua(e)}return t}n=(e=n).parentNode}return null}function va(e){return!(e=e[pa]||e[ga])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function wa(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(o(33))}function ka(e){return e[fa]||null}var xa=[],Sa=-1;function _a(e){return{current:e}}function Ea(e){0>Sa||(e.current=xa[Sa],xa[Sa]=null,Sa--)}function Ca(e,t){Sa++,xa[Sa]=e.current,e.current=t}var Ta={},Aa=_a(Ta),ja=_a(!1),Na=Ta;function La(e,t){var n=e.type.contextTypes;if(!n)return Ta;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a,o={};for(a in n)o[a]=t[a];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=o),o}function Pa(e){return null!=(e=e.childContextTypes)}function Ia(){Ea(ja),Ea(Aa)}function Ra(e,t,n){if(Aa.current!==Ta)throw Error(o(168));Ca(Aa,t),Ca(ja,n)}function Oa(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in t))throw Error(o(108,Z(e)||"Unknown",a));return M({},n,r)}function Fa(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ta,Na=Aa.current,Ca(Aa,e),Ca(ja,ja.current),!0}function Ma(e,t,n){var r=e.stateNode;if(!r)throw Error(o(169));n?(e=Oa(e,t,Na),r.__reactInternalMemoizedMergedChildContext=e,Ea(ja),Ea(Aa),Ca(Aa,e)):Ea(ja),Ca(ja,n)}var Da=null,Ba=!1,za=!1;function $a(e){null===Da?Da=[e]:Da.push(e)}function Ua(){if(!za&&null!==Da){za=!0;var e=0,t=vt;try{var n=Da;for(vt=1;e<n.length;e++){var r=n[e];do{r=r(!0)}while(null!==r)}Da=null,Ba=!1}catch(a){throw null!==Da&&(Da=Da.slice(e+1)),Ge(Je,Ua),a}finally{vt=t,za=!1}}return null}var Za=[],Ha=0,Va=null,Wa=0,Ga=[],qa=0,Ka=null,Ya=1,Qa="";function Xa(e,t){Za[Ha++]=Wa,Za[Ha++]=Va,Va=e,Wa=t}function Ja(e,t,n){Ga[qa++]=Ya,Ga[qa++]=Qa,Ga[qa++]=Ka,Ka=e;var r=Ya;e=Qa;var a=32-it(r)-1;r&=~(1<<a),n+=1;var o=32-it(t)+a;if(30<o){var i=a-a%5;o=(r&(1<<i)-1).toString(32),r>>=i,a-=i,Ya=1<<32-it(t)+a|n<<a|r,Qa=o+e}else Ya=1<<o|n<<a|r,Qa=e}function eo(e){null!==e.return&&(Xa(e,1),Ja(e,1,0))}function to(e){for(;e===Va;)Va=Za[--Ha],Za[Ha]=null,Wa=Za[--Ha],Za[Ha]=null;for(;e===Ka;)Ka=Ga[--qa],Ga[qa]=null,Qa=Ga[--qa],Ga[qa]=null,Ya=Ga[--qa],Ga[qa]=null}var no=null,ro=null,ao=!1,oo=null;function io(e,t){var n=Pc(5,null,null,0);n.elementType="DELETED",n.stateNode=t,n.return=e,null===(t=e.deletions)?(e.deletions=[n],e.flags|=16):t.push(n)}function so(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,no=e,ro=ca(t.firstChild),!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,no=e,ro=null,!0);case 13:return null!==(t=8!==t.nodeType?null:t)&&(n=null!==Ka?{id:Ya,overflow:Qa}:null,e.memoizedState={dehydrated:t,treeContext:n,retryLane:1073741824},(n=Pc(18,null,null,0)).stateNode=t,n.return=e,e.child=n,no=e,ro=null,!0);default:return!1}}function lo(e){return 0!=(1&e.mode)&&0==(128&e.flags)}function co(e){if(ao){var t=ro;if(t){var n=t;if(!so(e,t)){if(lo(e))throw Error(o(418));t=ca(n.nextSibling);var r=no;t&&so(e,t)?io(r,n):(e.flags=-4097&e.flags|2,ao=!1,no=e)}}else{if(lo(e))throw Error(o(418));e.flags=-4097&e.flags|2,ao=!1,no=e}}}function uo(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;no=e}function po(e){if(e!==no)return!1;if(!ao)return uo(e),ao=!0,!1;var t;if((t=3!==e.tag)&&!(t=5!==e.tag)&&(t="head"!==(t=e.type)&&"body"!==t&&!na(e.type,e.memoizedProps)),t&&(t=ro)){if(lo(e))throw fo(),Error(o(418));for(;t;)io(e,t),t=ca(t.nextSibling)}if(uo(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(o(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){ro=ca(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}ro=null}}else ro=no?ca(e.stateNode.nextSibling):null;return!0}function fo(){for(var e=ro;e;)e=ca(e.nextSibling)}function go(){ro=no=null,ao=!1}function ho(e){null===oo?oo=[e]:oo.push(e)}var mo=w.ReactCurrentBatchConfig;function bo(e,t){if(e&&e.defaultProps){for(var n in t=M({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var yo=_a(null),vo=null,wo=null,ko=null;function xo(){ko=wo=vo=null}function So(e){var t=yo.current;Ea(yo),e._currentValue=t}function _o(e,t,n){for(;null!==e;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,null!==r&&(r.childLanes|=t)):null!==r&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function Eo(e,t){vo=e,ko=wo=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(ws=!0),e.firstContext=null)}function Co(e){var t=e._currentValue;if(ko!==e)if(e={context:e,memoizedValue:t,next:null},null===wo){if(null===vo)throw Error(o(308));wo=e,vo.dependencies={lanes:0,firstContext:e}}else wo=wo.next=e;return t}var To=null;function Ao(e){null===To?To=[e]:To.push(e)}function jo(e,t,n,r){var a=t.interleaved;return null===a?(n.next=n,Ao(t)):(n.next=a.next,a.next=n),t.interleaved=n,No(e,r)}function No(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}var Lo=!1;function Po(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Io(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Ro(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function Oo(e,t,n){var r=e.updateQueue;if(null===r)return null;if(r=r.shared,0!=(2&jl)){var a=r.pending;return null===a?t.next=t:(t.next=a.next,a.next=t),r.pending=t,No(e,n)}return null===(a=r.interleaved)?(t.next=t,Ao(r)):(t.next=a.next,a.next=t),r.interleaved=t,No(e,n)}function Fo(e,t,n){if(null!==(t=t.updateQueue)&&(t=t.shared,0!=(4194240&n))){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}function Mo(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var a=null,o=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===o?a=o=i:o=o.next=i,n=n.next}while(null!==n);null===o?a=o=t:o=o.next=t}else a=o=t;return n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function Do(e,t,n,r){var a=e.updateQueue;Lo=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var l=s,c=l.next;l.next=null,null===i?o=c:i.next=c,i=l;var u=e.alternate;null!==u&&((s=(u=u.updateQueue).lastBaseUpdate)!==i&&(null===s?u.firstBaseUpdate=c:s.next=c,u.lastBaseUpdate=l))}if(null!==o){var d=a.baseState;for(i=0,u=c=l=null,s=o;;){var p=s.lane,f=s.eventTime;if((r&p)===p){null!==u&&(u=u.next={eventTime:f,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=e,h=s;switch(p=t,f=n,h.tag){case 1:if("function"==typeof(g=h.payload)){d=g.call(f,d,p);break e}d=g;break e;case 3:g.flags=-65537&g.flags|128;case 0:if(null==(p="function"==typeof(g=h.payload)?g.call(f,d,p):g))break e;d=M({},d,p);break e;case 2:Lo=!0}}null!==s.callback&&0!==s.lane&&(e.flags|=64,null===(p=a.effects)?a.effects=[s]:p.push(s))}else f={eventTime:f,lane:p,tag:s.tag,payload:s.payload,callback:s.callback,next:null},null===u?(c=u=f,l=d):u=u.next=f,i|=p;if(null===(s=s.next)){if(null===(s=a.shared.pending))break;s=(p=s).next,p.next=null,a.lastBaseUpdate=p,a.shared.pending=null}}if(null===u&&(l=d),a.baseState=l,a.firstBaseUpdate=c,a.lastBaseUpdate=u,null!==(t=a.shared.interleaved)){a=t;do{i|=a.lane,a=a.next}while(a!==t)}else null===o&&(a.shared.lanes=0);Ml|=i,e.lanes=i,e.memoizedState=d}}function Bo(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],a=r.callback;if(null!==a){if(r.callback=null,r=n,"function"!=typeof a)throw Error(o(191,a));a.call(r)}}}var zo=(new r.Component).refs;function $o(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:M({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var Uo={isMounted:function(e){return!!(e=e._reactInternals)&&Ue(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=tc(),a=nc(e),o=Ro(r,a);o.payload=t,null!=n&&(o.callback=n),null!==(t=Oo(e,o,a))&&(rc(t,e,a,r),Fo(t,e,a))},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=tc(),a=nc(e),o=Ro(r,a);o.tag=1,o.payload=t,null!=n&&(o.callback=n),null!==(t=Oo(e,o,a))&&(rc(t,e,a,r),Fo(t,e,a))},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=tc(),r=nc(e),a=Ro(n,r);a.tag=2,null!=t&&(a.callback=t),null!==(t=Oo(e,a,r))&&(rc(t,e,r,n),Fo(t,e,r))}};function Zo(e,t,n,r,a,o,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,o,i):!t.prototype||!t.prototype.isPureReactComponent||(!lr(n,r)||!lr(a,o))}function Ho(e,t,n){var r=!1,a=Ta,o=t.contextType;return"object"==typeof o&&null!==o?o=Co(o):(a=Pa(t)?Na:Aa.current,o=(r=null!=(r=t.contextTypes))?La(e,a):Ta),t=new t(n,o),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=Uo,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=a,e.__reactInternalMemoizedMaskedChildContext=o),t}function Vo(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&Uo.enqueueReplaceState(t,t.state,null)}function Wo(e,t,n,r){var a=e.stateNode;a.props=n,a.state=e.memoizedState,a.refs=zo,Po(e);var o=t.contextType;"object"==typeof o&&null!==o?a.context=Co(o):(o=Pa(t)?Na:Aa.current,a.context=La(e,o)),a.state=e.memoizedState,"function"==typeof(o=t.getDerivedStateFromProps)&&($o(e,t,o,n),a.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof a.getSnapshotBeforeUpdate||"function"!=typeof a.UNSAFE_componentWillMount&&"function"!=typeof a.componentWillMount||(t=a.state,"function"==typeof a.componentWillMount&&a.componentWillMount(),"function"==typeof a.UNSAFE_componentWillMount&&a.UNSAFE_componentWillMount(),t!==a.state&&Uo.enqueueReplaceState(a,a.state,null),Do(e,n,a,r),a.state=e.memoizedState),"function"==typeof a.componentDidMount&&(e.flags|=4194308)}function Go(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(o(309));var r=n.stateNode}if(!r)throw Error(o(147,e));var a=r,i=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===i?t.ref:(t=function(e){var t=a.refs;t===zo&&(t=a.refs={}),null===e?delete t[i]:t[i]=e},t._stringRef=i,t)}if("string"!=typeof e)throw Error(o(284));if(!n._owner)throw Error(o(290,e))}return e}function qo(e,t){throw e=Object.prototype.toString.call(t),Error(o(31,"[object Object]"===e?"object with keys {"+Object.keys(t).join(", ")+"}":e))}function Ko(e){return(0,e._init)(e._payload)}function Yo(e){function t(t,n){if(e){var r=t.deletions;null===r?(t.deletions=[n],t.flags|=16):r.push(n)}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function a(e,t){return(e=Rc(e,t)).index=0,e.sibling=null,e}function i(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags|=2,n):r:(t.flags|=2,n):(t.flags|=1048576,n)}function s(t){return e&&null===t.alternate&&(t.flags|=2),t}function l(e,t,n,r){return null===t||6!==t.tag?((t=Dc(n,e.mode,r)).return=e,t):((t=a(t,n)).return=e,t)}function c(e,t,n,r){var o=n.type;return o===S?d(e,t,n.props.children,r,n.key):null!==t&&(t.elementType===o||"object"==typeof o&&null!==o&&o.$$typeof===P&&Ko(o)===t.type)?((r=a(t,n.props)).ref=Go(e,t,n),r.return=e,r):((r=Oc(n.type,n.key,n.props,null,e.mode,r)).ref=Go(e,t,n),r.return=e,r)}function u(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Bc(n,e.mode,r)).return=e,t):((t=a(t,n.children||[])).return=e,t)}function d(e,t,n,r,o){return null===t||7!==t.tag?((t=Fc(n,e.mode,r,o)).return=e,t):((t=a(t,n)).return=e,t)}function p(e,t,n){if("string"==typeof t&&""!==t||"number"==typeof t)return(t=Dc(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case k:return(n=Oc(t.type,t.key,t.props,null,e.mode,n)).ref=Go(e,null,t),n.return=e,n;case x:return(t=Bc(t,e.mode,n)).return=e,t;case P:return p(e,(0,t._init)(t._payload),n)}if(te(t)||O(t))return(t=Fc(t,e.mode,n,null)).return=e,t;qo(e,t)}return null}function f(e,t,n,r){var a=null!==t?t.key:null;if("string"==typeof n&&""!==n||"number"==typeof n)return null!==a?null:l(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case k:return n.key===a?c(e,t,n,r):null;case x:return n.key===a?u(e,t,n,r):null;case P:return f(e,t,(a=n._init)(n._payload),r)}if(te(n)||O(n))return null!==a?null:d(e,t,n,r,null);qo(e,n)}return null}function g(e,t,n,r,a){if("string"==typeof r&&""!==r||"number"==typeof r)return l(t,e=e.get(n)||null,""+r,a);if("object"==typeof r&&null!==r){switch(r.$$typeof){case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,a);case x:return u(t,e=e.get(null===r.key?n:r.key)||null,r,a);case P:return g(e,t,n,(0,r._init)(r._payload),a)}if(te(r)||O(r))return d(t,e=e.get(n)||null,r,a,null);qo(t,r)}return null}function h(a,o,s,l){for(var c=null,u=null,d=o,h=o=0,m=null;null!==d&&h<s.length;h++){d.index>h?(m=d,d=null):m=d.sibling;var b=f(a,d,s[h],l);if(null===b){null===d&&(d=m);break}e&&d&&null===b.alternate&&t(a,d),o=i(b,o,h),null===u?c=b:u.sibling=b,u=b,d=m}if(h===s.length)return n(a,d),ao&&Xa(a,h),c;if(null===d){for(;h<s.length;h++)null!==(d=p(a,s[h],l))&&(o=i(d,o,h),null===u?c=d:u.sibling=d,u=d);return ao&&Xa(a,h),c}for(d=r(a,d);h<s.length;h++)null!==(m=g(d,a,h,s[h],l))&&(e&&null!==m.alternate&&d.delete(null===m.key?h:m.key),o=i(m,o,h),null===u?c=m:u.sibling=m,u=m);return e&&d.forEach((function(e){return t(a,e)})),ao&&Xa(a,h),c}function m(a,s,l,c){var u=O(l);if("function"!=typeof u)throw Error(o(150));if(null==(l=u.call(l)))throw Error(o(151));for(var d=u=null,h=s,m=s=0,b=null,y=l.next();null!==h&&!y.done;m++,y=l.next()){h.index>m?(b=h,h=null):b=h.sibling;var v=f(a,h,y.value,c);if(null===v){null===h&&(h=b);break}e&&h&&null===v.alternate&&t(a,h),s=i(v,s,m),null===d?u=v:d.sibling=v,d=v,h=b}if(y.done)return n(a,h),ao&&Xa(a,m),u;if(null===h){for(;!y.done;m++,y=l.next())null!==(y=p(a,y.value,c))&&(s=i(y,s,m),null===d?u=y:d.sibling=y,d=y);return ao&&Xa(a,m),u}for(h=r(a,h);!y.done;m++,y=l.next())null!==(y=g(h,a,m,y.value,c))&&(e&&null!==y.alternate&&h.delete(null===y.key?m:y.key),s=i(y,s,m),null===d?u=y:d.sibling=y,d=y);return e&&h.forEach((function(e){return t(a,e)})),ao&&Xa(a,m),u}return function e(r,o,i,l){if("object"==typeof i&&null!==i&&i.type===S&&null===i.key&&(i=i.props.children),"object"==typeof i&&null!==i){switch(i.$$typeof){case k:e:{for(var c=i.key,u=o;null!==u;){if(u.key===c){if((c=i.type)===S){if(7===u.tag){n(r,u.sibling),(o=a(u,i.props.children)).return=r,r=o;break e}}else if(u.elementType===c||"object"==typeof c&&null!==c&&c.$$typeof===P&&Ko(c)===u.type){n(r,u.sibling),(o=a(u,i.props)).ref=Go(r,u,i),o.return=r,r=o;break e}n(r,u);break}t(r,u),u=u.sibling}i.type===S?((o=Fc(i.props.children,r.mode,l,i.key)).return=r,r=o):((l=Oc(i.type,i.key,i.props,null,r.mode,l)).ref=Go(r,o,i),l.return=r,r=l)}return s(r);case x:e:{for(u=i.key;null!==o;){if(o.key===u){if(4===o.tag&&o.stateNode.containerInfo===i.containerInfo&&o.stateNode.implementation===i.implementation){n(r,o.sibling),(o=a(o,i.children||[])).return=r,r=o;break e}n(r,o);break}t(r,o),o=o.sibling}(o=Bc(i,r.mode,l)).return=r,r=o}return s(r);case P:return e(r,o,(u=i._init)(i._payload),l)}if(te(i))return h(r,o,i,l);if(O(i))return m(r,o,i,l);qo(r,i)}return"string"==typeof i&&""!==i||"number"==typeof i?(i=""+i,null!==o&&6===o.tag?(n(r,o.sibling),(o=a(o,i)).return=r,r=o):(n(r,o),(o=Dc(i,r.mode,l)).return=r,r=o),s(r)):n(r,o)}}var Qo=Yo(!0),Xo=Yo(!1),Jo={},ei=_a(Jo),ti=_a(Jo),ni=_a(Jo);function ri(e){if(e===Jo)throw Error(o(174));return e}function ai(e,t){switch(Ca(ni,t),Ca(ti,e),Ca(ei,Jo),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:le(null,"");break;default:t=le(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}Ea(ei),Ca(ei,t)}function oi(){Ea(ei),Ea(ti),Ea(ni)}function ii(e){ri(ni.current);var t=ri(ei.current),n=le(t,e.type);t!==n&&(Ca(ti,e),Ca(ei,n))}function si(e){ti.current===e&&(Ea(ei),Ea(ti))}var li=_a(0);function ci(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(128&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var ui=[];function di(){for(var e=0;e<ui.length;e++)ui[e]._workInProgressVersionPrimary=null;ui.length=0}var pi=w.ReactCurrentDispatcher,fi=w.ReactCurrentBatchConfig,gi=0,hi=null,mi=null,bi=null,yi=!1,vi=!1,wi=0,ki=0;function xi(){throw Error(o(321))}function Si(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!sr(e[n],t[n]))return!1;return!0}function _i(e,t,n,r,a,i){if(gi=i,hi=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,pi.current=null===e||null===e.memoizedState?ss:ls,e=n(r,a),vi){i=0;do{if(vi=!1,wi=0,25<=i)throw Error(o(301));i+=1,bi=mi=null,t.updateQueue=null,pi.current=cs,e=n(r,a)}while(vi)}if(pi.current=is,t=null!==mi&&null!==mi.next,gi=0,bi=mi=hi=null,yi=!1,t)throw Error(o(300));return e}function Ei(){var e=0!==wi;return wi=0,e}function Ci(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===bi?hi.memoizedState=bi=e:bi=bi.next=e,bi}function Ti(){if(null===mi){var e=hi.alternate;e=null!==e?e.memoizedState:null}else e=mi.next;var t=null===bi?hi.memoizedState:bi.next;if(null!==t)bi=t,mi=e;else{if(null===e)throw Error(o(310));e={memoizedState:(mi=e).memoizedState,baseState:mi.baseState,baseQueue:mi.baseQueue,queue:mi.queue,next:null},null===bi?hi.memoizedState=bi=e:bi=bi.next=e}return bi}function Ai(e,t){return"function"==typeof t?t(e):t}function ji(e){var t=Ti(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=mi,a=r.baseQueue,i=n.pending;if(null!==i){if(null!==a){var s=a.next;a.next=i.next,i.next=s}r.baseQueue=a=i,n.pending=null}if(null!==a){i=a.next,r=r.baseState;var l=s=null,c=null,u=i;do{var d=u.lane;if((gi&d)===d)null!==c&&(c=c.next={lane:0,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null}),r=u.hasEagerState?u.eagerState:e(r,u.action);else{var p={lane:d,action:u.action,hasEagerState:u.hasEagerState,eagerState:u.eagerState,next:null};null===c?(l=c=p,s=r):c=c.next=p,hi.lanes|=d,Ml|=d}u=u.next}while(null!==u&&u!==i);null===c?s=r:c.next=l,sr(r,t.memoizedState)||(ws=!0),t.memoizedState=r,t.baseState=s,t.baseQueue=c,n.lastRenderedState=r}if(null!==(e=n.interleaved)){a=e;do{i=a.lane,hi.lanes|=i,Ml|=i,a=a.next}while(a!==e)}else null===a&&(n.lanes=0);return[t.memoizedState,n.dispatch]}function Ni(e){var t=Ti(),n=t.queue;if(null===n)throw Error(o(311));n.lastRenderedReducer=e;var r=n.dispatch,a=n.pending,i=t.memoizedState;if(null!==a){n.pending=null;var s=a=a.next;do{i=e(i,s.action),s=s.next}while(s!==a);sr(i,t.memoizedState)||(ws=!0),t.memoizedState=i,null===t.baseQueue&&(t.baseState=i),n.lastRenderedState=i}return[i,r]}function Li(){}function Pi(e,t){var n=hi,r=Ti(),a=t(),i=!sr(r.memoizedState,a);if(i&&(r.memoizedState=a,ws=!0),r=r.queue,Hi(Oi.bind(null,n,r,e),[e]),r.getSnapshot!==t||i||null!==bi&&1&bi.memoizedState.tag){if(n.flags|=2048,Bi(9,Ri.bind(null,n,r,a,t),void 0,null),null===Nl)throw Error(o(349));0!=(30&gi)||Ii(n,t,a)}return a}function Ii(e,t,n){e.flags|=16384,e={getSnapshot:t,value:n},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.stores=[e]):null===(n=t.stores)?t.stores=[e]:n.push(e)}function Ri(e,t,n,r){t.value=n,t.getSnapshot=r,Fi(t)&&Mi(e)}function Oi(e,t,n){return n((function(){Fi(t)&&Mi(e)}))}function Fi(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!sr(e,n)}catch(r){return!0}}function Mi(e){var t=No(e,1);null!==t&&rc(t,e,1,-1)}function Di(e){var t=Ci();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Ai,lastRenderedState:e},t.queue=e,e=e.dispatch=ns.bind(null,hi,e),[t.memoizedState,e]}function Bi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=hi.updateQueue)?(t={lastEffect:null,stores:null},hi.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function zi(){return Ti().memoizedState}function $i(e,t,n,r){var a=Ci();hi.flags|=e,a.memoizedState=Bi(1|t,n,void 0,void 0===r?null:r)}function Ui(e,t,n,r){var a=Ti();r=void 0===r?null:r;var o=void 0;if(null!==mi){var i=mi.memoizedState;if(o=i.destroy,null!==r&&Si(r,i.deps))return void(a.memoizedState=Bi(t,n,o,r))}hi.flags|=e,a.memoizedState=Bi(1|t,n,o,r)}function Zi(e,t){return $i(8390656,8,e,t)}function Hi(e,t){return Ui(2048,8,e,t)}function Vi(e,t){return Ui(4,2,e,t)}function Wi(e,t){return Ui(4,4,e,t)}function Gi(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function qi(e,t,n){return n=null!=n?n.concat([e]):null,Ui(4,4,Gi.bind(null,t,e),n)}function Ki(){}function Yi(e,t){var n=Ti();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Qi(e,t){var n=Ti();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&Si(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Xi(e,t,n){return 0==(21&gi)?(e.baseState&&(e.baseState=!1,ws=!0),e.memoizedState=n):(sr(n,t)||(n=ht(),hi.lanes|=n,Ml|=n,e.baseState=!0),t)}function Ji(e,t){var n=vt;vt=0!==n&&4>n?n:4,e(!0);var r=fi.transition;fi.transition={};try{e(!1),t()}finally{vt=n,fi.transition=r}}function es(){return Ti().memoizedState}function ts(e,t,n){var r=nc(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},rs(e))as(t,n);else if(null!==(n=jo(e,t,n,r))){rc(n,e,r,tc()),os(n,t,r)}}function ns(e,t,n){var r=nc(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(rs(e))as(t,a);else{var o=e.alternate;if(0===e.lanes&&(null===o||0===o.lanes)&&null!==(o=t.lastRenderedReducer))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,sr(s,i)){var l=t.interleaved;return null===l?(a.next=a,Ao(t)):(a.next=l.next,l.next=a),void(t.interleaved=a)}}catch(c){}null!==(n=jo(e,t,a,r))&&(rc(n,e,r,a=tc()),os(n,t,r))}}function rs(e){var t=e.alternate;return e===hi||null!==t&&t===hi}function as(e,t){vi=yi=!0;var n=e.pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function os(e,t,n){if(0!=(4194240&n)){var r=t.lanes;n|=r&=e.pendingLanes,t.lanes=n,yt(e,n)}}var is={readContext:Co,useCallback:xi,useContext:xi,useEffect:xi,useImperativeHandle:xi,useInsertionEffect:xi,useLayoutEffect:xi,useMemo:xi,useReducer:xi,useRef:xi,useState:xi,useDebugValue:xi,useDeferredValue:xi,useTransition:xi,useMutableSource:xi,useSyncExternalStore:xi,useId:xi,unstable_isNewReconciler:!1},ss={readContext:Co,useCallback:function(e,t){return Ci().memoizedState=[e,void 0===t?null:t],e},useContext:Co,useEffect:Zi,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,$i(4194308,4,Gi.bind(null,t,e),n)},useLayoutEffect:function(e,t){return $i(4194308,4,e,t)},useInsertionEffect:function(e,t){return $i(4,2,e,t)},useMemo:function(e,t){var n=Ci();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ci();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=ts.bind(null,hi,e),[r.memoizedState,e]},useRef:function(e){return e={current:e},Ci().memoizedState=e},useState:Di,useDebugValue:Ki,useDeferredValue:function(e){return Ci().memoizedState=e},useTransition:function(){var e=Di(!1),t=e[0];return e=Ji.bind(null,e[1]),Ci().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=hi,a=Ci();if(ao){if(void 0===n)throw Error(o(407));n=n()}else{if(n=t(),null===Nl)throw Error(o(349));0!=(30&gi)||Ii(r,t,n)}a.memoizedState=n;var i={value:n,getSnapshot:t};return a.queue=i,Zi(Oi.bind(null,r,i,e),[e]),r.flags|=2048,Bi(9,Ri.bind(null,r,i,n,t),void 0,null),n},useId:function(){var e=Ci(),t=Nl.identifierPrefix;if(ao){var n=Qa;t=":"+t+"R"+(n=(Ya&~(1<<32-it(Ya)-1)).toString(32)+n),0<(n=wi++)&&(t+="H"+n.toString(32)),t+=":"}else t=":"+t+"r"+(n=ki++).toString(32)+":";return e.memoizedState=t},unstable_isNewReconciler:!1},ls={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Hi,useImperativeHandle:qi,useInsertionEffect:Vi,useLayoutEffect:Wi,useMemo:Qi,useReducer:ji,useRef:zi,useState:function(){return ji(Ai)},useDebugValue:Ki,useDeferredValue:function(e){return Xi(Ti(),mi.memoizedState,e)},useTransition:function(){return[ji(Ai)[0],Ti().memoizedState]},useMutableSource:Li,useSyncExternalStore:Pi,useId:es,unstable_isNewReconciler:!1},cs={readContext:Co,useCallback:Yi,useContext:Co,useEffect:Hi,useImperativeHandle:qi,useInsertionEffect:Vi,useLayoutEffect:Wi,useMemo:Qi,useReducer:Ni,useRef:zi,useState:function(){return Ni(Ai)},useDebugValue:Ki,useDeferredValue:function(e){var t=Ti();return null===mi?t.memoizedState=e:Xi(t,mi.memoizedState,e)},useTransition:function(){return[Ni(Ai)[0],Ti().memoizedState]},useMutableSource:Li,useSyncExternalStore:Pi,useId:es,unstable_isNewReconciler:!1};function us(e,t){try{var n="",r=t;do{n+=$(r),r=r.return}while(r);var a=n}catch(o){a="\nError generating stack: "+o.message+"\n"+o.stack}return{value:e,source:t,stack:a,digest:null}}function ds(e,t,n){return{value:e,source:null,stack:null!=n?n:null,digest:null!=t?t:null}}function ps(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}var fs="function"==typeof WeakMap?WeakMap:Map;function gs(e,t,n){(n=Ro(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Vl||(Vl=!0,Wl=r),ps(0,t)},n}function hs(e,t,n){(n=Ro(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var a=t.value;n.payload=function(){return r(a)},n.callback=function(){ps(0,t)}}var o=e.stateNode;return null!==o&&"function"==typeof o.componentDidCatch&&(n.callback=function(){ps(0,t),"function"!=typeof r&&(null===Gl?Gl=new Set([this]):Gl.add(this));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}function ms(e,t,n){var r=e.pingCache;if(null===r){r=e.pingCache=new fs;var a=new Set;r.set(t,a)}else void 0===(a=r.get(t))&&(a=new Set,r.set(t,a));a.has(n)||(a.add(n),e=Cc.bind(null,e,t,n),t.then(e,e))}function bs(e){do{var t;if((t=13===e.tag)&&(t=null===(t=e.memoizedState)||null!==t.dehydrated),t)return e;e=e.return}while(null!==e);return null}function ys(e,t,n,r,a){return 0==(1&e.mode)?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,1===n.tag&&(null===n.alternate?n.tag=17:((t=Ro(-1,1)).tag=2,Oo(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=a,e)}var vs=w.ReactCurrentOwner,ws=!1;function ks(e,t,n,r){t.child=null===e?Xo(t,null,n,r):Qo(t,e.child,n,r)}function xs(e,t,n,r,a){n=n.render;var o=t.ref;return Eo(t,a),r=_i(e,t,n,r,o,a),n=Ei(),null===e||ws?(ao&&n&&eo(t),t.flags|=1,ks(e,t,r,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Vs(e,t,a))}function Ss(e,t,n,r,a){if(null===e){var o=n.type;return"function"!=typeof o||Ic(o)||void 0!==o.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Oc(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=o,_s(e,t,o,r,a))}if(o=e.child,0==(e.lanes&a)){var i=o.memoizedProps;if((n=null!==(n=n.compare)?n:lr)(i,r)&&e.ref===t.ref)return Vs(e,t,a)}return t.flags|=1,(e=Rc(o,r)).ref=t.ref,e.return=t,t.child=e}function _s(e,t,n,r,a){if(null!==e){var o=e.memoizedProps;if(lr(o,r)&&e.ref===t.ref){if(ws=!1,t.pendingProps=r=o,0==(e.lanes&a))return t.lanes=e.lanes,Vs(e,t,a);0!=(131072&e.flags)&&(ws=!0)}}return Ts(e,t,n,r,a)}function Es(e,t,n){var r=t.pendingProps,a=r.children,o=null!==e?e.memoizedState:null;if("hidden"===r.mode)if(0==(1&t.mode))t.memoizedState={baseLanes:0,cachePool:null,transitions:null},Ca(Rl,Il),Il|=n;else{if(0==(1073741824&n))return e=null!==o?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,Ca(Rl,Il),Il|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=null!==o?o.baseLanes:n,Ca(Rl,Il),Il|=r}else null!==o?(r=o.baseLanes|n,t.memoizedState=null):r=n,Ca(Rl,Il),Il|=r;return ks(e,t,a,n),t.child}function Cs(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function Ts(e,t,n,r,a){var o=Pa(n)?Na:Aa.current;return o=La(t,o),Eo(t,a),n=_i(e,t,n,r,o,a),r=Ei(),null===e||ws?(ao&&r&&eo(t),t.flags|=1,ks(e,t,n,a),t.child):(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~a,Vs(e,t,a))}function As(e,t,n,r,a){if(Pa(n)){var o=!0;Fa(t)}else o=!1;if(Eo(t,a),null===t.stateNode)Hs(e,t),Ho(t,n,r),Wo(t,n,r,a),r=!0;else if(null===e){var i=t.stateNode,s=t.memoizedProps;i.props=s;var l=i.context,c=n.contextType;"object"==typeof c&&null!==c?c=Co(c):c=La(t,c=Pa(n)?Na:Aa.current);var u=n.getDerivedStateFromProps,d="function"==typeof u||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==r||l!==c)&&Vo(t,i,r,c),Lo=!1;var p=t.memoizedState;i.state=p,Do(t,r,i,a),l=t.memoizedState,s!==r||p!==l||ja.current||Lo?("function"==typeof u&&($o(t,n,u,r),l=t.memoizedState),(s=Lo||Zo(t,n,s,r,p,l,c))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4194308)):("function"==typeof i.componentDidMount&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),i.props=r,i.state=l,i.context=c,r=s):("function"==typeof i.componentDidMount&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,Io(e,t),s=t.memoizedProps,c=t.type===t.elementType?s:bo(t.type,s),i.props=c,d=t.pendingProps,p=i.context,"object"==typeof(l=n.contextType)&&null!==l?l=Co(l):l=La(t,l=Pa(n)?Na:Aa.current);var f=n.getDerivedStateFromProps;(u="function"==typeof f||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(s!==d||p!==l)&&Vo(t,i,r,l),Lo=!1,p=t.memoizedState,i.state=p,Do(t,r,i,a);var g=t.memoizedState;s!==d||p!==g||ja.current||Lo?("function"==typeof f&&($o(t,n,f,r),g=t.memoizedState),(c=Lo||Zo(t,n,c,r,p,g,l)||!1)?(u||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,g,l),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,g,l)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=1024)):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=g),i.props=r,i.state=g,i.context=l,r=c):("function"!=typeof i.componentDidUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||s===e.memoizedProps&&p===e.memoizedState||(t.flags|=1024),r=!1)}return js(e,t,n,r,o,a)}function js(e,t,n,r,a,o){Cs(e,t);var i=0!=(128&t.flags);if(!r&&!i)return a&&Ma(t,n,!1),Vs(e,t,o);r=t.stateNode,vs.current=t;var s=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Qo(t,e.child,null,o),t.child=Qo(t,null,s,o)):ks(e,t,s,o),t.memoizedState=r.state,a&&Ma(t,n,!0),t.child}function Ns(e){var t=e.stateNode;t.pendingContext?Ra(0,t.pendingContext,t.pendingContext!==t.context):t.context&&Ra(0,t.context,!1),ai(e,t.containerInfo)}function Ls(e,t,n,r,a){return go(),ho(a),t.flags|=256,ks(e,t,n,r),t.child}var Ps,Is,Rs,Os,Fs={dehydrated:null,treeContext:null,retryLane:0};function Ms(e){return{baseLanes:e,cachePool:null,transitions:null}}function Ds(e,t,n){var r,a=t.pendingProps,i=li.current,s=!1,l=0!=(128&t.flags);if((r=l)||(r=(null===e||null!==e.memoizedState)&&0!=(2&i)),r?(s=!0,t.flags&=-129):null!==e&&null===e.memoizedState||(i|=1),Ca(li,1&i),null===e)return co(t),null!==(e=t.memoizedState)&&null!==(e=e.dehydrated)?(0==(1&t.mode)?t.lanes=1:"$!"===e.data?t.lanes=8:t.lanes=1073741824,null):(l=a.children,e=a.fallback,s?(a=t.mode,s=t.child,l={mode:"hidden",children:l},0==(1&a)&&null!==s?(s.childLanes=0,s.pendingProps=l):s=Mc(l,a,0,null),e=Fc(e,a,n,null),s.return=t,e.return=t,s.sibling=e,t.child=s,t.child.memoizedState=Ms(n),t.memoizedState=Fs,e):Bs(t,l));if(null!==(i=e.memoizedState)&&null!==(r=i.dehydrated))return function(e,t,n,r,a,i,s){if(n)return 256&t.flags?(t.flags&=-257,zs(e,t,s,r=ds(Error(o(422))))):null!==t.memoizedState?(t.child=e.child,t.flags|=128,null):(i=r.fallback,a=t.mode,r=Mc({mode:"visible",children:r.children},a,0,null),(i=Fc(i,a,s,null)).flags|=2,r.return=t,i.return=t,r.sibling=i,t.child=r,0!=(1&t.mode)&&Qo(t,e.child,null,s),t.child.memoizedState=Ms(s),t.memoizedState=Fs,i);if(0==(1&t.mode))return zs(e,t,s,null);if("$!"===a.data){if(r=a.nextSibling&&a.nextSibling.dataset)var l=r.dgst;return r=l,zs(e,t,s,r=ds(i=Error(o(419)),r,void 0))}if(l=0!=(s&e.childLanes),ws||l){if(null!==(r=Nl)){switch(s&-s){case 4:a=2;break;case 16:a=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:a=32;break;case 536870912:a=268435456;break;default:a=0}0!==(a=0!=(a&(r.suspendedLanes|s))?0:a)&&a!==i.retryLane&&(i.retryLane=a,No(e,a),rc(r,e,a,-1))}return mc(),zs(e,t,s,r=ds(Error(o(421))))}return"$?"===a.data?(t.flags|=128,t.child=e.child,t=Ac.bind(null,e),a._reactRetry=t,null):(e=i.treeContext,ro=ca(a.nextSibling),no=t,ao=!0,oo=null,null!==e&&(Ga[qa++]=Ya,Ga[qa++]=Qa,Ga[qa++]=Ka,Ya=e.id,Qa=e.overflow,Ka=t),t=Bs(t,r.children),t.flags|=4096,t)}(e,t,l,a,r,i,n);if(s){s=a.fallback,l=t.mode,r=(i=e.child).sibling;var c={mode:"hidden",children:a.children};return 0==(1&l)&&t.child!==i?((a=t.child).childLanes=0,a.pendingProps=c,t.deletions=null):(a=Rc(i,c)).subtreeFlags=14680064&i.subtreeFlags,null!==r?s=Rc(r,s):(s=Fc(s,l,n,null)).flags|=2,s.return=t,a.return=t,a.sibling=s,t.child=a,a=s,s=t.child,l=null===(l=e.child.memoizedState)?Ms(n):{baseLanes:l.baseLanes|n,cachePool:null,transitions:l.transitions},s.memoizedState=l,s.childLanes=e.childLanes&~n,t.memoizedState=Fs,a}return e=(s=e.child).sibling,a=Rc(s,{mode:"visible",children:a.children}),0==(1&t.mode)&&(a.lanes=n),a.return=t,a.sibling=null,null!==e&&(null===(n=t.deletions)?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=a,t.memoizedState=null,a}function Bs(e,t){return(t=Mc({mode:"visible",children:t},e.mode,0,null)).return=e,e.child=t}function zs(e,t,n,r){return null!==r&&ho(r),Qo(t,e.child,null,n),(e=Bs(t,t.pendingProps.children)).flags|=2,t.memoizedState=null,e}function $s(e,t,n){e.lanes|=t;var r=e.alternate;null!==r&&(r.lanes|=t),_o(e.return,t,n)}function Us(e,t,n,r,a){var o=e.memoizedState;null===o?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=a)}function Zs(e,t,n){var r=t.pendingProps,a=r.revealOrder,o=r.tail;if(ks(e,t,r.children,n),0!=(2&(r=li.current)))r=1&r|2,t.flags|=128;else{if(null!==e&&0!=(128&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&$s(e,n,t);else if(19===e.tag)$s(e,n,t);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(Ca(li,r),0==(1&t.mode))t.memoizedState=null;else switch(a){case"forwards":for(n=t.child,a=null;null!==n;)null!==(e=n.alternate)&&null===ci(e)&&(a=n),n=n.sibling;null===(n=a)?(a=t.child,t.child=null):(a=n.sibling,n.sibling=null),Us(t,!1,a,n,o);break;case"backwards":for(n=null,a=t.child,t.child=null;null!==a;){if(null!==(e=a.alternate)&&null===ci(e)){t.child=a;break}e=a.sibling,a.sibling=n,n=a,a=e}Us(t,!0,n,null,o);break;case"together":Us(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function Hs(e,t){0==(1&t.mode)&&null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2)}function Vs(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),Ml|=t.lanes,0==(n&t.childLanes))return null;if(null!==e&&t.child!==e.child)throw Error(o(153));if(null!==t.child){for(n=Rc(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Rc(e,e.pendingProps)).return=t;n.sibling=null}return t.child}function Ws(e,t){if(!ao)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Gs(e){var t=null!==e.alternate&&e.alternate.child===e.child,n=0,r=0;if(t)for(var a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=14680064&a.subtreeFlags,r|=14680064&a.flags,a.return=e,a=a.sibling;else for(a=e.child;null!==a;)n|=a.lanes|a.childLanes,r|=a.subtreeFlags,r|=a.flags,a.return=e,a=a.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function qs(e,t,n){var r=t.pendingProps;switch(to(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Gs(t),null;case 1:case 17:return Pa(t.type)&&Ia(),Gs(t),null;case 3:return r=t.stateNode,oi(),Ea(ja),Ea(Aa),di(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(po(t)?t.flags|=4:null===e||e.memoizedState.isDehydrated&&0==(256&t.flags)||(t.flags|=1024,null!==oo&&(sc(oo),oo=null))),Is(e,t),Gs(t),null;case 5:si(t);var a=ri(ni.current);if(n=t.type,null!==e&&null!=t.stateNode)Rs(e,t,n,r,a),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(null===t.stateNode)throw Error(o(166));return Gs(t),null}if(e=ri(ei.current),po(t)){r=t.stateNode,n=t.type;var i=t.memoizedProps;switch(r[pa]=t,r[fa]=i,e=0!=(1&t.mode),n){case"dialog":Br("cancel",r),Br("close",r);break;case"iframe":case"object":case"embed":Br("load",r);break;case"video":case"audio":for(a=0;a<Or.length;a++)Br(Or[a],r);break;case"source":Br("error",r);break;case"img":case"image":case"link":Br("error",r),Br("load",r);break;case"details":Br("toggle",r);break;case"input":Y(r,i),Br("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!i.multiple},Br("invalid",r);break;case"textarea":ae(r,i),Br("invalid",r)}for(var l in ye(n,i),a=null,i)if(i.hasOwnProperty(l)){var c=i[l];"children"===l?"string"==typeof c?r.textContent!==c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),a=["children",c]):"number"==typeof c&&r.textContent!==""+c&&(!0!==i.suppressHydrationWarning&&Xr(r.textContent,c,e),a=["children",""+c]):s.hasOwnProperty(l)&&null!=c&&"onScroll"===l&&Br("scroll",r)}switch(n){case"input":W(r),J(r,i,!0);break;case"textarea":W(r),ie(r);break;case"select":case"option":break;default:"function"==typeof i.onClick&&(r.onclick=Jr)}r=a,t.updateQueue=r,null!==r&&(t.flags|=4)}else{l=9===a.nodeType?a:a.ownerDocument,"http://www.w3.org/1999/xhtml"===e&&(e=se(n)),"http://www.w3.org/1999/xhtml"===e?"script"===n?((e=l.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=l.createElement(n,{is:r.is}):(e=l.createElement(n),"select"===n&&(l=e,r.multiple?l.multiple=!0:r.size&&(l.size=r.size))):e=l.createElementNS(e,n),e[pa]=t,e[fa]=r,Ps(e,t,!1,!1),t.stateNode=e;e:{switch(l=ve(n,r),n){case"dialog":Br("cancel",e),Br("close",e),a=r;break;case"iframe":case"object":case"embed":Br("load",e),a=r;break;case"video":case"audio":for(a=0;a<Or.length;a++)Br(Or[a],e);a=r;break;case"source":Br("error",e),a=r;break;case"img":case"image":case"link":Br("error",e),Br("load",e),a=r;break;case"details":Br("toggle",e),a=r;break;case"input":Y(e,r),a=K(e,r),Br("invalid",e);break;case"option":default:a=r;break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=M({},r,{value:void 0}),Br("invalid",e);break;case"textarea":ae(e,r),a=re(e,r),Br("invalid",e)}for(i in ye(n,a),c=a)if(c.hasOwnProperty(i)){var u=c[i];"style"===i?me(e,u):"dangerouslySetInnerHTML"===i?null!=(u=u?u.__html:void 0)&&de(e,u):"children"===i?"string"==typeof u?("textarea"!==n||""!==u)&&pe(e,u):"number"==typeof u&&pe(e,""+u):"suppressContentEditableWarning"!==i&&"suppressHydrationWarning"!==i&&"autoFocus"!==i&&(s.hasOwnProperty(i)?null!=u&&"onScroll"===i&&Br("scroll",e):null!=u&&v(e,i,u,l))}switch(n){case"input":W(e),J(e,r,!1);break;case"textarea":W(e),ie(e);break;case"option":null!=r.value&&e.setAttribute("value",""+H(r.value));break;case"select":e.multiple=!!r.multiple,null!=(i=r.value)?ne(e,!!r.multiple,i,!1):null!=r.defaultValue&&ne(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=Jr)}switch(n){case"button":case"input":case"select":case"textarea":r=!!r.autoFocus;break e;case"img":r=!0;break e;default:r=!1}}r&&(t.flags|=4)}null!==t.ref&&(t.flags|=512,t.flags|=2097152)}return Gs(t),null;case 6:if(e&&null!=t.stateNode)Os(e,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(o(166));if(n=ri(ni.current),ri(ei.current),po(t)){if(r=t.stateNode,n=t.memoizedProps,r[pa]=t,(i=r.nodeValue!==n)&&null!==(e=no))switch(e.tag){case 3:Xr(r.nodeValue,n,0!=(1&e.mode));break;case 5:!0!==e.memoizedProps.suppressHydrationWarning&&Xr(r.nodeValue,n,0!=(1&e.mode))}i&&(t.flags|=4)}else(r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[pa]=t,t.stateNode=r}return Gs(t),null;case 13:if(Ea(li),r=t.memoizedState,null===e||null!==e.memoizedState&&null!==e.memoizedState.dehydrated){if(ao&&null!==ro&&0!=(1&t.mode)&&0==(128&t.flags))fo(),go(),t.flags|=98560,i=!1;else if(i=po(t),null!==r&&null!==r.dehydrated){if(null===e){if(!i)throw Error(o(318));if(!(i=null!==(i=t.memoizedState)?i.dehydrated:null))throw Error(o(317));i[pa]=t}else go(),0==(128&t.flags)&&(t.memoizedState=null),t.flags|=4;Gs(t),i=!1}else null!==oo&&(sc(oo),oo=null),i=!0;if(!i)return 65536&t.flags?t:null}return 0!=(128&t.flags)?(t.lanes=n,t):((r=null!==r)!==(null!==e&&null!==e.memoizedState)&&r&&(t.child.flags|=8192,0!=(1&t.mode)&&(null===e||0!=(1&li.current)?0===Ol&&(Ol=3):mc())),null!==t.updateQueue&&(t.flags|=4),Gs(t),null);case 4:return oi(),Is(e,t),null===e&&Ur(t.stateNode.containerInfo),Gs(t),null;case 10:return So(t.type._context),Gs(t),null;case 19:if(Ea(li),null===(i=t.memoizedState))return Gs(t),null;if(r=0!=(128&t.flags),null===(l=i.rendering))if(r)Ws(i,!1);else{if(0!==Ol||null!==e&&0!=(128&e.flags))for(e=t.child;null!==e;){if(null!==(l=ci(e))){for(t.flags|=128,Ws(i,!1),null!==(r=l.updateQueue)&&(t.updateQueue=r,t.flags|=4),t.subtreeFlags=0,r=n,n=t.child;null!==n;)e=r,(i=n).flags&=14680066,null===(l=i.alternate)?(i.childLanes=0,i.lanes=e,i.child=null,i.subtreeFlags=0,i.memoizedProps=null,i.memoizedState=null,i.updateQueue=null,i.dependencies=null,i.stateNode=null):(i.childLanes=l.childLanes,i.lanes=l.lanes,i.child=l.child,i.subtreeFlags=0,i.deletions=null,i.memoizedProps=l.memoizedProps,i.memoizedState=l.memoizedState,i.updateQueue=l.updateQueue,i.type=l.type,e=l.dependencies,i.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return Ca(li,1&li.current|2),t.child}e=e.sibling}null!==i.tail&&Qe()>Zl&&(t.flags|=128,r=!0,Ws(i,!1),t.lanes=4194304)}else{if(!r)if(null!==(e=ci(l))){if(t.flags|=128,r=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),Ws(i,!0),null===i.tail&&"hidden"===i.tailMode&&!l.alternate&&!ao)return Gs(t),null}else 2*Qe()-i.renderingStartTime>Zl&&1073741824!==n&&(t.flags|=128,r=!0,Ws(i,!1),t.lanes=4194304);i.isBackwards?(l.sibling=t.child,t.child=l):(null!==(n=i.last)?n.sibling=l:t.child=l,i.last=l)}return null!==i.tail?(t=i.tail,i.rendering=t,i.tail=t.sibling,i.renderingStartTime=Qe(),t.sibling=null,n=li.current,Ca(li,r?1&n|2:1&n),t):(Gs(t),null);case 22:case 23:return pc(),r=null!==t.memoizedState,null!==e&&null!==e.memoizedState!==r&&(t.flags|=8192),r&&0!=(1&t.mode)?0!=(1073741824&Il)&&(Gs(t),6&t.subtreeFlags&&(t.flags|=8192)):Gs(t),null;case 24:case 25:return null}throw Error(o(156,t.tag))}function Ks(e,t){switch(to(t),t.tag){case 1:return Pa(t.type)&&Ia(),65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 3:return oi(),Ea(ja),Ea(Aa),di(),0!=(65536&(e=t.flags))&&0==(128&e)?(t.flags=-65537&e|128,t):null;case 5:return si(t),null;case 13:if(Ea(li),null!==(e=t.memoizedState)&&null!==e.dehydrated){if(null===t.alternate)throw Error(o(340));go()}return 65536&(e=t.flags)?(t.flags=-65537&e|128,t):null;case 19:return Ea(li),null;case 4:return oi(),null;case 10:return So(t.type._context),null;case 22:case 23:return pc(),null;default:return null}}Ps=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Is=function(){},Rs=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,ri(ei.current);var o,i=null;switch(n){case"input":a=K(e,a),r=K(e,r),i=[];break;case"select":a=M({},a,{value:void 0}),r=M({},r,{value:void 0}),i=[];break;case"textarea":a=re(e,a),r=re(e,r),i=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=Jr)}for(u in ye(n,r),n=null,a)if(!r.hasOwnProperty(u)&&a.hasOwnProperty(u)&&null!=a[u])if("style"===u){var l=a[u];for(o in l)l.hasOwnProperty(o)&&(n||(n={}),n[o]="")}else"dangerouslySetInnerHTML"!==u&&"children"!==u&&"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&"autoFocus"!==u&&(s.hasOwnProperty(u)?i||(i=[]):(i=i||[]).push(u,null));for(u in r){var c=r[u];if(l=null!=a?a[u]:void 0,r.hasOwnProperty(u)&&c!==l&&(null!=c||null!=l))if("style"===u)if(l){for(o in l)!l.hasOwnProperty(o)||c&&c.hasOwnProperty(o)||(n||(n={}),n[o]="");for(o in c)c.hasOwnProperty(o)&&l[o]!==c[o]&&(n||(n={}),n[o]=c[o])}else n||(i||(i=[]),i.push(u,n)),n=c;else"dangerouslySetInnerHTML"===u?(c=c?c.__html:void 0,l=l?l.__html:void 0,null!=c&&l!==c&&(i=i||[]).push(u,c)):"children"===u?"string"!=typeof c&&"number"!=typeof c||(i=i||[]).push(u,""+c):"suppressContentEditableWarning"!==u&&"suppressHydrationWarning"!==u&&(s.hasOwnProperty(u)?(null!=c&&"onScroll"===u&&Br("scroll",e),i||l===c||(i=[])):(i=i||[]).push(u,c))}n&&(i=i||[]).push("style",n);var u=i;(t.updateQueue=u)&&(t.flags|=4)}},Os=function(e,t,n,r){n!==r&&(t.flags|=4)};var Ys=!1,Qs=!1,Xs="function"==typeof WeakSet?WeakSet:Set,Js=null;function el(e,t){var n=e.ref;if(null!==n)if("function"==typeof n)try{n(null)}catch(r){Ec(e,t,r)}else n.current=null}function tl(e,t,n){try{n()}catch(r){Ec(e,t,r)}}var nl=!1;function rl(e,t,n){var r=t.updateQueue;if(null!==(r=null!==r?r.lastEffect:null)){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,void 0!==o&&tl(t,n,o)}a=a.next}while(a!==r)}}function al(e,t){if(null!==(t=null!==(t=t.updateQueue)?t.lastEffect:null)){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function ol(e){var t=e.ref;if(null!==t){var n=e.stateNode;e.tag,e=n,"function"==typeof t?t(e):t.current=e}}function il(e){var t=e.alternate;null!==t&&(e.alternate=null,il(t)),e.child=null,e.deletions=null,e.sibling=null,5===e.tag&&(null!==(t=e.stateNode)&&(delete t[pa],delete t[fa],delete t[ha],delete t[ma],delete t[ba])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function sl(e){return 5===e.tag||3===e.tag||4===e.tag}function ll(e){e:for(;;){for(;null===e.sibling;){if(null===e.return||sl(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;5!==e.tag&&6!==e.tag&&18!==e.tag;){if(2&e.flags)continue e;if(null===e.child||4===e.tag)continue e;e.child.return=e,e=e.child}if(!(2&e.flags))return e.stateNode}}function cl(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=Jr));else if(4!==r&&null!==(e=e.child))for(cl(e,t,n),e=e.sibling;null!==e;)cl(e,t,n),e=e.sibling}function ul(e,t,n){var r=e.tag;if(5===r||6===r)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(ul(e,t,n),e=e.sibling;null!==e;)ul(e,t,n),e=e.sibling}var dl=null,pl=!1;function fl(e,t,n){for(n=n.child;null!==n;)gl(e,t,n),n=n.sibling}function gl(e,t,n){if(ot&&"function"==typeof ot.onCommitFiberUnmount)try{ot.onCommitFiberUnmount(at,n)}catch(s){}switch(n.tag){case 5:Qs||el(n,t);case 6:var r=dl,a=pl;dl=null,fl(e,t,n),pl=a,null!==(dl=r)&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?e.parentNode.removeChild(n):e.removeChild(n)):dl.removeChild(n.stateNode));break;case 18:null!==dl&&(pl?(e=dl,n=n.stateNode,8===e.nodeType?la(e.parentNode,n):1===e.nodeType&&la(e,n),Ut(e)):la(dl,n.stateNode));break;case 4:r=dl,a=pl,dl=n.stateNode.containerInfo,pl=!0,fl(e,t,n),dl=r,pl=a;break;case 0:case 11:case 14:case 15:if(!Qs&&(null!==(r=n.updateQueue)&&null!==(r=r.lastEffect))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,void 0!==i&&(0!=(2&o)||0!=(4&o))&&tl(n,t,i),a=a.next}while(a!==r)}fl(e,t,n);break;case 1:if(!Qs&&(el(n,t),"function"==typeof(r=n.stateNode).componentWillUnmount))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){Ec(n,t,s)}fl(e,t,n);break;case 21:fl(e,t,n);break;case 22:1&n.mode?(Qs=(r=Qs)||null!==n.memoizedState,fl(e,t,n),Qs=r):fl(e,t,n);break;default:fl(e,t,n)}}function hl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new Xs),t.forEach((function(t){var r=jc.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function ml(e,t){var n=t.deletions;if(null!==n)for(var r=0;r<n.length;r++){var a=n[r];try{var i=e,s=t,l=s;e:for(;null!==l;){switch(l.tag){case 5:dl=l.stateNode,pl=!1;break e;case 3:case 4:dl=l.stateNode.containerInfo,pl=!0;break e}l=l.return}if(null===dl)throw Error(o(160));gl(i,s,a),dl=null,pl=!1;var c=a.alternate;null!==c&&(c.return=null),a.return=null}catch(u){Ec(a,t,u)}}if(12854&t.subtreeFlags)for(t=t.child;null!==t;)bl(t,e),t=t.sibling}function bl(e,t){var n=e.alternate,r=e.flags;switch(e.tag){case 0:case 11:case 14:case 15:if(ml(t,e),yl(e),4&r){try{rl(3,e,e.return),al(3,e)}catch(m){Ec(e,e.return,m)}try{rl(5,e,e.return)}catch(m){Ec(e,e.return,m)}}break;case 1:ml(t,e),yl(e),512&r&&null!==n&&el(n,n.return);break;case 5:if(ml(t,e),yl(e),512&r&&null!==n&&el(n,n.return),32&e.flags){var a=e.stateNode;try{pe(a,"")}catch(m){Ec(e,e.return,m)}}if(4&r&&null!=(a=e.stateNode)){var i=e.memoizedProps,s=null!==n?n.memoizedProps:i,l=e.type,c=e.updateQueue;if(e.updateQueue=null,null!==c)try{"input"===l&&"radio"===i.type&&null!=i.name&&Q(a,i),ve(l,s);var u=ve(l,i);for(s=0;s<c.length;s+=2){var d=c[s],p=c[s+1];"style"===d?me(a,p):"dangerouslySetInnerHTML"===d?de(a,p):"children"===d?pe(a,p):v(a,d,p,u)}switch(l){case"input":X(a,i);break;case"textarea":oe(a,i);break;case"select":var f=a._wrapperState.wasMultiple;a._wrapperState.wasMultiple=!!i.multiple;var g=i.value;null!=g?ne(a,!!i.multiple,g,!1):f!==!!i.multiple&&(null!=i.defaultValue?ne(a,!!i.multiple,i.defaultValue,!0):ne(a,!!i.multiple,i.multiple?[]:"",!1))}a[fa]=i}catch(m){Ec(e,e.return,m)}}break;case 6:if(ml(t,e),yl(e),4&r){if(null===e.stateNode)throw Error(o(162));a=e.stateNode,i=e.memoizedProps;try{a.nodeValue=i}catch(m){Ec(e,e.return,m)}}break;case 3:if(ml(t,e),yl(e),4&r&&null!==n&&n.memoizedState.isDehydrated)try{Ut(t.containerInfo)}catch(m){Ec(e,e.return,m)}break;case 4:default:ml(t,e),yl(e);break;case 13:ml(t,e),yl(e),8192&(a=e.child).flags&&(i=null!==a.memoizedState,a.stateNode.isHidden=i,!i||null!==a.alternate&&null!==a.alternate.memoizedState||(Ul=Qe())),4&r&&hl(e);break;case 22:if(d=null!==n&&null!==n.memoizedState,1&e.mode?(Qs=(u=Qs)||d,ml(t,e),Qs=u):ml(t,e),yl(e),8192&r){if(u=null!==e.memoizedState,(e.stateNode.isHidden=u)&&!d&&0!=(1&e.mode))for(Js=e,d=e.child;null!==d;){for(p=Js=d;null!==Js;){switch(g=(f=Js).child,f.tag){case 0:case 11:case 14:case 15:rl(4,f,f.return);break;case 1:el(f,f.return);var h=f.stateNode;if("function"==typeof h.componentWillUnmount){r=f,n=f.return;try{t=r,h.props=t.memoizedProps,h.state=t.memoizedState,h.componentWillUnmount()}catch(m){Ec(r,n,m)}}break;case 5:el(f,f.return);break;case 22:if(null!==f.memoizedState){xl(p);continue}}null!==g?(g.return=f,Js=g):xl(p)}d=d.sibling}e:for(d=null,p=e;;){if(5===p.tag){if(null===d){d=p;try{a=p.stateNode,u?"function"==typeof(i=a.style).setProperty?i.setProperty("display","none","important"):i.display="none":(l=p.stateNode,s=null!=(c=p.memoizedProps.style)&&c.hasOwnProperty("display")?c.display:null,l.style.display=he("display",s))}catch(m){Ec(e,e.return,m)}}}else if(6===p.tag){if(null===d)try{p.stateNode.nodeValue=u?"":p.memoizedProps}catch(m){Ec(e,e.return,m)}}else if((22!==p.tag&&23!==p.tag||null===p.memoizedState||p===e)&&null!==p.child){p.child.return=p,p=p.child;continue}if(p===e)break e;for(;null===p.sibling;){if(null===p.return||p.return===e)break e;d===p&&(d=null),p=p.return}d===p&&(d=null),p.sibling.return=p.return,p=p.sibling}}break;case 19:ml(t,e),yl(e),4&r&&hl(e);case 21:}}function yl(e){var t=e.flags;if(2&t){try{e:{for(var n=e.return;null!==n;){if(sl(n)){var r=n;break e}n=n.return}throw Error(o(160))}switch(r.tag){case 5:var a=r.stateNode;32&r.flags&&(pe(a,""),r.flags&=-33),ul(e,ll(e),a);break;case 3:case 4:var i=r.stateNode.containerInfo;cl(e,ll(e),i);break;default:throw Error(o(161))}}catch(s){Ec(e,e.return,s)}e.flags&=-3}4096&t&&(e.flags&=-4097)}function vl(e,t,n){Js=e,wl(e,t,n)}function wl(e,t,n){for(var r=0!=(1&e.mode);null!==Js;){var a=Js,o=a.child;if(22===a.tag&&r){var i=null!==a.memoizedState||Ys;if(!i){var s=a.alternate,l=null!==s&&null!==s.memoizedState||Qs;s=Ys;var c=Qs;if(Ys=i,(Qs=l)&&!c)for(Js=a;null!==Js;)l=(i=Js).child,22===i.tag&&null!==i.memoizedState?Sl(a):null!==l?(l.return=i,Js=l):Sl(a);for(;null!==o;)Js=o,wl(o,t,n),o=o.sibling;Js=a,Ys=s,Qs=c}kl(e)}else 0!=(8772&a.subtreeFlags)&&null!==o?(o.return=a,Js=o):kl(e)}}function kl(e){for(;null!==Js;){var t=Js;if(0!=(8772&t.flags)){var n=t.alternate;try{if(0!=(8772&t.flags))switch(t.tag){case 0:case 11:case 15:Qs||al(5,t);break;case 1:var r=t.stateNode;if(4&t.flags&&!Qs)if(null===n)r.componentDidMount();else{var a=t.elementType===t.type?n.memoizedProps:bo(t.type,n.memoizedProps);r.componentDidUpdate(a,n.memoizedState,r.__reactInternalSnapshotBeforeUpdate)}var i=t.updateQueue;null!==i&&Bo(t,i,r);break;case 3:var s=t.updateQueue;if(null!==s){if(n=null,null!==t.child)switch(t.child.tag){case 5:case 1:n=t.child.stateNode}Bo(t,s,n)}break;case 5:var l=t.stateNode;if(null===n&&4&t.flags){n=l;var c=t.memoizedProps;switch(t.type){case"button":case"input":case"select":case"textarea":c.autoFocus&&n.focus();break;case"img":c.src&&(n.src=c.src)}}break;case 6:case 4:case 12:case 19:case 17:case 21:case 22:case 23:case 25:break;case 13:if(null===t.memoizedState){var u=t.alternate;if(null!==u){var d=u.memoizedState;if(null!==d){var p=d.dehydrated;null!==p&&Ut(p)}}}break;default:throw Error(o(163))}Qs||512&t.flags&&ol(t)}catch(f){Ec(t,t.return,f)}}if(t===e){Js=null;break}if(null!==(n=t.sibling)){n.return=t.return,Js=n;break}Js=t.return}}function xl(e){for(;null!==Js;){var t=Js;if(t===e){Js=null;break}var n=t.sibling;if(null!==n){n.return=t.return,Js=n;break}Js=t.return}}function Sl(e){for(;null!==Js;){var t=Js;try{switch(t.tag){case 0:case 11:case 15:var n=t.return;try{al(4,t)}catch(l){Ec(t,n,l)}break;case 1:var r=t.stateNode;if("function"==typeof r.componentDidMount){var a=t.return;try{r.componentDidMount()}catch(l){Ec(t,a,l)}}var o=t.return;try{ol(t)}catch(l){Ec(t,o,l)}break;case 5:var i=t.return;try{ol(t)}catch(l){Ec(t,i,l)}}}catch(l){Ec(t,t.return,l)}if(t===e){Js=null;break}var s=t.sibling;if(null!==s){s.return=t.return,Js=s;break}Js=t.return}}var _l,El=Math.ceil,Cl=w.ReactCurrentDispatcher,Tl=w.ReactCurrentOwner,Al=w.ReactCurrentBatchConfig,jl=0,Nl=null,Ll=null,Pl=0,Il=0,Rl=_a(0),Ol=0,Fl=null,Ml=0,Dl=0,Bl=0,zl=null,$l=null,Ul=0,Zl=1/0,Hl=null,Vl=!1,Wl=null,Gl=null,ql=!1,Kl=null,Yl=0,Ql=0,Xl=null,Jl=-1,ec=0;function tc(){return 0!=(6&jl)?Qe():-1!==Jl?Jl:Jl=Qe()}function nc(e){return 0==(1&e.mode)?1:0!=(2&jl)&&0!==Pl?Pl&-Pl:null!==mo.transition?(0===ec&&(ec=ht()),ec):0!==(e=vt)?e:e=void 0===(e=window.event)?16:Yt(e.type)}function rc(e,t,n,r){if(50<Ql)throw Ql=0,Xl=null,Error(o(185));bt(e,n,r),0!=(2&jl)&&e===Nl||(e===Nl&&(0==(2&jl)&&(Dl|=n),4===Ol&&lc(e,Pl)),ac(e,r),1===n&&0===jl&&0==(1&t.mode)&&(Zl=Qe()+500,Ba&&Ua()))}function ac(e,t){var n=e.callbackNode;!function(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,a=e.expirationTimes,o=e.pendingLanes;0<o;){var i=31-it(o),s=1<<i,l=a[i];-1===l?0!=(s&n)&&0==(s&r)||(a[i]=ft(s,t)):l<=t&&(e.expiredLanes|=s),o&=~s}}(e,t);var r=pt(e,e===Nl?Pl:0);if(0===r)null!==n&&qe(n),e.callbackNode=null,e.callbackPriority=0;else if(t=r&-r,e.callbackPriority!==t){if(null!=n&&qe(n),1===t)0===e.tag?function(e){Ba=!0,$a(e)}(cc.bind(null,e)):$a(cc.bind(null,e)),ia((function(){0==(6&jl)&&Ua()})),n=null;else{switch(wt(r)){case 1:n=Je;break;case 4:n=et;break;case 16:default:n=tt;break;case 536870912:n=rt}n=Nc(n,oc.bind(null,e))}e.callbackPriority=t,e.callbackNode=n}}function oc(e,t){if(Jl=-1,ec=0,0!=(6&jl))throw Error(o(327));var n=e.callbackNode;if(Sc()&&e.callbackNode!==n)return null;var r=pt(e,e===Nl?Pl:0);if(0===r)return null;if(0!=(30&r)||0!=(r&e.expiredLanes)||t)t=bc(e,r);else{t=r;var a=jl;jl|=2;var i=hc();for(Nl===e&&Pl===t||(Hl=null,Zl=Qe()+500,fc(e,t));;)try{vc();break}catch(l){gc(e,l)}xo(),Cl.current=i,jl=a,null!==Ll?t=0:(Nl=null,Pl=0,t=Ol)}if(0!==t){if(2===t&&(0!==(a=gt(e))&&(r=a,t=ic(e,a))),1===t)throw n=Fl,fc(e,0),lc(e,r),ac(e,Qe()),n;if(6===t)lc(e,r);else{if(a=e.current.alternate,0==(30&r)&&!function(e){for(var t=e;;){if(16384&t.flags){var n=t.updateQueue;if(null!==n&&null!==(n=n.stores))for(var r=0;r<n.length;r++){var a=n[r],o=a.getSnapshot;a=a.value;try{if(!sr(o(),a))return!1}catch(s){return!1}}}if(n=t.child,16384&t.subtreeFlags&&null!==n)n.return=t,t=n;else{if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return!0;t=t.return}t.sibling.return=t.return,t=t.sibling}}return!0}(a)&&(2===(t=bc(e,r))&&(0!==(i=gt(e))&&(r=i,t=ic(e,i))),1===t))throw n=Fl,fc(e,0),lc(e,r),ac(e,Qe()),n;switch(e.finishedWork=a,e.finishedLanes=r,t){case 0:case 1:throw Error(o(345));case 2:case 5:xc(e,$l,Hl);break;case 3:if(lc(e,r),(130023424&r)===r&&10<(t=Ul+500-Qe())){if(0!==pt(e,0))break;if(((a=e.suspendedLanes)&r)!==r){tc(),e.pingedLanes|=e.suspendedLanes&a;break}e.timeoutHandle=ra(xc.bind(null,e,$l,Hl),t);break}xc(e,$l,Hl);break;case 4:if(lc(e,r),(4194240&r)===r)break;for(t=e.eventTimes,a=-1;0<r;){var s=31-it(r);i=1<<s,(s=t[s])>a&&(a=s),r&=~i}if(r=a,10<(r=(120>(r=Qe()-r)?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*El(r/1960))-r)){e.timeoutHandle=ra(xc.bind(null,e,$l,Hl),r);break}xc(e,$l,Hl);break;default:throw Error(o(329))}}}return ac(e,Qe()),e.callbackNode===n?oc.bind(null,e):null}function ic(e,t){var n=zl;return e.current.memoizedState.isDehydrated&&(fc(e,t).flags|=256),2!==(e=bc(e,t))&&(t=$l,$l=n,null!==t&&sc(t)),e}function sc(e){null===$l?$l=e:$l.push.apply($l,e)}function lc(e,t){for(t&=~Bl,t&=~Dl,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-it(t),r=1<<n;e[n]=-1,t&=~r}}function cc(e){if(0!=(6&jl))throw Error(o(327));Sc();var t=pt(e,0);if(0==(1&t))return ac(e,Qe()),null;var n=bc(e,t);if(0!==e.tag&&2===n){var r=gt(e);0!==r&&(t=r,n=ic(e,r))}if(1===n)throw n=Fl,fc(e,0),lc(e,t),ac(e,Qe()),n;if(6===n)throw Error(o(345));return e.finishedWork=e.current.alternate,e.finishedLanes=t,xc(e,$l,Hl),ac(e,Qe()),null}function uc(e,t){var n=jl;jl|=1;try{return e(t)}finally{0===(jl=n)&&(Zl=Qe()+500,Ba&&Ua())}}function dc(e){null!==Kl&&0===Kl.tag&&0==(6&jl)&&Sc();var t=jl;jl|=1;var n=Al.transition,r=vt;try{if(Al.transition=null,vt=1,e)return e()}finally{vt=r,Al.transition=n,0==(6&(jl=t))&&Ua()}}function pc(){Il=Rl.current,Ea(Rl)}function fc(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,aa(n)),null!==Ll)for(n=Ll.return;null!==n;){var r=n;switch(to(r),r.tag){case 1:null!=(r=r.type.childContextTypes)&&Ia();break;case 3:oi(),Ea(ja),Ea(Aa),di();break;case 5:si(r);break;case 4:oi();break;case 13:case 19:Ea(li);break;case 10:So(r.type._context);break;case 22:case 23:pc()}n=n.return}if(Nl=e,Ll=e=Rc(e.current,null),Pl=Il=t,Ol=0,Fl=null,Bl=Dl=Ml=0,$l=zl=null,null!==To){for(t=0;t<To.length;t++)if(null!==(r=(n=To[t]).interleaved)){n.interleaved=null;var a=r.next,o=n.pending;if(null!==o){var i=o.next;o.next=a,r.next=i}n.pending=r}To=null}return e}function gc(e,t){for(;;){var n=Ll;try{if(xo(),pi.current=is,yi){for(var r=hi.memoizedState;null!==r;){var a=r.queue;null!==a&&(a.pending=null),r=r.next}yi=!1}if(gi=0,bi=mi=hi=null,vi=!1,wi=0,Tl.current=null,null===n||null===n.return){Ol=1,Fl=t,Ll=null;break}e:{var i=e,s=n.return,l=n,c=t;if(t=Pl,l.flags|=32768,null!==c&&"object"==typeof c&&"function"==typeof c.then){var u=c,d=l,p=d.tag;if(0==(1&d.mode)&&(0===p||11===p||15===p)){var f=d.alternate;f?(d.updateQueue=f.updateQueue,d.memoizedState=f.memoizedState,d.lanes=f.lanes):(d.updateQueue=null,d.memoizedState=null)}var g=bs(s);if(null!==g){g.flags&=-257,ys(g,s,l,0,t),1&g.mode&&ms(i,u,t),c=u;var h=(t=g).updateQueue;if(null===h){var m=new Set;m.add(c),t.updateQueue=m}else h.add(c);break e}if(0==(1&t)){ms(i,u,t),mc();break e}c=Error(o(426))}else if(ao&&1&l.mode){var b=bs(s);if(null!==b){0==(65536&b.flags)&&(b.flags|=256),ys(b,s,l,0,t),ho(us(c,l));break e}}i=c=us(c,l),4!==Ol&&(Ol=2),null===zl?zl=[i]:zl.push(i),i=s;do{switch(i.tag){case 3:i.flags|=65536,t&=-t,i.lanes|=t,Mo(i,gs(0,c,t));break e;case 1:l=c;var y=i.type,v=i.stateNode;if(0==(128&i.flags)&&("function"==typeof y.getDerivedStateFromError||null!==v&&"function"==typeof v.componentDidCatch&&(null===Gl||!Gl.has(v)))){i.flags|=65536,t&=-t,i.lanes|=t,Mo(i,hs(i,l,t));break e}}i=i.return}while(null!==i)}kc(n)}catch(w){t=w,Ll===n&&null!==n&&(Ll=n=n.return);continue}break}}function hc(){var e=Cl.current;return Cl.current=is,null===e?is:e}function mc(){0!==Ol&&3!==Ol&&2!==Ol||(Ol=4),null===Nl||0==(268435455&Ml)&&0==(268435455&Dl)||lc(Nl,Pl)}function bc(e,t){var n=jl;jl|=2;var r=hc();for(Nl===e&&Pl===t||(Hl=null,fc(e,t));;)try{yc();break}catch(a){gc(e,a)}if(xo(),jl=n,Cl.current=r,null!==Ll)throw Error(o(261));return Nl=null,Pl=0,Ol}function yc(){for(;null!==Ll;)wc(Ll)}function vc(){for(;null!==Ll&&!Ke();)wc(Ll)}function wc(e){var t=_l(e.alternate,e,Il);e.memoizedProps=e.pendingProps,null===t?kc(e):Ll=t,Tl.current=null}function kc(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(32768&t.flags)){if(null!==(n=qs(n,t,Il)))return void(Ll=n)}else{if(null!==(n=Ks(n,t)))return n.flags&=32767,void(Ll=n);if(null===e)return Ol=6,void(Ll=null);e.flags|=32768,e.subtreeFlags=0,e.deletions=null}if(null!==(t=t.sibling))return void(Ll=t);Ll=t=e}while(null!==t);0===Ol&&(Ol=5)}function xc(e,t,n){var r=vt,a=Al.transition;try{Al.transition=null,vt=1,function(e,t,n,r){do{Sc()}while(null!==Kl);if(0!=(6&jl))throw Error(o(327));n=e.finishedWork;var a=e.finishedLanes;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(o(177));e.callbackNode=null,e.callbackPriority=0;var i=n.lanes|n.childLanes;if(function(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0<n;){var a=31-it(n),o=1<<a;t[a]=0,r[a]=-1,e[a]=-1,n&=~o}}(e,i),e===Nl&&(Ll=Nl=null,Pl=0),0==(2064&n.subtreeFlags)&&0==(2064&n.flags)||ql||(ql=!0,Nc(tt,(function(){return Sc(),null}))),i=0!=(15990&n.flags),0!=(15990&n.subtreeFlags)||i){i=Al.transition,Al.transition=null;var s=vt;vt=1;var l=jl;jl|=4,Tl.current=null,function(e,t){if(ea=Ht,fr(e=pr())){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{var r=(n=(n=e.ownerDocument)&&n.defaultView||window).getSelection&&n.getSelection();if(r&&0!==r.rangeCount){n=r.anchorNode;var a=r.anchorOffset,i=r.focusNode;r=r.focusOffset;try{n.nodeType,i.nodeType}catch(k){n=null;break e}var s=0,l=-1,c=-1,u=0,d=0,p=e,f=null;t:for(;;){for(var g;p!==n||0!==a&&3!==p.nodeType||(l=s+a),p!==i||0!==r&&3!==p.nodeType||(c=s+r),3===p.nodeType&&(s+=p.nodeValue.length),null!==(g=p.firstChild);)f=p,p=g;for(;;){if(p===e)break t;if(f===n&&++u===a&&(l=s),f===i&&++d===r&&(c=s),null!==(g=p.nextSibling))break;f=(p=f).parentNode}p=g}n=-1===l||-1===c?null:{start:l,end:c}}else n=null}n=n||{start:0,end:0}}else n=null;for(ta={focusedElem:e,selectionRange:n},Ht=!1,Js=t;null!==Js;)if(e=(t=Js).child,0!=(1028&t.subtreeFlags)&&null!==e)e.return=t,Js=e;else for(;null!==Js;){t=Js;try{var h=t.alternate;if(0!=(1024&t.flags))switch(t.tag){case 0:case 11:case 15:case 5:case 6:case 4:case 17:break;case 1:if(null!==h){var m=h.memoizedProps,b=h.memoizedState,y=t.stateNode,v=y.getSnapshotBeforeUpdate(t.elementType===t.type?m:bo(t.type,m),b);y.__reactInternalSnapshotBeforeUpdate=v}break;case 3:var w=t.stateNode.containerInfo;1===w.nodeType?w.textContent="":9===w.nodeType&&w.documentElement&&w.removeChild(w.documentElement);break;default:throw Error(o(163))}}catch(k){Ec(t,t.return,k)}if(null!==(e=t.sibling)){e.return=t.return,Js=e;break}Js=t.return}h=nl,nl=!1}(e,n),bl(n,e),gr(ta),Ht=!!ea,ta=ea=null,e.current=n,vl(n,e,a),Ye(),jl=l,vt=s,Al.transition=i}else e.current=n;if(ql&&(ql=!1,Kl=e,Yl=a),i=e.pendingLanes,0===i&&(Gl=null),function(e){if(ot&&"function"==typeof ot.onCommitFiberRoot)try{ot.onCommitFiberRoot(at,e,void 0,128==(128&e.current.flags))}catch(t){}}(n.stateNode),ac(e,Qe()),null!==t)for(r=e.onRecoverableError,n=0;n<t.length;n++)a=t[n],r(a.value,{componentStack:a.stack,digest:a.digest});if(Vl)throw Vl=!1,e=Wl,Wl=null,e;0!=(1&Yl)&&0!==e.tag&&Sc(),i=e.pendingLanes,0!=(1&i)?e===Xl?Ql++:(Ql=0,Xl=e):Ql=0,Ua()}(e,t,n,r)}finally{Al.transition=a,vt=r}return null}function Sc(){if(null!==Kl){var e=wt(Yl),t=Al.transition,n=vt;try{if(Al.transition=null,vt=16>e?16:e,null===Kl)var r=!1;else{if(e=Kl,Kl=null,Yl=0,0!=(6&jl))throw Error(o(331));var a=jl;for(jl|=4,Js=e.current;null!==Js;){var i=Js,s=i.child;if(0!=(16&Js.flags)){var l=i.deletions;if(null!==l){for(var c=0;c<l.length;c++){var u=l[c];for(Js=u;null!==Js;){var d=Js;switch(d.tag){case 0:case 11:case 15:rl(8,d,i)}var p=d.child;if(null!==p)p.return=d,Js=p;else for(;null!==Js;){var f=(d=Js).sibling,g=d.return;if(il(d),d===u){Js=null;break}if(null!==f){f.return=g,Js=f;break}Js=g}}}var h=i.alternate;if(null!==h){var m=h.child;if(null!==m){h.child=null;do{var b=m.sibling;m.sibling=null,m=b}while(null!==m)}}Js=i}}if(0!=(2064&i.subtreeFlags)&&null!==s)s.return=i,Js=s;else e:for(;null!==Js;){if(0!=(2048&(i=Js).flags))switch(i.tag){case 0:case 11:case 15:rl(9,i,i.return)}var y=i.sibling;if(null!==y){y.return=i.return,Js=y;break e}Js=i.return}}var v=e.current;for(Js=v;null!==Js;){var w=(s=Js).child;if(0!=(2064&s.subtreeFlags)&&null!==w)w.return=s,Js=w;else e:for(s=v;null!==Js;){if(0!=(2048&(l=Js).flags))try{switch(l.tag){case 0:case 11:case 15:al(9,l)}}catch(x){Ec(l,l.return,x)}if(l===s){Js=null;break e}var k=l.sibling;if(null!==k){k.return=l.return,Js=k;break e}Js=l.return}}if(jl=a,Ua(),ot&&"function"==typeof ot.onPostCommitFiberRoot)try{ot.onPostCommitFiberRoot(at,e)}catch(x){}r=!0}return r}finally{vt=n,Al.transition=t}}return!1}function _c(e,t,n){e=Oo(e,t=gs(0,t=us(n,t),1),1),t=tc(),null!==e&&(bt(e,1,t),ac(e,t))}function Ec(e,t,n){if(3===e.tag)_c(e,e,n);else for(;null!==t;){if(3===t.tag){_c(t,e,n);break}if(1===t.tag){var r=t.stateNode;if("function"==typeof t.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Gl||!Gl.has(r))){t=Oo(t,e=hs(t,e=us(n,e),1),1),e=tc(),null!==t&&(bt(t,1,e),ac(t,e));break}}t=t.return}}function Cc(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=tc(),e.pingedLanes|=e.suspendedLanes&n,Nl===e&&(Pl&n)===n&&(4===Ol||3===Ol&&(130023424&Pl)===Pl&&500>Qe()-Ul?fc(e,0):Bl|=n),ac(e,t)}function Tc(e,t){0===t&&(0==(1&e.mode)?t=1:(t=ut,0==(130023424&(ut<<=1))&&(ut=4194304)));var n=tc();null!==(e=No(e,t))&&(bt(e,t,n),ac(e,n))}function Ac(e){var t=e.memoizedState,n=0;null!==t&&(n=t.retryLane),Tc(e,n)}function jc(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;null!==a&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(o(314))}null!==r&&r.delete(t),Tc(e,n)}function Nc(e,t){return Ge(e,t)}function Lc(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Pc(e,t,n,r){return new Lc(e,t,n,r)}function Ic(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Rc(e,t){var n=e.alternate;return null===n?((n=Pc(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=14680064&e.flags,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Oc(e,t,n,r,a,i){var s=2;if(r=e,"function"==typeof e)Ic(e)&&(s=1);else if("string"==typeof e)s=5;else e:switch(e){case S:return Fc(n.children,a,i,t);case _:s=8,a|=8;break;case E:return(e=Pc(12,n,t,2|a)).elementType=E,e.lanes=i,e;case j:return(e=Pc(13,n,t,a)).elementType=j,e.lanes=i,e;case N:return(e=Pc(19,n,t,a)).elementType=N,e.lanes=i,e;case I:return Mc(n,a,i,t);default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case C:s=10;break e;case T:s=9;break e;case A:s=11;break e;case L:s=14;break e;case P:s=16,r=null;break e}throw Error(o(130,null==e?e:typeof e,""))}return(t=Pc(s,n,t,a)).elementType=e,t.type=r,t.lanes=i,t}function Fc(e,t,n,r){return(e=Pc(7,e,r,t)).lanes=n,e}function Mc(e,t,n,r){return(e=Pc(22,e,r,t)).elementType=I,e.lanes=n,e.stateNode={isHidden:!1},e}function Dc(e,t,n){return(e=Pc(6,e,null,t)).lanes=n,e}function Bc(e,t,n){return(t=Pc(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function zc(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=mt(0),this.expirationTimes=mt(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=mt(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function $c(e,t,n,r,a,o,i,s,l){return e=new zc(e,t,n,s,l),1===t?(t=1,!0===o&&(t|=8)):t=0,o=Pc(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Po(o),e}function Uc(e){if(!e)return Ta;e:{if(Ue(e=e._reactInternals)!==e||1!==e.tag)throw Error(o(170));var t=e;do{switch(t.tag){case 3:t=t.stateNode.context;break e;case 1:if(Pa(t.type)){t=t.stateNode.__reactInternalMemoizedMergedChildContext;break e}}t=t.return}while(null!==t);throw Error(o(171))}if(1===e.tag){var n=e.type;if(Pa(n))return Oa(e,n,t)}return t}function Zc(e,t,n,r,a,o,i,s,l){return(e=$c(n,r,!0,e,0,o,0,s,l)).context=Uc(null),n=e.current,(o=Ro(r=tc(),a=nc(n))).callback=null!=t?t:null,Oo(n,o,a),e.current.lanes=a,bt(e,a,r),ac(e,r),e}function Hc(e,t,n,r){var a=t.current,o=tc(),i=nc(a);return n=Uc(n),null===t.context?t.context=n:t.pendingContext=n,(t=Ro(o,i)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),null!==(e=Oo(a,t,i))&&(rc(e,a,i,o),Fo(e,a,i)),i}function Vc(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function Wc(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function Gc(e,t){Wc(e,t),(e=e.alternate)&&Wc(e,t)}_l=function(e,t,n){if(null!==e)if(e.memoizedProps!==t.pendingProps||ja.current)ws=!0;else{if(0==(e.lanes&n)&&0==(128&t.flags))return ws=!1,function(e,t,n){switch(t.tag){case 3:Ns(t),go();break;case 5:ii(t);break;case 1:Pa(t.type)&&Fa(t);break;case 4:ai(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,a=t.memoizedProps.value;Ca(yo,r._currentValue),r._currentValue=a;break;case 13:if(null!==(r=t.memoizedState))return null!==r.dehydrated?(Ca(li,1&li.current),t.flags|=128,null):0!=(n&t.child.childLanes)?Ds(e,t,n):(Ca(li,1&li.current),null!==(e=Vs(e,t,n))?e.sibling:null);Ca(li,1&li.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(128&e.flags)){if(r)return Zs(e,t,n);t.flags|=128}if(null!==(a=t.memoizedState)&&(a.rendering=null,a.tail=null,a.lastEffect=null),Ca(li,li.current),r)break;return null;case 22:case 23:return t.lanes=0,Es(e,t,n)}return Vs(e,t,n)}(e,t,n);ws=0!=(131072&e.flags)}else ws=!1,ao&&0!=(1048576&t.flags)&&Ja(t,Wa,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;Hs(e,t),e=t.pendingProps;var a=La(t,Aa.current);Eo(t,n),a=_i(null,t,r,e,a,n);var i=Ei();return t.flags|=1,"object"==typeof a&&null!==a&&"function"==typeof a.render&&void 0===a.$$typeof?(t.tag=1,t.memoizedState=null,t.updateQueue=null,Pa(r)?(i=!0,Fa(t)):i=!1,t.memoizedState=null!==a.state&&void 0!==a.state?a.state:null,Po(t),a.updater=Uo,t.stateNode=a,a._reactInternals=t,Wo(t,r,e,n),t=js(null,t,r,!0,i,n)):(t.tag=0,ao&&i&&eo(t),ks(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(Hs(e,t),e=t.pendingProps,r=(a=r._init)(r._payload),t.type=r,a=t.tag=function(e){if("function"==typeof e)return Ic(e)?1:0;if(null!=e){if((e=e.$$typeof)===A)return 11;if(e===L)return 14}return 2}(r),e=bo(r,e),a){case 0:t=Ts(null,t,r,e,n);break e;case 1:t=As(null,t,r,e,n);break e;case 11:t=xs(null,t,r,e,n);break e;case 14:t=Ss(null,t,r,bo(r.type,e),n);break e}throw Error(o(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,Ts(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 1:return r=t.type,a=t.pendingProps,As(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 3:e:{if(Ns(t),null===e)throw Error(o(387));r=t.pendingProps,a=(i=t.memoizedState).element,Io(e,t),Do(t,r,null,n);var s=t.memoizedState;if(r=s.element,i.isDehydrated){if(i={element:r,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},t.updateQueue.baseState=i,t.memoizedState=i,256&t.flags){t=Ls(e,t,r,n,a=us(Error(o(423)),t));break e}if(r!==a){t=Ls(e,t,r,n,a=us(Error(o(424)),t));break e}for(ro=ca(t.stateNode.containerInfo.firstChild),no=t,ao=!0,oo=null,n=Xo(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|4096,n=n.sibling}else{if(go(),r===a){t=Vs(e,t,n);break e}ks(e,t,r,n)}t=t.child}return t;case 5:return ii(t),null===e&&co(t),r=t.type,a=t.pendingProps,i=null!==e?e.memoizedProps:null,s=a.children,na(r,a)?s=null:null!==i&&na(r,i)&&(t.flags|=32),Cs(e,t),ks(e,t,s,n),t.child;case 6:return null===e&&co(t),null;case 13:return Ds(e,t,n);case 4:return ai(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Qo(t,null,r,n):ks(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,xs(e,t,r,a=t.elementType===r?a:bo(r,a),n);case 7:return ks(e,t,t.pendingProps,n),t.child;case 8:case 12:return ks(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,i=t.memoizedProps,s=a.value,Ca(yo,r._currentValue),r._currentValue=s,null!==i)if(sr(i.value,s)){if(i.children===a.children&&!ja.current){t=Vs(e,t,n);break e}}else for(null!==(i=t.child)&&(i.return=t);null!==i;){var l=i.dependencies;if(null!==l){s=i.child;for(var c=l.firstContext;null!==c;){if(c.context===r){if(1===i.tag){(c=Ro(-1,n&-n)).tag=2;var u=i.updateQueue;if(null!==u){var d=(u=u.shared).pending;null===d?c.next=c:(c.next=d.next,d.next=c),u.pending=c}}i.lanes|=n,null!==(c=i.alternate)&&(c.lanes|=n),_o(i.return,n,t),l.lanes|=n;break}c=c.next}}else if(10===i.tag)s=i.type===t.type?null:i.child;else if(18===i.tag){if(null===(s=i.return))throw Error(o(341));s.lanes|=n,null!==(l=s.alternate)&&(l.lanes|=n),_o(s,n,t),s=i.sibling}else s=i.child;if(null!==s)s.return=i;else for(s=i;null!==s;){if(s===t){s=null;break}if(null!==(i=s.sibling)){i.return=s.return,s=i;break}s=s.return}i=s}ks(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,Eo(t,n),r=r(a=Co(a)),t.flags|=1,ks(e,t,r,n),t.child;case 14:return a=bo(r=t.type,t.pendingProps),Ss(e,t,r,a=bo(r.type,a),n);case 15:return _s(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:bo(r,a),Hs(e,t),t.tag=1,Pa(r)?(e=!0,Fa(t)):e=!1,Eo(t,n),Ho(t,r,a),Wo(t,r,a,n),js(null,t,r,!0,e,n);case 19:return Zs(e,t,n);case 22:return Es(e,t,n)}throw Error(o(156,t.tag))};var qc="function"==typeof reportError?reportError:function(e){console.error(e)};function Kc(e){this._internalRoot=e}function Yc(e){this._internalRoot=e}function Qc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType)}function Xc(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function Jc(){}function eu(e,t,n,r,a){var o=n._reactRootContainer;if(o){var i=o;if("function"==typeof a){var s=a;a=function(){var e=Vc(i);s.call(e)}}Hc(t,i,e,a)}else i=function(e,t,n,r,a){if(a){if("function"==typeof r){var o=r;r=function(){var e=Vc(i);o.call(e)}}var i=Zc(t,r,e,0,null,!1,0,"",Jc);return e._reactRootContainer=i,e[ga]=i.current,Ur(8===e.nodeType?e.parentNode:e),dc(),i}for(;a=e.lastChild;)e.removeChild(a);if("function"==typeof r){var s=r;r=function(){var e=Vc(l);s.call(e)}}var l=$c(e,0,!1,null,0,!1,0,"",Jc);return e._reactRootContainer=l,e[ga]=l.current,Ur(8===e.nodeType?e.parentNode:e),dc((function(){Hc(t,l,n,r)})),l}(n,t,e,a,r);return Vc(i)}Yc.prototype.render=Kc.prototype.render=function(e){var t=this._internalRoot;if(null===t)throw Error(o(409));Hc(e,t,null,null)},Yc.prototype.unmount=Kc.prototype.unmount=function(){var e=this._internalRoot;if(null!==e){this._internalRoot=null;var t=e.containerInfo;dc((function(){Hc(null,e,null,null)})),t[ga]=null}},Yc.prototype.unstable_scheduleHydration=function(e){if(e){var t=_t();e={blockedOn:null,target:e,priority:t};for(var n=0;n<It.length&&0!==t&&t<It[n].priority;n++);It.splice(n,0,e),0===n&&Mt(e)}},kt=function(e){switch(e.tag){case 3:var t=e.stateNode;if(t.current.memoizedState.isDehydrated){var n=dt(t.pendingLanes);0!==n&&(yt(t,1|n),ac(t,Qe()),0==(6&jl)&&(Zl=Qe()+500,Ua()))}break;case 13:dc((function(){var t=No(e,1);if(null!==t){var n=tc();rc(t,e,1,n)}})),Gc(e,1)}},xt=function(e){if(13===e.tag){var t=No(e,134217728);if(null!==t)rc(t,e,134217728,tc());Gc(e,134217728)}},St=function(e){if(13===e.tag){var t=nc(e),n=No(e,t);if(null!==n)rc(n,e,t,tc());Gc(e,t)}},_t=function(){return vt},Et=function(e,t){var n=vt;try{return vt=e,t()}finally{vt=n}},xe=function(e,t,n){switch(t){case"input":if(X(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var a=ka(r);if(!a)throw Error(o(90));G(r),X(r,a)}}}break;case"textarea":oe(e,n);break;case"select":null!=(t=n.value)&&ne(e,!!n.multiple,t,!1)}},Ae=uc,je=dc;var tu={usingClientEntryPoint:!1,Events:[va,wa,ka,Ce,Te,uc]},nu={findFiberByHostInstance:ya,bundleType:0,version:"18.2.0",rendererPackageName:"react-dom"},ru={bundleType:nu.bundleType,version:nu.version,rendererPackageName:nu.rendererPackageName,rendererConfig:nu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:w.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Ve(e))?null:e.stateNode},findFiberByHostInstance:nu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.2.0-next-9e3b772b8-20220608"};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var au=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!au.isDisabled&&au.supportsFiber)try{at=au.inject(ru),ot=au}catch(ue){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=tu,t.createPortal=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!Qc(t))throw Error(o(200));return function(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:x,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}(e,t,null,n)},t.createRoot=function(e,t){if(!Qc(e))throw Error(o(299));var n=!1,r="",a=qc;return null!=t&&(!0===t.unstable_strictMode&&(n=!0),void 0!==t.identifierPrefix&&(r=t.identifierPrefix),void 0!==t.onRecoverableError&&(a=t.onRecoverableError)),t=$c(e,1,!1,null,0,n,0,r,a),e[ga]=t.current,Ur(8===e.nodeType?e.parentNode:e),new Kc(t)},t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(o(188));throw e=Object.keys(e).join(","),Error(o(268,e))}return e=null===(e=Ve(t))?null:e.stateNode},t.flushSync=function(e){return dc(e)},t.hydrate=function(e,t,n){if(!Xc(t))throw Error(o(200));return eu(null,e,t,!0,n)},t.hydrateRoot=function(e,t,n){if(!Qc(e))throw Error(o(405));var r=null!=n&&n.hydratedSources||null,a=!1,i="",s=qc;if(null!=n&&(!0===n.unstable_strictMode&&(a=!0),void 0!==n.identifierPrefix&&(i=n.identifierPrefix),void 0!==n.onRecoverableError&&(s=n.onRecoverableError)),t=Zc(t,null,e,1,null!=n?n:null,a,0,i,s),e[ga]=t.current,Ur(e),r)for(e=0;e<r.length;e++)a=(a=(n=r[e])._getVersion)(n._source),null==t.mutableSourceEagerHydrationData?t.mutableSourceEagerHydrationData=[n,a]:t.mutableSourceEagerHydrationData.push(n,a);return new Yc(t)},t.render=function(e,t,n){if(!Xc(t))throw Error(o(200));return eu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!Xc(e))throw Error(o(40));return!!e._reactRootContainer&&(dc((function(){eu(null,null,e,!1,(function(){e._reactRootContainer=null,e[ga]=null}))})),!0)},t.unstable_batchedUpdates=uc,t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!Xc(n))throw Error(o(200));if(null==e||void 0===e._reactInternals)throw Error(o(38));return eu(e,t,n,!1,r)},t.version="18.2.0-next-9e3b772b8-20220608"},20745:(e,t,n)=>{"use strict";var r=n(73935);t.createRoot=r.createRoot,t.hydrateRoot=r.hydrateRoot},73935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(64448)},69590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,a="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function o(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var s,l,c,u;if(Array.isArray(e)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(!o(e[l],i[l]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;for(u=e.entries();!(l=u.next()).done;)if(!o(l.value[1],i.get(l.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(u=e.entries();!(l=u.next()).done;)if(!i.has(l.value[0]))return!1;return!0}if(a&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((s=e.length)!=i.length)return!1;for(l=s;0!=l--;)if(e[l]!==i[l])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf&&"function"==typeof e.valueOf&&"function"==typeof i.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString&&"function"==typeof e.toString&&"function"==typeof i.toString)return e.toString()===i.toString();if((s=(c=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(l=s;0!=l--;)if(!Object.prototype.hasOwnProperty.call(i,c[l]))return!1;if(t&&e instanceof Element)return!1;for(l=s;0!=l--;)if(("_owner"!==c[l]&&"__v"!==c[l]&&"__o"!==c[l]||!e.$$typeof)&&!o(e[c[l]],i[c[l]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return o(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>V,ql:()=>J});var r=n(67294),a=n(45697),o=n.n(a),i=n(69590),s=n.n(i),l=n(41143),c=n.n(l),u=n(96774),d=n.n(u);function p(){return p=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(this,arguments)}function f(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,g(e,t)}function g(e,t){return g=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},g(e,t)}function h(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)t.indexOf(n=o[r])>=0||(a[n]=e[n]);return a}var m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},b={rel:["amphtml","canonical","alternate"]},y={type:["application/ld+json"]},v={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(m).map((function(e){return m[e]})),k={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},x=Object.keys(k).reduce((function(e,t){return e[k[t]]=t,e}),{}),S=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},_=function(e){var t=S(e,m.TITLE),n=S(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=S(e,"defaultTitle");return t||r||void 0},E=function(e){return S(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return p({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[m.BASE]})).map((function(e){return e[m.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),a=0;a<r.length;a+=1){var o=r[a].toLowerCase();if(-1!==e.indexOf(o)&&n[o])return t.concat(n)}return t}),[])},A=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var a={};n.filter((function(e){for(var n,o=Object.keys(e),i=0;i<o.length;i+=1){var s=o[i],l=s.toLowerCase();-1===t.indexOf(l)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===l&&"stylesheet"===e[l].toLowerCase()||(n=l),-1===t.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(n=s)}if(!n||!e[n])return!1;var c=e[n].toLowerCase();return r[n]||(r[n]={}),a[n]||(a[n]={}),!r[n][c]&&(a[n][c]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var o=Object.keys(a),i=0;i<o.length;i+=1){var s=o[i],l=p({},r[s],a[s]);r[s]=l}return e}),[]).reverse()},j=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},N=function(e){return Array.isArray(e)?e.join(""):e},L=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},P=function(e,t){var n;return p({},e,((n={})[t]=void 0,n))},I=[m.NOSCRIPT,m.SCRIPT,m.STYLE],R=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},O=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},F=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[k[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var a,o=((a={key:n})["data-rh"]=!0,a);return Object.keys(t).forEach((function(e){var n=k[e]||e;"innerHTML"===n||"cssText"===n?o.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:o[n]=t[e]})),r.createElement(e,o)}))},D=function(e,t,n){switch(e){case m.TITLE:return{toComponent:function(){return n=t.titleAttributes,(a={key:e=t.title})["data-rh"]=!0,o=F(n,a),[r.createElement(m.TITLE,o,e)];var e,n,a,o},toString:function(){return function(e,t,n,r){var a=O(n),o=N(t);return a?"<"+e+' data-rh="true" '+a+">"+R(o,r)+"</"+e+">":"<"+e+' data-rh="true">'+R(o,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return F(t)},toString:function(){return O(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var a=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var a=void 0===r[t]?t:t+'="'+R(r[t],n)+'"';return e?e+" "+a:a}),""),o=r.innerHTML||r.cssText||"",i=-1===I.indexOf(e);return t+"<"+e+' data-rh="true" '+a+(i?"/>":">"+o+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,a=e.htmlAttributes,o=e.noscriptTags,i=e.styleTags,s=e.title,l=void 0===s?"":s,c=e.titleAttributes,u=e.linkTags,d=e.metaTags,p=e.scriptTags,f={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var g=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,a=L(e.metaTags,v),o=L(t,b),i=L(n,y);return{priorityMethods:{toComponent:function(){return[].concat(M(m.META,a.priority),M(m.LINK,o.priority),M(m.SCRIPT,i.priority))},toString:function(){return D(m.META,a.priority,r)+" "+D(m.LINK,o.priority,r)+" "+D(m.SCRIPT,i.priority,r)}},metaTags:a.default,linkTags:o.default,scriptTags:i.default}}(e);f=g.priorityMethods,u=g.linkTags,d=g.metaTags,p=g.scriptTags}return{priority:f,base:D(m.BASE,t,r),bodyAttributes:D("bodyAttributes",n,r),htmlAttributes:D("htmlAttributes",a,r),link:D(m.LINK,u,r),meta:D(m.META,d,r),noscript:D(m.NOSCRIPT,o,r),script:D(m.SCRIPT,p,r),style:D(m.STYLE,i,r),title:D(m.TITLE,{title:l,titleAttributes:c},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),Z=o().shape({setHelmet:o().func,helmetInstances:o().shape({get:o().func,add:o().func,remove:o().func})}),H="undefined"!=typeof document,V=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return f(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);V.canUseDOM=H,V.propTypes={context:o().shape({helmet:o().shape()}),children:o().node.isRequired},V.defaultProps={context:{}},V.displayName="HelmetProvider";var W=function(e,t){var n,r=document.head||document.querySelector(m.HEAD),a=r.querySelectorAll(e+"[data-rh]"),o=[].slice.call(a),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var a in t)Object.prototype.hasOwnProperty.call(t,a)&&("innerHTML"===a?r.innerHTML=t.innerHTML:"cssText"===a?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(a,void 0===t[a]?"":t[a]));r.setAttribute("data-rh","true"),o.some((function(e,t){return n=t,r.isEqualNode(e)}))?o.splice(n,1):i.push(r)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:o,newTags:i}},G=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),a=r?r.split(","):[],o=[].concat(a),i=Object.keys(t),s=0;s<i.length;s+=1){var l=i[s],c=t[l]||"";n.getAttribute(l)!==c&&n.setAttribute(l,c),-1===a.indexOf(l)&&a.push(l);var u=o.indexOf(l);-1!==u&&o.splice(u,1)}for(var d=o.length-1;d>=0;d-=1)n.removeAttribute(o[d]);a.length===o.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},q=function(e,t){var n=e.baseTag,r=e.htmlAttributes,a=e.linkTags,o=e.metaTags,i=e.noscriptTags,s=e.onChangeClientState,l=e.scriptTags,c=e.styleTags,u=e.title,d=e.titleAttributes;G(m.BODY,e.bodyAttributes),G(m.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=N(e)),G(m.TITLE,t)}(u,d);var p={baseTag:W(m.BASE,n),linkTags:W(m.LINK,a),metaTags:W(m.META,o),noscriptTags:W(m.NOSCRIPT,i),scriptTags:W(m.SCRIPT,l),styleTags:W(m.STYLE,c)},f={},g={};Object.keys(p).forEach((function(e){var t=p[e],n=t.newTags,r=t.oldTags;n.length&&(f[e]=n),r.length&&(g[e]=p[e].oldTags)})),t&&t(),s(e,f,g)},K=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,a=null,o=(e=n.helmetInstances.get().map((function(e){var t=p({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:S(e,"defer"),encode:S(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:A(m.LINK,["rel","href"],e),metaTags:A(m.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:A(m.NOSCRIPT,["innerHTML"],e),onChangeClientState:E(e),scriptTags:A(m.SCRIPT,["src","innerHTML"],e),styleTags:A(m.STYLE,["cssText"],e),title:_(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:j(e,"prioritizeSeoTags")});V.canUseDOM?(t=o,K&&cancelAnimationFrame(K),t.defer?K=requestAnimationFrame((function(){q(t,(function(){K=null}))})):(q(t),K=null)):B&&(a=B(o)),r(a)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:Z.isRequired},Y.displayName="HelmetDispatcher";var Q=["children"],X=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}f(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!s()(P(this.props,"helmetData"),P(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case m.SCRIPT:case m.NOSCRIPT:return{innerHTML:t};case m.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return p({},r,((t={})[n.type]=[].concat(r[n.type]||[],[p({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,a=e.newProps,o=e.newChildProps,i=e.nestedChildren;switch(r.type){case m.TITLE:return p({},a,((t={})[r.type]=i,t.titleAttributes=p({},o),t));case m.BODY:return p({},a,{bodyAttributes:p({},o)});case m.HTML:return p({},a,{htmlAttributes:p({},o)});default:return p({},a,((n={})[r.type]=p({},o),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=p({},t);return Object.keys(e).forEach((function(t){var r;n=p({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return c()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),c()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,a={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,o=r.children,i=h(r,Q),s=Object.keys(i).reduce((function(e,t){return e[x[t]||t]=i[t],e}),{}),l=e.type;switch("symbol"==typeof l?l=l.toString():n.warnOnInvalidChildren(e,o),l){case m.FRAGMENT:t=n.mapChildrenToProps(o,t);break;case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.STYLE:a=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:a,newChildProps:s,nestedChildren:o});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:s,nestedChildren:o})}}})),this.mapArrayTypeChildrenToProps(a,t)},n.render=function(){var e=this.props,t=e.children,n=h(e,X),a=p({},n),o=n.helmetData;return t&&(a=this.mapChildrenToProps(t,a)),!o||o instanceof $||(o=new $(o.context,o.instances)),o?r.createElement(Y,p({},a,{context:o.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,p({},a,{context:e}))}))},t}(r.Component);J.propTypes={base:o().object,bodyAttributes:o().object,children:o().oneOfType([o().arrayOf(o().node),o().node]),defaultTitle:o().string,defer:o().bool,encodeSpecialCharacters:o().bool,htmlAttributes:o().object,link:o().arrayOf(o().object),meta:o().arrayOf(o().object),noscript:o().arrayOf(o().object),onChangeClientState:o().func,script:o().arrayOf(o().object),style:o().arrayOf(o().object),title:o().string,titleAttributes:o().object,titleTemplate:o().string,prioritizeSeoTags:o().bool,helmetData:o().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},69921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,a=n?Symbol.for("react.portal"):60106,o=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,c=n?Symbol.for("react.context"):60110,u=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,g=n?Symbol.for("react.suspense_list"):60120,h=n?Symbol.for("react.memo"):60115,m=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,y=n?Symbol.for("react.fundamental"):60117,v=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case u:case d:case o:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case c:case p:case m:case h:case l:return e;default:return t}}case a:return t}}}function x(e){return k(e)===d}t.AsyncMode=u,t.ConcurrentMode=d,t.ContextConsumer=c,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=o,t.Lazy=m,t.Memo=h,t.Portal=a,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return x(e)||k(e)===u},t.isConcurrentMode=x,t.isContextConsumer=function(e){return k(e)===c},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===o},t.isLazy=function(e){return k(e)===m},t.isMemo=function(e){return k(e)===h},t.isPortal=function(e){return k(e)===a},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===o||e===d||e===s||e===i||e===f||e===g||"object"==typeof e&&null!==e&&(e.$$typeof===m||e.$$typeof===h||e.$$typeof===l||e.$$typeof===c||e.$$typeof===p||e.$$typeof===y||e.$$typeof===v||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},59864:(e,t,n)=>{"use strict";e.exports=n(69921)},68356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function a(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var s=n(67294),l=n(45697),c=[],u=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function p(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var a=d(e[r]);a.loading?t.loading=!0:(t.loaded[r]=a.loaded,t.error=a.error),n.push(a.promise),a.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function f(e,t){return s.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function g(e,t){var d,p;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var g=i({loader:null,loading:null,delay:200,timeout:null,render:f,webpack:null,modules:null},t),h=null;function m(){return h||(h=e(g.loader)),h.promise}return c.push(m),"function"==typeof g.webpack&&u.push((function(){if((0,g.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return m()})),p=d=function(t){function n(n){var r;return o(a(a(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),h=e(g.loader),r._loadModule()})),m(),r.state={error:h.error,pastDelay:!1,timedOut:!1,loading:h.loading,loaded:h.loaded},r}r(n,t),n.preload=function(){return m()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(g.modules)&&g.modules.forEach((function(t){e.context.loadable.report(t)})),h.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof g.delay&&(0===g.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),g.delay)),"number"==typeof g.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),g.timeout));var n=function(){t({error:h.error,loaded:h.loaded,loading:h.loading}),e._clearTimeouts()};h.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?s.createElement(g.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?g.render(this.state.loaded,this.props):null},n}(s.Component),o(d,"contextTypes",{loadable:l.shape({report:l.func.isRequired})}),p}function h(e){return g(d,e)}h.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return g(p,e)};var m=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return s.Children.only(this.props.children)},t}(s.Component);function b(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return b(e)}))}o(m,"propTypes",{report:l.func.isRequired}),o(m,"childContextTypes",{loadable:l.shape({report:l.func.isRequired}).isRequired}),h.Capture=m,h.preloadAll=function(){return new Promise((function(e,t){b(c).then(e,t)}))},h.preloadReady=function(){return new Promise((function(e,t){b(u).then(e,e)}))},e.exports=h},18790:(e,t,n)=>{"use strict";n.d(t,{H:()=>s,f:()=>i});var r=n(16550),a=n(87462),o=n(67294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var a=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return a&&(n.push({route:e,match:a}),e.routes&&i(e.routes,t,n)),a})),n}function s(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?o.createElement(r.rs,n,e.map((function(e,n){return o.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,a.Z)({},n,{},t,{route:e})):o.createElement(e.component,(0,a.Z)({},n,t,{route:e}))}})}))):null}},73727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>v,VK:()=>u,rU:()=>m});var r=n(16550),a=n(75068),o=n(67294),i=n(99318),s=n(87462),l=n(63366),c=n(38776),u=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,a.Z)(t,e),t.prototype.render=function(){return o.createElement(r.F0,{history:this.history,children:this.props.children})},t}(o.Component);o.Component;var d=function(e,t){return"function"==typeof e?e(t):e},p=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},f=function(e){return e},g=o.forwardRef;void 0===g&&(g=f);var h=g((function(e,t){var n=e.innerRef,r=e.navigate,a=e.onClick,i=(0,l.Z)(e,["innerRef","navigate","onClick"]),c=i.target,u=(0,s.Z)({},i,{onClick:function(e){try{a&&a(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||c&&"_self"!==c||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return u.ref=f!==g&&t||n,o.createElement("a",u)}));var m=g((function(e,t){var n=e.component,a=void 0===n?h:n,u=e.replace,m=e.to,b=e.innerRef,y=(0,l.Z)(e,["component","replace","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=e.history,r=p(d(m,e.location),e.location),l=r?n.createHref(r):"",h=(0,s.Z)({},y,{href:l,navigate:function(){var t=d(m,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(p(t));(u||r?n.replace:n.push)(t)}});return f!==g?h.ref=t||b:h.innerRef=b,o.createElement(a,h)}))})),b=function(e){return e},y=o.forwardRef;void 0===y&&(y=b);var v=y((function(e,t){var n=e["aria-current"],a=void 0===n?"page":n,i=e.activeClassName,u=void 0===i?"active":i,f=e.activeStyle,g=e.className,h=e.exact,v=e.isActive,w=e.location,k=e.sensitive,x=e.strict,S=e.style,_=e.to,E=e.innerRef,C=(0,l.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return o.createElement(r.s6.Consumer,null,(function(e){e||(0,c.Z)(!1);var n=w||e.location,i=p(d(_,n),n),l=i.pathname,T=l&&l.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),A=T?(0,r.LX)(n.pathname,{path:T,exact:h,sensitive:k,strict:x}):null,j=!!(v?v(A,n):A),N="function"==typeof g?g(j):g,L="function"==typeof S?S(j):S;j&&(N=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(N,u),L=(0,s.Z)({},L,f));var P=(0,s.Z)({"aria-current":j&&a||null,className:N,style:L,to:i},C);return b!==y?P.ref=t||E:P.innerRef=E,o.createElement(m,P)}))}))},16550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>_,F0:()=>v,LX:()=>S,TH:()=>I,k6:()=>P,rs:()=>N,s6:()=>y});var r=n(75068),a=n(67294),o=n(45697),i=n.n(o),s=n(99318),l=n(38776),c=n(87462),u=n(39658),d=n.n(u),p=(n(59864),n(63366)),f=(n(8679),1073741823),g="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};var h=a.createContext||function(e,t){var n,o,s="__create-react-context-"+function(){var e="__global_unique_id__";return g[e]=(g[e]||0)+1}()+"__",l=function(e){function n(){for(var t,n,r,a=arguments.length,o=new Array(a),i=0;i<a;i++)o[i]=arguments[i];return(t=e.call.apply(e,[this].concat(o))||this).emitter=(n=t.props.value,r=[],{on:function(e){r.push(e)},off:function(e){r=r.filter((function(t){return t!==e}))},get:function(){return n},set:function(e,t){n=e,r.forEach((function(e){return e(n,t)}))}}),t}(0,r.Z)(n,e);var a=n.prototype;return a.getChildContext=function(){var e;return(e={})[s]=this.emitter,e},a.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,a=e.value;((o=r)===(i=a)?0!==o||1/o==1/i:o!=o&&i!=i)?n=0:(n="function"==typeof t?t(r,a):f,0!==(n|=0)&&this.emitter.set(e.value,n))}var o,i},a.render=function(){return this.props.children},n}(a.Component);l.childContextTypes=((n={})[s]=i().object.isRequired,n);var c=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var a=n.prototype;return a.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?f:t},a.componentDidMount=function(){this.context[s]&&this.context[s].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?f:e},a.componentWillUnmount=function(){this.context[s]&&this.context[s].off(this.onUpdate)},a.getValue=function(){return this.context[s]?this.context[s].get():e},a.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(a.Component);return c.contextTypes=((o={})[s]=i().object,o),{Provider:l,Consumer:c}},m=function(e){var t=h();return t.displayName=e,t},b=m("Router-History"),y=m("Router"),v=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return a.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},a.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(a.Component);a.Component;a.Component;var w={},k=1e4,x=0;function S(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,a=n.exact,o=void 0!==a&&a,i=n.strict,s=void 0!==i&&i,l=n.sensitive,c=void 0!==l&&l;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=w[n]||(w[n]={});if(r[e])return r[e];var a=[],o={regexp:d()(e,a,t),keys:a};return x<k&&(r[e]=o,x++),o}(n,{end:o,strict:s,sensitive:c}),a=r.regexp,i=r.keys,l=a.exec(e);if(!l)return null;var u=l[0],p=l.slice(1),f=e===u;return o&&!f?null:{path:n,url:"/"===n&&""===u?"/":u,isExact:f,params:i.reduce((function(e,t,n){return e[t.name]=p[n],e}),{})}}),null)}var _=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?S(n.pathname,e.props):t.match,o=(0,c.Z)({},t,{location:n,match:r}),i=e.props,s=i.children,u=i.component,d=i.render;return Array.isArray(s)&&function(e){return 0===a.Children.count(e)}(s)&&(s=null),a.createElement(y.Provider,{value:o},o.match?s?"function"==typeof s?s(o):s:u?a.createElement(u,o):d?d(o):null:"function"==typeof s?s(o):null)}))},t}(a.Component);function E(e){return"/"===e.charAt(0)?e:"/"+e}function C(e,t){if(!e)return t;var n=E(e);return 0!==t.pathname.indexOf(n)?t:(0,c.Z)({},t,{pathname:t.pathname.substr(n.length)})}function T(e){return"string"==typeof e?e:(0,s.Ep)(e)}function A(e){return function(){(0,l.Z)(!1)}}function j(){}a.Component;var N=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return a.createElement(y.Consumer,null,(function(t){t||(0,l.Z)(!1);var n,r,o=e.props.location||t.location;return a.Children.forEach(e.props.children,(function(e){if(null==r&&a.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?S(o.pathname,(0,c.Z)({},e.props,{path:i})):t.match}})),r?a.cloneElement(n,{location:o,computedMatch:r}):null}))},t}(a.Component);var L=a.useContext;function P(){return L(b)}function I(){return L(y).location}},39658:(e,t,n)=>{var r=n(5826);e.exports=f,e.exports.parse=o,e.exports.compile=function(e,t){return s(o(e,t),t)},e.exports.tokensToFunction=s,e.exports.tokensToRegExp=p;var a=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function o(e,t){for(var n,r=[],o=0,i=0,s="",u=t&&t.delimiter||"/";null!=(n=a.exec(e));){var d=n[0],p=n[1],f=n.index;if(s+=e.slice(i,f),i=f+d.length,p)s+=p[1];else{var g=e[i],h=n[2],m=n[3],b=n[4],y=n[5],v=n[6],w=n[7];s&&(r.push(s),s="");var k=null!=h&&null!=g&&g!==h,x="+"===v||"*"===v,S="?"===v||"*"===v,_=n[2]||u,E=b||y;r.push({name:m||o++,prefix:h||"",delimiter:_,optional:S,repeat:x,partial:k,asterisk:!!w,pattern:E?c(E):w?".*":"[^"+l(_)+"]+?"})}}return i<e.length&&(s+=e.substr(i)),s&&r.push(s),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function s(e,t){for(var n=new Array(e.length),a=0;a<e.length;a++)"object"==typeof e[a]&&(n[a]=new RegExp("^(?:"+e[a].pattern+")$",d(t)));return function(t,a){for(var o="",s=t||{},l=(a||{}).pretty?i:encodeURIComponent,c=0;c<e.length;c++){var u=e[c];if("string"!=typeof u){var d,p=s[u.name];if(null==p){if(u.optional){u.partial&&(o+=u.prefix);continue}throw new TypeError('Expected "'+u.name+'" to be defined')}if(r(p)){if(!u.repeat)throw new TypeError('Expected "'+u.name+'" to not repeat, but received `'+JSON.stringify(p)+"`");if(0===p.length){if(u.optional)continue;throw new TypeError('Expected "'+u.name+'" to not be empty')}for(var f=0;f<p.length;f++){if(d=l(p[f]),!n[c].test(d))throw new TypeError('Expected all "'+u.name+'" to match "'+u.pattern+'", but received `'+JSON.stringify(d)+"`");o+=(0===f?u.prefix:u.delimiter)+d}}else{if(d=u.asterisk?encodeURI(p).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):l(p),!n[c].test(d))throw new TypeError('Expected "'+u.name+'" to match "'+u.pattern+'", but received "'+d+'"');o+=u.prefix+d}}else o+=u}return o}}function l(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function c(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function u(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function p(e,t,n){r(t)||(n=t||n,t=[]);for(var a=(n=n||{}).strict,o=!1!==n.end,i="",s=0;s<e.length;s++){var c=e[s];if("string"==typeof c)i+=l(c);else{var p=l(c.prefix),f="(?:"+c.pattern+")";t.push(c),c.repeat&&(f+="(?:"+p+f+")*"),i+=f=c.optional?c.partial?p+"("+f+")?":"(?:"+p+"("+f+"))?":p+"("+f+")"}}var g=l(n.delimiter||"/"),h=i.slice(-g.length)===g;return a||(i=(h?i.slice(0,-g.length):i)+"(?:"+g+"(?=$))?"),i+=o?"$":a&&h?"":"(?="+g+"|$)",u(new RegExp("^"+i,d(n)),t)}function f(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return u(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],a=0;a<e.length;a++)r.push(f(e[a],t,n).source);return u(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return p(o(e,n),t,n)}(e,t,n)}},75251:(e,t,n)=>{"use strict";var r=n(67294),a=Symbol.for("react.element"),o=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,s=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,l={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,o={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)i.call(t,r)&&!l.hasOwnProperty(r)&&(o[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===o[r]&&(o[r]=t[r]);return{$$typeof:a,type:e,key:c,ref:u,props:o,_owner:s.current}}t.Fragment=o,t.jsx=c,t.jsxs=c},72408:(e,t)=>{"use strict";var n=Symbol.for("react.element"),r=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),o=Symbol.for("react.strict_mode"),i=Symbol.for("react.profiler"),s=Symbol.for("react.provider"),l=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),d=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),f=Symbol.iterator;var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},h=Object.assign,m={};function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||g}function y(){}function v(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||g}b.prototype.isReactComponent={},b.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},b.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},y.prototype=b.prototype;var w=v.prototype=new y;w.constructor=v,h(w,b.prototype),w.isPureReactComponent=!0;var k=Array.isArray,x=Object.prototype.hasOwnProperty,S={current:null},_={key:!0,ref:!0,__self:!0,__source:!0};function E(e,t,r){var a,o={},i=null,s=null;if(null!=t)for(a in void 0!==t.ref&&(s=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,a)&&!_.hasOwnProperty(a)&&(o[a]=t[a]);var l=arguments.length-2;if(1===l)o.children=r;else if(1<l){for(var c=Array(l),u=0;u<l;u++)c[u]=arguments[u+2];o.children=c}if(e&&e.defaultProps)for(a in l=e.defaultProps)void 0===o[a]&&(o[a]=l[a]);return{$$typeof:n,type:e,key:i,ref:s,props:o,_owner:S.current}}function C(e){return"object"==typeof e&&null!==e&&e.$$typeof===n}var T=/\/+/g;function A(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function j(e,t,a,o,i){var s=typeof e;"undefined"!==s&&"boolean"!==s||(e=null);var l=!1;if(null===e)l=!0;else switch(s){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case n:case r:l=!0}}if(l)return i=i(l=e),e=""===o?"."+A(l,0):o,k(i)?(a="",null!=e&&(a=e.replace(T,"$&/")+"/"),j(i,t,a,"",(function(e){return e}))):null!=i&&(C(i)&&(i=function(e,t){return{$$typeof:n,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,a+(!i.key||l&&l.key===i.key?"":(""+i.key).replace(T,"$&/")+"/")+e)),t.push(i)),1;if(l=0,o=""===o?".":o+":",k(e))for(var c=0;c<e.length;c++){var u=o+A(s=e[c],c);l+=j(s,t,a,u,i)}else if(u=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof u)for(e=u.call(e),c=0;!(s=e.next()).done;)l+=j(s=s.value,t,a,u=o+A(s,c++),i);else if("object"===s)throw t=String(e),Error("Objects are not valid as a React child (found: "+("[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function N(e,t,n){if(null==e)return e;var r=[],a=0;return j(e,r,"","",(function(e){return t.call(n,e,a++)})),r}function L(e){if(-1===e._status){var t=e._result;(t=t()).then((function(t){0!==e._status&&-1!==e._status||(e._status=1,e._result=t)}),(function(t){0!==e._status&&-1!==e._status||(e._status=2,e._result=t)})),-1===e._status&&(e._status=0,e._result=t)}if(1===e._status)return e._result.default;throw e._result}var P={current:null},I={transition:null},R={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:I,ReactCurrentOwner:S};t.Children={map:N,forEach:function(e,t,n){N(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return N(e,(function(){t++})),t},toArray:function(e){return N(e,(function(e){return e}))||[]},only:function(e){if(!C(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},t.Component=b,t.Fragment=a,t.Profiler=i,t.PureComponent=v,t.StrictMode=o,t.Suspense=u,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=R,t.cloneElement=function(e,t,r){if(null==e)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var a=h({},e.props),o=e.key,i=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(i=t.ref,s=S.current),void 0!==t.key&&(o=""+t.key),e.type&&e.type.defaultProps)var l=e.type.defaultProps;for(c in t)x.call(t,c)&&!_.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==l?l[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=r;else if(1<c){l=Array(c);for(var u=0;u<c;u++)l[u]=arguments[u+2];a.children=l}return{$$typeof:n,type:e.type,key:o,ref:i,props:a,_owner:s}},t.createContext=function(e){return(e={$$typeof:l,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null}).Provider={$$typeof:s,_context:e},e.Consumer=e},t.createElement=E,t.createFactory=function(e){var t=E.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:c,render:e}},t.isValidElement=C,t.lazy=function(e){return{$$typeof:p,_payload:{_status:-1,_result:e},_init:L}},t.memo=function(e,t){return{$$typeof:d,type:e,compare:void 0===t?null:t}},t.startTransition=function(e){var t=I.transition;I.transition={};try{e()}finally{I.transition=t}},t.unstable_act=function(){throw Error("act(...) is not supported in production builds of React.")},t.useCallback=function(e,t){return P.current.useCallback(e,t)},t.useContext=function(e){return P.current.useContext(e)},t.useDebugValue=function(){},t.useDeferredValue=function(e){return P.current.useDeferredValue(e)},t.useEffect=function(e,t){return P.current.useEffect(e,t)},t.useId=function(){return P.current.useId()},t.useImperativeHandle=function(e,t,n){return P.current.useImperativeHandle(e,t,n)},t.useInsertionEffect=function(e,t){return P.current.useInsertionEffect(e,t)},t.useLayoutEffect=function(e,t){return P.current.useLayoutEffect(e,t)},t.useMemo=function(e,t){return P.current.useMemo(e,t)},t.useReducer=function(e,t,n){return P.current.useReducer(e,t,n)},t.useRef=function(e){return P.current.useRef(e)},t.useState=function(e){return P.current.useState(e)},t.useSyncExternalStore=function(e,t,n){return P.current.useSyncExternalStore(e,t,n)},t.useTransition=function(){return P.current.useTransition()},t.version="18.2.0"},67294:(e,t,n)=>{"use strict";e.exports=n(72408)},85893:(e,t,n)=>{"use strict";e.exports=n(75251)},60053:(e,t)=>{"use strict";function n(e,t){var n=e.length;e.push(t);e:for(;0<n;){var r=n-1>>>1,a=e[r];if(!(0<o(a,t)))break e;e[r]=t,e[n]=a,n=r}}function r(e){return 0===e.length?null:e[0]}function a(e){if(0===e.length)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,a=e.length,i=a>>>1;r<i;){var s=2*(r+1)-1,l=e[s],c=s+1,u=e[c];if(0>o(l,n))c<a&&0>o(u,l)?(e[r]=u,e[c]=n,r=c):(e[r]=l,e[s]=n,r=s);else{if(!(c<a&&0>o(u,n)))break e;e[r]=u,e[c]=n,r=c}}}return t}function o(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var s=Date,l=s.now();t.unstable_now=function(){return s.now()-l}}var c=[],u=[],d=1,p=null,f=3,g=!1,h=!1,m=!1,b="function"==typeof setTimeout?setTimeout:null,y="function"==typeof clearTimeout?clearTimeout:null,v="undefined"!=typeof setImmediate?setImmediate:null;function w(e){for(var t=r(u);null!==t;){if(null===t.callback)a(u);else{if(!(t.startTime<=e))break;a(u),t.sortIndex=t.expirationTime,n(c,t)}t=r(u)}}function k(e){if(m=!1,w(e),!h)if(null!==r(c))h=!0,I(x);else{var t=r(u);null!==t&&R(k,t.startTime-e)}}function x(e,n){h=!1,m&&(m=!1,y(C),C=-1),g=!0;var o=f;try{for(w(n),p=r(c);null!==p&&(!(p.expirationTime>n)||e&&!j());){var i=p.callback;if("function"==typeof i){p.callback=null,f=p.priorityLevel;var s=i(p.expirationTime<=n);n=t.unstable_now(),"function"==typeof s?p.callback=s:p===r(c)&&a(c),w(n)}else a(c);p=r(c)}if(null!==p)var l=!0;else{var d=r(u);null!==d&&R(k,d.startTime-n),l=!1}return l}finally{p=null,f=o,g=!1}}"undefined"!=typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);var S,_=!1,E=null,C=-1,T=5,A=-1;function j(){return!(t.unstable_now()-A<T)}function N(){if(null!==E){var e=t.unstable_now();A=e;var n=!0;try{n=E(!0,e)}finally{n?S():(_=!1,E=null)}}else _=!1}if("function"==typeof v)S=function(){v(N)};else if("undefined"!=typeof MessageChannel){var L=new MessageChannel,P=L.port2;L.port1.onmessage=N,S=function(){P.postMessage(null)}}else S=function(){b(N,0)};function I(e){E=e,_||(_=!0,S())}function R(e,n){C=b((function(){e(t.unstable_now())}),n)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){h||g||(h=!0,I(x))},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):T=0<e?Math.floor(1e3/e):5},t.unstable_getCurrentPriorityLevel=function(){return f},t.unstable_getFirstCallbackNode=function(){return r(c)},t.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},t.unstable_scheduleCallback=function(e,a,o){var i=t.unstable_now();switch("object"==typeof o&&null!==o?o="number"==typeof(o=o.delay)&&0<o?i+o:i:o=i,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:d++,callback:a,priorityLevel:e,startTime:o,expirationTime:s=o+s,sortIndex:-1},o>i?(e.sortIndex=o,n(u,e),null===r(c)&&e===r(u)&&(m?(y(C),C=-1):m=!0,R(k,o-i))):(e.sortIndex=s,n(c,e),h||g||(h=!0,I(x))),e},t.unstable_shouldYield=j,t.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}},63840:(e,t,n)=>{"use strict";e.exports=n(60053)},96774:e=>{e.exports=function(e,t,n,r){var a=n?n.call(r,e,t):void 0;if(void 0!==a)return!!a;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var o=Object.keys(e),i=Object.keys(t);if(o.length!==i.length)return!1;for(var s=Object.prototype.hasOwnProperty.bind(t),l=0;l<o.length;l++){var c=o[l];if(!s(c))return!1;var u=e[c],d=t[c];if(!1===(a=n?n.call(r,u,d,c):void 0)||void 0===a&&u!==d)return!1}return!0}},36809:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={title:"mf",tagline:"blog and additional materials for courses at \u03c6",url:"https://blog.mfocko.xyz",baseUrl:"/",organizationName:"mfocko",projectName:"blog",trailingSlash:!0,onBrokenLinks:"throw",onBrokenMarkdownLinks:"throw",favicon:"img/favicon.ico",i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["classic",{docs:!1,blog:!1,theme:{customCss:["/home/runner/work/blog/blog/src/css/custom.scss","/home/runner/work/blog/blog/src/css/jetbrains_mono.css"]}}]],plugins:[["@docusaurus/plugin-content-docs",{id:"algorithms",path:"algorithms",routeBasePath:"algorithms",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-docs",{id:"c",path:"c",routeBasePath:"c",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-docs",{id:"cpp",path:"cpp",routeBasePath:"cpp",sidebarPath:"/home/runner/work/blog/blog/sidebars.js",showLastUpdateTime:!0,editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],["@docusaurus/plugin-content-blog",{id:"blog",routeBasePath:"blog",path:"./blog",feedOptions:{type:"all",description:"mf's blog"},editUrl:"https://github.com/mfocko/blog/tree/main",remarkPlugins:[null],rehypePlugins:[null]}],"docusaurus-plugin-sass",["@docusaurus/plugin-client-redirects",{}]],stylesheets:[{href:"https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css",type:"text/css",integrity:"sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM",crossorigin:"anonymous"}],themeConfig:{navbar:{title:"mf",items:[{type:"dropdown",label:"Additional FI MU materials",items:[{type:"doc",docId:"algorithms-intro",docsPluginId:"algorithms",label:"Algorithms"},{type:"doc",docId:"c-intro",docsPluginId:"c",label:"C"},{type:"doc",docId:"cpp-intro",docsPluginId:"cpp",label:"C++"}],position:"left"},{to:"contributions",label:"Contributions",position:"left"},{to:"talks",label:"Talks",position:"left"},{to:"blog",position:"right",label:"Blog"}],hideOnScroll:!1},footer:{style:"dark",copyright:"Copyright \xa9 2024 Matej Focko.",links:[{title:"Git",items:[{label:"GitHub",href:"https://github.com/mfocko"},{label:"GitLab",href:"https://gitlab.com/mfocko"},{label:"Gitea (self-hosted)",href:"https://git.mfocko.xyz/mfocko"}]},{title:"Social #1",items:[{label:"LinkedIn",href:"https://www.linkedin.com/in/mfocko/"},{label:"Fosstodon",href:"https://fosstodon.org/@m4tt_314"},{label:"Hachyderm.io",href:"https://hachyderm.io/@m4tt_314"}]},{title:"Social #2",items:[{label:"Twitter",href:"https://twitter.com/m4tt_314"},{label:"Twitch",href:"https://twitch.tv/m4tt_314"},{label:"Ko-fi",href:"https://ko-fi.com/m4tt_314"}]}]},prism:{theme:{plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:["ada","bash","csharp","dot","haskell","java","nix","pascal","python","ruby","rust"],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},docs:{sidebar:{hideable:!0,autoCollapseCategories:!1},versionPersistence:"localStorage"},mermaid:{options:{fontFamily:"Iosevka,'Iosevka Term','Cascadia Code','JetBrains Mono','Fira Code',monospace"},theme:{dark:"dark",light:"default"}},algolia:{appId:"0VXRFPR4QF",apiKey:"9d4d452117cfaaae3e51b9568e22aa16",indexName:"mfocko",contextualSearch:!0,searchParameters:{},searchPagePath:"search"},colorMode:{defaultMode:"light",disableSwitch:!1,respectPrefersColorScheme:!1},metadata:[],tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3}},markdown:{mermaid:!0,format:"mdx",mdx1Compat:{comments:!0,admonitions:!0,headingIds:!0}},themes:["@docusaurus/theme-mermaid"],baseUrlIssueBanner:!0,onBrokenAnchors:"warn",onDuplicateRoutes:"warn",staticDirectories:["static"],customFields:{},scripts:[],headTags:[],clientModules:[],titleDelimiter:"|",noIndex:!1}},87462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},75068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>a})},63366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,a={},o=Object.keys(e);for(r=0;r<o.length;r++)n=o[r],t.indexOf(n)>=0||(a[n]=e[n]);return a}n.d(t,{Z:()=>r})},36905:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},788:(e,t,n)=>{"use strict";function r(e){var t,n,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(a&&(a+=" "),a+=n);else for(t in e)e[t]&&(a&&(a+=" "),a+=t);return a}n.d(t,{Z:()=>a});const a=function(){for(var e,t,n=0,a="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(a&&(a+=" "),a+=t);return a}},14965:(e,t,n)=>{"use strict";n.d(t,{y$:()=>J,p1:()=>C});var r=n(67294);function a(e){var t,n,r="";if("string"==typeof e||"number"==typeof e)r+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=a(e[t]))&&(r&&(r+=" "),r+=n);else for(t in e)e[t]&&(r&&(r+=" "),r+=t);return r}const o=function(){for(var e,t,n=0,r="";n<arguments.length;)(e=arguments[n++])&&(t=a(e))&&(r&&(r+=" "),r+=t);return r};var i,s,l,c,u,d=Object.create,p=Object.defineProperty,f=Object.defineProperties,g=Object.getOwnPropertyDescriptor,h=Object.getOwnPropertyDescriptors,m=Object.getOwnPropertyNames,b=Object.getOwnPropertySymbols,y=Object.getPrototypeOf,v=Object.prototype.hasOwnProperty,w=Object.prototype.propertyIsEnumerable,k=(e,t,n)=>t in e?p(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,x=(e,t)=>{for(var n in t||(t={}))v.call(t,n)&&k(e,n,t[n]);if(b)for(var n of b(t))w.call(t,n)&&k(e,n,t[n]);return e},S=(e,t)=>f(e,h(t)),_=(e,t)=>{var n={};for(var r in e)v.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&b)for(var r of b(e))t.indexOf(r)<0&&w.call(e,r)&&(n[r]=e[r]);return n},E=(i={"../../node_modules/.pnpm/prismjs@1.29.0_patch_hash=vrxx3pzkik6jpmgpayxfjunetu/node_modules/prismjs/prism.js"(e,t){var n=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var a,o;switch(n=n||{},r.util.type(t)){case"Object":if(o=r.util.objId(t),n[o])return n[o];for(var i in a={},n[o]=a,t)t.hasOwnProperty(i)&&(a[i]=e(t[i],n));return a;case"Array":return o=r.util.objId(t),n[o]?n[o]:(a=[],n[o]=a,t.forEach((function(t,r){a[r]=e(t,n)})),a);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var a=e.classList;if(a.contains(t))return!0;if(a.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var a in t)n[a]=t[a];return n},insertBefore:function(e,t,n,a){var o=(a=a||r.languages)[e],i={};for(var s in o)if(o.hasOwnProperty(s)){if(s==t)for(var l in n)n.hasOwnProperty(l)&&(i[l]=n[l]);n.hasOwnProperty(s)||(i[s]=o[s])}var c=a[e];return a[e]=i,r.languages.DFS(r.languages,(function(t,n){n===c&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,a,o){o=o||{};var i=r.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],a||s);var l=t[s],c=r.util.type(l);"Object"!==c||o[i(l)]?"Array"!==c||o[i(l)]||(o[i(l)]=!0,e(l,n,s,o)):(o[i(l)]=!0,e(l,n,null,o))}}},plugins:{},highlight:function(e,t,n){var o={code:e,grammar:t,language:n};if(r.hooks.run("before-tokenize",o),!o.grammar)throw new Error('The language "'+o.language+'" has no grammar.');return o.tokens=r.tokenize(o.code,o.grammar),r.hooks.run("after-tokenize",o),a.stringify(r.util.encode(o.tokens),o.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var a=new s;return l(a,a.head,e),i(e,a,t,a.head,0),function(e){for(var t=[],n=e.head.next;n!==e.tail;)t.push(n.value),n=n.next;return t}(a)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var a,o=0;a=n[o++];)a(t)}},Token:a};function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function o(e,t,n,r){e.lastIndex=t;var a=e.exec(n);if(a&&r&&a[1]){var o=a[1].length;a.index+=o,a[0]=a[0].slice(o)}return a}function i(e,t,n,s,u,d){for(var p in n)if(n.hasOwnProperty(p)&&n[p]){var f=n[p];f=Array.isArray(f)?f:[f];for(var g=0;g<f.length;++g){if(d&&d.cause==p+","+g)return;var h=f[g],m=h.inside,b=!!h.lookbehind,y=!!h.greedy,v=h.alias;if(y&&!h.pattern.global){var w=h.pattern.toString().match(/[imsuy]*$/)[0];h.pattern=RegExp(h.pattern.source,w+"g")}for(var k=h.pattern||h,x=s.next,S=u;x!==t.tail&&!(d&&S>=d.reach);S+=x.value.length,x=x.next){var _=x.value;if(t.length>e.length)return;if(!(_ instanceof a)){var E,C=1;if(y){if(!(E=o(k,S,e,b))||E.index>=e.length)break;var T=E.index,A=E.index+E[0].length,j=S;for(j+=x.value.length;T>=j;)j+=(x=x.next).value.length;if(S=j-=x.value.length,x.value instanceof a)continue;for(var N=x;N!==t.tail&&(j<A||"string"==typeof N.value);N=N.next)C++,j+=N.value.length;C--,_=e.slice(S,j),E.index-=S}else if(!(E=o(k,0,_,b)))continue;T=E.index;var L=E[0],P=_.slice(0,T),I=_.slice(T+L.length),R=S+_.length;d&&R>d.reach&&(d.reach=R);var O=x.prev;if(P&&(O=l(t,O,P),S+=P.length),c(t,O,C),x=l(t,O,new a(p,m?r.tokenize(L,m):L,v,L)),I&&l(t,x,I),C>1){var F={cause:p+","+g,reach:R};i(e,t,n,x.prev,S,F),d&&F.reach>d.reach&&(d.reach=F.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,a={value:n,prev:t,next:r};return t.next=a,r.prev=a,e.length++,a}function c(e,t,n){for(var r=t.next,a=0;a<n&&r!==e.tail;a++)r=r.next;t.next=r,r.prev=t,e.length-=a}return a.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var a="";return t.forEach((function(t){a+=e(t,n)})),a}var o={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(o.classes,i):o.classes.push(i)),r.hooks.run("wrap",o);var s="";for(var l in o.attributes)s+=" "+l+'="'+(o.attributes[l]||"").replace(/"/g,""")+'"';return"<"+o.tag+' class="'+o.classes.join(" ")+'"'+s+">"+o.content+"</"+o.tag+">"},r}();t.exports=n,n.default=n}},function(){return s||(0,i[m(i)[0]])((s={exports:{}}).exports,s),s.exports}),C=((e,t,n)=>(n=null!=e?d(y(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of m(t))v.call(e,a)||a===n||p(e,a,{get:()=>t[a],enumerable:!(r=g(t,a))||r.enumerable});return e})(!t&&e&&e.__esModule?n:p(n,"default",{value:e,enumerable:!0}),e)))(E());C.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},C.languages.markup.tag.inside["attr-value"].inside.entity=C.languages.markup.entity,C.languages.markup.doctype.inside["internal-subset"].inside=C.languages.markup,C.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(C.languages.markup.tag,"addInlined",{value:function(e,t){var n;(t=((n=((n={})["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:C.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i,{"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}}))["language-"+t]={pattern:/[\s\S]+/,inside:C.languages[t]},{}))[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:n},C.languages.insertBefore("markup","cdata",t)}}),Object.defineProperty(C.languages.markup.tag,"addAttribute",{value:function(e,t){C.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:C.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),C.languages.html=C.languages.markup,C.languages.mathml=C.languages.markup,C.languages.svg=C.languages.markup,C.languages.xml=C.languages.extend("markup",{}),C.languages.ssml=C.languages.xml,C.languages.atom=C.languages.xml,C.languages.rss=C.languages.xml,function(e){var t={pattern:/\\[\\(){}[\]^$+*?|.]/,alias:"escape"},n=/\\(?:x[\da-fA-F]{2}|u[\da-fA-F]{4}|u\{[\da-fA-F]+\}|0[0-7]{0,2}|[123][0-7]{2}|c[a-zA-Z]|.)/,r="(?:[^\\\\-]|"+n.source+")",a=(r=RegExp(r+"-"+r),{pattern:/(<|')[^<>']+(?=[>']$)/,lookbehind:!0,alias:"variable"});e.languages.regex={"char-class":{pattern:/((?:^|[^\\])(?:\\\\)*)\[(?:[^\\\]]|\\[\s\S])*\]/,lookbehind:!0,inside:{"char-class-negation":{pattern:/(^\[)\^/,lookbehind:!0,alias:"operator"},"char-class-punctuation":{pattern:/^\[|\]$/,alias:"punctuation"},range:{pattern:r,inside:{escape:n,"range-punctuation":{pattern:/-/,alias:"operator"}}},"special-escape":t,"char-set":{pattern:/\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},escape:n}},"special-escape":t,"char-set":{pattern:/\.|\\[wsd]|\\p\{[^{}]+\}/i,alias:"class-name"},backreference:[{pattern:/\\(?![123][0-7]{2})[1-9]/,alias:"keyword"},{pattern:/\\k<[^<>']+>/,alias:"keyword",inside:{"group-name":a}}],anchor:{pattern:/[$^]|\\[ABbGZz]/,alias:"function"},escape:n,group:[{pattern:/\((?:\?(?:<[^<>']+>|'[^<>']+'|[>:]|<?[=!]|[idmnsuxU]+(?:-[idmnsuxU]+)?:?))?/,alias:"punctuation",inside:{"group-name":a}},{pattern:/\)/,alias:"punctuation"}],quantifier:{pattern:/(?:[+*?]|\{\d+(?:,\d*)?\})[?+]?/,alias:"number"},alternation:{pattern:/\|/,alias:"keyword"}}}(C),C.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},C.languages.javascript=C.languages.extend("clike",{"class-name":[C.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),C.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,C.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:C.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:C.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:C.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:C.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:C.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),C.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:C.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),C.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),C.languages.markup&&(C.languages.markup.tag.addInlined("script","javascript"),C.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),C.languages.js=C.languages.javascript,C.languages.actionscript=C.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),C.languages.actionscript["class-name"].alias="function",delete C.languages.actionscript.parameter,delete C.languages.actionscript["literal-property"],C.languages.markup&&C.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:C.languages.markup}}),c=/#(?!\{).+/,u={pattern:/#\{[^}]+\}/,alias:"variable"},(l=C).languages.coffeescript=l.languages.extend("javascript",{comment:c,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:u}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),l.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:c,interpolation:u}}}),l.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:l.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:u}}]}),l.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete l.languages.coffeescript["template-string"],l.languages.coffee=l.languages.coffeescript,function(e){var t=e.languages.javadoclike={parameter:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*@(?:arg|arguments|param)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^[\t ]*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/};Object.defineProperty(t,"addSupport",{value:function(t,n){(t="string"==typeof t?[t]:t).forEach((function(t){var r=function(e){e.inside||(e.inside={}),e.inside.rest=n},a="doc-comment";if(o=e.languages[t]){var o,i=o[a];if((i=i||(o=e.languages.insertBefore(t,"comment",{"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,lookbehind:!0,alias:"comment"}}))[a])instanceof RegExp&&(i=o[a]={pattern:i}),Array.isArray(i))for(var s=0,l=i.length;s<l;s++)i[s]instanceof RegExp&&(i[s]={pattern:i[s]}),r(i[s]);else r(i)}}))}}),t.addSupport(["java","javascript","php"],t)}(C),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;(t=(e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css,e.languages.markup))&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(C),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,n=(t=(e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+t.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[t,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}}),{pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0}),{pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0});e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|RebeccaPurple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,number:n})}(C),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",a=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),o=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+o+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(o),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(C),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,a=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source,i=(e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+o+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+o+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var a,o=t[n];"code"!==o.type?e(o.content):(a=o.content[1],o=o.content[3],a&&o&&"code-language"===a.type&&"code-block"===o.type&&"string"==typeof a.content&&(a=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),a="language-"+(a=(/[a-z][\w-]*/i.exec(a)||[""])[0].toLowerCase()),o.alias?"string"==typeof o.alias?o.alias=[o.alias,a]:o.alias.push(a):o.alias=[a]))}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,a=t.classes.length;r<a;r++){var o=t.classes[r];if(o=/language-(.+)/.exec(o)){n=o[1];break}}var c,u=e.languages[n];u?t.content=e.highlight(t.content.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;return"#"===(t=t.toLowerCase())[0]?(n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),l(n)):s[t]||e})),u,n):n&&"none"!==n&&e.plugins.autoloader&&(c="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random()),t.attributes.id=c,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(c);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))})))}})),RegExp(e.languages.markup.tag.pattern.source,"gi")),s={amp:"&",lt:"<",gt:">",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(C),C.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:C.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},C.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var a=[];if(d(["definition-mutation","punctuation"])&&"("===u(1).content){n+=2;var o=p(/^\($/,/^\)$/);if(-1===o)continue;for(;n<o;n++){var i=u(0);"variable"===i.type&&(f(i,"variable-input"),a.push(i.content))}n=o+1}if(d(["punctuation","property-query"])&&"{"===u(0).content&&(n++,f(u(0),"property-mutation"),0<a.length)){var s=p(/^\{$/,/^\}$/);if(-1!==s)for(var l=n;l<s;l++){var c=t[l];"variable"===c.type&&0<=a.indexOf(c.content)&&f(c,"variable-input")}}}}function u(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=u(n+t);if(!r||r.type!==e[n])return}return 1}function p(e,r){for(var a=1,o=n;o<t.length;o++){var i=t[o],s=i.content;if("punctuation"===i.type&&"string"==typeof s)if(e.test(s))a++;else if(r.test(s)&&0==--a)return o}return-1}function f(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),C.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,a=r.inside["interpolation-punctuation"],o=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(t,n,r){return t={code:t,grammar:n,language:r},e.hooks.run("before-tokenize",t),t.tokens=e.tokenize(t.code,t.grammar),e.hooks.run("after-tokenize",t),t.tokens}function l(t,n,i){var l=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),c=0,u={},d=(l=s(l.map((function(e){if("string"==typeof e)return e;var n,r;for(e=e.content;-1!==t.indexOf((r=c++,n="___"+i.toUpperCase()+"_"+r+"___")););return u[n]=e,n})).join(""),n,i),Object.keys(u));return c=0,function t(n){for(var o=0;o<n.length;o++){if(c>=d.length)return;var i,l,p,f,g,h,m,b=n[o];"string"==typeof b||"string"==typeof b.content?(i=d[c],-1!==(m=(h="string"==typeof b?b:b.content).indexOf(i))&&(++c,l=h.substring(0,m),g=u[i],p=void 0,(f={})["interpolation-punctuation"]=a,3===(f=e.tokenize(g,f)).length&&((p=[1,1]).push.apply(p,s(f[1],e.languages.javascript,"javascript")),f.splice.apply(f,p)),p=new e.Token("interpolation",f,r.alias,g),f=h.substring(m+i.length),g=[],l&&g.push(l),g.push(p),f&&(t(h=[f]),g.push.apply(g,h)),"string"==typeof b?(n.splice.apply(n,[o,1].concat(g)),o+=g.length-1):b.content=g)):(m=b.content,Array.isArray(m)?t(m):t([m]))}}(l),new e.Token(i,l,"language-"+i,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var c={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function u(e){return"string"==typeof e?e:Array.isArray(e)?e.map(u).join(""):u(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in c&&function t(n){for(var r=0,a=n.length;r<a;r++){var o,i,s,c=n[r];"string"!=typeof c&&(o=c.content,Array.isArray(o)?"template-string"===c.type?(c=o[1],3===o.length&&"string"!=typeof c&&"embedded-code"===c.type&&(i=u(c),c=c.alias,c=Array.isArray(c)?c[0]:c,s=e.languages[c])&&(o[1]=l(i,s,c))):t(o):"string"!=typeof o&&t([o]))}}(t.tokens)}))}(C),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(C),function(e){var t=e.languages.javascript,n=/\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})+\}/.source,r="(@(?:arg|argument|param|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(r+/(?:(?!\s)[$\w\xA0-\uFFFF.])+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(r+/\[(?:(?!\s)[$\w\xA0-\uFFFF.])+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp(/(@(?:augments|class|extends|interface|memberof!?|template|this|typedef)\s+(?:<TYPE>\s+)?)[A-Z]\w*(?:\.[A-Z]\w*)*/.source.replace(/<TYPE>/g,(function(){return n}))),lookbehind:!0,inside:{punctuation:/\./}},{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{string:t.string,number:t.number,boolean:t.boolean,keyword:e.languages.typescript.keyword,operator:/=>|\.\.\.|[&|?:*]/,punctuation:/[.,;=<>{}()[\]]/}}],example:{pattern:/(@example\s+(?!\s))(?:[^@\s]|\s+(?!\s))+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^([\t ]*(?:\*\s*)?)\S.*$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(C),function(e){e.languages.flow=e.languages.extend("javascript",{}),e.languages.insertBefore("flow","keyword",{type:[{pattern:/\b(?:[Bb]oolean|Function|[Nn]umber|[Ss]tring|[Ss]ymbol|any|mixed|null|void)\b/,alias:"class-name"}]}),e.languages.flow["function-variable"].pattern=/(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=\s*(?:function\b|(?:\([^()]*\)(?:\s*:\s*\w+)?|(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:Class|declare|opaque|type)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:Diff|Enum|Exact|Keys|ObjMap|PropertyType|Record|Shape|Subtype|Supertype|await)\b(?!\$)/,lookbehind:!0})}(C),C.languages.n4js=C.languages.extend("javascript",{keyword:/\b(?:Array|any|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),C.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),C.languages.n4jsd=C.languages.n4js,function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var a=n[r],o=e.languages.javascript[a];a=(o="RegExp"===e.util.type(o)?e.languages.javascript[a]={pattern:o}:o).inside||{};(o.inside=a)["maybe-class-name"]=/^[A-Z][\s\S]*/}}(C),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,a=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function o(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return a})),RegExp(e,t)}function i(t){for(var n=[],r=0;r<t.length;r++){var a=t[r],o=!1;"string"!=typeof a&&("tag"===a.type&&a.content[0]&&"tag"===a.content[0].type?"</"===a.content[0].content[0].content?0<n.length&&n[n.length-1].tagName===s(a.content[0].content[1])&&n.pop():"/>"!==a.content[a.content.length-1].content&&n.push({tagName:s(a.content[0].content[1]),openedBraces:0}):0<n.length&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:0<n.length&&0<n[n.length-1].openedBraces&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&0<n.length&&0===n[n.length-1].openedBraces&&(o=s(a),r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(o+=s(t[r+1]),t.splice(r+1,1)),0<r&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(o=s(t[r-1])+o,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",o,null,o)),a.content&&"string"!=typeof a.content&&i(a.content)}}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:o(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var s=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(s).join(""):""};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||i(e.tokens)}))}(C),function(e){var t=e.util.clone(e.languages.typescript);(t=(e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"],e.languages.tsx.tag)).pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+t.pattern.source+")",t.pattern.flags),t.lookbehind=!0}(C),C.languages.swift={comment:{pattern:/(^|[^\\:])(?:\/\/.*|\/\*(?:[^/*]|\/(?!\*)|\*(?!\/)|\/\*(?:[^*]|\*(?!\/))*\*\/)*\*\/)/,lookbehind:!0,greedy:!0},"string-literal":[{pattern:RegExp(/(^|[^"#])/.source+"(?:"+/"(?:\\(?:\((?:[^()]|\([^()]*\))*\)|\r\n|[^(])|[^\\\r\n"])*"/.source+"|"+/"""(?:\\(?:\((?:[^()]|\([^()]*\))*\)|[^(])|[^\\"]|"(?!""))*"""/.source+")"+/(?!["#])/.source),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\\($/,alias:"punctuation"},punctuation:/\\(?=[\r\n])/,string:/[\s\S]+/}},{pattern:RegExp(/(^|[^"#])(#+)/.source+"(?:"+/"(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|\r\n|[^#])|[^\\\r\n])*?"/.source+"|"+/"""(?:\\(?:#+\((?:[^()]|\([^()]*\))*\)|[^#])|[^\\])*?"""/.source+")\\2"),lookbehind:!0,greedy:!0,inside:{interpolation:{pattern:/(\\#+\()(?:[^()]|\([^()]*\))*(?=\))/,lookbehind:!0,inside:null},"interpolation-punctuation":{pattern:/^\)|\\#+\($/,alias:"punctuation"},string:/[\s\S]+/}}],directive:{pattern:RegExp(/#/.source+"(?:"+/(?:elseif|if)\b/.source+"(?:[ \t]*"+/(?:![ \t]*)?(?:\b\w+\b(?:[ \t]*\((?:[^()]|\([^()]*\))*\))?|\((?:[^()]|\([^()]*\))*\))(?:[ \t]*(?:&&|\|\|))?/.source+")+|"+/(?:else|endif)\b/.source+")"),alias:"property",inside:{"directive-name":/^#\w+/,boolean:/\b(?:false|true)\b/,number:/\b\d+(?:\.\d+)*\b/,operator:/!|&&|\|\||[<>]=?/,punctuation:/[(),]/}},literal:{pattern:/#(?:colorLiteral|column|dsohandle|file(?:ID|Literal|Path)?|function|imageLiteral|line)\b/,alias:"constant"},"other-directive":{pattern:/#\w+\b/,alias:"property"},attribute:{pattern:/@\w+/,alias:"atrule"},"function-definition":{pattern:/(\bfunc\s+)\w+/,lookbehind:!0,alias:"function"},label:{pattern:/\b(break|continue)\s+\w+|\b[a-zA-Z_]\w*(?=\s*:\s*(?:for|repeat|while)\b)/,lookbehind:!0,alias:"important"},keyword:/\b(?:Any|Protocol|Self|Type|actor|as|assignment|associatedtype|associativity|async|await|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic|else|enum|extension|fallthrough|fileprivate|final|for|func|get|guard|higherThan|if|import|in|indirect|infix|init|inout|internal|is|isolated|lazy|left|let|lowerThan|mutating|none|nonisolated|nonmutating|open|operator|optional|override|postfix|precedencegroup|prefix|private|protocol|public|repeat|required|rethrows|return|right|safe|self|set|some|static|struct|subscript|super|switch|throw|throws|try|typealias|unowned|unsafe|var|weak|where|while|willSet)\b/,boolean:/\b(?:false|true)\b/,nil:{pattern:/\bnil\b/,alias:"constant"},"short-argument":/\$\d+\b/,omit:{pattern:/\b_\b/,alias:"keyword"},number:/\b(?:[\d_]+(?:\.[\de_]+)?|0x[a-f0-9_]+(?:\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,"class-name":/\b[A-Z](?:[A-Z_\d]*[a-z]\w*)?\b/,function:/\b[a-z_]\w*(?=\s*\()/i,constant:/\b(?:[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,operator:/[-+*/%=!<>&|^~?]+|\.[.\-+*/%=!<>&|^~?]+/,punctuation:/[{}[\]();,.:\\]/},C.languages.swift["string-literal"].forEach((function(e){e.inside.interpolation.inside=C.languages.swift})),function(e){e.languages.kotlin=e.languages.extend("clike",{keyword:{pattern:/(^|[^.])\b(?:abstract|actual|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|dynamic|else|enum|expect|external|final|finally|for|fun|get|if|import|in|infix|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|operator|out|override|package|private|protected|public|reified|return|sealed|set|super|suspend|tailrec|this|throw|to|try|typealias|val|var|vararg|when|where|while)\b/,lookbehind:!0},function:[{pattern:/(?:`[^\r\n`]+`|\b\w+)(?=\s*\()/,greedy:!0},{pattern:/(\.)(?:`[^\r\n`]+`|\w+)(?=\s*\{)/,lookbehind:!0,greedy:!0}],number:/\b(?:0[xX][\da-fA-F]+(?:_[\da-fA-F]+)*|0[bB][01]+(?:_[01]+)*|\d+(?:_\d+)*(?:\.\d+(?:_\d+)*)?(?:[eE][+-]?\d+(?:_\d+)*)?[fFL]?)\b/,operator:/\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/}),delete e.languages.kotlin["class-name"];var t={"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:e.languages.kotlin}};e.languages.insertBefore("kotlin","string",{"string-literal":[{pattern:/"""(?:[^$]|\$(?:(?!\{)|\{[^{}]*\}))*?"""/,alias:"multiline",inside:{interpolation:{pattern:/\$(?:[a-z_]\w*|\{[^{}]*\})/i,inside:t},string:/[\s\S]+/}},{pattern:/"(?:[^"\\\r\n$]|\\.|\$(?:(?!\{)|\{[^{}]*\}))*"/,alias:"singleline",inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:[a-z_]\w*|\{[^{}]*\})/i,lookbehind:!0,inside:t},string:/[\s\S]+/}}],char:{pattern:/'(?:[^'\\\r\n]|\\(?:.|u[a-fA-F0-9]{0,4}))'/,greedy:!0}}),delete e.languages.kotlin.string,e.languages.insertBefore("kotlin","keyword",{annotation:{pattern:/\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,alias:"builtin"}}),e.languages.insertBefore("kotlin","function",{label:{pattern:/\b\w+@|@\w+\b/,alias:"symbol"}}),e.languages.kt=e.languages.kotlin,e.languages.kts=e.languages.kotlin}(C),C.languages.c=C.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),C.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),C.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},C.languages.c.string],char:C.languages.c.char,comment:C.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:C.languages.c}}}}),C.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete C.languages.c.boolean,C.languages.objectivec=C.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete C.languages.objectivec["class-name"],C.languages.objc=C.languages.objectivec,C.languages.reason=C.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),C.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete C.languages.reason.function,function(e){for(var t=/\/\*(?:[^*/]|\*(?!\/)|\/(?!\*)|<self>)*\*\//.source,n=0;n<2;n++)t=t.replace(/<self>/g,(function(){return t}));t=t.replace(/<self>/g,(function(){return/[^\s\S]/.source})),e.languages.rust={comment:[{pattern:RegExp(/(^|[^\\])/.source+t),lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/b?"(?:\\[\s\S]|[^\\"])*"|b?r(#*)"(?:[^"]|"(?!\1))*"\1/,greedy:!0},char:{pattern:/b?'(?:\\(?:x[0-7][\da-fA-F]|u\{(?:[\da-fA-F]_*){1,6}\}|.)|[^\\\r\n\t'])'/,greedy:!0},attribute:{pattern:/#!?\[(?:[^\[\]"]|"(?:\\[\s\S]|[^\\"])*")*\]/,greedy:!0,alias:"attr-name",inside:{string:null}},"closure-params":{pattern:/([=(,:]\s*|\bmove\s*)\|[^|]*\||\|[^|]*\|(?=\s*(?:\{|->))/,lookbehind:!0,greedy:!0,inside:{"closure-punctuation":{pattern:/^\||\|$/,alias:"punctuation"},rest:null}},"lifetime-annotation":{pattern:/'\w+/,alias:"symbol"},"fragment-specifier":{pattern:/(\$\w+:)[a-z]+/,lookbehind:!0,alias:"punctuation"},variable:/\$\w+/,"function-definition":{pattern:/(\bfn\s+)\w+/,lookbehind:!0,alias:"function"},"type-definition":{pattern:/(\b(?:enum|struct|trait|type|union)\s+)\w+/,lookbehind:!0,alias:"class-name"},"module-declaration":[{pattern:/(\b(?:crate|mod)\s+)[a-z][a-z_\d]*/,lookbehind:!0,alias:"namespace"},{pattern:/(\b(?:crate|self|super)\s*)::\s*[a-z][a-z_\d]*\b(?:\s*::(?:\s*[a-z][a-z_\d]*\s*::)*)?/,lookbehind:!0,alias:"namespace",inside:{punctuation:/::/}}],keyword:[/\b(?:Self|abstract|as|async|await|become|box|break|const|continue|crate|do|dyn|else|enum|extern|final|fn|for|if|impl|in|let|loop|macro|match|mod|move|mut|override|priv|pub|ref|return|self|static|struct|super|trait|try|type|typeof|union|unsafe|unsized|use|virtual|where|while|yield)\b/,/\b(?:bool|char|f(?:32|64)|[ui](?:8|16|32|64|128|size)|str)\b/],function:/\b[a-z_]\w*(?=\s*(?:::\s*<|\())/,macro:{pattern:/\b\w+!/,alias:"property"},constant:/\b[A-Z_][A-Z_\d]+\b/,"class-name":/\b[A-Z]\w*\b/,namespace:{pattern:/(?:\b[a-z][a-z_\d]*\s*::\s*)*\b[a-z][a-z_\d]*\s*::(?!\s*<)/,inside:{punctuation:/::/}},number:/\b(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(?:(?:\d(?:_?\d)*)?\.)?\d(?:_?\d)*(?:[Ee][+-]?\d+)?)(?:_?(?:f32|f64|[iu](?:8|16|32|64|size)?))?\b/,boolean:/\b(?:false|true)\b/,punctuation:/->|\.\.=|\.{1,3}|::|[{}[\];(),:]/,operator:/[-+*\/%!^]=?|=[=>]?|&[&=]?|\|[|=]?|<<?=?|>>?=?|[@?]/},e.languages.rust["closure-params"].inside.rest=e.languages.rust,e.languages.rust.attribute.inside.string=e.languages.rust.string}(C),C.languages.go=C.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),C.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete C.languages.go["class-name"],function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(C),C.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},C.languages.python["string-interpolation"].inside.interpolation.inside.rest=C.languages.python,C.languages.py=C.languages.python;((e,t)=>{for(var n in t)p(e,n,{get:t[n],enumerable:!0})})({},{dracula:()=>T,duotoneDark:()=>A,duotoneLight:()=>j,github:()=>N,jettwaveDark:()=>Z,jettwaveLight:()=>H,nightOwl:()=>L,nightOwlLight:()=>P,oceanicNext:()=>O,okaidia:()=>F,oneDark:()=>V,oneLight:()=>W,palenight:()=>M,shadesOfPurple:()=>D,synthwave84:()=>B,ultramin:()=>z,vsDark:()=>$,vsLight:()=>U});var T={plain:{color:"#F8F8F2",backgroundColor:"#282A36"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},A={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]},j={plain:{backgroundColor:"#faf8f5",color:"#728fcb"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#b6ad9a"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#063289"}},{types:["property","function"],style:{color:"#b29762"}},{types:["tag-id","selector","atrule-id"],style:{color:"#2d2006"}},{types:["attr-name"],style:{color:"#896724"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","atrule"],style:{color:"#728fcb"}},{types:["placeholder","variable"],style:{color:"#93abdc"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#896724"}}]},N={plain:{color:"#393A34",backgroundColor:"#f6f8fa"},styles:[{types:["comment","prolog","doctype","cdata"],style:{color:"#999988",fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}},{types:["string","attr-value"],style:{color:"#e3116c"}},{types:["punctuation","operator"],style:{color:"#393A34"}},{types:["entity","url","symbol","number","boolean","variable","constant","property","regex","inserted"],style:{color:"#36acaa"}},{types:["atrule","keyword","attr-name","selector"],style:{color:"#00a4db"}},{types:["function","deleted","tag"],style:{color:"#d73a49"}},{types:["function-variable"],style:{color:"#6f42c1"}},{types:["tag","selector","keyword"],style:{color:"#00009f"}}]},L={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]},P={plain:{color:"#403f53",backgroundColor:"#FBFBFB"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(72, 118, 214)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(152, 159, 177)",fontStyle:"italic"}},{types:["string","builtin","char","constant","url"],style:{color:"rgb(72, 118, 214)"}},{types:["variable"],style:{color:"rgb(201, 103, 101)"}},{types:["number"],style:{color:"rgb(170, 9, 130)"}},{types:["punctuation"],style:{color:"rgb(153, 76, 195)"}},{types:["function","selector","doctype"],style:{color:"rgb(153, 76, 195)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(17, 17, 17)"}},{types:["tag"],style:{color:"rgb(153, 76, 195)"}},{types:["operator","property","keyword","namespace"],style:{color:"rgb(12, 150, 155)"}},{types:["boolean"],style:{color:"rgb(188, 84, 84)"}}]},I="#c5a5c5",R="#8dc891",O={plain:{backgroundColor:"#282c34",color:"#ffffff"},styles:[{types:["attr-name"],style:{color:I}},{types:["attr-value"],style:{color:R}},{types:["comment","block-comment","prolog","doctype","cdata","shebang"],style:{color:"#999999"}},{types:["property","number","function-name","constant","symbol","deleted"],style:{color:"#5a9bcf"}},{types:["boolean"],style:{color:"#ff8b50"}},{types:["tag"],style:{color:"#fc929e"}},{types:["string"],style:{color:R}},{types:["punctuation"],style:{color:R}},{types:["selector","char","builtin","inserted"],style:{color:"#D8DEE9"}},{types:["function"],style:{color:"#79b6f2"}},{types:["operator","entity","url","variable"],style:{color:"#d7deea"}},{types:["keyword"],style:{color:I}},{types:["atrule","class-name"],style:{color:"#FAC863"}},{types:["important"],style:{fontWeight:"400"}},{types:["bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["namespace"],style:{opacity:.7}}]},F={plain:{color:"#f8f8f2",backgroundColor:"#272822"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"#f92672",fontStyle:"italic"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"#8292a2",fontStyle:"italic"}},{types:["string","url"],style:{color:"#a6e22e"}},{types:["variable"],style:{color:"#f8f8f2"}},{types:["number"],style:{color:"#ae81ff"}},{types:["builtin","char","constant","function","class-name"],style:{color:"#e6db74"}},{types:["punctuation"],style:{color:"#f8f8f2"}},{types:["selector","doctype"],style:{color:"#a6e22e",fontStyle:"italic"}},{types:["tag","operator","keyword"],style:{color:"#66d9ef"}},{types:["boolean"],style:{color:"#ae81ff"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)",opacity:.7}},{types:["tag","property"],style:{color:"#f92672"}},{types:["attr-name"],style:{color:"#a6e22e !important"}},{types:["doctype"],style:{color:"#8292a2"}},{types:["rule"],style:{color:"#e6db74"}}]},M={plain:{color:"#bfc7d5",backgroundColor:"#292d3e"},styles:[{types:["comment"],style:{color:"rgb(105, 112, 152)",fontStyle:"italic"}},{types:["string","inserted"],style:{color:"rgb(195, 232, 141)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation","selector"],style:{color:"rgb(199, 146, 234)"}},{types:["variable"],style:{color:"rgb(191, 199, 213)"}},{types:["class-name","attr-name"],style:{color:"rgb(255, 203, 107)"}},{types:["tag","deleted"],style:{color:"rgb(255, 85, 114)"}},{types:["operator"],style:{color:"rgb(137, 221, 255)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["keyword"],style:{fontStyle:"italic"}},{types:["doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}},{types:["url"],style:{color:"rgb(221, 221, 221)"}}]},D={plain:{color:"#9EFEFF",backgroundColor:"#2D2A55"},styles:[{types:["changed"],style:{color:"rgb(255, 238, 128)"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)"}},{types:["inserted"],style:{color:"rgb(173, 219, 103)"}},{types:["comment"],style:{color:"rgb(179, 98, 255)",fontStyle:"italic"}},{types:["punctuation"],style:{color:"rgb(255, 255, 255)"}},{types:["constant"],style:{color:"rgb(255, 98, 140)"}},{types:["string","url"],style:{color:"rgb(165, 255, 144)"}},{types:["variable"],style:{color:"rgb(255, 238, 128)"}},{types:["number","boolean"],style:{color:"rgb(255, 98, 140)"}},{types:["attr-name"],style:{color:"rgb(255, 180, 84)"}},{types:["keyword","operator","property","namespace","tag","selector","doctype"],style:{color:"rgb(255, 157, 0)"}},{types:["builtin","char","constant","function","class-name"],style:{color:"rgb(250, 208, 0)"}}]},B={plain:{backgroundColor:"linear-gradient(to bottom, #2a2139 75%, #34294f)",backgroundImage:"#34294f",color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"},styles:[{types:["comment","block-comment","prolog","doctype","cdata"],style:{color:"#495495",fontStyle:"italic"}},{types:["punctuation"],style:{color:"#ccc"}},{types:["tag","attr-name","namespace","number","unit","hexcode","deleted"],style:{color:"#e2777a"}},{types:["property","selector"],style:{color:"#72f1b8",textShadow:"0 0 2px #100c0f, 0 0 10px #257c5575, 0 0 35px #21272475"}},{types:["function-name"],style:{color:"#6196cc"}},{types:["boolean","selector-id","function"],style:{color:"#fdfdfd",textShadow:"0 0 2px #001716, 0 0 3px #03edf975, 0 0 5px #03edf975, 0 0 8px #03edf975"}},{types:["class-name","maybe-class-name","builtin"],style:{color:"#fff5f6",textShadow:"0 0 2px #000, 0 0 10px #fc1f2c75, 0 0 5px #fc1f2c75, 0 0 25px #fc1f2c75"}},{types:["constant","symbol"],style:{color:"#f92aad",textShadow:"0 0 2px #100c0f, 0 0 5px #dc078e33, 0 0 10px #fff3"}},{types:["important","atrule","keyword","selector-class"],style:{color:"#f4eee4",textShadow:"0 0 2px #393a33, 0 0 8px #f39f0575, 0 0 2px #f39f0575"}},{types:["string","char","attr-value","regex","variable"],style:{color:"#f87c32"}},{types:["parameter"],style:{fontStyle:"italic"}},{types:["entity","url"],style:{color:"#67cdcc"}},{types:["operator"],style:{color:"ffffffee"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["entity"],style:{cursor:"help"}},{types:["inserted"],style:{color:"green"}}]},z={plain:{color:"#282a2e",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(197, 200, 198)"}},{types:["string","number","builtin","variable"],style:{color:"rgb(150, 152, 150)"}},{types:["class-name","function","tag","attr-name"],style:{color:"rgb(40, 42, 46)"}}]},$={plain:{color:"#9CDCFE",backgroundColor:"#1E1E1E"},styles:[{types:["prolog"],style:{color:"rgb(0, 0, 128)"}},{types:["comment"],style:{color:"rgb(106, 153, 85)"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"rgb(86, 156, 214)"}},{types:["number","inserted"],style:{color:"rgb(181, 206, 168)"}},{types:["constant"],style:{color:"rgb(100, 102, 149)"}},{types:["attr-name","variable"],style:{color:"rgb(156, 220, 254)"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"rgb(206, 145, 120)"}},{types:["selector"],style:{color:"rgb(215, 186, 125)"}},{types:["tag"],style:{color:"rgb(78, 201, 176)"}},{types:["tag"],languages:["markup"],style:{color:"rgb(86, 156, 214)"}},{types:["punctuation","operator"],style:{color:"rgb(212, 212, 212)"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"rgb(220, 220, 170)"}},{types:["class-name"],style:{color:"rgb(78, 201, 176)"}},{types:["char"],style:{color:"rgb(209, 105, 105)"}}]},U={plain:{color:"#000000",backgroundColor:"#ffffff"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},Z={plain:{color:"#f8fafc",backgroundColor:"#011627"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#569CD6"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#f8fafc"}},{types:["attr-name","variable"],style:{color:"#9CDCFE"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#cbd5e1"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#D4D4D4"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#7dd3fc"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},H={plain:{color:"#0f172a",backgroundColor:"#f1f5f9"},styles:[{types:["prolog"],style:{color:"#000080"}},{types:["comment"],style:{color:"#6A9955"}},{types:["builtin","changed","keyword","interpolation-punctuation"],style:{color:"#0c4a6e"}},{types:["number","inserted"],style:{color:"#B5CEA8"}},{types:["constant"],style:{color:"#0f172a"}},{types:["attr-name","variable"],style:{color:"#0c4a6e"}},{types:["deleted","string","attr-value","template-punctuation"],style:{color:"#64748b"}},{types:["selector"],style:{color:"#D7BA7D"}},{types:["tag"],style:{color:"#0ea5e9"}},{types:["tag"],languages:["markup"],style:{color:"#0ea5e9"}},{types:["punctuation","operator"],style:{color:"#475569"}},{types:["punctuation"],languages:["markup"],style:{color:"#808080"}},{types:["function"],style:{color:"#0e7490"}},{types:["class-name"],style:{color:"#0ea5e9"}},{types:["char"],style:{color:"#D16969"}}]},V={plain:{backgroundColor:"hsl(220, 13%, 18%)",color:"hsl(220, 14%, 71%)",textShadow:"0 1px rgba(0, 0, 0, 0.3)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(220, 10%, 40%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(220, 14%, 71%)"}},{types:["attr-name","class-name","maybe-class-name","boolean","constant","number","atrule"],style:{color:"hsl(29, 54%, 61%)"}},{types:["keyword"],style:{color:"hsl(286, 60%, 67%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(355, 65%, 65%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value"],style:{color:"hsl(95, 38%, 62%)"}},{types:["variable","operator","function"],style:{color:"hsl(207, 82%, 66%)"}},{types:["url"],style:{color:"hsl(187, 47%, 55%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(220, 14%, 71%)"}}]},W={plain:{backgroundColor:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)"},styles:[{types:["comment","prolog","cdata"],style:{color:"hsl(230, 4%, 64%)"}},{types:["doctype","punctuation","entity"],style:{color:"hsl(230, 8%, 24%)"}},{types:["attr-name","class-name","boolean","constant","number","atrule"],style:{color:"hsl(35, 99%, 36%)"}},{types:["keyword"],style:{color:"hsl(301, 63%, 40%)"}},{types:["property","tag","symbol","deleted","important"],style:{color:"hsl(5, 74%, 59%)"}},{types:["selector","string","char","builtin","inserted","regex","attr-value","punctuation"],style:{color:"hsl(119, 34%, 47%)"}},{types:["variable","operator","function"],style:{color:"hsl(221, 87%, 60%)"}},{types:["url"],style:{color:"hsl(198, 99%, 37%)"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"hsl(230, 8%, 24%)"}}]},G=(e,t)=>{const{plain:n}=e,r=e.styles.reduce(((e,n)=>{const{languages:r,style:a}=n;return r&&!r.includes(t)||n.types.forEach((t=>{const n=x(x({},e[t]),a);e[t]=n})),e}),{});return r.root=n,r.plain=S(x({},n),{backgroundColor:void 0}),r},q=/\r\n|\r|\n/,K=e=>{0===e.length?e.push({types:["plain"],content:"\n",empty:!0}):1===e.length&&""===e[0].content&&(e[0].content="\n",e[0].empty=!0)},Y=(e,t)=>{const n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},Q=e=>{const t=[[]],n=[e],r=[0],a=[e.length];let o=0,i=0,s=[];const l=[s];for(;i>-1;){for(;(o=r[i]++)<a[i];){let e,c=t[i];const u=n[i][o];if("string"==typeof u?(c=i>0?c:["plain"],e=u):(c=Y(c,u.type),u.alias&&(c=Y(c,u.alias)),e=u.content),"string"!=typeof e){i++,t.push(c),n.push(e),r.push(0),a.push(e.length);continue}const d=e.split(q),p=d.length;s.push({types:c,content:d[0]});for(let t=1;t<p;t++)K(s),l.push(s=[]),s.push({types:c,content:d[t]})}i--,t.pop(),n.pop(),r.pop(),a.pop()}return K(s),l},X=({children:e,language:t,code:n,theme:a,prism:i})=>{const s=t.toLowerCase(),l=((e,t)=>{const[n,a]=(0,r.useState)(G(t,e)),o=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===o.current&&e===i.current||(o.current=t,i.current=e,a(G(t,e)))}),[e,t]),n})(s,a),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:a,line:i}=n,s=_(n,["className","style","line"]);const l=S(x({},s),{className:o("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof a&&(l.style=x(x({},l.style||{}),a)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:a,style:i}=n,s=_(n,["token","className","style"]);const l=S(x({},s),{className:o("token",...r.types,a),children:r.content,style:t(r)});return null!=i&&(l.style=x(x({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:a})=>{const o=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return Q([t]);const e={code:t,grammar:n,language:a,tokens:[]};return o.current.hooks.run("before-tokenize",e),e.tokens=o.current.tokenize(t,n),o.current.hooks.run("after-tokenize",e),Q(e.tokens)}),[t,n,a])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(X,S(x({},e),{prism:e.prism||C,theme:e.theme||$,code:e.code,language:e.language}))},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=!0,a="Invariant failed";function o(e,t){if(!e){if(r)throw new Error(a);var n="function"==typeof t?t():t,o=n?"".concat(a,": ").concat(n):a;throw new Error(o)}}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/blog/-892":{"__comp":"a6aa9e1f","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"182b5a8d"},{"content":"af8b72a7"},{"content":"ab2721d4"},{"content":"bb882650"},{"content":"75cccf44"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"metadata":"a7098721"},"/blog/2023/08/02/copr/-69d":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"b5a32f14"},"/blog/2024/01/28/rust-opinion/-98d":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"f71d1f68"},"/blog/aoc-2022/1st-week/-df4":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"dff2ebad"},"/blog/aoc-2022/2nd-week/-783":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"377f3aa1"},"/blog/aoc-2022/3rd-week/-7c5":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"f48be158"},"/blog/aoc-2022/4th-week/-1ac":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"3da4b779"},"/blog/aoc-2022/intro/-ada":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"51624505"},"/blog/archive/-22d":{"__comp":"9e4087bc","__context":{"plugin":"0220f5fc"},"archive":"4200b1a9"},"/blog/leetcode/sort-diagonally/-d97":{"__comp":"ccc49370","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","content":"cfa2b263"},"/blog/tags/-f23":{"__comp":"01a85c17","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","tags":"66d5ef6c"},"/blog/tags/\ud83c\udfed/-ffd":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"765ea78b","listMetadata":"b25fbc58"},"/blog/tags/admin/-d3a":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"a082abd3","listMetadata":"146d9b84"},"/blog/tags/advent-of-code-2022/-7bd":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"a80747a0","listMetadata":"62d847b3"},"/blog/tags/advent-of-code/-313":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"19d7c045","listMetadata":"8b1802c5"},"/blog/tags/copr/-959":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"b45dccf0","listMetadata":"3011a4c0"},"/blog/tags/cpp/-770":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"4edd2021","listMetadata":"4621632b"},"/blog/tags/cult/-73d":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"182b5a8d"}],"tag":"f44abc07","listMetadata":"257fa000"},"/blog/tags/hype/-d35":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"182b5a8d"}],"tag":"0816068a","listMetadata":"c90b7ff3"},"/blog/tags/iterators/-2eb":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"ff472cd9","listMetadata":"29694455"},"/blog/tags/leetcode/-e31":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"75cccf44"}],"tag":"86cd1460","listMetadata":"e89da83e"},"/blog/tags/memory-safety/-d15":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"182b5a8d"}],"tag":"7a5bb070","listMetadata":"f7d29e9b"},"/blog/tags/red-hat/-a58":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"52f2a5bf","listMetadata":"d79dd549"},"/blog/tags/rust/-bfd":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"182b5a8d"},{"content":"ab2721d4"},{"content":"bb882650"},{"content":"a6a48ea2"},{"content":"95f41f0b"},{"content":"d7f7fb17"}],"tag":"9287eafd","listMetadata":"0bfe45d5"},"/blog/tags/vps/-1b8":{"__comp":"6875c492","__context":{"plugin":"0220f5fc"},"sidebar":"95b96bb9","items":[{"content":"af8b72a7"}],"tag":"8c0e532b","listMetadata":"0608d96f"},"/contributions/-541":{"__comp":"22a175ec","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"},"/search/-c7b":{"__comp":"1a4e3797","__context":{"plugin":"b0291f37"}},"/talks/-819":{"__comp":"0fcbc6ca","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"},"/algorithms/-c61":{"__comp":"5e95c892","__context":{"plugin":"1a606400"}},"/algorithms/-b39":{"__comp":"a7bd4aaa","version":"6e3cbca1"},"/algorithms/tags/-bb8":{"__comp":"3720c009","tags":"97a42631"},"/algorithms/tags/a-star/-83e":{"__comp":"df203c0f","tag":"2af5d0a7"},"/algorithms/tags/applications/-b32":{"__comp":"df203c0f","tag":"e1d2ae23"},"/algorithms/tags/astar/-08b":{"__comp":"df203c0f","tag":"08dfa3a2"},"/algorithms/tags/backtracking/-e2d":{"__comp":"df203c0f","tag":"eba2374c"},"/algorithms/tags/balanced-trees/-591":{"__comp":"df203c0f","tag":"d4b1e057"},"/algorithms/tags/bellman-ford/-2bc":{"__comp":"df203c0f","tag":"5c15401e"},"/algorithms/tags/bfs/-334":{"__comp":"df203c0f","tag":"947341b7"},"/algorithms/tags/bottom-up-dp/-9e5":{"__comp":"df203c0f","tag":"bc2d22bc"},"/algorithms/tags/brute-force/-99b":{"__comp":"df203c0f","tag":"a2ba8888"},"/algorithms/tags/c/-cc5":{"__comp":"df203c0f","tag":"0123bc76"},"/algorithms/tags/cpp/-f5b":{"__comp":"df203c0f","tag":"520f8175"},"/algorithms/tags/csharp/-7a9":{"__comp":"df203c0f","tag":"d57b4369"},"/algorithms/tags/dijkstra/-aa8":{"__comp":"df203c0f","tag":"3d92ba6e"},"/algorithms/tags/dynamic-array/-00e":{"__comp":"df203c0f","tag":"9a3dc578"},"/algorithms/tags/dynamic-programming/-f82":{"__comp":"df203c0f","tag":"dd841e73"},"/algorithms/tags/exponential/-a74":{"__comp":"df203c0f","tag":"8e6bb954"},"/algorithms/tags/graphs/-d5b":{"__comp":"df203c0f","tag":"686a7a89"},"/algorithms/tags/greedy/-079":{"__comp":"df203c0f","tag":"b8cbf382"},"/algorithms/tags/hash-tables/-ae4":{"__comp":"df203c0f","tag":"d8f4410e"},"/algorithms/tags/iterative/-783":{"__comp":"df203c0f","tag":"16cbc838"},"/algorithms/tags/iterators/-1bc":{"__comp":"df203c0f","tag":"df0885f0"},"/algorithms/tags/java/-2b4":{"__comp":"df203c0f","tag":"976c4f3b"},"/algorithms/tags/karel/-79f":{"__comp":"df203c0f","tag":"bb984793"},"/algorithms/tags/postconditions/-a27":{"__comp":"df203c0f","tag":"34ab65f4"},"/algorithms/tags/python/-eb2":{"__comp":"df203c0f","tag":"8d31a880"},"/algorithms/tags/recursion/-2b0":{"__comp":"df203c0f","tag":"2b89902a"},"/algorithms/tags/red-black-trees/-9ca":{"__comp":"df203c0f","tag":"d255bd7f"},"/algorithms/tags/solution/-fa0":{"__comp":"df203c0f","tag":"7ce7faac"},"/algorithms/tags/sorting/-7ca":{"__comp":"df203c0f","tag":"28d80ff8"},"/algorithms/tags/testing/-2af":{"__comp":"df203c0f","tag":"06c4a8fc"},"/algorithms/tags/time-complexity/-2d3":{"__comp":"df203c0f","tag":"a4c10cf4"},"/algorithms/tags/top-down-dp/-779":{"__comp":"df203c0f","tag":"c580b66a"},"/algorithms/-b7c":{"__comp":"a94703ab"},"/algorithms/-9b0":{"__comp":"17896441","content":"84d1e0d8"},"/algorithms/algorithms-correctness/postcondition-ambiguity/-c18":{"__comp":"17896441","content":"534d4833"},"/algorithms/category/algorithms-and-correctness/-ea2":{"__comp":"14eb3368","categoryGeneratedIndex":"d309b5b1"},"/algorithms/category/asymptotic-notation-and-time-complexity/-fba":{"__comp":"14eb3368","categoryGeneratedIndex":"decbf9d1"},"/algorithms/category/graphs/-a92":{"__comp":"14eb3368","categoryGeneratedIndex":"9df0e937"},"/algorithms/category/hash-tables/-ddd":{"__comp":"14eb3368","categoryGeneratedIndex":"2fcf0558"},"/algorithms/category/paths-in-graphs/-7c7":{"__comp":"14eb3368","categoryGeneratedIndex":"df078f58"},"/algorithms/category/recursion/-61f":{"__comp":"14eb3368","categoryGeneratedIndex":"933b95b3"},"/algorithms/category/red-black-trees/-0c0":{"__comp":"14eb3368","categoryGeneratedIndex":"fb4361d3"},"/algorithms/graphs/bfs-tree/-2fb":{"__comp":"17896441","content":"354a7b72"},"/algorithms/graphs/iterative-and-iterators/-bfd":{"__comp":"17896441","content":"ddc7679f"},"/algorithms/hash-tables/breaking/-319":{"__comp":"17896441","content":"087808f1"},"/algorithms/hash-tables/breaking/mitigations/-4c2":{"__comp":"17896441","content":"15966941"},"/algorithms/hash-tables/breaking/python/-3d1":{"__comp":"17896441","content":"aa24fd5d"},"/algorithms/paths/bf-to-astar/-050":{"__comp":"17896441","content":"c4c4056e"},"/algorithms/paths/bf-to-astar/astar/-b4d":{"__comp":"17896441","content":"493c0536"},"/algorithms/paths/bf-to-astar/bf/-e9c":{"__comp":"17896441","content":"3adcbc3a"},"/algorithms/paths/bf-to-astar/dijkstra/-fe4":{"__comp":"17896441","content":"698e2076"},"/algorithms/rb-trees/applications/-46a":{"__comp":"17896441","content":"0178f9ad"},"/algorithms/rb-trees/rules/-21a":{"__comp":"17896441","content":"ff82dde7"},"/algorithms/recursion/karel/-4cf":{"__comp":"17896441","content":"2ca64e35"},"/algorithms/recursion/karel/solution/-115":{"__comp":"17896441","content":"30814625"},"/algorithms/recursion/pyramid-slide-down/-236":{"__comp":"17896441","content":"9b91a88c"},"/algorithms/recursion/pyramid-slide-down/bottom-up-dp/-00d":{"__comp":"17896441","content":"1cd58e77"},"/algorithms/recursion/pyramid-slide-down/greedy/-4bf":{"__comp":"17896441","content":"f75910c4"},"/algorithms/recursion/pyramid-slide-down/naive/-c1b":{"__comp":"17896441","content":"70a4540f"},"/algorithms/recursion/pyramid-slide-down/top-down-dp/-fe9":{"__comp":"17896441","content":"8a25f659"},"/algorithms/time-complexity/extend/-250":{"__comp":"17896441","content":"24fecc0a"},"/c/-dae":{"__comp":"5e95c892","__context":{"plugin":"5ca803d2"}},"/c/-fc8":{"__comp":"a7bd4aaa","version":"4e546705"},"/c/-1c4":{"__comp":"a94703ab"},"/c/-a0f":{"__comp":"17896441","content":"794ef108"},"/c/bonuses/seminar-03/-aaa":{"__comp":"17896441","content":"dead8108"},"/c/bonuses/seminar-04/-ffe":{"__comp":"17896441","content":"bc0c9d90"},"/c/bonuses/seminar-05-06/-4cd":{"__comp":"17896441","content":"d05e838c"},"/c/bonuses/seminar-08/-09a":{"__comp":"17896441","content":"595c7293"},"/c/bonuses/seminar-10/-b9e":{"__comp":"17896441","content":"1535ede8"},"/c/category/bonuses/-17e":{"__comp":"14eb3368","categoryGeneratedIndex":"48b268a6"},"/c/category/practice-exams/-009":{"__comp":"14eb3368","categoryGeneratedIndex":"962da50c"},"/c/mr/-4c5":{"__comp":"17896441","content":"b1288602"},"/c/pexam/cams/-a10":{"__comp":"17896441","content":"4f96b16e"},"/c/pexam/garbage_collect/-44e":{"__comp":"17896441","content":"1acf65cc"},"/cpp/-269":{"__comp":"5e95c892","__context":{"plugin":"6bc697d0"}},"/cpp/-187":{"__comp":"a7bd4aaa","version":"7e6d325b"},"/cpp/-102":{"__comp":"a94703ab"},"/cpp/-fcd":{"__comp":"17896441","content":"7052c0bc"},"/cpp/category/exceptions-and-raii/-cfa":{"__comp":"14eb3368","categoryGeneratedIndex":"e31003e9"},"/cpp/environment/-e0b":{"__comp":"17896441","content":"b9f7f5c4"},"/cpp/exceptions-and-raii/placeholders/-9b3":{"__comp":"17896441","content":"45c9e308"},"/-dfb":{"__comp":"c4f5d8e4","__context":{"plugin":"d675395f"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=97221,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.034f2fcf.js.LICENSE.txt b/assets/js/main.5d53fbfc.js.LICENSE.txt similarity index 100% rename from assets/js/main.034f2fcf.js.LICENSE.txt rename to assets/js/main.5d53fbfc.js.LICENSE.txt diff --git a/assets/js/runtime~main.55537369.js b/assets/js/runtime~main.55537369.js new file mode 100644 index 0000000..692a853 --- /dev/null +++ b/assets/js/runtime~main.55537369.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,a,c,f,d={},b={};function t(e){var a=b[e];if(void 0!==a)return a.exports;var c=b[e]={exports:{}};return d[e].call(c.exports,c,c.exports,t),c.exports}t.m=d,e=[],t.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var r=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(t.O).every((e=>t.O[e](c[o])))?c.splice(o--,1):(r=!1,d<b&&(b=d));if(r){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);t.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var r=2&f&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,t.d(d,b),d},t.d=(e,a)=>{for(var c in a)t.o(a,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,c)=>(t.f[c](e,a),a)),[])),t.u=e=>"assets/js/"+({59:"b1288602",115:"30814625",146:"dff2ebad",281:"2ca64e35",354:"bc0c9d90",494:"1a606400",569:"ddc7679f",635:"c4c4056e",655:"9a3dc578",728:"686a7a89",822:"8c0e532b",866:"4200b1a9",1011:"377f3aa1",1050:"a7098721",1145:"947341b7",1171:"d7f7fb17",1235:"86cd1460",1378:"0220f5fc",1464:"97a42631",1475:"e1d2ae23",1492:"d4b1e057",1494:"16cbc838",1547:"1cd58e77",1648:"48b268a6",1851:"0fcbc6ca",1885:"84d1e0d8",1960:"e31003e9",2125:"06c4a8fc",2177:"3da4b779",2204:"f44abc07",2210:"9df0e937",2264:"962da50c",2433:"b5a32f14",2445:"decbf9d1",2482:"dd841e73",2545:"9b91a88c",2606:"08dfa3a2",2741:"d675395f",2948:"0816068a",2997:"d8f4410e",3039:"765ea78b",3086:"cfa2b263",3089:"a6aa9e1f",3184:"7e6d325b",3220:"34ab65f4",3276:"6e3cbca1",3388:"29694455",3519:"4621632b",3561:"95b96bb9",3602:"c90b7ff3",3608:"9e4087bc",3618:"a6a48ea2",3707:"24fecc0a",3713:"698e2076",3731:"087808f1",3734:"0123bc76",3751:"3720c009",3803:"794ef108",3887:"933b95b3",3979:"2af5d0a7",4013:"01a85c17",4064:"f48be158",4195:"c4f5d8e4",4256:"75cccf44",4269:"0bfe45d5",4327:"4e546705",4343:"df0885f0",4368:"a94703ab",4382:"a4c10cf4",4394:"51624505",4562:"976c4f3b",4582:"7a5bb070",4637:"19d7c045",4638:"2fcf0558",5169:"d79dd549",5287:"6bc697d0",5376:"1535ede8",5430:"52f2a5bf",5521:"9287eafd",5634:"595c7293",5658:"af8b72a7",5701:"3adcbc3a",5775:"8e6bb954",5824:"a80747a0",5934:"f75910c4",5975:"4edd2021",6048:"182b5a8d",6064:"7ce7faac",6069:"f71d1f68",6097:"b0291f37",6103:"ccc49370",6179:"d57b4369",6292:"d255bd7f",6306:"4f96b16e",6327:"fb4361d3",6342:"2b89902a",6435:"28d80ff8",6519:"bc2d22bc",6544:"d05e838c",6573:"c580b66a",6864:"bb984793",6890:"22a175ec",7084:"45c9e308",7257:"aa24fd5d",7292:"493c0536",7438:"b8cbf382",7568:"0608d96f",7728:"8a25f659",7743:"df078f58",7755:"ab2721d4",7918:"17896441",7920:"1a4e3797",7926:"3011a4c0",7959:"f7d29e9b",8058:"520f8175",8091:"bb882650",8236:"3d92ba6e",8289:"a2ba8888",8326:"15966941",8387:"eba2374c",8472:"ff82dde7",8480:"8b1802c5",8518:"a7bd4aaa",8520:"62d847b3",8529:"1acf65cc",8610:"6875c492",8643:"ff472cd9",8757:"e89da83e",8786:"a082abd3",8807:"dead8108",8908:"d309b5b1",9066:"8d31a880",9173:"5ca803d2",9179:"b9f7f5c4",9197:"b25fbc58",9228:"66d5ef6c",9249:"70a4540f",9300:"146d9b84",9385:"95f41f0b",9414:"354a7b72",9579:"5c15401e",9595:"257fa000",9661:"5e95c892",9679:"b45dccf0",9731:"7052c0bc",9771:"534d4833",9817:"14eb3368",9898:"0178f9ad",9924:"df203c0f"}[e]||e)+"."+{59:"19054c2d",109:"192a1082",115:"1cb0ad07",130:"a26578f7",132:"6eeb92f1",146:"26aca592",240:"962c2c3a",281:"e4c24d50",354:"22532279",494:"9499d809",569:"4b5bdacd",635:"a7e01235",655:"07cb1f6c",728:"ebbeda14",822:"8df94607",866:"9d505c0f",1011:"728ad61c",1050:"3c1f60c5",1145:"06e92a4d",1171:"3796c0b9",1235:"f549d2c3",1378:"6bd42e59",1426:"b2a3e78b",1464:"7eff63e9",1475:"2bc6580d",1492:"c26d5bb6",1494:"eafc393a",1504:"972c6306",1547:"4b0ee92c",1644:"e1df3952",1648:"56c72f30",1763:"dd6ac9f1",1772:"e7125761",1851:"73a3a140",1885:"f337d099",1960:"e9396e0a",2125:"18eb9afc",2177:"0020fbfc",2183:"695e6dce",2204:"3c3d35fa",2210:"2c53d1aa",2264:"ea10811e",2433:"b58aa0f1",2445:"369aa5a6",2482:"c1ec5d72",2545:"5685ebf2",2606:"0462ec4c",2661:"adb036a5",2693:"86767de9",2696:"9c4ce6ae",2700:"eb54ab23",2741:"1f389aac",2948:"4a65af0e",2997:"e8838bb3",3039:"29a37caf",3076:"0d102429",3086:"ce80265a",3089:"305accbe",3184:"0dc3275f",3220:"5fa3179c",3276:"5d0620d6",3343:"c68ed9e0",3388:"5fa079ce",3519:"bd86e6e4",3561:"ce1e4720",3602:"66a8d664",3608:"1ba69630",3618:"7749d78c",3619:"169a66d1",3707:"0d18355b",3713:"0fda5cee",3731:"0a5fb140",3734:"d7742152",3751:"37c59b49",3803:"8d36eaa9",3887:"6eeb49bf",3979:"928c2eb4",4013:"c2d2d974",4064:"3578ba3c",4195:"b182cb1f",4238:"732f7e6d",4256:"b0cfb80e",4269:"278d3d58",4327:"40303d4d",4343:"2970a5ee",4368:"41c675cc",4382:"e91bee7a",4394:"60fbe3b9",4562:"cfe53f32",4582:"3ea6a8e5",4637:"fd298b3d",4638:"a6f753b6",4706:"bf286a6c",5169:"0ed0fe01",5269:"a9818fb6",5287:"410760a1",5326:"480380dd",5376:"cf110382",5430:"839d7f40",5521:"6a3e2a56",5634:"e8aa1f47",5658:"b40642af",5701:"481c535c",5775:"4d6706b7",5790:"a9566ed9",5824:"b21945df",5934:"750e8d79",5943:"ebdacf10",5975:"ba1a6e92",6048:"a8e28604",6064:"fd0f7c12",6069:"da144fe6",6097:"5b91d377",6103:"b0a72ab4",6179:"6f772ce2",6255:"4bb462ce",6292:"da5efa5d",6306:"072f92b8",6327:"b6ca83b5",6342:"5cec8345",6435:"b8c94f5a",6519:"974fe1a5",6544:"642ce149",6573:"aa8d7117",6648:"7d3c04e0",6864:"22b3e630",6890:"297fea32",6945:"1665fd21",6985:"b22ddd47",7084:"e6839f8a",7257:"e4465696",7292:"6ae62548",7438:"e3b79fad",7568:"a18c3650",7728:"6cbfa670",7743:"4f109cb4",7755:"6fad72ba",7918:"274cea2b",7920:"d45f2a37",7926:"bfa0084e",7936:"da5208cb",7959:"8fd5a1ab",8016:"f7e4e334",8058:"d9b4c84f",8091:"925fdbba",8236:"e64b02a7",8289:"ab09cb54",8326:"58ddb6d9",8387:"dcc463b2",8472:"c32d56e5",8480:"408315a3",8518:"69e4c2b5",8520:"ea246a7d",8529:"33171995",8610:"70016d14",8643:"a09aa523",8757:"1856d5b6",8786:"6458a62f",8807:"9d966504",8894:"bbb1746a",8908:"924b0302",8955:"88257d8a",9066:"e6f69b2d",9138:"e5753066",9173:"986e22d4",9179:"8dd00486",9197:"90e65bfc",9228:"f31d2aab",9249:"312c2807",9300:"bdf83d64",9365:"b3ca15d6",9385:"b012cd5f",9414:"becd0640",9579:"e4b1c753",9595:"c32606de",9661:"8ef24486",9679:"7ab0cc2a",9731:"61d77968",9771:"162e2ecd",9817:"0d563596",9893:"04fdeb2a",9898:"568886e5",9924:"f951d8f1"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},t.l=(e,a,c,d)=>{if(f[e])f[e].push(a);else{var b,r;if(void 0!==c)for(var o=document.getElementsByTagName("script"),n=0;n<o.length;n++){var i=o[n];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")=="fi:"+c){b=i;break}}b||(r=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,t.nc&&b.setAttribute("nonce",t.nc),b.setAttribute("data-webpack","fi:"+c),b.src=e),f[e]=[a];var u=(a,c)=>{b.onerror=b.onload=null,clearTimeout(l);var d=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(c))),a)return a(c)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),r&&document.head.appendChild(b)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={15966941:"8326",17896441:"7918",29694455:"3388",30814625:"115",51624505:"4394",b1288602:"59",dff2ebad:"146","2ca64e35":"281",bc0c9d90:"354","1a606400":"494",ddc7679f:"569",c4c4056e:"635","9a3dc578":"655","686a7a89":"728","8c0e532b":"822","4200b1a9":"866","377f3aa1":"1011",a7098721:"1050","947341b7":"1145",d7f7fb17:"1171","86cd1460":"1235","0220f5fc":"1378","97a42631":"1464",e1d2ae23:"1475",d4b1e057:"1492","16cbc838":"1494","1cd58e77":"1547","48b268a6":"1648","0fcbc6ca":"1851","84d1e0d8":"1885",e31003e9:"1960","06c4a8fc":"2125","3da4b779":"2177",f44abc07:"2204","9df0e937":"2210","962da50c":"2264",b5a32f14:"2433",decbf9d1:"2445",dd841e73:"2482","9b91a88c":"2545","08dfa3a2":"2606",d675395f:"2741","0816068a":"2948",d8f4410e:"2997","765ea78b":"3039",cfa2b263:"3086",a6aa9e1f:"3089","7e6d325b":"3184","34ab65f4":"3220","6e3cbca1":"3276","4621632b":"3519","95b96bb9":"3561",c90b7ff3:"3602","9e4087bc":"3608",a6a48ea2:"3618","24fecc0a":"3707","698e2076":"3713","087808f1":"3731","0123bc76":"3734","3720c009":"3751","794ef108":"3803","933b95b3":"3887","2af5d0a7":"3979","01a85c17":"4013",f48be158:"4064",c4f5d8e4:"4195","75cccf44":"4256","0bfe45d5":"4269","4e546705":"4327",df0885f0:"4343",a94703ab:"4368",a4c10cf4:"4382","976c4f3b":"4562","7a5bb070":"4582","19d7c045":"4637","2fcf0558":"4638",d79dd549:"5169","6bc697d0":"5287","1535ede8":"5376","52f2a5bf":"5430","9287eafd":"5521","595c7293":"5634",af8b72a7:"5658","3adcbc3a":"5701","8e6bb954":"5775",a80747a0:"5824",f75910c4:"5934","4edd2021":"5975","182b5a8d":"6048","7ce7faac":"6064",f71d1f68:"6069",b0291f37:"6097",ccc49370:"6103",d57b4369:"6179",d255bd7f:"6292","4f96b16e":"6306",fb4361d3:"6327","2b89902a":"6342","28d80ff8":"6435",bc2d22bc:"6519",d05e838c:"6544",c580b66a:"6573",bb984793:"6864","22a175ec":"6890","45c9e308":"7084",aa24fd5d:"7257","493c0536":"7292",b8cbf382:"7438","0608d96f":"7568","8a25f659":"7728",df078f58:"7743",ab2721d4:"7755","1a4e3797":"7920","3011a4c0":"7926",f7d29e9b:"7959","520f8175":"8058",bb882650:"8091","3d92ba6e":"8236",a2ba8888:"8289",eba2374c:"8387",ff82dde7:"8472","8b1802c5":"8480",a7bd4aaa:"8518","62d847b3":"8520","1acf65cc":"8529","6875c492":"8610",ff472cd9:"8643",e89da83e:"8757",a082abd3:"8786",dead8108:"8807",d309b5b1:"8908","8d31a880":"9066","5ca803d2":"9173",b9f7f5c4:"9179",b25fbc58:"9197","66d5ef6c":"9228","70a4540f":"9249","146d9b84":"9300","95f41f0b":"9385","354a7b72":"9414","5c15401e":"9579","257fa000":"9595","5e95c892":"9661",b45dccf0:"9679","7052c0bc":"9731","534d4833":"9771","14eb3368":"9817","0178f9ad":"9898",df203c0f:"9924"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,c)=>{var f=t.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=t.p+t.u(a),r=new Error;t.l(b,(c=>{if(t.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",r.name="ChunkLoadError",r.type=d,r.request=b,f[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],r=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in r)t.o(r,f)&&(t.m[f]=r[f]);if(o)var i=o(t)}for(a&&a(c);n<b.length;n++)d=b[n],t.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return t.O(i)},c=self.webpackChunkfi=self.webpackChunkfi||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/assets/js/runtime~main.b2040362.js b/assets/js/runtime~main.b2040362.js deleted file mode 100644 index 68649b3..0000000 --- a/assets/js/runtime~main.b2040362.js +++ /dev/null @@ -1 +0,0 @@ -(()=>{"use strict";var e,a,c,f,d={},b={};function t(e){var a=b[e];if(void 0!==a)return a.exports;var c=b[e]={exports:{}};return d[e].call(c.exports,c,c.exports,t),c.exports}t.m=d,e=[],t.O=(a,c,f,d)=>{if(!c){var b=1/0;for(i=0;i<e.length;i++){c=e[i][0],f=e[i][1],d=e[i][2];for(var r=!0,o=0;o<c.length;o++)(!1&d||b>=d)&&Object.keys(t.O).every((e=>t.O[e](c[o])))?c.splice(o--,1):(r=!1,d<b&&(b=d));if(r){e.splice(i--,1);var n=f();void 0!==n&&(a=n)}}return a}d=d||0;for(var i=e.length;i>0&&e[i-1][2]>d;i--)e[i]=e[i-1];e[i]=[c,f,d]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var d=Object.create(null);t.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var r=2&f&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>b[a]=()=>e[a]));return b.default=()=>e,t.d(d,b),d},t.d=(e,a)=>{for(var c in a)t.o(a,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,c)=>(t.f[c](e,a),a)),[])),t.u=e=>"assets/js/"+({59:"b1288602",115:"30814625",146:"dff2ebad",281:"2ca64e35",354:"bc0c9d90",494:"1a606400",569:"ddc7679f",635:"c4c4056e",655:"9a3dc578",728:"686a7a89",822:"8c0e532b",866:"4200b1a9",1011:"377f3aa1",1050:"a7098721",1145:"947341b7",1171:"d7f7fb17",1235:"86cd1460",1378:"0220f5fc",1464:"97a42631",1475:"e1d2ae23",1492:"d4b1e057",1494:"16cbc838",1547:"1cd58e77",1648:"48b268a6",1851:"0fcbc6ca",1885:"84d1e0d8",1960:"e31003e9",2125:"06c4a8fc",2177:"3da4b779",2210:"9df0e937",2264:"962da50c",2433:"b5a32f14",2445:"decbf9d1",2482:"dd841e73",2545:"9b91a88c",2606:"08dfa3a2",2741:"d675395f",2997:"d8f4410e",3039:"765ea78b",3086:"cfa2b263",3089:"a6aa9e1f",3184:"7e6d325b",3220:"34ab65f4",3276:"6e3cbca1",3388:"29694455",3519:"4621632b",3561:"95b96bb9",3608:"9e4087bc",3618:"a6a48ea2",3707:"24fecc0a",3713:"698e2076",3731:"087808f1",3734:"0123bc76",3751:"3720c009",3803:"794ef108",3887:"933b95b3",3979:"2af5d0a7",4013:"01a85c17",4064:"f48be158",4195:"c4f5d8e4",4256:"75cccf44",4269:"0bfe45d5",4327:"4e546705",4343:"df0885f0",4368:"a94703ab",4382:"a4c10cf4",4394:"51624505",4562:"976c4f3b",4637:"19d7c045",4638:"2fcf0558",5169:"d79dd549",5287:"6bc697d0",5376:"1535ede8",5430:"52f2a5bf",5521:"9287eafd",5634:"595c7293",5658:"af8b72a7",5701:"3adcbc3a",5775:"8e6bb954",5824:"a80747a0",5934:"f75910c4",5975:"4edd2021",6064:"7ce7faac",6097:"b0291f37",6103:"ccc49370",6179:"d57b4369",6292:"d255bd7f",6306:"4f96b16e",6327:"fb4361d3",6342:"2b89902a",6435:"28d80ff8",6519:"bc2d22bc",6544:"d05e838c",6573:"c580b66a",6864:"bb984793",6890:"22a175ec",7084:"45c9e308",7257:"aa24fd5d",7292:"493c0536",7438:"b8cbf382",7568:"0608d96f",7728:"8a25f659",7743:"df078f58",7755:"ab2721d4",7918:"17896441",7920:"1a4e3797",7926:"3011a4c0",8058:"520f8175",8091:"bb882650",8236:"3d92ba6e",8289:"a2ba8888",8326:"15966941",8387:"eba2374c",8472:"ff82dde7",8480:"8b1802c5",8518:"a7bd4aaa",8520:"62d847b3",8529:"1acf65cc",8610:"6875c492",8643:"ff472cd9",8757:"e89da83e",8786:"a082abd3",8807:"dead8108",8908:"d309b5b1",9066:"8d31a880",9173:"5ca803d2",9179:"b9f7f5c4",9197:"b25fbc58",9228:"66d5ef6c",9249:"70a4540f",9300:"146d9b84",9385:"95f41f0b",9414:"354a7b72",9579:"5c15401e",9661:"5e95c892",9679:"b45dccf0",9731:"7052c0bc",9771:"534d4833",9817:"14eb3368",9898:"0178f9ad",9924:"df203c0f"}[e]||e)+"."+{59:"cc4934c1",109:"192a1082",115:"1cb0ad07",130:"b07e32e5",132:"6eeb92f1",146:"26aca592",240:"962c2c3a",281:"e4c24d50",354:"22532279",494:"9499d809",569:"4b5bdacd",635:"a7e01235",655:"07cb1f6c",728:"ebbeda14",822:"8df94607",866:"d764baec",1011:"728ad61c",1050:"33f429e4",1145:"06e92a4d",1171:"3796c0b9",1235:"f549d2c3",1325:"f9a9e4dd",1378:"6bd42e59",1426:"b2a3e78b",1464:"7eff63e9",1475:"2bc6580d",1492:"c26d5bb6",1494:"eafc393a",1504:"972c6306",1547:"4b0ee92c",1644:"e1df3952",1648:"56c72f30",1763:"dd6ac9f1",1772:"e7125761",1851:"73a3a140",1885:"985692bf",1960:"e9396e0a",2125:"18eb9afc",2177:"0020fbfc",2183:"695e6dce",2210:"2c53d1aa",2264:"ea10811e",2433:"68cedca8",2445:"369aa5a6",2482:"c1ec5d72",2545:"5685ebf2",2606:"0462ec4c",2661:"adb036a5",2693:"86767de9",2696:"9c4ce6ae",2700:"eb54ab23",2741:"1f389aac",2997:"e8838bb3",3039:"29a37caf",3076:"0d102429",3086:"ce80265a",3089:"305accbe",3184:"0dc3275f",3220:"5fa3179c",3276:"5d0620d6",3343:"c68ed9e0",3388:"5fa079ce",3519:"bd86e6e4",3561:"f1e9070e",3608:"c1ded62d",3618:"7749d78c",3619:"169a66d1",3707:"0d18355b",3713:"0fda5cee",3731:"0a5fb140",3734:"d7742152",3751:"9d2dcf9d",3803:"d7e12b89",3887:"6eeb49bf",3979:"928c2eb4",4013:"9b387ded",4064:"3578ba3c",4195:"b182cb1f",4238:"732f7e6d",4256:"b0cfb80e",4269:"143f3da4",4327:"40303d4d",4343:"2970a5ee",4368:"efd630be",4382:"e91bee7a",4394:"60fbe3b9",4562:"cfe53f32",4637:"fd298b3d",4638:"a6f753b6",4706:"bf286a6c",5169:"0ed0fe01",5269:"a9818fb6",5287:"410760a1",5326:"480380dd",5376:"6aa7ffe0",5430:"839d7f40",5521:"7613dea7",5634:"8ff94b95",5658:"37a3aa6c",5701:"481c535c",5775:"4d6706b7",5790:"a9566ed9",5824:"b21945df",5934:"750e8d79",5943:"ebdacf10",5975:"ba1a6e92",6064:"fd0f7c12",6097:"5b91d377",6103:"78004ce5",6179:"6f772ce2",6255:"4bb462ce",6292:"da5efa5d",6306:"072f92b8",6327:"b6ca83b5",6342:"5cec8345",6435:"b8c94f5a",6519:"974fe1a5",6544:"ce5946c6",6573:"aa8d7117",6648:"7d3c04e0",6864:"22b3e630",6890:"92356088",6945:"1665fd21",6985:"b22ddd47",7084:"e6839f8a",7257:"e4465696",7292:"6ae62548",7438:"e3b79fad",7568:"a18c3650",7728:"6cbfa670",7743:"4f109cb4",7755:"6fad72ba",7918:"2ef23eb3",7920:"3807d38b",7926:"bfa0084e",7936:"da5208cb",8016:"f7e4e334",8058:"d9b4c84f",8091:"925fdbba",8236:"e64b02a7",8289:"ab09cb54",8326:"58ddb6d9",8387:"dcc463b2",8472:"c32d56e5",8480:"408315a3",8518:"69e4c2b5",8520:"ea246a7d",8529:"33171995",8610:"5be02386",8643:"a09aa523",8757:"1856d5b6",8786:"6458a62f",8807:"9d966504",8894:"bbb1746a",8908:"924b0302",8955:"88257d8a",9066:"e6f69b2d",9138:"e5753066",9173:"986e22d4",9179:"8dd00486",9197:"90e65bfc",9228:"fc107ca5",9249:"312c2807",9300:"bdf83d64",9385:"b012cd5f",9414:"becd0640",9579:"e4b1c753",9661:"8ef24486",9679:"7ab0cc2a",9731:"dcbef1c6",9771:"162e2ecd",9817:"1936981e",9893:"04fdeb2a",9898:"568886e5",9924:"a5b6acbb"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},t.l=(e,a,c,d)=>{if(f[e])f[e].push(a);else{var b,r;if(void 0!==c)for(var o=document.getElementsByTagName("script"),n=0;n<o.length;n++){var i=o[n];if(i.getAttribute("src")==e||i.getAttribute("data-webpack")=="fi:"+c){b=i;break}}b||(r=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,t.nc&&b.setAttribute("nonce",t.nc),b.setAttribute("data-webpack","fi:"+c),b.src=e),f[e]=[a];var u=(a,c)=>{b.onerror=b.onload=null,clearTimeout(l);var d=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach((e=>e(c))),a)return a(c)},l=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),r&&document.head.appendChild(b)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={15966941:"8326",17896441:"7918",29694455:"3388",30814625:"115",51624505:"4394",b1288602:"59",dff2ebad:"146","2ca64e35":"281",bc0c9d90:"354","1a606400":"494",ddc7679f:"569",c4c4056e:"635","9a3dc578":"655","686a7a89":"728","8c0e532b":"822","4200b1a9":"866","377f3aa1":"1011",a7098721:"1050","947341b7":"1145",d7f7fb17:"1171","86cd1460":"1235","0220f5fc":"1378","97a42631":"1464",e1d2ae23:"1475",d4b1e057:"1492","16cbc838":"1494","1cd58e77":"1547","48b268a6":"1648","0fcbc6ca":"1851","84d1e0d8":"1885",e31003e9:"1960","06c4a8fc":"2125","3da4b779":"2177","9df0e937":"2210","962da50c":"2264",b5a32f14:"2433",decbf9d1:"2445",dd841e73:"2482","9b91a88c":"2545","08dfa3a2":"2606",d675395f:"2741",d8f4410e:"2997","765ea78b":"3039",cfa2b263:"3086",a6aa9e1f:"3089","7e6d325b":"3184","34ab65f4":"3220","6e3cbca1":"3276","4621632b":"3519","95b96bb9":"3561","9e4087bc":"3608",a6a48ea2:"3618","24fecc0a":"3707","698e2076":"3713","087808f1":"3731","0123bc76":"3734","3720c009":"3751","794ef108":"3803","933b95b3":"3887","2af5d0a7":"3979","01a85c17":"4013",f48be158:"4064",c4f5d8e4:"4195","75cccf44":"4256","0bfe45d5":"4269","4e546705":"4327",df0885f0:"4343",a94703ab:"4368",a4c10cf4:"4382","976c4f3b":"4562","19d7c045":"4637","2fcf0558":"4638",d79dd549:"5169","6bc697d0":"5287","1535ede8":"5376","52f2a5bf":"5430","9287eafd":"5521","595c7293":"5634",af8b72a7:"5658","3adcbc3a":"5701","8e6bb954":"5775",a80747a0:"5824",f75910c4:"5934","4edd2021":"5975","7ce7faac":"6064",b0291f37:"6097",ccc49370:"6103",d57b4369:"6179",d255bd7f:"6292","4f96b16e":"6306",fb4361d3:"6327","2b89902a":"6342","28d80ff8":"6435",bc2d22bc:"6519",d05e838c:"6544",c580b66a:"6573",bb984793:"6864","22a175ec":"6890","45c9e308":"7084",aa24fd5d:"7257","493c0536":"7292",b8cbf382:"7438","0608d96f":"7568","8a25f659":"7728",df078f58:"7743",ab2721d4:"7755","1a4e3797":"7920","3011a4c0":"7926","520f8175":"8058",bb882650:"8091","3d92ba6e":"8236",a2ba8888:"8289",eba2374c:"8387",ff82dde7:"8472","8b1802c5":"8480",a7bd4aaa:"8518","62d847b3":"8520","1acf65cc":"8529","6875c492":"8610",ff472cd9:"8643",e89da83e:"8757",a082abd3:"8786",dead8108:"8807",d309b5b1:"8908","8d31a880":"9066","5ca803d2":"9173",b9f7f5c4:"9179",b25fbc58:"9197","66d5ef6c":"9228","70a4540f":"9249","146d9b84":"9300","95f41f0b":"9385","354a7b72":"9414","5c15401e":"9579","5e95c892":"9661",b45dccf0:"9679","7052c0bc":"9731","534d4833":"9771","14eb3368":"9817","0178f9ad":"9898",df203c0f:"9924"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,c)=>{var f=t.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var d=new Promise(((c,d)=>f=e[a]=[c,d]));c.push(f[2]=d);var b=t.p+t.u(a),r=new Error;t.l(b,(c=>{if(t.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var d=c&&("load"===c.type?"missing":c.type),b=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+d+": "+b+")",r.name="ChunkLoadError",r.type=d,r.request=b,f[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,c)=>{var f,d,b=c[0],r=c[1],o=c[2],n=0;if(b.some((a=>0!==e[a]))){for(f in r)t.o(r,f)&&(t.m[f]=r[f]);if(o)var i=o(t)}for(a&&a(c);n<b.length;n++)d=b[n],t.o(e,d)&&e[d]&&e[d][0](),e[d]=0;return t.O(i)},c=self.webpackChunkfi=self.webpackChunkfi||[];c.forEach(a.bind(null,0)),c.push=a.bind(null,c.push.bind(c))})()})(); \ No newline at end of file diff --git a/blog/2023/08/02/copr/index.html b/blog/2023/08/02/copr/index.html index fa8b73b..54dcfb6 100644 --- a/blog/2023/08/02/copr/index.html +++ b/blog/2023/08/02/copr/index.html @@ -2,7 +2,7 @@ <html lang="en" dir="ltr" class="blog-wrapper blog-post-page plugin-blog plugin-id-blog" data-has-hydrated="false"> <head> <meta charset="UTF-8"> -<meta name="generator" content="Docusaurus v3.0.1"> +<meta name="generator" content="Docusaurus v3.1.1"> <title data-rh="true">How can Copr help with broken dependencies | mf @@ -14,11 +14,11 @@ - - + + -

        How can Copr help with broken dependencies

        · 4 min read
        Matej Focko

        When you decide to run Fedora on your VPS, you might get screwed over by using +

        How can Copr help with broken dependencies

        · 4 min read
        Matej Focko

        When you decide to run Fedora on your VPS, you might get screwed over by using random repositories…

        When I “reserved” my VPS1 back in June '20, I slapped Fedora on it without thinking. I bet 99% of people would say that I'm crazy for doing such thing2, @@ -92,6 +92,6 @@ on one of my “home servers”, before getting the VPS. You could say I like to live on the edge…

      • -
      +
      \ No newline at end of file diff --git a/blog/2024/01/28/rust-opinion/index.html b/blog/2024/01/28/rust-opinion/index.html new file mode 100644 index 0000000..43dd31e --- /dev/null +++ b/blog/2024/01/28/rust-opinion/index.html @@ -0,0 +1,289 @@ + + + + + +Mixed feelings on Rust | mf + + + + + + + + + + + + + + +

      Mixed feelings on Rust

      · 16 min read
      Matej Focko

      Rust has become a rather popular language these days. I've managed to get my +hands dirty with it during Advent of Code ‘22 and partially ‘23. I've also +used it for few rounds of Codeforces and I have to try very hard to maintain +some variety of languages for LeetCode challenges along with the Rust. I'll +disclaim up front that I won't be only positive, since this post is a result of +multiple discussions about Rust and I stand behind +“All that glitters is not gold”, so if you can't stand your favorite language +being criticized in any way, don't even proceed. 😉

      +

      Memory safety

      +

      I'll start by kicking the biggest benefit of the language, the memory safety. +Let's be honest here, majority of the checks rely on the static analysis, cause +you can't do anything else during the compile-time, right? Therefore we can +basically say that we are relying on the compiler to “solve” all of our issues.

      +
      warning

      I'm not doubting the fact that compiler can prevent a lot of the memory +errors, I'm just saying it's not realistic to cover everything.

      +

      Compiler

      +

      I guess we can safely1 agree on the fact that we 100% rely on the compiler to +have our back. Is the compiler bug-free? I doubt it. This is not meant in an +offensive way to the Rust compiler developers, but we need to be realistic here. +It's a compiler, even older and larger projects like gcc or llvm can't avoid +bugs to appear.

      +

      When I was trying out Rust for some of the LeetCode challenges I've stumbled +upon the following warning: +Example of a compiler bug

      +

      The issue here comes from the fact that we have 2 simultaneous references to the +same memory (one is mutable and one immutable). If you cannot think of any way +this can break, I'll give you a rather simple example from C++ where this could +cause an issue.

      Imagine a function that has some complex object and also calls a coroutine which +utilizes read-only reference to that object. When the coroutine suspends, the +caller can modify the object. This can break the integrity of data read by the +coroutine.

        +
      • Yes, this can cause a memory error.
      • +
      • Yes, this hasn't been handled until someone noticed it.
      • +

      Fixing this bug is not backwards compatible, cause you're covering a case that +hasn't been covered before.

      +

      Enforcing the safety

      +

      One of the ways Rust enforces the safety is by restricting what you can do, like +the example above. Aforementioned issue can happen, but doesn't have to. +Rule of the thumb in the Rust compiler is to “block” anything that can be an +issue, static analysis can't do much more, it cannot decide whether it's safe to +do it or not.

      +

      Satisfying the Rust compiler is sometimes a brutal pain in the ass, because you +cannot do things like you're used to, you need to work around them somehow.

      +
      tip

      Key difference between Rust and C or C++ lies in the fact that Rust chooses to +ban all “potentially offensive” actions, C and C++ relies on you to be +sure it's safe to do.

      C++ v. Rust

      +

      Consequences

      +

      Where are we heading with this approach of “if it compiles, it runs” though? +In this aspect I have a rather similar opinion as with regards to the ChatGPT +and its derivatives.

      +

      If you teach people to 100% depend on the compiler, they will do it, cause it's +easy. All you need to do is make the compiler shut up2. Giving up the +intellectual masturbation about the memory safety will make you lose your edge +over the time. When we get to the point of everyone being in the mindset +mentioned above, who's going to maintain the compiler? This is the place where +you need to think about the memory safety and furthermore in a much more +general way than in your own projects, because it is the thing that everyone +blindly believes in in the end.

      +

      I'm not saying that everyone should give up Rust and think about their memory +management and potential memory issues. I'm just saying that going the easy way +will make people dull and they should think about it anyways, that's how the +issue above has been discovered. If everyone walked past and didn't think about +it, no one would discover this issue till it bit them hard.

      +
      Standard library

      Even the standard library is littered with unsafe blocks that are prefixed +with comments in style:

      // SAFETY: …

      The fact that the casual Rust dev doesn't have to think much about safety, +cause the compiler has their back, doesn't mean that the Rust compiler dev +doesn't either.

      I gotta admit that I adopted this concept in other languages (even in Python), +cause you can encounter situations where it doesn't have to be clear why you +can do what you're doing.

      +

      Development & design

      +

      Development of Rust is… very fast. One positive is that they're trying to be as +backward compatible as possible at least by verifying against all the published +crates in the process. Of course, you cannot be backward compatible about fixing +the bugs that have been found, but such is life.

      +

      Fast development cycle

      +

      One of the negatives of the fast development cycle is the fact that they're +using the latest features already in the next release of the Rust. Yes, it is +something that you can use for verifying and testing your own changes, but at +the same time it places a requirement of the latest release to compile the next +one.

      +
      tip

      If you check gcc for example, they have a requirement of minimal version of +compiler that you need for the build. Though gcc's requirement is not so needy +as the Rust one.

      +

      One of the other negatives is the introduction of bugs. If you're pushing +changes, somewhat mindlessly, at such a fast pace, it is inevitable to introduce +a bunch bugs in the process. Checking the GitHub issue tracker with

      +
      is:issue is:open label:C-bug label:T-compiler
      +

      yields 2,224 open issues at the time of writing this post.

      +

      RFCs

      +

      You can find a lot of RFCs for the Rust. Some of them are more questionable +than the others. Fun thing is that a lot of them make it to the nightly builds, +so they can be tested and polished off. Even the questionable ones… I'll leave +few examples for a better understanding.

      +

      One of such features is the do yeet expression:

      +
      #![feature(yeet_expr)]

      fn foo() -> Result<String, i32> {
      do yeet 4;
      }
      assert_eq!(foo(), Err(4));

      fn bar() -> Option<String> {
      do yeet;
      }
      assert_eq!(bar(), None);
      +

      It allows you to “yeet” the errors out of the functions that return Result or +Option.

      +

      One of the more recent ones is +the ability to include Cargo manifests into the sources, so you can do something +like:

      +
      #!/usr/bin/env cargo
      ---
      [dependencies]
      clap = { version = "4.2", features = ["derive"] }
      ---

      use clap::Parser;

      #[derive(Parser, Debug)]
      #[clap(version)]
      struct Args {
      #[clap(short, long, help = "Path to config")]
      config: Option<std::path::PathBuf>,
      }

      fn main() {
      let args = Args::parse();
      println!("{:?}", args);
      }
      +

      I would say you can get almost anything into the language…

      +

      Community and hype train

      +

      Rust community is a rather unique thing. A lot of people will hate me for this, +but I can't help, but to compare them to militant vegans. I'll go through some +of the things related to it, so I can support my opinion at least.

      +

      Rust is the best language. It is not. There is no best language, each has its +own positives and negatives, you need to choose the language that's the most +suitable for your use case. There are areas where Rust excels, though I have +to admit it's very close to being a universal hammer regardless of how suitable +it is. There is a very steep learning curve to it, beginnings in Rust are very +painful.

      +

      Rewrite everything in Rust. Just no. There are multiple feedbacks on doing +rewrites, it is very common to fix N bugs with a rewrite while introducing +N + 1 other bugs in the process. It doesn't solve anything unless there are +some strong reasons to go with it. Majority of such suggested rewrites don't +have those reasons though.

      +

      Language ‹x› is bad, though in Rust… Cherry-picking one specific pain point of +one language and reflecting how it is better in other language can go both ways. +For example it is rather easy to pick the limitations imposed by Rust compiler +and show how it's possible in other languages 🤷‍♂️

      +

      I don't mind any of those opinions, you're free to have them, as long as you +don't rub them in my face which is not the usual case… This experience makes it +just worse for me, part of this post may be also influenced by this fact.

      +

      Rust in Linux

      +
      caution

      As someone who has seen the way Linux kernel is built in the RHEL ecosystem, how +complex the whole thing is and how much resources you need to proceed, I have +very strong opinions on this topic.

      +

      It took years of work to even “incorporate” Rust into the Linux codebase, just +to get the “Hello World!”. I don't have anything against the idea of writing +drivers in the Rust, I bet it can catch a lot of common mistakes, but still +introducing Rust to the kernel is another step to enlarge the monster.

      +

      I have to admit though that the Apple GPU driver for Linux written in Rust is +quite impressive. Apart from that there are not so many benefits, yet…

      +

      Packaging

      +

      I'll divide the packaging into the packaging of the language itself and the +programs written in Rust.

      +

      Let's start with the cargo itself though. Package managers of the languages +usually get a lot of hate (you can take npm or pip as examples3). If +you've ever tried out Rust, I bet you already know where I'm going with this. +Yes, I mean the compilation times, or even Cargo downloading whole index of +crates just so you can update that one dependency (and 3 millions of indirect +deps). When I was doing AoC ‘22 in Rust, I've set up sccache right away on the +first day.

      +

      Let's move to the packaging of the Rust itself, it's tedious. Rust has a very +fast development cycle and doesn't even try to make the builds backward +compatible. If there is a new release of Rust, there is a very high chance that +you cannot build that release with anything other than the latest Rust +release. If you have ever touched the packaging, you know that this is something +that can cause a lot of problems, cause you need the second-to-latest version to +compile the latest version, don't forget that this applies inductively… People +running Gentoo could tell you a lot about this.

      +
      info

      Compiling the compilers takes usually more time than compiling the kernel +itself…

      +

      I cannot speak about packaging of Rust programs in other than RHEL-based +distros, though I can speak about RHEL ecosystem. Fedora packaging guidelines +specify that you need to build each and every dependency of the program +separately. I wanted to try out AlmaLinux and install Alacritty there and I +failed miserably. The solution that worked, consisted of ignoring the packaging +guidelines, running cargo build and consuming the binaries afterwards. +Dependencies of the Rust programs are of a similar nature as JS dependencies.

      +
      +

      I'm tipping my fedora1 in the general direction of the maintainers of Rust +packages in RHEL ecosystem. I wouldn't be able to do this without losing my +sanity.

      +
      +

      Likes

      +

      If you've come all the way here and you're a Rustacean, I believe I've managed +to get your blood boiling, so it's time to finish this off by stuff I like about +Rust. I doubt I will be able to cover everything, but I can try at least. You +have to admit it's much easier to remember the bad stuff as opposed to the good. +😉

      +

      Workflow and toolchain

      +

      I prefered using Rust for the Advent of Code and Codeforces as it provides +a rather easy way to test the solutions before running them with the challenge +input (or test runner). I can give an example from the Advent of Code:

      +
      use aoc_2023::*;

      type Output1 = i32;
      type Output2 = Output1;

      struct DayXX {}
      impl Solution<Output1, Output2> for DayXX {
      fn new<P: AsRef<Path>>(pathname: P) -> Self {
      let lines: Vec<String> = file_to_lines(pathname);

      todo!()
      }

      fn part_1(&mut self) -> Output1 {
      todo!()
      }

      fn part_2(&mut self) -> Output2 {
      todo!()
      }
      }

      fn main() -> Result<()> {
      DayXX::main()
      }

      test_sample!(day_XX, DayXX, 42, 69);
      +

      This was the skeleton I've used and the macro at the end is my own creation that +expands to:

      +
      #[cfg(test)]
      mod day_XX {
      use super::*;

      #[test]
      fn part_1() {
      let path = DayXX::get_sample(1);
      let mut day = DayXX::new(path);
      assert_eq!(day.part_1(), 42);
      }

      #[test]
      fn part_2() {
      let path = DayXX::get_sample(2);
      let mut day = DayXX::new(path);
      assert_eq!(day.part_2(), 69);
      }
      }
      +

      When you're solving the problem, all you need to do is switch between +cargo test and cargo run to check the answer to either sample or the +challenge input itself.

      +

      Introduce bacon and it gets even better. Bacon is a CLI tool that wraps around +the cargo and allows you to check, run, lint or run tests on each file save. +It's a very pleasant thing for a so-called compiler-assisted development.

      +

      Speaking of linting from within the bacon, you cannot leave out the clippy. +Not only it can whip your ass because of errors, but it can also produce a lot +of helpful suggestions, for example passing slices by borrow instead of +borrowing the Vec itself when you don't need it.

      +

      Standard library

      +

      There's a lot included in the standard library. It almost feels like you +have all you need4. I like placeholders (like todo!(), unreachable!(), +unimplemented!()) to the extent of +implementing them as exceptions in C++.

      +

      You can find almost anything. Though you can also hit some very weird issues +with some of the nuances of the type system.

      +

      unsafe

      +

      This might be something that people like to avoid as much as possible. However I +think that forming a habit of commenting posibly unsafe operations in any +language is a good habit, as I've mentioned above. You should be able to argue +why you can do something safely, even if the compiler is not kicking your ass +because of it.

      +

      Excerpt of such comment from work:

      +
      # SAFETY: Taking first package instead of specific package should be
      # safe, since we have put a requirement on »one« ‹upstream_project_url›
      # per Packit config, i.e. even if we're dealing with a monorepo, there
      # is only »one« upstream. If there is one upstream, there is only one
      # set of GPG keys that can be allowed.
      return self.downstream_config.packages[
      self.downstream_config._first_package
      ].allowed_gpg_keys
      +

      Traits

      +

      One of the other things I like are the traits. They are more restrictive than +templates or concepts in C++, but they're doing their job pretty good. If you +are building library and require multiple traits to be satisfied it means a lot +of copy-paste, but that's soon to be fixed by the trait aliases.

      +
      Comparing to other languages

      On Wikipedia I've seen trait being defined as a more restrictive type class as +you may know it from the Haskell for example. C++ isn't behind either with its +constraints and concepts. I would say that we can order them in the following +order based on the complexity they can express:

      Rust's trait < Haskell's type class < C++'s concept
      +

      You can also hit some issues, like me when trying to support conversions between +underlying numeric types of a 2D vectors or support for using an operator from +both sides (I couldn't get c * u to work in the same way as u * c because +the first one requires you to implement the trait of a built-in type).

      +
      Implementation

      Implementing traits lies in

      impl SomeTrait for SomeStruct {
      // implementation goes here
      }

      One of the things I would love to see is being able to define the helper +functions within the same block. As of now, the only things allowed are the ones +that are required by the trait, which in the end results in a randomly lying +functions around (or in a implementation of the structure itself). I don't like +this mess at all…

      +

      Influence of functional paradigm

      +

      You can see a big influence of the functional paradigm. Not only in iterators, +but also in the other parts of the language. For example I prefer Option<T> or +Result<T, E> to nulls and exceptions. Pattern matching together with +compiler both enforces handling of the errors and rather user-friendly way of +doing it.

      +

      Not to mention .and_then() and such. However spending most of the time with +the AoC you get pretty annoyed of the repetitive .unwrap() during parsing, +since you are guaranteed correct input.

      +

      Macros

      +

      Macros are a very strong pro of the Rust. And no, we're not going to talk about +the procedural macros…

      +

      As I've shown above I've managed to “tame” a lot of copy-paste in the tests for +the AoC by utilizing a macro that generated a very basic template for the tests.

      +

      As I have mentioned the traits above, I cannot forget to give props to derive +macro that allows you to “deduce” the default implementation. It is very helpful +for a tedious tasks like implementing Debug (for printing out the structures) +or comparisons, though with the comparisons you need to be careful about the +default implementation, it has already bitten me once or twice.

      +

      Summary

      +

      Overall there are many things about the Rust I like and would love to see them +implemented in other languages. However there are also many things I don't like. +Nothing is exclusively black and white.

      +

      Footnotes

      +
        +
      1. +

        pun intended 2

        +
      2. +
      3. +

        It's not that easy with the Rust compiler, but OK…

        +
      4. +
      5. +

        not to even mention multiple different packaging standards Python has, which +is borderline https://xkcd.com/927/

        +
      6. +
      7. +

        unlike Python where there's whole universe in the language itself, yet there +are essential things not present…

        +
      8. +
      +
      + + \ No newline at end of file diff --git a/blog/aoc-2022/1st-week/index.html b/blog/aoc-2022/1st-week/index.html index 5b61af5..05185af 100644 --- a/blog/aoc-2022/1st-week/index.html +++ b/blog/aoc-2022/1st-week/index.html @@ -2,7 +2,7 @@ - + 1st week of Advent of Code '22 in Rust | mf @@ -14,11 +14,11 @@ - - + + -

      1st week of Advent of Code '22 in Rust

      · 13 min read
      Matej Focko

      Let's go through the first week of Advent of Code in Rust.

      +

      1st week of Advent of Code '22 in Rust

      · 13 min read
      Matej Focko

      Let's go through the first week of Advent of Code in Rust.

      note

      If you wish to have a look at the solutions, you can follow them on my GitLab. More specifically in the /src/bin/.

      I will try to summarize my experience with using Rust for the AoC. Trying it out diff --git a/blog/aoc-2022/2nd-week/index.html b/blog/aoc-2022/2nd-week/index.html index e16e456..6820257 100644 --- a/blog/aoc-2022/2nd-week/index.html +++ b/blog/aoc-2022/2nd-week/index.html @@ -2,7 +2,7 @@ - + 2nd week of Advent of Code '22 in Rust | mf @@ -14,11 +14,11 @@ - - + + -

      2nd week of Advent of Code '22 in Rust

      · 21 min read
      Matej Focko

      Let's go through the second week of Advent of Code in Rust.

      +

      2nd week of Advent of Code '22 in Rust

      · 21 min read
      Matej Focko

      Let's go through the second week of Advent of Code in Rust.

      Day 8: Treetop Tree House

      tl;dr

      We get a forest and we want to know how many trees are visible from the outside. Apart from that we want to find the best view.

      @@ -34,7 +34,7 @@ way:

    caution

    I'm getting familiar with Rust and starting to “abuse” it… While doing so, I'm also uncovering some “features” that I don't really like. Therefore I will mark -all of my rants with thicc «↯» mark and will try to “lock” them into their +all of my rants with thicc «↯» mark and will try to “lock” them into their own “box of hell”.

    Swapping indices

    Relatively simple implementation, just take the values, swap them and return new diff --git a/blog/aoc-2022/3rd-week/index.html b/blog/aoc-2022/3rd-week/index.html index 46f7fef..80db746 100644 --- a/blog/aoc-2022/3rd-week/index.html +++ b/blog/aoc-2022/3rd-week/index.html @@ -2,7 +2,7 @@ - + 3rd week of Advent of Code '22 in Rust | mf @@ -14,11 +14,11 @@ - - + + -

    3rd week of Advent of Code '22 in Rust

    · 12 min read
    Matej Focko

    Let's go through the third week of Advent of Code in Rust.

    +

    3rd week of Advent of Code '22 in Rust

    · 12 min read
    Matej Focko

    Let's go through the third week of Advent of Code in Rust.

    Day 15: Beacon Exclusion Zone

    tl;dr

    Triangulating a distress beacon based on the information from the sensors.

    Solution

    diff --git a/blog/aoc-2022/4th-week/index.html b/blog/aoc-2022/4th-week/index.html index d6a9344..18a5a63 100644 --- a/blog/aoc-2022/4th-week/index.html +++ b/blog/aoc-2022/4th-week/index.html @@ -2,7 +2,7 @@ - + 4th week of Advent of Code '22 in Rust | mf @@ -14,11 +14,11 @@ - - + + -

    4th week of Advent of Code '22 in Rust

    · 16 min read
    Matej Focko

    Let's go through the fourth week of Advent of Code in Rust.

    +

    4th week of Advent of Code '22 in Rust

    · 16 min read
    Matej Focko

    Let's go through the fourth week of Advent of Code in Rust.

    Day 22: Monkey Map

    tl;dr

    Simulating a movement on a 2D map with given instructions. Map becomes a cube in the 2nd part…

    @@ -233,7 +233,7 @@ the previous versions.

         #[test]
    fn test_from() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(from_snafu(s), *n);
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
    }
    }

    #[test]
    fn test_to() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(to_snafu(*n), s.to_string());
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(SNAFU::from(n).to_string(), s.to_string());
    }

    Summary

    Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

    -

    Finished advent calendar :smile:

    +

    Finished advent calendar :smile:

    Advent of Code

    This year was quite fun, even though most of the solutions and posts came in later on (cough in '23 cough). Day 22 was the most obnoxious one… And also diff --git a/blog/aoc-2022/intro/index.html b/blog/aoc-2022/intro/index.html index 3ae49f1..2db0cda 100644 --- a/blog/aoc-2022/intro/index.html +++ b/blog/aoc-2022/intro/index.html @@ -2,7 +2,7 @@ - + Advent of Code '22 in Rust | mf @@ -14,11 +14,11 @@ - - + + -

    Advent of Code '22 in Rust

    · 9 min read
    Matej Focko

    Let's talk about the preparations for this year's Advent of Code.

    +

    Advent of Code '22 in Rust

    · 9 min read
    Matej Focko

    Let's talk about the preparations for this year's Advent of Code.

    Choosing a language

    When choosing a language for AoC, you usually want a language that gives you a quick feedback which allows you to iterate quickly to the solution of the puzzle. diff --git a/blog/archive/index.html b/blog/archive/index.html index 1c3d9b0..cbef0f0 100644 --- a/blog/archive/index.html +++ b/blog/archive/index.html @@ -2,7 +2,7 @@ - + Archive | mf @@ -14,10 +14,10 @@ - - + + -

    + \ No newline at end of file diff --git a/blog/atom.xml b/blog/atom.xml index 448644b..b3cf128 100644 --- a/blog/atom.xml +++ b/blog/atom.xml @@ -2,11 +2,292 @@ https://blog.mfocko.xyz/blog mf Blog - 2023-08-02T00:00:00.000Z + 2024-01-28T00:00:00.000Z https://github.com/jpmonette/feed mf's blog https://blog.mfocko.xyz/img/favicon.ico + + <![CDATA[Mixed feelings on Rust]]> + https://blog.mfocko.xyz/blog/2024/01/28/rust-opinion + + 2024-01-28T00:00:00.000Z + + Rust has become a rather popular language these days. I've managed to get my +hands dirty with it during Advent of Code ‘22 and partially ‘23. I've also +used it for few rounds of Codeforces and I have to try very hard to maintain +some variety of languages for LeetCode challenges along with the Rust. I'll +disclaim up front that I won't be only positive, since this post is a result of +multiple discussions about Rust and I stand behind +“All that glitters is not gold”, so if you can't stand your favorite language +being criticized in any way, don't even proceed. 😉

    +

    Memory safety

    +

    I'll start by kicking the biggest benefit of the language, the memory safety. +Let's be honest here, majority of the checks rely on the static analysis, cause +you can't do anything else during the compile-time, right? Therefore we can +basically say that we are relying on the compiler to “solve” all of our issues.

    +
    warning

    I'm not doubting the fact that compiler can prevent a lot of the memory +errors, I'm just saying it's not realistic to cover everything.

    +

    Compiler

    +

    I guess we can safely1 agree on the fact that we 100% rely on the compiler to +have our back. Is the compiler bug-free? I doubt it. This is not meant in an +offensive way to the Rust compiler developers, but we need to be realistic here. +It's a compiler, even older and larger projects like gcc or llvm can't avoid +bugs to appear.

    +

    When I was trying out Rust for some of the LeetCode challenges I've stumbled +upon the following warning: +Example of a compiler bug

    +

    The issue here comes from the fact that we have 2 simultaneous references to the +same memory (one is mutable and one immutable). If you cannot think of any way +this can break, I'll give you a rather simple example from C++ where this could +cause an issue.

    Imagine a function that has some complex object and also calls a coroutine which +utilizes read-only reference to that object. When the coroutine suspends, the +caller can modify the object. This can break the integrity of data read by the +coroutine.

      +
    • Yes, this can cause a memory error.
    • +
    • Yes, this hasn't been handled until someone noticed it.
    • +

    Fixing this bug is not backwards compatible, cause you're covering a case that +hasn't been covered before.

    +

    Enforcing the safety

    +

    One of the ways Rust enforces the safety is by restricting what you can do, like +the example above. Aforementioned issue can happen, but doesn't have to. +Rule of the thumb in the Rust compiler is to “block” anything that can be an +issue, static analysis can't do much more, it cannot decide whether it's safe to +do it or not.

    +

    Satisfying the Rust compiler is sometimes a brutal pain in the ass, because you +cannot do things like you're used to, you need to work around them somehow.

    +
    tip

    Key difference between Rust and C or C++ lies in the fact that Rust chooses to +ban all “potentially offensive” actions, C and C++ relies on you to be +sure it's safe to do.

    C++ v. Rust

    +

    Consequences

    +

    Where are we heading with this approach of “if it compiles, it runs” though? +In this aspect I have a rather similar opinion as with regards to the ChatGPT +and its derivatives.

    +

    If you teach people to 100% depend on the compiler, they will do it, cause it's +easy. All you need to do is make the compiler shut up2. Giving up the +intellectual masturbation about the memory safety will make you lose your edge +over the time. When we get to the point of everyone being in the mindset +mentioned above, who's going to maintain the compiler? This is the place where +you need to think about the memory safety and furthermore in a much more +general way than in your own projects, because it is the thing that everyone +blindly believes in in the end.

    +

    I'm not saying that everyone should give up Rust and think about their memory +management and potential memory issues. I'm just saying that going the easy way +will make people dull and they should think about it anyways, that's how the +issue above has been discovered. If everyone walked past and didn't think about +it, no one would discover this issue till it bit them hard.

    +
    Standard library

    Even the standard library is littered with unsafe blocks that are prefixed +with comments in style:

    // SAFETY: …

    The fact that the casual Rust dev doesn't have to think much about safety, +cause the compiler has their back, doesn't mean that the Rust compiler dev +doesn't either.

    I gotta admit that I adopted this concept in other languages (even in Python), +cause you can encounter situations where it doesn't have to be clear why you +can do what you're doing.

    +

    Development & design

    +

    Development of Rust is… very fast. One positive is that they're trying to be as +backward compatible as possible at least by verifying against all the published +crates in the process. Of course, you cannot be backward compatible about fixing +the bugs that have been found, but such is life.

    +

    Fast development cycle

    +

    One of the negatives of the fast development cycle is the fact that they're +using the latest features already in the next release of the Rust. Yes, it is +something that you can use for verifying and testing your own changes, but at +the same time it places a requirement of the latest release to compile the next +one.

    +
    tip

    If you check gcc for example, they have a requirement of minimal version of +compiler that you need for the build. Though gcc's requirement is not so needy +as the Rust one.

    +

    One of the other negatives is the introduction of bugs. If you're pushing +changes, somewhat mindlessly, at such a fast pace, it is inevitable to introduce +a bunch bugs in the process. Checking the GitHub issue tracker with

    +
    is:issue is:open label:C-bug label:T-compiler
    +

    yields 2,224 open issues at the time of writing this post.

    +

    RFCs

    +

    You can find a lot of RFCs for the Rust. Some of them are more questionable +than the others. Fun thing is that a lot of them make it to the nightly builds, +so they can be tested and polished off. Even the questionable ones… I'll leave +few examples for a better understanding.

    +

    One of such features is the do yeet expression:

    +
    #![feature(yeet_expr)]

    fn foo() -> Result<String, i32> {
    do yeet 4;
    }
    assert_eq!(foo(), Err(4));

    fn bar() -> Option<String> {
    do yeet;
    }
    assert_eq!(bar(), None);
    +

    It allows you to “yeet” the errors out of the functions that return Result or +Option.

    +

    One of the more recent ones is +the ability to include Cargo manifests into the sources, so you can do something +like:

    +
    #!/usr/bin/env cargo
    ---
    [dependencies]
    clap = { version = "4.2", features = ["derive"] }
    ---

    use clap::Parser;

    #[derive(Parser, Debug)]
    #[clap(version)]
    struct Args {
    #[clap(short, long, help = "Path to config")]
    config: Option<std::path::PathBuf>,
    }

    fn main() {
    let args = Args::parse();
    println!("{:?}", args);
    }
    +

    I would say you can get almost anything into the language…

    +

    Community and hype train

    +

    Rust community is a rather unique thing. A lot of people will hate me for this, +but I can't help, but to compare them to militant vegans. I'll go through some +of the things related to it, so I can support my opinion at least.

    +

    Rust is the best language. It is not. There is no best language, each has its +own positives and negatives, you need to choose the language that's the most +suitable for your use case. There are areas where Rust excels, though I have +to admit it's very close to being a universal hammer regardless of how suitable +it is. There is a very steep learning curve to it, beginnings in Rust are very +painful.

    +

    Rewrite everything in Rust. Just no. There are multiple feedbacks on doing +rewrites, it is very common to fix N bugs with a rewrite while introducing +N + 1 other bugs in the process. It doesn't solve anything unless there are +some strong reasons to go with it. Majority of such suggested rewrites don't +have those reasons though.

    +

    Language ‹x› is bad, though in Rust… Cherry-picking one specific pain point of +one language and reflecting how it is better in other language can go both ways. +For example it is rather easy to pick the limitations imposed by Rust compiler +and show how it's possible in other languages 🤷‍♂️

    +

    I don't mind any of those opinions, you're free to have them, as long as you +don't rub them in my face which is not the usual case… This experience makes it +just worse for me, part of this post may be also influenced by this fact.

    +

    Rust in Linux

    +
    caution

    As someone who has seen the way Linux kernel is built in the RHEL ecosystem, how +complex the whole thing is and how much resources you need to proceed, I have +very strong opinions on this topic.

    +

    It took years of work to even “incorporate” Rust into the Linux codebase, just +to get the “Hello World!”. I don't have anything against the idea of writing +drivers in the Rust, I bet it can catch a lot of common mistakes, but still +introducing Rust to the kernel is another step to enlarge the monster.

    +

    I have to admit though that the Apple GPU driver for Linux written in Rust is +quite impressive. Apart from that there are not so many benefits, yet…

    +

    Packaging

    +

    I'll divide the packaging into the packaging of the language itself and the +programs written in Rust.

    +

    Let's start with the cargo itself though. Package managers of the languages +usually get a lot of hate (you can take npm or pip as examples3). If +you've ever tried out Rust, I bet you already know where I'm going with this. +Yes, I mean the compilation times, or even Cargo downloading whole index of +crates just so you can update that one dependency (and 3 millions of indirect +deps). When I was doing AoC ‘22 in Rust, I've set up sccache right away on the +first day.

    +

    Let's move to the packaging of the Rust itself, it's tedious. Rust has a very +fast development cycle and doesn't even try to make the builds backward +compatible. If there is a new release of Rust, there is a very high chance that +you cannot build that release with anything other than the latest Rust +release. If you have ever touched the packaging, you know that this is something +that can cause a lot of problems, cause you need the second-to-latest version to +compile the latest version, don't forget that this applies inductively… People +running Gentoo could tell you a lot about this.

    +
    info

    Compiling the compilers takes usually more time than compiling the kernel +itself…

    +

    I cannot speak about packaging of Rust programs in other than RHEL-based +distros, though I can speak about RHEL ecosystem. Fedora packaging guidelines +specify that you need to build each and every dependency of the program +separately. I wanted to try out AlmaLinux and install Alacritty there and I +failed miserably. The solution that worked, consisted of ignoring the packaging +guidelines, running cargo build and consuming the binaries afterwards. +Dependencies of the Rust programs are of a similar nature as JS dependencies.

    +
    +

    I'm tipping my fedora1 in the general direction of the maintainers of Rust +packages in RHEL ecosystem. I wouldn't be able to do this without losing my +sanity.

    +
    +

    Likes

    +

    If you've come all the way here and you're a Rustacean, I believe I've managed +to get your blood boiling, so it's time to finish this off by stuff I like about +Rust. I doubt I will be able to cover everything, but I can try at least. You +have to admit it's much easier to remember the bad stuff as opposed to the good. +😉

    +

    Workflow and toolchain

    +

    I prefered using Rust for the Advent of Code and Codeforces as it provides +a rather easy way to test the solutions before running them with the challenge +input (or test runner). I can give an example from the Advent of Code:

    +
    use aoc_2023::*;

    type Output1 = i32;
    type Output2 = Output1;

    struct DayXX {}
    impl Solution<Output1, Output2> for DayXX {
    fn new<P: AsRef<Path>>(pathname: P) -> Self {
    let lines: Vec<String> = file_to_lines(pathname);

    todo!()
    }

    fn part_1(&mut self) -> Output1 {
    todo!()
    }

    fn part_2(&mut self) -> Output2 {
    todo!()
    }
    }

    fn main() -> Result<()> {
    DayXX::main()
    }

    test_sample!(day_XX, DayXX, 42, 69);
    +

    This was the skeleton I've used and the macro at the end is my own creation that +expands to:

    +
    #[cfg(test)]
    mod day_XX {
    use super::*;

    #[test]
    fn part_1() {
    let path = DayXX::get_sample(1);
    let mut day = DayXX::new(path);
    assert_eq!(day.part_1(), 42);
    }

    #[test]
    fn part_2() {
    let path = DayXX::get_sample(2);
    let mut day = DayXX::new(path);
    assert_eq!(day.part_2(), 69);
    }
    }
    +

    When you're solving the problem, all you need to do is switch between +cargo test and cargo run to check the answer to either sample or the +challenge input itself.

    +

    Introduce bacon and it gets even better. Bacon is a CLI tool that wraps around +the cargo and allows you to check, run, lint or run tests on each file save. +It's a very pleasant thing for a so-called compiler-assisted development.

    +

    Speaking of linting from within the bacon, you cannot leave out the clippy. +Not only it can whip your ass because of errors, but it can also produce a lot +of helpful suggestions, for example passing slices by borrow instead of +borrowing the Vec itself when you don't need it.

    +

    Standard library

    +

    There's a lot included in the standard library. It almost feels like you +have all you need4. I like placeholders (like todo!(), unreachable!(), +unimplemented!()) to the extent of +implementing them as exceptions in C++.

    +

    You can find almost anything. Though you can also hit some very weird issues +with some of the nuances of the type system.

    +

    unsafe

    +

    This might be something that people like to avoid as much as possible. However I +think that forming a habit of commenting posibly unsafe operations in any +language is a good habit, as I've mentioned above. You should be able to argue +why you can do something safely, even if the compiler is not kicking your ass +because of it.

    +

    Excerpt of such comment from work:

    +
    # SAFETY: Taking first package instead of specific package should be
    # safe, since we have put a requirement on »one« ‹upstream_project_url›
    # per Packit config, i.e. even if we're dealing with a monorepo, there
    # is only »one« upstream. If there is one upstream, there is only one
    # set of GPG keys that can be allowed.
    return self.downstream_config.packages[
    self.downstream_config._first_package
    ].allowed_gpg_keys
    +

    Traits

    +

    One of the other things I like are the traits. They are more restrictive than +templates or concepts in C++, but they're doing their job pretty good. If you +are building library and require multiple traits to be satisfied it means a lot +of copy-paste, but that's soon to be fixed by the trait aliases.

    +
    Comparing to other languages

    On Wikipedia I've seen trait being defined as a more restrictive type class as +you may know it from the Haskell for example. C++ isn't behind either with its +constraints and concepts. I would say that we can order them in the following +order based on the complexity they can express:

    Rust's trait < Haskell's type class < C++'s concept
    +

    You can also hit some issues, like me when trying to support conversions between +underlying numeric types of a 2D vectors or support for using an operator from +both sides (I couldn't get c * u to work in the same way as u * c because +the first one requires you to implement the trait of a built-in type).

    +
    Implementation

    Implementing traits lies in

    impl SomeTrait for SomeStruct {
    // implementation goes here
    }

    One of the things I would love to see is being able to define the helper +functions within the same block. As of now, the only things allowed are the ones +that are required by the trait, which in the end results in a randomly lying +functions around (or in a implementation of the structure itself). I don't like +this mess at all…

    +

    Influence of functional paradigm

    +

    You can see a big influence of the functional paradigm. Not only in iterators, +but also in the other parts of the language. For example I prefer Option<T> or +Result<T, E> to nulls and exceptions. Pattern matching together with +compiler both enforces handling of the errors and rather user-friendly way of +doing it.

    +

    Not to mention .and_then() and such. However spending most of the time with +the AoC you get pretty annoyed of the repetitive .unwrap() during parsing, +since you are guaranteed correct input.

    +

    Macros

    +

    Macros are a very strong pro of the Rust. And no, we're not going to talk about +the procedural macros…

    +

    As I've shown above I've managed to “tame” a lot of copy-paste in the tests for +the AoC by utilizing a macro that generated a very basic template for the tests.

    +

    As I have mentioned the traits above, I cannot forget to give props to derive +macro that allows you to “deduce” the default implementation. It is very helpful +for a tedious tasks like implementing Debug (for printing out the structures) +or comparisons, though with the comparisons you need to be careful about the +default implementation, it has already bitten me once or twice.

    +

    Summary

    +

    Overall there are many things about the Rust I like and would love to see them +implemented in other languages. However there are also many things I don't like. +Nothing is exclusively black and white.

    +

    Footnotes

    +
      +
    1. +

      pun intended 2

      +
    2. +
    3. +

      It's not that easy with the Rust compiler, but OK…

      +
    4. +
    5. +

      not to even mention multiple different packaging standards Python has, which +is borderline https://xkcd.com/927/

      +
    6. +
    7. +

      unlike Python where there's whole universe in the language itself, yet there +are essential things not present…

      +
    8. +
    +
    ]]>
    + + Matej Focko + me+blog@mfocko.xyz + https://gitlab.com/mfocko + + + + + +
    <![CDATA[How can Copr help with broken dependencies]]> https://blog.mfocko.xyz/blog/2023/08/02/copr @@ -320,7 +601,7 @@ the previous versions.

         #[test]
    fn test_from() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(from_snafu(s), *n);
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
    }
    }

    #[test]
    fn test_to() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(to_snafu(*n), s.to_string());
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(SNAFU::from(n).to_string(), s.to_string());
    }

    Summary

    Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

    -

    Finished advent calendar :smile:

    +

    Finished advent calendar :smile:

    Advent of Code

    This year was quite fun, even though most of the solutions and posts came in later on (cough in '23 cough). Day 22 was the most obnoxious one… And also @@ -588,7 +869,7 @@ from mat[2][0], where mat is a 6 x 3 matr

    Given an m x n matrix mat of integers, sort each matrix diagonal in ascending order and return the resulting matrix.

    Example

    -

    Image describing the problem

    +

    Image describing the problem

    Skeleton and initial adjustments

    We are given the following skeleton for the C++ and the given challenge:

    class Solution {
    public:
    vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {

    }
    };
    diff --git a/blog/feed.json b/blog/feed.json index 22db6f5..0e51b17 100644 --- a/blog/feed.json +++ b/blog/feed.json @@ -4,6 +4,24 @@ "home_page_url": "https://blog.mfocko.xyz/blog", "description": "mf's blog", "items": [ + { + "id": "https://blog.mfocko.xyz/blog/2024/01/28/rust-opinion", + "content_html": "

    Rust has become a rather popular language these days. I've managed to get my\nhands dirty with it during Advent of Code ‘22 and partially ‘23. I've also\nused it for few rounds of Codeforces and I have to try very hard to maintain\nsome variety of languages for LeetCode challenges along with the Rust. I'll\ndisclaim up front that I won't be only positive, since this post is a result of\nmultiple discussions about Rust and I stand behind\n“All that glitters is not gold”, so if you can't stand your favorite language\nbeing criticized in any way, don't even proceed. 😉

    \n

    Memory safety

    \n

    I'll start by kicking the biggest benefit of the language, the memory safety.\nLet's be honest here, majority of the checks rely on the static analysis, cause\nyou can't do anything else during the compile-time, right? Therefore we can\nbasically say that we are relying on the compiler to “solve” all of our issues.

    \n
    warning

    I'm not doubting the fact that compiler can prevent a lot of the memory\nerrors, I'm just saying it's not realistic to cover everything.

    \n

    Compiler

    \n

    I guess we can safely1 agree on the fact that we 100% rely on the compiler to\nhave our back. Is the compiler bug-free? I doubt it. This is not meant in an\noffensive way to the Rust compiler developers, but we need to be realistic here.\nIt's a compiler, even older and larger projects like gcc or llvm can't avoid\nbugs to appear.

    \n

    When I was trying out Rust for some of the LeetCode challenges I've stumbled\nupon the following warning:\n\"Example

    \n

    The issue here comes from the fact that we have 2 simultaneous references to the\nsame memory (one is mutable and one immutable). If you cannot think of any way\nthis can break, I'll give you a rather simple example from C++ where this could\ncause an issue.

    Imagine a function that has some complex object and also calls a coroutine which\nutilizes read-only reference to that object. When the coroutine suspends, the\ncaller can modify the object. This can break the integrity of data read by the\ncoroutine.

      \n
    • Yes, this can cause a memory error.
    • \n
    • Yes, this hasn't been handled until someone noticed it.
    • \n

    Fixing this bug is not backwards compatible, cause you're covering a case that\nhasn't been covered before.

    \n

    Enforcing the safety

    \n

    One of the ways Rust enforces the safety is by restricting what you can do, like\nthe example above. Aforementioned issue can happen, but doesn't have to.\nRule of the thumb in the Rust compiler is to “block” anything that can be an\nissue, static analysis can't do much more, it cannot decide whether it's safe to\ndo it or not.

    \n

    Satisfying the Rust compiler is sometimes a brutal pain in the ass, because you\ncannot do things like you're used to, you need to work around them somehow.

    \n
    tip

    Key difference between Rust and C or C++ lies in the fact that Rust chooses to\nban all “potentially offensive” actions, C and C++ relies on you to be\nsure it's safe to do.

    \"C++

    \n

    Consequences

    \n

    Where are we heading with this approach of “if it compiles, it runs” though?\nIn this aspect I have a rather similar opinion as with regards to the ChatGPT\nand its derivatives.

    \n

    If you teach people to 100% depend on the compiler, they will do it, cause it's\neasy. All you need to do is make the compiler shut up2. Giving up the\nintellectual masturbation about the memory safety will make you lose your edge\nover the time. When we get to the point of everyone being in the mindset\nmentioned above, who's going to maintain the compiler? This is the place where\nyou need to think about the memory safety and furthermore in a much more\ngeneral way than in your own projects, because it is the thing that everyone\nblindly believes in in the end.

    \n

    I'm not saying that everyone should give up Rust and think about their memory\nmanagement and potential memory issues. I'm just saying that going the easy way\nwill make people dull and they should think about it anyways, that's how the\nissue above has been discovered. If everyone walked past and didn't think about\nit, no one would discover this issue till it bit them hard.

    \n
    Standard library

    Even the standard library is littered with unsafe blocks that are prefixed\nwith comments in style:

    // SAFETY: …

    The fact that the casual Rust dev doesn't have to think much about safety,\ncause the compiler has their back, doesn't mean that the Rust compiler dev\ndoesn't either.

    I gotta admit that I adopted this concept in other languages (even in Python),\ncause you can encounter situations where it doesn't have to be clear why you\ncan do what you're doing.

    \n

    Development & design

    \n

    Development of Rust is… very fast. One positive is that they're trying to be as\nbackward compatible as possible at least by verifying against all the published\ncrates in the process. Of course, you cannot be backward compatible about fixing\nthe bugs that have been found, but such is life.

    \n

    Fast development cycle

    \n

    One of the negatives of the fast development cycle is the fact that they're\nusing the latest features already in the next release of the Rust. Yes, it is\nsomething that you can use for verifying and testing your own changes, but at\nthe same time it places a requirement of the latest release to compile the next\none.

    \n
    tip

    If you check gcc for example, they have a requirement of minimal version of\ncompiler that you need for the build. Though gcc's requirement is not so needy\nas the Rust one.

    \n

    One of the other negatives is the introduction of bugs. If you're pushing\nchanges, somewhat mindlessly, at such a fast pace, it is inevitable to introduce\na bunch bugs in the process. Checking the GitHub issue tracker with

    \n
    is:issue is:open label:C-bug label:T-compiler
    \n

    yields 2,224 open issues at the time of writing this post.

    \n

    RFCs

    \n

    You can find a lot of RFCs for the Rust. Some of them are more questionable\nthan the others. Fun thing is that a lot of them make it to the nightly builds,\nso they can be tested and polished off. Even the questionable ones… I'll leave\nfew examples for a better understanding.

    \n

    One of such features is the do yeet expression:

    \n
    #![feature(yeet_expr)]

    fn foo() -> Result<String, i32> {
    do yeet 4;
    }
    assert_eq!(foo(), Err(4));

    fn bar() -> Option<String> {
    do yeet;
    }
    assert_eq!(bar(), None);
    \n

    It allows you to “yeet” the errors out of the functions that return Result or\nOption.

    \n

    One of the more recent ones is\nthe ability to include Cargo manifests into the sources, so you can do something\nlike:

    \n
    #!/usr/bin/env cargo
    ---
    [dependencies]
    clap = { version = \"4.2\", features = [\"derive\"] }
    ---

    use clap::Parser;

    #[derive(Parser, Debug)]
    #[clap(version)]
    struct Args {
    #[clap(short, long, help = \"Path to config\")]
    config: Option<std::path::PathBuf>,
    }

    fn main() {
    let args = Args::parse();
    println!(\"{:?}\", args);
    }
    \n

    I would say you can get almost anything into the language…

    \n

    Community and hype train

    \n

    Rust community is a rather unique thing. A lot of people will hate me for this,\nbut I can't help, but to compare them to militant vegans. I'll go through some\nof the things related to it, so I can support my opinion at least.

    \n

    Rust is the best language. It is not. There is no best language, each has its\nown positives and negatives, you need to choose the language that's the most\nsuitable for your use case. There are areas where Rust excels, though I have\nto admit it's very close to being a universal hammer regardless of how suitable\nit is. There is a very steep learning curve to it, beginnings in Rust are very\npainful.

    \n

    Rewrite everything in Rust. Just no. There are multiple feedbacks on doing\nrewrites, it is very common to fix N bugs with a rewrite while introducing\nN + 1 other bugs in the process. It doesn't solve anything unless there are\nsome strong reasons to go with it. Majority of such suggested rewrites don't\nhave those reasons though.

    \n

    Language ‹x› is bad, though in Rust… Cherry-picking one specific pain point of\none language and reflecting how it is better in other language can go both ways.\nFor example it is rather easy to pick the limitations imposed by Rust compiler\nand show how it's possible in other languages 🤷‍♂️

    \n

    I don't mind any of those opinions, you're free to have them, as long as you\ndon't rub them in my face which is not the usual case… This experience makes it\njust worse for me, part of this post may be also influenced by this fact.

    \n

    Rust in Linux

    \n
    caution

    As someone who has seen the way Linux kernel is built in the RHEL ecosystem, how\ncomplex the whole thing is and how much resources you need to proceed, I have\nvery strong opinions on this topic.

    \n

    It took years of work to even “incorporate” Rust into the Linux codebase, just\nto get the “Hello World!”. I don't have anything against the idea of writing\ndrivers in the Rust, I bet it can catch a lot of common mistakes, but still\nintroducing Rust to the kernel is another step to enlarge the monster.

    \n

    I have to admit though that the Apple GPU driver for Linux written in Rust is\nquite impressive. Apart from that there are not so many benefits, yet…

    \n

    Packaging

    \n

    I'll divide the packaging into the packaging of the language itself and the\nprograms written in Rust.

    \n

    Let's start with the cargo itself though. Package managers of the languages\nusually get a lot of hate (you can take npm or pip as examples3). If\nyou've ever tried out Rust, I bet you already know where I'm going with this.\nYes, I mean the compilation times, or even Cargo downloading whole index of\ncrates just so you can update that one dependency (and 3 millions of indirect\ndeps). When I was doing AoC ‘22 in Rust, I've set up sccache right away on the\nfirst day.

    \n

    Let's move to the packaging of the Rust itself, it's tedious. Rust has a very\nfast development cycle and doesn't even try to make the builds backward\ncompatible. If there is a new release of Rust, there is a very high chance that\nyou cannot build that release with anything other than the latest Rust\nrelease. If you have ever touched the packaging, you know that this is something\nthat can cause a lot of problems, cause you need the second-to-latest version to\ncompile the latest version, don't forget that this applies inductively… People\nrunning Gentoo could tell you a lot about this.

    \n
    info

    Compiling the compilers takes usually more time than compiling the kernel\nitself…

    \n

    I cannot speak about packaging of Rust programs in other than RHEL-based\ndistros, though I can speak about RHEL ecosystem. Fedora packaging guidelines\nspecify that you need to build each and every dependency of the program\nseparately. I wanted to try out AlmaLinux and install Alacritty there and I\nfailed miserably. The solution that worked, consisted of ignoring the packaging\nguidelines, running cargo build and consuming the binaries afterwards.\nDependencies of the Rust programs are of a similar nature as JS dependencies.

    \n
    \n

    I'm tipping my fedora1 in the general direction of the maintainers of Rust\npackages in RHEL ecosystem. I wouldn't be able to do this without losing my\nsanity.

    \n
    \n

    Likes

    \n

    If you've come all the way here and you're a Rustacean, I believe I've managed\nto get your blood boiling, so it's time to finish this off by stuff I like about\nRust. I doubt I will be able to cover everything, but I can try at least. You\nhave to admit it's much easier to remember the bad stuff as opposed to the good.\n😉

    \n

    Workflow and toolchain

    \n

    I prefered using Rust for the Advent of Code and Codeforces as it provides\na rather easy way to test the solutions before running them with the challenge\ninput (or test runner). I can give an example from the Advent of Code:

    \n
    use aoc_2023::*;

    type Output1 = i32;
    type Output2 = Output1;

    struct DayXX {}
    impl Solution<Output1, Output2> for DayXX {
    fn new<P: AsRef<Path>>(pathname: P) -> Self {
    let lines: Vec<String> = file_to_lines(pathname);

    todo!()
    }

    fn part_1(&mut self) -> Output1 {
    todo!()
    }

    fn part_2(&mut self) -> Output2 {
    todo!()
    }
    }

    fn main() -> Result<()> {
    DayXX::main()
    }

    test_sample!(day_XX, DayXX, 42, 69);
    \n

    This was the skeleton I've used and the macro at the end is my own creation that\nexpands to:

    \n
    #[cfg(test)]
    mod day_XX {
    use super::*;

    #[test]
    fn part_1() {
    let path = DayXX::get_sample(1);
    let mut day = DayXX::new(path);
    assert_eq!(day.part_1(), 42);
    }

    #[test]
    fn part_2() {
    let path = DayXX::get_sample(2);
    let mut day = DayXX::new(path);
    assert_eq!(day.part_2(), 69);
    }
    }
    \n

    When you're solving the problem, all you need to do is switch between\ncargo test and cargo run to check the answer to either sample or the\nchallenge input itself.

    \n

    Introduce bacon and it gets even better. Bacon is a CLI tool that wraps around\nthe cargo and allows you to check, run, lint or run tests on each file save.\nIt's a very pleasant thing for a so-called compiler-assisted development.

    \n

    Speaking of linting from within the bacon, you cannot leave out the clippy.\nNot only it can whip your ass because of errors, but it can also produce a lot\nof helpful suggestions, for example passing slices by borrow instead of\nborrowing the Vec itself when you don't need it.

    \n

    Standard library

    \n

    There's a lot included in the standard library. It almost feels like you\nhave all you need4. I like placeholders (like todo!(), unreachable!(),\nunimplemented!()) to the extent of\nimplementing them as exceptions in C++.

    \n

    You can find almost anything. Though you can also hit some very weird issues\nwith some of the nuances of the type system.

    \n

    unsafe

    \n

    This might be something that people like to avoid as much as possible. However I\nthink that forming a habit of commenting posibly unsafe operations in any\nlanguage is a good habit, as I've mentioned above. You should be able to argue\nwhy you can do something safely, even if the compiler is not kicking your ass\nbecause of it.

    \n

    Excerpt of such comment from work:

    \n
    # SAFETY: Taking first package instead of specific package should be
    # safe, since we have put a requirement on »one« ‹upstream_project_url›
    # per Packit config, i.e. even if we're dealing with a monorepo, there
    # is only »one« upstream. If there is one upstream, there is only one
    # set of GPG keys that can be allowed.
    return self.downstream_config.packages[
    self.downstream_config._first_package
    ].allowed_gpg_keys
    \n

    Traits

    \n

    One of the other things I like are the traits. They are more restrictive than\ntemplates or concepts in C++, but they're doing their job pretty good. If you\nare building library and require multiple traits to be satisfied it means a lot\nof copy-paste, but that's soon to be fixed by the trait aliases.

    \n
    Comparing to other languages

    On Wikipedia I've seen trait being defined as a more restrictive type class as\nyou may know it from the Haskell for example. C++ isn't behind either with its\nconstraints and concepts. I would say that we can order them in the following\norder based on the complexity they can express:

    Rust's trait < Haskell's type class < C++'s concept
    \n

    You can also hit some issues, like me when trying to support conversions between\nunderlying numeric types of a 2D vectors or support for using an operator from\nboth sides (I couldn't get c * u to work in the same way as u * c because\nthe first one requires you to implement the trait of a built-in type).

    \n
    Implementation

    Implementing traits lies in

    impl SomeTrait for SomeStruct {
    // implementation goes here
    }

    One of the things I would love to see is being able to define the helper\nfunctions within the same block. As of now, the only things allowed are the ones\nthat are required by the trait, which in the end results in a randomly lying\nfunctions around (or in a implementation of the structure itself). I don't like\nthis mess at all…

    \n

    Influence of functional paradigm

    \n

    You can see a big influence of the functional paradigm. Not only in iterators,\nbut also in the other parts of the language. For example I prefer Option<T> or\nResult<T, E> to nulls and exceptions. Pattern matching together with\ncompiler both enforces handling of the errors and rather user-friendly way of\ndoing it.

    \n

    Not to mention .and_then() and such. However spending most of the time with\nthe AoC you get pretty annoyed of the repetitive .unwrap() during parsing,\nsince you are guaranteed correct input.

    \n

    Macros

    \n

    Macros are a very strong pro of the Rust. And no, we're not going to talk about\nthe procedural macros…

    \n

    As I've shown above I've managed to “tame” a lot of copy-paste in the tests for\nthe AoC by utilizing a macro that generated a very basic template for the tests.

    \n

    As I have mentioned the traits above, I cannot forget to give props to derive\nmacro that allows you to “deduce” the default implementation. It is very helpful\nfor a tedious tasks like implementing Debug (for printing out the structures)\nor comparisons, though with the comparisons you need to be careful about the\ndefault implementation, it has already bitten me once or twice.

    \n

    Summary

    \n

    Overall there are many things about the Rust I like and would love to see them\nimplemented in other languages. However there are also many things I don't like.\nNothing is exclusively black and white.

    \n

    Footnotes

    \n
      \n
    1. \n

      pun intended 2

      \n
    2. \n
    3. \n

      It's not that easy with the Rust compiler, but OK…

      \n
    4. \n
    5. \n

      not to even mention multiple different packaging standards Python has, which\nis borderline https://xkcd.com/927/

      \n
    6. \n
    7. \n

      unlike Python where there's whole universe in the language itself, yet there\nare essential things not present…

      \n
    8. \n
    \n
    ", + "url": "https://blog.mfocko.xyz/blog/2024/01/28/rust-opinion", + "title": "Mixed feelings on Rust", + "summary": "Discussing my mixed feelings about the Rust language.\n", + "date_modified": "2024-01-28T00:00:00.000Z", + "author": { + "name": "Matej Focko", + "url": "https://gitlab.com/mfocko" + }, + "tags": [ + "rust", + "memory safety", + "cult", + "hype" + ] + }, { "id": "https://blog.mfocko.xyz/blog/2023/08/02/copr", "content_html": "

    When you decide to run Fedora on your VPS, you might get screwed over by using\nrandom repositories…

    \n

    When I “reserved” my VPS1 back in June '20, I slapped Fedora on it without\nthinking. I bet 99% of people would say that I'm crazy for doing such thing2,\nBUT I've been using Fedora on my PCs for some time already and it felt very\nstable and natural to just use, even for VPS.

    \n

    One of the first things I've done was setting up a mail server. You may guess\nwhat's the fun part about having a mail server… Yes, it's all the spam you\nreceive and only then you realize how much “crap” gets filtered on free mail\nservices. To battle this problem I chose to use\nrspamd that had CentOS support, but someone\nhad a Copr repository that I used to\ninstall it.

    \n

    How does Copr repositories work?

    \n

    If you have ever used Ubuntu, you might be familiar with the concept since it is\nvery close to PPAs.

    \n

    tl;dr of the whole process consists of

    \n
      \n
    1. enabling the Copr repository, and
    2. \n
    3. installing the desired package.
    4. \n
    \n

    So in shell you would do

    \n
    # dnf copr enable ‹copr-repository›
    # dnf install ‹package-from-the-repository›
    \n

    And… that's it! Nothing else needed! Simple, right? And literally same process\nas you would do for the PPA.

    \n
    AUR

    On the other hand, if you are familiar with the archLinux, you definitely know\nAUR and what it can do for you. Copr repository is pretty similar, but the\npackages are prebuilt in Copr and Copr repositories can carry the required\ndependencies for said packages, which simplifies the distribution, and can even\nhelp with installing singular packages (when you just need the dependency, not\neverything).

    \n

    My issue

    \n

    Now you might wonder how would I use it on my VPS. It's rather simple, once in\n6 months a new Fedora release comes out. And you need to upgrade to newer\nrelease… You don't need to do it right away and for such setup it probably isn't\neven recommended.

    \n
    tip

    Fedora releases are supported for a year, i.e. they live 6 months till the next\nrelease and then another 6 months till another release.

    Some people prefer to run one version “behind”. If you ever decide to run it on\nyour home server or in a similar setup, it might be a pretty good idea to\nfollow. I'm using the “latest greatest”, cause why not 😄

    One way or another, you still need to bump the release every six months, unless\nyou'd bump 2 releases at once every year, which would be a decision, since, at\nleast I, cannot see any benefits in it… You don't go for “stability”, cause once\na year you switch to the latest release and then, before you bump, you use one\nyear old software, so you're not even using the latest.

    \n

    Fast-forward 2 years in the future, new Fedora release came out (October '22)\nand I was doing an upgrade. Dependencies of the rspamd have been updated and\nrspamd builds in Copr have failed and no one fixed it. Cool, so now I can\nupgrade, but can either ignore the dependencies or uninstall the rspamd…

    \n

    How can Copr help?

    \n

    I have managed to find\nspecfile for the\nrspamd package that they use for CentOS. There were some files apart from the\nspecfile, so I had to make an SRPM locally and then… I just uploaded the SRPM\nto the Copr to\nbuild\nan RPM.

    \n

    I have switched the previous Copr repository for rspamd with my own and happily\nproceeded with the upgrade.

    \n

    Conclusion

    \n

    Copr is heavily used for testing builds on the upstream with\nPackit. However, as you can see, it is possible to use it\nvery well for packaging your own stuff and avoiding issues (such as the one\nI have described above), if need be.

    \n

    Footnotes

    \n
      \n
    1. \n

      vpsFree.cz

      \n
    2. \n
    3. \n

      Even though I've been running archLinux on some Raspberry Pi's and also\non one of my “home servers”, before getting the VPS. You could say I like\nto live on the edge…

      \n
    4. \n
    \n
    ", @@ -25,7 +43,7 @@ }, { "id": "https://blog.mfocko.xyz/blog/aoc-2022/4th-week", - "content_html": "

    Let's go through the fourth week of Advent of Code in Rust.

    \n

    Day 22: Monkey Map

    \n
    tl;dr

    Simulating a movement on a 2D map with given instructions. Map becomes a cube in\nthe 2nd part…

    \n
    Rant

    This was the most obnoxious problem of this year… and a lot of Rust issues have\nbeen hit.

    \n

    Solution

    \n

    It seems like a very simple problem to solve, but with very obnoxious changes in\nthe 2nd part and also it's relatively hard to decompose »properly«.

    \n

    Column iterator

    \n

    In the first part of the problem it was needed to know the boundaries of each\nrow and column, since I stored them in Vec<Vec<char>> and padded with spaces\nto ensure I have a rectangular 2D “array”. However when you wanted to go through\neach row and column to determine the boundaries, it was very easy to do for the\nrows (cause each row is a Vec element), but not for the columns, since they\nspan multiple rows.

    \n

    For this use case I have implemented my own column iterator:

    \n
    pub struct ColumnIterator<'a, T> {
    map: &'a [Vec<T>],
    column: usize,

    i: usize,
    }

    impl<'a, T> ColumnIterator<'a, T> {
    pub fn new(map: &'a [Vec<T>], column: usize) -> ColumnIterator<'a, T> {
    Self { map, column, i: 0 }
    }
    }

    impl<'a, T> Iterator for ColumnIterator<'a, T> {
    type Item = &'a T;

    fn next(&mut self) -> Option<Self::Item> {
    if self.i >= self.map.len() {
    return None;
    }

    self.i += 1;
    Some(&self.map[self.i - 1][self.column])
    }
    }
    \n

    Given this piece of an iterator, it is very easy to factor out the common\nfunctionality between the rows and columns into:

    \n
    let mut find_boundaries = |constructor: fn(usize) -> Orientation,
    iterator: &mut dyn Iterator<Item = &char>,
    upper_bound,
    i| {
    let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == ' ');
    let start = first_non_empty.next().unwrap().0 as isize;

    let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != ' ');
    let end = last_non_empty.next().unwrap_or((upper_bound, &'_')).0 as isize;

    boundaries.insert(constructor(i), start..end);
    };
    \n

    And then use it as such:

    \n
    // construct all horizontal boundaries
    (0..map.len()).for_each(|row| {
    find_boundaries(
    Orientation::horizontal,
    &mut map[row].iter(),
    map[row].len(),
    row,
    );
    });

    // construct all vertical boundaries
    (0..map[0].len()).for_each(|col| {
    find_boundaries(
    Orientation::vertical,
    &mut ColumnIterator::new(&map, col),
    map.len(),
    col,
    );
    });
    \n

    Walking around the map

    \n

    Once the 2nd part got introduced, you start to think about a way how not to\ncopy-paste a lot of stuff (I haven't avoided it anyways…). In this problem, I've\nchosen to introduce a trait (i.e. interface) for 2D and 3D walker.

    \n
    trait Wrap: Clone {
    type State;

    // simulation
    fn is_blocked(&self) -> bool;
    fn step(&mut self, steps: isize);
    fn turn_left(&mut self);
    fn turn_right(&mut self);

    // movement
    fn next(&self) -> (Self::State, Direction);

    // final answer
    fn answer(&self) -> Output;
    }
    \n

    Each walker maintains its own state and also provides the functions that are\nused during the simulation. The “promised” methods are separated into:

    \n
      \n
    • simulation-related: that are used during the simulation from the .fold()
    • \n
    • movement-related: just a one method that holds most of the logic differences\nbetween 2D and 3D
    • \n
    • final answer: which extracts the proof of solution from the\nimplementation-specific walker
    • \n
    \n

    Both 2D and 3D versions borrow the original input and therefore you must\nannotate the lifetime of it:

    \n
    struct Wrap2D<'a> {
    input: &'a Input,
    position: Position,
    direction: Direction,
    }
    impl<'a> Wrap2D<'a> {
    fn new(input: &'a Input) -> Wrap2D<'a> {
    // …
    \n

    Problems

    \n

    I have used a lot of closures for this problem and once I introduced a parameter\nthat was of unknown type (apart from the fact it implements a specific trait), I\ngot suggested a “fix” for the compilation error that resulted in something that\nwas not possible to parse, cause it, more than likely, violated the grammar.

    \n

    In a similar fashion, I have been suggested changes that led to a code that\ndidn't make sense by just looking at it (there was no need to try the changes),\nfor example one suggested change in the closure parameter caused disapperance of\nthe parameter name. 😄

    \n

    Clippy

    \n

    I have to admit that Clippy was rather helpful here, I'll include two examples\nof rather smart suggestions.

    \n

    When writing the parsing for this problem, the first thing I have spotted on the\nchar was the .is_digit() function that takes a radix as a parameter. Clippy\nnoticed that I use radix = 10 and suggested switching to .is_ascii_digit()\nthat does exactly the same thing:

    \n
    -                .take_while(|c| c.is_digit(10))
    + .take_while(|c| c.is_ascii_digit())
    \n

    Another useful suggestion appeared when working with the iterators and I wanted\nto get the nnn-th element from it. You know the .skip(), you know the\n.next(), just “slap” them together and we're done for 😁 Well, I got\nsuggested to use .nth() that does exactly the combination of the two mentioned\nmethods on iterators:

    \n
    -            match it.clone().skip(skip).next().unwrap() {
    + match it.clone().nth(skip).unwrap() {
    \n

    Day 23: Unstable Diffusion

    \n
    tl;dr

    Simulating movement of elves around with a set of specific rules.

    \n

    Solution

    \n

    There's not much to mention since it's just a cellular automaton simulation\n(even though the AoC rules for cellular automatons usually get out of hand\n😉).

    \n

    Although I had a need to determine boundaries of the elves' positions and ended\nup with a nasty DRY violation. Knowing that you you're looking for maximum and\nminimum that are, of course, exactly the same except for initial values and\ncomparators, it looks like a rather simple fix, but typing in Rust is something\nelse, right? In the end I settled for a function that computes both boundaries\nwithout any duplication while using a closure:

    \n
    fn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {
    let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {
    positions
    .iter()
    .fold(Vector2D::new(init, init), |acc, elf| {
    Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))
    })
    };

    (f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))
    }
    \n

    This function returns a pair of 2D vectors that represent opposite points of the\nbounding rectangle of all elves.

    \n

    You might ask why would we need a closure and the answer is that positions\ncannot be captured from within the nested function, only via closure. One more\nfun fact on top of that is the type of the comparator

    \n
    &dyn Fn(isize, isize) -> isize
    \n

    Once we remove the dyn keyword, compiler yells at us and also includes a way\nhow to get a more thorough explanation of the error by running

    \n

    $ rustc --explain E0782

    \n

    which shows us

    \n

    Trait objects must include the dyn keyword.

    \n

    Erroneous code example:

    \n
    trait Foo {}
    fn test(arg: Box<Foo>) {} // error!
    \n

    Trait objects are a way to call methods on types that are not known until\nruntime but conform to some trait.

    \n

    Trait objects should be formed with Box<dyn Foo>, but in the code above\ndyn is left off.

    \n

    This makes it harder to see that arg is a trait object and not a\nsimply a heap allocated type called Foo.

    \n

    To fix this issue, add dyn before the trait name.

    \n
    trait Foo {}
    fn test(arg: Box<dyn Foo>) {} // ok!
    \n

    This used to be allowed before edition 2021, but is now an error.

    \n
    Rant

    Not all of the explanations are helpful though, in some cases they might be even\nmore confusing than helpful, since they address very simple use cases.

    As you can see, even in this case there are two sides to the explanations:

      \n
    • it explains why you need to use dyn, but
    • \n
    • it still mentions that trait objects need to be heap-allocated via Box<T>\nthat, as you can see in my snippet, does not apply here 😄 IMO it's\ncaused by the fact that we are borrowing it and therefore we don't need to\ncare about the size or whereabouts of it.
    • \n
    \n
    C++ parallel

    If you dive into the explanation above, you can notice that the Box<dyn Trait>\npattern is very helpful for using types that are not known during compile-time.\nYou would use a very similar approach in C++ when parsing some data structure\nfrom input (let's say JSON for example).

    On the other hand, in this case, it doesn't really make much sense, cause you\ncan clearly see that the types are known during the compile-time, which in\nC++ could be easily resolved by templating the helper function.

    \n

    Day 24: Blizzard Basin

    \n
    tl;dr

    Navigating your way through a basin with series of blizzards that move around\nyou as you move.

    \n
    caution

    It's second to last day and I went “bonkers” on the Rust 😄 Proceed to\nread Solution part on your own risk.

    \n

    Solution

    \n

    You are given a map with blizzards all over the place and you're supposed to\nfind the minimum time it requires you to walk through the basin without getting\nin any of the blizzards.

    \n

    Breakdown

    \n

    Relatively simple, yet a bit annoying, approach can be taken. It's technically\na shortest-path algorithm implementation with some relaxation restrictions and\nbeing able to stay on one position for some time, so each vertex of the graph\nis determined by the position on the map and the timestamp. I have chosen to\nuse Vector3D<usize>, since x and y attributes can be used for the position\nand, well, let's use z for a timestamp, cause why not, right? 😉

    \n

    Evaluating the blizzards

    \n
    caution

    I think that this is the most perverted abuse of the traits in the whole 4 weeks\nof AoC in Rust…

    \n

    The blizzards move along their respective directions in time and loop around in\ntheir respective row/column. Each vertex holds position and time, so we can\njust index the basin with the vertex itself, right? Yes, we can 😈

    \n
    Fun fact

    While writing this part, I've recognized unnecessary verbosity in the code and\ncleaned it up a bit. The changed version is shown here and the original was just\nmore verbose.

    \n

    I'll skip the boring parts of checking bounds and entry/exit of the basin 😉\nWe can easily calculate positions of the blizzards using a modular arithmetics:

    \n
    impl Index<Position> for Basin {
    type Output = char;

    fn index(&self, index: Position) -> &Self::Output {
    // ‹skipped boring parts›

    // We need to account for the loops of the blizzards
    let width = self.cols - 2;
    let height = self.rows - 2;

    let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;
    [
    (
    index.y() as usize,
    blizzard_origin(width, -1, index.z(), index.x()),
    '>',
    ),
    (
    index.y() as usize,
    blizzard_origin(width, 1, index.z(), index.x()),
    '<',
    ),
    (
    blizzard_origin(height, -1, index.z(), index.y()),
    index.x() as usize,
    'v',
    ),
    (
    blizzard_origin(height, 1, index.z(), index.y()),
    index.x() as usize,
    '^',
    ),
    ]
    .iter()
    .find_map(|&(y, x, direction)| {
    if self.map[y][x] == direction {
    Some(&self.map[y][x])
    } else {
    None
    }
    })
    .unwrap_or(&'.')
    }
    }
    \n

    As you can see, there is an expression for calculating the original position and\nit's used multiple times, so why not take it out to a lambda, right? 😉

    \n

    I couldn't get the rustfmt to format the for-loop nicely, so I've just\ndecided to go with iterating over an elements of a slice. I have used, once\nagain, a combination of two functions (find_map in this case) to do 2 things\nat once and at the end, if we haven't found any blizzard, we just return the\nempty space.

    \n

    I think it's a very nice (and naughty) way how to use the Index trait, don't\nyou think?

    \n

    Shortest-path algorithm

    \n

    For the shortest path you can choose and adjust any of the common shortest-path\nalgorithms, in my case, I have decided to use A* instead of Dijkstra's\nalgorithm, since it better reflects the cost function.

    \n
    Comparison of costs

    With the Dijkstra's algorithm I would proceed with the time attribute used as\na priority for the queue.

    Whereas with the A*, I have chosen to use both time and Manhattan distance\nthat promotes vertices closer to the exit and with a minimum time taken.

    \n

    Cost function is, of course, a closure 😉

    \n
    let cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());
    \n

    And also for checking the possible moves from the current vertex, I have\nimplemented, yet another, closure that yields an iterator with the next moves:

    \n
    let next_positions = |p| {
    [(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]
    .iter()
    .filter_map(move |&(x, y, t)| {
    let next_p = p + Vector3D::new(x, y, t);

    if basin[next_p] == '.' {
    Some(next_p)
    } else {
    None
    }
    })
    };
    \n

    Min-heap

    \n

    In this case I had a need to use the priority queue taking the elements with the\nlowest cost as the prioritized ones. Rust only offers you the BinaryHeap and\nthat is a max-heap. One of the ways how to achieve a min-heap is to put the\nelements in wrapped in a Reverse (as is even showed in the linked docs of\nthe BinaryHeap). However the wrapping affects the type of the heap and also\npopping the most prioritized elements yields values wrapped in the Reverse.

    \n

    For this purpose I have just taken the max-heap and wrapped it as a whole in a\nseparate structure providing just the desired methods:

    \n
    use std::cmp::{Ord, Reverse};
    use std::collections::BinaryHeap;

    pub struct MinHeap<T> {
    heap: BinaryHeap<Reverse<T>>,
    }

    impl<T: Ord> MinHeap<T> {
    pub fn new() -> MinHeap<T> {
    MinHeap {
    heap: BinaryHeap::new(),
    }
    }

    pub fn push(&mut self, item: T) {
    self.heap.push(Reverse(item))
    }

    pub fn pop(&mut self) -> Option<T> {
    self.heap.pop().map(|Reverse(x)| x)
    }
    }

    impl<T: Ord> Default for MinHeap<T> {
    fn default() -> Self {
    Self::new()
    }
    }
    \n

    Rest is just the algorithm implementation which is not that interesting.

    \n

    Day 25: Full of Hot Air

    \n
    tl;dr

    Playing around with a numbers in a special base.

    \n

    Getting flashbacks to the IB111 Foundations of Programming… Very nice “problem”\nwith a rather easy solution, as the last day always seems to be.

    \n

    Solution

    \n

    Implementing 2 functions, converting from the SNAFU base and back to the SNAFU\nbase representation. Let's do a bit more though! I have implemented two functions:

    \n
      \n
    • from_snafu
    • \n
    • to_snafu
    • \n
    \n

    Now it is apparent that all I do is number to string and string to number. Hmm…\nthat sounds familiar, doesn't it? Let's introduce a structure for the SNAFU numbers\nand implement the traits that we need.

    \n

    Let's start with a structure:

    \n
    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
    struct SNAFU {
    value: i64,
    }
    \n

    Converting from &str

    \n

    We will start by implementing the FromStr trait that will help us parse our input.\nThis is rather simple, I can just take the from_snafu function, copy-paste it\ninto the from_str method and the number I get will be wrapped in Result and\nSNAFU structure.

    \n

    Converting to String

    \n

    This is more fun. In some cases you need to implement only one trait and others\nare automatically implemented using that one trait. In our case, if you look in\nthe documentation, you can see that ToString trait is automatically implemented\nfor any type that implements Display trait.

    \n

    Let's implement the Display trait then. We should be able to use the to_snafu\nfunction and just take the self.value from the SNAFU structure.

    \n

    And for the convenience of tests, we can also implement a rather simple From<i64>\ntrait for the SNAFU.

    \n

    Adjusting the code

    \n

    After those changes we need to adjust the code and tests.

    \n

    Parsing of the input is very easy, before we have used the lines, now we parse\neverything:

    \n
         fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
    - file_to_lines(pathname)
    + file_to_structs(pathname)
    }
    \n

    Part 1 needs to be adjusted a bit too:

    \n
         fn part_1(input: &Input) -> Output {
    - to_snafu(input.iter().map(|s| from_snafu(s)).sum())
    + SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()
    }
    \n

    You can also see that it simplifies the meaning a bit and it is more explicit than\nthe previous versions.

    \n

    And for the tests:

    \n
         #[test]
    fn test_from() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(from_snafu(s), *n);
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
    }
    }

    #[test]
    fn test_to() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(to_snafu(*n), s.to_string());
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(SNAFU::from(n).to_string(), s.to_string());
    }
    \n

    Summary

    \n

    Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

    \n

    \"Finished

    \n

    Advent of Code

    \n

    This year was quite fun, even though most of the solutions and posts came in\nlater on (cough in '23 cough). Day 22 was the most obnoxious one… And also\nit feels like I used priority queues and tree data structures a lot 👀

    \n

    with Rust

    \n

    I must admit that a lot of compiler warnings and errors were very useful. Even\nthough I still found some instances where they didn't help at all or cause even\nworse issues than I had. Compilation times have been addressed with the caching.

    \n

    Building my first tree data structure in Rust has been a very “interesting”\njourney. Being able to write a more generic BFS algorithm that allows you to not\nduplicate code while still mantaining the desired functionality contributes to\na very readable code.

    \n

    I am definitely much more aware of the basic things that bloated Python is\nmissing, yet Rust has them…

    \n

    Using explicit types and writing down placeholder functions with todo!()\nmacros is very pleasant, since it allows you to easily navigate the type system\nduring the development when you don't even need to be sure how are you going to\nput the smaller pieces together.

    \n

    I have used a plethora of traits and also implemented some of them to either be\nidiomatic, or exploit the syntactic sugar they offer. Deriving the default trait\nimplementation is also very helpful in a lot of cases, e.g. debugging output,\ncopying, equality comparison, etc.

    \n

    I confess to touching more “cursed” parts of the Rust, such as macros to\ndeclutter the copy-paste for tests or writing my own structures that need to\ncarry a lifetime for their own fields.

    \n

    tl;dr Relatively pleasant language until you hit brick wall 😉

    \n
    \n

    See you next year! Maybe in Rust, maybe not 🙃

    ", + "content_html": "

    Let's go through the fourth week of Advent of Code in Rust.

    \n

    Day 22: Monkey Map

    \n
    tl;dr

    Simulating a movement on a 2D map with given instructions. Map becomes a cube in\nthe 2nd part…

    \n
    Rant

    This was the most obnoxious problem of this year… and a lot of Rust issues have\nbeen hit.

    \n

    Solution

    \n

    It seems like a very simple problem to solve, but with very obnoxious changes in\nthe 2nd part and also it's relatively hard to decompose »properly«.

    \n

    Column iterator

    \n

    In the first part of the problem it was needed to know the boundaries of each\nrow and column, since I stored them in Vec<Vec<char>> and padded with spaces\nto ensure I have a rectangular 2D “array”. However when you wanted to go through\neach row and column to determine the boundaries, it was very easy to do for the\nrows (cause each row is a Vec element), but not for the columns, since they\nspan multiple rows.

    \n

    For this use case I have implemented my own column iterator:

    \n
    pub struct ColumnIterator<'a, T> {
    map: &'a [Vec<T>],
    column: usize,

    i: usize,
    }

    impl<'a, T> ColumnIterator<'a, T> {
    pub fn new(map: &'a [Vec<T>], column: usize) -> ColumnIterator<'a, T> {
    Self { map, column, i: 0 }
    }
    }

    impl<'a, T> Iterator for ColumnIterator<'a, T> {
    type Item = &'a T;

    fn next(&mut self) -> Option<Self::Item> {
    if self.i >= self.map.len() {
    return None;
    }

    self.i += 1;
    Some(&self.map[self.i - 1][self.column])
    }
    }
    \n

    Given this piece of an iterator, it is very easy to factor out the common\nfunctionality between the rows and columns into:

    \n
    let mut find_boundaries = |constructor: fn(usize) -> Orientation,
    iterator: &mut dyn Iterator<Item = &char>,
    upper_bound,
    i| {
    let mut first_non_empty = iterator.enumerate().skip_while(|&(_, &c)| c == ' ');
    let start = first_non_empty.next().unwrap().0 as isize;

    let mut last_non_empty = first_non_empty.skip_while(|&(_, &c)| c != ' ');
    let end = last_non_empty.next().unwrap_or((upper_bound, &'_')).0 as isize;

    boundaries.insert(constructor(i), start..end);
    };
    \n

    And then use it as such:

    \n
    // construct all horizontal boundaries
    (0..map.len()).for_each(|row| {
    find_boundaries(
    Orientation::horizontal,
    &mut map[row].iter(),
    map[row].len(),
    row,
    );
    });

    // construct all vertical boundaries
    (0..map[0].len()).for_each(|col| {
    find_boundaries(
    Orientation::vertical,
    &mut ColumnIterator::new(&map, col),
    map.len(),
    col,
    );
    });
    \n

    Walking around the map

    \n

    Once the 2nd part got introduced, you start to think about a way how not to\ncopy-paste a lot of stuff (I haven't avoided it anyways…). In this problem, I've\nchosen to introduce a trait (i.e. interface) for 2D and 3D walker.

    \n
    trait Wrap: Clone {
    type State;

    // simulation
    fn is_blocked(&self) -> bool;
    fn step(&mut self, steps: isize);
    fn turn_left(&mut self);
    fn turn_right(&mut self);

    // movement
    fn next(&self) -> (Self::State, Direction);

    // final answer
    fn answer(&self) -> Output;
    }
    \n

    Each walker maintains its own state and also provides the functions that are\nused during the simulation. The “promised” methods are separated into:

    \n
      \n
    • simulation-related: that are used during the simulation from the .fold()
    • \n
    • movement-related: just a one method that holds most of the logic differences\nbetween 2D and 3D
    • \n
    • final answer: which extracts the proof of solution from the\nimplementation-specific walker
    • \n
    \n

    Both 2D and 3D versions borrow the original input and therefore you must\nannotate the lifetime of it:

    \n
    struct Wrap2D<'a> {
    input: &'a Input,
    position: Position,
    direction: Direction,
    }
    impl<'a> Wrap2D<'a> {
    fn new(input: &'a Input) -> Wrap2D<'a> {
    // …
    \n

    Problems

    \n

    I have used a lot of closures for this problem and once I introduced a parameter\nthat was of unknown type (apart from the fact it implements a specific trait), I\ngot suggested a “fix” for the compilation error that resulted in something that\nwas not possible to parse, cause it, more than likely, violated the grammar.

    \n

    In a similar fashion, I have been suggested changes that led to a code that\ndidn't make sense by just looking at it (there was no need to try the changes),\nfor example one suggested change in the closure parameter caused disapperance of\nthe parameter name. 😄

    \n

    Clippy

    \n

    I have to admit that Clippy was rather helpful here, I'll include two examples\nof rather smart suggestions.

    \n

    When writing the parsing for this problem, the first thing I have spotted on the\nchar was the .is_digit() function that takes a radix as a parameter. Clippy\nnoticed that I use radix = 10 and suggested switching to .is_ascii_digit()\nthat does exactly the same thing:

    \n
    -                .take_while(|c| c.is_digit(10))
    + .take_while(|c| c.is_ascii_digit())
    \n

    Another useful suggestion appeared when working with the iterators and I wanted\nto get the nnn-th element from it. You know the .skip(), you know the\n.next(), just “slap” them together and we're done for 😁 Well, I got\nsuggested to use .nth() that does exactly the combination of the two mentioned\nmethods on iterators:

    \n
    -            match it.clone().skip(skip).next().unwrap() {
    + match it.clone().nth(skip).unwrap() {
    \n

    Day 23: Unstable Diffusion

    \n
    tl;dr

    Simulating movement of elves around with a set of specific rules.

    \n

    Solution

    \n

    There's not much to mention since it's just a cellular automaton simulation\n(even though the AoC rules for cellular automatons usually get out of hand\n😉).

    \n

    Although I had a need to determine boundaries of the elves' positions and ended\nup with a nasty DRY violation. Knowing that you you're looking for maximum and\nminimum that are, of course, exactly the same except for initial values and\ncomparators, it looks like a rather simple fix, but typing in Rust is something\nelse, right? In the end I settled for a function that computes both boundaries\nwithout any duplication while using a closure:

    \n
    fn get_bounds(positions: &Input) -> (Vector2D<isize>, Vector2D<isize>) {
    let f = |init, cmp: &dyn Fn(isize, isize) -> isize| {
    positions
    .iter()
    .fold(Vector2D::new(init, init), |acc, elf| {
    Vector2D::new(cmp(acc.x(), elf.x()), cmp(acc.y(), elf.y()))
    })
    };

    (f(isize::MAX, &min::<isize>), f(isize::MIN, &max::<isize>))
    }
    \n

    This function returns a pair of 2D vectors that represent opposite points of the\nbounding rectangle of all elves.

    \n

    You might ask why would we need a closure and the answer is that positions\ncannot be captured from within the nested function, only via closure. One more\nfun fact on top of that is the type of the comparator

    \n
    &dyn Fn(isize, isize) -> isize
    \n

    Once we remove the dyn keyword, compiler yells at us and also includes a way\nhow to get a more thorough explanation of the error by running

    \n

    $ rustc --explain E0782

    \n

    which shows us

    \n

    Trait objects must include the dyn keyword.

    \n

    Erroneous code example:

    \n
    trait Foo {}
    fn test(arg: Box<Foo>) {} // error!
    \n

    Trait objects are a way to call methods on types that are not known until\nruntime but conform to some trait.

    \n

    Trait objects should be formed with Box<dyn Foo>, but in the code above\ndyn is left off.

    \n

    This makes it harder to see that arg is a trait object and not a\nsimply a heap allocated type called Foo.

    \n

    To fix this issue, add dyn before the trait name.

    \n
    trait Foo {}
    fn test(arg: Box<dyn Foo>) {} // ok!
    \n

    This used to be allowed before edition 2021, but is now an error.

    \n
    Rant

    Not all of the explanations are helpful though, in some cases they might be even\nmore confusing than helpful, since they address very simple use cases.

    As you can see, even in this case there are two sides to the explanations:

      \n
    • it explains why you need to use dyn, but
    • \n
    • it still mentions that trait objects need to be heap-allocated via Box<T>\nthat, as you can see in my snippet, does not apply here 😄 IMO it's\ncaused by the fact that we are borrowing it and therefore we don't need to\ncare about the size or whereabouts of it.
    • \n
    \n
    C++ parallel

    If you dive into the explanation above, you can notice that the Box<dyn Trait>\npattern is very helpful for using types that are not known during compile-time.\nYou would use a very similar approach in C++ when parsing some data structure\nfrom input (let's say JSON for example).

    On the other hand, in this case, it doesn't really make much sense, cause you\ncan clearly see that the types are known during the compile-time, which in\nC++ could be easily resolved by templating the helper function.

    \n

    Day 24: Blizzard Basin

    \n
    tl;dr

    Navigating your way through a basin with series of blizzards that move around\nyou as you move.

    \n
    caution

    It's second to last day and I went “bonkers” on the Rust 😄 Proceed to\nread Solution part on your own risk.

    \n

    Solution

    \n

    You are given a map with blizzards all over the place and you're supposed to\nfind the minimum time it requires you to walk through the basin without getting\nin any of the blizzards.

    \n

    Breakdown

    \n

    Relatively simple, yet a bit annoying, approach can be taken. It's technically\na shortest-path algorithm implementation with some relaxation restrictions and\nbeing able to stay on one position for some time, so each vertex of the graph\nis determined by the position on the map and the timestamp. I have chosen to\nuse Vector3D<usize>, since x and y attributes can be used for the position\nand, well, let's use z for a timestamp, cause why not, right? 😉

    \n

    Evaluating the blizzards

    \n
    caution

    I think that this is the most perverted abuse of the traits in the whole 4 weeks\nof AoC in Rust…

    \n

    The blizzards move along their respective directions in time and loop around in\ntheir respective row/column. Each vertex holds position and time, so we can\njust index the basin with the vertex itself, right? Yes, we can 😈

    \n
    Fun fact

    While writing this part, I've recognized unnecessary verbosity in the code and\ncleaned it up a bit. The changed version is shown here and the original was just\nmore verbose.

    \n

    I'll skip the boring parts of checking bounds and entry/exit of the basin 😉\nWe can easily calculate positions of the blizzards using a modular arithmetics:

    \n
    impl Index<Position> for Basin {
    type Output = char;

    fn index(&self, index: Position) -> &Self::Output {
    // ‹skipped boring parts›

    // We need to account for the loops of the blizzards
    let width = self.cols - 2;
    let height = self.rows - 2;

    let blizzard_origin = |size, d, t, i| ((i - 1 + size + d * (t % size)) % size + 1) as usize;
    [
    (
    index.y() as usize,
    blizzard_origin(width, -1, index.z(), index.x()),
    '>',
    ),
    (
    index.y() as usize,
    blizzard_origin(width, 1, index.z(), index.x()),
    '<',
    ),
    (
    blizzard_origin(height, -1, index.z(), index.y()),
    index.x() as usize,
    'v',
    ),
    (
    blizzard_origin(height, 1, index.z(), index.y()),
    index.x() as usize,
    '^',
    ),
    ]
    .iter()
    .find_map(|&(y, x, direction)| {
    if self.map[y][x] == direction {
    Some(&self.map[y][x])
    } else {
    None
    }
    })
    .unwrap_or(&'.')
    }
    }
    \n

    As you can see, there is an expression for calculating the original position and\nit's used multiple times, so why not take it out to a lambda, right? 😉

    \n

    I couldn't get the rustfmt to format the for-loop nicely, so I've just\ndecided to go with iterating over an elements of a slice. I have used, once\nagain, a combination of two functions (find_map in this case) to do 2 things\nat once and at the end, if we haven't found any blizzard, we just return the\nempty space.

    \n

    I think it's a very nice (and naughty) way how to use the Index trait, don't\nyou think?

    \n

    Shortest-path algorithm

    \n

    For the shortest path you can choose and adjust any of the common shortest-path\nalgorithms, in my case, I have decided to use A* instead of Dijkstra's\nalgorithm, since it better reflects the cost function.

    \n
    Comparison of costs

    With the Dijkstra's algorithm I would proceed with the time attribute used as\na priority for the queue.

    Whereas with the A*, I have chosen to use both time and Manhattan distance\nthat promotes vertices closer to the exit and with a minimum time taken.

    \n

    Cost function is, of course, a closure 😉

    \n
    let cost = |p: Position| p.z() as usize + exit.y().abs_diff(p.y()) + exit.x().abs_diff(p.x());
    \n

    And also for checking the possible moves from the current vertex, I have\nimplemented, yet another, closure that yields an iterator with the next moves:

    \n
    let next_positions = |p| {
    [(0, 0, 1), (0, -1, 1), (0, 1, 1), (-1, 0, 1), (1, 0, 1)]
    .iter()
    .filter_map(move |&(x, y, t)| {
    let next_p = p + Vector3D::new(x, y, t);

    if basin[next_p] == '.' {
    Some(next_p)
    } else {
    None
    }
    })
    };
    \n

    Min-heap

    \n

    In this case I had a need to use the priority queue taking the elements with the\nlowest cost as the prioritized ones. Rust only offers you the BinaryHeap and\nthat is a max-heap. One of the ways how to achieve a min-heap is to put the\nelements in wrapped in a Reverse (as is even showed in the linked docs of\nthe BinaryHeap). However the wrapping affects the type of the heap and also\npopping the most prioritized elements yields values wrapped in the Reverse.

    \n

    For this purpose I have just taken the max-heap and wrapped it as a whole in a\nseparate structure providing just the desired methods:

    \n
    use std::cmp::{Ord, Reverse};
    use std::collections::BinaryHeap;

    pub struct MinHeap<T> {
    heap: BinaryHeap<Reverse<T>>,
    }

    impl<T: Ord> MinHeap<T> {
    pub fn new() -> MinHeap<T> {
    MinHeap {
    heap: BinaryHeap::new(),
    }
    }

    pub fn push(&mut self, item: T) {
    self.heap.push(Reverse(item))
    }

    pub fn pop(&mut self) -> Option<T> {
    self.heap.pop().map(|Reverse(x)| x)
    }
    }

    impl<T: Ord> Default for MinHeap<T> {
    fn default() -> Self {
    Self::new()
    }
    }
    \n

    Rest is just the algorithm implementation which is not that interesting.

    \n

    Day 25: Full of Hot Air

    \n
    tl;dr

    Playing around with a numbers in a special base.

    \n

    Getting flashbacks to the IB111 Foundations of Programming… Very nice “problem”\nwith a rather easy solution, as the last day always seems to be.

    \n

    Solution

    \n

    Implementing 2 functions, converting from the SNAFU base and back to the SNAFU\nbase representation. Let's do a bit more though! I have implemented two functions:

    \n
      \n
    • from_snafu
    • \n
    • to_snafu
    • \n
    \n

    Now it is apparent that all I do is number to string and string to number. Hmm…\nthat sounds familiar, doesn't it? Let's introduce a structure for the SNAFU numbers\nand implement the traits that we need.

    \n

    Let's start with a structure:

    \n
    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
    struct SNAFU {
    value: i64,
    }
    \n

    Converting from &str

    \n

    We will start by implementing the FromStr trait that will help us parse our input.\nThis is rather simple, I can just take the from_snafu function, copy-paste it\ninto the from_str method and the number I get will be wrapped in Result and\nSNAFU structure.

    \n

    Converting to String

    \n

    This is more fun. In some cases you need to implement only one trait and others\nare automatically implemented using that one trait. In our case, if you look in\nthe documentation, you can see that ToString trait is automatically implemented\nfor any type that implements Display trait.

    \n

    Let's implement the Display trait then. We should be able to use the to_snafu\nfunction and just take the self.value from the SNAFU structure.

    \n

    And for the convenience of tests, we can also implement a rather simple From<i64>\ntrait for the SNAFU.

    \n

    Adjusting the code

    \n

    After those changes we need to adjust the code and tests.

    \n

    Parsing of the input is very easy, before we have used the lines, now we parse\neverything:

    \n
         fn parse_input<P: AsRef<Path>>(pathname: P) -> Input {
    - file_to_lines(pathname)
    + file_to_structs(pathname)
    }
    \n

    Part 1 needs to be adjusted a bit too:

    \n
         fn part_1(input: &Input) -> Output {
    - to_snafu(input.iter().map(|s| from_snafu(s)).sum())
    + SNAFU::from(input.iter().map(|s| s.value).sum::<i64>()).to_string()
    }
    \n

    You can also see that it simplifies the meaning a bit and it is more explicit than\nthe previous versions.

    \n

    And for the tests:

    \n
         #[test]
    fn test_from() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(from_snafu(s), *n);
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(s.parse::<SNAFU>().unwrap().value, n);
    }
    }

    #[test]
    fn test_to() {
    - for (n, s) in EXAMPLES.iter() {
    - assert_eq!(to_snafu(*n), s.to_string());
    + for (&n, s) in EXAMPLES.iter() {
    + assert_eq!(SNAFU::from(n).to_string(), s.to_string());
    }
    \n

    Summary

    \n

    Let's wrap the whole thing up! Keeping in mind both AoC and the Rust…

    \n

    \"Finished

    \n

    Advent of Code

    \n

    This year was quite fun, even though most of the solutions and posts came in\nlater on (cough in '23 cough). Day 22 was the most obnoxious one… And also\nit feels like I used priority queues and tree data structures a lot 👀

    \n

    with Rust

    \n

    I must admit that a lot of compiler warnings and errors were very useful. Even\nthough I still found some instances where they didn't help at all or cause even\nworse issues than I had. Compilation times have been addressed with the caching.

    \n

    Building my first tree data structure in Rust has been a very “interesting”\njourney. Being able to write a more generic BFS algorithm that allows you to not\nduplicate code while still mantaining the desired functionality contributes to\na very readable code.

    \n

    I am definitely much more aware of the basic things that bloated Python is\nmissing, yet Rust has them…

    \n

    Using explicit types and writing down placeholder functions with todo!()\nmacros is very pleasant, since it allows you to easily navigate the type system\nduring the development when you don't even need to be sure how are you going to\nput the smaller pieces together.

    \n

    I have used a plethora of traits and also implemented some of them to either be\nidiomatic, or exploit the syntactic sugar they offer. Deriving the default trait\nimplementation is also very helpful in a lot of cases, e.g. debugging output,\ncopying, equality comparison, etc.

    \n

    I confess to touching more “cursed” parts of the Rust, such as macros to\ndeclutter the copy-paste for tests or writing my own structures that need to\ncarry a lifetime for their own fields.

    \n

    tl;dr Relatively pleasant language until you hit brick wall 😉

    \n
    \n

    See you next year! Maybe in Rust, maybe not 🙃

    ", "url": "https://blog.mfocko.xyz/blog/aoc-2022/4th-week", "title": "4th week of Advent of Code '22 in Rust", "summary": "Surviving fourth week in Rust.", @@ -59,7 +77,7 @@ }, { "id": "https://blog.mfocko.xyz/blog/leetcode/sort-diagonally", - "content_html": "

    Let's try to solve one of the LeetCode challenges in easy and hard mode at the\nsame time.

    \n\n

    Problem description

    \n

    A matrix diagonal is a diagonal line of cells starting from some cell in\neither the topmost row or leftmost column and going in the bottom-right direction\nuntil reaching the matrix's end. For example, the matrix diagonal starting\nfrom mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0],\nmat[3][1], and mat[4][2].

    \n

    Given an m x n matrix mat of integers, sort each matrix diagonal in ascending\norder and return the resulting matrix.

    \n

    Example

    \n

    \"Image

    \n

    Skeleton and initial adjustments

    \n

    We are given the following skeleton for the C++ and the given challenge:

    \n
    class Solution {
    public:
    vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {

    }
    };
    \n

    The task is to sort the passed matrix diagonally and then return it. First of all,\nI don't like to solve this in a web browser, so we'll need to adjust it accordingly\nfor running it locally. We'll start by including the vector header and using\nfully-qualified namespaces1 and also adding few tests:

    \n
    #include <cassert>
    #include <vector>

    using matrix = std::vector<std::vector<int>>;

    class Solution {
    public:
    matrix diagonalSort(matrix& mat)
    {
    }
    };

    static void test_case_1()
    {
    // Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
    // Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

    Solution s;
    assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },
    std::vector { 2, 2, 1, 2 },
    std::vector { 1, 1, 1, 2 } })
    == std::vector { std::vector { 1, 1, 1, 1 },
    std::vector { 1, 2, 2, 2 },
    std::vector { 1, 2, 3, 3 } }));
    }

    static void test_case_2()
    {
    // Input: mat =
    // [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
    // Output:
    // [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

    Solution s;
    assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },
    std::vector { 23, 55, 17, 45, 15, 52 },
    std::vector { 75, 31, 36, 44, 58, 8 },
    std::vector { 22, 27, 33, 25, 68, 4 },
    std::vector { 84, 28, 14, 11, 5, 50 } })
    == std::vector { std::vector { 5, 17, 4, 1, 52, 7 },
    std::vector { 11, 11, 25, 45, 8, 69 },
    std::vector { 14, 23, 25, 44, 58, 15 },
    std::vector { 22, 27, 31, 36, 50, 66 },
    std::vector { 84, 28, 75, 33, 55, 68 } }));
    }

    int main()
    {
    test_case_1();
    test_case_2();

    return 0;
    }
    \n

    We need to return the matrix, but we're given a reference to the input matrix. We\ncan easily abuse the C++ here and just switch the reference to value, this way\nthe matrix will be copied when passed to the function, we can sort the copy and\njust return it back. And we also get yelled by the compiler for the fact that the\nmethod doesn't return anything yet, so to make it “shut up” we will just return\nthe input for now:

    \n
    -    matrix diagonalSort(matrix& mat)
    + matrix diagonalSort(matrix mat)
    {
    + return mat;
    }
    \n

    Now, we get the copy and we're good to go.

    \n

    Naïve solution

    \n

    As you may know, C++ offers a plethora of functions that can be used to your\nadvantage, given that you know how to “bend” the data structures accordingly.

    \n

    What does that mean for us? Well, we have an std::sort, we can use it, right?\nLet's have a look at it:

    \n
    template< class RandomIt >
    void sort( RandomIt first, RandomIt last );
    \n

    This overload is more than we need. What does it do? It just sorts the elements\nin the range [first, last) using operator< on them. We can't sort the whole\nmatrix using this, but… we can sort just »one« diagonal without doing much work\non our end.

    \n

    What is the RandomIt type though? If we look more into the documentation, we\ncan easily find the requirements for it and also learn that it's a random access\niterator and allows swapping its values at the same time.

    \n
    Random access iterator

    What is the random access iterator though? We can find it in a documentation\nand see the following description:

    \n

    A LegacyRandomAccessIterator is a LegacyBidirectionalIterator\nthat can be moved to point to any element in constant time.

    \n

    After that we can see all the requirements for it being listed. I don't feel like\nreading them right now, so we will just use it and see where the compilation blows\nup, i.e. “compiler-assisted development2 if you will ;)

    \n

    Now we know that we can use std::sort to sort the diagonal itself, but we also\nneed to get the diagonals somehow. I'm rather lazy, so I'll just delegate it to\nsomeone else3. And that way we get

    \n
    matrix diagonalSort(matrix mat)
    {
    // we iterate over the diagonals
    for (auto d : diagonals(mat)) {
    // and we sort each diagonal
    std::sort(d.begin(), d.end());
    }

    // we take the matrix by copy, so we can sort in-situ and return the copy
    // that we sorted
    return mat;
    }
    \n

    This solution looks very simple, doesn't it? Well, cause it is.\nLet's try compiling it:

    \n
    matrix-sort.cpp:11:23: error: use of undeclared identifier 'diagonals' [clang-diagnostic-error]
    for (auto d : diagonals(mat)) {
    ^
    Found compiler error(s).
    make: *** [makefile:14: tidy] Error 1
    \n

    OK, seems about right. We haven't implemented the diagonals yet. And based on\nwhat we've written so far, we need a function or a class diagonals that will\ngive us the diagonals we need.

    \n

    Implementing the diagonals

    \n

    Cool, so we need the function that will let us go through each and every diagonal\nin our matrix. We use the for-range loop, so whatever we get back from the\ndiagonals must support .begin() and .end(). Since I am a masochist, we will\ndo such functionality for a matrix of any type, not just the int from the challenge.

    \n

    As I said, we need to be able to

    \n
      \n
    • construct the object
    • \n
    • get the beginning
    • \n
    • get the end (the “sentinel”)
    • \n
    \n
    template <typename T>
    class diagonals {
    using matrix_t = std::vector<std::vector<T>>;

    matrix_t& _matrix;

    public:
    diagonals(matrix_t& m)
    : _matrix(m)
    {
    }
    diagonals_iter begin()
    {
    /* TODO */
    }
    diagonals_iter end()
    {
    /* TODO */
    }
    };
    \n

    Now we have a diagonals that we can use to go through the diagonals. We haven't\nimplemented the core of it yet. Let's go through what we have for now.

    \n

    We have a templated class with templated T that is used as a placeholder for any\ntype we would store in the matrix. Because I'm lazy, I have defined the matrix_t\ntype that is a “shortcut” for std::vector<std::vector<T>>, so I don't have to\ntype it out all the time. Of course, we need to store the matrix, we are given,\nas a private attribute. And then just have the constructor and the 2 methods we\nneed for the for-range.

    \n

    Iterating over diagonals

    \n

    Now that we have an object that will allow us to iterate through the diagonals,\nwe need to implement the iterating itself. We need to go through all of them, so\nwe have multiple options how to do so. I have decided to start from the “main”\ndiagonal that starts at (0, 0) index and then proceed with the diagonals starting\nin the first row, followed by the rest of the diagonals in the first column.

    \n

    We need to be able to tell that we've iterated through all of them, and also we\nneed to know which diagonal is next. For that purpose we will pass the indices\nof the first cell on the diagonal. That way we can always tell how to move forward.

    \n

    We will start by updating the begin and end to reflect our choice accordingly.

    \n
    diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }
    diagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }
    \n

    For the begin we return the first diagonal that starts at (0, 0). And because\nwe have decided to do the diagonals in the first column at the end, the first\ndiagonal that is not a valid one is the one at (0, height). Apart from the\nindices, we also need to pass reference to the matrix itself.

    \n
    note

    You may have noticed that we also include the diagonals that have length 1,\nspecifically the ones at (0, height - 1) and (width - 1, 0). We are implementing\nan iterator that should not care about the way it's being used. Therefore, we\ndon't care about the fact they don't need to be sorted.

    \n

    Cool, let's leave the iterator itself to someone else, right?4

    \n

    Implementing the iterator over diagonals

    \n

    We can start with a simple skeleton based on the information that we pass from\nthe diagonals. Also to utilize the matrix_t and also contain implementation\ndetails hidden away, we will put this code into the diagonals class.

    \n
    class diagonals_iter {
    matrix_t& m;
    std::size_t x;
    std::size_t y;

    public:
    diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }
    };
    \n

    In this case we will be implementing a “simple” forward iterator, so we don't\nneed to implement a lot. Notably it will be:

    \n
      \n
    • inequality operator (we need to know when we reach the end and have nothing to\niterate over)
    • \n
    • preincrementation operator (we need to be able to move around the iterable)
    • \n
    • dereference operator (we need to be able to retrieve the objects we iterate\nover)
    • \n
    \n
    class diagonals_iter {
    matrix_t& m;
    std::size_t x;
    std::size_t y;

    public:
    diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }

    bool operator!=(const diagonals_iter& rhs) const
    {
    // iterators are not equal if they reference different matrices, or
    // their positions differ
    return m != rhs.m || x != rhs.x || y != rhs.y;
    }

    diagonals_iter& operator++()
    {
    if (y != 0) {
    // iterating through diagonals down the first column
    y++;
    return *this;
    }

    // iterating the diagonals along the first row
    x++;
    if (x == m.front().size()) {
    // switching to diagonals in the first column
    x = 0;
    y++;
    }

    return *this;
    }

    diagonal<T> operator*() const { return diagonal { m, x, y }; }
    };
    \n

    Let's go one-by-one. Inequality operator is rather simple, just compare iterator's\nattributes field-by-field. If you think about it, checking inequality of two 2D\nvectors may be a bit inefficient, therefore, we can swap around and check it as\na last thing.

    \n
    -        return m != rhs.m || x != rhs.x || y != rhs.y;
    + return x != rhs.x || y != rhs.y || m != rhs.m;
    \n

    Preincrementation is where the magic happens. If you have a better look, you can\nsee two branches of this operation:

    \n
      \n
    1. When y != 0 (we're iterating over the diagonals in the first column)\nIn this case, we just bump the row and we're done.
    2. \n
    3. When y == 0 (we're iterating over the diagonals in the first row)\nIn this case, we bump the column and check if we haven't gotten out of bounds,\ni.e. the end of the first row. If we get out of the bounds, we're continuing\nwith the second diagonal in the first column.
    4. \n
    \n

    Dereferencing the iterator must “yield” something. In our case it will be the\ndiagonal that we want to sort. For sorting we need just the iterators that can\nmove around said diagonal. The simplest thing, we can do, is to delegate it to\nsomething else. In our case it will be a class called diagonal.

    \n

    Implementing the diagonal itself

    \n

    After implementing the iterator over diagonals, we know that all we need to describe\na diagonal is the matrix itself and the “start” of the diagonal (row and column).\nAnd we also know that the diagonal must provide some iterators for the std::sort\nfunction. We can start with the following skeleton:

    \n
    template <typename T>
    class diagonal {
    using matrix_t = std::vector<std::vector<T>>;

    matrix_t& matrix;
    std::size_t x;
    std::size_t y;

    public:
    diagonal(matrix_t& matrix, std::size_t x, std::size_t y)
    : matrix(matrix)
    , x(x)
    , y(y)
    {
    }

    diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }

    diagonal_iter end() const
    {
    auto max_x = matrix[y].size();
    auto max_y = matrix.size();

    // we need to find the distance in which we get out of bounds (either in
    // column or row)
    auto steps = std::min(max_x - x, max_y - y);

    return diagonal_iter { matrix, x + steps, y + steps };
    }
    };
    \n

    Initialization is rather simple, we just “keep” the stuff we get, begin is the\nsimplest, we just delegate.

    \n

    In case of the end, it gets more complicated. We need to know where is the “end”\nof the diagonal. Since end should point to the first element “after” the iterable,\nwe know that it's the first position of the iterator where either y becomes\nmatrix.size() or x becomes matrix[y].size(). Also we are moving along diagonal,\nduh, therefore we can deduce the first “position” afterwards by minimal amount of\nsteps to get out of the any column or row, hence std::min(max_x - x, max_y - y).\nFinal position is then computed simply by adding the steps to the beginning of\nthe diagonal.

    \n

    Now we just need to finish the iterator for the diagonal itself and we're done.

    \n

    Implementing diagonal_iter

    \n

    This part is the hardest from all we need to do. It's because of the requirements\nof the std::sort that requires us to implement a random access iterator. I have\nbriefly described it above, and “in a nutshell” it means that we need to implement\nan iterator that can move in constant time along the diagonal in any amount of\nsteps.

    \n

    Let's go through all of the functionality that our iterator needs to support to\nbe used in std::sort. We need the usual operations like:

    \n
      \n
    • equality/inequality
    • \n
    • incrementation
    • \n
    • dereferencing
    • \n
    \n

    We will also add all the types that our iterator uses with the category of the\niterator, i.e. what interface it supports:

    \n
    class diagonal_iter {
    // we need to keep reference to the matrix itself
    matrix_t& m;

    // we need to be able to tell our current position
    std::size_t x;
    std::size_t y;

    public:
    using difference_type = std::ptrdiff_t;
    using value_type = T;
    using pointer = T*;
    using reference = T&;
    using iterator_category = std::random_access_iterator_tag;

    diagonal_iter(matrix_t& matrix,
    std::size_t x,
    std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }

    bool operator==(const diagonal_iter& rhs) const
    {
    return x == rhs.x && y == rhs.y && m == rhs.m;
    }

    diagonal_iter& operator++()
    {
    // we are moving along the diagonal, so we increment both ‹x› and ‹y› at
    // the same time
    x++;
    y++;
    return *this;
    }

    reference operator*() const { return m[y][x]; }
    };
    \n

    This is pretty similar to the previous iterator, but now we need to implement the\nremaining requirements of the random access iterator. Let's see what those are:

    \n
      \n
    • decrementation - cause we need to be able to move backwards too, since _random _\naccess iterator extends the interface of bidirectional iterator
    • \n
    • moving the iterator in either direction by steps given as an integer
    • \n
    • being able to tell the distance between two iterators
    • \n
    • define an ordering on the iterators
    • \n
    \n

    Let's fill them in:

    \n
    class diagonal_iter {
    // we need to keep reference to the matrix itself
    matrix_t& m;

    // we need to be able to tell our current position
    std::size_t x;
    std::size_t y;

    public:
    using difference_type = std::ptrdiff_t;
    using value_type = T;
    using pointer = T*;
    using reference = T&;
    using iterator_category = std::random_access_iterator_tag;

    diagonal_iter(matrix_t& matrix,
    std::size_t x,
    std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }

    bool operator==(const diagonal_iter& rhs) const
    {
    return x == rhs.x && y == rhs.y && m == rhs.m;
    }

    diagonal_iter& operator++()
    {
    // we are moving along the diagonal, so we increment both ‹x› and ‹y› at
    // the same time
    x++;
    y++;
    return *this;
    }

    reference operator*() const { return m[y][x]; }

    // exactly opposite to the incrementation
    diagonal_iter operator--()
    {
    x--;
    y--;
    return *this;
    }

    // moving ‹n› steps back is same as calling decrementation ‹n›-times, so we
    // can just return a new iterator and subtract ‹n› from both coordinates in
    // the matrix
    diagonal_iter operator-(difference_type n) const
    {
    return diagonal_iter { m, x - n, y - n };
    }

    // here we assume that we are given two iterators on the same diagonal
    difference_type operator-(const diagonal_iter& rhs) const
    {
    assert(m == rhs.m);
    return x - rhs.x;
    }

    // counterpart of moving ‹n› steps backwards
    diagonal_iter operator+(difference_type n) const
    {
    return diagonal_iter { m, x + n, y + n };
    }

    // we compare the coordinates, and also assume that those 2 iterators are
    // lying on the same diagonal
    bool operator<(const diagonal_iter& rhs) const
    {
    assert(m == rhs.m);
    return x < rhs.x && y < rhs.y;
    }
    };
    \n

    At this point we could probably try and compile it, right? If we do so, we will\nget yelled at by a compiler for the following reasons:

    \n
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
    __last = __next;
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization 'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>' requested here
    std::__unguarded_linear_insert(__i,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization 'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__final_insertion_sort(__first, __last, __comp);
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    ^
    matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
    std::sort(d.begin(), d.end());
    ^
    matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
    matrix_t& m;
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to '__unguarded_linear_insert' [clang-diagnostic-error]
    std::__unguarded_linear_insert(__i,
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization 'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__final_insertion_sort(__first, __last, __comp);
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    ^
    matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
    std::sort(d.begin(), d.end());
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]
    __unguarded_linear_insert(_RandomAccessIterator __last,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
    __last = __cut;
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization 'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__introsort_loop(__first, __last,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    ^
    matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
    std::sort(d.begin(), d.end());
    ^
    matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
    matrix_t& m;
    ^
    \n

    That's a lot of noise, isn't it? Let's focus on the important parts:

    \n
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]

    matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
    matrix_t& m;
    ^
    \n

    Ah! We have a reference in our iterator, and this prevents us from having a copy\nassignment operator (that is used “somewhere” in the sorting algorithm). Well…\nLet's just wrap it!

    \n
    # we need to keep a different type than reference
    - matrix_t& m;
    + std::reference_wrapper<matrix_t> m;

    # in comparison we need to get the reference out of the wrapper first
    - return x == rhs.x && y == rhs.y && m == rhs.m;
    + return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();

    # same when we return a reference to the “cell” in the matrix
    - reference operator*() const { return m[y][x]; }
    + reference operator*() const { return m.get()[y][x]; }

    # and finally in the assertions that we set for the “distance” and “less than”
    - assert(m == rhs.m);
    + assert(m.get() == rhs.m.get());
    \n

    We're done now! We have written an iterator over diagonals for a 2D vector. You can have a look at the final result here.

    \n

    Footnotes

    \n
      \n
    1. \n

      just because I'm used to it and don't care about your opinion ;)

      \n
    2. \n
    3. \n

      exercise at your own risk

      \n
    4. \n
    5. \n

      me in 5 minutes in fact, but don't make me scared

      \n
    6. \n
    7. \n

      me in the next section…

      \n
    8. \n
    \n
    ", + "content_html": "

    Let's try to solve one of the LeetCode challenges in easy and hard mode at the\nsame time.

    \n\n

    Problem description

    \n

    A matrix diagonal is a diagonal line of cells starting from some cell in\neither the topmost row or leftmost column and going in the bottom-right direction\nuntil reaching the matrix's end. For example, the matrix diagonal starting\nfrom mat[2][0], where mat is a 6 x 3 matrix, includes cells mat[2][0],\nmat[3][1], and mat[4][2].

    \n

    Given an m x n matrix mat of integers, sort each matrix diagonal in ascending\norder and return the resulting matrix.

    \n

    Example

    \n

    \"Image

    \n

    Skeleton and initial adjustments

    \n

    We are given the following skeleton for the C++ and the given challenge:

    \n
    class Solution {
    public:
    vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {

    }
    };
    \n

    The task is to sort the passed matrix diagonally and then return it. First of all,\nI don't like to solve this in a web browser, so we'll need to adjust it accordingly\nfor running it locally. We'll start by including the vector header and using\nfully-qualified namespaces1 and also adding few tests:

    \n
    #include <cassert>
    #include <vector>

    using matrix = std::vector<std::vector<int>>;

    class Solution {
    public:
    matrix diagonalSort(matrix& mat)
    {
    }
    };

    static void test_case_1()
    {
    // Input: mat = [[3,3,1,1],[2,2,1,2],[1,1,1,2]]
    // Output: [[1,1,1,1],[1,2,2,2],[1,2,3,3]]

    Solution s;
    assert((s.diagonalSort(std::vector { std::vector { 3, 3, 1, 1 },
    std::vector { 2, 2, 1, 2 },
    std::vector { 1, 1, 1, 2 } })
    == std::vector { std::vector { 1, 1, 1, 1 },
    std::vector { 1, 2, 2, 2 },
    std::vector { 1, 2, 3, 3 } }));
    }

    static void test_case_2()
    {
    // Input: mat =
    // [[11,25,66,1,69,7],[23,55,17,45,15,52],[75,31,36,44,58,8],[22,27,33,25,68,4],[84,28,14,11,5,50]]
    // Output:
    // [[5,17,4,1,52,7],[11,11,25,45,8,69],[14,23,25,44,58,15],[22,27,31,36,50,66],[84,28,75,33,55,68]]

    Solution s;
    assert((s.diagonalSort(std::vector { std::vector { 11, 25, 66, 1, 69, 7 },
    std::vector { 23, 55, 17, 45, 15, 52 },
    std::vector { 75, 31, 36, 44, 58, 8 },
    std::vector { 22, 27, 33, 25, 68, 4 },
    std::vector { 84, 28, 14, 11, 5, 50 } })
    == std::vector { std::vector { 5, 17, 4, 1, 52, 7 },
    std::vector { 11, 11, 25, 45, 8, 69 },
    std::vector { 14, 23, 25, 44, 58, 15 },
    std::vector { 22, 27, 31, 36, 50, 66 },
    std::vector { 84, 28, 75, 33, 55, 68 } }));
    }

    int main()
    {
    test_case_1();
    test_case_2();

    return 0;
    }
    \n

    We need to return the matrix, but we're given a reference to the input matrix. We\ncan easily abuse the C++ here and just switch the reference to value, this way\nthe matrix will be copied when passed to the function, we can sort the copy and\njust return it back. And we also get yelled by the compiler for the fact that the\nmethod doesn't return anything yet, so to make it “shut up” we will just return\nthe input for now:

    \n
    -    matrix diagonalSort(matrix& mat)
    + matrix diagonalSort(matrix mat)
    {
    + return mat;
    }
    \n

    Now, we get the copy and we're good to go.

    \n

    Naïve solution

    \n

    As you may know, C++ offers a plethora of functions that can be used to your\nadvantage, given that you know how to “bend” the data structures accordingly.

    \n

    What does that mean for us? Well, we have an std::sort, we can use it, right?\nLet's have a look at it:

    \n
    template< class RandomIt >
    void sort( RandomIt first, RandomIt last );
    \n

    This overload is more than we need. What does it do? It just sorts the elements\nin the range [first, last) using operator< on them. We can't sort the whole\nmatrix using this, but… we can sort just »one« diagonal without doing much work\non our end.

    \n

    What is the RandomIt type though? If we look more into the documentation, we\ncan easily find the requirements for it and also learn that it's a random access\niterator and allows swapping its values at the same time.

    \n
    Random access iterator

    What is the random access iterator though? We can find it in a documentation\nand see the following description:

    \n

    A LegacyRandomAccessIterator is a LegacyBidirectionalIterator\nthat can be moved to point to any element in constant time.

    \n

    After that we can see all the requirements for it being listed. I don't feel like\nreading them right now, so we will just use it and see where the compilation blows\nup, i.e. “compiler-assisted development2 if you will ;)

    \n

    Now we know that we can use std::sort to sort the diagonal itself, but we also\nneed to get the diagonals somehow. I'm rather lazy, so I'll just delegate it to\nsomeone else3. And that way we get

    \n
    matrix diagonalSort(matrix mat)
    {
    // we iterate over the diagonals
    for (auto d : diagonals(mat)) {
    // and we sort each diagonal
    std::sort(d.begin(), d.end());
    }

    // we take the matrix by copy, so we can sort in-situ and return the copy
    // that we sorted
    return mat;
    }
    \n

    This solution looks very simple, doesn't it? Well, cause it is.\nLet's try compiling it:

    \n
    matrix-sort.cpp:11:23: error: use of undeclared identifier 'diagonals' [clang-diagnostic-error]
    for (auto d : diagonals(mat)) {
    ^
    Found compiler error(s).
    make: *** [makefile:14: tidy] Error 1
    \n

    OK, seems about right. We haven't implemented the diagonals yet. And based on\nwhat we've written so far, we need a function or a class diagonals that will\ngive us the diagonals we need.

    \n

    Implementing the diagonals

    \n

    Cool, so we need the function that will let us go through each and every diagonal\nin our matrix. We use the for-range loop, so whatever we get back from the\ndiagonals must support .begin() and .end(). Since I am a masochist, we will\ndo such functionality for a matrix of any type, not just the int from the challenge.

    \n

    As I said, we need to be able to

    \n
      \n
    • construct the object
    • \n
    • get the beginning
    • \n
    • get the end (the “sentinel”)
    • \n
    \n
    template <typename T>
    class diagonals {
    using matrix_t = std::vector<std::vector<T>>;

    matrix_t& _matrix;

    public:
    diagonals(matrix_t& m)
    : _matrix(m)
    {
    }
    diagonals_iter begin()
    {
    /* TODO */
    }
    diagonals_iter end()
    {
    /* TODO */
    }
    };
    \n

    Now we have a diagonals that we can use to go through the diagonals. We haven't\nimplemented the core of it yet. Let's go through what we have for now.

    \n

    We have a templated class with templated T that is used as a placeholder for any\ntype we would store in the matrix. Because I'm lazy, I have defined the matrix_t\ntype that is a “shortcut” for std::vector<std::vector<T>>, so I don't have to\ntype it out all the time. Of course, we need to store the matrix, we are given,\nas a private attribute. And then just have the constructor and the 2 methods we\nneed for the for-range.

    \n

    Iterating over diagonals

    \n

    Now that we have an object that will allow us to iterate through the diagonals,\nwe need to implement the iterating itself. We need to go through all of them, so\nwe have multiple options how to do so. I have decided to start from the “main”\ndiagonal that starts at (0, 0) index and then proceed with the diagonals starting\nin the first row, followed by the rest of the diagonals in the first column.

    \n

    We need to be able to tell that we've iterated through all of them, and also we\nneed to know which diagonal is next. For that purpose we will pass the indices\nof the first cell on the diagonal. That way we can always tell how to move forward.

    \n

    We will start by updating the begin and end to reflect our choice accordingly.

    \n
    diagonals_iter begin() { return diagonals_iter { _matrix, 0, 0 }; }
    diagonals_iter end() { return diagonals_iter { _matrix, 0, _matrix.size() }; }
    \n

    For the begin we return the first diagonal that starts at (0, 0). And because\nwe have decided to do the diagonals in the first column at the end, the first\ndiagonal that is not a valid one is the one at (0, height). Apart from the\nindices, we also need to pass reference to the matrix itself.

    \n
    note

    You may have noticed that we also include the diagonals that have length 1,\nspecifically the ones at (0, height - 1) and (width - 1, 0). We are implementing\nan iterator that should not care about the way it's being used. Therefore, we\ndon't care about the fact they don't need to be sorted.

    \n

    Cool, let's leave the iterator itself to someone else, right?4

    \n

    Implementing the iterator over diagonals

    \n

    We can start with a simple skeleton based on the information that we pass from\nthe diagonals. Also to utilize the matrix_t and also contain implementation\ndetails hidden away, we will put this code into the diagonals class.

    \n
    class diagonals_iter {
    matrix_t& m;
    std::size_t x;
    std::size_t y;

    public:
    diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }
    };
    \n

    In this case we will be implementing a “simple” forward iterator, so we don't\nneed to implement a lot. Notably it will be:

    \n
      \n
    • inequality operator (we need to know when we reach the end and have nothing to\niterate over)
    • \n
    • preincrementation operator (we need to be able to move around the iterable)
    • \n
    • dereference operator (we need to be able to retrieve the objects we iterate\nover)
    • \n
    \n
    class diagonals_iter {
    matrix_t& m;
    std::size_t x;
    std::size_t y;

    public:
    diagonals_iter(matrix_t& matrix, std::size_t x, std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }

    bool operator!=(const diagonals_iter& rhs) const
    {
    // iterators are not equal if they reference different matrices, or
    // their positions differ
    return m != rhs.m || x != rhs.x || y != rhs.y;
    }

    diagonals_iter& operator++()
    {
    if (y != 0) {
    // iterating through diagonals down the first column
    y++;
    return *this;
    }

    // iterating the diagonals along the first row
    x++;
    if (x == m.front().size()) {
    // switching to diagonals in the first column
    x = 0;
    y++;
    }

    return *this;
    }

    diagonal<T> operator*() const { return diagonal { m, x, y }; }
    };
    \n

    Let's go one-by-one. Inequality operator is rather simple, just compare iterator's\nattributes field-by-field. If you think about it, checking inequality of two 2D\nvectors may be a bit inefficient, therefore, we can swap around and check it as\na last thing.

    \n
    -        return m != rhs.m || x != rhs.x || y != rhs.y;
    + return x != rhs.x || y != rhs.y || m != rhs.m;
    \n

    Preincrementation is where the magic happens. If you have a better look, you can\nsee two branches of this operation:

    \n
      \n
    1. When y != 0 (we're iterating over the diagonals in the first column)\nIn this case, we just bump the row and we're done.
    2. \n
    3. When y == 0 (we're iterating over the diagonals in the first row)\nIn this case, we bump the column and check if we haven't gotten out of bounds,\ni.e. the end of the first row. If we get out of the bounds, we're continuing\nwith the second diagonal in the first column.
    4. \n
    \n

    Dereferencing the iterator must “yield” something. In our case it will be the\ndiagonal that we want to sort. For sorting we need just the iterators that can\nmove around said diagonal. The simplest thing, we can do, is to delegate it to\nsomething else. In our case it will be a class called diagonal.

    \n

    Implementing the diagonal itself

    \n

    After implementing the iterator over diagonals, we know that all we need to describe\na diagonal is the matrix itself and the “start” of the diagonal (row and column).\nAnd we also know that the diagonal must provide some iterators for the std::sort\nfunction. We can start with the following skeleton:

    \n
    template <typename T>
    class diagonal {
    using matrix_t = std::vector<std::vector<T>>;

    matrix_t& matrix;
    std::size_t x;
    std::size_t y;

    public:
    diagonal(matrix_t& matrix, std::size_t x, std::size_t y)
    : matrix(matrix)
    , x(x)
    , y(y)
    {
    }

    diagonal_iter begin() const { return diagonal_iter { matrix, x, y }; }

    diagonal_iter end() const
    {
    auto max_x = matrix[y].size();
    auto max_y = matrix.size();

    // we need to find the distance in which we get out of bounds (either in
    // column or row)
    auto steps = std::min(max_x - x, max_y - y);

    return diagonal_iter { matrix, x + steps, y + steps };
    }
    };
    \n

    Initialization is rather simple, we just “keep” the stuff we get, begin is the\nsimplest, we just delegate.

    \n

    In case of the end, it gets more complicated. We need to know where is the “end”\nof the diagonal. Since end should point to the first element “after” the iterable,\nwe know that it's the first position of the iterator where either y becomes\nmatrix.size() or x becomes matrix[y].size(). Also we are moving along diagonal,\nduh, therefore we can deduce the first “position” afterwards by minimal amount of\nsteps to get out of the any column or row, hence std::min(max_x - x, max_y - y).\nFinal position is then computed simply by adding the steps to the beginning of\nthe diagonal.

    \n

    Now we just need to finish the iterator for the diagonal itself and we're done.

    \n

    Implementing diagonal_iter

    \n

    This part is the hardest from all we need to do. It's because of the requirements\nof the std::sort that requires us to implement a random access iterator. I have\nbriefly described it above, and “in a nutshell” it means that we need to implement\nan iterator that can move in constant time along the diagonal in any amount of\nsteps.

    \n

    Let's go through all of the functionality that our iterator needs to support to\nbe used in std::sort. We need the usual operations like:

    \n
      \n
    • equality/inequality
    • \n
    • incrementation
    • \n
    • dereferencing
    • \n
    \n

    We will also add all the types that our iterator uses with the category of the\niterator, i.e. what interface it supports:

    \n
    class diagonal_iter {
    // we need to keep reference to the matrix itself
    matrix_t& m;

    // we need to be able to tell our current position
    std::size_t x;
    std::size_t y;

    public:
    using difference_type = std::ptrdiff_t;
    using value_type = T;
    using pointer = T*;
    using reference = T&;
    using iterator_category = std::random_access_iterator_tag;

    diagonal_iter(matrix_t& matrix,
    std::size_t x,
    std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }

    bool operator==(const diagonal_iter& rhs) const
    {
    return x == rhs.x && y == rhs.y && m == rhs.m;
    }

    diagonal_iter& operator++()
    {
    // we are moving along the diagonal, so we increment both ‹x› and ‹y› at
    // the same time
    x++;
    y++;
    return *this;
    }

    reference operator*() const { return m[y][x]; }
    };
    \n

    This is pretty similar to the previous iterator, but now we need to implement the\nremaining requirements of the random access iterator. Let's see what those are:

    \n
      \n
    • decrementation - cause we need to be able to move backwards too, since _random _\naccess iterator extends the interface of bidirectional iterator
    • \n
    • moving the iterator in either direction by steps given as an integer
    • \n
    • being able to tell the distance between two iterators
    • \n
    • define an ordering on the iterators
    • \n
    \n

    Let's fill them in:

    \n
    class diagonal_iter {
    // we need to keep reference to the matrix itself
    matrix_t& m;

    // we need to be able to tell our current position
    std::size_t x;
    std::size_t y;

    public:
    using difference_type = std::ptrdiff_t;
    using value_type = T;
    using pointer = T*;
    using reference = T&;
    using iterator_category = std::random_access_iterator_tag;

    diagonal_iter(matrix_t& matrix,
    std::size_t x,
    std::size_t y)
    : m(matrix)
    , x(x)
    , y(y)
    {
    }

    bool operator==(const diagonal_iter& rhs) const
    {
    return x == rhs.x && y == rhs.y && m == rhs.m;
    }

    diagonal_iter& operator++()
    {
    // we are moving along the diagonal, so we increment both ‹x› and ‹y› at
    // the same time
    x++;
    y++;
    return *this;
    }

    reference operator*() const { return m[y][x]; }

    // exactly opposite to the incrementation
    diagonal_iter operator--()
    {
    x--;
    y--;
    return *this;
    }

    // moving ‹n› steps back is same as calling decrementation ‹n›-times, so we
    // can just return a new iterator and subtract ‹n› from both coordinates in
    // the matrix
    diagonal_iter operator-(difference_type n) const
    {
    return diagonal_iter { m, x - n, y - n };
    }

    // here we assume that we are given two iterators on the same diagonal
    difference_type operator-(const diagonal_iter& rhs) const
    {
    assert(m == rhs.m);
    return x - rhs.x;
    }

    // counterpart of moving ‹n› steps backwards
    diagonal_iter operator+(difference_type n) const
    {
    return diagonal_iter { m, x + n, y + n };
    }

    // we compare the coordinates, and also assume that those 2 iterators are
    // lying on the same diagonal
    bool operator<(const diagonal_iter& rhs) const
    {
    assert(m == rhs.m);
    return x < rhs.x && y < rhs.y;
    }
    };
    \n

    At this point we could probably try and compile it, right? If we do so, we will\nget yelled at by a compiler for the following reasons:

    \n
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
    __last = __next;
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1817:11: note: in instantiation of function template specialization 'std::__unguarded_linear_insert<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Val_less_iter>' requested here
    std::__unguarded_linear_insert(__i,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1849:9: note: in instantiation of function template specialization 'std::__insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__insertion_sort(__first, __first + int(_S_threshold), __comp);
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__final_insertion_sort(__first, __last, __comp);
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    ^
    matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
    std::sort(d.begin(), d.end());
    ^
    matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
    matrix_t& m;
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1830:2: error: no matching function for call to '__unguarded_linear_insert' [clang-diagnostic-error]
    std::__unguarded_linear_insert(__i,
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1850:9: note: in instantiation of function template specialization 'std::__unguarded_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__unguarded_insertion_sort(__first + int(_S_threshold), __last,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1940:9: note: in instantiation of function template specialization 'std::__final_insertion_sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__final_insertion_sort(__first, __last, __comp);
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    ^
    matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
    std::sort(d.begin(), d.end());
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1782:5: note: candidate template ignored: substitution failure [with _RandomAccessIterator = diagonal<int>::diagonal_iter, _Compare = __gnu_cxx::__ops::_Val_less_iter]
    __unguarded_linear_insert(_RandomAccessIterator __last,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1923:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]
    __last = __cut;
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1937:9: note: in instantiation of function template specialization 'std::__introsort_loop<diagonal<int>::diagonal_iter, long, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__introsort_loop(__first, __last,
    ^
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:4820:12: note: in instantiation of function template specialization 'std::__sort<diagonal<int>::diagonal_iter, __gnu_cxx::__ops::_Iter_less_iter>' requested here
    std::__sort(__first, __last, __gnu_cxx::__ops::__iter_less_iter());
    ^
    matrix-sort.cpp:161:18: note: in instantiation of function template specialization 'std::sort<diagonal<int>::diagonal_iter>' requested here
    std::sort(d.begin(), d.end());
    ^
    matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
    matrix_t& m;
    ^
    \n

    That's a lot of noise, isn't it? Let's focus on the important parts:

    \n
    /usr/bin/../lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/stl_algo.h:1792:11: error: object of type 'diagonal<int>::diagonal_iter' cannot be assigned because its copy assignment operator is implicitly deleted [clang-diagnostic-error]

    matrix-sort.cpp:17:19: note: copy assignment operator of 'diagonal_iter' is implicitly deleted because field 'm' is of reference type 'diagonal<int>::matrix_t &' (aka 'vector<std::vector<int>> &')
    matrix_t& m;
    ^
    \n

    Ah! We have a reference in our iterator, and this prevents us from having a copy\nassignment operator (that is used “somewhere” in the sorting algorithm). Well…\nLet's just wrap it!

    \n
    # we need to keep a different type than reference
    - matrix_t& m;
    + std::reference_wrapper<matrix_t> m;

    # in comparison we need to get the reference out of the wrapper first
    - return x == rhs.x && y == rhs.y && m == rhs.m;
    + return x == rhs.x && y == rhs.y && m.get() == rhs.m.get();

    # same when we return a reference to the “cell” in the matrix
    - reference operator*() const { return m[y][x]; }
    + reference operator*() const { return m.get()[y][x]; }

    # and finally in the assertions that we set for the “distance” and “less than”
    - assert(m == rhs.m);
    + assert(m.get() == rhs.m.get());
    \n

    We're done now! We have written an iterator over diagonals for a 2D vector. You can have a look at the final result here.

    \n

    Footnotes

    \n
      \n
    1. \n

      just because I'm used to it and don't care about your opinion ;)

      \n
    2. \n
    3. \n

      exercise at your own risk

      \n
    4. \n
    5. \n

      me in 5 minutes in fact, but don't make me scared

      \n
    6. \n
    7. \n

      me in the next section…

      \n
    8. \n
    \n
    ", "url": "https://blog.mfocko.xyz/blog/leetcode/sort-diagonally", "title": "Sort the matrix diagonally", "summary": "Compiler assisted development.", diff --git a/blog/index.html b/blog/index.html index f35e90f..fb37fe7 100644 --- a/blog/index.html +++ b/blog/index.html @@ -2,7 +2,7 @@ - + Blog | mf @@ -14,11 +14,19 @@ - - + + -

    · 4 min read
    Matej Focko

    When you decide to run Fedora on your VPS, you might get screwed over by using +

    · 16 min read
    Matej Focko

    Rust has become a rather popular language these days. I've managed to get my +hands dirty with it during [Advent of Code] ‘22 and partially ‘23. I've also +used it for few rounds of [Codeforces] and I have to try very hard to maintain +some variety of languages for LeetCode challenges along with the Rust. I'll +disclaim up front that I won't be only positive, since this post is a result of +multiple discussions about Rust and I stand behind +“All that glitters is not gold”, so if you can't stand your favorite language +being criticized in any way, don't even proceed. 😉

    diff --git a/blog/leetcode/sort-diagonally/index.html b/blog/leetcode/sort-diagonally/index.html index 2408a8b..0b932ad 100644 --- a/blog/leetcode/sort-diagonally/index.html +++ b/blog/leetcode/sort-diagonally/index.html @@ -2,7 +2,7 @@ - + Sort the matrix diagonally | mf @@ -14,11 +14,11 @@ - - + + -

    Sort the matrix diagonally

    · 17 min read
    Matej Focko

    Let's try to solve one of the LeetCode challenges in easy and hard mode at the +

    Sort the matrix diagonally

    · 17 min read
    Matej Focko

    Let's try to solve one of the LeetCode challenges in easy and hard mode at the same time.

Submitting

In case you have any questions, feel free to reach out to me.

-
+
\ No newline at end of file diff --git a/c/bonuses/seminar-10/index.html b/c/bonuses/seminar-10/index.html index 370e1fe..891cc5b 100644 --- a/c/bonuses/seminar-10/index.html +++ b/c/bonuses/seminar-10/index.html @@ -2,7 +2,7 @@ - + 10th seminar | mf @@ -16,8 +16,8 @@ - - + +

10th seminar

Source

@@ -78,7 +78,7 @@ will drag the common files myself. :)

As we have talked about on the seminar, I suggest you to follow Test-Driven Development in this case.

-

TDD workflow

+

TDD workflow

In our current scenario we are already in the stage of refactoring and fixing the bugs. Therefore try to follow this succession of steps:

    @@ -136,6 +136,6 @@ it is a not requirement at all and you can still get all points for the bonus ;)

    Submitting

    In case you have any questions, feel free to reach out to me.

    -
+
\ No newline at end of file diff --git a/c/category/bonuses/index.html b/c/category/bonuses/index.html index 1bf70ef..68ca881 100644 --- a/c/category/bonuses/index.html +++ b/c/category/bonuses/index.html @@ -2,7 +2,7 @@ - + Bonuses | mf @@ -16,8 +16,8 @@ - - + +

Bonuses

Bonus assignments for Kontr Coins. diff --git a/c/category/practice-exams/index.html b/c/category/practice-exams/index.html index 6517d80..be967af 100644 --- a/c/category/practice-exams/index.html +++ b/c/category/practice-exams/index.html @@ -2,7 +2,7 @@ - + Practice Exams | mf @@ -16,8 +16,8 @@ - - + +

Practice Exams

Practice exams for training for the final exam. diff --git a/c/index.html b/c/index.html index daa9c0c..a0129e9 100644 --- a/c/index.html +++ b/c/index.html @@ -2,7 +2,7 @@ - + Introduction | mf @@ -14,10 +14,10 @@ - - + + -

+ \ No newline at end of file diff --git a/c/mr/index.html b/c/mr/index.html index d014877..33af1ee 100644 --- a/c/mr/index.html +++ b/c/mr/index.html @@ -2,7 +2,7 @@ - + Submitting merge requests | mf @@ -14,8 +14,8 @@ - - + +

Submitting merge requests for review

@@ -87,6 +87,6 @@ For the sake of safety, do not continue without clean repository. Then with comm be main or trunk.

aisa$ git status
# Check if repository is clean

# If you know, what is your default branch, you can skip next command.
aisa$ git branch
# Find the default branch in the list; should be one of the `master`, `main` or
# `trunk` and you should not have more than one of those.
# In case the list clears the terminal and you cannot see shell prompt, you can
# press `q` to quit the pager.

aisa$ git checkout master

-

Adapted from: https://www.fi.muni.cz/~xlacko1/pb071/mr.html

+

Adapted from: https://www.fi.muni.cz/~xlacko1/pb071/mr.html

\ No newline at end of file diff --git a/c/pexam/cams/index.html b/c/pexam/cams/index.html index dd80c96..4365cab 100644 --- a/c/pexam/cams/index.html +++ b/c/pexam/cams/index.html @@ -2,7 +2,7 @@ - + Practice exam C | mf @@ -16,8 +16,8 @@ - - + +

Watching Cams

diff --git a/c/pexam/garbage_collect/index.html b/c/pexam/garbage_collect/index.html index 647878d..0e37848 100644 --- a/c/pexam/garbage_collect/index.html +++ b/c/pexam/garbage_collect/index.html @@ -2,7 +2,7 @@ - + Practice exam B | mf @@ -16,8 +16,8 @@ - - + +

Garbage Collection

diff --git a/contributions/index.html b/contributions/index.html index 3d3cfb9..6d63ddc 100644 --- a/contributions/index.html +++ b/contributions/index.html @@ -2,7 +2,7 @@ - + Contributions | mf @@ -14,10 +14,10 @@ - - + + -

Contributions

Many of my contributions to open-source projects.

tmt

Description

The `tmt` tool provides a user-friendly way to work with tests. You can comfortably create new tests, safely and easily run tests across different environments, review test results, debug test code and enable tests in the CI using a consistent and concise config.

Contribution

Just a smallish contribution to the docs related to the changes implemented on the Packit side.

Fedora Infrastructure Ansible

Description

Collection of Ansible playbooks that powers the Fedora Infrastructure.

Contribution

I have adjusted the groups in the Bodhi playbooks after Packit has been granted the privileges to propose updates without restrictions.

Bodhi

Description

Bodhi is a web-system that facilitates the process of publishing updates for a Fedora-based software distribution.

Contribution

I have adjusted the client, so that it doesn't show secrets in terminal when you log in to the Bodhi via browser.

Gluetool Modules Collection

Description

Modules for gluetool — a command line centric framework usable for glueing modules into a pipeline.

Contribution
  • I have proposed a possible implementation of git merging that was later on extended.
  • I have tried to help out with Copr module after they deprecated older version of their API.

Pagure

Description

Pagure is a git-centered forge, python based using pygit2.

Contribution

I have added an API endpoint for reopening pull requests.

Copr

Description

RPM build system - upstream for Copr.

Contribution
  • Supporting external repositories for custom SRPM build method.
  • Allowing admins of Copr repositories to build without the need to ask for explicit builder permissions.

python-gitlab

Description

A python wrapper for the GitLab API.

Contribution

I have contributed support for the merge_ref on merge requests that hasn't been supported, yet it was present in the GitLab API.

PatternFly React

Description

A set of React components for the PatternFly project.

Contribution

When working on Packit Dashboard, I have spotted smaller bugs that were present in this project and fixed them upstream to provide better experience for our users.

Fira Code

Description

Free monospaced font with programming ligatures.

Contribution

I have set up a GitHub Action for building the font on each push to the default branch allowing users to install bleeding edge version of the font.

nixpkgs

Description

Nixpkgs is a collection of over 80,000 software packages that can be installed with the Nix package manager. It also implements NixOS, a purely-functional Linux distribution.

Contribution

When I was trying out the nixpkgs, I have tried to bump .NET Core to the latest version. My changes haven't been accepted as they required bumping of multiple more packages that depended upon the .NET Core.

Darcula

Description

A theme for Visual Studio Code based on Darcula theme from Jetbrains IDEs.

Contribution

I have contributed support for diff files, though the project doesn't seem to be live anymore, so it hasn't been accepted as of now.

Packit

Description

An open source project aiming to ease the integration of your project with Fedora Linux, CentOS Stream and other distributions.

Contribution

Have a look at my pull requests.

Snitch

Description

Language agnostic tool that collects TODOs in the source code and reports them as Issues.

Contribution
  • Environment variable support for self-hosted GitLab instances
  • GitLab support

Karel the Robot

Description

Karel the robot is in general an educational programming language for beginners, created by Richard E. Pattis. This is implementation of Karel the Robot for C programming language.

This project is used for educational purposes at TUKE.

Contribution

I have contributed some refactoring tips to the author of the library.

+

Contributions

Many of my contributions to open-source projects.

tmt

Description

The tmt tool provides a user-friendly way to work with tests. You can comfortably create new tests, safely and easily run tests across different environments, review test results, debug test code and enable tests in the CI using a consistent and concise config.

Contribution

Just a smallish contribution to the docs related to the changes implemented on the Packit side.

Fedora Infrastructure Ansible

Description

Collection of Ansible playbooks that powers the Fedora Infrastructure.

Contribution

I have adjusted the groups in the Bodhi playbooks after Packit has been granted the privileges to propose updates without restrictions.

Bodhi

Description

Bodhi is a web-system that facilitates the process of publishing updates for a Fedora-based software distribution.

Contribution

I have adjusted the client, so that it doesn't show secrets in terminal when you log in to the Bodhi via browser.

Gluetool Modules Collection

Description

Modules for gluetool — a command line centric framework usable for glueing modules into a pipeline.

Contribution
  • I have proposed a possible implementation of git merging that was later on extended.
  • I have tried to help out with Copr module after they deprecated older version of their API.

Pagure

Description

Pagure is a git-centered forge, python based using pygit2.

Contribution

I have added an API endpoint for reopening pull requests.

Copr

Description

RPM build system - upstream for Copr.

Contribution
  • Supporting external repositories for custom SRPM build method.
  • Allowing admins of Copr repositories to build without the need to ask for explicit builder permissions.

python-gitlab

Description

A python wrapper for the GitLab API.

Contribution

I have contributed support for the merge_ref on merge requests that hasn't been supported, yet it was present in the GitLab API.

PatternFly React

Description

A set of React components for the PatternFly project.

Contribution

When working on Packit Dashboard, I have spotted smaller bugs that were present in this project and fixed them upstream to provide better experience for our users.

Fira Code

Description

Free monospaced font with programming ligatures.

Contribution

I have set up a GitHub Action for building the font on each push to the default branch allowing users to install bleeding edge version of the font.

nixpkgs

Description

Nixpkgs is a collection of over 80,000 software packages that can be installed with the Nix package manager. It also implements NixOS, a purely-functional Linux distribution.

Contribution

When I was trying out the nixpkgs, I have tried to bump .NET Core to the latest version. My changes haven't been accepted as they required bumping of multiple more packages that depended upon the .NET Core.

Darcula

Description

A theme for Visual Studio Code based on Darcula theme from Jetbrains IDEs.

Contribution

I have contributed support for diff files, though the project doesn't seem to be live anymore, so it hasn't been accepted as of now.

Packit

Description

An open source project aiming to ease the integration of your project with Fedora Linux, CentOS Stream and other distributions.

Contribution

Have a look at my pull requests.

Snitch

Description

Language agnostic tool that collects TODOs in the source code and reports them as Issues.

Contribution
  • Environment variable support for self-hosted GitLab instances
  • GitLab support

Karel the Robot

Description

Karel the robot is in general an educational programming language for beginners, created by Richard E. Pattis. This is implementation of Karel the Robot for C programming language.

This project is used for educational purposes at TUKE.

Contribution

I have contributed some refactoring tips to the author of the library.

\ No newline at end of file diff --git a/cpp/category/exceptions-and-raii/index.html b/cpp/category/exceptions-and-raii/index.html index 915f05d..42a8c22 100644 --- a/cpp/category/exceptions-and-raii/index.html +++ b/cpp/category/exceptions-and-raii/index.html @@ -2,7 +2,7 @@ - + Exceptions and RAII | mf @@ -16,8 +16,8 @@ - - + +

Exceptions and RAII

Materials related to the exceptions or RAII in C++. diff --git a/cpp/environment/index.html b/cpp/environment/index.html index 0213677..b051be9 100644 --- a/cpp/environment/index.html +++ b/cpp/environment/index.html @@ -2,7 +2,7 @@ - + Environment | mf @@ -16,8 +16,8 @@ - - + +

Environment

Required tools per OS

diff --git a/cpp/exceptions-and-raii/placeholders/index.html b/cpp/exceptions-and-raii/placeholders/index.html index 4d612ad..5e2b813 100644 --- a/cpp/exceptions-and-raii/placeholders/index.html +++ b/cpp/exceptions-and-raii/placeholders/index.html @@ -2,7 +2,7 @@ - + Placeholders | mf @@ -16,8 +16,8 @@ - - + +

Placeholders

Here we will try to implement some placeholders that you can find in other diff --git a/cpp/index.html b/cpp/index.html index 498b1a7..02f843e 100644 --- a/cpp/index.html +++ b/cpp/index.html @@ -2,7 +2,7 @@ - + Introduction | mf @@ -14,10 +14,10 @@ - - + + -

+ \ No newline at end of file diff --git a/files/algorithms/graphs/iterative-and-iterators.tar.bz2 b/files/algorithms/graphs/iterative-and-iterators.tar.bz2 index 5a6ec9654a328c7e5bcd0b6eda34785ac0c20737..93d70a644620c57a719c28a81f2029241c232888 100644 GIT binary patch delta 1920 zcmV-`2Y>jN4~`EGLRx4!F+o`-Q(2^m@VAi;C4VK>Y>WUjP$&QZ01ga;Mu0MDh-sk6 zF$^GR4H%e>000d&Gzw{;nHe-_& zS*|QGVM6ntrK^-tQ(9#hRRx4WVSn(mr~%42L#K_1o3T<28|HU#u@@7suO!{J6buk< zoWxpl!$%%O#1fcNVloRxOHM99U5tVU3128K7E&$_ZD5R>TrE(rdm2{3LIf>`g*Htq zDQHZL=;gJBaY1aguTdZ<7E~;rU=cD|A)*@g#>3$Vt^Ow+UxCyEgO-kUHGhR;wW&jC zLtt>zi&2B7B~KH9t+a32`vQNtRTiH4+&mu6nUP zYza6oM1FcUy`~6P1T_hqrGM}fv5=e2s%RzvnOYa#Lke2OGq9GJ30q3ukW4Q?bROS= z?XQ`c4*YY$EL)HR=DRjY|O3>5S1#(de3ULuMovEVVvaB zh*%gyFpy7dM60Tr_Pg}Iz1@TpEb>QQhJz_f}e<0ELOcc`K@0%YIxblN`jI($pG zgbqt+KNsE_falAUPbi$ZD+odhz&t~6k9q_lB0-EKA;xj;ivmG6jKZP1(=N#GjfgHN z?n2_^b&))!Qh%K)egn1RRu1ELU^hL@2f7g|09$;xW!)p4)y}H;vCuffkT^LCB2q9Q zg%kS$QT%|ibpcqy49FrM2S5i4uUtHw1JGnQ4iCqGcazGMwZy;^5#Am|!h=vU{kHy} zH}Un-ll;^4tu?_qLEJw~ zgYlm#Ie*fK94E0jb#|zAtG(>FCZ#umC`_2C~ z)0RRy_xIl+Arj63*H15f9Y-=f0a$g#hhv1hfQD{@PzoR#dPJ}W#K;@F1IQHQ4sE=a z2ttKIQK^36VPIQGCsSs_?lw3Iq#g}7g5lQjqkpI>8Bv3fo3|2s$-|aJM^%P6oJIA5D_FBfl;ch1u8u! z08lE0dcOwx!7vw?VkY^bUws~}MRqU^q!J9~E`f+*>`4r$6erdP{o)^()~yHsE<$hz zxM`1l_fJ9QllJ|8A4NNmDWYvY6PI%h%-r_*>X5gNg{e@lN{)bXxP{mHQNjmkT}ei% zRjNP_O8}x`oWk=(hluWt--kp}oWWmx9pF0jC=`133U~db?0)~f1m}vs{9VZu;X*=^ GC&JuxC0pA7 delta 1929 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 WNRc8%iWDjOdFX%ST_QaIPyhfSi_W(I diff --git a/files/algorithms/paths/bf-to-astar.tar.bz2 b/files/algorithms/paths/bf-to-astar.tar.bz2 index d13bfb9939c3bc6cf2d9dabfb752b91f3ecd4cbf..7469f1ebdbcf86f40d475ee99a786786760eb720 100644 GIT binary patch delta 3139 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 F-fYOu!9M^1 diff --git a/files/algorithms/paths/bf-to-astar.tar.gz b/files/algorithms/paths/bf-to-astar.tar.gz index 48f51b629f2f0978d53b9851dc6bf4300c9a8082..49f33844b94fef653e9176f197da4a34c3a7b1e5 100644 GIT binary patch delta 2886 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 delta 2887 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 diff --git a/files/algorithms/recursion/karel-1.tar.bz2 b/files/algorithms/recursion/karel-1.tar.bz2 index 3f6a390e04a0ecc389429e214ccd1d0f45ae079a..b21e82ab3d6b3929b84055da62b104b137a341fc 100644 GIT binary patch literal 5882 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 C`$eh% literal 6584 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 Fe*wz&C8PiV diff --git a/files/algorithms/recursion/pyramid-slide-down.tar.bz2 b/files/algorithms/recursion/pyramid-slide-down.tar.bz2 index 4c894462311e479a046545260dfa5a4aec1943dd..b2ebc349bef57beca541a1e34623cd76bb28ced8 100644 GIT binary patch delta 1434 zcmV;L1!ek)42%p8LRx4!F+o`-Q&}s-!km!~hJQ66000Jopa1{>01W^D6(k@+0%@j< zDxaDY394-mRNko5+KK8KGbA>rw9+*DkF4;PKQ^kWfmsnJkFUqqM`>c_%#<@6#FR*} zWJBgo_@bz#N^X8Mr4@U~v2w!JDwS%MrL0ss%oMfQo;z78<*|yYvi2gy5>Z5d*Y2#^ z8h^ry0#$l3R@b7c_rQsq1?sOcaz{ zqE3>93*xGkMT?YRu_F{*q6#RA6iFzeN+^*<6i|vND4{5#D56nBqtrOuoz=(7zwZ1r z$3A@?AEae5m7DZ;9#fsZaXgggW1_O%{D0|c;yvvqzs$7xx#?2Ux$Q71tT7Dd2J9wFjA=g?Te)?mo^ z9|Fc_z@yr1QR{nqLc+p?=JT!M9t?b_!`W*oBgLA~!zNc$Ur(fZeFqCPwE8@pJb!Ml zB{%Kq-HX>=%d+(wG}Ap5kvcNh8r#9o3F+rMx%G13gNk9=br(5H9fx6Kv|OXK$idoJ z!J(0vMrNjkjEX4G?ld(lELh0M%*fcegEK*yMU2cEm^BwHEL_yVnX!>##m!1AW?+<9 z%(<~+113mJ)Jp9rjCYv zit^*O``e*M3wBSCb%uN!KSIkKr-9%lo&u+BI?oy7EOi>5L&#)gHwo@OKOe8-fssWT zavV1nIOqO2`3tfsEK#AEN0{U+QDKBwp_Wz~$|mxHixwYQQaO!HO~%GXMSm7Jjq98* zzTr0&pA6#V8x}VU7B`#Ao6Sw)jS4jwE^2QmPuQWQ6DY{Jb9u30yrG#x1q~>fC~Ki( zB8b-p3lvdC#>R$YB8_NnqG`CfaYYj5rs0B&6-7|0IEp2xO-vb_42{O42F9jlX7Y=e zHWw^hO^PFdy2Bwv$honxv45Gdp|PR3*wC@Dm@H~ov9Xb%gEEO3nU){x-yVN0y#9Md z>L-0!{>xgg&tmxR!+!Hw<@aCo3ZBX>D)I3d0HGmECO|ugN`#9dN0iO0WC9?B0H{fB zz+ga@7|je%;VVo1O8Y(89JAp1gu(U)>>ABCaJE~&?t9<+JNf?d(tmN%C@LQeQuQML zMPR$v>pyL}Z|{h@^wn0st0|qX9=!A_r9Ro^K56OwfEvH4tjGlJo)e8i!+Z6^?^ z$ttUZq&Sy1OW`D7;W+)YFG*Epu2qwuR2GV;s!?6eqjA7ihJQkCgELH0RFX08lEW_9 z$nHGHOi6d!X`~#2TSYyp>U`3rDl6`EhlGdXNyb#4wbXbXW6mmdc;$O)w};EluK&{` z8=6M3NyUxMbJ0)aXu&{-RAKYEZ6yZWZuLBbbaLf10mjD0& delta 1430 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 X1OkCTAP@)y!lUso5}-U&08jt`p<%Lg diff --git a/files/algorithms/time-complexity/extend.tar.bz2 b/files/algorithms/time-complexity/extend.tar.bz2 index b7d74066717d4ea0cff24d2af33e80b28bd4b8b1..194d03dc5b1ff7eb43628965118901535fa3663d 100644 GIT binary patch literal 4069 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 P|Ha&qP81{-!4W%v`6i$p diff --git a/files/algorithms/time-complexity/extend.tar.gz b/files/algorithms/time-complexity/extend.tar.gz index 6305650324dd976d31169fe9fbe980097eeb6f39..4ecb63d36fe8e70d0dcfb1afb1ebe60d80619dd6 100644 GIT binary patch delta 1786 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 diff --git a/files/c/bonuses/03.tar.bz2 b/files/c/bonuses/03.tar.bz2 index 19d114b6f651ec60eff501bbb0ea8a1624d628b8..81da2807361d65072c2710f20065885fd5aff759 100644 GIT binary patch delta 2632 zcmV-O3b*yz6xS3zLRx4!F+o`-Q(3VirmFx4?|+2+xB(D<|NsAg=l=fx|KIum0sshL z4Ssy30000AQj`@cs!#%oRVqM;0g-4de}@B2G|*^hXk=&xKpGkYO&I_HFqnYQ;Ay6s z4Gj$pjR434LqKVxAOHpv5E=-QB55*{Jfb{N`lHB4ritmK1}CYBlR#)5rh%qF^#G|N z0U?kAXwqrv4Kk;uXqcLsW}2U=sp%U~dQCDiZ&5OT-ewswC^6QmVQxexqCJQKg*uKZ;c+SxcVW9R;5rN-7BIk0sj4X2)nazFBhOjk@ zDcF>kQsppNN%V%P68I-OA>AeHf9+IisXEy#?Wnv}MN)4gHY#3Fo+_~o+mau+r z+x#`{aXFn+^S!fX=Y4&Yx=uwoON`v=KSL%)QkS+1yXhu$RH4q{$@}_;f1WA)7FnF^ z%Sc*``f?q3%E5)??wOj;DQmOZV39rd>UF#Ge{q)>-6e>|>uJB;{{) zMJtJW*_#xp=;CTz@f=P@a#}qe+s{e5nfUzKCEKTi+Oo&&bfmrrF2fc9!_qwv&i_Xf1g}h_+7;7aB(v^ z3}dl@Z$ltMy>>sHoi6T+!D58{#e_cs(Ts}pj@Tg1_SGi z(58~l`8?^(f_dI2ndz9>qKhU^%(v9?1R(|pnu{IXE_7zqb?~aDnSB^^90If$O1fNUROd7eKmeJ+!T@a`;|;3cSFs0j(xq0%UZ0v6)h)ulE!Eb1sE4D zQ*Oq^E5e~!%*arHO&1FAeD_0Y}ByDy8^ zDGfP2OQr6&sYlD5iB_}ZRGTo`_g>P%?nL59ej=mZrC79vsx2ygRur%xaq@W(vMbvS zo`(EG|sQd8P~#DDAWhY!Jw_A_zHK6&&a%^W{tH~2AV z{!S8Ie=?c1T|SwsrO51J=8?!)sWvx%G-CfAR}^NA1n%lA-nFI$|7W&n-6mF!5VMXb zW{dnDu53<7r~N7!qeDeUN?{y5sP`PKJjmxpS}go?38@NqSBdPL;Wr#e79ccY6dwF~ z)HR7`>w7MuoH_nC>RkDp(R49(&h&Um_oLSGf1%tW6|SnJt!r`81RY~>#e>Q{L|weh zX2%`3lqb6ni3Y3pX?G&j*NHI0O z2UCiD2A)G}B03Z|P0d0$I#FnnWSvpov@jJM|IjS(W6NdN0vVo4d_0tzon#G1s9gh+ ze_sNj8YJkOU{Cg)Frt{vyJeGTGGQ8FER`5aK}IGDOC;Do)4(i8p)Z1^0gf?53@Lj z8=q8sDTAF8I_< z3QUQ?JjE0$P3`?d#R*R;NlEm$(k_=tftox83nfJ(%K8pQ;!lGtq~s75wOM0A!LqMNvqDm$c*FV zn5jHWTiPWbIY}ckY1a|o9afdof4#Oosl+}{j&54r6@)`JQ6|nOLTe@R;qd(zRYfTdiDFru_*HKm9=;9#^WLbOS?D2Dm9W6DT%uBqhel`9SPrEp6q*d=$;_15E{3J* zTG2@z31khWl`R+0f0#5!a_nMCkt`ec4Ah}gRGGLFIMq9q7U2vEMe}$x9?6@}$uo$X z6A1n@`%Uj_tua%Aa7|pyQ>38oEVOeyP4el!EY*2MB_4Tbvr%HvC6y`fF0!b{qFKS5 qvlOICl@y|m)e9uvkvSwUBD`pz@|Re#VNnnN7ji{7P>``B0;a32g68f3 delta 2634 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 H08jt`(^D_}mMObJ9Rv;u&YAo4sCEXH$u z`(|1HHwvrNv)#xcux~L&f^dC!P)gfa==6NwooS^0Op{A{`L=+11Kw8JsKH4erhWu> zmKQ?k10w{iAh4zkdZh0M_~kiZ^+OT>^Mep64TwD3AB_l7cw`cSOFaU$jnc*jtU9F6 zzg`~yaq+r)deJ$%=(5C?l6+0a{po8HIHY2u=lbVCh$AUKh!QnaT zh>ZMT3O-ILMu*V4A&e7klx}_M0K@52#9NJvW`KMbBO8KaHx!R*>7NoHpwc_1FHbpx z4|(0ZCLvJIArme@j}8VTofmcpnS^*<^slOB)H6mR3`V{~c107) z-AX|Y^e;&V0ks!;Q zraiAt)cfg6^>%*Txj28DlEm#Bc^~DUQvG1=&3bGbgMu_Vs;tgv7@=jk9T}R%4(mK< z{7}xS!h)E7mrwr-dtBmM%B?QnqK{?$>pky(bNKI*Hy3XzhbRlIL8F@Xw=WORM7sg+ zt24ed<1;f}B2`Lc*yqL{kbp_;Vso-`13wxJVL))hr#6hGn=su#lf3i9%wVEpO&4KJ zv*E-9+DDeH7EBG;kH7Z$$AJkx5(amakvNKkR)|7T;XPs3PMjoTtVz~d(>Xz3TTqQT z3o4^3dx&G$TnW&d!eRU9#~;X@2V5(J0lxhCJeQcHXF$c*eAX)!93%FvuXw>5iz90A_%yDLo zD828=oh)nUF_*0y%U0oX)&yqO&dOrTbUveR!Ma~5!!xIB$no(+Sxr^9N<4@5^MUd_ z!W7IO;c44qC}oHTZcNU+WJi_B;zF0j*+`6vwiEsb6HdPE_XEr}QL~u!p$Vokz5$t7 zqp^#jndhZ0y%C-aw#7&$Q$-?m5Rs<3qu~%nJY~i8hI^}-DBS?$$LTHSeT4QCNuW$C z|s)7_e;`_{5)0{M*F8^4o+DMh4TA zUCkI%kVx7rCbHZ_Gy}G<-+&zho*VF+0WSMz7N zSt2P${txLVY=zBymIVB3*0fQ&l$he9UJ6w_WPAY(deSEp;}Q4 z9vSAX@w}V=A#X3@JBwW-M^7VWcI8QH<>!&#Up{^=GKgfHbGm#d2)ZG-OIo4V$TUl=~45(padgK%S9_< z{YWNOK#-%1TL{>YmrMSARE8Re-hXA;nELW=U?SCMwEwC|FT?vXz2}q9e3cO z4eitOPNtc3AZi0U4Lapz!Q_Yw_cW0t3|!)6BFUca@;GitMq}wBsZ!EagA6=-JguZy z24q%-qS02G9uai9coAWU&Lv5YjAw9Fe#WkFL6tk@hzX|wyljF_ z#UeL3M(4cm856VCsA4JOj3p-CTO{+G&2Ij|SWDBDDEy3R@yLyW;zJw@ZTS+rXEMXG z7%Sz$*TpUpA3(31-=HhMSO)ykt750ACbOJR4_A~mhffdrSeT;+S^GgJGZ-+JKM$y|JtxV?FqS7h{BhV+(Dar6+` zqt8fuA`-qM0$|T_pht$*E%l?o5T_FGae3VZl&@eJJ=IA<97B=}l%X%O{#0B%s3R2A zYA3Z?%wLYU%kXQ&qe14DcfR}X<@(gIOK;Dd$6{~R3kzSm;`()gDeM1Tm)~#BWo<22 zP*Dvx%_{# zxosBt|L1_Cqt?K-OGmH%I(*%3)iJwo*)Lu|{nBz>{KaHEu=q0waGlpL$Hc+SoZ6)l z4-~tlpMI_!9aRB;1%oQc|4agPU%W{)dAYOzS=~G-68T*!iKV?On)LRcZY_5Z@RH@a zxVV~Wi1EI(UJEFofC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>J~#Xi3v=hO H08jt`r1F5m diff --git a/files/c/bonuses/04.tar.bz2 b/files/c/bonuses/04.tar.bz2 index 0d6a55d677f635b8eddd973ba1e62105a1dcce89..672928966afffd4a474cde102606797ec832f8a2 100644 GIT binary patch delta 2515 zcmV;^2`u*D6XO#RLRx4!F+o`-Q(1R#cZ>iA;*k*^f2j3JvE1CX+`B+Elz=)5S*FY= zFv$r|(ofWb$qh8nXbhSf18N390j8QX000BjIAS!@L7)u)000dJL8gJA14e)`4FHk| zB4sqx#BC-uPbdS*4FgP>0imXYLrnnMng9fZl4_oi$ixhd4GfJMWIaKk0MGyc05k!^ z5vH0Ak!BHpi3kM96Csjmr=&8crYY&_C!sw74*s)Ex8SMs9mtsUX)5Ii^wSq<}5eW!EoeU6!u0Q~KPtEmb z3NKU_QNv?&UJFs%azH;!A+0k2eHCiqcir{u>GW|UlTtMS%W=QM&dO@XVCg#x5cSZm zvV_=wNn6D`=T`W3G_0QmqP^T9Ti~98KP?-5Lpo!fC`I&A`U362(7(^5v1>HE_h(me z6Q^OCqpP)EBWQ_MbrU>eIm}5FI3pI{wOZz+USSUWdQ2LXWk9POQc&?2(A_vc2hFIy z`ze-cEaK4b92rRGB@>~4oQ0oG?Apm!#a@}UzWz69b*XX_D-0moP#ns)7V7RC{}(!lWH1`iCkCsAen(iO)!5NV38Idq1K(&nKYM^ajYpkIkx z5fR`IGqE2~J36ZcU2tv^evL%z4m%g_Umg9ON^min|sljeuT$QZ? z<`MMf0`dcMCk2}em6*ph5h(}qp`fRm2&>(HBLi6!*XZ7(GNycUR^Pg+ZQO)N9v@=+ zq4$Ro{3kgRYN()E|0+3v50n}j8b>RC0KttLJN zRi5N|Q|Iu+jX>pyv%40h)|n=bC_$u*De17(3JBUvMaahj3|t5 zE8}EU=IiYrLM)Duijy+UnjIE@rb@_Z1|T!QeKmlbkq(C)gC?M35s8DAvd<0XV zv?pWIVydE{t`2_LcxqM%!1&(vZH3ys(HXkWV`F3F5&#_-xU7GzlY|m zg5n9KE&e+eAE^4q{a1xyWC^V-KMw+(yMxvUsHmB*mN7+5w7p-7$LyJZs+O+aD}YSb ztn{Q!72BM&#Tr+PnYsvmS#cnm+^Zudxh-Eps^GVn?MBS_BRLpo4j)%|$ry{I8G`NS zOrkm;5U|}Xs#9h5PrJYo1c7X-%-l8wD%2Gq!AoJi7ozX&^#xbVE zcM;GT!%(X%5t{(n_>>THB!UAq^Z{fC226C>a}GMHmw>)5o}w0a(zx+(;ICTn%sIu} zVr=JsCt3{aHbUc;hrM_aM0GKU-63zor{3o`ye&O-Ba|E1BfnaI6+_F_cspW6OQNVs zx4NWD@}r7p`y9yTHkET$4^8{HeS+b+IGtsPk>OX=bgfthVW2WcpaP5*uLzL^g$xYv zPXPMLtQKmKuE;c8VZ%)1v}S~DZgZLyo5UyPgL7I=rFg^mL`OQs8y(nbU68pQDM6bg zI$ubY>{45D7z)IHGl)mq^L7JOi|qQ~T1Ix^l$sugMz9hqqnDa!((!5(DBmb-lQnH5 ziAzyO!31jpKKx6q22R5T{+W{&R(_X`R(z2JU{E2e6n+zD*aFNU8V-s?r3h zQ3xV+y9QW5+((7$V=o{SD5wg&cHJV`%E2}vrUm!VA(?o8Z4kfl1jHYDw?=3yq!|NkW?%O9#|!<8WHVi(v12eAt$ux6d z%_bT6axI8((?T;sijRfMBB?|X-r>%5_4U2>9Yx6-HJ$uW6%_rhQLCGlh{2(tXn>YM zlVp;h7f8*2vPS@*h%rE7OS;ifzmQxdYBz&H?%ItUIdKcgXP~MW8*Df&oE60s9U06I zX$4bu?bD0Dy(r1wSZyuQQN#_mvn0|l3w$Xy52)u?gu9PjZiK1j+hA=R(EvFhdz`-PH^9z^OHDOX% z4Gs5yhU1Npw4hk61XlDEBy2`*PAIX7D}Y%5U1woY_$U_JgnZ2!vkcgdL7+Y{BUpLP zjJh-^&Mpj08|=T=Gu!sL&yYRI`M4x=J!ph54spdqNGOx1Cdh(D(U%h9h-QVx1eWnV ztPV~F5;8TcLj*~N>gCMLvn-ODS1#W5M0D7H)UXX2gCi4d5>#GX@&rw6y2VG`DaNfM z(b00Xs#ldo4+#PAbYK?{aL#iLPK9@vA!AWs+ewWkCx}^KaTbV(Zfew3TR72pbbMi5 zQF&a%j1}j+`fpg2_R}+rMAuWbr7*I+1&Sz%=phAKP>TWEVb(IM;avnbU71D1;ZmW0 zlfICl8hAS-Az?(F76@Q7BQp@fhUc9VtU%&RK63O)I|8A_;|7{cO|gn-sI*ubvrKsW z2AmYo?~5vH0A0B8UJ0BAA|Gz|b6Gy#Zc z1fWe#O;gnHrX$l+GM)WgYdw+Xme@fB6@r7D-u!n@DXeR8 zh=yW7A}xpj84j1TFe-KASyW0Oh^gXMn^q_hl1UBJ0FDJ(`CavV`+OghnH%+^SR5`o ze>{Cmro6U}ld!Q5WeV#kPO&9l*FJNNmihBoMXLI~TV$*BPy7=4Z_&8Mmt#s2vie!1 zF5(?){QiQ)u+;QjpQp2>|zZ>e4*aEVrSlRl!c#vpkyy{n4JT9{C*It3r4Ou>?L0{ zdZyP!{O;20Qr=9gks<4>T32#_WS1J3@L5!QEp#*16dBkYxX!7a7)vkjkght2gH%;< z!%%6hE}9X{cBQO3#rGA#5gTE_*?%xHvPy)qW6mJ>tr3(MWh>dOxU%=tv?8z=f5gzy zve~*3LhcM1NUUlmf0Iqh)MN}gIy|p+v1H_gama`~w^dk8WSNjCqe+n<;xcEM;>|)X zB(o{#ZV7`=Ik|aqRrauYLut4yq~V=gLNB zO&Mcbe&VUOauFbSeGBS`*f@{fe>upTRYd~V>!YLq`2nG!q;OyuF{5v{vAy@@lyo1L z;f&6_?YpY$ou4@)5U>fOSric#M3>6C=G!dj%IWih^y1WsyK0g#b&WP6#59oJmseqI z&~;HJB@v@Gh+)jex@Ea4)gM+knok1IH683`Qp!~?!89?#4J2VtNrsqEe@4<`E@qoW zD9G)b6KM0$AYzeAPG;K0r-!TG>w9d^2>b{?7<-7}z~}^%-x8g?e?!s;sHmB-OHeY1>{DBZi7TT=Gme8eI!lW1}Z8{NpFVcfj zM%BCwEU2v;*BJ?tf2O1vi;E%(8MR)b4Vutv&fYoh?;EZGS%IKIF=~=BsO}DokQlVM zbe|=LDG^KGao<}KyYNYOp`3+s;Ouf<+U*e?_}|8pemIV__g-g7e4n z%?UxFr8f42LQ0`1B28-5I!l6^+Ee&Q#Bz&U*-h}&mc@G`qkyG{Ij~dM;i&K}cm^Xt zW{-RVj26Ebkp+be4G>QN{sl_ailn#Jg8K$QXFL`7p&4uPm#W{^DDp_xy)tP1!}61# zEwMDEC?bxqe_$td5XyxlzF}~&Np8$wD-h0MA5Wv&2CEm*^T4$X^>2+TpptHD6~ z$%MQl(RpNwpNM+xAWD@Gf+t(BWrPjHc;3b`@&Q7Me}JpaZPG2AtP^4yU|)R#8J~{P z3;z&ILG~+j;{|ks0oQh$5n{-ZW_K@@Fh2~f7Tuf0LcnqBK`n^Vk1m}^(WWyT^(JZ1 zt+G$jLY=J9nH{<&_Y@Zxvp8F~IU-QPCNQF-;Bw5WQ3Q5!>N~r;pGAjhaz@>Uha?3> zKVylUf87jeCs=P20OxPX5V8Zu-Mu=J!nk65G;;_bB4hojV;oF%u{Wk=~{0*e?CE9(bix&T!P`=TF5)si5Q5IsN+oy zf)GlzZ7{@GWJI{g%tmse*RizPjIo3t3oJu3wuNn@1xOKj3~5~`Tcs03$iWO?VPad3 ze{^$!f=Jiw3x}j?!lbYo8|)u?T~b+~S1ZX?Wd$UTq+)^zU4eH>ve-ka(yD>2sIYCM#*-7sEU-C? zL_{|=YAUUq=)5}qAg-vqu3|p1K(I`b>CI%$2E(>UD?UeV3AW3M@UWq4QR5-j~ z(@BZ8F-;W~ivwOWBHd!_O(`_$+SOEJ6GjDMCD%6&JsmD~$At^sIqU{VMCaiiA@}?FY5az!{$kcBu`T(4k_SO5S3 diff --git a/files/c/bonuses/04.tar.gz b/files/c/bonuses/04.tar.gz index 745aaba09288b8bcd7de420cb6919841591a5969..197ef1b238c5f34ced8e6d7b84c58d7b4e33acef 100644 GIT binary patch delta 2480 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 delta 3562 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 diff --git a/files/c/bonuses/05-06.tar.gz b/files/c/bonuses/05-06.tar.gz index 21d97c5bd7a03fac43bb2b71b479c2d64932f13b..eae5bc9da6f45c4e01fa66a3ee0bc77a328a491d 100644 GIT binary patch delta 3226 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 Me~3<9SO9nc0DjqGrvLx| delta 3228 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 OL;nXtABT+qcmM#GSaI1dUvt z_qq3eb*pZD|9xH6GgH&ur_VWEHK%9J{A7&mg?Xe6nY0aiLL0UKD8m0D*Xn@)vw#0K z-(LQk`uFeOUjPaKWP$Nk{3UPbk^ulEJS>$_yk!0cmm+$O;U>SZV5R^UBUD@pa1#m` zrJz@%uvgRUQd2{fvK|SPMot5h0phgwLcF*XfYCC#vIyD%cvu0yl@&h#fEc3%0PLp$ z0F2P*GXU`a+lc`QQq7UihRaIL#vWH5Ia=G_R-QN)&-xcWrb)R_YX1(~-FhQ=Z9;b! zQk6#AqtT2jP<3CjH&`Xv2WCL4VGu8zh%n_g4R{$t`%lZnFE3)2*|NrTLv)Jk4mL3FXi8-+}y=Q>yUJ2MN_x zXM5i`x<|Zit9TB@zq~xUJpd24jUscLb?zki_PyFAyS3G?? zvc!Eam~+%Bkwp-dW_Qe11xo%kSA!lHcN5WP^v#z5ec-R)zf|J?S~M>U&^6rMsqm9= zEhHr_Uo|!TeAG+(7LMa-|F^q9QkY7$^3%g13M&{xtyPjivJBEaLM)7(8RnDLl~Ek~ z&xS^r(4B@H-i)?|wo;&ol9}va!JLB?MqW>7UGz)kW)4_(LIX@ z1U1r=ythq)CsO4S&==aS27Ic-QAd{>EE5sxBX}VaJN=ey!U2O= zRfC(4Q_%O>ZJ8%_8 zbpX0swNR#`9;ejuLvdt~QpLPyL_MQwNSflYAhp}3mlyX=zlB}MWO1ZEQZ8a*@7-OOm&G%A$mvW?>Q4m6Nnt4qo zd}R3Qjeg#DJYSA&BsgjBDE)^7U`;!^;VhzEd4W zB=G>V`RL^q3hn$}Qm5>4;wJ0){rN(#^&=r*vQv#Rr4&x!l4o1DV2(;D(f-_0Ujb*+i zoWcDZe{&BZdFKX&Eg`b)3WI*2i!wY9Z;Ip3iuQ9nLeVe?) z%giMg-UypA!UcZGTA2s4n9&5+eQC9nIOOR`wKpr-lFCg-K_IsDwbOEZXLa^6@G{S# zHh1V2Xiwo-931t|S*+L@M#LjjQ&B>s4=*{t3_(^Xhxkx_pC1YFC*!OacoyguIs~?} zl@5Ff0dox2@D^G1Wq-GgmvPR$Ii|R4J8k8_f>3pAwSFC>Lj9SLG-T|VKL<%wII;?F zR4r?KILUj&SRX zgaW0ruoZVQ5DLUqFv0XHm{6%EL8Dd$@|u_=)kYxCfA@IZl}Kk!6P?uvL0sw^7YPf9!ye_$nIfv~5yE0_ z0|NmdDIfqP0?t%fZuBf~r3hQAgAEdUz{1Wj=EPd5;hQP43nxE%y zf37qCuT=aEF9KB8-Tx&OZGrzke)*4vMTMaJ|E|e(prILR`{i>S7oeAFcs~96_V3U0 z@ut84i3A}*pl1U?v;aJKPtwzTjY@pT@&r2SVt7ocwu&EMu9koLG#NE>!W*^VXs!v! ztoia?OZP@nUDku6@cIOeiC>30;F>|2nX~Gk-i+%(|jwL^LAq zv@6daU1w-zrPgH$>|=ogUCC+ycO`8pK{Z;Wb*@DPTb7G_^HxUd*rd+RR1hLlO5wCE zjW?57%J#7ZDAoi;vh(?AGZnY7uQYHmvH>J&w2`!s*iuR5z?htH zn%Lx#{|pBwNI^qUPh?(I-~3A?(ba>|#+j!Q`Y%yN#u4KH2GF%f4}bQLpNuu1zZJ_d z2M6DA8fxkh+A|yw3S$Yi8qalEnjG@1`}lQE)q>hXF~dk%AfYApbXc?%e|b?p!|4g> zArD<{1-~qRw|xHb1{|O+G3m0;-4U>V@x(;YDxPFHSS9vx zq>LaUA# zhFAA6hKY?~S7;NDb&u+g#nyWhhdeg{tS)7Sf3+M0z}K4x>`%;72a?>oj=#Uk-+lOJ zcAX?CU>BcbbU!cmAu;#rD0fca&F~BFMWfSepZ7+8KF#vk$41>2t~cyz2f%;+)uXJT zvTU9d-m$!^c50wnZ<{fzaU3DS72$X(r;~MwgWjW~()Oa9{X#67{B!rDBM+|7&Sua{ z!i>+rAN$`|v%OHc7z%t%_!^m+yMLIyd1Ij6fjcX?e0Cn?9Vt`ta^;$|*^S%F=e*$- zF%WDVd5bg=<-WAr7C-&afbsV=Vm0c#Ka|NCD0r;wgif_S?dVjg5>Vb1jI(G{CL^hg zAMulzD;Y)c$6+BChyPyUIl%%}02Ruowk(lzN{t5hDp20P$! z$j%|fR(-XkQNJ!>6d|(H@Awk0tzUSgS?qz~(a_g0iEHb0r;J(BcS|9yo^pZE1co3A z=-$zCjcw5@m)-@_i;wRJ$H%mWt89Eb&e0{)w;u?Umr6%p3?>AAm0tT5Ybs!*3ZZql zA!12Q7||G3NI|omoBLWiu@^5|g!9o0QAdWX2ghSk(ZXw;e+OIP4mMk~&8gku+YDm0 z;Km@DGFP1>);9CtCR;>O(-*krPO)CO~??bZq+JH-So z-1iEhcr!mvp6;z;?j6-TKKz#8{NNQAWnJ4+CMIV8Gl)X#J*;Gs>perc8 z@U(#ou!Bvv>A&R zLbmM@X#&M;O^YYL_FFe@StApgKO-v}|Irp)vP?U5sAQ1c#Isw6i*qnius-B zLUB&*pZ8yf+}@b}!*xwSKH!sF&TqyHj;~7+IvBdN-j|}y<@G^2rY`^H7VLPKQ-Yem~lmO78GWf?Q0FI$vW%pNrVd8 zkL;7aCY`Iu|C~T(Wq0u`kq^P?foVtd&WLCLXDL*e*x*=#(d~KsD1CEhubD;F2s1 zV+hVV-=E@r0SpIHkqa}lX&g-T#z^AkG_vv2CB~*(&b{|-Ha(c3)XO$zf*Qx*b_l0@ zLxl)?J^P*0W5K!$tRvkZ+px8_)fC|_ak^MMk^ovt!W)A7x)WO`Ftn{kCtu5@WX<$D z3mb!J#@%PdRP3*atyb?nbGRjz4a5$|5}Wo?x`=CgXNuo*Ggp7-#uaqGb>Ba_u{8O@ zaU!Bnor#=srA{Z4@O_J?#@t%H0QQ?h87|-d;9X0Ij5Kxqix+``DV8lplJn<9V)A

UJQh$-8*ZGiWO&0yTSj+CGVU_%*n8(wJQA>_(A|*7FB>v7~&p z2UW$$mx!3+@}~Y6E-Dduz5e$cpIet6c*kGb=ok5j9-Rda4;O0QvubmiCr0}$ioI86 zZ9M&$YxHL~Q+-LIJafnGyOl)1PdECk7aA8FLt&i!ufd>6N_>?2dbr=h{F*rx+;~M0d-08y}P&F zS546$t4$FlO$?}2*F~W1O{|DQ%F4x8L`>)k-oLpSb%c5AciDAyerW~3y)_P){_K<<55nO$@XU{8&Vm2!n$Bn8@Z?);6SixaphjKJRjizM1dp zf=k|t(MHSI$tuBsShc;^j=hY8do(Ye#-F29dOJC%7DCuZCW{DYn_~hWDHgMuoV_zxS9M&?=>$E=2x??9NA-!LHbPGuhWD4DL-m1 z>mpLPos=_!*KX*G_FL%b@Me#v@I4Pk;U@A4C7E@%jUF}GImbmr2HxPa1C^8_o+*-= z-GYCDW_$QyXP1uq#zgkzr3-?mZmh#!PCvSi&n|Br(ops{MDhwr^)F;*UuFjF^$mZ8 z%*?6}vXPzS8wL4!aVO^cojQ1bN#M{p*R;vYTs2yAZ4;?~xsnxn-R$u(E(?aM_N!VFs_ zfwb4mbs}HcG%>(BlSEsdx5`!o?Am_elygxFWA7>u)q+;2g1+ zjK@mf***EWVzZSHZR?9}=Rw=f`X*M5NI@%gG?R!l#$lE#%^3{rd$oVWvy)evISj~; zxSsJ!%qbID&@c*4d3-CGUzv+0T}F|x<)=TNhF+d0J~6dl4hCFZU$#2)mmrN)WlVE7 zc+PV*^_1>#I1}LOL3jQHL3-UoG&4IncRS@xq}L8#Ad*-e@V4(c^gDz27o{1Dx)JeL^VfuFoK={9}Kbt7{aEHj>a ziZEq?B<$vm7p>Kwb$PD8$KAeEPg7zvZPZT9o!H0XXj#R%o!wPZ|3)N#EjBT!5^>a$ zjZm0$x;b{~iudWFfjwrPzf;fg924>h7WZv6>mXxKpO1|!$?gBTAHXiY-E`ZHV0>-X z9x+Vs(Mz$Cv>0Pva5?lc5mx-djXU+`IJkb1&T-b;{xO}LWtV2Dj-QfWNco07voctDW7s|hfVxOx|);GAz9HUry9r7Dn5$fISyEJg@KK= zO%8@#$#*X?SHWN9BZIOdb6HqA?8?#Bv5wvw*YPa@PkuvJB}-4K^5`ED=e>NyZ2V`~ zh1AP1BA}Le2V6;ePU9fQzQt&Q-bMx58+a^3K9))I06(}{R&aZ_+`H(UV|u-}|3F@M z1sZs5x$eaoWn=UQtE)7pCdJ$=ALb~Ak%-50CARkjPLK%4##8i+Bu_Gv9@$h2tg2H> z3DoamFt$1HC#LFohdwH(sSvTF)PRKEb7BvW8@y%5+|NGEHYfoZ4uqr5LX)!BMyLj5|S3hdn@(=G0~|Z zLP;4H_Jv5uFnxLq)v~-2?Q7@8@iGG!>b%TImoZc0x~GoS%q1f%f(Ufnj=Q_d3+qJd z`=I-8rrPR9e-$d<3i}bYy6{~ZyE`oNu8rm*H*$ut=h$~@la}9${|Wkr827gNd>15l z?NugD>7j8vD}8 z^5Qu4T{jb{xJ^0#O!XpNF*-kY-=?XPf2|d(>-}Hxf)n)qhFTuBMeX;0--x}jdkg7& z!kE1HrdP9_Vs{A7AEI&Q@A-|keL7j*F^?Ec&_>b+^}ehwowb^%iryCN+I+v^rn;P! zuig575&VK=eQpU*{_XeEW3^b_uRFQCGrw$%*GYc;C_i!^g2aony>bp1N2yF8CU%TJ zs<y zAednssad=6woAQjUZBF2(`>k#H2M_b0k-1CD#l%Pr8}x3t9j2>n<>Pr(FYgmZ74T; zz_%*?W@LHjL-qcZN=WCYxvf^|>@@zp4=q}F33)BTibEHom#aY@xmRi`Y2yjRDUGF` z(}u5w;ttexswWXzRCasTm+zy{J|z5=Bx<1k$TQq&bN4lXXAK8j897|yG_4Jt=e{^ z1L-?KZ7~1#b~t?}3l+ao<1QK8eny4DzHRS$^H+?>yyQBQiu&?b*sZuBu^~rz96X5; z>CfzgDZ{aFsJ*+1cYGXR7a-u*;A-fB%$RO-HTh#3Xz=sM6?JORHFM&d%AyhKj~B?f z-JsuSd|bp5G`|F6>f=#|Pb7-CKX#q!*H@(7N8q3T&_gK-88Cl){rjKf`R}iE>rZCi z=O1_;etLda;~%H;YzcaY0KUOv>GIJs)QV=L1tEYwNm5dfgajZ+o^wO-H~V!roeQac z2?s4@47*_O*nv{s&OeoJPv&Xw6oAOvju z^374iY`OdQl;|BpZc+$et6PwM;E3YgahsBh%lT)0%g9!oMJQ}8)7uDr*V<&p9=Uvo zB|TyGXH@ZiskxX7$EZ(_(+&C~P$8nMxy+cre&28zurgr!IFt2h=k9cU_icADbFKJh z!@X3)(?=V(yH9RiZ#U*I3h{TZ841x-X&!?k|GpgxR=Sn2`}t;?f)wXP%)wiJz?&^{ zt9uk6(aNv|=BUSXsGUujE$*3Og2JtF_hC0FQ+Z`{7J2xFC2kIiu@E6kA2V3372X5N zN+CM<{kyEpHVu1nbbBOu@`q9{-F$;n6*jK?4jQ=csEU5GFbI-3LStkbg&TwH2Y#X^ z9TOxy3HxB+QEJ=&ykPbjIefy&?}mLs9*g6E~V#^L7mn{P?NwMc#MLJ%@iS6}ysi0apq4m&$9 zcH58UoO1$>0Weys5%%Hw!923BS$Y@MZI7A-%~E}X&Oy8vp{l+pV>&4N)&9n>Ed-Cg zUKy`#9fOTu^Ymvk$xHQ7P$M?8P(5B4z0Q`^)c#65`XjBTjq@`W#m&Xun|c9T?zT6q zp>+mPdsJ0{C_HeME&q$f%urp4@Uu9=skxLR)iAi5EEev7sjk_=T6QX-H3Q>^=&cDa zC-7%R*~%k~0xHbphPSq(T7lZXc{NF3pzx|*P3CtsuM&RX*ME2;n}&`$oQ=4v3hD@C2CCSWV?JbLXJ$JJB!@BGJwwLhTNy32w3V z>ig5J^QW;gZ1pl(M^miom}MW8kTDafRg-f{f2Nmi_qvb`HbYx%I3}Ec5h9Kwm@<*d z6L!}B9%m1uDWA_QG1J|9z7lR0M<$xy{k8K*vfAt~8?9)j9>+mS3M})hD2`&_&ER*JG<8Cu%X)+X4;qqM79E}N_PBlSl4&Gzm z-9aBdjQt=Er!A_!>Sf?&$M^2qjV3n2di|AcsR*U2DloJ8mB6RGX%bys;d?kDxZX_4 z#NQjovux%yhzL1I9dya__y-en+W~IEx@5{~_%Za89DfgiZbd79)zt-Z?$Bm~)gzo6 zc+p;Dj~UzJd>P5hq8vpS$FlDWZTif>Qzio)jm>4wl(L?6ok~kzQe=`7I z4O&%iY2`P--OHe6Xc+?6YEa8cK|>?DykBWJmPN=9@aY^PO=HV|adzGMptiLD>)_ge zg`QKIdCB?uALEoF!>%xT5IRU58IlEfd1D6~c~R%9bVZ$zq)jg2yyIiOQ;5bD0g!e<=|pQ4$_kP5cjcZwb`aH#Oe}8BYDeIY^tVo=OdcVT}Qor;eczyNpjOx<&>h(-3)OF3x!pt?KQDrS*EN!8ZQFyTCu@ecihI+ zhII?*XpFLy9u8w8P>e}UU`@}L2opt#>@Q$IAkcCL#c!%|i^X{{L^;U|@3kCytUJn4 zu}5+FS}1xNnG)9viyIoyMu#dRaN8!x*;Uy3gbZf4l{JM36S6ewnNc+QBe+O=*Rjbn zShLYF6&-le2xEz(Bb%aSBQ)w4IJj^_8)2A)A~HHYUwF`I&l+0=9inxu*>ORUFc`cp zZaOZ1$rbJ6n{Px(3Vac!k0#e+8ZH!6Ye6?mbk+;Xq2z2Q2gF#Bs00^LFBMr+JM(?d z`TMl=Xf#}Y;8w}K3HDW&S4^1?IXu^@hUFV`w>E=G*phxK+J1i}L#3#IS`SJgfXL1g zI#zCx+TIteP^h{M?ES zXqpYsHK6xgkUU_8=;g?okgLYnTbwLdv-Iyk$ynUw;u@KRkP zkDW{pvd9@b$L2(pk_55LLjByQE$^5VCTs4+ewL4Ob4oEj##u=3Y_cUl>`lVZigd9miB`Y56kGB0q}q&{lbZ&LJCKwZfz1<9`Ug`DCEJkx(ip^|Gs$X6BBE* zplcH6*{%LIGTho044tfn(sIZeGDVxT=}?viU}&u}gCk`#83j)qsIYZ|n)j zA!F%gNk|nYt*&|a78ujlv?pNyHfXSX-W*!U)p*D9{)@)wuqahsl`KO;hV@E#?#j9o zWxXtA^d5SnB_TCK%1M7SBZ)jqdMN^f7gwsL(x5>nMLHp-y{@rQ8CFzP3ZXsoBQO7O zRa8VkGGlmL)noKg(l;yce6A6XAevm3rQhCmQky|$+=w1(9Mw3h`+1xs(t%*I-i6G# zqOxRbPUz=poPsD69PmTMKFb>lvHYfQd~)t4~@6LL6*-8^Y>bMePtR$1L0hhHX3Dj7DB#3ZjOZ)+9WSQr-tea#pPw6QVLsEnh26_pv3 zR5$hbGb-+mF$>GX{v_AIh^tgcOSlq==rl}DkBWW>)+$e+GduI5MhkBa_yu~G9fu~d z+U7zRiNTPOTF4+DfQ*djOULP1k}zX+t%sFWj$42%(IOZUpwx)SH;HHAIif>@It290 zUj&WyE9_%fbC4Vb!2^-sik=f^Y+21!0tTaEId0}SJb0Coa3KH#eFd?^x==_IV=|F26!mg=|CTk5 zpw$Ml)7>f3$$Bk^9gwbD<4Z~8_b_N?;%Q;%XwgHOd7zs8P zgGuA!CEPk1A4fq+dew?|*SfxS>ZdT;z>G3S?F{{0U30p9d8)XTZh}&y#pV@QO}w#- zq(|*0ZpiZG&`xTDk#4}yNw%R8hdFN>1=Y)yONvk#kRmU-tcCaoCm(bzE~%3`59&UX z#d+|&w^*{-QHu!{9Tssi5lxv$SQ#Ki)?txqoQA~fB|vPXlI3DW`1SHzSbm=Vx0&m} zA{Z-)MkH3UqX$O#U$8n?XyR0cSx55C-)IpMrWjRnML>v=%EpJFLb+kW#Oz=; zH*z1?iT{TlVC>vt+|FzZL1(u5B~+P|GuUPGq@)m3xmsp}!^+QVCr9Un8B}~2{g~M^ z9MmJhGklnb9_R~!vjy#*`x{OP_BC#1wjCxib40mpIt~q}67O(J3#7-PUhP&a~*i9KO= zacAlKzDj0OQ~AjcuTn*c8aOiY^~<9(2c4MojV+@cnHKw&Y+9)7I4O)(>4o6^3ES*@ z&5MSg9Wo7D8BE)3zSK5?WXIG#rk9UE$_Gty&4o(x=rD|Deq;j6;; z@FDYC+MA790XSM*hzeEH7T@)qyDNUpUb%&G%VhSGal(D@kw&8?t6CP+5>Z%tiebrG zv^U4kz-4%FFkTz(-tKMtt1;aQL<@=|1clQ^%A(dkRw_xKDq7IH(z^>;lcXH7oQI`^ zX+xt~+Ib*IxW-yb0IIH({A)@?(Dg>gUM9gseW547g1>I*O&KOpcrChP(u2n)NyOn@ zuE&911Xa`1c#ngR`p{^ftD^UhJLA>lN64PEV$pN-l80&PdEOZnjT_oG8#);hAbzIJ zP4uMoG`(lh1b&W^rh%%*%JODJYalD)kdZI~5G`khU(^r;1dr5+$07`Ma~^FLDd+vD zJm{}P?XfUzNdPN9_-N*xvZRq0?rCB1&O0}xJ+wV*~?i)}@N>syIXT~jUJ z2bCVoW%3tZT$+odQeW+gCtRG`4p{*QKzejw%k+M5I^iG-T{P4p1+CH|f-sgfY8c28 zD~r|(ktXsMOp3E#myVaqV#y@0f}*lnWNT?HJFzgz#L1^yr1#75Un0t6Z3lWG0|hDA zbT*KJt#B<(7DIV>Utcsx`#GUp%9>^2q|8*f^TNH4*bWPICV-J?1Q+i}5eVx8z7s7l zsgjm};=D^>>UU6b*I8Q@+y0`e!f#p?Y4zIKZvc}haoxf-$umQ3BTs}pikKL|Y5!TA zy+2c>l)a6!gX_BzR9P@(w?j0fI`oA?dqi=wSpyic#sN&L@W0m7SLZ;M=hU*rT+yb? zQluJp=5G1*olM2@@ui;-IwI7^{{M_f1ez zjI#Sr2}Z}c&V1I1@*d1qwit4Dt<33^Rq5nxEUu!Q@O3nyj>hfh60+}L$%%^wtnepV zX=UVCz*Hb*q(xeD+l|{!jWYx;Oio65wYsa)2x8qgAQDJ3arsHO{!x(}LRVLHVA{c( z4ipLPiKGL`u0~!#bFhzB*xGSgdk+Vmel%I7hqMnl=P2js=3xx=Op!ZX^7YA#g19;qmKG9~mxgR#i0f^TiZWnhgb7-YZ$1UW2Lz98i_<3S z{W34!>VDkrJD8#bMAe}C#GCy-)gmhfO3H_&Y^4bT}4KEYnnreO)_Xn-0vD5=x?X$h)(d%Y$wx- zTw}JSx8bm~nQ6%q<@C43={yW^>6I2EYph9xM0$rcygmutpEm5i8p1bg+UdrOQ** zKiNU{%`us|r2v!Ss0!7Kk<;ib9_quCUbS4}w%Ef>`IuKyM5z<-a4a%s+MVX+JV@%je9I#hj0`ANK6%D#ka-UG70{c)iv*@GkCZO{LHTr zF%4Gy5VMub%}O|p;!3!+WV(ZgYDN11lAwA?tPm0x!-tXja2+I8}b{H@!cNrN1Z-OOC6Y#2^jV3Nf@RzozdQvWWres$2 z^h}PzIt)R40bQ!;_?NnZVMhtdSPxdmvv{QfLob+uH&d}slTP;2K)eTaZQ5hRJqpX} zb7$;S9f3T$t4&0uOR+FxZ-xO4jUt}LZF0}ix7caur`KG2P=$c$FPFMjW>H%UxHL-(K6@)0IZ6L&%jx701B$tRrKvToG#oRqY zA?1KVso5~Ic)()KnoBB(iQhr()P)~P14&I+#6=TRWdXx@_gzp^EZjU2(7vdkhZhYP zqPJH_5^@1D+EjC8Vc7G@%CUsEA4L9|FrPMjYnK4|+5E7wsg;&&mvw+A1P(Z^8&!=P zaiV-S?8~KAjKz;P++W@xTP{F%$xr`zn1Cx zvKq{_->$Gwpu9g}iBC|4lk&B5mYXUa2~=iAF$}DDyFv>&gHNaLcW(R$!=%Emz{qxw z2$ydVN#)o9^RBE#E?GJn43>0moCkcT^o6;@c+!=WVzef5>Su$Ega(T!6)1hWt=(NH z`*~V2Dn1(m_msi7Y!ogWyhaxWAKFI%q!rZr)5MA{**S3$?@Ki~U@|BCUr+i#bjhNK;_3 zh`c%Z(oW~OY+;h$8wP#seM{6~jN>T@VgW~LZ44!z}-3DT0yMW;Z=s@D~Ct8n#g=GVp~zP6HO z<|KJVS?OKZNG^x5^V50|cTZx;dSexXMzOpP@)GfK0j)xe-R>QOt`Qvw0fWRD5;dRA z=g6g7YShqzq;UzOBH{AZSZM-pI#Dmp_-PW4eRyC=woZZrP6lP3x)QO{OBd^Gb=4@6 zyy744R)fmFD@Re@==)pYp4Do1f~~r`XW!{$C&xi(vbDqoNt;6FgW`C5NQLu3k#aKZ zz>ADiMH=r<@|}LC`zxO$GaEGY$Z!QM;ltZxzT_-rue@b!t1~(5h%KcWAmKKO`sX~{ znOqtJIgOkuq=pkFYeT1U4R;n%K|C_XbBI*hUJeP8a|ZJuZdW4{8>(g@JxzAO{pjUv zN6t8pdmp_q+SCNFAOfCXd~!U*x4SHF)YIE{>Ghq%AZ!`% zPoNhb$59@&Z&^|oNCVrK8@=JwD^}J0Y(E(DB}@#WS)CmQ8x|h6Zv^MyS7NL-V4<}F6D#EqQqWo{!gZBD2r(qNy_e&|Q(I4fYei2i zt5MQB3-*lqSX7Q@+L{SV@d z<*1I_FJ1XQW1Ao$VUuj|xe6$aJTz`nTPio#y(zXf;D@=mUYkvlWp?K8OrP(RsR4an zc%&&ND9SbMO?y5x+>F)-_gqp>b5y&AZO|-LKI*nuU<7(86p}Myt)d&E zS!*&#kwesexCF^3RT?6{O2hk(mMIJzNzI@bOZEi(AKUe(^^3b4!n@4K`ZK(dNrhYs zhWn@1-FJ19;?tK5xeVR?K`sr1vtjEjt8!RI+pKUOPcqr=iwjGH9^6>WSIxc|xg3d|XoK#yj`#tvn$ z-bU&Ki?!<_erlg25uhfD29lT@|C)R!-mv_t&LUOL)}(tYh*K4VU~bZQ3<8pYfRGiD zyj8cK=7t2A5;G%V8B}0mX##RIC_T0d2Wp#A7BEur`7iq91z^r+!;>t?9r>pFpGc}` zRuG(S85>Fk;CfM?RIW`f6?H!+Fl9lx5B?SrXtx)uyf(kCoajyi$Ecq$)PH2iO?G=mRzLtW={K%3O`O$8IHUk6|DohlGiM#e5$-<7Emn{i%m-}8S304;F&A! z@i2CDOz^gc9tl)pO>Qi?1-2vY+foemRR@m3x-c%T{B4W`S~gwDNmE4CABcj!$Hnv$ zC6%$*0M~#ML~DYInm=L+&1)z#?!G>t{uuz;zq>siIOqH}B?zIUKZSx+fIS2NZzn&=EaTI>P_M-;A@`O5aoZ zK|w$O762HD;>iEpiX92_`XAUQSGo`-i~P(f((&jgLyv+(~yIUJ?gm|HGu z7PM#p1^@;GtKwNB)n{a9LPJj}ebECWl1pl}tw#z3Py~Q!i8P~R2>v7dznD&AruB>e zU^<}?Kr#R-#Z>&P5xhc%`TwxF-=q`PMsPM`{zKjT?+aT0J>Z2js%74#`}d$%U3cBD zSE(MnLb|S}B3f6S120iWJyEgs41a-O+8LztqZHRU)Ujc5v z(HwS8@t@Xxaw2JMpW7JjvNI35cxsh+yra2m4+*_j|MkB6_V&`$Z!P35=v#~Erq5mX z=f{JG%dU-I-QPFenuERt^WJug-G)$Y`m6`#?mK-C`V@4Y{-wL_*ZPJ1opI+y(80#V z)Txv2xys9s1G8nn)~2qrU#o{=>sbLS3PE)bz(FGMbvKVM0d1E--M`jPgT!$R0`5A` zjXS4=m((H-mwZ3zo3-C<;$Cko-}(hKt^0a+^V~c+PX21V`{dWXX*BoK7vIY_9%*LW0tA%q zHvPL6?z~o>I{lo?eJ_32FRNGT1b%hVJhcY-eR;g>@_m}R>ngXCn`=2(oqD?L?z%Z` zIX!hfT+M&#KFBI{>RSJGZFuL#-ukKK*Lm@&(dwz6Q|-=;lSAI=RCmbW5BM$3uZyRU z+m_3&OPWp7mR0||O}~cK)Z2%a3)k+T)j89y%dU_XzwW!vxUx{D2&w;INdN#4jyBK> z1)$Ag6|169@bbgeh(-qHq$6iiQp%W!uyOzZCIF}hkQ1d%$HV_078-!{e2_;Q^Z(BU z5fPI;TF>)MRRG$^0Ix$CL79BmD_-mAkpX^QjVfyta5QMd9zX<8RekQ`P*^a?zXB{E z$4FG2p@1?)M^0kMtEO3xSW#q6j|K40DMcV|h<{6`4@LeG=jEp;)ERjuq(Z0d;b_(a z7&#R7_5jd8ABGf>^=KMa8dHLNPQFZ_y+b&!1D`xoj$r?e#sxg9!CY7{fGRbeU65Te&}ZE)_v)mnZ51h)nEW$~MD{aC$Z-V*r5y2F%cg0&hj}E8gH466=$NKd)<| z@C4MG^fN&gY~JC|D8MS@C)Nw4a0?5Om(sXRRY3lG5RQPo$O0EEAxm%l&iVDNWdK%o zw4l81jFa`4z6F(U8iy&y%uuK9$L0Tw=kjg{FF0m6$EN}PlTwj00DGg=Yhky>9bvY zWOAqDUO>yOA8r~amzL1`n(xe5!X~*A;V&0C@F*73eF9#Qix$!Px;`A=RIK?X9u8tW zqF6`#1IN^T^0v_)n~2=niU^KnDH^=S`A(IS71Nm0I{K%}=)j6+;g|s-XTj^=@>Npm znwx-2KjuN9?WOH`M1H{UK;5tq+cvGL6JMIr*a%r3mj;#&?2gq$Q5%y1Hfw||)hc7j zPu7LSx-dB2kM&m-f9_04JvaS4S~wqD`Fgvo{*@ZcQ)Y+S8cy4YKG8A1Y?M{Wx%&7E zi$5iT2~#^k5KN+DT6>qMzfx)YkvhbDXwv`)tevMNCM|xp~GGL*lV{7P6_^z zs1)nAuDd2m`S{a5iMu4isIRYkBn13ktYGpYF z=PKDroG}<>^GukS3|lHn#84(~f8a7GklGnwO${KfCG8B}98k$_#mIDRWi>#;V(_t} zLsyqE)roaQ`RsBCK=8;nNvNc)v*a%s&yfCSQaYL|sA7NtLMV4lW;pjY5uGy zTA7fTXYEFfBLt{~!TuF0M;(kyv4t2qCNJ$n3F|^RM*=r?LxWKUN*$2NFsSTdAyBgw z;bXoaAl6{L`9@5aEdseLvC&wGOWb!dhU?_d*P(a8@8K4q|03p>~UQLb{AFH{25Si8Z7b`wpPo&-WZP9dZ!=>I!$=F`+ zt==^a2MV(inm?PMcRLwk0k(2MI~`dH>-r3#Drg4gL}D)65?7MT!x=QrYhFkU2mwaL zf@KlL=uz6;TS0M^_Wk z<6V;3a1~$Cwo938cn$L+~?Wud0!=uK~1q#b#K9+cp08@2+j!k0j zztMnZO!aX6YKsV<#Up`}&B4@v`X}OSMY{6{GTIJ!3`v8*rUj+M^<>*EXyDY97V$^w z;Hz`)jWPQBy0mAMbv$`|gjTfx-Cse${3^ZUYsrRB>7VFQzLHF=iNTE}nv{ zXj2#=z^8okxqe3MKnCN?IYXYh(w|O{3ZZ5zfLHMe!MC`|qLlwD!@VU{aLC8^go>0# zCzTu;wpLk4YDb;go}jfcPPc9`^gL1xv@tBHEU*m3VYfG@2r$}MQ2%+Ks>GL{;XiUU zJiiA;VBSO&#UzKOn{aekHeg9Mq8z^ zPdneP^vT-;l;9r#ww_sOHq(W!@gE(y3KT{&dM%v>ExCmi{ri<~@EmXOiPq@fPQ)u9 z24H#aZRz8>VNpQ$#S33V?v~Zhob{W|a@^=KrcT*WHPWs+-`EMx_oG!qIdS6KTa7H> z_3E$7D!i`-QQqOnfIbx7JU^VfIzaCtvK+_aDP;e9qhe4R?o5BEfmI5_rpnJqGuL^8DH1xNX!yJ z83jm7>~Rqt5$QtoZP@5iLhM>@b0~<6R0sA}FgT5={B%`$d1eYy;+a>uxF__(xo?8d z#N3kUG^(MgSImee03WwD%hQu7cEQ?zvt&P1-=wW(f0UFQ-Xj#T>*6-AW5{SxO6ZRk zm!h`RX8+n6_N1eU66|k!)@}+gn5sx-zCW*cNhAWS9lTm8M6HwJs8x9 z6S0xfMCtZ^f?u5Gy5^zxSdia3814op+Gw^$=$m)hO;}8}7DfYU$ya@~sXi$U2jtv_ zu4!0%;G)TSRJZ#$6#QZ&`_rR-SdE^Jr`8dcYD>p_R|FUyT0U9&`v)Zq$XCr2gNUaJ zb$H!WV+5-Ulra|vW_xMK3{wA=a%~;%90UlMp%C(Xa7GJn$4T8AmS$8h&EHqCZ7hsx zfV1@5SK7spUe0Lv`&x)X;2%*M>#%Z^Otb#HH6xy&KkeR?gtgKJ`RwCw&QT(((I%d(5hJuo@U2T0TqsD2d zQCDQyzci|_lM~AgqiLfSO}j2=XVxQH5L-e88Xx?v%t;un58|McXegL@wN$^Q)VLgF z7Wkf3vGfz^o9#68_P-aGj#-m?wFMIf2B}zO+e;LP5(*~KO~{Mil>P#!f`5TxPfv}E z5!a(jJ&vj+o}4^=TZ0k%1B1koZ+Qb_2IKrLBtD1Fw}Vv=wxJu z-Ib;&Idw_-?E@$V$0aRn;>ZD9L>6WWL3f=$!ihHq9npTRa9DkU!7QcmQfWM-LH_cx z>4z_!gx#P6e)9K=jkCz7F69K1ZBBhDpV?xQBCa;Mx3ehSUp9ctHS-lhle~Zd3B4Eo z3=|$S1VC$O@2QJ4Vj1I(7XN<5N=a5tbE|k+wqS~AzyU*EX}y?8l{E+`Wr{=kOzX;^ zh!;w0YBRDebDj@(SGjs*>(rd`jjan|P$0PQe6oEC#9PsS3MZ9G{hw~4tlV=(!~r+m z5IBqiJbqGiwZ94G4|x12^+qSnwL#SfUk=h)Ei18qYMQRB?Pzp8zZYV0pr;LhhT7{t;~*v3 z9845FZ4L$wfAC-6==(Zd=!pBE?O(C^j`C8XP`L2t``hiB6-LO15`$@5er_>!12#f- z=Z#wSm~0nvWUQS(b;t@}4-8E(nRnOmpnd|xE@N^?=Gc=>({d7l{|*y3aU_7m7a?mt zO5ci)Z0Q5zutZe!3P>LSSLxzDJv3m)?=*Ig3MMWOBt-;PDq7;}h{rW(%a11f-9ayc zp04%yzec>KY#`Z+KH12AkLUo)3mMTBs0rsX@CMLvvtW^a@d@Mf#JaO zXA7QluBa(|G~{FQ8A+Sf?R{B@ZYuZ5{>6QyWcb+2k$S z#(lc9;M)26-%J{eV@KtMR3~ zxH~Y#@Vi&V3mNh>0L>DbpYj6dsQlt|=i(uVFs462^zXDkEvv*ez6#x`cgRWHx*|61 ziKkGKgajy|q|%fG6!+OtADZIk^O4JMxA< zOT|j)B}R^cOkPeOmU=sEL1HNhjPkDsSkIPA8qmda5Hm-RUd z#oQ!qDQ#QbFCl%C5v+kgC9gLHp2mJQzx2aX<}2htOOIzVig~Y+FNUiaZRvF3!1!RD z5RS_1DMzdy|E6AGUsM>WxsTJ3=E&3bMJrsdR^O4^?<}VP#}+`Z6}cKp@=}-E1yNVO zqV;Ck4L<$lX04BHJy#x-+k(83c5(U@rb=?|7RRKQ`XHdowHxNyK;gK@!7 zmTn?XQ6v2CZ@r`Wi)CXxjr1ryHJUU`5U+QjCf~R5EF!`Rw{`B;`4>@g%KSvge-xjPaP;l~x z^QEH?S6F>(#d=xi?TZ;=pz%=N39dwsnwX+4xae0kjqKo@SGg?q`398Pn}YU|1@!mi zE}u@=tcP8zQf8%iYf5}y@VZI$$>-SAA=GX4aMi_Rz$67R<$~?DUj>FIWTVq6rS?#{ zS^p#ZMZPh^^P%*BiQ%HIK>ldn$6!Y%A-k{!`B(X>Q6o|?+X&orkckn#%1qKFEve2h zrP*d>8va^DEfXny4_|s2@|mD+`$5}~!#Hc{@pWtV)|H?1*^=G7Iqyb&vu*w^Iy-mi z0b{@WHV^l5ZF3-cZJ_;RY%;{3^LbtAzE&twbw1zmKHX*f=YIMOR+_Z_-I`+)P#yv^ zlqPw`R+Vo|L;3&#I)&tw*6U|a8ssVx0EP*~JCYyw1Dm$zV(*F_Ow50&6S?zn(uvf? zw;?7ri<9B@pFw~q<;P+R-&sMd=Oz4}Ay@DP6t7Nase#=bSXS8D5z~?JP&pBY$n~3>KrBk_YvV$gn%%+XS9o_~^5!?C?wNe*XaD;1s za+enbNT7fbcr;O|f=tXZX-*>-c|@>BMs}$&LsNbhZ;|H5#$+67TnL}xmEruUW0m^_ zJ*Y9{u^rYzM@VG*y+?+LDCEBf1g}#CVG9dS!(3AS6?)|#7Z27faPA4AS4`?7mclQu(3c$OL21yke2W7&&L>9U>8siA3SD%ydbYu zCb6%V&F;$#X6Ym~8d#X?E&N&SmZWY+(C0BaHm4zd_0t1)Yo@NpHr5jMcF6Tzv#>I4 z#shc|4r1>e1Paj~p_!KF)|IYs;MM3aaj8G?xeIfDa1ez&t!-mjl5?xE^ijY#$YP!Q z2d)3wi|h5e{U@encg5)`cvBVk{$KHShJVHGy?LFO)0qIN8JUCN*}bwm_mp8?g+~+r zEoxsKD)9CmdqJc4m7I;lkZ@QG%l#?B{Hx`!m}GTq<5%Me)Ju8S>M|+lg0dD;i8whz z@Wn7_kP|Fkd{#eZm`dM&30)5YtR4gk;0>jEbly|Y3_0~he;Q8q)l%y~UVa&q4DIqi z)#2QAhc5~hr1I~^?Dc>|C#$HILhdW2T6RlR&3+XrL@DieRyhgRD4l$xeWw!#OW}D@ zOYhPx_TVHIIC{RkY%7xY2(MQ6E}K5KB=cj=p_jxnK&jw&ySwb_*m}@$n#}&U#NUVA z6O~f3`c~hOzPzUi-~3wId*Jo6FPwRQ1v0#)qDgpUDv`>lddtA6#yYAgdeh@HTfo?w zT|AKF*+u+kJL;{*mj=Gr`Gco;|7zleHcT2r&wK88y|NiDCBiQDj1+S2rp>SmjD4r< z(Cyz89xa90CB`z$jm;OONDG=S@Wftq|6^W6K;!WCRq<6!JPoiwdkRVdps{978ToTJ zy^WR#_CSO*T4#4Xtk$<6-9$yRBQfT7G0~lilB}?gxlYQ3+6twim#`qx{<)X%*_jzh z>4mAH?xmw$dt^Lpn&QCPEHD~G8&E)1_bA8MO^gOFFa;|0>Dfy8I&6=UzvVVjoUvE4 z`2_?hdF@AIj1ygDE2}JvwE@%X@AW=*#&AI*C6OM-P-)i->Uyb?Y2D6U@fcAJ1f1lx zixQNvq}B}ctxvt4;lSQ_*tE#yxUa3RYqGG6q0EpB*f?tLH$}Me8L2vv6@_4a9`pCz zdi&lLP;vEJ>gjj5>FOZw2dJNb1u0m4ae{$75KZ6=N8QzJakoC@vQedFcE8gB3o5Y> zm9$=5YyD0BeCKJphW#* zmF0b3qP6(PDK4cBn?$(w<0SVd@c%(zKzVmlp0E{gq`9r%mbe-}43j8BJ0c;)m9eGH z${~MpbeqK7UcU=eN#2TKSTScx9QvJOQD54i{#_@PqCGQvUycaNZ*A8k2a^DE3}&(~@;)3} zmo}s0agt%ko0PE3W+l9P3N8}tvs~OK_bq`?W`Jh!P&|^}k^Gh0Oj}W3^l7n_sb6I0 z;v3~t*jS!#`QxHxMVhmAzL}o;y$A|lj6wF@45-K->nFQ?`}St5*_Ze?a1>uzGP3-V zsq(yBLSD}r3!Fm)_G1u{48%JM_8-{)%OagJcOeueK7N7K9N_ znhjViNGOkY&keGm@<)2NP06bE2OHZ`x#Q*pvDC}xs!_3U-(h_!jYwB+k zsAJ-*_i2WJKmY(l7|P}iVcB~R(8KBO&CMO4>Y8zvN%WTRuDoh6EZ5x_|0w4+6ks)Y z@@oJ|T8lsCVY_0@zajoy>?k^s^ob5y`FHrN?_^9J9sxeodr{coA_+%ltLSm+6tr@D zS<-y4ExvC;a?&$@blicV5BJFy<|=H4r=)I^YkGSvS+){fT-amB#nA8wBh{8{bk4;Baw9WjmY~(UJs!1^yRKk1Tl8de1+3EYv7R9cnROVb;^6>S;7i z=0L^Nf?M>Fi2iS1f&lVRLfN!;4xi9PMT9Mtp6e$DHIUCqS$# z-t!+4`R8_rtKGt1YX;Z1K>)ZNPh#ZDQz<>Qq&qMm?%Q!N8=gj8H)#j72C_O&mrTxFp=ew`Cjj=o1tpReQV+?jn zQ$>H}smg+vY6BJjqwvkLb4Ypl%y(qSaV0oYRaF5325lU@^#B@(l(RY7k2aZrXHsz) z@DikV3N!)OHbhXzJ6h^4{7}4v($Y-+W=GHr)+qoDss$k=;pA}DIfg! z3??;7!OT^Q=ZX{BQJ`5&#PM~(XYilGGkhO(3ost+u4q0Sg z)t#TVJO}4>@34wtbVTAyi~4w%_lFynQ|J@InFwAA35<>L9`A|rJ+$uaHv2nesgo0| zix5|-{UG1j*OKS18P97lHmc<|SVOu6)&;X8X z9>AFIoybfb1cCry6txHIW&s6(MIRV^#htnn27^AkoSybxCTdNx5E)S!l(PgL1=3kB z%bu6;A@op~wKx7eutk*Qb4(5Uwdn8i=8=At;U?s@%RW{EDfiv7NBF$XT60&{G9EVHG@Tl{2pl3*9 zt<^1;yrj@9)g83k+OG@RB6&x_jlF|)VB3Xxug!-alroiUFbMsw8*!+x{Jgi@K$1Q-fR-GMWs_ZoDIeJ5 z#Y2+fO}_nxZ?)Nnkw@!R9#(}ut*e$=6Tai7IS8OJKmh?$EtE15fX^|2#Kpw%y{%x9 z&b+p%<9XqmVlK6``2oYQ-f26p$;?%zqN>U!bIG$^cIY)_iEKN4tzJ%sCX=fR6IjI% zS&Z6r3Y%H*X}8 z`$WS+pPYB7{;E8;0WhP`DbOJ(52}%scftS}Hed~tZI>nvB7sp^F<z;R|JogdHoT<=SRoUjNi;zjA zKV`{^0Do1jgyx$2I$3JA!l<-x#__#I)(#IBo)(`ef#a};jfpH{_$@YYqI^e|Z%YgFFIj2>hayv15(vo|{UX-{Vb zVdo{jve+J6g<(qcq^WIXmoAH5^QIrbVpv2V+9fO@0ZKV&5(i?vj_I3XrfVh-8n9d1 zzLSdnGv)^9o#(nTrkmV1hrDsRUdVTM*$dJDDn%eLR0IPoElK`+-=t-kXaEV|qSzS_ zJf~=oA>wG&H#_KF?4ujPOIw64?pTo)2ifc-rzUBE9&RbO*YuS{N7RZTxPEv{U+e!U z+OZ5aV)b4%XSG5Z)J(}4yiF{b&@zyXWMQ>j>HFiQma^o$U+3c(weS3N(QCB(N7(D{ z`59W?T1bolL^mUyAcBD~F=8S8H`5!la54p?GAo&l^MHJjs?uaZIS?>FiWtam3k{?3xPPjV5d`_Z_i309>2wC} zP9MzX*2bsTqIVX9-)>|Q7VlhVKrA5TVeIo;S1;vQ=+zc0D}dbSd0CwHrh(z3CYy8> zgi{LILwe-l^Yd2iUUSh592MciCF%(5z~3ADqkcbZj9Rkw-lNSY-vS(SZOOW@4LxfJ z%KRF^>t@0cy`a(zF%-!G!7ZF$#CsM2MagqUh|p`M+9Y`>!mcVf251dgP2Uw*I!!#K zMiC~HU~Jr5Dga!f31FfYG&?w?ETXG|i<0-hSt}uO0$mWiI51cw1sssMMsW-t1ER#t zFAP{VT(dcsh3GZ@1)`v@f6m+Umvm>(zj=0-l80WpBXg&M6h=j#t42CNWD7)Pss^#6 z&~dnF$h)7GZt~%WH>bBP1E88wnpITNqEym6ygQJqnC-5!$4@Z$bRy@Y>zoxcJA3}J z<3vHvCjKkn(s!)q2)(m06l%m^v3ugm1=58IjSSn@_LdrgC-G+JcJ@AY!Mk`>o19z% zB~f0xUbzEex+KA*i`ZL(ZAMHi4hgIi-D#0E+rxLA4{W}7swL~Xf^GC&nmea7EHk%u zTWBoJoKD0a-O2hMrZ3V*#@w9$_sFm^xYzR=$0@QPLZHUL;*4F0IlbAHA%+VB(>{a@ zd4wvcTk=5)Qz9YFqDK>r+_2@b(eBdH-COtfL5FJcT@A#>>eNk)m%%e@_O;R)s1!S$ zx>Uph;%-;o`7eDK4nY8~)`K;XdW(H2pW*#XU2P@noV;7bLILtA2e|d!+4Pjh2hxV_ z+N7Xczo@F$5v<>cm4hSpth7rE2B3=UTE|Fero8$H5&llvLbSibu|7{McDLtX-QrrI z=31GO4;?$yfAL;g0tjFj1p61nH45Uk0=Rmg%oAifM-|^hZs*r)G)SlVyh+rGAly7b zC1bL$;d`(H%luKeri#M6=BS=nvt9E^9hAjTs`@o8bgt&=fxk)) zf+n0tO=J~WO}H-6N^9l`D7lzyAoH~nm?}KNe>)GK`kQ>EY(ah#c##^2_PIe{T(0IT z=Hy^7AC3sB2p*Xan-wFhvE=32`w9c6l~f!_z5!ehjjf@yLJTVanKwf+^J)k6)8)#z zJyCpxJY@p2ENec@1(q_Z8)%-7HjdL_TT`3T`#)@#a^seY))?Fv_n9EesAL5hjUD;v zATTi?WL5cgpJwZZe;f1G%5pC6v$MkRqo`YBJhWPPI(Z`L)mQOV|m+)6LHtw76hjzx1edwruq611Z1_9 zokolDJh%x#Tq|{Z_D|WgTX~)2!+YTA3-A=#p}C#ia28@S>d;QL{)!mpmTjdNt&dnL zzDsCT$EIRIR-4iEY80~*@cvPQV(8YChkBI(>#MU)z}3etOs&~^rnqB9l z86doDIjvDGJ)-)Nd3kDN3e%aW5B8Q#e$M!?&NT+VMr!3^#N0QvwU+}u(tf^i7USpKrn0CZm@W0AjDQh1^_mMBK3{P_{0LhOHY$M-rx9i6z|LvPm?5+ z0EH-E$0^?My0aEkSVmJ(-UR^rP$#Ak0cgA=h@jd-htzdF^MU&ezaeI1<*`~CKVI>N zjY-Rn|y-1ab8m zrccPki08sP_$)94Pue^EG-c_0yCYK>2`+QiR0&RJnK~1hq`h6a~53=G8VYmkU7iMb8wcI{aJvnGM`Qe>6q;lA!Hb*G832bHg=go z+3VV%d6MR=?5i~}08*Asm^7Ivw&=51%V&rlFc{cDjyZwCpX9NAPh^AMf8J;$CkHr=U5GPkqaH91l6RfnbF=<@?Y{X?s;q{0_S zH1ZA{)(M%Ltk0**702&U#ZiVLRFeiub$ypCx_{4Zk#1#_0FA~)%>CN))I-Fu7?0mJ`=n8Y;Ov}{pLDu>% zMOmaju?l>k4jTH!Qru9ZUntQ4sGXp!ClwfLX$x^)9jA`;;VHBF*!E4x;IqcqdXSzO zmC}tlC2vrwW}tTvQ1Cs5@Vye-G+1Ljy7XV-j<*)3p}akp8lPborU+b8FZKodwVb!g z{Jbq1>}qp{WmaWHeJVFi{du902NY0#EU(EGDZ*~YV}FLP?nCPT1SgAn6#D7|3(>D) zV4tql?sEnQ`2TAIWQ#`odSN`}l{rsoje;%`A1;USApU^RrUe06rwf2KSn&yo3!t4H zI_^{@XN%J=bJuLeAkqJ3+D{kj2ie_}Fi#C|7jG$-jh&R6+d>nxTFFrWDOY;fMzr?W z=|)cAG?7?Sl$ze^uO!Bj15pm^CHSHzT5ssK)y-q__Mor3@{|p@?M4io)iL=(@pQ$% z)W{FvLO4kjAJB^0^yBomCY@TkQqDBwWy*Nxdlqmu`%iLG9B?ZBNxMYuiB7jRU(c^L`;Aw+~bcW!u@an_c?Rqh#-Gu z?IV0d;p|U|Fn1loHoz|po;8MmKx}_bDZr42TZA$|&y1w{iafY2y`6)_N^`Udhr>7$ zhV*#8sX(oOci`^Pq3TTmg9ek_2RU&NAMPevPjVU?_F`$5E9+r=e~LR-CX*xy%C57f zT;)6esopZ+U`?FO>jCwel}0&+65@enI}w5x^C4%uP0;go8i^|fCIKt}YoiH)y@KX0 zH4B_rXodRU*+?1(H;6e)@+<@K*{Db^sn@o(R1uhceXY%3R?KqJoSkk-1iX>niHO zX-QXFqehA!j>93z_D>j;7nr~bw@;p7{_Kk{11pkT$b%S%aZWs@XSl6yH2v~ zeW>8NL!+=m1UZGGh7U&pS^&j5B^b`3z*aCP5&%&4iwOkPcw(ppSxbqvo>W{l zC}?2Hy}qwLWokTyJ<7l5NOi%Z$eR4l_>uUJt9m&{Q-2n3YPzyXUks05>z*jt5Aj2! z=7qLku7i+HHZ}xBJQjovqr-uZ`YRV}Px<6+Z>enhyb9F%hf~DC-r`@?v)*G{7M>*C=7n0~fSSv7*F5nZ{6t%X?Aexc9^rhrF2nrbHLb@eF zF!Wv{3O>;Rf^$$l%Xk{Zg>;<)Ea7+aIAp7$^h(ADTopUVnU;=Sf$K9>NX8xxv3{xf z7kBRhttvMQx^X%dcJV3078m$XO~S|d7G49Pq?>1JD>Vm_Z^LV4WI|x?C@%_GH$B$NosA`2 z`<*aFc)y3S%*E$_t9v8g41xVnPcKXfBleNRitm^(?296@$9UjT^g|v z=A6y8>j&ZKfkjX%sql(i__pw%TRO*U3*XMV%<`^r?JQYF6V_m4PK{NtT>k z>&6?Oo39kmPyl8_BAym=(40)hgUcnus5z*?JKH1uWXoM?d8>zL1lQHSUrccIxpaWa zg5djAhx>f8|G*$XFfo#Lqds2#EMZ`(QuSuqtW=v5onU66r;f)GJX*y!LJhpA@ZHD^c&7@=P91sN4n<0 z@5si-y}ZYQEuy>pH)h=o#yUEYo8CX8?=qur*L8p-DfLJ#v~_Yo(f}br#q>xk24b*S z3yVAshQP5}ieOfP5@vP~>rLZX7W z@xJ@Gmicxh;!MLpVZ=8H2B#Mat$8sB5D5-LmwUA2l zaVF=SG`QyO424E3ot5HfBaEsQ}xbj}8gX$`k7T>4&q zf_gH1tI(jd*{{-Aia~pMOy`{*{yGS~gWnIzmUQS68N)!v#s>ZW}4!caCSu#8#>S0k7(Bf;C`>02Ikr1LVL=X*7Kmcm^m03ds z01u}W`h{b2cc_+TW@cu8nh=9QnVFfHnVFfHnVFfHnVGtw24-;RL7ADEnVFfHnh=BO znlva!;)Hq-jB*iJgliCkT!m7F$U%cu2sk9Ok}AeH6L=$RCN43!OWZ+`S=vWf=OMF|Qi6UlYgzgm8^BsK zUa?5+NUeWZcJ(Y2WA$Pu-c+PPM{%?K%r>)Sr?1yiguuJlC77J=_IQQCD)kIY{BX6N z$#^I)$Z#1@AQBuHU=RQR0hxlMhNCv1AMKvq&rw{$L;?U0wWnY9XPrSu9o&hVVSmI@ zF>03#)*D0eLcF zY7$7y%q4JHJcUUMq?ayLPzV61AOK#VxLN6(bId>;#y}{9#TBF9r-6QnwU2p^YDqM@ z0CrE0fl0ij8#b6FSi9OX%8Utze}nYFy0oM4D9`2K70BLs3uLQ8ep^Ul?~F*<=J>cQ zuf=QjUgsfAtQQ%i&{L6uvBShSF6kof2Nav|oCs&i&335)PKc&a+SG2~Gy3{#xfsZ! zOhFaXs6_0xw=1x8Z)-_J03XgilvUxo>#@xtp`PL{F*Eaydv|=k3;pHgt(B?Yd`wZl zn29nlW(@{N(X*{EQBX!?W&xV$p@<141{FZVB$AW^G(DOK%)zV$5SXEWIda7SVS$2_ z#R~yZ2@n35ri%H&yeaAGje>p}CyeD9whX`utKdpzl`+rv;KDkS$ z?ViW`=p~JS2jfIaBGH)4Cc{9oql+K%ziI3s4f7c3krm-JC_E@gqy*L?0JyYVx0XEP zS#D-0Q^90ViiM9z_*!92&O0`GK3nPSCQns59y%FL012IkZ{P_$h7Vj()9)-GYZeq1 z&}c$N@CH!@8Rq>R!RoU*rKA8CQeCddyw$e0+uidYSQR!lt@t&?Af`uWD_(}rhfr|w z(7+G`0001BKpxoic*9X-s}~lzMN)h`H%9&d$xZugUUpbE!Xd zCF1Fg_ty|W5H=9DqCmL2aB}ck=`GMyC_@Y+HvBQ#3QA5W>*>^By_z+rm^F<&yGhRe z$l9fc)~(CG?9|fpq^lME^hoes+Y7jhJ}!OVP5M!|^1(^xX+!PBCt|~h zU5T<@D4IHwcQ`sUcpPHm z`!cR+_~JW9jKls~SZ+kF^*(D!{f~5sQedA+=oTIzQA9N)1HwfgDUOdp003Ad`yo(3 z0Ld(tSx}+AQiL)my1Q5HY;zA+ezh+223>gUMSJP8qJ?Hi8)^wzQ8f4Kw^)s(8o>il zBMeK3uH_u(*J6?OcnMlKi9{DBM)2eBa`FL;K_Pl9t4Lu2n3{;kL{4o4IQv zQ;rSmP>ZDQ6Ezs{^Y_l!Ps?^isHo1BaU;o6*o!V9`1zNd^hQcxYUvLpqA=-2yesls zU#xPfEMJ8D2kYnVu%RtgN^qv4s!##|1&1qd2{xHV8Ydsu8L(}(!P#?bLOnfqqOO0v z#+OGeS^eZ=_hZu=-XGI~6_w~}=4)o*ij-;S z`jrVVf9)QPI)MPB_pt~hksV)LHUSZGQXotNvuL3SOk6TVueL}&U$z1sBJ@to#*&pZ zQIhe|ZXPk%=zeLvy~pqBWhvB@Szn{#-uktZEfhl|Izw@Q6;_X+ zz~5jUA;DS`)o3u500JPE&ku7gn*zdfH^=4vc}U#+s(SPlOEMxIyMrKBm8u@7HJ->(7@IU~E z{I)Gv6%c=#$zHv(z<>hVm|b2~PzV7`vgsAWC>Aqvv44~PNGr$DVC-t9CbmDU#0zio_ zCtHC4iB|I;Y2cq0Bi6C*6EIjZE8{mJi~G_#XmmLE)`|9f=T}DyCIx%zjTLs%e~scN zlv7R7N_=T%KmsW7-R-N|#Y0e$sit@AyYMd7DST(Xaf58m4yz&LpzvPM^V|D(!Jsk+ zp(`~8P9rS3=i9$p^W>trK>wUg=Sfqh2CX6gL?n;0Ey8Y2g~n+gmxn~a6$UWEopm7q zn)F@R@~I0-xx6lQ#Oth^#J-s+A>g5%dwO|U&ZkK?#^_509WjWXyy0(p8&7wx4{yE; zh#9zyKfA$kE)ZAkmRK|Y8hZks57Rx3V(H}RlWDo_@3j;NF}3!%2)-=(v~qrzy{u2g z^LAEzhd6&uC%kr?qL}pjI-4+rNQuZ9f^5pJv_8CF@1L?Du-m;Ow?qJc9M+gK-Fq9C zHZJY($$)~2vMGU|3<1%X;0gh97)^&edzRO1eR}dadXg-seWD%UDz#+mSs^37_pIA$ zrbSWrolebKi&;c$Bl zcU$fMA}t3DXO(vv-SCjw@#mHPY0l={$LDMUpG;;Dp>hN02!sdvoIpI13G98rSQ=lT zP==MvFb#0Zz27C_s5%S~BnuRx&o-Tk*RdV5_Ea2I^^JH7I3Lit)O$#_p0Q*hb{y`! z>80hkBQQOb#!m70<__v8x0Xaq%z7qUg`S0lP*5jgE5JS~&8}V~^p&9)xoIG>q)-eP z&jB$6?2|w<#fY%Ca?8LK-a{qj1Ayj@!=|~Hi0O`KcN0x<#hkH z3Q)4@{{ifIAE3x``mN7Ncu`xG<)uo0(skhqv;W$djxxL8^ToV9Eh%!4HfkkmvK~ly zm}D-LWnAy-FI?%o$GkBrSai@_{#x_)6ak6E0M-FWy*{hzSQpZg1EP!@Ws6kl@E+(L z*VM4gCxec(iwXG;1oxk3WBo6CvVs%cpU7Z>s(`617bMf(2};Y7S3wHFa{$GPSSrPF zFjUoE5Nj`77G9L07hBDer*-MAvEV;l1w^;sZc_T=WTvRZTB51%aSzuv$QGz_H1}i2 zAVyu;+;a~-&PfHKahO(NIa$KfssYd-*HY$UD~Mjb=Ju==p1af!$DVo)2&m|@Q=c| z&u=Y({sU$y@VITQQ&^XDXwTFV(d}=@qrVH$U zRVhc$L4LKvvW@|5DGPLLuYAz}KubC9e)E+c`#3o-kNtRSd6pyz5aiPF#sC#&-1IV2G> zmS-Syr1V}2GG*$-TPbOhjDjDw@?ntz#3nD(iJr>-^5DADvbz%>fLFZzHBEg)B&%XJ zv(xW6J?%Om19{;NTp%0&B}wUK{1U=;lHf_}o3S!<Z98)yjvO zZ5q3*f3zt~E=w^@wDtJPu+&4toS3Dw^F(au?Bte6Bo33wnvf6k8aC8$KfE&m<2@8H5#7itn zy}v~*u-2?zrhL_To1Sc2DB(y({H+p^?8%XX0Re#&aEK342ln{Rdp7RY0;GeYKbOBJj%?4U(94aKc|tgQdn?xMs7Z485M0tfW0dH zM%*gL2?Dhyp}=;*>g*O>3wBzJE5TLhIh=0{WCZ%?f~Ly>dj|QpDZR{{(r@$Ufgfl1 z(R`wC6fntH^-xmL)R+h%3nCTt*XPgR>o$>ERL<59K+{f_KnFnn+>)0fCqdOC$vJ^& zbS0#jt#wnv2OE3(SCxC$AP*N_k?gL_?dfNQui_b5Z5dz{nPv3 ztI~<9F^9CsAGZCJN}ek>hC`-5cr@3>zLUzn#B2lLJ3NT;J0hFLFy&msqpP=&;ItU7 zwxROLvVcgP76n|7lqYdTEO;`M12P^SL=HPDRj;UkA0q+G&eNlway%TA(i(-Jz7$?$ zH3>(dGedIGAe&JcQGGg=pmvN5MW;D+bs!Yj#%sj&vMJiuUFlRfim_(700imqj}JP4 zT2lg0$N>j$4osZtyisi8Vq)vubkMH)acVdY!4Vbkz#tnKC5(WJG8t9d%0<~XL=&j= zXLEO+8wJ{!4@c{L8=8MY@#v?ljJh~D4UFsC$fv)1&6Oky0q!>$)U>T@1RAEwCr2} zS|ayG61d|gW2m9CL8UXh|+Q4tK+{xkL znA$0}a8_NJGC}|?LI6F7BeiZc#D3lD14fZR?mmcSQ*`<)TLI;oub)GFw*#8PdN>K;lvFYMMqNj_GC8(i3I`Ol z!p))61|`zksr8B-G@D%FE3d^^H8fm*22b-&uVL-eVo4+E=nuyBPNS}q2jY{+v$v`<6p3$Kv34|M9S)xWly5}+aaa{nWW z4!Y|N{|eoCit9%7u5fw(VlDK7Al$EtBBIij|F-YCq2BTNP{~73MwJ5AX{{B#*~--_ zQ-H&H*vqZ_g|fq4yd%>dtbdP6?!l6(w~--}u&vb_lRJ@Zz|&C%6k5?JnD~1Q0au@I z?>~CQc_mM0oZFS7(^{?;eyWIZbu&rvX#(IkIVm;gvUzU&Xqwf&uHaGkd}da?-tyQk zuqJJZ>|vUFy~YddM-?<+z+JuHUL5XJe4T3Y^PFAMPRk@`E?o(`_@?qDboB9eX!AEA zdOw&FVy2x_&9jd6{kK+<;w}Xa4Oe-I0>_=cV`@Mc1&xP4svEN!dopSAahoG}M^&UUl z4M#1WcK{nx>QVsR-@6U%`AYzh+gqzbE{Gt&1Cl!3FVaV(=xdzDk|i7qo;|Bj4>k)+ z>>({^LsuwnBy&pH|N`{t<+lRqiqZ*}UuTlZ}gKf-K2Ar;$KmzA+ieftv1 zXV;fpw}}x7iJbRtrHWp=Og+KpTfJWa9ziK#l-y1sD|1@uU^9aMRg1qqMX4sB+9MwFY!Z1QV9! zr8vcd$jE*GBZ`GVrrLM2yXXJ|>=XLLH)#+iR`whP+`dmX8Ln%4bI*05@9krW0ZOkIpQ z7z4;)dJGLTmoIID@SR4By*mtis=O%r(Ro;>D(N!2l9`k)K?!Rg;k^mFssbN<&(OYKa$M0_M6sKHd8*K7cV$CUf zOA32*PD6s=7&ZksH48)lT@zz&*X-Z$P|fkrGGLY?322%uPEta8U+qW-QPSY^{-L%z z`BBCrFz0lXh@GEM3f@2rJl*>D|y# zs}KW72@QJIqpr3vdtR3+vQC57yp<1u%`3j> zu}9by{irM5l$%TwxxUP4V|~<{5h1(rz2-4mh;OVW^5~8$Gu#8bkbAt6}HnZ)ms0 zKsD+JyXTLLjId|3&g9|twimo`V7+8xYMyeM%2%Z;_1syLsne{84GIhCGJY^$ao#W1)YpErT3s(W>3%2m zp8vKMNoMtx=D~F=3ufO#2PcB3VxJk@{gu={A(Pf$Ec~8}6mUJkS4(}EWTL@b+l%bV zfAPbBt^7oG(`nKqr2nf4u)jYFGVy~np>4DGMQr_`PASfo!?$iIRte zb-@;wgpm&0zEPZ+Sllls7l^Ub{8%r~>9<}l$-79uPfj{glk7dRGs+SRzp65`AML=rJAQ z+#}hwTy(P(DRP+Mcx@v%Pxdvd_UMytiXkHlO#TZ2m^jI=QtDayTK!McK2tHy)LAkU$0Y!$@{8Mrl7VtN#N1&4umD^`*u+3^1&iRj( z6HO=&Vt|`^pHOz_Wg-3OGRA5Sm+WTiH6oSHZW&(Y->N0j^YbH#go7AmO)gzlIF(lw zA4>MN&ztr6L+ryh`WrGIt*LS_e7+|hWEJr!K?B0;!^3}=Yyl2L-dW{1u5B$|5I7k9*20^#Me%2!d<;I++t+`YiH(wFs8eU$(bqx8~E0uz5iyPy5Ph67F#nNxv5i_WeTy0sS)29K*2A=6Ln(* zyu^W}t~qXU8jQl=Is0}&J4Zucke~_9Z&0k)zg>)?K5P50-bS1NS!tU8!ttW~HDb3- zH9`sCruq4eg(sR~?P+nDXIyX!2H(p!)%6t|#|Z|5zPxWt6qWHXbQ_(}dV~Sd@(OxE zhrNq{Vt;2{<2M4UkEG-YUsg)| zsm*!Bifz%)FZ@UdOzcbiBf!r_6Li|@XixT}4Tl4^{XC1!c^78O_m1jCI+U%?uo=2> z{00lT{!m9w({q~+(%!wT<#P-nDIn8bR6V=7b?Nar^cmtG^*4Cu(c3uw$5jq0Y(r>x z{-^9H01Oud#ro5@*9&n(jf> z^NWt3Wv(nXQ>*W*4}{*6=DC%Goj1sJM>!br*!p2Ey(j(&hP>sZxN>eiC zDO*;NwR^8lh6MqNJ3#^}h)k8(eleZ0ESZLI#!b46{nq2;1Ku%8oGoW_6n4yAJ$i3X z9F@96nq4fZqB++t<0|@qm;ltyDDg0y=KmnoGs4*Hs81CCrBcB z_A2uu#R6%ZmLoGFn-pg9RA%)jcZQdu{*R7<--o}iAh*AUzH!XCiZ_D*jHRUUOy%kf z)%hjHjrs_oeVz7g^woMU|5QoIYvdo-m}U3t=ks=rcj7~+kOCSS0oCsik_KSRkZcj30p338 z%~XIr>Uzq2G-MJ5Mhw!wI17kjFUZX4pIm&9eSw@m{ z(20RT3q`2lFSCTSl*ltt7pwV_^UDxUImvfK8h1J_>hXEXe7Zi6ekkp?Q-aCh%t?hh zr?ok)>Dp`-&IAH;wdArr-aV$&a5cqqgAyX=#rSfiEqQMkcK7!Er*_a+1nlLt{4U_u z+kDq%Z*&<2&+S@aYo=)5zAOrHuorpKW6?RQ*xRgcd^7BRZ-fp_%5~`u=ZgJIAL{r4 zpp)rA6{KB9W#56-_7>6ur`mZkhDX@r>WjJE3gUT9+f)G7s4^_elPAp(lZ0SBLD{G{VH zfcQ_S!vH?4daA1*YV$pbH@gSv%8eHTGwYA21dLbOF)?Y3hBtfoH=+$gZ$)Fa%h5AR z${wovY=N4?X>llEt4Z1U#`@9DGQfl3zOL$WlOBT8%|T91cIh?Hy=_O-u$>=q(?U@t zaRb|5pNXj$?E=@EY+L{$3W1@fIjK?F1;M&F5_GXQrms>LrDbf5*1~AbamtujzEVlL zozSzb*>j3=)C-@*bi|~$hXMz;95_V-K}ZzcW~ZW2UyV7WOtNNPvB>J^wi+JZv2^%A z@7S9-zF*-jHSW)%va*VOelkv5v+Qy*B<(xw^idO8e}2!F?6c7)7lJL`jJqJapn=E` zvBoPZKpH~m98L}Vz26A4eDDI87PNV_7_{5h7F@iOG$+V7m$3d@304cuVf&|g_anrt zEdwR)A{q2b9LO;vK}wz+O@>1xPDk5{Q#p#%@hF(cc%{vqCurAI zfiI6|=0G&#;sD$lc${Be6NINAuZRCOt=~}(pSXP+?n*EgOCrG1hbw3(fp&{TGmwTpuy4t|#6HvJC(F0U5Yt1ew{3@q;0>{fiF#Pii79y7SvpLu>! zCK|gp^1aiOK9f`mRiCUIho?a0jo6$)N2I*Iz!eHf)t#_;YiJM*k_bbvSFd#R-%(z- zqNDF4_`YAwdU%j-wVm8gO(04Svqj3LtL*d}T?-abo_-=mVXr1w#GaHzlsbJ&64ZIy z8hPo>m-4for+K{yr=ybS%R1-lT@);p3qA3gbvmKN@p*yu7E=j77N+_U1EP`5%1{CW z4Zr>+F@dXEgOC?m7XBONzw)tN-6-863t%G}*UhEMf0B`Ox9w+sANRk7aE%7%G22Sc z#Zxyx{HbiklpKM{RSocX59Z~J;l&t$AY&C=%wZI%ZW|Z&su{2^-`};i>{yCnoKAi< z=&e|$_%8d$`rle!9sVGjhr7V!yhq_0w{6+68R2;F=bGiIBo$^%oGE4L!e1dmX4&j` zs}+lFdi11uu%dE`Z8Z>kFr~j-q3;Bvw!M?G`v-@CMM{ zcfzP}rk~9sF`mG~>m5-%GRAStli{i^{U8vQr*;G-v0PAN#K8(&fTryTH+#D zkJ58(ReHuE3;g%2Vg8BZ>HpX=5-UR9X}kfwp$)^`_iymFYP}R@nkL;2xx^Dp4?@l z-orkNMSs_Ey<8rQqy&`^LIIq^8d@_>GQOYpXO~6hlqdOeR^sRn`WF4$m-f^j#@-&Ndza2`S*0v1K(^$vtJhD^lF*#T;U=fZHWbuEVY(Cv7zZd|A`JR7q< z^TE&&ZBOzG>)Ck=qhj5u#P&W1<8uemhez~{Ta_4*!8Os=uO|@q-#f>5{~Y$AywGwu z;>)>=)(a7`h_FN|`AX%tTWitt0RaW9wHnR(^yB_KYIp&QS|!r;xM1T%G%;|fwlEXp z*?&!S8STZWd{_|Ngko6mm3gudBA8hfm(tUvW_8&i^u0+PxoM(~C}Xg3AIQt6^Bj8oRND{%Qz_ZV~;c zp(hJRnsk<+e9|8c@Oc8u1%(~tEC@QDw1B^$8gqqdfG~g{fDT;PD6AFu@nDaSx~h2e z*NN=4vr>4pAI$B8Cen)F{W~;(q1s~|`lPRhqqc(BiSc-P4lI9Rbe(5&SL3O;#zX=N z?W3hWfauYHy9@{a4R%tLc+MAU^P1(=vm0+a?(!wkb`aMl`n-Yhun!mzB{`miRghK0PjDmM+3q_17F4;bg)+?qHI3kX4=b)IV zKF6^NlwB>S{j-f;*6ZA_8v0{iB;9Lt1frQBRrFs%(n!`i_}&udX7*O9x2Gz7YYO~g zAPghL1Q6n}K!kA&Cg5a&X78;dT1j`#&oRInNp~Y{DYN{win)PTqmz^M;$F=f?X`|4 zU3ekT+_b|$k!h39KcsF>fRc1b1z1b;7cx1#lS2*{sA;3)wyA}J z7$q%2giT&pPd|?^j&+c+Iy{guTBd1cVwdk5-9QqcU<~;}9E)zJm0(}=6W2I(n4$)y zlHUu@3FF8-5#oVI=$G=*&OY2K4nAPoKP#rQT4WoEtG6dX$&52^TeS{2`0mvs15K9v997($+i#@xSM6~c2AaeO_s7WMHS{Z+r%a4gI^SjHKiHWeN(GymkC|J1VKcD&pAyH@x8;MK(*|U(i!^&>6)ixKT^c{q_Xk2d7sIy)0q+D{{yzAA+(J0p|&3PR1mfVMvYC(Ax+V8$R7bf(l2#U40F2D@{F%f>_N0VbP zgdos@`@mch9LUHK06>8e5diSyKX42fNFb{I&ah>1_l63hdnhc^ZpZ zs@M>217w2%-P9OlgeYE{-e(cryna*?#c|d0-L^M4QFV7m zv9K6(-i-M*H$9cEW}UegFL>RZX_bK*g&zU=XF1qDBT~3v{fC^EWhm$BpQ~;Xn5;5I zdYgkP{_2`HM9hYHJ-v4uv-WUE-8sCwYq^zo2BD_YiY9SIrFTDq#Ts>1zI&`*fufwz zCG&>iFY-7PXvZ4ImpVsRh=TV`% z7V;MXnto^l=mG;YzfLR*c8go5{l0ofs2wU>b{ErA=$G!cxh#}dO7)8RKgcwPu6OIb z>v&xP?t6w#Jj{&D^*g;KPr_=r(^I8|8}1E0UCc=I(Xa2;zf9W-{&-7d3C-+40MW$u z%FyeAz<>d953?>x4^tpZ)Gjz6KyyD@LLp30e|vqlV}PC(vP;moDzMyd)gM3cEf zmKz1#2|hOSlOU(1!sKD6HwDI*mE|KdZ)v|l^eA=h=4zE@oDA&ZKj$b8fk0~q>W_A7 zyTG^@12MU8(2!xu%&~TI-p(4UiJ1jZGX1F|E_0rvn*IJMRFaQhhE-`Eth%3mz3)eE zWV1w1^8qe@@yWJ_ZahR{W@=v~X*zuG+a`ODRzbE6gfMbMv77o2uzZ}*hB<}+K<$@3 zBe3uou!xl!AOj&+CyV;5q3X$hBhmC3ncCt6P$nbON&v@$A|RQJ`alMk7i6{s02E|G zBoS*@G||H4y;E@^WAC<33I@&G?>Wo}5YH=DZMcq4h7eIi`87)@CEx`A0O4+36;YFd z+1zbZb*C-+{YvUlp&5shG)?_{Ikxt>*Spb@ zl`nvNz?W?COTz2kC*%D(3OR3wPY%-?axI4k18#KIyRCQYaX3&IXy+P8-lK9R=0gAt z7%k#dM|~Zol?F;;Fw2Q!3L2pcz14W_lEIOg8psBOAkc@@fP*#}* zdiXdVLkMGhW$m8hTXh^-PHbbTfYOTT-MICj8~1h3Wyl2xP^lwaP6SRirOJn&YV@eM zqDa92fMARm02g{h1?~beRK9WV8rKhbvv4vY6pKLJ0|pgA3mb`bWnBn>1B?g&7zN}W zK~oSnS2PwOXOdKmfdFKxNQi+xHz=@52Ovb#yksGa6VstOmyQ+8cTBFA$`6I^((}k?Qx5GvcFH%t~9Uio^DdCoJVhekPM1u z$&b^juYMyrk(HB-!vZqM?}4Cp1b+WluvBc_zBb}e2WA7q7VWF!PYUd9=kgomZu3u+ z2A^te5PC@*9>LxlG!d_G*~I{Fka+T}^yKEBA$&&0hOs!PWu~grbn~~SjJcuv0dw;S z*L=tp0hQ(*nSkJ131{g5;U+1XKsXz_3sS;re>+rSMwh`(E^{cPWL=w&%>$;$ilJ=o z1&i5>G%^6$PE(~{$2HEM;IqOf-dk`qo=9z7om%Pj(nZ=mr(S^vi#1T=>e&p zgy}<&h%i8afWMsfiX(61uPs?8aH!N{Hr38H23O&uZ)NpWSzQ2l1Y`^fei0MRg4Mbu zK0v!S>P~3^(bf#CtWYHoC`Sa)1Z8ntPVbNb%~yu=NLS4y2-NDb{c&RugaF21RZ(s5 zyXuO_Uj$a&zN{x3A_9+X#b8$VB9!xSsiqZF(O{`+*ik0$q4AZ6dg|*GV+=`0vK-sI z=81@Yl045rzXUPnD4K@C`0vLonti@tEcoOsKb4$s&2W24@_OGd zTv%Y!F=zu^9Y`@1O`w&Do#qb6IxB7CVKmgGo4!JuD zu(~*cK>`8P5&-4ge4*F+W`|(B7)im_*&2m20uUM#T9W&PfXeBRf*cr01P4pO(GrQn zs?oSrJHgdBG4dPR&gOOYE~+87GJ2T25}WCHL!%(?9DN7!taT46z4#<@7DTI*x3{}y!XKdFcmo3LbttirF~QyN}j z++9^KKg5D#D#{}*ToR25VEEOx;UZdJXIw+4kcI@#PfYG`%@wz}APzpIdRg2zVY^D7mrSb;fuI+_(z@htDoa z*>1v59fdb_%=IYBb|kO1#}{JvZ4r*>W|)4lkERxb3a<}5JWXn**`h-I+mvfpi-EA4 z>}~to&_Drl$AG?o*(n1?(G;DYgZWH5Z_7Ri@q-ybMCYGQRb%BjNZmuV=LIIKiYQ-DjYHC zzr3oM%x-CuL>aZ{fIO23sO|Ey3OfO4K>FM(!$LQbA|!Ju?+euLx7qN%$Tm#M`b;JH zXEZ8R17*(nxJ$NiwRw8pA~VP zkY+%ty_oDGUPqRrE7KbD-*Fhhj-d$K84PJ{nrW*#xGm)tEs55?J=zWVcPs=#?nXYI zlX%Pw!B@m*eISHgiGz0{4g?Ck0KpOfBKrEQts~)apc|E_Px~eX+z}6=Hb&k~##{o4 zuHY3mhd$5J`vF;MANL5I`^t&s2ups4OwO zeC1Q>P|VBoa!?-`_zZ|aIJrYK6WXT6*e%ib=~KaYg@pizWdLRX5_b{R1(c$|S|6AI zx-DbaM<6wk1;nIY*-vDd$c@J5e=U+>}GMBGmw0E3W97kAqnM@vJL zf*ss;4u$XRMzNMGfk+^L4%*hNat^Y@^yQyB;({#!wj8`c$V#5JU?3%(L!>AjRMN@& z2H7|v&i<-8v!F|WXr5)5D4cr?MP*c1z~w35r2fn8(khkFsDbR+DKuQ{P6=JJ4@ABL z!^@{4Cm>`1GcyKeWDLm6h=-}XrTg%qhH}2!;c>riiV`TBhUlM}8v7-B(Aj;4M##}Z z5w(<`MDmEx(f9QG4ubStEcM#J_j@*0HV<42(Q7(V8mc!O?I&t!8qLG;0zm<=;bqIR zB}f1WfdV2T0MY^g0Mc0vz#sts(gYK};oAapOb7xY@UY0X!M(xDah`}k{x}laf}G^VB195v={KSrZX*#{qNR*qsrjE`ReA-&~TWWi8k_KJnu~l-$*V+o-OQQf?X+WilCBPNyvan8F@RA7{dObv2 zYK3!4@~MF0xBnH}>X+5`X! z5Fk5~7G2~>h`4SFd>61_nSoYdjQ;>jLqt2O2(!Q_U?`54Fip?6C_g98(&wh?*rBl@WT4CYn-dfs_oXHB2jV+< z9UGEP-s8xm0S1IV6DT*LnnDFP*Dy|WTG5CQtvPM6`wPF;^+cEnM@Dc4+h-eQsny^A zU**@e9ti>Sx39wd+uu6X7Toc7q4R0Yfk_i0ogp52is$tsfZ$J-yE2df5x&IvaBx>O z&YoIJq)1&%xjg_^b5Q!o`lD!|LQ>dpM!J2MQZkL$?c_}u6>fTeqPXqc)pKw{@8zG& z7D5z#ia4MPI52%vC3tDDa3B>YWw4Cb3iNC@+D|-x92Hf<&;8z%>4UR;V&SdBR>)0xWD$d^;UxCO?0@q{xmArbl;cn(?{}#ahok z34FD*5&(z?)=(%->bMeY?oz{g{^ErpNwuf|w_k?m`!L^`XF(AQMekg^OAG!T%lqlJ zEPQ@{>WC}Y*Q2iMK1`We>lf(l>oC2NOAj~zOkjJrWyIx+Ph|<})|RnJb@X8D-Nvgl z72aAt7YC7DT8P@t%D5B3KO+EevKK1@oTPjz3XI_yjsE&=Qn(z-Kfcd1=1=M2b>=_> z003#j4)QF;?L*%|*uR0By^;_>00p1`a2jzed6|`1*YPpVhZy(BEv#vx&Ro+nXE(N9 zDPWv}kXqZ6^V7!Cd*Qn9#6rIipe{(|5s`wf*Z^EZ_@Z7!lX2vMOP;7pX@P(800nn4k}~o%UIyq$A@cyza}!YEKNtV z+4bKk2u^`gQ28JQL7Iz%!l6Kg7FZ~w(+Yft>7if<5DJ4JKztb_GebhqP#;TYtjJ5W zUe^&<-*+4D^}*@$<68cB{0w$;x5sh>_zCg`;VD5UT!aJw34(_Nl87M0^JoZcL_`S# z8lWu+HUt5a$uJ871OoniSuZ6GaT5?6gD?~#+$t~H1riBylBnbmAPj=yA%0^T)U{24 z65vpFuDiGcA_`8OttF`7Zg3ACabj8aZ{XUTygv+Vf`)>+F zMg>y3?ZK*0F;LR06?f*X<>f|oGO1?0#gjBD-Bghl(b$LqMtIUjh!RHq6Z>4{tD{<` zi^Rf6;{PxEJ5j8&z}c>!Rll8_Ml<$|>7IJ9Q9x)lC?Xf{I8YrpU6@{V*o$^sSuAb% z`Oa`}C@Nc0;!5_{AnJP>97Dh!8vvL-;6;cqmC~eP_*zL)S#IjRuUeo_fpJX6p1SUM zea0|!mL>al`zKjE4$~{EPcf!+q+niu>xnvQV#opk6BlisWgz~Mo%47SLEsi7QeF>Fmv9+jj8wt<>gGTj^blVyyda_TAt z(lN&6@{};_qO|cYrfeFSM0a#;kJ^WrfiNZPHshHvfg&V0&rn~;%3}kJ!Mb?NWldN7 z&eUE8mhA8v-{#JUznQ?W|9(!WHLHtRlXWVJiWbis?>-winKFC9KXB)^bkWNH8CJdY z?FK?)JCMP%8BfKmu9<@YgPG1l5MORBR$bPo(|s!wCo1M!uBRbdniyi~E}?CSSz1ak!2rQ0)7uGo zpJWlGWVYyOi~<-0Ucq%VsG*A`w$If!hmGHT=O?IV1v-eCg?!DZqALLSqX!Gq<&&q% zEB}CQ-uxaXEy_FPO<*r%d9|#y_f^by`q@mk{cfXux#x;A%CcrD(EL?2!~AeTw_i^+ z3;1H-puZR~be5NzCZ^@Ij#LMBm) zWDSwYLR>4#ld`>LO+{X8gNDs$SreucoKh6C(BR??0EL&rB1Pm;`NeI&ivorWh=B`Q zZrW>DlvB&VX|j~Fxka889n$gA$rq8RW0$f9YlNiHh7;Pg?MsUUe>>pA}p{YdaM`AbgjB| z;iFeH`G|M2iWF;luIufl^kXB?#sk(HSwj(TZ(dDyYm_1Rsup=gu>|H}p4dfstvv!k z6X@LEa;X@S9G#h^>|7(x90X*hTBet%uevr=i17;HRMul-o@+A|11z*fOdD*lsI)Hd zOmpB`63J*jTvllr-urjmDPR0#*W|PJx44&1*pR>sHy7R!0t$pD!e6#--w)7n-GBQL z8avNz^L^Z-A^#9$&C*1-V63Sy{5s20I(fB`xA03-3hG9>`PW>i2^d|P3 z=~QN$^+jgP7l3EF*#3C1CrQT-WWoOKnmDt&gFq%c2qvWjz5_HX5cKejQ*59!NEmZG zt>Z~5)0J-v^l{$r+F^V~*)G^j_&^7LUS}#C3rHVUFE*qC;6UpO%QF zTu7F{F@xjSq@G`@JI-bV%Ihs6M4Lc+8#A6Fw+n>hE4ugS<&`NJ>b{QcTRhSzoO|p2 zhLHh)8rK__ToTaM1Q#BCH}n_9+k4+90YEJKT`OAMP>Gc^1lK`{C3Uns8QZKbOXc9X zrgDAa$A-G|B%wVDy9+J)@9KpJ<;+4MZgX771BNWfFevo#_vCGvvTxw-+xp}>3YzEl zs^Vmd;$J-8`xB)Ns(Sq3 zZ_;2o+jetgE}^W@*vC;9q>#Y!`n{QCWf-hUih~v0cWN_|ea=BWJPPxC+=%?;^p39T zmM;6;_5M3b8s+i)Ou?kvNa>D3GN8oZJ`JXeU{gYIa&}mN zC#QNs0#I+sx|B(ruZb~)pM$a+- z5fGSvHaG7Xay_EecU3(j+!L=?AciRn#(iIU6o7%0@MqItkoqaYkb5w@i}n1ZC&xSED46*2ksrEJxW-Q!?YSDuMp zn?&Ub*Ca6?_oc}{tomVKH$J~ChTuQ|ITQM{i5>htCSZNp6aa%kf!I^_F zSy%Z6HdJYUd@Ys0V0sJW_3oXE4XfzwMS=il!GhQt3>ks|xv-y8lE3C`S)tw?x=3+w z$^R$S`tt7niH*Dc2DaujH(GsMTJ%J`2e#uUzK`zhBS8#0uhWd93F+Q2WkIc}uUABuI*B6&9xdP_o!Hf$~xoDW+9JSyS=Ku92tGQj$y~U02eS9BN zWqKEm1{#-RJdgS4KY-h!>`6z?rDr*gWNn+Al<2=?-&fXGh6~=yDb$M>`OP2?RW223 z9EzoSc(Y}me!c#a=hNMi>VWwkZ%YYR1gmDPjb+;+T2@>IFs7YB+2b~bWRyvrR59mR zP1{MqxP@SX^mc2Hv3OnF5T$^XJJ?4H+QNevh%A!!go^G!!q}#)_um=qx@hwi+cXwx z(3$MZGX4!Qgaw7tARPjkAty8VHMn@D*2ksy-Bds?909iD5cxdW5~qF!+)1S*33L-UY^g68~9y z@geZeQrle^-7?gN4qu-j_qxkn8bL1Q-^$>`e)7Vdt@d;ED9M;e6oBZe%u$xA%WJ00 z@urVxC_jW-pgGyOr+z4|?(z0{+Lqy`S~0E84+DeYsehcazW96Z;DiB-w9^wzkSH(! zV^eH$vOs+MMHhM%-L8!=A^0%&M5F8!8@z_z8+fx6$wRZm;{mn;a#Hc#qO_RHJMnZ$ zCToqY#Ea6t{t7^2@S@Rl=?eXI{<#~UZ?9=f1%0S`emlr|o1W*3;P#(x=uqWVSYtD) znezT6vKOzn%g0Mts3F{7CFdG&+1Uziv77!-d`x#ir0Tfl_KAZ>1ordisamHPfSG-k z`K8e;#ED_r*njV27xvWh*|%aR3a1@k+QU|h{~kN#9_x@vLoBip%FX0A-5 zaH5B4I;_tr)=pAL<$pD)XAkV2>J&BKn}U{4#+b`6wF#Am92*I6?W|&8u-p7H!kl1`luIk z|8g_ETLYG#Vn8vkLXlm*`8X&%n>rH;Z)&I>TU^-3BDb=HY)UQZl3?a6o%E$eDXq^Jn9E_14>Li1Aqsxlv>`*h??_v!y}53&~4RZ zD@FgLc?-|^XCn94wJ)e1Vk@0>aeh$b_)RirQh(1gF~#J8AV<5n>HHJ!iOwRZB9V^1 z2;>`W8$x=9v4!$d6K`)n%Q*L}IBeE7ViKwqFn6x}O?p=nA?jpzHo4s9AxWUBvwDh7 zJIM4RaDvARsp+iKKyv^N#wfkY-%>Mto_D5~9w-?Ao*XIPw|ISvoFV5GxUkJZSm64N zlwo1~F#h?t;(E{8g_Y@DX709U^rgPT0eG`Cr9EEuvlk=zTvJud!JJ-fe60t^lC^7< zoraGZy(V8GMhFgayL{#YQ*z8kJ)K@rPEpC4COg)hAtYJLx958_=#Lg_hAQOlYLO#JzwQZ)>wW>06Hg*g2pBKVN`ZbB8`k z+q4OiVFF`Ex|lp1Y#=q*Md6}37_4WIQpQZ2^vvq39y~(70IuJOc`_1_`dAz5pfw!5k$v7}DHmYARgm(! zhPGTxRYo}>f_-SOIsiJQWl9Gr3U;h4x(l0Rr+(IFb@2(h+>&pnlGH$7w_hRAjM~xG zp2m+CjVoXw5^8bW(Z6iD|9qc^fxS*UwfQc0U8iF zqU!ZUQyC2Z$pi-=)G$>?4x$}rP#-kU-FV+~?Cs~Cy5j)eLm?%C_$I>x`ZCOpmEtnN zx_!7iIC>|zm&gw5CncRkg5jNU4CcU8`ACfGOCJKV0=$LA#ly+qf$|6d1~X%?X-JzB z&kGvEI+K~-jeDiO@mL{wN}7g2?3uSxU$QJL#R_x9*cH{OE}vabE~6Bh?Lufwx#lxo zYuxf#SMtaooLukIn3s8V`Tb7Hxb_-O#R=W%4~&H}XL^IP{E{ay9fyibw8V{($}d-_ z95qhn_K{Ouv=ffzQHn&#{XQ1mkyN4&55k~*XIX({pPX%-JHh=+5o-(hCe-e3tZI_Mz4?Q(;kd8&kdMNQI9y)PyDV&Jx zgbUiEk^l%Gd_~nt?`?q-1-&8uncl_sY9tpad?bj92p&DGb`EVbmx!hG1WvQmjM>tA zP4>vP61RsyE}I?NOI)?fU5EW5y$aZgHg0u0qx$kH|mMo<-iZ6kZr1grciI~2Ji4>Lo z3)V<{8RXltDmshRps}2n&n^k#=>6wYDS)X~=wN4$@xNeWyEKkKq)*ex#c85qHSl|l z%Mmf6<~k|&Ow$=W`%nZYgbuxTftx}84q`4gn(^1=$L}3*gNsvOZ781nRsP(w9QZt%>jQiljh)(Jc zo3M2(1_tz4*e>$88?n@0MMA8zay>DizQ|8*VIjXTO)PyuEJY@n5W*xDe z%ubDuTvtVMhpq1KvbIfzI>F@#plbsEf{gO^55;m^cVCirT_LbOb15yW!*BSN53~cu z|0>WQ+V!%`!xAiELmNE~w7hH;-DfpYmPFqIda@4_+VKQoegMCJ59pI!cD=nDD8Uf{ zh%+#0{;6l8wcnSrQK)*~9OGS{LkcXjm;RnsnnA0XJ^ua*KhyFk2$lWI`tV44W?5Fa zo~kx&Wd9G9JDr^68DA{DOoyMgi#%a>4F*U))jjfnl#u!og4O2aWnb}LD`+Z@>Hvfkg$bk zCPF?~uiR*hg7RV##~MC_c&9xnyB=)7D8m9Zr-R7h$+JX6T&nr5yJ*xLN5c8!{N7&q z^ODzZ6UP@Q2w>D{Yt<5>qI#Cb3{hh`Y7eMBJS8ag{IHF({~yf;?pNo6qReoxzJQKH zO$wC)T~|#1*@KRz>jdiAn<_P-B&cW(D1sC3YwluWBLfAV-#ez}X;yqg+Y zk7Xmr2}VAzmWG-(6J-;rC}T&Ktz=96)Y-1@t4$eCSg{3ZnZkHD27e2aZOE!%mD{$vuW z+5NQ#z${2XMl|q5X3T1_o9T1A1~s;>$j{AfSY5gz69%+`|m1 zH9_jdMZ{^M9ztUl&bfSQ{5R$#s*a5f;y910AzX>ON28iT*=v{{I0man4pv#*xY7>z zmjcLTh7B4~BkO>pF*;*>MT}{zmls$uvd{?u0U3A4LLj^V*~{@6hKQl*&tQ$H_i&XK za&hD=$zfKx8J;~oI_w`DTS!GF;;1T2U~9{C@xIfne~2E$P)4C-WaHOp=VMVSjFtDT z!r&fuS$GZ<2A9s+7WT4%jM!wyc%F2~%Gq_fQ_ii9UxRnqH zHjG3*Y2XgSK)Kn0}3voegxOT*ic|p534M94j1AnV*~US6p6~Eifi+m!pEZ0kW4g7 z_pw#8Rggl6+J@rF_XC0lw*h9BRGWw~s9>6|FB7Rzu zJ6@jzzn1{cf!8Va#5s&9sGIIKaz08EKekhy_{Ov_(X{z$Z79*_Vulq(R!8T9^tS3# z4{P7Dr-Gh2Ux##ox~?K|=r-gu#%Ts$T=i2e5Vq0ZXB$6{%)V=S ziF{P{r+H`3TDg?*eZJ#dX)Zg#RYnW_wRZ{ASbn2oe)qbLd$R(A0ZK>gd;g8Axaxk- zZd{F#UA+B4?JZtR%8CycX((dZCOJzTev)g}xU~Ef{HI#XKPhhKviaa;D7+u5ohiUE zfoO@FqMWYXP%MSWE2TMbT^v%CjZ8I?4KvHIOgoPx|!$0vdG~& zzST=gv1@A>k0ux>C$j(^!F{5-vzS=U{!eGHxTz-L6WosX98ln^2}3y*V8RS<0BD8V z96MrA4>@%a1*~%(W}f)5AA)V@dl;bw15!GgzgnnQx=G4xhwq9Ro<~pd1tc=(I^k3BQzF$3okMh7<~u(R5V4?p8kZqL^(=;y+=?bW z<+--SI-*ak-r=9Qsl3`$S6UCwBsMb@k5|#^jY%s4q88AZX6nv$$x?S(i^tk@al2ky zwWIo)@C*267;P3YuZa>_%1V%C@ZL@3MVFRXnKNCq~yktl)WCZ4m*151aO8KkJ+V zOp{U~n8@^9RldmeUHmxXDa?{ZE#u6R^x5dAm}^~cy85t4!24c3+Z#3*2zKLfkhaA! z&;N|`2~QHY|JDg$o()PbhW&f#*ZmKe_iXn3;Kyr;ScD_EOG$uHw_w~GIZ4Z)QAb!} z$=Wj~ou1_-k~Nt*HcZM~svf7R{k+o1;5r230_c!o7B|WIkKOVe2q+;8Q#+*)2C9Je z?EUy{q@oJmBKu6IkNaGXZ5ziPS?6n$q@-Py(#1+!;ZoB?U_yW8Jyb|Rt(6M-RN>b+|D`> z*@bxe$bMDO_6nPA{s6??X@RiX7@bINW(O{`Vi2pqg@iaZuv!#R(%JI(TZ2PI1gHSJ zfwfa@ZSNp~9?Pg6@wyfs=d+xQt(&(`Gra zvsc>5c_#TAo4e|tT5L<#=#g$N3Q5X?8tDG!Y=t-LKlI_=9lcg1T`0L4kob2q!g0vI zimhGhpTsXF<9_g-+|!$q`C@=N7_UV(_03&de)UdON}iAn5(z(b(m&JT7!j&k!#7=QB^=pY7w5GXgj(I7Y?`6ysn za-e#vjkxYkc(-tk#K;RUof$f8|x$_UQeh|aTKobE2 zEPe(ubda_>*k=8?3Hu+}S)Yprc()q3sO;#xeI?d$iX*ySyM_Q)546F^6N$<53We3C z+%1w>Zzuf~$flmR9g*4kj2l0bI!1Z3GqlxljKaSZ_LK31)A8kNw2<85>_e5Nc0{x= zd4^o=Hw>QRekr`tlBGNXYSA1CSV5)B_uQ4+$AL9kJP6!fUOXxWrMeX$UtDKFMUow?aEOsHoprzTnwddq=Qvgr zfgs6F^P*$Le@JL4vIT0`>kd|GlTTLq94a)8zbBiCvr8Si6&L8NqA+b+r2ED0GE=jY zQb%Vkcnv~{Wg-GQ1UxqTy&I3tSsDreD+#DE_f8Sk?*_epz}NqiHSOuH~tpIW9I*ApCkvcp_)puZ`hI2v5K zoI^CA^admf53a5!HeJvC2GnXl?=|N;r()j(t2Zr)rI16@64(if?S(;}k8U}${Q2f-u+sri4xBJRE)ZwE#XCI|SuEPiOf9i`l z3pe3JjdiSIA#dFjexIt5uiDIQ{5{U$CU#nxULV8nSnbf)m*rC{;#p^DQhJODx)d== zSIOn>s)p2@5E~RafJgvr_pd}dhd_8>W?OeC4S#~@N&eOZ#W=UE{#3C)l`<|piy%(Q z$pRj+ulkQE+g0Zy~IQeMoosPsA_;7D!Z*gQvOif#9n-*a(1B4C`t3|k>VF^Rj~ z+AG~eEXp*{QdicbFf{%r8LCDAGPIQXDJ=I@27#YF`~0o0^xVN{Y;mMe1Qc-LfP>H@ z2uu_Nb>pA5V|zXBH$)8nD=g7`Mcc{KTTOD`cK-i{fsGMG#0UysyZ_>VAP|CR0pC&> zJzrc3k-!RV&;S7`SM^#~UN(yX2T|$Ty5%&a>hxV|duk2}V2gg?p7*s~vKv_yhUY0~ zLcrs$uitMO#JF{l1j9yE`cFD00sGXEHyP2))yOCIkF^+P=Q{R!94!!TgwlQL#qWe` zhOyZ4%#+wj%v%Z6sa06PN63|p%PERyNhsQZ)_?x;-IrA0 ztlmnec&U5r@@_U8Q~t+=uYq?L@#y~piKwCmaVZJ|B@jtO3*r>3N#=q#kZ8Fxy1vLnwnp@7J50W}U{y?-?aa%M*7;ou*T!n&)Xt68+!t zOcn|XV4ZXp9F$(Z{F=dm)2V$3sqQLG^el@54L@`E_hA*Vdn;Y=)U!uuUcdrDsCLPi zw6q!;E!u9367EP}*T9e$Ks!h|(>dosdFR z%p!GR7q~nuqxmkk!GwJzXmS6V2z1Vn-JW~p1Wl?v-rNOYZGS!5bcdsJFsJx>{Q9i- z6pJua4%P)h;37Dv1K5xrP1%k4kAADJD4f>s=$Vm3AOoKcNCN`JvllNgFS-BTwzmR5 zLfEpNk&5jj_j8H(?|=IldF#|UCkz0e9;7#``?BqSHZNF^22h_UPj(<&oJ94*I~pOI zzSO>NjGb!ye+KWcQI2o?~pRhO`h z%hW^J={yuSS|zIh^Ohv7^}rSck$JW)4G!T*5!P2_wIeK={&|Vr#r%VFLGp@c*;x93LS(DiaQ|VZ-uE~R z`6kvpDHku#AFy>~nAug#$Pg%lgrM*;8U;)`x z!}=G4o3epO@oCUHQ$5*f6q*tGE)t_=!cho7H+|9wT=+hfC<}DMgf2^jZ4QC}Ag zrh5X=LPjBp2Uq-AfTMnmSg+?nn$%o#p!>e^$}1tqxm=t*o;CO?jM`zfbqpVWV!RK3 z3LcFGxRw7`Z}|nunytrVkC(F4O59*}CjT|kTc))eolCU@zni7V;PAMLaI9zTxW%== zBnQg=7KAAGbErmG_pbax!7A|uyfrXiv%_09hTH*wl%qZ^Y-eq#}($l*cW=wZ!3VBe?KY8ii0!eV9VO%A15lq zVYwnttV-i&|U7n*Jca6Q!Dfft9#+pwGuGLASOsfd8oXL|i4-m7W&g z{zCb0a2Bqg9Fgmr&YZ^EvuIrym=+DDWZ*C5R^J@kRCb`xEOU0~aR#q73VN2oSolyV z^^P)je%Zap8Vp;$BHg9nf6v8C3DhvH(ZY~^qwN~kLJ$a$@)Km#d@m>JCDmFw3Q`{`cdh&g(CMudAd-x-T6VKHEj{B zTc*u{wod2q@?iL#F8<_}w2QT1#e!L~se~C8UI)_uA$Y9n1orYJ%VU4QO)QLbB2!Vi zmkGu%6ctB#DZVR;^)L{hn`MM{)1x9hSXT2UlW8=XM2j{8i44{CCB7*dDmfH=uwVrO z52aEYOf^0pUv31XC6Dn@8(nDnHlU6>ENP_j@|*zGjTEhd)*t6~J=L2(am*%c2j80;5@Q z6C4!!Y&WNc^Jd3R_g*2p*(}*3yUpsF?sdq@HjvB}<>V`jB+t**)L`wF2i5dmYrXmK z;SOEt^v%e@K;E+CX_~hZCoxA0P>2JNfEeVWrq=1jR|);O+=B|*M2L8U|M)Kr^Q=)n zN{GH^8!r5hTIe^e%OSh@CRE)N<9BR|-}QQ-d+HkmeL40!JLof4J5AE$S<%W55cEEb zB_+D&FNE~p=sIhNNmOqQ5d(DG=BUdBQ&zKD*Vc=hVOrw`h%NhJ^RALj7_Ob_QwAcT zRk%RVP(v8{C=}mc(N<)Td<#OEyj}K}p~qt$!HYefzlS>k+1X@7PbQ4)qr1%FG+oJP z`=?F4=_74rBBT%E772b=A)*B`qfSxEIRDj1<8vF`8c#1gkgk+r@m_u-T(li$d-; zQJNDW&X2LL3Y(EJD5N8Txhl{+0WGW>l}V162*(7D5FRRHKeb9G!`pP({%~JJ;&MYO z9(PmrY^G5}`e$c~Q)5|q|8y;t;w^Xe3Z$CNDe#drU<;J&!`D11RMZ9q^>Zbi>0H0CBbsFccm*FH2l@fmw)g%f^C| z^Cdq`R9x$IvFUx<;c-01cg5uRj<0NXKDXO3$$w@k#byZIGhxMDMm7^~bf<|OqHjcv zq}J!CZD;cuk>|^}Ri9b?(S$R4FW(G_02%g?g?>v+dpP}LzsP*OREL8YRsezQErJLa z;Rptt_wbfxp3r8T0g#$dM!R(79H*Z*TWR2tr1DeSH41&@oxh)Sb%g_MnrGUKqjx$< zCbg#8c>hvy%~Oo{pqxhfv&T47G+u*#uZ^jpRnpkm%D%F4m3-j2ZaX^}eKK@LI?K6| zF<%lG&Mxx@Uh*`mNEpU92gh3IM?+w({W}FF?l_|&l7*ubNmQk%E>0(3LOk!gtJz(I z#`a_qm=@FG#<-60b03M!xHwi%%k%z20U2+0x!s`Uq<^-ldjdfg^VTMf76TlI+@_cT zU<4PH61G02-WyyuLi-q;@{W3>h7xY{oQ9frG@-hm zb-}G`Dn^Hi@$MBCFeW<<==D5vSYJrP4oB*=PBP3sEA!OzGw^2iIQ=?xUMMQS()he6 z{TBgtp#4!#U)JM+`a(1UI&l{EV{l|6jIOYB2^$a7O$`xm-O5m-*d7~nBuY-AHa4t@ zm-y_8SdF|MsO)pvKHJ<^?3fXu0K_yHe)xf!cdMLjd)#)5$-Vs(WFGS!h4fVV+U5$D za-7AT=R1fx?@KZ=GUsS4C^JtA!t7ZcZ^dD%269kvUQk-G{v))*^1~81gE0*C@k|e4&8Q+8qBe#I? z$9yHNp>l=oTrzQ()nU@s>%5Nv*XhZ-3EZ6iYu={8Y9W6UiZo$W?pH)N)5x}LIB4l= zdx|g&6-~KVml4guG*;8$q_c3gWWR9qBf0$iblgsjzNp0rPuwf=EyK-jUDki&l} zvZ%RFBiC6oHr7f{rz|nu=t)`vDLFM`=}w<6a?Y)7)UQ(hp8)RUu}QtVUxOlK!kd_A z@6v+jDy&+@Jp2mtrOBz-qt6d=LJ;SS9#0sF`(fqK;gSeIn+r70=LmssoV7^Env{H~GE6)jAWQX1{M6htX9=Afi_>waF5B?^QE44ZdG0Uz z*wGfj@&C@(n>lSgaQXr)-*rlxY74f8f`^|XjKSUPoscW3pnw?Ktu?}_IW{-NB8lZM zT-PO*-s!^2i@|d?)lfO@2eN)DugU6)^LH9;J-p1qfH=)-2LV+_8(D@-K4Uco5N{{B zv}LdJJuxSAt8kM8@4X8RsK!^@~)eP48X2yNnio2}L)?0-F0+0B?1P=O8~x%+McAh@c5 zxYV%$!6pT34CY8azr_RGz1hQf+=P9f>NfDrdF-|(x8we+E~A37JzRLEHDh%=l_~cLVLSJ$!&CO2^Ojf`lfo;dV>xI?+476=RwAn@ zy*^IMzV;b`#6qFuwhgP3G32&!2|~kraryJ#=kA_HA@8kE?-<%h=8?_1xWiX4fF1+d zb?b2$gPH<~0Mcg>!3{A$(^V3M{rV9ifA3v21Pmh6F`AS*mB0Bp#^1#8_NQWQ_dB<$ zy;GLK-SZf8He$|ws@F}#*TAj!NK-sA2b$suCI42R-L+ct zN6Fcf4I)4U?1S;Z1KKP%$3%XR?7w14cWEy@ zpPWB;V3lN&loa;ZMlL;|&4Dpvs}hgbgz%XT$xkK`n|`uh@$)c|N-x1H2UVCC{A{JP zc#PI)5;vw=jGNI*rC2A{`NgmuzE&fkoeajNkcxHdWB3?B(2k*l3(9~3n`?Xa1tFY=lnPIp7 z1HVa!GIg6fj+-Uwgo`%flatb3$Q1;|quf{12Tb+^IAdZXnIv49F)=+dh?DVTE#@KETa`ljagM=}py4q<}idVicE zkadmQk*k25t0gjp9fxDCX93w^eh{XSxdDJo(ntjmf2g*3qP_#+;U+-08?v%lyO&X) z!TE?^^N@ySI_tZle}6S$IBd-0|Jjxtv!Wmml!{6*KvR(y?LRG%1ok>?{`35oAQoEL*=h#<%?m=ICQt>2-oca~XFANvh*iKC~R~KCinq zgB#nOtJ@o`o{*7`+saHWM zlPDc!(OgMG3V;EC6dRBCyCFXf=%EnwhfYvlo&u8FwB(o0VcK0e)2*6HdzSA`CE#t> z1l5_rMxFnEpwy9ZD2r4=7p3KyL;~8Zuz?w!e=iccS|2(Mr;)2y|7Z~rbrP31dHJ!$ za9QTBLSj_YUNK@Z0v!T%FnTh0@B>y{TJ@9}=;Xw-?*qM0kx^WyE~;D%63_6@*E-Sv zT|=NzzI+%zlg3<#F(_QJ7FTXL2)8+})k>h$?eb}M!v3L7wb4Cc3iKE*}`2M(RD0;p8BdG@r$Eqo~CJ$hPdnlua zmogqh9nMA%PjD*dHFS*|37q zmUqdHHO!?exM{!vpd+Y4{LP&!3|;qw=aARLTAlw9;$#ao@s@Q=)GbCc%{0ddSQ#!!spi>w6k~jlmbKf;C)eW3Z;)%3)trX=U z&0o;T97>P(fv6#zQ6w6R{+j}Bvc5zf3^X2ZPEncDi!3+hNQF>bVe~F&o0L89p6(-i ziPEZWjAa5^QQn9hZzh?NKEwHge*sXDvxjwi*}T%m{?L2}!j)FUB?xv}iJ$T3k!r+T zI%xih-e;Hiz08yTD5*(1l>Ih(mNvA}QB@CRm47tV6WuR&-co_E{Ack0Q-?A5lvflv zraw)ESGpe=k)nfl3k(yq4!(~L_urO#PYli?rmc0~|6|Uwddbxb^+G5w8Z*qr2AMwT zY9KbfZU#O;M3obOW0WzMH0KZ$acK0s%Rh$DnK-#@XUsn%L0Ro0z8+&FnpVksukYyH zHRd;5v@qm^d-?Zb@}xM8^^=ZRX3YhBx(P=xGL?Wwkz;i zLp8>+XFGcD`)_G*P)axVd`n~^fL^noD)3+V`yXIE1Qis>u?mKBL&UqGOr_F5+oviu{Dd2YPS9JRJ7RJ}Q^%V0nrQGX9l+VhT=}b>8ALg*S zkJk?2Hx4EMIYWXoohgF|1AF{~Ek_`u=QzF#M>Wa%k}mf1B~tWU4lBoDU%_{;2=`WL zwUg>yyCUD^^l=2EPwVt6Ft;~P;;?hK@@&T?82mb;LGo{S3xFnOO3$ch!8%ncrL6lQ z@#+wPh7vBTp>@5>>-|lPAA^q@9L9lQ@&sXQDIfY%?h7mmU%v{l~N+nkv}vF{Q~E|0?$M1P?Z1DHl8 zPkqnH3=j}NxcNG9fO>!3;(x-&B;k8?6X<^~N>PyB-)GyE`?|8c)orfV9FE+ zKUX@KpNs4$bzsbBS3Vw>UP1jtbc8vv);&6;<@SyR$Jw8eLo6G$(J;FLfkA$TRXxJ{ zG0XA46e<84NSZ%i>k(}^z*cvC&HdM_h+o4kf=Vbkx*^-qrW^$WH11D)qKzg*_ZM_lnbC$sJX&utLnQabw%$d~v}pSaM54RaOWKE* z1KlS;_QD5v@EdOsmfee+>ZA6PLLp(y9A&FCO!&}{>}a&egCHPC1Q@mohzhMZBM%`@ ztg6~w<~8to6NCRt^Y!@PLb2-{KfB~E(EH@(F;t8-9l=q+5V>A_Ga!wd!GTiK>o;8svl~y-8%eCy9|J2f7)t#w z90$$_dtgFR1|l#aFNN^7;r8vGJYMACGRI!Cixq24lc#Xl$jfZSBY?CuWh06b`3pGK zU;(+HFoQVU`jsTGe00HwTbp3Spr{U{4+i9An%@&a>>3&sHaCAVv*TZ_G#sD~1|)I* zXu<&Rh}5;ysxgA~b3@d}vB3BkKP=O4+6RX3B|#TnV@rU>ab98J^9RLt08yA0>e4yc z^=UCs@2Rr=DE|$Qsr8Zm6E)$n*`@^mm+x0SY52!b(B9P{8)9tWkphaqNM%Z~vn%-i z4Hvk$Cou#;>MU=qc$p}$4F~{Z5~SCjs)N*{cF$3~L0V7}hY&4wapnJ3dgd5#D|CMS zv;pJ1HRpzYY}0Y-SVyC{51d)spjV$_wM8Cd-UMDpubxV*ov;k}cjLj>a-oSf!kH!_ z`rYrR_3q#KBz>0P&;rT1dWL|&!*rd_A3Beo(gmQC1PN5IBED@G)g1}@siKQWt1XwW zcs5|5q=ALnNy1d;PI<(gPe+0&xFJOcH{0?*4Okb?ZDfutg?<0EO>U*-e-l~e;h^p1 z?rEgeBoLJ~*1)|HV88-0+x+{6YaHg`-r52L&V{EbGU!Rwxzw6ApGJPy^IzvHrvf#O zH>^k9iq%<2eZk%+uc|OZ<;xm`uu%J>ab2S@y=k!1lgEj~cqV;C@6PYkQw*5tJ?Nrl zGS|v8KA9<0tiW`N18?8)`xFAN@aQAfuDHN6Vsp{6w5ZWL_dcG5568g`v00_0|9?_f zFt(QR1imoWBzG%OC*oXYcuebri6AMiUV+;@oZ~S3%1&dsZ62I^85eO0oS2U)6Zk>` z^?aV9xrYi)4DET@uZkzhw`8f{J#oa}%l}ACf+BiA$bAOl&2HU9Yn1t)qZBRce`~0< z_(X#hotT(R=3(S?C_9Tv|dl&XJx{+EK`@Ux(Q!C^uG!TMG4e8E8i0%8PjW>R<@TKT2U<>b9#CZWPvreO@% zw%RADDx0Vj)_uz{X-m0KEo}A)jhh}f1#?$mEb$fNmCG)-D*D}fgD8ozB4aD3h9MVA zT+rTbON10h9w)o2Ut#v|CMB@U@2+scw|#&j1$#;XVl1o>HGcK71K4d#7yks{ATc;N zq7VL$NCS{JDC`!k3Nt*dIOd#H2?JflbRf;(S7imk%Nwj&d=$QUCX*D2-H;SSzwUI| zGjX)O4Z3pWxCeD7c`GmKitj3j@?FL50Kk?~Hz}wKS!j1K$V-^{uqWN}J|-KAOt*7= zD665+nG1{-Zbplzr2c6>y0@ld8z&I#qz&i17XH0?ye}}ZyPJV^oZX&yVo%Y5c?WM* zW{S{Vkm6n4r$H~GN<2K6$|f%Lmom~-TC_fRWQzJU?$}aNw|+Rm*59oTt1tlxU!<0t z1S9G(WhP_C?-vvolgZvZbH{2t06Ay|fS@3ATWAxFd}!P(q+N(jH9zM)GkW;`mm8%FE=LhY?JqCnCLuB%SFosQafVWl5oK5VvQ zL)*R#1t?DTVdeW~7&dhSJ0UAXjNq)>dGS*RU1Ybl&5VEivryJmXv*m;zQHB2N6dN$ zIY+$+*h5f*MrwUAL1hN9#l7Jr0LZUMV3V=fi6mT_irYZSIX>^MQg~n>f>s|$R?*1U zjaFKiwzf_KJFnEymU${y)u$zKoSa}tAsvO}qKn)s)-0UghzyxFKAGEE^z|2geeZ&l zXr0w;?GnzQ>m#3{@jdzzw%m;?Z!ForIBmc;IC){d5Vbro1mKzZxt^BzX13i_QmzCC z>L3FP=B^0Ck8zRaFsa2*B-%GN49W9reA>$*!!^G?pK=GHUboME&4j*XSINq92B`z3 zD;iNijM7WU>{*EhgIdJam|Af84MjmY( zI^VQd#ZdQ*5!kJ3C?+Y<=W}}Nng#J0m<%g>96@szT`FKEjs#!jc4s0UK839?{-2+Tc5L%Ey}cx_y-C5B4Fj$W!*dGZbs1pQn60!w0+?V6%}5=u`pu9R z{rb;dLO*D|-)J`D=U;aV_wmD?&)!zn+4Ox@%*GbVr&|eq~Ho1%cgla6hrneb2(6c+HgYEST)Iot+9N zNrB}E1OViQekK;IFlUz}9l+ocYu)lJQ0^!1WOQC`Ic>|@AeX~>d4qyPH+K=hkg9uj z$%*F{ZhaNI8`^+B-8*?B=I|zvWaHUaE{!kZ97Xfw^ig&hR>Cp6^mDtc+VGHjxcrEC zMxAFI%3S4gzH7f_3_I+i=Iah3Q*FjkaB;X?Dtxf|3tHiZGa~~hk2*_V2!9O^B33{Q z(jFrNr>x(t#mAPG+n~&+*d91aPLh;KZr)!+yBFBiMxY8kR_DF{w#icx1qk;QB;+Ie zcXPJtI(aC2YkjxTd_L$lLFMj*zv8?Aw{Y+MMCruvAq@~Ec&;SmpM~c8JKB@>>;p8N z7nq<1Km8v)OOs>kV9eitvPlUcQ_Pb}Zzzpz`BjXB)?y2mWYe&PW$F=2Un8Y0{Pa7I z4B@$AfWP|k2=@&Fz(4_}L{5xED@@=TOCnABH5qTJ>&N=thUMr>VR#ybzZaw8lLo-j0Rzix_mL(zp31XBAqnsN8)dZuhq# zV_m5?hUc#xta-jxQ?05Q!FhoLi>C~tp1{XAL!@7EKp_Mdc!1NQ9cBk zcJ`Zpa{tX3WAi3SL_bdMlK~1M9%x7v+{;A6f9uQGkl>jNG8t@Lh zh9JhBj_Zy~t17D%^uP(YSj_M=@~4U$Hc8diSiU7V{{7$2>5O*%f!OXjv>!9+opx5* zg&^gzsn06c?FN8Xi^*rl&4c?mrewrw3Pq9s-cE(Nl!QkuW0S zKj2p74v;+A*DZe|I9~7VcTlZP_k~eSMoL6p+<>Pw$g|W#vy95o{!-ebbFr|k(BM3N zXJ48gx8fsa^y;L+gkDm15tub8CyuC>f8y!AF%`*kD)1mF%YWt!Ow!{!MBe{`l8WF~ z8mvvhnIA{P#W-GdgV4A`{@$cem;N&aJjMq~C!9(}5S&+5T}Ce#IL`uq40g*yi32dO z;-r(oY0ap%ypknCcxWSmejEwz&Jnj`eB{eKHuGxr4hKddSX|v)Atv28L>K_93_grT z&n*g+9GpMl%fPrm?QUMH#Z`ug1vzk{gWZ>SU_90Q$*nK#QX6Yy-IeryLlarm5qsk7 z4={p6)NsEX7!KS5)u z&EM%g?X3Fzek%ck`u`e)5kjQ- zvuY2Qw8*2vGpuYlJYnprn~RQH+zq67@h|wMF<)Wb5WHQTg|C%&%5T+_tc6LK5C%V2 z{_DQh*tPGe)u`6#uexj+26n5scz$i2Sm%NBcu^-=>iLihvckc&scBmUmF|`ynM|0-r;3<6 zCLf%ZTtRLR1xD0sPt^m_#UeQ0W2g1J+=(vxQcEC8r!(Ok6S(>pn7n-O|( zXaEBo`#nTc0B#_S!v^j;Wa$BA9h%~DgdDm&V<w7e`$I(g8V7zxd@*3$0)p_)X{j6^J05rS@91tv5!1`=n=7jdXEwB~A238f? zbp0Bs*P{*AyjoW>epHZk(MG^ut`<;8Taqj{?p~}115|VTjS+&QBw(#M7no%{iZjlyMsV6JB2ML@rnXKf!rN^C-x+vdwqhbhA?L<`f@Hq^MQ5n zxDE-CH!^<)28r#>i2sjSW7MROXY~FQM|Jk&ktNI5!Ej*cqpp3+Fo;=2?&~nzC?r#X zJII$%2@^7oFa6}MbEdt+M8Xa&lAjk4l0Fp23?O>i9Z`Z4766kMsHn%dDM!@pb{=nI z>oFn1LP0A9=SGnUn5uzH8ikj6q|^OxJf!mXrqJ79zZapdBVE=zO^mM%C87E3w7Stk zh=}GAsW<0vD;ebS%At~fNt8AQN%2N1p^t$@I!_!^Svx<?rW zvfM$?ow}u5M1K4q%Vd{RY<~hh+7KySzl2n|ie~AtgQAU%?G*zTzin1fhw=oKJ|A`` zt|3SIf}2UDH177X_vhvW`IaJW*5GhTLdr!DQq`PIqiXq+(BttDfBGqulx5>>G^|DS z`R;Nf*vfy$g=?1m+hN`FNIyO^zzTV6Z@dWfZwI@ko>l_&?BxKVP-6(=F=G2q{=Xe5 zac*pvv#N6sT}c%?V>|Yv!oD_s;tn?;z&HR@YIWQXbM4v`dUH*~BRbIxYmk#A? zhk4X1%VFS!pLTc2UuFBsF5hC<7mUPyQJC?<F}%ch>ULjR-|HbJ@l*7QBTKgSrtQn_{vx!`2WmJRyotjf5gh`!P)KUH z^Y>!O(!tPaOy&TzLNU2sPE>YdY`vJAD4V~5@hG?a$|l_HlL33h_E&gTXK>$EtW}_! zV_>MIVQJbo2iw+Rt?MZ@yR}Uv?h7INfpdv7bH}AOuC4EJ)7BX3?3A)tHEwZ=?n1j8 zqYaTJ5O-DE9G_&DIY_Zw`D7MAzgg)?`M8bp$AgIjwp@X$1~@=Jo#e*jojcj+&%Ya? zsZ54nLSw1LtJ_S^AVmc`}+#7b?VW@`_9`^p2Ut4kokyPeRNI)HR!xY&O-X}N5GNc~UTz?GRQ`cbw zXjdsabU?M5(8%`NoMR#W1R%bD9Vo;hKFs|*= zTty8B)d`yXOiWqOIu;%R$IYqq!M1@K$|#f(6se5p_rPr3KWSn5Eq2x8>S{06cj4Jxgl|IbE_EUezm>Ag)vW%Z*$a-Gzt(LG& zPg<6L(ucs+6DFN{({}#)A*h>LiECnJUSp%!sdsM0Ba*FK>u47NnY;H&zis2Fg@?JO zr}09>2+yJ4DvPnMs!}~{FDwtduBHGcNQ3&7u5w#l9ep|y0y|Ew)j!~{FM6gX1cJ(a zvGPAZ5QBug&b9n};xi5YgPmdQ$(+CUh2`QH~B)*$_W(nNj3I)!dyI#oN!u^I4Vi5f&H> zO(FwJrzC$g358BOG@LUfuo6uXKdjECCzaGEFRyDj!Vx*xOy`etp+zZ@cqc3*2;Q1| z`M6jj1~$5fR)G6onXI{qefCa2^=pi-UGHP#yL=wlMX0N?-) zbCdmk*mySBVWEt1(!D*Gv%Q?orNMPYtXu^eV@+~`{gh+(CN6=lZW|7XmYTy~y}}>b zOnA_-16p_N3>ZF?@gRi?Y6(+vWF43-7N{eokcdJ*9Cr_Z^bl+|N0V&FCI|FVgzn&c zDz%!6OC-g=T3Ua@(jjX2F%M=4GW@cjE-~k}o5epKXiHJ^m4%p>fy&<^h>l z=oPHbdO|{;2fWyRyh3F}=OBFb`<<#}ZlEB3j-4i<0XqXHB=+AMmmA%K!#!FG|F?}# zEMN-HcRj3L!$(kjKRm#5a006;i}FS}Yfeg5TF06Mpbmd_ zgPMvy@+lCAs`8w?Smx_)Cf0 z^}ow~Q=X<2LF3E(|G9u1;054A2pOR;S8K`%4>*_VcIzqYVx5pMZ@I!fZ;{{S%|_#T z#*5XO{1>r)Y!i(!{eKVe5*NT4v!t&JMc)g+g2$a#^xb|ZB#+ zFHLnqLE8$PqC8y3FB`k+efiXd3Q2i)_^{@HdW?ytAU+HunO0s^3%nBy@JfR z8`j}exwkj)7$ClU4&HeoZ{x~fpgpK4da6ib-k@O*0BN0BtkXSrsL6x;-*ES_k zFq3JY)j4ZCc0Y{%c1#lEn^fI#QP;B4fxAUF2<^z8!U#}+Q0U*(lo#Sp#1($%q|&x; zZKnYWPSv`tObTF}!Jy^$R5Jp5RW9&6yr2pIuWwCz`%zv(~P*Lr+Mo=059wML3hb?(}omG;$D zd*p4_xuU9KG3IkQ1cHs1*QlX=S;Rk#CFQDUrOgAgYkqUKcOfBiv7Q@(vh3(Z8Wh<^ z-?d&x>U%tU0;;I_U0Oso`W^Oe0eK9eCbO}g0j*@8qwQxOk8qLfF8=u}D13qkjT)WP zuTTZRt0-wyi-#Ic8WtEJ`_)R>QLVQTBG!T&8PEQqM$;!uOQ3m&TI%Xe(CV$CE4c?d z=Dd=VCLkZNUKd8I?sghnzPYI%a?vfMfbVZzA%!M>*H1gIFtp1_7D!%ZJI7keg z@Ks&pJ_E2nJAw=eOYYTw#Kwjl2~Mi_o?Su&(U6erx2Bj=E6LHR)|;SI+90dVe-j$` z=(Lw|!BI0G+_`LGW1BJ)G$?j{gyq00h~c37U_UeK_uAGi|vk zeMpWLE!^b$Fftq`#LC)=11^et?3e?CpOSRuGEzskJHQ})j9dYJw{)z?UaIs2Qtz_W zrl-_;yPXeWuW0g8&sl>>=2aXj+gA!&2=I3Gtfi8BZD+Yd?gemiROBg+j9WsQKolu zVn8ek?Y2|;p7gXH;t@v_UK(m!WHI4T)MlYw9ZZeOcc=(upRu<_Z}d6S@k z6KaLQH(epn2q1zu0PvmKK*|D~FTXo?tB|c$51rZ@TK>9XcsY z7A+aR7ii%i9%!zF$pQz2ignuDsY1YjKRLvO4sE{#=#c!ncUDo3Hio}sFd|1gF(4O8 zVlWT_r)%fqQFCTWlA6KpxKS||n42T>Aztv6Sd#*t;c!VN5GdFk$h3E354-e646kxJ zSrz>5(cwtUlcB)07+BH~XT1c({LKAG~k(zR|v`MT|MgOqfYJPaI z_2B`i`G%K%FW#*EgC_UsKzm$u5I}Ip1kw=BA$!{giVzpUFvqNcnTgRVo!c_gG5wGx zCn-8Uo4K_~l_XKXQU)+e;R1Y&!rM>u!tiOZhhlKR{@J`e)+Im)q6ov9LZSf#nbQq^ zUz}VbGOT3H?@MK`%d*IUnz|f%yz0IngOgJffgS$ucF`CMQypg@13_9X3 zYwB49qfsb&1Aa|3w_cCjc|Uc_N0enmMOb?+(`MV7<;DWCP*tkD21 z5mq8t)es zH8T&AA1phJ4K89*a={R+0lZl=WJz^G#G-84;OjP2%Jg4oe@npg%W*G@dSCm$1dk|d z>x=>>4O-S^HQP*wyqWmee~AxQJv}yx@eVg25?OXW%=dnN{W3lMf6X?+3-|0G75AI? zzZ%WFah`-n`e7g?>_7n5{c(4d)hz=AhF$Z2CO^A4bZ7+# z?OWE%)Jo*#iv2s|`FPUn^78y~#IJrMioy58q`4y*w)Gfa5Iq(kI3F9Q7Rgt`$a))> zJCbPqR@xAm13TGC^3JeTOUTBe(ULrQ2?qFfU1xHa_Z0QWIKhvj8DpP@l~<%ti%*^` zb&&=@O2)mu(t;*bV`33r^muaEq=^<9lUH=I$G5HWpM%W8zeumMH_1O$cY%n=RPW(< zCIypUA2^YofGv(G0UM+%8x@J6y>5m^C>QyML!1Vix9s0p@J8c+Jn#XF&<kvb2m@WGyy74lHvrxQTTMdi&+q)d4t;R58d;Q>8d+Jj+O9Bsjq5J`izuBHnGM>HY$${cUU8$U zYE_uAS$kOob&!sVqAYNDNS@dzELQ&FzzfUTWHyr+RVUC01bvNeyF&M1WJ(Av6J06| zwMBqnGMrhS1(Q8#+|*xKviF`a82yLg?<=S#bj#6N8l&i@`$BeKpTO?Ry?R3+2XV#9 ziXGrCpbs{nvUyKr#QN%Vp97H##Yw`%6Nfh+%u3$x}~j00e!k(v2-3aBp8!e$(& zOA43Q<5M=2+GALk2{6BQiOIB{=W3U%8QzdG2PK8RC1z5%i zmu4XGUgvjSZz^lb}KsQDl=64F$i7N@5Y3~Xh0zF3U`QbsU#jFmBbyree^6!l+3J}4K zJ-2gNv;gRWB6HJG)dnlVPL9L64#eu^L->AQYoEg>r`w%qV+3ORvgUO^7be{P6(5kk zNAfZh;u1f3HHqroNh1wk(pr;N?FwAk;DWJI zcs5Y5f%YPYxSh`9SBtYpMzzRDU1jAAL<@#UPvU@DAPR=z*Y`0m9wX|tl?~!z=)H~9 za$hDq!9BPBM(=t#?qvf7@c?Q2Em(OwHZa+5fTXHt=rC@27^46qJcZKNVp*}Bix8J= zK>!&@k23wJXyhh%sT=AAHcpEKVE;gq-ZKkKGLXwQbKHna;(bfA)xYK zD?{`ft2-`;6gV#-K4T?uBA9LrC9G)!F+OBde!wNV}vXH z_2#~!#nP5t@2U0s7Y2@M2q!I9ysnG01F0cJ0$uYuZ^GaD+|yE$S7li>va`=Qm#x|p zwS%gO0^IIHZf4*G4Go{$*x#x4u8$$-)F7=4{okat>YCUm0suWJVEJpC@U$3nELI8d zD{q_*#D7My?zwlBJ1|9$jH&ZxbUgi%U^5i#O``dd8Q;28;eQq_iditl)~FynKoptL z(YKQt;qoK4^UC#`MAGkg-WlJ{nU02z?1TswVo4svECg#MHGjy&8O0NSe;&)KFcC${ zf!q2%Sk7YUiW|hpm|~rBYL{^ll0PP9qjOks) zYc6u9PMnOAW&blY8La5z%#>aW4;oi*j(LoEjdSwwjrkd58={_0A}1Rpc{U{BbXE(d z;UNKrKu_DvpEWifI%%P4k73}qbyRf992 zSXA47OABtz*_f?Ydz6w`*|nf%N+)V))aDaqoz1xL(%3A)6D7gZKrS={0ipql7bq;R zdFaJv%-J$w#v$vK012J7Fy5q>ypDl) zC7BXf7inTQW4{Emb~orDKx$9~1`8^eVIR{={QVMEmAf-4Y_KS?e5l#-sUM|$-YA{v z#H+0USOWsfhpzjzX97tYeELNDQCPx2MRGzd0up+6l{=AMf*Q;I*9F}s3!>n@x$XHYjw3-V+rIh1Jlqo{rU#}6 zvtTMB^Jw(Li85)iqR9ueAwZQDTaGh7$nhk`I{wAq5}98-tP`XQ09!OXkWep(IQ|C! z$1T%`bEt2O@f{w`S=dfMySd()FB^<#RSj{5+8{FaUn6W=_)OvWWi%(5jApd1HesviTd1( z1F-$~Z}a8Zzv+Mf{{02u0*LJhU%zd8Yu20F_Th7W4V5^#Jy%`^j?rRx2JC7Td~VPl zF-s1Nn5!C&tMO0-Xd)I6D_pC^l~icEBqR;*QG{D*IXNDhQS>BLZ-+dO+FE-GD{ zNAg3K&SH4?iLnMcAtIw!2O4N1l!jbFXf)GC3^76Qs2O8FEGdpeZL9|v-qbhO#mu8! z4sVOUmySrrqZ1Gh=Z+2Bj<;VzR>(^@8t~YMJW-3qqI*Wo_SdbeX?yHyB*4^~m>~G8 z)H(g}oYqFa=6Qh5a0xTX>8I!Uwo?pUr|fGwyE_Aa61+xmz7d3e3*Ss|_)d&0+qo7G zc369Z#M*@N2Wg|~T8<^MPkRj2c*A&ng_Av_c`>0GNlzs4C~*s3xIgp1_LX?L#KKj} zJX@1KM5+E>8=iosN_EinBQkMKTE~)M;6`E3fL_+@Lt2OCoZwalQ6seU#XL~_bC8l3 zI!ifT^|#`Rd*pKJ4!-@qc291+W}7*c;;JS``yOpw(|&Q-m9|iNRv|{V@ss=T-;f7x z1SRxb??r^-^H}4JO!%uT;1CMjfD3k_qRlLJ1CWP0KUX&YQE%B#(B*US7-~XXI>(|y zN#L|^YlR7)ujw1L*c6v<>@Hc{d}YAAF+A!0v|$`&_2^LB{c?rmpPW}nE?u$!5)eVk z$xKs@b9prL)es*jd^9w%<5w-1Qy^Ru={_YnS)*Mtg&J~0-NZ5&5jq~LX`1;D+<-N-qU;#|QboQxeC>Rtrc0v-HQt*$(CQ(74Oq!uI|%!wRGL#ZZbrudDLppTIs~HS{t3UT_;-mD&!e7G#U# z(H|fph}lBx_XM`Vtfsjnp4-7kB!`deiIw(hE70oZy)oXBRL>MT;V*ZnF=?l3U90Ko zM#7W{$(d<&icE!@Wf|s!XT7>ly@joaEj3+zyNP!w|NfJ~EX|2;Z8s3k6xXr?**lV- z7b~3`yFcQayKCExa$C=|$}y%z0dLA4Sgz)%eZxWhaAeOCD^UBKFR?tq8Wp=;8~VKO z_rl$wt)Tgnt$}l84P^~{CNo@oR4TE;(@$^H)y8F4UsB~MizZY4$pmq6MJS!&u3v|V zO(ai_KVp}$RBkW-nDp$Xr0@$_DGOhgRz2>B)njlxjeJ7gDXS!&ONB$`z`q)N|%q^~mGe8;u@hFzMMgg-XgkbTdFYKEvnfji(_z$U@t#L?+G`XtBUNzTXk z?nu&V(Q7(6dK?s%%V~u1>7;+I#QE-eli*}f-Ox7T_ww^j&rh zO+b|S|J;oQ>=MPeOe-2|AX2D&K&<5?wS-4{LM4F)qi(8=Wk+kCQJ%+^^{tLmTJjMt zQ^_b}_K{|OnnCA?Cas4S&5qDYUoYtZ(hIkscKy{1bMH!4MjVka!SpCchn0lVFVS61 zNDGNLzOtk?cWS)(AY(t3MLpc(S>2Yv7BITLI5O#W1MJLxYguIdS|j`P^^HTtq|H+M zY^HiSEpVGB;Cm0XGPNT6PmHAZ;hSx+J{J3JGlhaZUG4Pu!^&OMBo-T8hn?#ZzmrZv zSH&C&r{Nmt6K9dk^L31C%DTgzCe4WS5<(tJ83MFR6qWLN#<}Z7QbH1&mAE)We{{urM_=VH0~FvdfvtNGc+ z!iP3usvAg6r2pXa#J}o_e~;pqCu4c%pAg5hU4m)Toh4HL9EgA*@%u0Vu8C(-x?O-RuA(hCK7a#&4)?issY$TBFR1 zDQU>yYv?Wu+reFT1q^@yC;$im6T^L)=cJ@%YCynedG9mu{?pbWsufw)`tzvpj_~t) zJb)rD2%rcknIfrkTe%PU@qWZ8Q^}1GIOXa*(KHFEpw@FD1VrGo10rygFr*q^vJmRv zI;do39aO5)fU4E72L0be3WIjudT|wv{qIDO_p@8PkH4#=Wv2Rndv$sgJcS_dP5OVm z(ikuNpBV-uprFACq~oG_(=?3(QY5@@fH(kRMH~QbG@Pfl+VbAtY8k0v&;L^xVb@}* zfi6bC|1M1KeGZxTQPT+cZ0@6*{kJy#A=TlLUEUG@yEXy$Me)BM_WCHj|B8VuHQRcE zUqvtf{mV-$F~3&<{|^5By}#e-3nCEs2z>l|QGgEu5JBuTSVK$$94)lE=G={z3P}xP zW0x5l-4ypmW?coF2>{iNhY_jYALcAI74#XE8!z3>gl;UJdsd1W83b&T*4W?#x()zz zqQ&Y~^QC&eG(?%UQ|#2#p9bdikn{V}o%;Ls##kEm$?QcrZS*9Lc4X zc1vkf$=>pO!-nHT)oR_{+;ZJyX>`$G6^aDSsU!{!$yhDF<~`I?OC^lFD?JJ+Dp#Bp zpDRr(0nCoMas!m`Iq(-r!xMl-_X^}*Zmd->4r}I0W2US@rLg%>NkWPw2nEy?;p@59`vY;Yq0E zKG&`axN4Ms5)whH@WAc#=HO|^pMOB7zVrS^tOVcq`OnixWKge2ID5ZeJ+}_oxMck> z?Q^>-t~v*h``V(2!r@dR)+A8>3nXx}Q{y7!`2N@8y6E<0|5DNG8^?J!Y+?5wh+SbY z(X=Y6u=H!{FGSpQyTZnVSyQZmI@>}l_wXNt5%G8d@Ndr}_h0W?j$R@`Zz({UM;lGV z7r$t)t=U-}sdG5q<~S(68)mC)w|jkp7hf?<_@MZ}d+i_#?|EBN71w0U_c+?em3(;l zOZpKn=d90JxPwOjJlf>v_W=JAdvN`-!&|k!7q7Sb@7916VcGBVrzGrIUuJfQH;>DH zj9KX0)-+QQflfYkW$YCI0@@zkGgW0p zzXme!rAF3uNr`Mkv@QFj+f!4@t;=i$3g;#2Ul*v8PmGo-c(J#=WvgXB95^)UMsL@u zsLIB!chsZ;F6F5PcX+y$+N_@y$b4<^%y(M`UWu@Juc6y$#gcyJw@d2v;M*rk1xF{g zn1wN{fThqgzgK;`3!a}3Ds*Rl>`eUeOSlq&n8+ssef->)#0+>lw~iW59>1cV+%q-5 zMs_as)foLWqnxPZcgRUUxNZIWy5uxu__dBE4>6eW1^z_3K`tre>jg~BFeLEm?F@2B zgu(01)?e-*Y4%M;irn#IGZO_{>4`>^XOOneBAHe^G57rMnT}@AAZ>>biMVriVP1|* zvFx`GJ>S<`l`hxJ>JnqW=bdGUg;>PW(|9lCBdp{k?YwqNkwj0!dis7l#N93y`ak@B z;a)9OV{D?+A+o)rp0S)xz-*szxb}&1H8rJ5aM2N;G1u85i8y%LwkqnAI$Zna0!uXG zFn-o-Ib}!O>O6VJiX1BS>czjSRrWRrg3z&>x)XU>iJuHZ9<%d@gauG=RLY>Ugq1h zih@QD21>wcJd_k-;Ywo&^S?ORJ_VyUS#N&nhgVjNWI*5 z(}&{31Ax*u=TFOnj}wDAVc6;iJRP=1uF3Vt#x8Iu+6*2@+64)6vhn`x)Gz3> zuS*c;ST>FC^tt(J^E4A9QGAl z3})ipTF+mRY-`vQU!CpO?0t|0ML#k)BZ?{7FP(9~K~hUQK|dtZiP0AG%s98$C}rpK zc=g9jrd@d2M3W580rvgG8QJzXANdwtZ~OgeKe#4>d8ZJ_@$Fm-*Z>Vy2DYEL=+vmbxEak+$9r1MvrKYzNA@OL0kwx;4h5_I1>2Z+ zRNJ{z6kk<^<&W(XEy^ZFIq(^~a32<#`uH)))Ga^X>dM5=Z2Yof zW951|Eg{fGnbFF5G-Xw?N4XKte&y$yuKB5mClMmCAozv8yODl=z+B%BB86d?ks%}V z$=YEbRrzyOhLhHkm2kTA?#byzHt*x-vGMCSKDB4lrwon9=zY8*WYIA2rmt{AcdG9I z*u2m>Jv}xU_XOEk9u0(#?Jy`1GjHdUbuECDTYE<5s*kQ8v3~0fr_th0;BSMA7OAfb zlc-wx*!&ci29|B4n5&j+CkHM52&x~gxEyJt-F)C{R(&+~_lD}jYwcGod-FsPeLF{0 z8r@B6>B_`ypS1qB9}ySH1bw8u-7fe4fl;`-Y4T5B7I1W?c{wAqLt3Aqz>4>!U+n!{&uNZ@cPqgw}`7xbysBfHA|MUCiU0! z)|q^HQa|&2@R&-A@B@9HP>d98d`nN|gW1B{w4wKFYk^ik>M~%CKLX{?^G|jFp9xI z)=j&vw(+?p<~d9~AAZ?v2ME1}G}IDKX%1AT`Z%>r$btQoqWXFMf%i{sIm+>K(<)+% z$(>2Kiqu8z9064Pt}XGqSZz-=I&BBQ+?E zfsle*G~{FSREpx564R#1iQf~zoyfCY1)a)9C=HW>#Z+>&ZIySq(lj|BsM(4X5w%3Y zcml3+^R0@mxRaw*e$3sokx-^;6AcsVr*stdIQcESLjHXn^X2L>a;|H!!AbAu^dH86 zD2UOwjp2PlU2nRqYRjiZ7Q5U-t`@Qlu=U$J&-{0k_k8lw;F%ei;BeuS>u(>f@61cs zGa>H1NvCv6lrh@7UcivtMwuC0=;ha5eXT;XgIHyHOoNIh{+^uMX`nn5tHLS9uUp*htYHumM)AR8Qi7i^#yz0+P=5%uJ6GJ< zCqsFb-%;sYxkx_v{$cc@ckPmyfnE}0U*2J!DbL3odcPKl#%BdKv~JImjXTsF_41sD zvKp1Qv%r($z!|Nj{h)P^Z+dA7acR|X>UMrDtZ1!}ZsT{U&Y4HiVb95UM%UBf!tS2s z`4&3@JBTK)rZzmKB>40tUA2$IB&meGe`$=Aq{c35EI3_rD{HU8pv3tja4jy$B0gA< z*2c%%r2-eTs~nqxW=P&@gE__-bESXKs54uuM(4f4DOX7fWAzD3N>YfNghVDXpNk9} z%-+6xK4^|Q-ZqPUBT+=joGl%xN09Db_KIjM!x1EM-a|_)+G7@{BOsH!3h^NlT;6}h z<-(`!Z#VNk|HaLa<60G74s$dS-nmkXlcC5~=~N+j>Y&WxlP-_!#)iC3Y7p$gZkLNX zfu>B2n4)60WsKRVvR7Pxm{eqJ54MvJ8|MPLM-huE?vc9A4n<|!nW`aAb76xj@%T|Z zJW#rpPu4xgX)%N+zEx5q_U5nZTgfXKBAv(W6|TDo3p0eKa>uH!#=L4p-*F=YrrzHC zIFqLlnoC$%tFSdX`W>FeYZfsZKus8hcQ86r1p23_8j15;jZL@s$%X&1??LCKv^t|6 zqMgurdOCeqsE3F3vxVs+W~8vZbG7(feS?Y`sq5oDh1I3+%sk&EGJmDL7beeDgTNvY z@bcj5Vk=2cpIzEgf}+oDRjS3=L!rx|kY{*jM%9zOddW3O`VPh*CZFc0(e(7FT-A&) z>WR1EN5N_}Q4A^+@&h*B@*yExI1h4vcKIR06edk-S5mf98DdCf72hv397n+eL6%8wofcO4U30tG=LoOVQ7*Myw`a}_X1i7&vXPb>tPQ~d7tT3E zl-!+N0?t_N*FxXpv#HuG3hEZac1*rTDJor+U$4DaOH>Eb35*&cV_K>rTz{Zw#96vtzKzA%ZXDLz!a zd-v$;AGU*wK#E63BZu$&UUXY#o~e1~@PfyJH15~`%aJruwf=s@5NN6;ae{fN`LR~% zCkA*_t?h-o)Sgt^7yKEQ8|~g)VdU4Jmn(Ze?jGL0DM2_BQce{eP$qA9GIYC8X7jPB4_MLBSNgl6~@j>h)4XI zD+a(*L%FUs8-cjGtFfSKlxHiC1g=QtVxC@1TP4_fHO(eQFba zZux+VNlRi(n$gAI@C@JF1;Erd{zc0#|4y%{X&;QNIfcI}qGI7*ubfC%R<+Lf#(Kj$ z{9$Tq5tmyXqsRN4<<~!|RpyD&@l^Zz8;4%!Etb+e?{CF9nlcV}qvI26=VPfsj?2tO zlSnxW%XZ#oh47N_ewGL8+`O*tdXK~v;$02C5f*}Ao*7YiE5&igek>@8~R zJFkHZD|bZC4b#WC$=qooz|jv$T?6fr9g?TiCc-W=sldD6{hm{8-ne)zU=%{x#KiwG z$-MJFlLcA1q{h4#)-BrYyttqU=~TeMhQsv8r3)>#^Hc$|k{H|EU%xlH$Y?|HX1UmG z=$*IijQz>=&woab^x#hvkpV0z}^ zW4v#8EjmA#_G<_^OSXIub?mCuxtrP2GSnjY!>fLYKA15Y_zj_hvdn4{jp-@KcAwBG zt5H)2wQU4htyRD7E@F`b&aQk-ulU>X(b^2FcQ%eNMng&K2@pl^yo$9#ut)pVTV6v- zn+ffq_x)36lkn(hataW0zCHtCiGPbX!pS;$%toz}Dtjb6FuKJL@ zFNA=w(RIC2%U{Z$yWA$EW?8s^Y{~w1UAs>?)k^U-&cEj;B&hMR%29-`AHUtPFPiui@p^yS4*=Hf3IuVWbEY~ z4>KezLuPVS!jlxQECg%poIK)$TPLM5r>dAauraOnF2GeBZ8!pI+G>FtLv3C$h=(Cg zN3+IEXzXi32EJmm=~Efl-angbVP>(+dA8iE+4x}R$L0)Zc!;Ew3NOwL&aHvqQ}*4m z78X{k)XtT|KX%;`hB9)aIerfCvE5;>-#z^3^m|TmQ!)~jfqwAD=`9(gq6}ZrPk`914OzToq$=aWvTG8ck~{sP>A`;zMw7X2!9@IypwU_ zpt%CGrWR_Y?WCMZv6m&;(OeBff~D9jj+&S`M$byMUq|bSugjeOc9-;Uu9O_IB_tSF zAdXk3Ssi+yIU5_VW*`wq&NsWY_5Evn8Fw2IzA7W8A%&=|j`kzX)~~dEhran9m8F`m zSRB#usyrTWW$sDv5LU~53x56Koz{!Lsen|jbit*|lMhS2nZvPcoE`~i003C~T`%R+ z^icu;ApZgaRk(eiC@j}Y_?fTWdq1M!|gli)t4#5!E zC9%7O*e+1t#Dbp=dcj5{u8Tcu6req%8d`kQ-qCpaf$!6adZk zYsvw3|7LO&zpOfU9 zi&@aIY>b@}T|;sbw=P>rh6-GO)O6Lg?FECb@#`1J#m4@?$1DwbMKUB8{M-nlUj5Do z?tes|x&THL*GnCltVIfH)svkMO^4zl?C#slC_)gs3^(el3?A-RndxN>VEA*kMCKX6 ztG4T{(gQThtX4@WX{7S;h$}J90N$JCH~r<{2#a+i;#!q7KU9J!CtypIQAIh=$1`Jm zSrHP?9t_P0x$(NeSm_1N+wp+43~0Q7@JjqD?uT0TT8x>4uuOaR)md7mYG7hWD(E0KU_fBR8}EHj=q{yr_baA>J&CGczSz56$c&$ znl_uPTjGlYqsZcwS4RdT{iv4~sLq?dVnBc?A&p7|OZoeU35ALY`c04#@(e4E1|`8} zfTKo>lgXsBr!(IXpn@;Lh?^aqfHLIxtOlN_e;3tDO%fNOfkuX%e2Ss0?`)J(`HaWH_X8{BU!EHX`-bPjRl@-PSP?45xNSG` zM3DM)(^OR-sbb1ohRzSvc_KKek?Tv~q4|fhPwZg|<|XsKLC6|O783SU^tLLiLl$nP zvZpleuhK!!u99Fu0F-+`cguyTC1%M6Uugt^bH}!}Ajagr>ZGgX2Imc7Epfx}2mDg780fsclc6tY*;^xk z*T0dL%kzO-ZR}(f*vDW*z|}_@TY3-=4mVX9cZ?{XB-zv0X-xiPRE(8a4xS2G{tTKn zGOuQl9ggM|O!FHT>@e&(vG)S+otUGTfRQZ@&3%qJx~)>Xt}30}2&WLXoeJQ{afX$s z{~Mfdk*k5E`Y)!i{kRM#X)j(HGAVgJ=$lvE|7-X8V@KyRH*%9&o1;%yzRR$FzQ=2O zF$q5nKGQC^{Zf5iAXSxU|AA)(tEFs&G0J^D4@NnhU3^+c6-;}o`!j#J>g67xC2$dy z99A{abU|&e5;yfM><-af$6CuA@Vlv>57s-Xc&>V_$+c7(mGGM}d8AhLMEIG8ug{P0 ze~TGjz|VIJW7GekQ`L|*BTrg(Wqr7K%>LeaB{eRReu6@gjir^dS&A6^0M|JxAky1y zar8@qkBCWcv5rP%$lOWJlF{}0TYqgA&DmZ-ihcrf!c^YZ75Us8BMptSq9~P zl*Jzk^^=&ir-b%vRZm@;goQtiVoFSy^C#?8y(RPCXN_o>4JGyp{r=khghE_rzDFk1 zYyG;IDo{%?6Pd2-1ZTHXSZI5RluU|4njOmo?Sb7I)k7xQH@=0%Y*6AMFm?d7O>vd$uZ6*ItZVZXH>q)_(rEsN`p>!=8(QA>K858?6oWy7e^tzXM)PTLw z_QeqAc~S)LT(doXGs>=mu0(+Nf&*7+Pm5s7^%1>zmlu_h-(d-{JwD1L9)C7U?6A>J znO-tEp$4j^mnmswHYOhDmJhN}yyHU6w1wQtwbmwDmgelZsOCSfBWeJ7k{~}R5+}M4 zK`LQC`mhz~-3w?LIt;KWpxwelj83D%H=qFft!D2WzaHc_OSd+L>b0kVI+NMlqBBSv z;mkMTgM8m8hEz}w9B(u@RD8cip3{9ErYvA{iO?t)WZ|N?QW%U9VF0Va6-}V27IYv8 zmpK_7ZW@&mHPD#AE|Gvs4dDc)Vu!-Y;0Yr73o}mRx6eLTLdA`@v`JtSIrVDZm|RLp zl>y+_n;CU&hJzQ&<_yZACKNfe5M;$K_pN z;ltcg)!OdyObsHGZ_*t0xYpuz4I1IsVX6LZ&ScNJFdLzGZkk)GYw|e8BrGljzH9pN zTrKOFjA`}a)L-Tao-G2CHC*?mB}C#A|dt7EbE{8 z7y`p4#nUElR$S|iMc}%>eDh-*_c!0 zEpI<(0Uo;7JPdK%w>ZZ|JD@&{r z&@L7QX_v&`$~scsdMoU%%WqUa9S`}?JS;}RgvJ|PB ztsm8#UnqW8xFS_4U3e46suMsqwzotRiQ$PJMx#@N-&AJppQe!bj2mqK^4Z9e^aD+I z?Yw%?u)<8_%_c|!kdKU0430g37E7dOtXih|a4S2UJbCtJX)Onq&BfVS^4+55=nlzY!zR5!P{uC(90H-VTh&&!EqiC=_zjM-ih@QS4|A(7dBZDPvhCaKU-nq-{7la*Yh$!AHv4^iv!?J9D<)&gf;Fj~EEka`~HVReAO$GElZET|aR86c=OLcFCPy(jYA6Uo*o<*aqopzcp_Dm@O&sd#XD6Vz z2sK3~)fik4i4cxGN}%kTY`O}vy_9;`9s>XQn9QXOP~uMn?R>8E+{w$DLthaS;WW=3 z;YY(E4~v8~K^0N?^9`GyR_UMQRmOFN+!?2yP17g%?+srB3$MUYS}sDdLa~r~>Jb=6 zEW|E-woeQU#}H zcqre@IjhIHdxW?dar`A^mb#jAoU=wgUJkwLX8gh2E4*0$KjL6JCbXdeF zp^h}8Cit$VzM2kUG-sNnaxutRAxa;zz%Rc&GXAuogM^O=hnvuEke0K6KdPk@E2FdQ zxl+aCYt<9>-p;-=8hD#`pc_omN@!aFb0J6)T_TC55+gyo<%(;W8SliA>A)ADjYDaKWHP6DW~ECr6*t<53}LUn?ng^%2}WoSu1xE=;aP)eK_=lf1PBjU z!b@xFcM{al5&&SIr(C<17{UG?9}4BXP|Y$1n8{R5F&34 z>i|NB;8`N@34Ll#9MB*?fu>!=ZouFQ4~?dpHixjFL%gQEp&c5f400qs>ZSK`a1czY zxbqTbu%RC|9lYPB+CacW`gEx(BHA4?FHAE3=(;!Jn|M*FHrJVtyb<2Y2DXq8DVJf zV#k3o0@mlk@&&ozc(CUfyQ19>9GGTtUb2fBi6?szIbany>QdrR3Rps-R1|MiYP2%=Y~B62BKninKY zM>M_ax@8_CWqoT^##fSF4<&gOQQC$}s2RXJ`_9*bj& zi=DNb!$*!mwl59GKQ@4HSQMDy1Cvplz*1x)H8uYGL|^*(of45am)m~dk}PwaA76;X zb8fy@Y{kEa*%9v|Y%ag-GHa{{WwPetX_Buon=XQcQAr8>bVNN#%q4s@<{^@u`Ig_Q zzU^fjiKQ_MHxI4b-tc*iJQmI~DO4Fj`->36=`*0=TP zT3%$45tOhdEVH`?l>f5ORP^<#ekpD@^)(H@M)MQC{7YIk@E^}X*T<+d-s;Ywt4I&k z&vLb24j(7zhlc@CCc3WSGT}G}Lk+?0w^V1U&B{`9G0xh1PhUqg%~%+}z8Ll+xI~|e zf(l&QTKNh{Q?zUoI2vEA9!?2GwIJ1W>QY=)^Xu{zuhqEm{}}ik z5*g<0P`bQeOED2>lB?^!KiA)F<5eAGgu~`6tJmD%b9gjp(<>rlgHGq}LSWEQF*L%+ z6mIaK7|htwGnGn>3z4M3o@&k!12wcX%q%?yWu|+@5Tl^fx^t)0mfSECRegpd(xJ@i zPe`mfP&i54Es8uM0|#?r*>- zWq?}gWp`4je7aob1(KQ4`y$1)DovPTi>XNmXb|%rO+whMO;?+O^sJK7SJmozsN=F? zU^miE_qLv%w9h!T<||Pr;rfdJ+n+rOcLHr)i9`51)`WGYCY=Ba&<2J|zL(BL!U^o{;bO(|35@^!UPrC7G0i zG$Nvsi>+R2bV^)ysgLowxl8iQWAHghDhx|Sh{nMZ5%c(xYNL*QQ~F~@QiARjY@ICg z_CB73U)v4vxp7(BNU2b2)@`647#hDMWkxLSpn-#6)cQKxKw<>97Y#3HESlRm#t!R! zar0MC`XU4pHY&%I`#4M2XF9sLs@%=oh_!`LH@%kLlA1t6oz%-eO_MT%bDY&Sok`(` z7F~x{^TM!V1)V7WP}Hcm6mwY+4XJ($&0wvsmiFW%Urk<*+jiy?v6-Mb0ZDBkCP#P7 zb0h~XM0w7D7-fYt%XCVz{6yN8eHQwjfI^B*pImgC2tNsRq@fNLd91z=Ic9LVC#TDD z@M3M_dNhhxnUlf5v_Zzkq0MjV#maLsgk*~3x3IA-KVI{veqIGy-1w}+B?BK-EU}yk z6nvKZ&CPWJB@V+b zRXAV*9niu@s(=2_3$X92F{23?2B*Flnv#O~pg6|im?=%!z(g^Tw>rO?=Z1P(Jhd&Q z60ObkNUHLrv`EVIb@-|@bz9ituYWwQl_~1Kk^P+cZ8|e)`HFv{1jl+?hh{3%z23y@ zIeE>yh2#+DV4wP_DozFQC8}I{mvy57S*fgClVKu8vSlVj&E3pHkEF=?OrJ&4#2P}@ zE}M!d2gVAL=@!#19c|bhdzC2(^+;BkCgUfy`i{jpB(u?6JTMo-pZ{e-T|2@$ikWOY z11y#LCv|*U#yGs7F8p^~uzKZk7ExYj@Qq>%NC{sFqy!x+3j9zjL1z%7+#JDyFP7#V_vW_`ABZxQa%>>*^p{8IvIkU-RZ9O&A-(nR?Ks|< z1gn6aJ3lQ#iX_~;APWcYQP;!-IBWcHwVcK?xFDSbm>)5r*p-0Y-1 z%d@)f-yajAn%|0-lk;6OZ5TFPTc1dDHI1oEj;hD0zdvIBGG=xn^5Fh;7cZW`EllN$ zY4c@jBzc96qMJ*g4Xldi(jOF5pnGot{rFU=X3$S2oi8c}SFx-@L?u&skRN`vbN)>; zi=%42@db45!;3cA#CfSw}e_wVt*dE);hiwrZ zB-G+1OV?r^TBlG7(9-pW*3pnCXWB*2Pg5{)w`k>Ay-l&etIGPS2{sXVNVcuTavhgj z5pr(V-8HCEGA$NH!N`>+U=Cw<0D?91Xw}e=bRex^o!8fN>FLjWm;hhqEvzccYc$Gj z*dun?BB;sbHh(9kxua#0IhIhRj9c^-jq);o&(xj2<;pKNsOG`xQ0DBiRvhgIaA%$L z?DpQ)6IXCIh&|4)25S=;c@A+9kjx`l`J^qA-#=Y{y!r{)G9@OuS=BZfvYW9&vMxi% zKV~R6wi9!ke^(KU%A}2=08a;ak&Ka-4-sT}EVCMXPbjXmasfPfZ5&EG4%371k8wid zp@6X{@5E=T;$a>x&_4M3pq%xsr(>|^ z&$H5hzxL0&<2d9hEtj3`?Fqh&ZO? zY~h4ema(JJmi(CA#=RxDwd3##4K*h*2wK6urD&%_D#L7cuwE#)Y()!EBW^b~g=>ss zK{dC5dnPnJ#ZucKsfDgulj&mP<*Vg8&>fOmqh@mQlt^`Pz+Sh=O|GT{R-r_kfL7su z?H?ZIXz04)s?29Fh(aR}b;^d^LNz_Ch};MW0v&;lCod86pbJG3`=>1P{s8$vD%c0& z!eDkjfS#95se!WQ69#(G0GaiX$7vdr61Esv5T%T_9IFac1f-Rzl+Iyiftyq$MuLhL zg2Aacs+3cUH6U*RV@!+*E}ZDj;KBK zz9ZZTVGM=xQ>hPlAKsB(u*IsVn%vUvR=@q(W*XO4xd7yg+yq#&cJ4!vmL=dw*oUTEQQ@xg%FGo>6 z{tx=#Wvs5QyWHy2I_J_}Ly_=;4 z0%j#gor|j?3rZ=m$EefGB;W?<{(2;paCR8fr8;jgWm9giD;eAfut-;NYO45qP=z`{ws=&nL^ge>eYz z92>=1{qwyUbbnqjHI+>;ZX6_c8CC7yJ(> z#&FY-(Iks?u8Ydgk(Ne_&*|l&!6P4ABP-J_T8vI?@KHW>FV34R>z*`xo%3j_sxV9D~v2D z^lk=rO>2D5y6N~FTG*5OJRs!LbHW4L>#mNIkDh)T-3MK3{h-p>cEb7wfrtM8Z&uG<;U%dy}p{qA-YnuVR z(_K$&Uda6D>w2;IqWz|8V`_yeF6L z(I<==t{wmhAc;uA;NTHP0B}U)0RSC%p3_`vQ8F+#7MWL_tj80Z=T^c9GZDoB=DFU3 z-berdqXWkgsfw5@nJd9bos*2#Ob^Os6y-Y+AA;w>lYvPpYRRJZK*cczV3nS7h!eRU zH)$0+4T+?pt2ppJdSqJa;?;t(qq18DNhC0uQ;m~AUVMS({zoJodU)XTSWaZL4o->q z@GQBwTa}txEGopoNxT$1kEe4V8y|qV&lZ2!t(>GvDL#WIk3k$W>?+QiR)R-kgd5`O z>WV9GG~iYh-%gH`R+WsWB>sVsfKVg8RFoV*g0ka5V)C432_p!VO5uz&c#4bw;srdl z_y`j8col{Qf5>SVqK3(E8Wa~5U*O5J7j>(u=x0yY1vBd_#!!*m4^W9>BrcR4Zx#hZ zA&4V!0g+TxAddemVHxrUAFn0MgRD}w(zO6$_wNX097Xh2x+diq3I6&8Q)M~;ylV9r zI=5?NreSPTY|W?{}q;1 z{~GaQ?X`K1193W%iVFirG6Ha7xY9de7OJfb4h)|23}qT*ig+FAnzcwN>@#TeUmYV| z60VOqby`QnRBrkR_HPolCJ`bE!C6U1xZ8lJa08|wkpV}HT|YxR^(q7>e{)jZ^I?jq zqLW?RO9^7_H)_<{OUIxUY@P<4tIdhHBnG5G+m0KQS)H@?vpje0vm5R@U4y`nIxk7L zahZyScCw3%Ki}FIRG8G*B5>axP)~07@PJlVeOkei{=JT0fr;5q)K;PZxGI12*#!9& zNTL*DS>;U11xDT(A-$eRSEN8OqD^kRDbJZ+Zpmg<$aU-119fY8U!TnDS-;I%aN0#F z?jiKOt|024tU9?JkM_rR6cc^Yq+(L`a{Ul~iVLLB1)2gfEa70E0Ebe9eQX2>Hr!~5 zEf@U10B=B$zt)ObbIPVv$Pa=##lh_?!C|ujP+2ITdeB5WL>9XP4OHhJc-OiHoQ6=4 zMnU%}rtLA#*tHsfCD*FI3VH5+-g=AHd1`I?zan5^@qRX3=~4jzL^<$=_xq`7L$p)7 zi*Ud7OGT6jTqf5TjvO+`x=~$q+V)OvCJV#h+-v|KY;}qS6rk)WKrPZDfgl4Uf+8EZ z-`ZOy1+MY2q9xYuSZLHYsn(TexJzb_sL*%EU>)CKHUR7^^W|CGvl@!^=Z5*4(Fp_s z@yF0|J&ndHL}z}a)m=(f46Ni72vh%8d*%ymH(Z@3;b&C#u(4{U3wrkI&a5_;F`=cH zn{i{h0cZ$;UqpR%r7Qp*nS@z;UkmRRy<+58vMB5usa#dfoYe^GW z!Owe(#hrn*YoQADfM9RRaugS3%{}ya$Xp=QO*Hn$lDFhDk2Q4`N_p5&d*k} zlsrV4Fcj(v0fP9E_d)`PXn)fQF@drr+@d`2oeb|u=AL9`wO7S>aA!G0?={UXaN&)i zk}ffiDL+?SQ)r(VjC8RDa#oNLoHuSP89Fmcvv$#?Km#-&@0`W{cF1^+d0`wbov4@SdCJhLX5N%dDW-t{mwd>1{o8mg>hy|GYzQgVKGspoM}0!90(W!jbCt- zhn!;xdc2Yg$h>Tc^%O{FuUE;V*S;oi?R{cmrEQ_07}20RYx1aULmIEs2ilJFry`V& ziggzQuKBk|gr!MuSda$YDnw`0r~ED88`=o>Z7?|)2%7P?i5_e>qk_3J3)Qw0Tbb&S zjdjT`vrKXd3~mAS7TL|rfD|c4~JsvWIMTb>x{0pk2&OV4p#ySO>|pTR``0oaFkTExm!NX_xhd*o8ZDl9H*CWXyq zhq_RW54z%w11C?(ifoe8qA_vlJZkl4z{aGYLt*B6AaQy#mbx{V!v+hx_nO{4C7DsE zAlsQ=3J0@1TMz(oK<~#ig4&r1l)zaVL2kis%w3(YBNCEl{@MqFA*7LL7cYXt4p%?SDNjjLbsPm;I(0d&v9?-M?3<7ugEnYzH zJX;k>nckexC*l*+6=ajoG16N#!ZvlOTI~{LVdJA6)!5L?j){tsYa8(zx?}6VPz)SP z&#<)u+O*?!L2$YzT#Mb?!XN>#7un1~pd81eccZO)nkP#qehf3v7_h+QJ0zG3vyUY8 zkLT5Jqylef1%L%7Y~$eYg-?Fz3kRSHL_V3ct|hAesdct(yQUB59&mbwjFj-Gp)e%~ zc8##>$H#o?Q$*(sW*Yrg)!lUYhI>8!9D+zNpz{LT&6* zt#u=2TbrsMTfpUDSD4sO*k3+Z*G^J|s3G6yOD{&vMy=Ph^x()RW0w_YoJnd__N_EI zFX(VEz*0ov7V=?=3Et|P@{Z?^sXbnB&(8n3JrIe5nP@X)s#g0?L;`2ffPpE{3RDCD z#j55a55;mcmhjp)U8eTNNZrssJVJ~+xlQ}1AVZ`au^ri@A715lg%kG0mhU=%h-EN;BjJOFNF|v8Cd%lZXk(f<-fQe9_vh=eJ5E4# z!^Yhwo2yX5eG&izjfZdXa}|ir)h(NDgW^wRZM9d!VGgGK-kDU=E$l_vnNOX;8VM@d zZJd+Lc-Lhm8kiR&YJ108O34n{NJi~HHJE5q9G5@KayswVnJE(RC3;$tnHISdtMm$E zXQ+rX+WHVb&K7R>!mS=LKNe+9PItdtihnHwV&3ls19%pXjm->^cQ*BjMAW<&RMrFR zgn8>M4U)fH(b+ob*+i{kIwoi=J1_*MQD9g zQv{mZgdrB^M7I-9*X1l&iS&2)un+t2f*?G6k7f%`2Pv%A9Yz!z8@}8Xq?#$A`o%`# zw%#mC?sFf{-pWDy0S#HXVc|{zG=|#hGE7uzBD(zXtQ(f9JWHqfC0*o#oHG>!FaQk* z{a4k@nbjq-OLO#{*II^W{5LE=w?{`NfNQFC=yQO9$3T&nJ{GBp`)#PcM0SGJHIG`- z8Nq#^%+ip3({<3(FQqB*?=15qF!zKCGd}uSk+~wWJC1Y4#!)NSvs1tL>RXc-!n>yx zY*Y!FmxE+&+pN62Y|NM5r6`p!RO5D!;QwaPp?FuG$2LOr9k7p58{i>u$Kl0=J<*gq zxtD}C7k&>{Q873q51mmblni9#uW$Q96#4!&-@~$zTg56AG=LOY?s`SNjJkS6bBsIQ3AgFmn z2?Jw|y)Ic5hjoxh`|TzwcCp>I{W7>Z7eJe800Ri!7kEIiJd6;+98#jziCbkvgUz<> zhJJ1DJ@|Qf-AlXF?<)n{YdAM3{{Qjy{FXnPMw4zY%O+i9$KD3oO3Bk2bYL5E(F4gq zC5>^^r`P|wsE;W;O#9?i=Y{Z%n)~{P=vG3n?6RffgTiQ%yDEwYaJCVjaGZP< zx++T=o=Q<#ss{j^1Rf82GbP9wb{Q?Z{HOmexyQ+? z^?%u3=<|_UBofnowb?E)lv90EBazQsKJ8Qd>dBCo(s~30gVDNk3`Sxe+U)M(+@)Ps zQE?hxVf~Lq8%{q|d$mPBz^VcOz@qwz0e94~pk})QZA;|e?qNlGhV+w6Yl$48A=IpQ zC@?q1i-bfRnw?c;!fb|;GuMA*wcX%ar!^F8zFXHZ(QwG>J>d=)L=if$l_G$uC4fje zR5!NSE(Va6gd!*gfyJ1AvyHLHil8SICCs^@@X)EP86>4006_5d7B_SI3oqCUJ*gtR z!Zh$~1_}ZnrZ=W8L17;uNzDmpco2g+&O=$=q4YjCCsv4=KUIyzm+i{joxr!m@P6yF z2Nmf>0O?bj&oouLSJIKxr{qN{1~K{^=K7=4@WRJiakjl=CPH%G%M1k~kpd|)h^46z zpg@zrb$~g~BWk16eUchR$jiBC9lXc%><7a%0!@VmR*EQ9^sQ(D#4?#i7f!)iloZ1V zv|7{@Z<@U=UpMk+Gt&*X{0uMESCkPI94nP;X}sHZZZn+8f4-^oLPeOg2#7JBcGZB0 zBLIj*l_w>1xkP#Oogd1_2aw}Ac=;$;FU-sHQ}!d8i3~SDFtS8`F8e)(ny%=;ri$9e zv3Olv?i{_LUyA1k(4(Ix0V<59I!a+&-YKPQx-L{liy^pH_VY1W+t_(4dZBG1X(h3S zw%o40RpT<6KCQsz{h;Yzm)zpL{t&l19D2;#(*;nfs;2hCH?(#d3F2{hA^D zuxDGw{fsi^_h@EMqMZIhAmY!0f1@z$H!n|1$=J&3tW-6z-pFddLI)2Ved;Y3c)8J@ zT`SVhKI*IG3Vg*vbSJnHI$BnIy5FT#&Nsb+Z&s#4$JBhaMt;YlPzy+|K&onKi(`8$ z(JI`Ofy%9!_$iEZi09rR*F)qRi!01UnE;Rxq9!xH^)xU-6VE?Y4(i{V4U4njgDsIJ z9i0KB1V1eOQU1=2>_!AaY7?J8H`1sDp8jq9rTpv z;1{mp8_F6Q_>pkQ_UMhedbRfYDKUGuD90wK$9z|wJ#(t(xHN+Pnt!W%b^fac36CR` z%XWg4D+r4Ys7}hG#)~SC1cr8YelF7mX{^l2Xej`a-#zZfUQD)VX(tg+4{yR{wzYa# zExhGTV5OI&vN>GX;lF&Q{nX64@*qkd^(WjULvwe8tnJkfR}llggdtKOIZfrg5LiG6 z!$5l>azZ^D6KE0HXrCbbcZ*tL`GQ9XAtiD_>YPz#-~8h$RE!F|D~>&#AIHMoMR{V` zsg$zVk;Ek}$)46@lAB4Af;!c7@=Z|IKUW9SfubP7ToXS<>*HIcsGl3xF31fEJ#L0y zVj`5_cb!hf#4mrylfO+Ci!Lgj0|LEh#w-m)1MQUYq@BdChKxmqavmtD61>8g$JPeD z*Eqjp=Xktuuw>`vB&&AEmmPh?Wu;k{)>eAB9=Cf1=&bM_K)s4R&ZJ%f008uJzh!^{ z@}M}>h#AL1mr}kuQ;z-m^MinLNjY9fP#1&(OL(u^=Bz3ldJshV5Pj^nTQ$SiHXl`T zAMb&+)qhpmk+-bdNoSzy$g>eydV1YSsr*zV^gA4Roh`P~%4#HIC*)fNE3&)qNniVL zq11!v>L`AWXT{4R4a&M-jI?Y}**~aNs8DS$wz?GQ%DGo~hnNGdXV~ZM^d!}!{@0B2 zv*pIJ+afilE>MRfa}ax38b1eV0)bH_8BA5lfxy_41M2c*>9UOr5&xx~+l;D#V37z7 zR&pw#gzOV(<>M+DWfZkK<0S~p%?h)eWOTl99Ni=iC|@Uya;&! zz$9Sjz>hW}150iEP2cDwz^E7=Z~|k}NXtO2bw0vKuS#0G7G-smEI;RrjfSLeGVwO; zf*b>Ho5|P^7)>jjD7)yOi_kYpf41H(h-CS9%QR zX84FrWb${Nb_CP3zP7aMDU6CwzK4m|} z^nI@@Ras6GpY*q^dE}nzFB|#m3S;?;MBMpeYEg>4y~WT|V;t0!y6N&6tzc|RE*-@3 z?IKoZIqI!Lmj=Grrvq*0YR#<%T%0scqkcAS`dmNhnHju4Wh7=148uamKw-GE4 z%V%_1;~~ur-8b;WWyM~!gXM$OsJC>nV_m7OQ`~)t4K7gyh$#oXqU!1Dn9WlsGp^~< zAb257oP19HGgVc9Ht^rJBC zW=kk&Tl6TJ{o_F9FhDp)h^QC}`;8tbVupjaasvMk`XLO%5A1}x@2LxfZ;U7A{cv6w zemvmYVPZVB@%pl8n{O?!JPp+Lgr34fN-`bOr89vG?0Bb;XB(WkAYnc<9yysh<@Fge zIcy(ekHd_A%%~z&kOC88>WzpujEX%RmKZ_+Fvt?IadjKmRW7x31n6=B`n6DuJ!Kv* zrQ`UW>*{v5>gzdI#8%Qk0!oz-g9L&^Aez7&Hsgxg<4upjqAi(ac5n9d`xvnSleS)5 zY5Yvt*?`_tPKeXo_nUF&oFWZ>Ujx{ieo928Fb7ewU&c+pj&e5)Mcmy}M4$U95##@3 zB{H{dHGI6=Q$vDCm#Qe7&#T}YvQ08TG~a?Jn!Zo*sYk~$Yp`)>i}MO*%b<&LuGBSq zyjT)tdY4nB-rP6gIx6H?l1aNMwbZq6bDK9w#b|E5N*L?YOwTW<$0yCx^YYMHkr=lY2k&Nxl2ep!=pZ09zX#i4MOLl<$Af~o<-rhhB{Zm&j zIY!5RwbOLsyGJwV-u7m0glw2mHjlB|!se7>kkTbh4&vAEEC^%(eCRWIG&O%zX}@lx z^y08XF}ZDthGloxZ6A<2T-I?T?7IfE+YsB^q=7QOnfnvBFKY^x@?NGA>o?AA-xD zk}I@;Mu|CBvYKCq5q5;_r}J&{ILtBj6kz)P(TlTHBB4)B6Dw@+)77Om}nW| zCae1wt03RPO4RiIwgVLcqcZ~P2G?ari>~Q%nw5qBW(Maq$a{;);|Ld@E*b2krLpLYquw0o zCprUy2q1!uD>0Tmqs;~D<2zV|fez_zI3MlY znj(~VezegfMKJ-)Z;}{z!scDa5Vitu`KpbMK>I3Lr^VxO~-y{nc(O9ulCp_=w6G1v>BKS+q8wtnf;!xKE>kjw472f`C2ZDeXl(zdvlglQ#d8@_1{Q>43YWBB|_#Ryw;D zR>{wf+s-d(nvXWUy&thpD;wh>#*^3iRMdd|>RlMWvVILjKaZO`Q?X^32n2Bhti_{d z*be}2UtudJqq~^uIfr+IY3QIV8#Z?meGWWyyGliXSQ74=7GU>d?w_X2p^!89?`w-# zWi0rDHy*sUx$fLqigKdfxg*m8oj%|6;0DumCzjpSsm8ig&k(VgX^?Hda+#EBRFwU1 zv6}pb;c9+FNO>Ppn^B$tB7Er2?9(0t<6`pU?xf}7MIxw&f7Xx1N9%dd7YoatFnOnX zn%AVT9%BF7cKWZ2KCz+pwc_1Nze3Tex)#yYxacJhR6^#5LOY(fyTi1IxsCzMp1>!R z-NXd{d0>()07Go76bPn|lukX2<#Tqtvz-|Y#+d0uM0NToDJxGN?GiBcT!OGW0}#O| zD2((2%J%3!aw>8O{zBXVV?xo3xe|*f*3I4II2&8cu&>ZRHFgThur8XAh#1Igs?A>U zh+%o=^Np!`$`WGMMPS2yp5EDFQ>~x4n2xn#2gs~IV=nXyfq9Q6%G@Xq0R#Yw ztZ0WV(#>@=#();567xG^qRUSxfXBa zNWFDb`LRGL1RlQ(2OgZ-@D?|{p7GbLSPz_CCRP>xBX4x*ACJGI!x5Y(2Zhe9H6L*H zeM0t*BQMD)TZ2PhMB27(8Rx`j1^ZqQY)|Z2!04GtJY$P_f~?<|GG zxalt~kzzq-r{l+>+|7CBt0`Pgx!yN2){;^j=k@4sQtY3! zgKdlXUKbQ?c$PuA%4LEmp%m3<_e?PLtv zfJaJ}K0$OS1}NA?=X5)&(_*wEmi3BdF5t{asVxvR=@VK;dHT6%5Ooz2DNZQ}k^4ILb6dfKXo$8j^M8)yHDWg(R!|-Qd ze&!sv`w+im(AI~UsaLON>mNl`E9fDp;Ku+m*0r~WD52E(A=4(6V<#g2)qwU^`k2YF zQ;co(+t{BVi@c?tl6CQR+1F2B<2uvcpGyO1-RLOf)o+wYY+Zw@!+(RbO)QL@u-Li1 zX~UHJB`y8RWd_i8*f~}bWax@4Mo!@nC1AO#mTSz(VfEcm)7#nlBbHPP=7|wnh{0c+ z)(Nf@;eKi&m?F}ICY~{PtdAGW{hW(_<2N5a0l~}Fa6UM$R)vTPwl)LB+hZ9efvAD! zpb~b#sO?=6#L@;*JMysq4jG@l-S6L9hC5*Uw=03jm0;^qi+fvTjo2ABJ6LO2C@KMS zuWu=pZtT-!>s!kt&c>bh`p&L257m@#X-#4CI4D7q5t$HY0HCH_``YvvvZR|eP@6$I zmA-!$M)leC)w|`)ZuOs7(A|*SvB{YzKI7KD$!~G8Jf84Cb6c>lrupvm?PdAl^lhIfx&FzFS>o zpmrMtc`Bf3uCc2ea?xY7_|hOqCX^75ffrDK(?Z|^#%8Zpwrj(dT}^$mbl2-sS@3>L!c>i-s)G`o~w0jd^qBSde=%zjKh zeb)*eKfTMpK*z75un1+15Z0+YEFruSP;zSwV&T1c8)NNv(+gOpnaLFOe;RGw#-}^_ zZwmKH%cb&Z=#t|q91`muiO#%_x*CtIJk~MFgG=+CzA_{7kH)pH_-a!ZuQgh$y|a>p z5Jv2MGb%Bt1}sTMuJnU=kBC9jAvY8o_rVi4xzl99e<1+`$RQ+&w7bCXVs2~Y#bm!N z&Eo%yyX8NNZD#%;_BftaRl zM2n5Wb0`J;GC2?dr-PqE5xzt3D&XE$5a@8LdHQO~`UK|9@E`+94X51Xh106U?X^C} za5`I-&QVJNLV%Tg+y2%rn1au4-DMWbfcelm#YyY>&WTz0*1{E>%Yy1!sQfZdtA19E z6p>cTI>&05GW@}I;@Nk5eGnG7R}w6#)5q2T4j55%7}~sGGQ%z6I1nydhsK--_8cxn zyfA@eyA21X@2xg^v5&!WbvwWFx9QfQT=K7dzlQ2$TeT&-)kchB6QS%YAu=*Y+e5Ah z*%jVOwJpY0;oG*|Uofc;5dTpEEsQ!_ETY(38fa)(LOT`Ty{jy>Aq?xLxc28OaddWa z6;N{P4wzS3UyDKBqF5!}VVHAO<3_39OCPn40em8eZO7%RtpIpd0N{ zWnNa(GJiM8TnM0S2nBP<9(;S$OX%$XEwruH+E%&4rK}_99pMlo9b6s#&{9%x_ zqOH8$(FeD$9ISZfr0^`QeAgGosaupA(n zLTi)m^?w%)Jrt1pN;z*^;IhZ?rZEQ5-q`+q|d-gQN+TT;n;Cn441De1>7`{LLA=bagyRkR;r z;UNI^CVzGr#H_&Q^7(<~yFaNZnNpPm=jN+tao?pfUy*{n&uUPec~`?l)8hULrNDe1 z*sWNg)B0)uzuq4}n!i$T`)y#;?&pgB*Gg$o)b=YDrc^sEthN%-DUD(ZaRRA2dE9}J z^GF@!h211DbZ_VU@fP*8BUjQ60ge#Xk#g+Gz_1$Ga`jx_P53pD2o%#EV(IvBns@LU7#$aBPu?ZzTrL{U4nI$1? zJjH2fEKN4>!GS_aES; zM^AfwcbEVvN+--3PLf-6S*&BV#t9G+t$ZdpdcvFKu6X6fHC&hbpbDUO>Xr|Cad!t6 zqUw6Wp#J)G6rczPJzCwS?4JdP&}LgaW;|8PBM5M-E2E#07v=RfvUeUVa`QAJK6Zo4P{|VW@ zyk1Sr-tb%QOE$EF;b1XU0tPVl!(N1^qV=Ysx>e8L6P739d`%d@To@Xy5Vg$13ERcb zZ1Uo47Up3or>yy`@^YtQeh|Wo;H^wSq z%Q^$wu6c|8szPeGEu9t0o0-1U-0&JgKFA+<_s!E&**h4QgX&n0`uXjPeM7N_zakFU zQxBLdvY>_~HF8%gsPmQ}s^<8-ODubbKhiP8-w_*Q>8{l{Q=a@ty-Nfg%7wT~1b))^ zr+L8Pud9^pMG7?YjSvc2@8gtgwt-hiGt{;oLk{Th^Qd(4%+>~hcagmYc&B)l6D@Fy zU!xUeVe8^!q3)c5+%+RWv4gOECHuyAe@O~fp!NKUP)LoSe#J8FR+sO7Ij@zuxR~|& zYEvYNtO|4*(Rca0LX{9}r}Ei;C4t z>i0mEYtkCFpz*mO6^*+GGMTt=MGa9EQ30oiyOx`y{{*tuK(sIly_QKs=McMyB}Ud@ z;ZwGyB`Y-j+Ke7(1ruqOy&;E)n^4L9&bx^nedwJM^R{k!jpt2#IDGwKzI~yv*nI*& zbi^ewf>=@J``a4_mv7`Zug02Uy?yGq(O@3EPnoqDv zAKna+lrc|!zjTf$q`$*@=#fA9S&~P?ETvv4M48HP1y_opnR4l507rR#7jOlK-rTs~ zoN2qTi*&MXOLSd;UK+Y<4FG`OxvW!hAro4JG9;HFN$mfCxGm4FvZGzjV0h%w0LtOa^?j2LK<$WS}eknETdSNr~rYZrpo3OiqW5wfZi!Fp?U*{vPxA zQPaivVJg<-0);G>d-k0e+@Sf;E#id&SP&3oApmuReVE3uux4*N8j|D+h%q1|!c$JZ zHq8VBp>1W`mmmga&%=u+rc)f9%HFV9t6UstOV(~ylA$K5?U1uW7)cU5pv6=% zYAj;k`n(S>hyL8P$Q^#Cuq;ZL0I8s;C&WbJPxk*&ljIp~D0v9}PVPosv*RhL zP1wd=pcaFm>qoWMW*Wj2!GIMmo#qEnW7qi@TiDNSGw`}xzi6!D3YV10A9#N{{N81mID~@0EX@2=%9f}< zCK|a3JTSqrU9EGq&-rK#j&$Cmis+mN9evb518>+aASWvW7eX@zs}(mRW+yjlpulO+ zf6RrwE}0elw#-tkCC%k{1+k-yjVaE!(YVilOxY(g|30U^SydpfiYf=~o+#A{v)iQJ zgScRm)D$(Qqugq{ z*J5n}nFHY7xK7p^wOjC+?jwuHa3HD`fJk?5Da;Bw+l7y8sJ@Shc?Yv@UX|gHWkmDi zNKTWtf(#n$u=@@mZV)RHFM~9!3Yj}4sbO*#A%mp~dE?T5X7GHsm%>2K!|}*V^x)*N z+Ot*jqW>JziV$ox$<5d4|H49Nxw6Cs1lV=e?=}aHV5jw+rMA_?-3Ruu1Q=W2XlAHh z9Uk?vqkxw%=P*T1 z9cOEQ;Gk`IKeV?i34t%P*6dxJjyl@qP1$qkndA``_SNch?w0$b*Vn-{+wZntjjw>y zd#jF=Z8QKjIf>}SKc*0=`JmH#UT@jO6cpdTnDAPE3l$7EVnx^%-5&wJw30Hj>jCPP z-BR4)wf(vO0VDw6K}?&R!Nt#2UZ=qSRsEb81^|L2JUl5qSHo|;9u+Kt_jYDd8~<0$ zG!*3R%vTWBMtJ2VqgACe9;|}#JnuCHM#@ienlr*yfiI!GNMY*5L@1L3XXE>(3 z`tmzBW3iDDIkVeIH2IB7n|3^q3J#5GCsjpsXo^4yS>g~-EC*uoY{pYm)rZKoHdA*M zP^F?JoI!+Gz6JsY0wGuymXylTYG1T0?1d>Cv=IkPAX8x6G8q)JP`m$kiA6r-JPw1{ zK=3~WhCp!$NDqLD4gwtb7H~B=8i`%6*Q@omJC8p>Vd`l87LJBB4WAgJFyIcc*E&3ac)*HyDC@iQWK2|CiFUE;A zo^_7a_EWOGxBYYEE?$Cyy7n;DI#22tNHib{sNaF5!juX=Ou(1$n_uyYuW|N#LytCj zvZXd45{u+$PlEJXE98Jll~8X;CXq8&zFH9z3vPHRc2Tv)OrcN7roX!AeHKQ!8AS;6 zRC=DqP@-0hJW09ZYZ5{{;; z&yzQv7j7bN0WR`ZB+lXgf#y#>da9nY!py^9pcY74?T zbjgZi>R4{m3Kf`hoN>l+UT)tN|Mp3|$Osze6*XuQ(TKtZUVE+MMoK=lpK2;z{owLp za{q)R!>&#qtED9DwV(h1R*_uf$}!+0UggpgGfK9@=usQe7C>x6L6PtXp>GaPNIDfEu=L+wpSds~l1vdK zo|1toB$9vv$^t|p1^z6pkrKHmnqa!NZtdT9(?ud8A|fIpA|fIpA|fIpA|fIpA|fIp zA|fIpA|fIrij;_mg+8SzG)l)UTIDH9Qwmq?r81>`%2#+W#D*A3ri!%Fj1gO!3@25~ z-U>J|3%R*t|C~11l)L96+Y^tv;t=1O3_rH*DKA%!cr)$ES(mxS-8y*&MTG*34+&2; zO=?<5<}Da#%x>Ah?JEVuRl;tXBsQvIq+zTRzH(dXTArsR@oGi{LoM#8DV zQ_$fC*}_RJ7fzU2L_mnpY_~jiO53pArWry>ERsoKfo_P>p{z6j_F)i)C?PcbDk0#p zoB3zSX4KhL@TQr5J|#zDDB3B*B(K4pF0g^S*H~PbRdapo;)m>NlM9I)GB-v{9O;EN za)xeGIhY=FHRA~NJyjtohu-|c=SYI3`6~{Dj#c($><=nCdUz-xHJXhgBE1n3mw%?Q zh0N-79L5sj7-5DPQOO&9GB<_V_{vun)wy5*A8EayJ#v^MrinDPup5FoB?wy0cWov5 z?NC0RjLkc(TRa)ig#-YAfl4aUJHa_&kWmUD2;NXPV4?;T6jX{#FhzuNfk=qR!mVU6 z&}oJmMYJa(Ay{ZKRO8CyCvpDl_BX6fMZPlefx=|4bG`@9>s6T=70Gd$u^_Do>Ylt%P-*!PBj&0R^b7eCLBD8IO^ad7ky@~6Avcy z{B~e4uo#%501_Qtau6W2HzDwF*61fd22?jN8kIa}2M%@3gX->u3xd`3iB)rCGG3Q- zd2oqMp9tszE`8YL^gKqSX<9pr+)*3@JN$@!F(`G|g2|kazd& zc^i+p8CI4151D3GX+ibBSy%n)Z&Km>|G6fz z8hCEyyGr%yUO)Xj0ZWTx^LGwgkWt);%+J>nmS8*c_lTT9H@v|BAc6`55CM3Jqpq`SWy8qbNo;dv*L2vw3 z)s?jD!u7kj)1I*hq)C7z%O~ir>TA&1+Z-DRMZ@&VJq%(C72mhbiPYO8DEmzNJ;}5s z=3JLgND*2a6<*l{ag(s_yb!26a^_a0m9AXWSN{}Pr4<P=gbyO46H z7_69?qPAODtrn8C-Tv}*ec=8j`t_=ZLPjkk)e-;zevgZkY$V=PnPN@bMRJI>x+Ic~ zkUC^2DQ;LEw@vFT!*Hc0TQ~Z42%(MIRs9%!{h9thd9jFwj?+`A)WNbn4_nA?m|>W0258ZS%%01qD|!Et(CaKp;sqU`a!Xx$Y=cBO&| zBFG9>?X)R*{-mK_Fv!?-tA0x2`$(nfQ=AQ>@JE-RS@)k#xDx>Ix=*<^T9I`lvxMi*T$MVNP#_vG= zzVrAbbT|0C#A=f!NhcJgs_()KWeFs*lAw}uymt;FTen8d*2JXCdMLLpTQ{ZeeK~SJ zJa_f%h0FC|dEx^k$QX{K=S)ju8?MseP0xvwd3A4b-M<~|$@=beLTEby0jNljvfroy z1#(;vAs|34vx~SD0ju+WPPa$ApIOaUtA71X3hsY5>kB2@+Rj9nsBnHdXLgi7Rf8QA zGZJ3|VSp7%a`|1Fs57u)wPopJJ4wI-7!7I%O&#rbScCTG`Mcc1jh;y+fl{q;XX^uTQyJ5bR%pL`Ua`J9je8a zv5t|v+4-@8GNp=)VTKc@mtk?NzBHmqKFw0L%Xs#{00w1KYz(+%5&psEzxJwkTqS#> zt*+a4em;H)R{T>u4y4!|?P9AxZjpSr0U9z2QYiSfYs8hfx`@B7Cw%Anjx9F5^hl^4 zPh0c%oF$$jA9RC(om898;7VKfPaqTwq?o-ti`jhDmsA$g>#eowGeWFFm8Kw#D7qA0d5J zA4Bx2*I}EsZBpAfKKU>VE7-Ys{VXrdTJc4_-b`4W&%lz&`l2lUgnnhW|1 z+<@wP);wT10wu2%V=T;Z33bH1tE~sG3AWv-`y`^D+J|en^hfaEwK%Z|=XM)(lZbsg z>P7IVeB(-d(TENIuI{^;L|RS7;d7283cAdf zE!#tF+L5u@;?CwKdN&j20CHv24+YT19UuKyW=nJK-P5q*qfnkYprhaVlfaiHWo?9? zpPMxu1+2>cSLWqTQe=(b{;^!hdK7d)=s2hOK?sTyk~0PYK_~Y6{DJ4{HIYtatV7@} zfIUv*|0y3!r*!tymw-69VaJ#y6Gk8er#iwG1C-F+5cPew_l;7PQ#oE9Yho;!wAdG$ z{X3nM#TZGx)1OwHWzl|)we!LKJ6vu<_MT<)O?(R{d|3 zNH6Bypm6d|MDn#=?YsM?ThN-3tL}7jgH3YBqG9)}KcIdRQCY>pl`feVkSFjmk6-D4 zz`KS|>D39PxZ(t$be=JQ>c1-1-O-wVNT0(NsX-m$xfQQexmd`){SM_3uZ-ATg{)lQ z!yfPrE)KXZZ?&Y^#`1?bXcc{!9dqsoqX;g=aVZ@}Jc<#G0b5j*6U!glBOhqxHyn;+ z-k@^Eq;Fa*2W?2eFBJTzNIO5P#ALc`+z#_0uKJN^dX&ol^$CgI8ti&M_KGK9xm?y4 zM>a|nk-S;>&6cP$v}B5gQUtgLw;uhK*(Iu+=F!l~bH9dHq-l(K(FAhST!+LYX5eec zBfIj56r{=C5zbgIbU@Q*R*Rz9KcNwtRF|Cdwk`^xJ;e}Sa6l@6t~#Sh_AU%_Y@q*3#_-g|^X>bF05Zr7mcgZ>`oU{#(#^<6 zxM{$0-9??% zUH47*4{d2K#}gmJUD#Xmjy%pt1(9(etO9JXexy?afI+UM2?(kodhMGBTB_^3YSUZG zlVxtz0hF?Ij}KNb%73j{fz>LxAFG%GAA(LR3u+tkYPOzrH4FfHCP){OYDx>1W60Qw zQkK_kz~+*s*$9w~^`vruJMDouOp1~dc1O?Y2EEC6$3kGon9PY=$x$0_Bs;MxfuOva z+85s3_`|O0(?It(|8L2-x7?Jx$X_y*=9CEW@}nzuE;N22i z_>E2RbLo?tCCqgMC)E3+fQcf?IK%w89dlrDasr%lWu~wE#a>(Ik9QgN2pTZWQ~JpZ za%r2vUbQDS;?>2PXjdM=<46QsukRc^S0u5JXw7XtKkVbb z7roj#yZVHm+>pS+0Dwf?BS_^7zxa!kqH!N47PS#bg$!@II52!W9j59{ZfoP`}$I0l^vonUlz096yrDZ7U{CGBsg?doE~ z&QD6wn|tM@c^g{hS1ev1E=?xAY<1{8F_G652csSSE{1^c#o2wu7aJ@OXt~-ic})Ef zOlf@49AjqZ9F*u6T+Jm0_>!I@Rb>?+PLkGiK_Sw^1tNOjiA~e}Wm?AYU!#c{0KaLb z_eZ2*H?0bk+R!P=w`oWKBQHbuf&u^H1gD>4RWX*iGU55%KL07Cw#%C@kqAIu0lz5N za~H0nPqmTl(8C-#j&W21+qR^pqT-j*j&Oc`4EB1*!HSNh+T_+AxX_}MMl;Rx5PB6z zl-R+Idx254H*cA{0;=~BsqdC!AEij8HP3aj&h4X*&TxKcwdX2Kokq zI@gzV4!;xYx$F4a4Q0h{&z7qs-5)bTDTW^i!ICh@5AI zv;bH`j1eh*&jQYHTm`mSs@Y9mSw|8~8peS~MH#wU_Ecn~?ZH0iSnWVH)(;J>@AtOq ze|P=wg0XFfE#$$3qeN+b9tf=YU1E7-BAgE*XSO>;C~S>+1j?X-kO=@s$m%P3Ru_&h zIvam3tHpQk;l+?z7BvXz;HV`edMCk#5(r2CM2N@Cg7t2E)5XINz}HfqkPm_y;ng~u zp9hrBr6z@%&KJluZ}gdQgNL`wZ3{o@5e5IG*gbw3G)Ljm5lq&yd)5Q)Bc-(abHr#E zSx=|Ji-%$9XJ(`$Ym%-u52I{uA!=ae_12`GFlqMTiVZ@i=|D2$_AB2E;mJ%O2^_v8 z?T#cB3Njy048Ejd5CsbTo-)_`d3|-V#6go;R4dZBRJ;MoA{bNBdDIXw8_H#bflnL@ z{a@I_jKA>lw-avS34$z~X>FWTKj+;N+Z?9vf2(^z?Bwx9mZ8WO)jVB*+j8^yA^6DGeoyRQ=v(r}0z9BR9mLwkT5x@g>Us`mAfTaojLgpN>@P4A z8almI?~Q?gUtiNSncLt%7ul%^LT(~+3(&j-`)6I zNj)li%EXJ#3VjkLyyj92&q$f6#8PucLwG^9To43vD>lfZ$uZkB$_sy6VKqW8x|l$3 z=q6M{?`tZFO*y7g?R~fgf?Qan6tyupJp0u~O5i)~j^7dwZ8XMP)q~N4s}7L6cC* zm;=oNTG77h1`jV3uGvkeT~%|;VuAo!gaCVv3AJtX#AUhF_)gY8FYf4WnALn@thvyE zrR({tEVQT%&)wZlX6yjYsZ`qmi%6iGk(4t8f^_~ZXyVORdV_4PxyRt!;PdPmKke{s zn72E4%(H9g=Ni(I%QnfSNS8_Kr+yRLQY`a~mmUhRX{Y%p*gve-u@2s40sEL#B4-t^ zk@g|F%U1uhsYYN;hH)VV(MT_705d?$zZGk$MCl-FZWe##FHVYr>GN&IepU}ElU+E9W2F$4W8a7K1? zM*ayWEF<%3ag;(q8w9m}UMkKfHw~x5bN|kI^tl`cQfASUP9gC$>j*}7+B1DWq9!Zv zB3)QD&_=w{;GtQ^GPCJ@*z%6qTX-lvVp&@!==2kZLo(_i?HIDIYo&%lzay zP%Pz{(HfkaEYf4ROgG$&dz&xS_-mEJ^;-?e_iXVws@zKMsdqkYbtw}Bml!;BCjsSx zQV?-g^My7qck`{5@F#ZSDK2BI5f`rUoJr(gkmGL6AB#j639-RRr~1FJ(^;Zv_3W-- zWK%j9pvF=kxAm7gL^`{35vUf4cbkwXD;_knbo%&7G?&#~CfE@(~4xg{uE`@LE6 zl1XjT#oqX4Zoe~Fy%UgTy*tM@uKHWK)Lh6!rt+8eno_!aF6I34z`{3lL;KR+6|1yX zI-h5HvBaxidP7b-Vwd=eWMHZB_N2m$_m(Fa5ULELc;uz(qjVS^r1V7AElkYG|9*MDp_Mn(-UDq?P`=a4b-svcugRbG-K@nX6KS)W6pj`n&$@&H7!@iM=LG z$!BOt0h_{d3b0OfaJ_~|cTgxq02sHa$+nh4lVXK`%kFqL3_FWHhF6v{il;X-f3*vE z!A)ue0|?;*{=qEBGa~SxPa_={-h~6aZi#K<;_(-N4>(hSe_K!BtuXZ}=2({gTfmMz z-rGV>aS#p4b$uPl4C&r=1h^}+lB)aVtw!x4# zNWrA5&hEMFEMoEj1NZI5NmJ)JO?ygeuJJ|kT*2EyltW=NKg*EOV6(TNv_)ol_1$HL zO9+BZ1vT+{M&2?K1yO=nU%RnX&Q4n#-v}a;7GsMdG6n{S|eLAD*I- z0-eh($Z&`31zO42ig~+L2b93OxwYc}Fvf1JTd;SQXy@G~3T%10`Wo0}S8OF0qOiUK;*Tc%}RM(zagpe5; zFQ!_VEd8`qAaqO`51WLU!1?D=(yY3u+tS^0mV5Kyt?%mhDbX+uYAPj7|0h*pfjBUp z0Q6u$FqzGn<8@W8KT48=QOXd@jt~VHX^`F=&3jAt3No|jhwo6~r^Bd{*GT5y2HfVz zHlO!l@@BTWH&7RlgttB3!2UQynjEHt0eyuG79>L%x=ZR?QqXwzJ#O)x`(HsUAX~B| zCWtoNBDCWjP_zW$X>~2e0}kj@!sA7cu)c4Gap-EPqbhx4{vH>83%|y04>!a=;V40b}3hX?JH^3VA%m9R&)m; zgev#s91r8?4=javbp!|ntjo`B4!6EdMQ_%^xk+1l@L!zsB@y(r$T$(##i#U6VxF~f zw&1kdNPAYbK92Wm4QBtRu%l#Lc~C|6K(e{?sM9%O(7`1;WkzU}bEsmFA9XIYmbK1l z)n|dbXeaodJqN32V#d~AVCwAZVO~gD1A=NnYqY6`wueLc>ffHBQ0(w!e9ardq!jEH z`6t$}PN!h#Ww6}8fUV>-9xF-89K9c>sOWW@)RDet?3%JVerc`YyQYHP>TK_B4ybbE zXgcWZbt&l$u+UtkA@P#=r41vjaUzGVR$sztoit@>fGeaBB^2i*i~v?&O(9|o*DMGy z8r}3v_8k!14>@!RG(4g#;YVt%>zaqm^Z)AMxBshjnn)T9@7l*o7fSvh&Mdn zcv6$SF)4N=EnhY6d`mI23@o>(V8#p>+#!i@s)9e@UKClt`yIu4^OBwEqG_>8s*EnQ zCNU4|8jiTnRTB*4&pV(@q)+r6I2l88e@wp2;r#n#oMWNVdCh~B=wswSxKZ%K)YG7M zjHUcXHRKGJ@l<=){VPw$-|U;wjCb@pWJ6ojs*??BE1&>XA+_w&u&mB&A zWn7VLWyu}Yj7%0MSiV_C-6Hr?zs?369J{am&cD-O^D>I+{!H>1#)KOO{izdn3gR@< zSoK+EDiW9H(_iwK^nlD53jP1e|965~%WC!Si zbcqk`s0OABe$sfB46{@TCKR1z!mWV%Sm8(WD3>Dfe&;E;5U@=ht#e+b`9(cP(56Mf ztGak_rPmbY?<3PHZDnuBA*YelE=U{v(!!f3gP@qG4bF08LNwl;`5!z&dh2Z6i2w+9 zPMbmDI_uH~sR*Fd7p7b7vT6xUm@CFMR@N;d05uuZ;o_6ivUKB=fDvMkyS8jehhW-Le=3`qrvjrl@c=L>t#sKKh zrnD*$L6_Ywi|l+g=L{?qvi(TONb{~Grs3=tcF{+X zdeII`9UgX{nern)qf6N>MQN{T%}*NvTBV;bp($@kR%R#5=kUe@HgGXO%OCpYvT6+5 z#GBRx0C83u+P)qRbkA1sUzF$JGYshkQG~eaomf2oo5)+p z@i{X^v+!_xpIj%{U>qGTKPWnK)*XSv@-kFdeXCse>v|MkXlqiGNAXM0E!$qEn39G*MoXGN{ymiWO&tEsI!x;6#=Pcg${v+#H0Z!3DI~&z3gg}t8I|*C( zlw zCEN`agEIvr#~Z^8EdNt@!tyu5xLff><)$XgqlFf>IZmuyhg&lzVR{Cz!RC9FGx3MbNZgtags?#Se zm;-8+wN_e{aSes!1b0IBac50^0!r>g+NGHM) z6BL2cN6D6P7P7>Tu}o$F4+OZ->22y>Y4EkQNr4mRfuuBbmcJ%Vt=imGIsQ4bLr=S& zt>Nqk+PG}(63SXRhZn~br^pZqR{DYlXgn8T)nskhPOyGe+lA69>+T_t>&mm3m)tnA z3nc(hDQ=>nDddV>uQ5y#DwurXiW*NW9A9Wc4 z7>t7TMw3SRA`hGhgTYMe2qkt49+%U>R!e{K)k;Q=#X->Ak*_O2jwoBQ)bYH~I5t-gY81-lihPh#2aG&l>l{%%q#L@}G z$zC*{8O(+}_vm1!ef6Um44L9jjMmt20d;t^zxcRuyfCo4>DMfI$;bOChB{|@b@;o} z#RR>SY$dj+5SgdZt4!(EL-bu!*L3pv$@9D?WlsYxtIsy&iL_BYJZxBDKL_H2zrDs8 zX#`0kju>z6Hz}A`InJNZrI+PJ*P$o|TaNm5ycpd$pZB*%Xb-4>SlO zf1BcS7r#=|rIVY>;Qz)~U@FOac!1>z!|K>tt7&C5Z@gWjou!GTT9P>m&-mR+uIcmUg85%Pg>ULs zF84vpMsd@?eu}5>5G;%wx26}3kXA$yuIzZcVtdCX+q*~uz;OIRLCaM)SR*Kymw z-8-{Zsycmm6)4#ad(3kMc-tdEX0&{@WNenqkdr5EL~En|kcCuYl8CXTuq~Y)Akhv# z;YzulEg&z(pv&%3oNYf&3`|nUzQ@bR8{QDyJ?ah)C{K={o*{<&(ieB)`x*|C32K4h z7;EjQ9D2gPaV3-Wn(xf0mZzK}a-Oy3$x_R=ntT-AXSlCNl-Og^z9fi{1^U(zAGe6H zl#3U4wviOqTyN@j4{Uy+{{W|$D^iL+9^^ZzIlzX1OXkUPO?oXE?=vRJcGBW--_5Hd z1jqlH#ITM0)PD0$AkMF*o;liUHFvUy*^Q5xFkdq_RxZg-QEoTV$g`bXff$OeRKNcg zQQJrz7j8n48yR~8-UUjFn`~=dg3k{Jfr@>gzVzccS|{|dOm^Ib^T zvd$M4&s`LToKIqCwBi^(Ds;u-p@!B}e=PnKo~dG)&We&d1MdfP@$`RAdJjq4_B4tz zs*EIt>?ruw;2;Gd5&r}9_Pd4t&NkZea+1VGGKqTMO`Q5!Dz(W=$lSYV)=H-J3vujD zVI^WZV=}4q&tsNp(F)>!h9NzJ&W3kp5lGO<=88M0b{{Q#M%I>n-`Wr1Cwr>Z2GX~| zg8hZvW1L6`?w4?>HB~nRiQxuQ_{!3(;)@O3b(ieuCJ;&7$)gW%fA35S|)wsj7%_S~8GI(kv+j5Y5 zjDw`&NX{Ve_d~%LTrUJ)ptvAvdYXZsU^HZlg#gunD*!8JK}lSy|H`cS8;&E+C19O) z#$DHwG5M!n8AgWQf%=ABK(Y{~d^8iUFmVy14j19n{1Kha88g)4IARZ#utEq8SE^XC zkS{}qg7iQ>e#=}%inQbAE_$n|+XozvPY2)0((n*Ve&A;fazd zL@XeOq6!4LaKeNJ5F9R}=qyHEbFzQh!O{!&ntbN3J{i?=Br&(QxUJW##<^ns#A^4= zQeH(S4fMzg{eOMqJxK?)|E>-64&%%--35OX$! z64{#E8#EZxxzUlN&d`d1wML3wkNTI>VNFq|t~C7-l<{s~CW+Y_HWqL-d^m&Yd;Fez z_%IMRLw(>EZvN>#)XkXMq)wa-WJ~|0LO4X9X1VkCH+=Yr7a4yFM1hx0)X)Fe1&bHV zZ0J;t#v`Oq7Ycf%N1ab8>GWM9Jm2Y^+#+9X%odWQnt}9K`pAr-xKhTsskc*^Qm{`< zuBrV|{#9^?e6rkl{0r9MNb@`i1`*8UaFU<(M^dtq)&#tYq(UtkLvw7SiEASzTAd_r07bG z4{r6A<1^9ear3QA+M;8ulJ8gZfDmN|q!E5SqQScq2h4e`0aO98_*xTMsF zun;190KEeI1836M+qGaJXbw4e0*hkY2Zj0RxoitKmdA^?=*xkG_CNFHJ(-(4DHlj# z#F7M3a`|=0Jdd}+&-`^RX2Lb^=6{grF#r>#qUf*Clzm)Nld<>CE7 zn;Og|$6_$vvHq0oT$f`DWL_$~=|)G3FJ;grN|plDHRVOa|FrIKdyl*aJ`ruT?k8zJ z&-Ct*gfVj4FpkKM%MIVH9FGCp)X_>{;SLeR3;7OFjrub_)-+2lPO~uNPD|lbbDz&d z-ftk{`d9tUl*9zn`vcsctG?6ydvKq*XW6vUCm047S5wA8H9;DBK7{vpxbVT}o@4B1 zT3udVE0MAl7K>&#H>NYk1ZD}_U%2-@{{)#mx#)oy0tpMw2p%9DQ1GDyl1L<7){-pti4o)_Mt%gEgo_X)pkt5Fajh0T?$zgEEMPq*h)t>I4 zsXEkczQiRmi#uqZ)Ya2yzZZgKgV|D;aWr~7jE|A|fnhb{nDx_urS@)OvwcM^J{Bgq zAL{9nq5^p zI9g^eETnR!X{;(2X35pP^`EX0Ie=q8`es7R{rj!;U^Q+46q$I}U_BPv5TJB1T02fh z>kx#%Lx)X1!o|OAcH4uEdN7WAOKaB8E|_Z2P80Lworjx_Fq?6J-szur69&Jmw>{f9 zqP+bY_pp!J4RH2!I%+u&^8UL`<^9&yCX73$+wP~c%mLG31F0t22nDMJnnRC_dTqc9 z=ty3Tjq=J3q@sp~L$+>ydEz_}13MiWYrLZH46-VRN(dmq1Q1@TS!y0eIj4HfJb2%8 zbN<8to8~Lt>eYLBw-w59TFDp)ffxg~iMC~eNi2b>%pY`kT!PaFib()+e@tm3^EEyz z?%y-QA?V(zZ5ek=>mCFo0I%n^XHOZ;q z>ppZq95{dCRf@{}OF?nNa6tdf->&)YvyF`nBUB(tR9=4^v|cNhc;h+7e9{s!)FvF^ z`}tr7L?I+DyP#Mo@(oXG4*L*!}n5d)e@_JEJqDnVgL9^XLM;uXY zH*LmgWm5z=c!!H~nEJeoCrp=B*V?0v?}6n+Rlj{8B`+y?VPLp<$M2|CT4g)I85?s3 z8mKex<_f^F<{*FCNShvvg-N^=hH}>Docw(kcrxD#IR)R(dMMIK$St48ezrjDVH;xp z&L0Ld3o!E?FZDkX{DfbED*&bS)1=D*3m8TfzF;Z0m$8uAHV#n=Hc&+=NTo!q1tMq^ zz_bJ`A|ONx34^P1@DZOYi1dhh@zQZ^TFxdn=az^-9pfnaw(qhr`>XFn9;h+KJ!Kj% zguJt`A-ruZv63hV4nhKf008x-fNuCDzv*~Qi`$R{m5^@21Pmw&`{DZM9ui67l1YFK zz=S3KyrW9YA!MNh1S$ZKVd|i~1if`o2;>G8{JQ2U>jPn~m)x`z$KaS*pIS}YuVoj$34NkgOdjjU3LKX7B8Nm(_uAiik?+C!Eroy}+z!g}M=!A$E^}Yqw4bA~w_-p=i}7J9 zxl6#cA5+^|9UN~=fFS7OE1S#H)|#2CPE1Xi^d2n2mw{!%@R)wY4`dhf_Alon>KXyv zHO-#%FeeG#*I5rpG5&loLu{TY#oAo$(1{ve_cFK6ppTDoY&$d#8$v0?v31KAa~3_Z zAlgk*qF())XHD?eU=QC~>zVrz2dUz29IX#i>v z!wdim@`B0hTDTrp(*CE5c9&U<+s$!(dGGT`{XyZ}&_IC-3IKpp{v^X!tsfC%(ho+H z9r=(sn*o@flnXz;bRH-3@Mu40f-hI}?m4V?rNpkHx0=YZ)R7Q*wl#1YrgvJMZX@WX z)wuC;_uA4{?_PL<_P&dhPRHlnO6k*ab6qI0NHC&rlM?;)_B^a$+J7*U&-4H3Q9U#{ zx)9WaH9nBJBo@(TADA_)i(*DX?p?c5PGi8QPtb=gXL_@>sGGk&*r|f{4p%H+gRpP> z#r$WfK%{cu;xNX#CdE=9jNEzIZXt_k1ZZe6nne#khy+~gK@5Cq#Nbd3KU?LoPgkuk zJl4$rw>!(DUEUN3iE13uRR-k5VwMB6ATWo04~BHX3%>iQB`Fc1Yrh4CI6V9>E_*C(L<3@1)0N*I zN768xW$!`E3+4wW+$#WC7I1Rb&g|7Vkst4_w*I)&b+irKXsa6ZxcCQ=ZJdiZgj7pK zBp^3JOrZj|1xEC^$k@9Y$IJ&Za10r*5JsBxH6596RN(XT06BP@@iaUB%tHTdGt~!m zxwT4q`|P{Qvvo7fmVYav_$<+kO(cUG`IBYhTQ0wY1kKlxt+j?>OhA_VHt5UEKgd_Y zhRjIVIKGnVe3Z4q)Pg|^ZKK2(AevP#rB5cT00GYk>^PXa$p3?jEKJYjR6*@NFS>lA zJpfV-$9Kv;94&>BMFlmd_Qk|L^D%`eXC&LEipfKvsqs01fduA=xn z9H9LMd@=>whN)sHanzUjk{gfE^8!XAp!&_Kp2zyn8~I2V;Q|EAD$Cvmv1p(;3?Cbo z7|vU`)a5V2?$FN;bG@eQE6SH8|J*>Y1RR0-2o$mH6&^we1wT^*BOz{zSbmU~y%UqA z`WCI+U)kT#mym!n_=^r#RqJE*t|TgnSB78;r``MLiR=!4m9A~#JzWnx9vR2Fkv&N^ z@BEpli)Cy^-M);0ytM2kH8K$CUPX zX5+JUt$Loto9i}%gOIVwUAO}{rHTs76ut(z6IgWQST#jpW!(JztKbPyOmHFMBHdl^ zji|6!O)^aNcyZ3HH*S1Hqb)>0+*Xr2w!n@gm%H4d@rHnfFa3{RzGTZOgi89|@Sci1 zv9MqVj7>ts=mde)ZW;7sU+NOFD7geSyp5#tb|d}C#$_^fvCLS^>-q?1c`4G!ABMTN zf4mQC#{0-Gr?A0x*CKWWx6@_va(nUeFnFk2O^JBFmpZ9nZ2JCpyf)W%v-}y#KcbaQ zfOZg|52RBKI0imj9h3Nz(vVO2ENq+cEQz3IEUMI$DzNkAK7}ExCVI{44Ws~UNB||k z6PE69Ic#P2%M{=SwsP{}?r0t+HT9B!2`aC0y5ntNpYTNto185MYs=v~;IdT#C{UTR zJbK@y2J!6y52T3=V&-h~xi;W51P}myzvDq;@^0bqt#-{br_vx|O~#>yyR6y-qR5=Z zC8SE)o`$&d4+*qCddE5t7Km@6Yc6X)1|VMR^zX=Pbn#W4UFwcgEdurl*_F^O-?^IFv{eQO|C|{qIf3gjginnHc zZ(p0SJ7AnHFW8r{xHFkGajc!RO)HDhbBr2;;4N07{yH5W15{2&Q1$WrK-SIJ(nb<+ zK;+UlXdXrY2mq2vAR>Z+DVaN>Nk5HT46gr&Y75P{Ac8;2{N3NXjl`h>dm#P{!_|D^ z2_&%e`2Gq26douA0RE+-)QF&<1PTHf0>A_d)2t6Fa5h9QoF;%Tq>us$PW5-;%9(j0 zY5ujE4WZQFlyp?m_9c&N23TMLV2B%37Ks_|!K6o!)4QG~1`S?8G88Io5t<&Sn`K%^ z>jZAcgT9o$V~K}Lh&Bl!l0(SLYCg);UfF7J2MI15(X7}5zkXm1>c}K+UL2hY3tvnsk}`?aB|QuE>z2rks2+WihQ z2KfP&M6GLJ(9gwbB6KsY6Wr?o@sPRmsk8+22*UuQB83?Sv6>xpBcw?sf(RBJx`iAOb@$TG2uV?mUPBpwr*$^BIA|h+qY;0HdjivjTv(H{etN z+D4F|AOQph;OB?{bfKR=?B)_r=iy<0>jyF?JO5R=yv$U3lfzh^DAPIA_Hw!<^sdPY za!q~AoC?SJZc8Ww@+wM6<%0|u-FI$a#;SP{-QFWYmE8g~m!e^j_~w5lqP=5N7FS7a zLj8=!M1^)V99hy4dR^b@;7Dd7S2X)g3zfMBQiE87eDJnV1*nu>JuOtd zI6=@yIZ=s8lY(O}jP_Q%&X_1;$pJ1)kT`z!^y6b1t&gO(p>4n&_ z_z) zt(=A{Z#dJbtFFS31S>irulrAZD{jy5Z^CQ>fS5oE>;mKg0Rfz^0pF%>{m28fJKhjh z0DVDxLJAOskS2f}vM`+J;E7}puHXo);x{gUzySrYdm+V7p@e||ULap$OPSYaArKv* za{3TJI|v|x3M}CEM=5$j?hpF#deszJ?opx>5xO(6iG<|UOrq8rDYlw7UCC1eX;DP! zbQWfmr#krQP6onb6-{g?fL&u(|Gy9ReM}gqsH3;DfsB9a?vo9rqeM9jb5aZAVe#M- z)NOV=m+Sn@vF0dY6mU2Y#QeXxD#GIRlKF>wsG(}2NEBzXYu>=CDj+&tnO>tXci~>$ zTY|!u+QV_Yn_s|L@K|h)T93Pt=RADJLaxkK1OZu4C_w?=lHKOGHn?RvHw3EZA0CgzEOjgp!FG+?4w{XgD*0@^v{ z{O(xC{TbvJkTh7J2r15#-Hf9X8NSUhfG+{?`0A`UqpHI^OvuSUszI7Yh3`T89Q8`h zN00zxnfGJmJOBp^nZ2qA#QXh8VI*05!^%Efx{6E(m`QKrl|} zkx5X(!D$OBMSUI6*;-FEEjb6hsNA5Te zN{UHQ<@o=zl(sBsTt^xv%;NE5Y8*PQ>(j=Mt%4geowddPaC~Tpk$2d}ZW}h)4vwsh zw)l7Xif2skJ0;R#5lwA@v0@BWfwB2wMAMe8sOUv}c;-rNcU4;3z7QC{{R@`Eq{sBUa=;0OOOI`vF>L9E^5Y<+5dv6!;57ZZ(`0C;5S)i6;5 zznGwd2(90I3|cf)L;(STY8CmJ0-=c%YYA_DmkUP4=FdEmPdd#9XvLnkIJs>Q{^bYi_Rof|3R>oceHTG+_dONN03H+B?WdQ0$J%zj!4z(%Xu* zseOXe0&kDoU?<00n_2y^Ih@t6E$Sv|)Rh!19kpH2?P25i_riGM&g!CVc~;b;OPto;F~lHA=v^ zZb~qupa3Jlvzu|aXB=uNSJ3K}x|TOu_2;N**wS0YE_dRWq0Vl69a# zUP?n#EyUET`k4rb06HEgQqV)z<; z)R-fM7y60b=GsTs{?osf;}wh!TNVnIPzV9(+q5k^q=|qeX1RR}FAUEF!GF}`{p9vf z=Afl3`NonCga9-32;4>fa0riJ^j0ZzI+@+=Vf=8^R9?2$NIwm?t-x5W1E=9=xS|jd z`70-}BE!7u>Wq~mMu5vAIwp~I`Y422_}F>UvrZs>%wSQj)xAqSz=zd%zl`>RP{?bA zSUN!XS6^!im0lbr|ML~yNf$D85Cf`PB%a>J4@qHx73AJ6o7MK)7YgM6UkiVB`1NqU zz8JG*5`h3fgR^waY~ZCmu4dO7u}zMYa04}(WAoJ^0pSd5ke=<$ARM9VGtpn zjg7**>s?;j$h#u}3wVd$J0p_*(_~^5;=!tA<=Z-y6s-XgH1k<)8=*%J10K^7k8Zc{ z4aTXJ?D>)qxV=-`r^mN=*yw0e$YRpkxa4VDg8OH5wtD&A!x(%uaZ@cKpaRpIwVaS| z7Nz7j4`Oy_NQ1)S?XT&jOlp6&EuSD62<4{?upWsWR8Fttg$7X=j%EyvApDY+W~h%Y3Op5GeqJ!&mAlZ`n2~gPKi$ za_+ z#WmWIn-|%cq0V;ssxbdg9K05uw|A489+^xb1bKzs2qR#Yd3Y|HI0SpIJ23mxKS!t6 z7MjwHrIVsJI#_>#-aIau?uCmxZ8+fLAisj#LOOA9nND)cXA0gOz>9`4dz?LO08UAehBIdmqR z-i@ki*tiQ#O{| z>1duBc5xpal=Cpu+6rQskpNwOvfar5U6h7bX_7iEel=D=w!qd}AnlQ6Rl3CM_(y9p z96Sw?KKuFYgdPPnBl*HCad}0AmLp4Wjzu~((FDD{ycOSTObGndDA&$vpe8vX`-*+n z^{i5t>#PV9YYxaGGF8CIe9x6>R1QYcVH3?U0h8y`U*_O920U%y+e%NTG(nq?;LnmJ_0KrhM2muBGb^gh2i$)?K z9S75|Gb+~FljIjb#}ea0>E#*cEN3TN-ALZ6TiZvY;Fz9Da6cS8oU=!`a@L~ zG6Kyhgihw~$l(i{B-llH9o$6DPLx3)erM7|1D~s*_djXW$iIBMYJnlrQ`bJdRukc_ zt~EBJ2o$nB*LQKsvx%Ruj1$dzN$zoEX5jq$kW1lk_8o204eS6M^*v(>^3#m^BqG03 z9aCC4iKE&0Oz?yIyjoy(;0u2LBTw>}b$Y09EPfB$mwmRU6FWl~so4Ta8Cb%-NCy?YX@|^tB!aBHoy@iKH|+fYhgShx zfX!gxKd@sh!Nr_WvXz?Rr7Q~E&38AnzqwrD<_k@XdH}K*SKR#fitRL&_S*q1jKxFp zFdB<^QRJ#`-EFFX@-iK?2>dQSHP5;uxZ-is4MO%HFevUo+r}z^lMF{@86>zb#K=mi zGsFIJH$+?QxV|NoFCeC5xkz~EdG13``n1~xji|O}sD8XuSb_sjZ16#FKsG?F?yQ4A zRB;Jrftu7 zn0>GPlqbq`9oaN%b8o$cnbTnCA)G4|y9^}SmqU@Ig0fqoV1horQ<|(cwk)L~wJn}R z+3?hEeOtWd0|N)JZ}V&TuRCY}@y=XywQrw&{M$#nlTZppASwts+VzEyfe`{AIf%KJ zGz!#r@N^G@*X6gY?4Wuz`$iL`EC>Ta5FMH+0w5qCqB}bh-~2R>Bo#TFM+a)xP0ju~8d*oT+*v!%yM41eSc3wI)z2lV^eDD-8>& zrRAhV)wP@vYv_E7TUzx{5Ya$eY0sXnUr8-wQln1;lW2fVUsQN+fkc-t1~$EfWXYqWaJ^bY<@PXS zypT1yandPfadEh)Fu_~=B5|Fg?y(tq?b+>rNQQUh2*5{ll{rGZ-{Ib-cbJ|2ctk$m zHE;YVQeiQ)#2NlujzJy-W(UjWm)@u$RQ8v$rGgU@DauHed|}cP!E;3$i8mxLA7pg( zVIosN76Q-mJ4yhbF>f6Y+SPijKpk0ro1O)n{)(fbKLc;2Wo{;lJO5b=&4$rQYhGlO z9W8kb*K!kgcNzBgH-YeSYFn8yX78F6Yikqxq>u!vu^n=q_U}Rg>jJ^R;nik%2V-nhQa#3x_ORh-`1* zX(<+~%a3NUwWXA>h=xDmPjq7~{I*l;@A_zl8M7m|2@OftjJ%ZZ&d&2Xq1KOj`X5D?o~1`$=x?p|cU@)} zo;9sUXhaLUE~Kh04?ZtN1FGY)%kaNyuXr3YdP%ROS;TU}`(zQb7-jfxVc z#iMec@?X-nmuP_dcg#4y+*ckg9QPPboj(J6^IjW#FVRxY`$fSvm%D`*A!v+ZZ;8#> zxICwnJZ>W-J?b{58jYDji_9f9OSfg%*)zEY;<3`A;vNsd?c1^FrdgyIewTfe@2LJy z%{uG;>qzi)QRy1JZ+jDbq&`$kiBTA1K82IN7rqy*Cer0=!NEeN+C)$fxA;KDz^PFl zUB>QL6En`sXByy5ds2gtgE*VCL?A5yL?Pgs;q&1b`2STTFOttS-$7*9{hB{i6KvS% zrm0m^u@_lp99S<~`gb-_fB+d8*};%vp;{q^02`eDJ)e}-KyM0Jx_@iq5;kozo-743 zHw2h(-3T5tUZcTfDI*3)PMlS;?taWVrnVj%9m;l#2QtUUB9_A{vip;U92*Hx9d4MH$fAnkgWkHvjKk5- z%1Z9bGT7aiFc0xpr)H)A`05W_SmyG{D)mE!Rt z-QvMUo9(|zQ4{a)_N3bURlHUT`(4zURXiR0xdweJc%byrTf2Ye|M~QPZf3oSNw-ZJ zP(?UjaG1Y-yQB8-0O(?iv}ev)k5{p$9JuKwzy$E`r&)Sqr(54n`0Yi8WeU3nbk#xn z1IqzJFAzWRmY-jGSNPu6%>ER$R^Tp{W|XHZUj8w0_G*e^=zkA~iEF+_o#+ zO>U~?#YJ?~rjoww3A#HoFr>-%=Uv_xGP?Oz;2DpN^|CRCp(Ox6d;z%?fUo}tJxScM z34&DqS4K4~a5*|4G}uJqpEww*OB|=BTwMC|+%ZA6Wi*yBjP&7_xKJc8?_^UPgNh}x zM>vj2Bo*&Iz{^LSRnp*-8@-L3xgCo5j%u@or|hNK(&7um)C-z9#2tg5TYkncJWp6U zP9zLg)DPE4$VKqrJ1b8>ZKLm?pj2dYPAYmP*zj3CU7b8XR_>n9ypdK-{Uv=__$#lX ztEh9z?8juZ9@bBXfzR4N9~u+ELPt>m>^@?4MXFDwIQ5W{uP1|*Ej`jd(!wuauK@@n zh{{`ThZta^XL^MXx)W1l003DthmJ@#RlucTT-9)~X7R#JDpfL_r9@L(SD$P#*P3!T z`byWFKZw4SSEf%Sm-T3I}F{ricRna{cJJeP3khhqJUfDjISmm~f zXM+5O}VwxD}|p6VvoxTvrd0eQGwd|!UCcpd_9dcY0~`2W8NI3BU}+ei(s>id{~07pQ$zu#qk4|2`_T`TZAug2|Z81x=| zZnK`pw1jAVDj;#uga*(}B}Yq<92M-=_8dNIGC2O3i52J^^X}PPGLS4h9p;ZVKn>(;vEppbQfZ7sHEG#iK61-;;Cd1Iza#c>p;ZSH6dU5 zW+z>$*gIY6*zP|^!DzLdNT}IwGF&BhN#(u5Y*a=EkWp&%ej}4QJm3!6*a?^jMmRwJ zwPGU#4pxf}3`A!r=+#0-AK5}8i!aI?kig|o7#yj75e`>G+450G4=_%YS7~VbM9L1g zr~FkeX4X)W+|!dTW-!Vm>CL=dZJ}Qg2WP=fc374km>-`LJB{9cd?;q?Wo*KQCi>KX zDxEfVW!Xpb5gf6}uT0cK;#@bU^eBDFo@{@Ms$%#M0^zKfL8#Xo4*gBzec=pR2m?!;scF@aWM$l75{*l-3ceLqQ`k!{Pi z++5=*rbe*J|4c8k56TX680v8sb{%>3p%2Jxb0L6B65|T7u$W7}=+!}5#BNmXAy`?vjME>iJpY|tgvW7UPADX{gc zIyBK=5k^vQ$>xZE39*^ftQG$hT_}a=jt%Y-=aOCp(#@z4? zQ;;G+Tc8*Q9iLOlbo^sCz6Jn;3p|*ekieY;y)8~t3;kkn7ukXQ;A*sk1&}NnVwN(x zSCnqc3ggof!u;F z6ZXFM=xF~K=bCeNz_XGVpAZ0u~Ox^V%Mzn{gZr zDg5m!j%(iFDUJjv9NBZ=3@gTY){lu~8uV!F9;QhI(ZqZ664C_1Xctc@rl9maC0tL2 zfKvbfaC_y^P5sQQ%aez~XhEobvgy1f#*RRgbIYnFpv1_mr!_p%ae|(owygKp?1cX- z?cr{{E#sys)JSOkYTb3ikX4IhB*N2(0A}$3I2^sdJ|8+{P zo;B`L`A7G74Poh!k@XdLcx7^n4)D>@PEtoHyvX*7aDrmO>wPg{zgnpRt6q@2+~7|h zZwkcSL$AQqcbC$VHcmDZ6LdX|AgE{!=fV?0&l!n~iVSasSw4g9(@-z0C#7#?@+-bF z+r8s2z>kScj#L<0C>cuGMKv=T~58~geK+RBS4i{#-IJOX& z_K3JSoF)u`%cbK5gR4Tc0|B)e(#qBhH7A=isX>DY09SM=M$ka96FO@j8SVSq^0 zJa3X6_8r!#oW|c8jOB8P7Rf}LVvjOCpvXA(!*$T_T2}_lSBM`N(P0Ykg&GhZqQebk zz0XlrjwpG9-6T(!{x!*$t%hW}&ij0NLTZNwS=xn;3j;QGy*_9!HM%<3oTus>sUna4 zTakq_ga`XlD2<2~%g~j;nQ9(?&-p?KK58LIFeoz77!+~&_K`4&n5pW0s-O2~?Pjcfzij9U;J1+=vBw??T zlimD7a(jSpV1HI7B)jwKjNx4KpYicr0$%(b(P7wi z^}xRV{#m+LYV-U*qP9Cp2T?f<|S?Qo%v97L8r6P{zOFvzZuHfbD7^La>zp z2sMU7J!Ihz(UMQG+n|dMe%0V=Fv^ZzB9B;5G`Xjh2=_r1!nh!3bVMg{=&;N3_ zMSKfju%eC>>ysWE-4*?IR6<|- z?;hn&uB!lr0ko|pm3?z^2bSSx({3R5He?KdAK_NyBZOi&9L$j*@W+A2$hFt5-3>)w z%!sH;4{~Qi;^R^U&n}bIj9%Wpt82yx(&mLXk5bRk| z@b+?*G#y91m_*H>mjUD;wV<0!D;#-NUWnErLi;v4Q!s`n~vj zv=YC5|ulkPky)Hw;1N^*Y*j&8AE#C=Nf0D*cZ$w1-{#FJMs z7Gk$@ZLTXbxx(g$j*<3jy4CoY`7~mwPl32a5n>*O1}O@L$uVIAQMB$z;}m(fYgfdHb#8&B^I&$bKaF~FSm3y)qUgk>#8k}hBmd+J9s1qq zH?O0leeQ3Bi-V7YF0zw8flzZG+;UA;UFB#kA&WR`IWM^ybte1v+AssJ2Kh0b?-T*( z2YGKx;LlqhCePu4Fvl@hFisHgWTaZmRx+_|OT;foN#jiw2Un6U+dJ`})O#Znct z({^a1R!ousO8%yd#Fd<_gO^{=*l0Q|dwL&?3C|<~SM~0+MNRoRIZwKFGq$in(8H%~ zvTSlF*T*PoR%9>_y|!QjU@ef8PzjD19!e*$mlYygAZnoV4dp452zbc4r?7N;fuCFR zeSJb3XUe`lG2bUvKYfhj|PZh?V6BRd?_bAO|$M?`rc( z0H?}+TWT9bx$)i|K~&(wh%uSSxhZNKVwI-FKkVrKoNu6YUeQ7KymquT>X-;w^!ia# zy5_NegQzsbB8rSFc1`n=xx|p(d)iU|Rka;SGj~CcG(zAZ7{oTxg)BG+4Fj@49#L?8 zrUf0g`JGKyrrb6We@zQXLCJM!a!daCXqv#v3RO=c0@$=f{t2l5lw!+~(a9OCLw!ON#1vUoU5t# z!puk4O_**KbSxqbG#TKj(Pn#`#TcC|Y)B2=p7IEqFolFn8(1v~_=!CEOfAu&r2}06 zWzA4kZjRc%H%!sGn{ffL9a;Y9AEl7slcQo-=o@rvGK_&p9QrPIX5)>-1e+#r4O%}D zNGMJ47c<@}CaZ2_HO#VY*1Dm6zQSA_z<6L!XRzxh%fZT{ZcX9ni0IP{)YON*x7vw- zN%&n-=S=^M#=#}i%da@nS4HCGKy)#jODwCtheJ!1YwNX1?*WDUsR^b1%P@*n$!bUT z#moYm6@}jpBl!Ez^0?Xks2;z^?78e2qTAkDjST%o4ldbL4k32o09OD&rKZOc1(6;0 zK)^|^mD0*0vUd02U`L-2{RU|9)JLAU%kLQcY!{#BxKU8qe7tVfnD8({n1WL{@# zJPu2y0sE!2`+@Vqk%h#7C+Mj7(w!_T3{FwSeIfATZ!eM>N}%m!qmCWhZKm^=`Tc&18l%z`L8nsoVfaFf-%PuCKJ8O6eOs`e84=rEkB{EbG{h`^2S%ES<@p z9G^Canz-o?@p8C2WT&a$AyG-}$d!Qw_X$6=T;4Z-oa{0!5;B&`o^n>DTw|^Rg@O6a zWLLb;a{xY7Z7rlQxTY}r7S)2%*!DpDI1RLl>8T0X<6qz%Z%)*p4H?#hbTlndv`>>h zNX|zdD@ryw7_ivUjM#D7-*aaQy5ZQ3*Ap^-`_O*>ee>a^T+N;zi!6nKZ4Z)z{oEgM z2js@8^F_s|YuS7vtq(c{*bP3$xazbwE>t5PSYHMM?BT9ckIkOqi*%{>P7(RmFmkRF z!f-U>ss1vXi2bTmq!AZk#Tyj} zZB4he@!2*rLL{cKzS>fbxYPNY=BSte#>zUOMPfBfXh&bp{$G8QSm=I=wYUcXrMPi{ zrX@uYp=GK1`3>f`<@1S``-2YEmI-ZoUVTG71mYf@#m2d{TY=<_t*5Ra`-gy$40W_R zutSHJ{khqY0IJmx01uLbSxoc8rO`L;ur5^No<77Q9QY;g;_lA?>c@Ofc|)*}YKG_M zSbe!Jc)7_jH!zARZ?2{p?CHA$_Ul(sgE=iX(ypp~_XJztPG0!_BCd~ySC|muBlx|7 zwE{G#Sct&!luktd-tiZnl~s#=ZdRwY*UXZ`C)6kBS|6In7TyG*sM?4z|92KeM=D+hPHLmAYNV)NLOw7l$Hzb>MMLd8`ZBmBjO z9m$eY?&Yr^b&Ze`-(R#v`}{4GY#_dl_n16J7*NkGVSt5&6{`tf!eLnB9x@2^*8ywNo4u1&3cT zm884NhVx0;aZr|QihUdodE@<^Sm7&sopu5+V*AOKb4k#{_+noq_*NvMm!yLNYY{ggI(Mu74{>3t@ zv{|>&KX?C5mma<&R-eAicR3oD*lqrXq7FV^`{66y^m;vo^fYuty6X(cxGm~JN@NhUWeEW)-gcC8AMF9RH-}9?jVIa6+<=5bujV$V8k2%zMn_UWpxYqx3+UF zeAxt!aTf?{T19IUjo|Bp`3-qJsBkMF2xRnFeU0NX)59u$q2} zx4-H6%|Fn~jOb$q?-3uEvS9z=wVq7rCx4PMVrn41{Aj%;Q+IY{>> zQcq;CG}^du0`NqBI&s~bIj@7BEh@Cw*{+#X`V0%lC9FXIojF>U``O@z&8&;=(ZXlT zuA_kD2PzJZu@=s|ibw-w1xWn@_Py0f?>rXcj)9K4ao&$*-Tbkt^%y&!m49#Znf_hd zcZ8QLy1$hk;o;LP5mQY~j0dL1#+<0TIp)n+y09L3e_j*JI`s|pJyAQ+M3y&oHR};V zLC$>hP+4J$T3-6H%cmH8&i|_5%58+;<)rs_9Pj9#)H?jGpbh2-NHlkYfIeNffL0)| z0=UM*e3Q(rYrOM?o%A|BqjHJJ*)jUf28POnKp_C9$|EM($Mq6+wxb*&PCzIQZ&U9< zE3NgZ3sLO1kHxr?hS2ZPuiR(yXO-4}Pw+h`Rlh1GR~{n;9g>5esq5B6fe0i7LIS8P z?9O#`o9PG>F#BIjG<)3iqeQv+fl_KnEitnBS)?WCieI-k30Ok1}%V>i>_Xc8J5zVm~sKv=rNBfmhhIhjsi!w1Sc z#~;zH-HIQrb8ofuIt&h&Lv#9Df3d?sDLn-rE9Nh!R!M8C3fgYChsg3utmFsmYv}4c z(U#}%bLlSC+LJ(#VxVV@hYMcSATDv$^e29ltw;FbmgqcC<=_{g*xH%9eu?+#It}`A z)Wae_hkic~k$0ApG&5{_wb|e1Kc{A$G9x<}&stxT_oR$=)q})_m3I1JZ43UQiIvHp zQ3{Y!%InQwQ#(A{#uiwyIh&*pWwKTRe(zB=tWRV5**27R5MVRAJUxkz^5ZgJM${h5 z<6Mwpnj`@=^4DV;!u~n93JV{+XMPhqNJx0X9w)*wlzAHw!7dP|0*;C&I zfxylxKGvgYphjLP$P~wMX`8VnC61DT#wA|RPfSf8qgnu-L?C$BJmnxrN!t(^i#lA+ zi!5LV0U$n?M6D~9f40ubjfx!E4b7nD{XDWgi5CI+EtJSV5|lsqR27ilhBM9Xj7ZlX z3J+Y@*pKBYJ;bWtPgo>l@B4@GkF7TWt`M|&B=zzB>*eBK!B%L)%cC5L5wzU}9DLB{ zqtEc4dxQkb)FhGKS^t`vY4>NXyHx3`S#giq-L9FU2~*S4$qGCmggq|p2e~UKB(mvy zVD1G%E2UT)F7m71S8g1vUhDhQU*%-of@U$Y`job4PHn0d%Bq`wi=#D@XLuqMkf+(4 z0Pu(l)g;ommLNO|ski)!`A-9M&sRR`r1$<$t3Vo3=viYb zOk}a8$XP_gx0fv1c7HEWsW*AH@f2Pk@8hS3)uR6-v8n+7rL8klF64DQ5zd-(O&?z5 z6y9-jUvz!qEyYsNzv<--O5tlfNhN&Wc&mPre!Oy#^IgHb!)ooLg1HWv)o|M&v~!BY zLalIy6Fe6Ykll~u*VnhJ;{PV#t?M8U?{m(}MnIWIb%1ANB4~>b{qVXa)VK}mWsKd_t0RXo)O`CIr|9_MlzV#QJo*MJKI{prc|YlHAn63m z=dpRpiWd2qktJoHuCnjS?vPT}tg*NIV5fTStU5LxoRYh~=+Btp;ug2_{}f&~j!fZJ zkQeTSd%*)0$nfbQV7u#NA^T~A&hHWAdH(OQqtwR71J7mdbMn|p9s0bjvmqTmy%$e@ z{dGl=?Wz5k=BcAcBKl&|B~IIVVnEE23HL{F*Ap}<$E$@~gWPkGC?yfVzzR{}nDunT z1~_c{kSvhkb2KlRE< zh0j`c=(~pQh0RVDX}fI4+1{_0iboL%L94A^rvvZbGgu9jkyhWSq{wT!Hj|jdJV@^Ug*3IwxxCCL4(@cSGaXxCmE-RIa_MsdeZ;Rue4jFE;clZ z?HH>==+p3QP^-3Wm9AL^S!Y>hCnZIuePHVk{MC^JuknFM0};9ex>EL-@Z3p zpFo!N%QtsOn{>Z!a4uZgjyiXC?2qw%sV_`N=ZnRgK!kp&6T1oF(_2ugi{s|Z^asM@VpEC^VgOJERfCnW$LW-y=s7zD--HPo z>z>eyTG7xu4>Ac%=6_&~XY*hre}OL1@@4JXFrn zT!TwaXaFrgtnF7;Pdfl|n({+A?p}_^w=Jk-R=W~GF`OfZAwn5JnXWhY7#9H`-sx{T z%EVZWND*g!K1;hTD}kKNqPH@wUid42z9?WRaA9OjSy;4$b>dQTNfoJOa(ExU8JS=* zqn+D^(DMg5J;uB$X+y-HiHHi|t3d1*J9+snd}82Ap$T{(Ms&}8FWM83OKQG#B|5CA zSwnA(>@$6Pm8*iRY%GYfP(6P=oY)Gn7JM3oUKVpYOe8%QlI1G^^-i2=fbO^^)^eMd zK>3jh8EZ1>{G|LdjkNqTE6x}&7YXneN&2DS@kLRT*bfv_v>PML5Dn+NdYGYgN=Uwr zRZJAc+NAuI<88Ru&#_`z3#0m};H5dnnVXB--cIgFa`;7l@6j3Fva%1yMZ~M}RP`I0 zr)g5PoUrMgUH_#MKKZNGW>|G(*wrTnv~}*ad`OiSkhK-5o8!nG-K zd4-8b0Qf}mV73hI{lqSH%c3-sLq$Z)hfC-%5LVY}c}DHm|DJw52#`)0k3yXm1e_RL zmk5D?1XqnZ$jE1kWKb<}kBm$7s`n_tovxpx^O5zh96(5gl9)Ycj;_yg*Xf&8=hN21 zf$vj*4%bh>c0&Lu!e7}$p`+BVWRAXb{0~`QMsYvVAg_SavFU90nAs{gEc?k8=t~x1 z{6^guyEr5~O>*R2ws*IbaF67Sm$QhQXb;)(rfee1FDSkhMI5v&9dqk=y#zBO`N`BV zneoX$=zm`J3JYHz`EwY>9i_E6({mIJg<&8@`30#WFfDx_Z-NbT9yH%hWqhs|=6(-B z$qbMjTH_0NlA=5lg|+WFEmebXtab&)rYC?Q`~En!p?yVW#gN-tDA6x$f-mFH z(GM811j`|av!`6VIttK-1E-390=it<2EIVyYOD80LZJV;8wSw8b`y_8FGjof%<3{s zn#(<0&8>zpDe6t9x2Tk{aWz&}kb>d=wX+16)MArb4Q@rrH>8Q|)WMZ!$m>v~*aDag z4oaeoP4$M@1^%t3Y;=0x1!4dK7*ODe1DFt?AqZBLqD(+nV^o_v1!|5|JdiJ}-8d9w zn8^QbNU6@bDEP&>tDe+Hx|f5L^%(=27!Jba2wYI@uM;Qb$Aj~o#a1t}fR{GaXMrC^ z$jgSg+FdVceZuk?>8KiNZ8HX#mYqgT__p3MXM|UZ_&VdOQk_Qu`qFoze7MQGNk`NW z!a6w|-Q&S{+Rak4{o`Zhu3g?=xi`&>d^|MhRCx8QLs!rVkb?zk@L0Bqs%`w>Mr<%(6KKS&E6)` zNL9&=mCR9caVtfvWz55|K4hY*w6q4fCeepHCu!)%oQ)QYbJV~%;b0)CX$(-l@(T~> zviqE91U1nPqRsr>!a9?l$$t3G$& ze7-94uEhVY(V@0;?bIl7rf|4;Wq3w_9+Ro(KvKmMtG)a36d2$99whP0F<*0%qZi@v z?7vn0^u^3WQaqBnT(13>f;mJNFZ{*3Yo?0Z4m)5(uT<*zpJPjYuXp;ltLPzj!JRTJ04UpL3}J%-muD0yE@Zkm z1Pt^%7KwNkZuqoY#yGlSIyMYEf>aBW0q!s&a*& z71&;1Mi`;Q#{l7l^{Res!q&{iz6M0nVqT8-)fbL{xL1JLe&2eT6D_1K~>cH-@;DU(gsa;+--IST+OIck9w`sNj>l~ZaNpR4PsP&15<|g zU)*nGz}2nq1Qw7LV`q8tSP9l1>808O^$a4reCBHH!A z+O5l>A^0E3PHF_cz&2aXB7A*V>cXpUbw=Hu%v-1aCreqWFkV;GV^>>eu z(TyZv7T|qw`^?57?n8lZX<-NdD&IRHSQV-o(T0{ttB~8MrDVHEUxDxNc?o8ox-h(w zV2TJmqVV04$-7meH<_>o37wF`02pN{?E0iVm(g5aOOTY3Q4)3r`m2lo1-P6xy&c#B zV@^Z}@4)}aQcIzyMF3`S$1!I5bf5sfkq{^Z@if>3y^9m>gjx4gYY%&R&UHe!Q~vi? zR6&gw-j5}%&f-n`o4rferhFm%mUGQp}WHr3_zAc6^ zp8SFwj;X>aYO%YC8Ry4nb>WJ9lh1h=1HrEf$Uh-w+F2yUqNlVK(-<@ariCrTvsE~8 zhL{bWZ-DewmgY0IOCp@5xbmJ^jN4MM2q-;6q(f0v22J;P z-6kyhIgN8#V7f@`oIF21dG@gQC!*W!k=zv6a3N&W5V`ax!A8$r;QR_37b3*ALnFy~ zF$NGy#s6_p&Pv;N>0sc_ZYPeDJqPz^jxO+!1LZE7j6fsO8GEgs8W5VQ8JkUmC_q(- zdXqnFGodL@B0+>*ng<7UhVWu%Dcb#c-9bddqdIC%{mf_FJmU}fC+Qilarw=8q0f*^ zo72-S64?yX;^_u4!E9IYt^grIIL-gg(CoL9t38QHTnD5}^Pr9V^vQ=x-(dm}J*Qz0 zWja=C$(kbx@~?>l=-(4EY2@tdC8;)jx+^XzKUHV}L0ln6q#Cl;)iom}=d~4L zQU{?k@^g!p^U<~bS)URK{wytqNlL7;Tm0BWU?IB&X+-(BKEvgfUY=GIy4w-Qkj zUc>AuD5gB`SOwMTOUYphW;GG2OPyW*zdlCB;QgWGTV_)y`>!kzNr@;lMKhm@e7>o5 zhlX7KjfQ!O8N8bJNqpiY^O)YPYXy%f?yu&SM&Z|YA0Cdj3Q>NXj4D{NKg}VqQxAfb zY0|lDqdy9Ri2wtDFfY%uVvfw;FPbJdb$US^m;_OC8CVT%kJK+P{!r1jw_+Dd2RtpJCBe@v_Ac2Qsa1dVntxArZgO>YpJ$w5<)9hv!S;kvpi-wQ3 zw1akz*_+XoziH?+goaSoe0&+Jh?5H*T(HfzQq2@_)epfZB5{Q}l;%Kz^E?DQ2bw#c zneZy*LJsg{J?s(%=4sWlcg%Eb$2(C@9Qp3iH@tE^!7&P+HW}Q$wmX(PlI9r7==KG>H&?B zpF%rGI-GnCs@!l$B|ZpuzLh&z`(io8_MUBASaLWWtK*&BujZ(nE?gZoekz{@ZoIdP zLPI6XxqqRi|GAOw{VdMvON9!}y&Sn{b=Ge;UscTB0x=jmeN`m+55|0M0K-UZwkBwD zFCPc#X01cl{h81SS0%8bUz!GiQ!wnO^;l>LuT;`hSU(cFBD19F$|wv@fv90HO%fle z2*tK$g`{~eW4l%W4goKzt|Aq5qEn|+N9EpBWbe0rZ6fTfPYB6{$O38HM3(liF!`9` zErN!?4=GIoMQ4cMRz%bQjdLVY>l$A?ABsW%iJ;h}@i+R%ipY9ZB)T3zr{h~xdmuzdxwzABBm+DH!mMUrEC=8@Srt)VdOV(rm~ zzat}{N_A`_B8cdtvUhHQ5m68=;t2gv%5AA9@N-9Z&o5y`SBi$pTYd$In&@q@?w}Fx7e-(#qM)MkfLR`RhLV-T?%g>%-E4NwkFj`;1`oZiGRfzepKJ>_Qzr z{6Jd1c-XC0CcjYzKKu$X&}z3G_PkgJ>IRSdN076B%8kP*IjPC-;fYw))Yf63tOWsa zEit`KokkOnG#!tIZOHwh-@ij)@El8V`hv%gDQ9khf2CPhr>sf%f<>{OeB`*rWiel@ zV56t3vO<&~*aygbx|+k(A_Es&Wv()Da?~~5ix3Ktv_YoA_PVbbm#BG3 z^Z&FH?cK3%vKrmdGfeya#@A>_P9_7c+%CtOd4#XA%y>P{@B!`y+Sg(65kNP}GHdK_}JxXIEZKau}^tJJhb?@iiJGD#(kS$X|inF;x3CSOl2(}m*3@^|gvKP0dLNX{er1+brU#?UB# z_v9t=|LL?K4V|Ng{(fJrWvh~#-2J@uUJ)Ly`A89kgO%e6&+1#%uBc4tn<;J(69WJ( z(XN#CS%rf3Ofv5R!P!OVZJN`m^HK43Md%_Ow77$QOpTK7H$MobZh zZ^yO&R!2Eqd>)j@>t*S>zt|9NEfym%NqHIlEB;-_Y5ZQvF=fhN2t5h?l4#^B?z70k zV3Lw>PUpC%ZZvV+X;Yh67Zln-^~{^FCE>D}ua&LeU1n#lsgAX4Xzr9F6vYM*0l>rR z!tK*VzhJZCW+UV4;dY(t#;e3tw(x`_^H#%F1Uc-t#O)sAb#Qvo^&Ij0sR-lXWMw4< zS^K|#`l}+`5Qu{n6cCSwJR1=ER~o;H2Ea`2#9O z`RNb6NuKtPQOsE7avAbp_y#kGN<*Jk{KGEHSKDT0DJg#jM~#2^mB*f zS3*xUnSTcJ^Xk^!9o3* zDZMUK0s}Rj+(c&bpOts|uLI_T- zo6z2zKXA%}6_@cud&A-=tEn(T=E@p^u2I?1x2n;VU9#9@$mGQ1I}SB9Or!ETxVuaSV~m+n0Znhp%s zJ@(tIUx8;PxwB!oA(f*Wmqt6Z6bg&W!)Y`=5J!87GGUrtq~69_coR<{p>5xDlF_5W z?F1kx-=nN2IWVNq&R3o4xIy_7=uuM3b3!T}FCMy}WqoaA51Qb*-0g2J%{}bTF)-rG zn_~*n{WLXw*x|NMXJ+r4vFaywBIREUS?Pc%f%H85p5FIT_L4#oVc6I}HBab|#PVM_ zOw{$~H)!0a0VURdXFED5QPGc<0dyoY$vVx{eHIT6+;ywF_4?_IaHQNu+EE%hsp>6cj3oZ58rH&Pjv63@5JxhTp)m zPQV$gYh5o!UB4VH|GMq`u}Jcu?sjqrpgBNqjN$9}_@9D$gy|VwSFImr2U?kG$xC(Y zMXPWP z=y~a*_t)tM5*{ywYR!>GXPuMwXU9s8<|m~1Z1lMtE%Hp+UcQY+pCHawJyB&4sUY7; zUF7G}&#Ii#W{>x3nQE{<8wiU>UT(q+wIC>T&CB@Pfd``zosq;cF8q)(&M^OB0sy6{ z@9~~XBZV*!fE84yWt+<5{Z8^dNr*t5Xj(`Vre8z@HZ|$`nc~NL{ozN%MH%`{E3Sg^ z@`7f05tP61+Fx5RfMF_~z~{7~7#QaUPU{~i)``Q^oV ztuK&~!jJi1CPaDeR?5YHkel3MYn+oKvy%G;Gb;h)jOInB__U{mUX%ullOMIa?5Ye#7~J=&kSzh9b0|) zD||)MUW$Qg*N2wiQ`MqFniy5%1X-EM&;KsY1`dV|I0++Fn_{^I$fEo{N!OzQ;)^7} z)$H;s{rcD=g*A(ZLgdAi3_FwuJcMZ@wy7*h*U3;Lkh-DBB41mifmm9wSwR4z3j9W# zTx^~zfUrn}w?-dNMhwa7TwQ2g7StyN_X+xASyG!YoP&*Pz9J z*v>_AH#j&mfTqvs9A#oold{eETx2L15&%a*UCO~|72g*5bsz(eOof+n*1bGL;9hp& z_>B|1tDT})+)Z9_P`W<-1{y#PU2IYIRg7EnS4~%)E(s zKw$BJ7k^bs%%tuysfsLdL;*&5n&wwrimz0MAh_K>*Pq;g<`}B=_jxc~))&Bk3|qK^(>SRykjCHZzgCLK{~Kz~HVfxfsIF4X7lUi$F87pD>p0U1)}K z7GeMh2Gzq>ZY0ux5y})L3X*yoY3-IKv|Q7U$MsstPgFJU(={x9`20tsHg(t4F#Bu6 zRsKlBEk(CDAKEK)jf0d)-S}0P@R{G7^b9{xTw!yUT`Axu69N{+bIp$d;P$hnpHpp= z17QN%CBc+l^%9>;9Rk%6(Pc@G64%ax5ZQkL77kfR5BlG8ID^Yr9ilM$-iRlhFSW0i z61^2K3mdH~=}G8^lql@lH74%Cz)W%f1DJRv|YKyoy19FEt#SUfVV# zU-RwkynT4lcD~T-e)F%R3-~dE#c)PWPEq{xsg6zy3snlk26y=X>;G#@bvoI`FL>D- z$s&w}y9xkI@AQ1+7@j10CYb<_)N8g*?_L}B5kBzjejjPe*X@T<0^S|0-e+B#u~Swu z+w*07#5DO_v``JF94hOO(n&Wq=I@-qi3 zjRwF#geBV9%28Ji9R!W+C^%*GuRfegUux5}ZQX^c+}q>Y!0&PokXsXkZ!f#CTS-`8 z1Q>Fi+ml#}VA6tjQU*2IVz=U+hSjAlYpu^FjET?5C%bz-67XrRaNvp!8;RGs6%js{ z+I>+(`aw^it`7#@^!#Cn3;9Dic@?}RL8*DeklenGDC(Q!nz$xi$ULvxBZTli_?@+t zVjd!V5h%?^^GQ)DE#nS za(u`*%|*}Ck;w9JEA!Y2;RkLKNXiZCba#^ijr09sM^XfONPSLSzu2qcy2XfuZU;?w zquH8%6rLChOI^;$zA6XC0mbeYK9alux3KT$N2ZT@2xx%bkdp*Atp)nn{l*qkCxM}X zZx~ns_|1uwoKn%?^GM!h#jb{3hT<`JqNT=L(S~$HdmH!bd$NrSqnjKn1Hw7@t8fMlvtfzX=_#2x7gjTN1Ih2&{7xTb~ zh>#;Y1R8yr^48Q^O4IcadKr$a0imf4+`4$F^ z%jEz|)gb{o*zpisy$IZ4>W#12kCMCQtR`4cF>JqjVIv7d7Qq9$BsQmZd(vhb*&8f* z8{*>IoG>pZe=dYF4m&H zt~B3?-u5-D&?Vj{M4L`*Noi|lP!{j?ql*q22#IA^%0XxM94iT{Sx<;TV}34^7cM{K zZI$O?YV4YQ@>Gez?~?2X7Sjn7XV&#Ib`Z)>)>bcAS1)pe(5HE1ZcYkH=P?U9otI}; z4}qJZ1ev!QiaH#PGJ19%R4lxxB zw%kGPGD|O@NCB(YG%5`3n<_uhp1mD=vvSQiw&wVGHi%t5sSx5RE#WLOQIWLNDF-!m zHhEUO7{Gc0?w1ObeYf;Jx16o@k&h_G{?QxWj&%;P)OYF@I#8nh7#Vn1bBvYZ&@@u0J>z@=xgs?{0DuePK0pf zyLj2?C)LJ&q0uBz&q3j+qC}?R@(yRT0_YtmWg zrbbTb#Udxb}cL(JatQ1m=V{(F!s zb8oaNTSRlF9togY2PV;fY{fl}Wq-6BLl+&-!k%RG7K zmXFBUbm8HiRjO)*h4sftyMs<;MA`!1C@3Ju0udk&IIy&M0@{8m;z9@jQV1G~Ite#V zLn1QsE4iGQo=k$`n)h-71D|Q}l%2b`{a!NJ#V4Z$}O) zSNOT0Y%a1>f476B{X{7kHfu)?LthMoaH_^zZ(?LofCqZR_Py&S)URiIL@Gr-xg=7m z(I{*WB^1X`qNRpqO}F5Ed~qTLOQs=I34M!5_$S9%@)LkT4H!VZT zYQI35KJE&v@{3gwpq*FBP8>xB#mIEmF3OSO!4`diNEN*ue(HpFToGpj^4!;N@{6)? zrr~!5QMik3k=z1e<)qX3O*HglDsldL2T$V2G8YKA!)uy89~P=ya@1 zjWefT*Da)^v0s}|lR=G~P!13RNrn!aFd&01ky+^~4l+Yy$jJ0oEKTF(5`=gcf#s%3Bx=)`q zlR;JHp)!5xZF{nhDSq$a^S_3?$j$E}d7|y6nojFsio?*X&_n4@@g!ctZkFLg)lcD4rav9WxOJFSRcDi#l`dL60xM+A`v~O zFe?)L@5Uhu<{qJhGAC=is)ReBUi2e~B8BQ7@p>@wRw`~reaLS#02!BBh7kfNXu;My zIg$t<3R#pX>YYh|GknT$L%SdCwuHf#+aI!-xO?+ffUUO=I@u3)NWrHoLv&Z%%macE zhPnLl@9J!MMgR$->57Mj@19uaiTp^T)Gh>qcupM_CVn02N+zE-kFd$*ApFN3h%e{W zUh^oI44~^Wq(OTui>?=DsBwe*(4$OR{g;%2c|2s z%BrhR7#7;6@SG6Yi3GT@F&1eV@jw>)xe@Ngih7=JUe|_wVa2j0$ymd&tc)D5Z>^5m{*oy>C~^rx)vq)v5Kd%Yw7`wA(uI z^GJ95NcORM3rF}8r9UYy8&X3UCfJyqMTrh!+1wYwjWy|YTO?bvU(jhq7}BP=w?K>5 zdBo6}OVs~ahPU{)2lGK!%eozubFz2_^SMm;DbPY7yhX`$H~KtZ`FNzQ*!@>s#5a~Q zk(ujiFD9A!M2-IjmEU81BxKs+Te~ow8fVC$f(FvyID(Ku6;BafgmGyswUmW&TC7Gw zN>oV$fBsX6Y(fSUDr=(F0;YUZUS9ImD(RQI+@IBi7W6xp`iHG3QH7#qXzKtnkFP#s z4H}prJE>pkcu5l-W4hneiy7+&^y(f=71im-5%-2nx+t=(w@OvGK7}+$SJ4WaB+WuPgnQh!}WlLhN+|fpB z==L1GB)wPak8FlBLXaln?va3NbjKy|3#DDTe6|iB!>3^4Rq?wKJ?@XgPlqa!3zY?7 zn(&3S;!WERKvksb`99_cxgHZ%=8H_3PhQ`H-!stcuG_j|8Saf1PaVIU(vs%huhA;O ziz1UT-m;0!uFYnfO1U*R$Wtvr`)K^QRXja^XVs1u$Q#J`Ow#L)y*#&{8FDfYB~8e*AypLyW$>g`!S*%$y9v)(@g??1i+{u?O=g8 z_os2AKGcF!s1RaWQ&7U*f?n=%?3yD!z+@TGNi;XF)6n#YHbtKfQat@Vmkg?xxZ7gk&Mv=+|211naoE^ALT4wC4ZHrvBcUZ3>l6rL5sbrC_vfH)3 zr$lM;9VTO1_r3BQb|_4%+cuNnRBc$SY7gQ&ijs;BLlmRKcKXEaW55X1x_B!i;`6K!hN=JG`xZ?Kz+T z_}J#Q@Np`CL1l>L|@`L_iA}6n9l;5`x#N zpw;*tXQRtv~zcveF z5N}syV>#IuQ>9qKgMJWHTgN`Gs8jD?b*tt2f8NUgc{a`B;xDLMT^Nh$b8byn&~hf| z?|4t&gJXq?2Q^uEDqrXZ^cgelHv^`Lhuwoh;DB5J8nzMQtoccLVS(!1ONp+aG4%s~ zI{rS>?sD4j2jHw`I=#taSk*+KDdQwnzlq*IMyw?3UOSX+}$ZCwATJH&;y~05^ z=|G0zy|#ivUAUU>_+61aL`liIM`gH)(>1x@1^_ZjbCS_xc3s5|dz@>27BEn(y}cTT zdw!jR8IeHsKh3ju-Z*G3Y0sqZ6|lc>l&S8(#&lFL?N=4gM1%R!#abd(v$Mz>H@s6c6C5E@Z6A7?fB=Z)S8xutV4J^q{WIgK2trquopufp& zRXi7P@vXdm+9{#D!qxn^{F8?8z-96YFWrXw)xOmAuF2_{H0}r;!bNkyYuX?GVZ?wR z@*$z%lq@$n6bG~1^;s`%3lE0z(ohHot0YN2S8wC1XV0%C(i_(P_7Cz002I5urC#48 z7Q=!x%MYe!U@-MtG-LdE0X^FXwhL7Kt8ytaST!hxvKBkY#g$O1%Aa)hQmBiz02{wRfS&QGeE7#DGX}oQqF(O6C%>z9C zcVg#n+(xe?-*r{5m9Io%G!}iY*dpP;>ip-bZ1k3a!9#@Y!Pb)mUBa_G-c1`-<9Xg< zt^2-QF4rO$k-tccIp7z%Tto`JLgTwR4!9v;2kTt!?3P-fFmF-H3EiIUN&S;uWmEwp zm1F(q0CR8`fe0XGh0v^H07Zd3UtfA@5IfDg#Kaq|m$o1a&+udX+hoSX>F&=sR=)OOUbcHuxbKizz94y4nm zqi<}dRoqaZSJZ?+HI+X?gW5dKH_iJ?iUbfqI{;+keZGExracCVQ8b!wZ>7VE`qe_+ z2<2C_{0Wl~Pt?~|i%%ZDr^T&luwqM_8N-v^psEVHKQa&PXr|R#f#$r&^veFfV6_em z;Q!94z7GTBnc$g8b=f`T<&i(+gMJDc@wm?Wa^-`npmY*8)-H;ajRtxNHP2cw9PiV1 zn_d~p9kRBNxjXr(aUY}Ig3W_X@CGa(7ybXWgob$6ss-IUCp4*-8q$>lF2^}UYy*Hv zL73_IP&V&t9kY2NVl)8&44gUM{`On&I8gA4da}sQZZ`%umR?%kG>>;L7;My9kU&OT z4Wz~nT%-ES4fZjOh@~c|&Oae~zih}cg!x8+!J$K+rieUMk{kSb%sy?TI{bspbsMca z1el)FGsy#I9S+!;uu!BBCl)BJ4=F@kFpdrn&Pn=={-jVY9s(^EI za-x6|n)Rr$VN%Zsh7;KHr70f-ICi5JqmA;%N8U2J-Ci(B8$4!mqwJfsKRtzSuUQM6 z^IeA4cU|ZB^6yIdy-dUuOn-LDGx~NR2=3?OGfaQ7a#*3w4^jo#U~xVd2<1m=K3RNt z3^Z}Jxm?AbkDlcsFViq)qbX?mmSrcP{luRFL(JVDuvq^3c`7v#4j+2f-?9n>9gSYC z32G(M_Pa0gIpv&@phg++$$)i~T6mi+T73nI-`%$L{ zAqbf^5PLWKzf}Qm1n9>Ahlq%;=C10YF|k@1IN_1NB5s!T_m9;>(IM`MG(E}+`SFCJ z-tE&{uiG0h?p`&fKo9oy82h<|JNk+JNejtvJs{^0(9Wk%icQ3m5oUNqb&%!Y{0Xas z4uJx=^z%LAJ;iAqs@nEee%?r$Mu*1(%rTo=)`hC*G?t9{1SKGq_Y?LnL~y;2o5Z*; zt4HJC>YT&DS+lrW4Ni`82@h%doPH4Q@MvzyjboofO3FJ?N>j=ZD^RtFD*@kr^xc68 zUU>@2z#gST1^4|G1J2EZHj>@JPm%VXOS^*87@D#f7c(iyjV$~w`R*)2dB?y$f%0+? z4pNAd8D;a3lmQyS^gS)xFIfCxm?01VpML84n`rA*d4HZynGTO@H6L(G@=l+wRW`42 z!0z6i-wii}i4b9bF3YU#%KeVlP#7<`HwC;L&dSyT6#Hbes=`M8Te}(Or zg3MJ2^2f&gWyk<}uYFr0nTUu03d&4}z#`H}3KlmXQ7dMS#l6kR>6Rj}hOrIv=QD6r z-u5V&P+x|3z|;{?7u=e!oplbYWC zhv5u+JuY1{(`Hmbx+a{twlM^&C@#>u>jMNJzs?a!P9ckY?n-sU;krbZpA#4G(M7zE*aH{&~b**J@ex=UKoNIv(HH#hWK5J$6^Ia&YDq#wkL-#<$s4c#o0Xkv3igtd9j<5GM+~ ziTeq$bF{|a8AFR|YY?Gn?1|w0dh=f4c+VR~0%CC)li+cVnUsgrmoC%Y9C*i!mRnTA zIQhwRl$l^w$D0V|TYi&Em#R0+7hHrH+>3YpWvMwrPf}GFSbQ)%iL*iBm#T^B1Q0~?TN|ezbN~ktBIlReMBPL)3YRqNd zd-A;U+*_*;@`FcV&Z%GXi^#Kvg!leZJmjJ_wne)27RL#KsZ{ok;=wRTte&@s-h!Vk zc^N*+6Y=qkh$xeYJRLPq&58EL3RSWQ5S5l^O&%f#?-6BFHD)nsNbT;^a zlYy~TOcyYA89z}8f@ zaFb&N>AIF0d`VK^h(A+lik{m3N@mggt?jpRZkyAZ)NtcUy(>g2VkE&3EPCp}9LG+Q zSbVQ@zUP}(W@>cb>mRgyPPA#EAm3SzpkSkSKHAmalS22=Fc_Zfu1t6D-pxTK`U zp%&@69*CE-#9A@Us*c{<412k@fDy&_J=%1<#qODX)+XZk)1MTkVgbwUi>Cyi_Ms?Z7F0eFK{nMicsZFuT;X@W z21bVAMYD;;xkU8E}HxuBuw{FSc~x4NRR9y?HwG z$6Z2`;jkYv6Tj+DmWt^PM!;OGKO}5iX7!#=3;XkLehF~CpukRVk@(BpbNtI#D?%VF z*hk{GXNC~mb_0;X#zM+e&gmObooD|v8%`%bGKviwze#`iknKlI50fD48WhU|Of`D! z_Im(F!DH_46Xw#P0BFOzL_P{22J4;|@vy9FFc|z)2J&Fnx@`G~Rz$n`I3$kuKHhk0rivQpYjmQ{%)3CDyr*zm*%%uytgZoKcE%FdJA; z{h80*do}+Q{Q~DdDNx8uJ~95h9tGF4e;c$sqr>^`-@D4gfv7oRqGG^ zF##4d=*ISs$PE|19CGF}+FNDYuHK)_hAKuf3SEtn-ZC9rs|Kw8_m0oW5CkUa%NkHC z7md8l4g>JVEa2IhqL<-@fv^VpP>zj$&%N>EL}gYG1hD~*-#r_a$1QCQpNge_K6&2vRhz;+nrWcLPd$Em z%piG`Un3-|KMI0o8hw0-oGrsYHNnDPKxr1NzbR26?-BIpYs1=ZX1NC?mxRkr)qbz? zeX*n?m)Z}(V%5c2mXL@*`5_Gx{F2UjT~IqAY9vIe@N%+{Z=VR@_YIF6%2`YEX0>87Vxk?>oexrrEpH(L8K5-42Kr5aib0n?SHMk${o6#D|0T zz$m*3a6oQY$UVZQL$HYaazjzPHe4?vw7zgeUrGXiG0xHDUyLw3?TNA?`<{8vo*NFS zcp`HoMRbHUS-mW>=V@Xgj0#=UGD%p$-d5S_dmyDvM=S^MEI1!pLO0oL2i(@*;okiI zCvk*Vw9xCktOO812wj>n050Hahh%;J%=ab7qPWk=>$O@N^`HPSd>Y#-WD!o4<3;$U zN=20iMD=7hbz$3K>CT^kyV2aPLi1Y60d2iet0RCnZH^p61c{~hWx^bQH@ibE#UYLZ zB&eaTmp3d5kF_%D{g%D<2X+?2g3N{D#fT6rlJwmEmN?)&gyI7&Bd0}JKS|dr#>M3D zy^CN=3ttXTA-Y!v4dU%0gmP5zr!W!UEMS9uUWbDWI#Oj}3;@OnFq;3lX`Y$KZf&Xw z6x3rlTyc9)54zZy-P>1vklR3yX!@R~YpKSxXDGuVT_<$o!hoZ*vB^ViuU&m|hQ;wi z02%U>CSTF`LC}zGy7Nbz^KR5s=t2B=;AlXnX~S7M&;`K0t>k7m)zsrOMwV?_c$FrCX&J9Z3FK8sx-G=8eqkM;2xQ#1H|D zP~#p-I+!lGJJH9vQf6kK(rg20ITNG9)6-xrGaF9JhvLrsV|6qAe#TiDUj@jWBLd*x zh&=iER6GdXsR(KK^R=38)nU+(7%^m2wnn3G&4*(ys(RTPTt7`VwaZoKC(6FTPfe)a zH(zGvZ{2MU2&?_`nSbahj&b^g2S(%4NouOrH}bv)00RT>91f-}m5y5PjNRX?q1)4e z+W1+h&J)mf4=_sfI?kF188BIWw8Rumnu89OH7G~5JWS4%SN+y-gsq_>?hwykh7K}i>fM;^CAw9oh`okS$2h&Cf2k?_m`Cs+5Ifzs|p<+(Lo2*7R`k9*UcG0W? zIuMP*Bj6Z}MVHCZ;4!aiu1D>xQL{So{*|lS^kBmv9gLl)XB+LOaznFG5{+F`)M$r( z@W13;Ti&011PJ&e`X0;e9@;Pz3pXQgyl*Dr=}_S_XU03$F{DJ_gb2wZDSZBX8Uk;Z zX?VBts$8(Et)3iX)pSM{>MsIMrOcA5oesq!l@Whs`4}WMM|- z9)20Vywy^!-?0|R*}VWha?Y)6@xL>xYA|^BTCLgm^QS8@xRi`U21X9pw<7WSTJiA; z00|Iz#RAQW6e}Ue~*hH0$lIPKL61xhk4 za-YxaVWgmeAiZ?$dZNq={4tMR`J@QO(O37)D9J;pFDe8^R5(mFT0v@ZCgTBMSg(DA zZgyb*fq0%LfPWODxt9AZ<2Mx^zg`a-$dXebJXC1WO==g3q)0oh{j^=L4 z$#du-)b?}C?o4c(eBvq;Ws&Vm{QJ0~sQBL@ouKWKs&O(>}i@744 KC`bUhpilt9&;+Rf diff --git a/files/c/bonuses/08.tar.gz b/files/c/bonuses/08.tar.gz index 90d50fec8d7b10ece441d607b62d1aaa4ad6faa7..5d7500efb9866f602936abd2e5064ee3433b4fd8 100644 GIT binary patch literal 106322 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 Apa1{> literal 106235 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 z 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%0Am+{o5{xmkjWyI7xJ7-wyLCd#KKk_UcH`Ib-i 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

jVFdz&MolTrEOV<&v~pK6Eg!G zJp5`muG^*Gn-(h=tszhab9s|oL?FSqUfd2JIgsu-q$*VhuJB`UJ4tEO2%Hx&^8I?f z?H6$h6@&WdVlByGO{Zl2tnD1e)_HivpDh{g-o+mOlcu^)5*}2|?b#u}96bF{dR;oq zxEOYty_NT#+q8`mg$6sLbDJpG737+Y-~9|{{`8rWd@-&e=Cz|IPX28Zf(_6D0Dbtw z?V-s_QNg3>#jKTG{@IM%B-xFf=GSx(n(RjUSxN>akDGtO@dbuC^*dXV=DvwuL=-eg zc_Z1^pQU)nY7g8UjRi+$#-O*;1b57+G(H?=QBKJ|k{$;}-Zz{$NY%c@~bX{^p8O zY&&mg-m{@HDBDOb^~dki<^rTu7FrOc!P->T19SIf`n}juA5XRpbwnz6Sjtga)Et2` zVy4KmWe^yH#Wu$T<6n87B9ehBN7Lvpf-jCsR@6>hGBh)uCF}%oMkq9ZpaSsrJeqhM zOfo{g-HAEpELrTHLAQz2SAMc_sfbmGEDu*vj`HsO$&1GgO$haVM-L~hOY5|WEFEii zRJnlEZV69U!CWt{Fy^Z+uw6dbmXu%24M|MEr1)WcFM(v%L+R+53s6y(PBVy@_wqwl z4}1`?4 z3dHhKB0GjJF|PPA*v;A4Aq{0BibfNU!Pj^_r-M zwSsqB*heAKp7*ZQ!8|aJ$iP4as-+R{nD!qqNUh~nK6pu41IIfj6>?&_pj_rNt_cEQZ9ps?_vH4w4k zpF9t@l)S+hLS__ud=tlV3XEGu4yAS)P6GSn6Cpe1@c9WGqPy_Xp`>K+C5&ue^BZGi zxtz}F*QEpE&MucCd{M(;+4-FG@Zos*>nF=y`zV_)UD4YE&AVk_`vv zb0EgQHKwmg)kNxmBVM?$B75FcDP(u4?xCU*7~tGTNRntk2poi8fKwhv9&<=IS!Mmoiz za_1R~W0Xm9vQztT?qWqR4+z$kPQKUbngb&XkKN#)9VfD#PKmX6=eP93v+6=nvH z5=l8%+)I`{#!+E$X$+g}2+ZV<4|tlWnlI6aIh67UF?!AswF3ShwzFHhy{YK z#?}``WUsB!P8LVvLSdgOtzhwcmxEe(hZ$VldiJVwSQCXeACijuyTBcT+iYHkwkZw5 zzR7&+{g>4J0Wsd_FetMKDF$Qck)BI60c&Wr-2RJAoqGbVP<|svdW!& zA{K&~jU^{Na;>8_Tc_{!Q$)PePjlO^@3c9P1}EmE%9|F2R1;yE-B$6MzmXD^F}2r$ zdMUj<=jUsE`>+X6QbAhz zzT!(7ub}o3xRZteLk|OEhq!4~&*bjGj-10xYb0EK6sak}%b9%Ozgj(%%6s#KBuD;| z3RYFz3tbaec~h;4v+bO3b9Ph~%z8$D1#QvGQ`Qk;LfM3a*`0+KMKtB#vnHzj8Ky

zx(vLuKKOzQ91C-ts!OQN3yO? znvRMsh3?-!%_&8})1|ehddOEfke3R@>@IkGF6z?358;bGb4K?Gdsu*J-MV`G zx(k+f>3CP?f8cuUwY$H0=1;jj`QGW)dNO?IH%(04_EnmnPObbWNfvfjDWVCv%C#O? zftkJLh>6ws6EBFw+3>8@zvG>n-3I6W#W^C?1y%118kj5ww}gG zq~HQL@8VJcH%WzF+;BvVC%WUKv0S(4)Zceux%HWZA2E{%Zr9mI6H6wtnhkQPB=23j z=ZV~4q@p48`gJlgK3bm3EB4Pa-$*$By^P*j&3h(E!lIVM-zH%SX;pun3FW=Di>dLz zfShsOT6uJ^kn%3cG#KrA9lf^#Qe^H>O$-nEl*a{KH7o<++3cZDYx?UO@8$NoakuAv zQ6d{iNTOsEpq5pQA#`;AriE$aj$GRP4#!qpzIn=Qto!+0J?L){Et^sKRQ-Xk$HgEi zeUzo!6j!D)`KIZSifngRA;HeCR_P@em9sj$Z9FUToui)_i2Fs%`JN&vK>2P$He*-) z`Hw{5qG~S{+)3erN=AQaz8?jCwqfcd5h%l`6GwCuzdi8~YNc<~6oloAiA<-V&>iy6 z!^t3zV*C{c7Pk}IFYP%`fxAtpq*9k907{r2CoyVAH4 zQI{tu60zES+lW6QW*ug9iH!G2=}F&rOnJ5M)BTyo{s#t^4k1vI=T4C4-v^IV4nW6> zkdm<5txa+$mt$P<*Et7R0F5%3dpmA&9d9Diq~|ojG7QbXUnbDz1vHo0HB5`%Tb}g= z=Hy6{Bj_To>y~Xt1O-$3!qc^X0vi!?>_B=$nUXOz-1%p|?U5KVJL$goTfdS~Kn9*+ zRG|t}2|3T*q2{XbWztGk#olF)_gwFj3C?HLBtQleR~U~~4=TK38T9Z?L_zZF%ZTKi z^ayOfuwP;F`2&~P>>B`!a)RC>iQt`#PG(%*EIvF41&>lh{q=B!=9-)Ktp(K=_;=F6 zs?EsG&k%G`mdQ1?x7N=C8cYg+SA~F>WcXsbI?+kpbR6^We(w<({evxK82qeJb2r2t zl5MS%^03CHe2-*EH_OK4iSZC4aCL9uP|1T{y#NiPr)ZIcg4oQjXWSp=<^dkir&KOg zVc8%Q)g{Al0*yb+b2d}(6OC>!zcG!4E$IecAI&HJFru0TA*ctvi~WJ{zdQu<@R7}9 zzCRhr2t|9#ZiDC04^`JOT`b{Cw)oto*ZxI64JpDtnx)&}1%9|B;MQySEN(EN(jA6E zvZ5h#=e_pLy80GRd+y=r+mU4aEAY}l!XGb@@x7YWCgG81cVur)!c?7pNBzmMi^g>s z;VEY}SM07Ij+gG&!O-IJDCSM!Q6HOjRH<6kuBqVP~4k~D{@tICd0WIfoZPSiTH`efyG>tm_ho@?yYzI~xY zAdZ?IfL#yV_eMZubt5j)ubPsv>3%DzQ|gEWbvOszJWEiydxjsio=6M)E9LMRALP$! zl)peAHZT;S$;iAOS8DN!X!MJb&v+UlgMN5t5HP{=vtkbjCHhtfz%?; zFUCpKz$&?%rYc02(_jA{C94;e7?!1OciqNVMCa|tvgP<25RvRgB+HgdiS$4YP=i+; zeXyQj&{u;jk7sJig=Nlc>jny3$msgwU2B$~=DxO-vL0`d@MSVjR{a0L)xe?tU5nO` zF%m!(@W_Oe;!$Xy0tV&ih(FPB-c8&P(56wKrLv1Kmo?1yki` zd?UCKYzZ?nGwQm?Qs1WA)^GbO?B2FCidNaH`8V?aQ+%s^HcB?iD_Y%S3-SNo&Wwm+PL{>@9{o@o2svj1N`NeCI*m+qhU z^pmKrA9*|}7`72vcSyuLR?-NH!2=LAvjf2q(dBNPbgGcHX&XeiUcLF`#0Ry%5Wobg zNq+QU{=K*5EQv++*-Q2qEmFMf`j@***mKuSQIsgUZ$4joa*! zf#eRkMJpbv%>jlDFxTUXj0Y#=g>cvIJ>ExdZpIGniY-{U_`Ndq6uUIWmbzWd?qwhR zpbO1)T{b1u(~eV^|IiM@Et2@hiWA8?IRcQ-vXPlkqa6|quu|J%(-%>M|BG0RMguyQQqr_@T?rp zVOXpC1oJpw!I<7e;=4{}NKy8&eCE)k-GK-ieqb4rn~Ixsg~V+ydzl zT<8hif=&FHrRoQ_rzz4{>C}zzxwpG~L&bs*x3vAAZb;;GZVTHxZQUS#wNmf_6^mVy z`|T8LuZ-k8(HHYe#p(aVF-hYeUr9yl+#O})Y*0y8yQHwg>#QwTyr{!`qm2KTbBvq( zdm8!qf4uTq_Yv#<&D|mee>RVx<5fK5)S@}oT+9n%_Ip^lYF5ymzy*si!*irlEH`>w z+vHWMRO9<6HR}{y?PJBW9DH7k*gifXuX>nLOOSs5b1wR4ehrIxy^2xBFpa>q!{tSp z$n5!TpzUo*Cl68Yl8Fs8_x30l7;t}$fA{$riRsv!t`zOKI(V*^Jc#V*1n~ysRw__0 z`;PGNjbKP8BK()O`;tukWS`9kdx)G6+xxmly&LVRtLY_0OLs&E$HljH?Fqk+O!f=O z!%Cm1`;Qah3);F=r_LUl9~02~SL!CjbiDrKe$gsuspbvY%LJXyJ}|#G{xo?W7G z2d!5J&}_Lm^Zg#1{-4(@>yS@|Mf^7z^NiilV4o(Ar}f#)6qfJI10Q(kO`}%t58}S~ z4ileo-4#tM4H6Ry_@Xuom*mJ3Sy0EE>x;e!6lNWVZzN)L)@pta?QVc)$6QQRX!JDi{+=Bmn&cF>!pjX!&JCF5x&^8)OQyk@+)}r8s_UY$L~8L`m(X5o1yX;>`u*G; z^Qte1hVb!w1P3k=TrCpa*gu?@Lv&ZUZSgjWmS=@>o&}w~!EIoUfu7^i^h=fEiCn(_ zxO*Iar4WC)8PvY?4zrxMVO*IsY65osauAfKorjMuyG!;A)W3iX6Z1tFy(dyNP*&-i zWa+nPoJn~cnaFuY(+mv9k_nc?oFFFk#p-H;xl}I5yH_*zC4lpv_xtQ1-DZxq;;H@T z)LFH!edvsMt2`w-h0)#;H}+%G!#nR!Dnam~&oZ+q`t#SR)X2OP?BraO7?kC8u$4XA zFIg8p#4IOGJ$1#Vp2A{R0u2%kWbu>sI~O?{MbYBAE;)8J>5PiHd+rU6PL|lSNeh`q zTY5%Bu^dh{uJoC(lHAV8ftR>WZ|>K?XZ%b@ODY>w2ov_;Ncq5&aVSa6Lm3 z!3{0t$~P973i_JDBtOI7!U?Y4LbQy-Q5KY8@S zcAcHp+jgVo!=lL zkaZgY99wkJT35~xB|-t5Z@pnU3CauO*d~UyIwWFonV+0*ognccRacaKuq>jg>Af;nsnNta1JyQxNEH~|h!fga72lnu3ukQ#nM1oG-kNWZOJv|tWZ3#2C%`Zu~e zWMeT&1M<>$i-w?3fwDzjxhbh2^pK6N?EWXxpSzTPIs;Z8!&@vhT=nR&LoW~67eK2G z=Lm>haVZOa@xR#nwHXpR`et(4T}(~Q&;wG{Quq!$%#J~bl0tgegaw{OBLBg12H9uQ zV96C^aST>RcZ#>CjL9^QXNq0I2x5%QHi-Nq z0>AC;?=BkP_TS3mi*AesxEy9lT~Pl-|={E38U zD^*qe9B|hK_U={(M-bFkcMU6S-pU=4_glsInTwp_#8eO+66*k%=*WV3>_rB2q`2Zh zJujlPj1rWdFNk9_t<`<%f9>A>r9R8ONn2vndW5uMmNA&QGZp_xrO>EBpcykMDotZQ zTbGqj`IBP=WDsn7(y`_Ad)&Re%~82b;Hlead;wM%!dOl!@uiO#T?(qd!T92R&ApXn z!nQ*BrX8V#xcepYvt19`n2RN6hh{PKKYJJ)>8=2MqNrMw|Gb$Ch5`EhvwEqFaFyMw z&0s?l#GUBl#lam0mE#cR(a1~j{+u12c6}f2n-I}xx8vE@;;#XKFb-yP1KKBxbm{A& zFuIN9SK;-R}m zgF3_1?c}joEvLIn@GM^H`+ZDxzFtxm0Iy`rgI)!dPD7v*HLKSNWvtsbj-p{W{b`Ik z#bQe6oQw0cR4jq24Yw{H?~WeB)wPbWo5sZ4{0!U-)1rjdUcW*ndiCm3o6-H(h2qpC8}8kshxSj3j`lUF?o;VJTLKIZDa=;}@@*TEgM-{j zqXX@ALAMX{!CN#NuZ9KpTfwSNr8P?Z?xl(g{<-Bj@SzRRy+0x?b4NSklg8+od_q3Z zq@B2fvV#w}Gv?3hs#Zl0*$M5WojuAenM=c%qUmamwa4cl`4OJ_Z)DeVqxWzR(Vw1T za!20x6UM&$Ka=0%(l7RRsr}&ROH&(GX`lzU2ACm&(yJ@%TH~m44MD}6@W$^rY6LRT z^F=#J0o~jppX#j4kR7MdJR3N#HeU1R4JATwu0jH#IYP>nLf@oH{K>ap?>H;QXpptE zDxb~iKQ07vwU&LEes-7E*iGxg9gd5$Ys!~p*LulxIuI)uqxrh_y^^TJ=xQXJ{tSYS z+N3D&U9ekBrqg<1)LrtJQ%J0GAh|G@_Ui3VCBuWPim{I7&UZg(AdkWPdMQeLo34HayCE?*> zZg+;_9eaG3OYg0AGk|Qx=mogAl?8ZjB<3fF8zEZY-ra{}&Sr+~k(|75r(I`Gd6lLk+E8DD)m7;Me>ES(5Qe{iWn z`a6dJ#;1F!O2JFO-?d(P|~(SoAv zDVn7|xh>XTu>_0r5no(gBwpQx_ujtGQfftKLFwL5_7abt$^vrY`s4jm!XCuV(p8kj zaf26rWkyU8h=`(Ht&S?}E`Qal07=Q(4rRj8@^-ssqv|6nGFC*6`}$I9c7_i=I^ti& z7;s} z0w33Q=8#!2q(WTdOlRD?NNv*;T7j>ky6^>@aDQbUe3{2h>*|&>o^X8(XfIOQZ7M0av z7pVp-tuK)-STgSwCt=dq*(f|%xioTu$Lgydg*wUW=4X})34@~JVtW`FUx9H9^WWu1g}Gjp+I;ed%3$H0)N~u5MpA1GQZ8p$c2OJ!%eON*h@&3i)vi zi&55}C<5K|Scy_9tph!_J#)W0cMTba^KLL2le?8e!^ImOzGG>Liy26ox)T!o+G~W- zLe`ZI9cxWPDN4m@h27JFU-2E<1d}dHqKL%rlq~M6oikv#j$Y4Io-K#d*lA5K@XVr$ z+?TC8)4XzS6`R(Zy#?J+dMBu+N6a_z*Y-<0+t6M9U>eAC2q48Je9R+JsX(yi+akfsp=#F$)F`vdRlh&9Lo063>Ac+@kKY3U_&4jZDj1 zbW^V$u7$C|q7R6Wx~}{fKRh6|{Bq8$j7T6Z>$EareaxEy1#9Tf&OgsNUX95hL^0^E zngyH*u2B_^#L^zg-gD9y3q;Otl8 zNjahBCa(4Y?3tT1xK`hX35Iw3_>RmaPc~@r*LEWeYmY|oB8oFMF2!8PZ6h`@@NfJ! zFG7+c#AvsBHvQ+W6+>??Y_fYxviq^wTMZ{uXXVSyGnHpU!fGB^O8fTh6eHt=8GQ|m zAM35Z{xpw^m1tz97hUXLZ!&-RJ*g31=20WxW%5rCm#e7olyCwJzCYSlz^zm{!ilM_ zow<`P?#UV4jCM$2v@DjFBrx6hF)VE2qbuNX$ioxIKt!A8H?OrtRIkR+7V0A{fTr`6 zvc?zNd`)-y*^O$1?jT1tzp#o&+wjSFYovSq5(XSdIV)d1IpD1X?7azv=0wK6yLnbs z7&LDP_mB!R`-Y=Sbe_@N1|}yyBWT@Et-_0fe+6Qfrb0D;j}RSyNr(S6TBE}FB8bGA zg!p&XSFpcdfWcwaT4{VO+eL~!#IW^y!Z3FQ;>Q6~5Z)w60 zdEor37I&-7?aFNBT9?GYpvsd^i_zu6YGxvl`ZLSDryc>5verfEAdl!ZuLF{yVnt!8|tb<$$cq-15bm}{BYvYFu*X{mOeE0LPxu0t0I|p5@ zejTCR?Xa*=rx1QU7p&O+1~}1?4J_X8EoxbY{6BP^yc9|io&lD`nXOmmOWDXhsjo9_ z%6N`6S+KmeHRRhZc4<&1Z2tZ_fGT^ZjEtuhs-*@9Fss;F?uz6+(cQV?&W48i5Zwq) zQRqkuU$`c7vIlGQ>zz;ZBV#Cv3Qu>$I-8w)WEbq>@{UBnP!p$)NCjc(@nN2+t=N%RQ?6fc7-?babI_bSyFmKoFFLSefI3 ze}a$v>;_~)#YD*M9XH46KNhz3{}w12<>2`_Zq9>6@ozusVKcW@KsKW%y$Pnie%Ka^ zjc-SVhdf<#ljnipCcE??vn_eiM(aTOeACd1?{mO0krP*v_Zb_E9(6dr8=ZF7^MCL~xj7jBJDCHFnTd z!hpY`&Qg@DFHZjwCX?mrd4kxGiTWnTySU+kCp}`+f+w{42m->R?1XS5+!K4-Y!IJA z!TBd=isGXM+8{JM^o6A!0@QDMg_@j0&V}oS?CE^P#(@m;U_Jn}duDxS0%Af)=suGA zBC2lAm`BwKIN)N}S~~E8$=GjxkM{gnM;vF`SKYC=o{`Ed1Sxu7*q2$X)NqeKct~VI z^rmlR3SwnF7Mqq*QCrvH#dWN%kVOwQLr~ZwS}D3pG3@aK0q zL%Sn>InJi~{n9xN;O3JB+<-rdnb0~#0UwpH5e02=yjdsrLDxXSZZh(}cSS$>o1Q#x z`yRfegQu#x5F9uXzW47_Ad`BbvbJ8b;9zB~2JO+9$mX9PFP1mh&{WT^bOZJq14j^m zDHc=fa+DAA;1`Wf3D{CFi63Zaj?DbLL3GZ01nnA3Z}AEFkflDOllf=Lrj8$F~9w!{2sPG10t!j%s{jMI~#ODf>6pGT06#?^x-oZT#SAFA;#tS>!>a- zDCE#O5X3tugl}phuB^j!oh-s4xFE>h?}&ds>=yFH;QN^;O1eIC3(kXPtd^3u?c=89 zl)mlCTyJ!N8L!C5S-lfH=0JmtS?*EClc^S>!8qrc?P|mR#|iINR@EK@Ie0QH4c++3E;n2bvyIXX02uuaB{7P{wcNa|40$@DeTv>uuN0mn+L9l6& z%jy>MeMm=<$*ne@-y=<*f(XrZ<2||w2NPe3Wp2CvgWLbjTyoC7Q({t_ck1|2PJ5Z) zkr4bD6$COGhwth33AHa^#2j)wF|f`bNAuxT`C zEZ=+~rp%;!;72ewrFbv~4*vY!mlKu)P`vWzFX)))sAs?QEZ59F>!;q2zr=3)t?GIL zJ~-OXgX70#L}zJ5bpsaX;wg)qlfA$m7rq=r<QAI>JKTobnHPRo9tq=Y)NA+w>c~I9&wiNc2SA0N z$coPnjoB*q#K`EC>vPZuG_aRv%jo4|b2(cwNwir9809NQce>JAaeYbo(``rb#MRu_ zz{bLH#V_;YAcK^^WZ7%22wobE2K^0FGp=$3!AuhZHS6*n%J^H3b9g$vPH|LU2f`5X zU(h)X0E#P^iE)m??>ZfLp9_ss7(>(60q16Bcov0f?JSX|6d((#8HdMk(NfU$3lHEx zti~(;4KMPEt_f>|f4b)cuzxN}bq1L=5(=elfpQRc=$AlX#abW%{NHRvZwFAjk-j~G z*fT-|V5kCW8B8IWHRL+v(tN16tq|_EjZE)@{|!Y>@86~c(3EzQav;UZZ$Q)3|2gvC zf%&BFA(-TVfjAhtH~Lfbk@;zxb-Uf<>Q7lcxUjw<+CT--NdiiXz~#A z#RX69{G&K8CPCbzai8jW=`83h_-2^V{J8GXz0&kIf-@v&K)90ST%T&a<(O|2FEo7z z<#vb+^b=;5DF_Z&@B6bt5FDd9pVIq=w0Y_9_;vc7-#N2myv$Y63Y1a8CnvviN}Vu) z9id1C&%mP4kr^e3S=fpg(Qj(Y%UjbuInURKT8l&_c0z3w7np_09r09pJUXr}K#F?e z_emO$xk_XRe7Qal@P+nJxE1*#sl6E?w9eA*uT^ym>(#2nf%3;rmROB$yc_jW3FYE1yksjp^o17ap+}2eP7gNzXQw=`E5LwfN8x1OMfMfbkOn}$CXkQ<3H-p& z>OS#KyY;9$y=?bc5Q{?o7iV63r@JX5?XwhTe*7b9(k_)^)iJu}xSPVvRPP&)_^Kxs zPed(XVL{{Lo}sdT?8~G1yx`S8Q($~p_)vzx+CCr5Jn-*%*{SQN@IAQP`{gY?s zCcg&Ef^LS#g@408!*t(?7SRRoY<}0us!&UWo z^>fKqHhEqXds%Biu1lE#lRi6tgAo9F?%wPGk@2h&if9$oNJ;RAeo4sPwQD*C1U9(V z;d<>f{z@MVp4Y`k+yvLLew(+^f`ca`0-??F#}Mvtg(_3$)1H>QXLz~e%M&v z&&T$DT{E=&tss-|R2s`y_~AZiO{V$*j}__PAD=#?MhB8W0MSSSz zhpT&Y1``zsmygJ=v@6`i zkU6*OtJGsGQ5Cvlz< z9;dvi64?8+61$Zc1r^Z5cHW-QiHrYlv}5xB9atRvTw_I_-XgzO z{Jp8?hgS#@>i26e!jsp~6=N?9A)bf}=--@JnET%=!e$6LO znX3r~>U9;>;V^7t;(0x9ibhh*CN<`~rR0una!d7Z^pj;eyTPR?2bMi*tEKn-{Wa%@TD454>Wb66lt zZhAsZRS>q1-?;Ga(o#&@jjc}Ay4xrD+*gyt7glslrhiOalc_>jdcc@{RAbdWDd@|n zQ}@5w53XFkoTmN-^{mjg+IP%VeptmMirr(hF+I7`AcK2O{{w~q1Oe6Do`0`aJ@-?P zrqPRN`z^Qri2&T}wQf$LMckbLFuGJ$LKdJw+nFsgT6@~{TG-gR_qZSF6V1Fx*TZbp znNB(sH_QGG&)qy80d!Gw{p2H21KVZ`<(Kj!<8jzHK`V3 zQe&&)Q;N+?)>_j8>M4Re{pM|%rtC;~{r4bd>&P!A$yDVd!&s3c-ABwk8g(dSS^wCFfmgXd>JO+n9kUnuD*pF891ZPvuKIPI%ujIiY+ERMJgs|r&T{U( z-I%Vo8P?scMg{y@jK^i@wz^bR7z8XD5ebpgxT3&=dm=5KoZ*A*qsZip?himR6BE;a zUm@lfo8m4{a4ZY-qk`~rIe|cHehMgjm(81U+@c&iSVZ~6kl`6oe?F$4MN@8U(WnWR z$^{kW9#Sq(*5KyX1f}$!L*C5CxFH?G{JWOZ<1PiYyubK$8j(`zrU3 zY1L+X4=U&PP3*$au>X$JPa!?Lhsb)d>q%t>m}GBa@}=5~TXpbzR@;a|(?j8M9%UB$ z_No~!Z;!f;B!t4f*`lO*ZEQUEGW;z?`@1{M2<+X1VfV8Gu`Evad!K@*K*#N)I$wu# ze1oN7g2|WizJJ!*M7w1TAtkHXhM9ijer}qc+$k?>>%F>4pVP9yZT>jQ6yIE`^4lm} z@U~n-GE<4^pn!8AR|qgGR^uYJp69$_wn~dBt3Szp>$dr?-y=}up!zk$w<#VL7iD&y zAN&HO0tH_H`EWPAo+0rwQ;qu7Y6Xq{o-t)vq0?a)h9~~e-^h8`+F?!oqyeeor|J}>Ez_^_jB6RveiUZmOU8I z^BIjaztBIxsP@>=p#uwHxzK>#`G_*Sfj|;`vOqpzjTD@Z+baa0S)-%H?QRY67sau+$B7;?Z8_dMvKQZZV zc_CQ0>e3ft=gLlsEwVBIF2>d4JrV+2|9zCzfRMLnGYD15fzs*cQ{ng&2xT7w&HMC9 zGhR|X+X;g+-6aGGy+Q**d3APu96wUA{U+1#ZrIy@rkFVh;u6{c7{_|&*pRTu{Wg{G@T&i9mDh zH#L(ODULjHA1z6W3S|FL07~h%f59E_Fyr-~eYci$m710C8VSoY&9hlNw z;j2NMg550C|EKe6LPK@Hh&ZYlCqpPsy?%?ilq}5#Y)F6B($S1M7x*Lo1sAW2CJtUi z1oOeNt)$O60P+~f@kD;^L@QAJ%20v-Nh$Bq`kd9Jbe~@`oH~D!do$lPIPI}!B8GAh zUL4zc6@5(yc;3Ces?}h8&r@{f48MiL{K}SgWpobgP5996>am#0gNEoX_Nj02w4CsP z%~5cydz6y5*t9ndKmbXojUoxw3M3!~l?za}(N?XmeTtFU<-@EvF0A+tiPV!hZUY=R zzpd?BZtJ@vqs}l~`AR(MrTkN6*|)|a_;8q-+tMBO;=5zgZjL@mvSu4lE5wh3JfEOG zYsja{^4!h&aZWX3)B6}QAjCAyl`Nc)30nLmSNz9i37u$0RRaRPxsDp>WKFqlN|>n@!$y;z|G zFQM6A7UUG%D&jCL1A@pSXvwa%(51#YLapiq3@-@p$ld7{8a2FAxL3wY1(lUlObQvG>+kej#xLu#!kZ>-FdW=Tcj%` zw;;;eYyBL_yX~IPP1HiikObPY5V50mS{kY(bb=+-)@ot>^UeQ_B;l>RO$%+K4pocB zXpwBmkC)QR@9jubWw%Q{phsBbZMuC46FC+n7P<6&gB7+rnx0$bld6;z>>FItGyGshI;JtWGp>DI!9*#>VHqQuNet45lMK;gM6FWY^C!x#LCFc ztW4n{@BHH?mf(ub=)?nikeP_Sz+$-1@60~iMK5VlKXkT71=3G~n_>Sy!(Fw@7()m* zoOa9i+5x}t>aP;r^=WMR4m|1!83u80F-0Mr+Vv*0_2KB~@L|E!93&fSpkEvYLy*7j z=PBql%WV7Pd1=LZvIgVSq6~j!y<9u*&bQ=HgQZJ~c^z|4@hc6vAN5^geYYz~y-IjD zyMDZ8f>Z^w5F`m$M&Z-;z+cc-3axSP+`m0AY5vAkpLRJw>{E;%XH2<|%bGK62MKg(fIB}zX^rbjIjv(N8xBhQ0fKr~wW7Wk2e~g&2K46`;Cp+{PE#bfa*tG2m!HI`q-1N&=QNJp=-oL#7bO5WtcI)*u=! zUzjQ(;~5*z4o;A7jcQ4lq`!YrOTqPLx1)!mEBiv)PyFk}^;x$}_Lw}i#z)lDC?0DJ z!X)JcHM?%|kR7lSRJRC(y#7XS6N5K^a2G8RIlJ;Sa@~t!q+aplgcsu@5)Sm1#lnkR zz8v!I+kov(X`7FusfqLR!*@SojR3eqX&GnuCQ|4Y@!^5!yhqE5!pwC@VEW)=l{EG~ zEr;pKWP_6V3oxWyz4p>Bhl<0hrg<~Q#Uy&imR%qfg=zv>9cvHQDf)H6)SPCq{Z=>A zFjBT!{0zF+@EAPY@%-={wI5S3 z_IpvVS>}+gm`h%E&O*~FzwjInLe;roZStf6Lb5EVRf*VzN ziVc=qO%B|XivnH0vd%b8C&uJpIv4iOZ6Dlt+}zKvPM-L;o?lY~F)KSCph!zD!U~}| zT_l{uv?NA2PSxXHOePRBRtvcLx>35w*nNxBhn+hz%mdTvqi%!ehHB;Ffi(aKLIKB? zuwi*=k@G+cEGWCO&QGrz|{$%WKS9WKeb%^--HS3lUR{RsG#Oub*w8To3g29P3loC*=}QFOgz@CiM2y zMcP|5G5yiSx@6dvS4Xh*0Xqbl<#uq^-_}9$cDd85oGTw?zVmJCQ)|9lwW~>gf!)Nz zsG)iY!4J7h3dwV!uXr z`qZLhOf-Mr?lUFzZMpgzuWqivpSsu5yZ7_KyxbD5JhnqxHvP9ZFcgj>pR|K~d&{ru zTygH5kl|k9mZrL22jX%XNVlE%C(G5Xb(lpe=rn;Q4ybcBkVjPoOu{~`X39ZCP3o9o0XyB0~JF@Q!1OqCWnE4uR}rg#9`gsKa{DiHZTJcpVF(SPCwxZpTiE47jd=A zZv6@6Nut(siB_6w)*PbV^%hdcQzFv-Z^b=d0tGOG2;y4B zVpUzv&QAG~YSYeitpIaGXoaCopsj6f28;<^z^CgeeJQ+8^hvcoKfakl)8G5Un73o~ zC+DV#h3(k({IUFhHt?Rm=ZwbirVB{5yWrmn|f=povpo_fD#vy8+0TMNyDq}b^%DXy zixbDH7mXQNcW;XNtbZh}sSz932YCgs{v1Eh_QGx93Abqt+Yq{QnC|)_s#j*oLh+$B zQ!PNFJ>y1o4r=k$5mko`e_HI>ey+O1Q#{MPTuS0fQ(LGpL_$bH-y{RCr>U13W5i;^WZBk7p@ zxZcN1<)imXr+-!o80gI^W;?D9TYJr1609Nc*hjuyngJ$>zQKPUOsppO9c+U|I7Z>W zOsjGLvI*y0KZEyvdQmKNYa$IkwKSDfDQL*u+}d7A?dGac;P8IWLN~;5Kia6)7N0;^ z2~|X2QMObiyRk&Rfr7{xSLO*EuIs7T^UWe_kW@W33Bv%P+AqzMGhO_vL2cic_yr$GMF@`k8Uvd6bNOAS; z6+vuF1htVIa@=4qvaeFZqrS4u)_B5;s|f%hA&`DHlU=Wf$!v9$8|XUsSQ(TC-~r!j z>1vH+n@cwGZk>L~UHbXnQRSVXH~N!DD*G`&(mQ0f6r4VTLVi5olx zggS%T4z^Pd&SP$=-drUA-S7VBt!FI!lb5R`t!81-zn*U#iPPn;{ywW=eGGaVw8GV? zhm+o?K|QR1m0^@ba7AqQv((^M%@apFG`^Wo&3kl35T_kiE#fGdtlu8fW@nQ8Om_X6 zK;PMHnIc9k*dWuKF{>@^yWV->8g6pwGc|v#VSmykftgIG`lPsb#pll5;_F&6G*mR} z6(xNVuti)q%^en?o&tXIK)BAHHNp}*dA(%f7J37F1FfhUYqCp~I zd0{x0uJWT_+hyDBiiHGu2^3Xz-GB$Ua2mIWlN#o*xVeuD6wG7e6l-SjZ&9}-{HrLo zAc6qM6~D7e9^ZFZZba){Vfx#L%Na}Kqp~V3g7Ts_!W0%SbIb6?bs81CIn}Y`XkJ(w zBR)g9?JO>YjQ#=!FLI1%Ad-k6g)oZWyl%?5gRHZU>koxpxV!ZDd=QOFLoqb5VgfF2 z4Y5cXN!Yroro5_-%=`*5WqG!F0gkdAGvDy|xRVEnysj8YvQOgwFYoI1OW()*6yjjW zG7+>&ER&haPPlyP&q)3%BcNVYCzik%MOX6C0F(e1YyJ=npuc+k$lZJ;&F!+Ka=?ll zA5~4k%t!F`Tf{f1?a2#n`_l@o_$mKv?b00BmxRWR`*mzBK*;F2^CkYnlEpgzR6fe* z`ErZS$QUcAT>L(8WvAnKATVx`Md?dyAio{4yx{K?!+-U_c>9mH(%)!>$Wk2S%iXDS z{fbu`ORz`)03Ga@S)9iyuiLyvik_z^zN(J=AvTFg(XjMhjAg~-(mOz4BsZ6WyY*#1 zk-9LjtNF$~q*k*W3ho07kJlp?ilt}}V#vg@y1H}Km-yY%Nw<7tBhX1F`Zrg; zyAP1eeh2i=bB&a3@dKF6Cx^~zv~PT;C|ARZhGuKza$GYh2|euAqM~VMBkYn-ce5K5 zcqcr7xPQg!HkAWSp>&6|pM|R?Nf4Zdha*NpL*E=?ks%#qi6`zDlG1S3@nc=If`GEF zHr$r!nY5OMDMuxF-d?C4r#Jd&^}ob`9d@Nq@cx##AC{`O0m$L!(&P>_JZyv-Y@Y>B z_dl+EJg`99KADA-M3N^&f)&|7xw{v~vqKeEDA2y#wH?iFn@#cNGH!oY{_5-BKAPsT ziN#9?V)B4Jy2*v%1Q;!wTv~F+(r7p3-b%6+QtFQ;4X#0UTQ5>Ok&kWp-ubb=rjb5> zJYD{x-DGyGI%f0>dtQK=---9Ch8p;_;zEm?;IQ$RB`?$vb)==y?P;Tj9f&ssDMpZ> z07(NeG*FMUme9s1!?byw&buw|fp6%6=FDEd%)b42qJ0*3W)xauC&S+yg~2P%88?nk z_x$68Bq-(Bl|AXN54!Mnmn3Po=dkL7 zN@JJvqW;~Zo30j@=iz=BD=)}G-3Ko(lC?Hk+8=?#Ucx^dq5FxY{qAczHqX0qAdQhA zwjM!`mCy_t2;SRApY-L?lcG0KP zxY1-y$x3I&@Tbz|ls~w_pyI({ZEK$RbkCZP+Gu{R`vh6L)o_cktIbs5o9gM)efslB+TBjvhn)Zd3nu9Y9$DhS{LLZ=dJlU_!V=F?X)S<-Oq9~$B5ohu)^?K zj?*6=*Kvxb_I}UTiX1w~G>u2}+j7bZAyT7lh@GSm2NFL;_RMhs68c-NDStiYD>Gm> zZd-F572oG{s9?I-$aCz%I2iBq+C>#qx$5E8`pqiZ>SyN_HIi3cHBw|j3q?4WrAX=@ zmD@rEZXJ3*uc+}!n00Prz?W`tM#m1>l5V!St>K16Iw-TfsR(jP{ba+ zt@#4`_>z&9q5I5M_P+EbHBn%MjkP7vBG7{QJ1yx({?dKIxA%6?)JP4^29G~WOr_Qn zjgHwqgYfQr-W2DKp1AtJfRB^vcJ#E${)~>0Rlo)e?bm7D_t3=LPB7vn$Qen3sdD*j z0L+*7t(z`+3htMZycJ&Mg`-zd%n9kI73(SgJIPoUk~K?nG7;7~=}C~@zt(!`NX zE(uPRL!;ld4&jO#f69GSXd6ryQ6jT`PgoH!aE|FUgnJd5GSVn8yRk;)vb0bcRig9S z@+$|=eRwLRatP#0F%xp5RUj>&;Kh; z6*q(UN#4eQ_S3b-=!gZ_QAxuR)*dY<=LAzoffoTeF$@E?r+P5Hu`043WUC_~wgfxM zuj8|eAliZk(|UXF_az;_$=p_upzI;<7Y+g0BaKMIJCw8bBow-Hw?S|}cNOpo7;PZD zf0k449I=+MlI=|B$|$m+XTY3?FKe%qSwoTl>v@C zqk2I+{!z>f9Jaq(mbQQ|U&VoK3iQCj3+c8xmVDAZN7biyCot<2*iRB959D5yoN_YA*lOEW2j>N% z8n~)@;G0Ha67ZQs8J6nZX6C!97I7( zL8dwTk-$7g5NuxOqg$+>^XA#$L0dN8QBiW`^I|YN%S#<(t|gB4D8;COO0LM3GA@iE!=0xB;$MGpDHNv7S&WZm)Aff|){e?@C{XfVc%^5YynzeoPbHOUoc%4s_~5ptt1>ga|5fK@ZgzB80PsqzE92r01M)BhWxS z^1|KhLDf94$a3Y%LsXVNAdg;}TN5DlxsR#Vi=IC1m%~KzRs0CQwI{g2^e*F=Slbj; zdv!CAhacn?8z)+QhX$7f&8=CS`cuz;M{ zJlQFx$JkmR?3f&Il;w}2N7Fy}RYKzE>&u2^4sBg(_Jz433#YveKQFz^j??ihN-_ZiQqIs}mt z>H=aR=dukQwjb4YJz*nISFgyvF>-fyP#*B5Y24YE)CDfPng#0b4v&p9YU?@1PP<*0 z^tie`^$b_?$h-IXuvMjz^E+)^3j3Q2H>7hOBEB?t*D7giQX zoq8`(D_fzp0D=wv;S|+(6^tn?vpiQ;oJ}MnpugYp+%Ez*P%Pj=8pA4aJOUe}u44GQ zxAhspB<#$JV*9~8eL=1wrMY_9uw1lfVIx@%AE45^RT~gNv5o7l94QKfv5tbXp4+ol zL$u0Iht^^D{5EKM>;HA{@M-wf-@F4dE}_-O6-w%kr_myThqQo2R{F-j9K*9@Ocb=P z=NAywAPfUo1O_GU!mG4_1OUj7lkHvVv_C1le+)4&ml7Z@Se-Us?0 zmlSrLaXy-#^0X)7L_9<1r?ccfYTL8BsJDhCgUKtMy;tZ1{WG8?rzW*Z_|G`!HFhTw zD3~}FzpJJBYeak*ell>t&=UE?Q(#>3KDxww+B!^}+Amr~LX$w0w#BcbsQ|(dVA`yK z!PeKPAkD1@rtpM6r&rr5Ejl9GVKcBfT`fP{c<9W_Vk403&A*kvk8O%&38sOy^)VEr zcB1a2XKxn?18J7Gv>x(2-(p@SiFZ7lj%PP5I_M}VyS$2 z;8Mbl=Ox*1H+J-pFhO}6WjmQe;#lfsC9S9#G0Zf8T6%$2$mi^FX8V*IR^RganKjlE z;!l%~!q>5pS`=O>R7&JR?D=M9?JZ^}Ru6G$Y`azPefuo5L4*w(4eCD1Nj{m@nXiZU zoNcrI#?d%)9CVHH?!RU<=S5<<$Q*8k)j0siNNGBdKynApXGu)WhzXIVB*;8UzN;_t zllosz_HsWPY9YGjMgQ)MYPbVtW^gG(d`8a4bUe?al8N4=r@gzzRoYcE-8v*+JGyed zGSAe51I-|TMWL29fd&aCN5}*<>a_7#i`;6>Md{$P@R1aEo1rTJ%8~Ijwrfu$1js<- zo*bO@NK+44Kxq5MhhD!pPI`la+28%W;Fp8 z*>YTgWoG3f1{{R?d2yurYSe)mmH_hzKU&06vJ&N>+F_+n=Sh&2&Cc0>V4Lk~!bSp7=YIQ$Zf8@p4D4k@h zVQtY6XkTI)X~u(@LHYY7Gy)x@Srt=$@CxU(ZiEATZ)<9E0_%DO;(iIs)jXyCX6PV* zyqgL+r}5tr2Hr!j!dA2J6+WlHjQpb*77x|S9Tcd=MpL4F?utc{G-Qfg@-xhL7Uz)b zOr`17g#{1bV%9-c#lDX9jAWd+8UX75s4Jy`s11YlLvlaX0bOg)A(OQNfaFA;_M36x zrKnJa*lx_p*nFv2JT5$dgDt)l2i1*kNPs#C73! zq`tjl9q-kFRPP0W@rggr8)mOI?hQ&YM6iDAR962r=1zhzd_C0(|4r@ofQ8}9|3dvA zu^~@7dm>|00;_6G*(6Q1IJHl>>RG);N=UHnrMZ<&?9<2&h9f`)V$4+XXAws|@@m5D zxgER{X@kuaz!A>Jzx;fg?>^=*Iu^7X6wC0?iChDRk|T%E_-V84_}K*|#JxJ)CbNIi zhcpYL4*Djpo)mDce%?9z2)Gvt$}17bpaq)S;n!U?3|xq`^i}nj(G-1@M+B8i4#|jv zL_X73TAFn3=>topDPZddGt?}g(U!fj!71E&a)A5%5t0th6HYgbgn z7-qif7ELecDEi-?tFe4G76s)zMhwK%!raaZi}78`p%^I1Ow|kg0(*@d);CqlMs^&o z%Zp6PzleN7zh~DjZ$PEkBA7PBT&_6gQU7M)qiEPs-X(|+*dM(KRDm>kr^bsfX8Zs| ze@yDr)Xqrewyt9GAo9euMbDtu_YNMEssgHzKh}}|e}d4yW|GUhCDpAF)kKu;#UqYnjAZC!x|aBA>MfLTN5uU$Vkff?~0vG((`(68731%O88 znCHXS6?PLNpbN>c`LbPP-i@d*P>&0P9x@) z?DJa7C5d*fYQ;$Fs_^C}QQv_Q>k>NC86m3&2Vt&~jl&e%Z^ZxAGB+A}zHVXx#wPOr zquid2A_>;tpnPPm2^dWD%slA0$yT-lce4$J4FLU@E^`P%PVp|xz%)CQE&ZqI7upzI zjS`n@TCuIL$Po}iJc+-~1I1D<7KgOQ~@drN3cLIi>Rg_0Yhvnv*)fo1t?2IN!cLBY_G8CYiXRT7wXq0+*mkD zCkERbMYbQkY}cTZG?gk3AdaPLCcwky^@r>w;68*H@JZejN`zV-mH6HkzYS3UCX!VG znVo#eVXy~lyte{Rb)AiyygKn#m{h)s1s!1Lv>0~H9Nxl?Anqrt(e9x&c2`MPgL{x> z8)OIG&QTx{?ld6qRA@ zv9K%`RFizN9)B5Pie;e=UbBGu%Ji{Le{R5xpt`TKK!^*<*eD!PqTn9Gh5&&NKl2ni zU&sp9*k(~hpA~QmKe;zT3Tn7GCO+6z_U3IZBn#bTTMNN#?GRZ3{YSEiAN#m~DUs+71zDk=1~@`dwB@n+OP2K+ICC#v zv40;h*7H7(wIn&C!jXJl=LJ9@d%Z(Niao14=mCgmF*ERLHX8*0heG zx29DnF&{75b$}z7jDAzw)ICJqLPMThrL!JR7@y8F{m#_v!fgi3F;AS4UXp$Rih0gB z^V--kU38YZqE0cGSq|pFG?#O>oQw6XpeeZ{V%kI<4OD)vq3pPz7e#8FFIPcr_kcz| z3)W)+2U1l4m~r_}mJ7QYp7C%f($L5&+Ce3nK`h=q6$$VL{@xQj4xrE=P8)T3REiKh z0rtlXEtum#D~I~>4@+!(Y00cla5VuXr|hdwF3UwtmEO{*=e1Sukri{yK|9!w{%D@c&byOq^Ni{ zZ1+hI2a5a?rV(}fhg=9QJnbYQi!pr?9-+WFQLt%yqX;xhA!Z|aKW^p0k*BhsNc64? z&+Z!$QKnPgxYb`@9T5(Q5RI?a>;7k4DQ}1#u zWYX))18=Yii^l9o8L)!nNImMba#ezX*fCAIM;f}prKxW%i_~C8`OBfl4A9!qP^_$% zAx9MEWh#?_p;ij!QOCCOvLGD2xe2GKlIlpb9+Mf;n+h;}Vc)4yyR z`GoY<-@fH_b0jn0RI9W^>)87!?EUl!b1n*7n}T2C`8U||#MVEU_NygUPbj;Z{%k(5 zAq@Wplt7mx8mryCjgALlcWO-&;Cq!@d(A0(UaAn_(iwzGi2N&hW1q(;ko6}Z9~L~C zJ3c{8uk8EP4tFZ!Zx-anigMjZ0szN%s3jc>HTiswa<4%Rii{H0k&mKA?>H4dqTg5g zS++iTTfq^wPS_65UO1cpELE&-SPJRCc8hgfX!VMfEL0Ks)$F|EYTi}#O6gBe{HPl) zN255pM9V5k)4Z&z{jEGQMzBm7Fnh?bJ`yMDWjrB_j>pTvm^C~F&(JHa58fK*$@8k* zy>9Qj-)q#U@@!nlQdo9Bi)b{kD}1&wq3jv|t1F$V zi2<~46>+h@jMg29dtqbxrvI9K)q*wgn)rSZIud0tt*9*?mvQwf%Bi(v`2mA`diTY5 z?1x3XbGBS*qBqZl7b1{O+@WY9-g*EkM7p5mVY7ecuoLcJJXkh~JG`wA6dzweehy|t za+`Juf?fw@xwO*Rg$rc-YFXi(EJ&8N!x&)VUmz&^FhM!_@24pBcy^o5xXag~i zS$J0o#l&TSTgO_l0u3x%f>2%&RPJX&%kFSH%pNI8`f$*~^g*hlf+NxU-;z#~{<&eb zDoxE3R8J_sS)84$Ai2nDq5E%rVQe53SLOHe6Bjgunwi~;wVY2-1P$Z5PuvO&_;}^u1#+ub zOhIE1y`#o<%5p{)E%-@i1J{Pmv?nYJZ@B!z7w!qBqJ24aP_3_9H(q&LtUK2eiU}15 zeQP^9{O1x|6wl0b)*>500CEB*JA?VIsmeVzB3hUq*L}Zck)n=~9mQ;*v?8mgoiv^{ zX0cr#4yeb;XLRsVpuRv6REzl6AjOP(mJ2frs^&*hEgMzwvnMroTqo{+28nyLw{hA3 zV(c#v0cHNgDtp|y-+=zkhY*bRFC|Qq>RZl(%frSufQ*+3#RG&la9j#(;4~dRJ_Me5 zVhxXz-jAiVzNY(!cm?`5%Ec6;aGt3h$RkH0f|CQF@Cp9Fn%ZhYC%E%1bR%Q&D+?1r zz4!fPmQ!mY0vNc~d}*=<5naGVjp9Ijf@VwoObkYB`lR!Jar@Uy*5s}PoJmF?jQ#|g zmW%g^^12ml(xM*FD(iZ8_uYvm@W8V~0YG8zK0pouo_IoNKB_5B3~xP5zp=`-OaT}7 zvf`;W{X-JctSzEGW~l#33>#beG%rxE`JhtN?p8jlKD?#B5B5uhc?-iIb9Ii(*JL7) zi)&cx;94gZhgNH37^Efg0uP$@FI2&18085+O!?(sPeN&C4 zEzl8k&HwVdAK-&DZ#bhtWgl5fbH0zb)|1omEVTLSq@WF9Rzx|$Fd{m!DpqV7hE-5H zBXh63*2xvF&jYr$iM^f+kyw9`rkcXiR{~5S^QjX0PF)(7x#Hf__AdFWV?Dz7K z;B9O7!@g%wI$`{sp3=@|ktFTNL{YOW!oRmPwGM~ws7H}#<=^}>E(lpYmQwM;OeX0s zj|BKvK1y&7i!o2nP6app_D)Z3YR@6ITOVSS*T{P^#BhYt-{DAkvU-T&ZCFqVTYHHL zXwgqxYMcDC;_}+**YUD0aDzCE)ne#{a)}yaTZWtD$YsV|w=Ji^Jp>2A-huW&7KAC% z6UNb&X(kPmi*h7qcb0&$0`Zvd-s&tMc?T*)IvgqrT_nX?JmLZ5g%2c>3=V9wBEVZ} zn!{!iOP*Rz$VG6AqSbKDrOAF-M(S_=elJ<9^Hj}v%@{6sN|ftTsY?0l|D^Ws#Y^$a z`ME=iwnKwR-@UY-M=XA4+<^T^zgu^RKz>Ay5RHn)1f{;2^T8~RljT@`V=2OH@UGOT zEAHSjw5c6cu@h-3N8{r9U<0SDqY&o9b9l8Ot94n4&K6gpZF+>a&@bEo8Cok{1NfilnE`pDRvEEi)ZX^>5ir_Ce_oQdt1e;z8e;$??KAv^H1YB z9#p^FZtvgQPZI?w>y+YOQy)Ea(0FC$F&&cEFPQ;uZs2${z7FSGV~m zzd~Z2VAl^=LIi&--iC@5gTnO>LR%m4HrS3z_lK7pP2EpaQSxF>hF-CLjdZ7#U3Zx5 z&TwbQm%|+4#6J*X#hP#lRNX(`th=MWXNoHls?B}0yMa-6Pup9fpj)b6PQl&tJbM?4 zyxg8{Xh*=Cee~gc=(_zgOGYE3ss+1g4@^azwz6({w#;xe(fGZHXD^b&rr+#>P$bs) z{)2M3kqcRewv>+J0n=HZ-V)VNIVyGgHUo~YkeC0+r%gk_urP-nIfn`S>Ew2t`fjyIPg>{?PQKzV+|Y&#{O+p0CdeC}=T& zHX8%)SrEkO?66Dzc6C6k-s-W;Cck|UpORlt65XP1$DwG#eg*A7+Uvq@B2?b@j`z4boavJ< zz11&V?lNfd93b)n)1!I)Q8K4S9X!>nwEJvSNd%C{T8xK}@YAbWA|&{Vc0d6$WRrt) z2^Uw2Z54Z7x?g{!R@5~TAjg9;+_SaeIAzgk}A%FurRcpY+$ zcF~7Z69L$mwAwwj()K=lgA9Oh_-%y7e~I4SABX+tKacCWaeDmvGIeAu_t@N+>Z=bPLRm zq`!6V)w4}hbl8@_jNlBlLHqJt*l=2Tfn>Cq z>KLs25KS^RUAt5FV&Vd6u*hYwp2bi1fhB!>*r{=roo$-!a%4GOS!CcHLfxo@(Gr!A zy92FH1e%7mcLTKW|4~f`!X;>KSUP>A2E6iH8XYli{*!9v3YcC_SEtDP6E>eNMgoei zk4b`fu=X@wZGOFW*F!BWm%4~$5@0yo<6eK9{rcceNZY*1Ol~bbjI>7AdBE%d&4H_? zf#Hm5!4cQR(P~37bDqtY0$ZkQv)cO#^l|sVU}VAjwuii!aemW|s0%I+Ga%TdCc5u2 zyp9Yha#)jj9{xSd|Jtvd+poV_v(BNu7bsOZw}rpJBB@3=JL8ufX;_`y7{Koctpj;l zh(|phbPG9}j-b9a@K1OigAtN-S8z?FjRq`f&=H$}CIvuRF!cd}-cwU$#qZ!+&Qrln zhVh|`j`$fRfM(&#-oMr8ufEk%)Vv+}+d4b^{o9p1pvqQYj-uGGfzcfYU`VT-!HsGHs095l|Um{AhV@*I-?Z+mG*1 zxfVH(a=N`Vl02HO-5--}3D<@zzi2>ATcNmV^Z<@N{bCZ)2nPNznZP}uhfD|+yl2%a zxbuC<*~Cg|Wn>{Mg14kHzOyn8&9+ttXs4~>o!)gl6Fsd(ZXm0;RNbpDTdI4`QytS4 zld8NSHY>Vl=Eu)fLfhhbrWjR`=b0auceKv8lhd}>U zjcCJ4Uj!sUC4(diTpyB9ZaU?tWqS70IMFe!rR#$OsCzeDuLm8F(jgA;6gzSR~Ub{)et-5h9j< z`b9>^1a&`)6{m<*0J0Pad2g|iQRta!mD^B~p^~R2VTb|;V7zG-)*}&)@g3;&*o#6w zcT<9tnfEd1>}7mf>fP?6D7bIT8IKUf2Sk^SV**e=F-$H%3}7J7qBx+V3?tcj&N|xoIcV9XN#9mm+#P)tirQuc44Hso=Lh|QA{aqKv>&f^z0!q;J#Kfc z2H~RJiT+ghrMBe?kO_!*{9oy!r-iA$920~J4hJ8JkP@_nxdW-Nvl~~eJ?IFXcIzw5 zE);%5tZO&YCp)yGtm=vMyvFLMpoV~&p^Y-a5_#mcVQB#9~Z zZjc@osaW(f>jf9})S%{ObR_ZmImnd>N_(qd6?%bN834n9iyWO(x27Jz00 zMK^@6@q{xJ@4#zd%z|(!Z6d|-o9>-^OVy();7?y~>n9kft-OdI;ike1l_kyS>(hX2 z6*fyY6J}@mw7=OPC-f6 z^QF>$nW}1ROs~Wa9wCYFqWfpN*%WKUVzQwcl>?8CjY>)W=r;bq# z{bfhXN~7v!Qw>&qae9(Bx@T%!V2&29CRk-O_Z(PvZ71Ov80q#iKb50vlLCTHq=pcn zyq=C6pF{OoQ)}B9$1cZSr!r5Rb{|QR%m7im3Gq|QNlL}_(bzXnYjIR6(KO8baj&K=;l>(NopKtBs znOW+rDnwO98r_8$5Ukgl1m$R&3PqK{Vd8Wxlh67<6uP$$L96jOi-cqUe_J(KK3e6%Sz;78lu&emXrA+vhB393KVow}q3jC@Hf;Jnsc+vR8XY`pj;u>s;}G5#(Ly?Uo;nfZj%D zWy4l*=*6*JS@{3kCIiN$m$@ddPwT{^ihwmCjU6#=?a`j6ArIr|;M;@!y^b8CLjx0l zN+Yp(2y3+A1!YR$t9+|DEN=49u+KZPUC7le1`s_zf@={b z6`q>M++`wc$A8J5LkX_&+?|4n%IZIUa+Af5c9&`Zu)UuMq1JqkYc~28t(Q}v>%Y#v z4WE;eRP><6cEH1rlRe_*{$)#m@r0gugY)a|Y7}+56Wye4{9k`%eaMdkDnca-!EX%c z&aq~9D<^T-qddn9Vw=gS6{L68-C-T4fu*i1-`gJ)+#|SKRiLx1H%O41)Pm?-rOeRz zD*cL1V_T>Spqjn+=8&Gt$6uW;ABUD>bh+i`{U3xm!uXfRi!2G`NFnnATOQ-o6C}Qo zL$D$5{bjBf*Qo1M*nCCZsUod@-^4xO$_u4_!N=8A{LM;CXWqj4jZ%emtL)M+!ay$M z`|E~);-Beb!6hZPOkP`@Gc--*lO7`aJhKLZwQO;x0&v}Teqj?VDUV7_M_?Z6a8M)F z;`pYdd}nq{S{2_2kBtC<`d6}{YlBDC5uD(rMkD*B?$lUS=&jrEjbEvMYtJpYIO7OG zAU%dKqZ1ap5GIxiIBKVdzvknCd1(W9;YjkogW<`1Di275eR-D-L8p-4xr^-L95r}! z?ygNG|E3$4lJpW~4-cBbW0^Aun49T6MuAjHhtpfl%l-N!@AKPCBdQ=O651@S>kzH2 z1>EO6MLX|OM-(b(4AM*eWl8CwuKM4H%$k)Mk;-b#?>MQFt_!VF%|7TD-*Jyr^=#|N z0iY3HD}I-olC;XjU~n*;vkWnOCV8OW&?^ue31f$ubsv|zydSZN zZP+DiL=#9MiX!EdW+(u5W>y2v?`~Xdc)U2Nqwyx3Qjr#?Y@N7u^qkYDlhE1ns7gxc z8bmA)wVc%+wUF_WFfgov%7y)YGw6Cu56L9?`LZrPOJR%9py#o&Pe!e{k+w)$IO=`R zwc@D%YfxdykFp8$FD{yrbz61}7S8Px>T1Z6)J4C;3Jy3e;R-?*>6mlvFN?%7T)%$vcJl%?h|uF=;~o9wky3iRn+gSnoR#X%osQ}r5j#f3ODiYUi#@BXy!XI*~%o=%3JzR}fe zmG#hEf<1AD^e9PtxfaUFWcjUb9HA3;=SWRm|`V3U_Kisz? z0p{>~oSbqk3JS!50s)Vpm5pa~l4eA^70Z>-6|hMjk)_JruuYeLlcl&q(lSY){O} zG|=yO*}%l<(k{tKRMLx+F$>gwH#Meq$F4BEE6QUDh{WAS(n!Yaf>f`j6TrB6;f2t5 zb@3TJFunlHdHN>0%1!{vy@ecq7UY}wL_^dix zYEPV3GtGE>S>N*kI4#Q=d}HIBY{f7Zi_G51=WJNm#_=WDnAfu)58(Eke5LB0|AY4VE&>2ulI9)OE7$&D9O*5<6kv8B{q%J_v1nU_- z)?!=pTz(C+fvtaXT$}~>mQGYS?8mS}XezM@WWxVccynp=>$zmG{tuLVcY~33(>egJ z5f&JlN=E;$qxNxR@~g$=^9Ti{@#zx10t;tsN84Mkq~thgC_6^AO^C920`^PUqI6<9 zU!{C!_M=dXsIm(OZUplAStMWf$YWl;j4OHb9V{Dd&SqOosx0rFU&Z59V^S*?L1(S#^bFMekw_Kkch;^*cXyIMs?5o55jw2;1!aL(CSm)O5*zkb zmP(;dUDB}Ff+Rjv><%-KM>~lzflyg8VjD?f-KvR1H@XMJAli5;Wk5+Nh1e13^%hkb zl@4_&l3wLmFl2TR=SU&enrzv_t;I4$Q&`DxDsunzozbQ$hCCfS{jJ%q2VSs~qHCo~ z%g8H~*Fl$u&R9P^#KLXM!5G%TNjmD02toAWV-NNN=O_(y<3`*1kEvc9BG^WJ&EN#a zkn59adjJ-rpwrP82bs06_Odb3MjREP)@h6U!+Akp@A!6v(I$yIYrl)XTO>YvDHvQ) z77o-~mwOU{*7=JpwrK7pRbo*42WGs14wtu9Dau^F3MiKv;MI~PVjJd|?X>H#IxEdv zskm8cI2z8Amr_Y??ZiLi>5?xKJ!gF%)6%NgtUOAw?s+2SuC59r+tFw)Jp_XfWoWk zDTC_;I#ZS6zI-3xmtMS5m(yjBe_^Go*|*^IM+x$zIOS*?lYm&yQZk z2HNmv4mm;4P0+MEZ$5R)de*i3_=EB$(`zDpgfU8NUvDJ7qc2RCRv{1TV8mx|{Z?=- zaz7zsxdO3W7P#p{BpVVUtXR6{ea)DqtiJ~Nre*&s)tu`7W$R>fj^@g+=}(FzW%mQefcIQm)*?? z9m9dD)!JD2!KXF@*o6|fW|bQSqZavV>yz-R&Qa7pl9ONDn_T%B$i^NuTrg&&kovrQ z~{Y2dn8%4Vu&Fp18fn`lYnd zm4r$bvfeWe=PE--%9??-cwC>HZ#&CV$6}Gjg$^KiVn4D@TwM>@@rdDOHhAdgQq}kM zj2G^Sr?mgT@+FyS1j@TN_^HNmch0}Tm1BW}*H5>B_PwU}0Z3GK8sFtgLRn^b z=kH!rMEB$(d)_iA_9I%*BiBFvw&^^p)|6x~4C%ElKgh=KW;np!LlK`S!n}q3nG!{ zNWbeZDdmHw{ju&>+thKk)ttrX+_s{qFo&4#{kdsbKg_d0uDw^AZuf*ie+Fha%g-+n zORQc5rPO5%9a;g3%>4v?gg@@D?KOT)Z!~F-qg?jUb-+yELt2L$z0y^#^Nk`djn->rqv=nO)7P`iI5DHM7 z59Vnr#92oyV8ogh8C2^S~7@LQN8ibHo17vBFU-y9a{s&%Nhs=sQCjpk|7GS^1XH9Sgd+6T{^{eN+H z_}(S$u)gk_>z_=D77g3pIKCC06#&5McctxCXh)5vlhlhu&M6Q$L3-%oS!TNx_#x@S zc?vxb4Ni2%S`8xUlkxNC{_qfYPEqKZIfz4{R)-Q6=vLTVGV!>6ed^rJDBv>nq+vM1JKIi#Fnie{B`5`}JB^e87gY zi__@@z_VS#BS9a6YHjD*ztQM~%pyVb2C|t?In3>;5tr4QIte>3^UO7J4U}vJC$1>B%m22U6w-1bbj3R~VV-M>&Jv$WNH^GkF z2Al_KRQ%4MTo%5z=Ao`4=@_9E@18;J3g^9Z`EL`FnZ1_JYemd~=EJ}$l+iijA#_rI z7t35q3s4r=01!0-_Jkzec|0glv$eN34=X~(dO^5tMHS1F2S$>hJM*r1LErD!;}5ML zQ%Has*j9NR-BoN-zK|tpB>YstOGj~~n`zcE`i0CmwH^>#3c$ug+_&;&R?l#QYl|Ew zRhLy!)in;z%cn%J0V=Yy?kUE} zTRsN__hA9aZBj}idkxU!wNf+(v~;C>p#iHlzh!$mZJ$8P^-7en&5LTX;_kiN2-FQ7~zCMq!!@DJ+RNfg!4^K2Rj;Et6rrXggXDHIA)8NnO2 z)67X8L9tO-Ut@uCatlKopp;ae&Cw?}KIFv*drelOwrl2Bb5oAq9xor;XKR1;U?1az z@}mP-!G$lK+jDuZ%1wCs(;rqgb#>f47t#_h8k~$F4PpEvR5SkVd6eDYc^0%=$49AY z+^rl~XvQV3m`bqDd)$9nqm)1ht)r@YUR#^Cs~!@RFsunHxdwDT{}lus|A&Plj>)ET z8W{{n<7uW577YDZjLLk8=G$-Dx|h>-s)fk|DuWfaO#zaOR6je-Sc72o8ag#Vc0hvh z*+^Z`cC9Yc#EbYNy{tacW~`S(zeNa<2<;ZqVkFyT4=Xzg2h;*sD@bdi#s?|B@Nr`R z;*sWcHeDo^TZDs`tkH>bHB7o}OUjl-uH~F_nVnOLP6**BzWf$x{;lT`7FmY`?o`{R zb><3tS1qlOn6mv&n=d@7_NGP+6pV`~nKY-zLU6l^ln8An-?(#{h zcXf7YmdNvcVKQ@1KI%Z?KOa#AImE1XDfO8aKHULWjo`$Y!w zmM?G{+mn+?gO+~IH!N5sA^wJZ4V{r*@7OI;29Nq=!_P;rMY)*u#-fE2ATsN?~{!NRDYHBQ-0JDB6{OC1@XX`0y zvi+#b6b9|zXsoPACL+#evVL#VxoQ%80YkFEgvgD;nW?fZGzL=m?1#d2Q+34v`$h&E z^riTlS%HYf#Rd^9IX7Gf zN-J6u5fFRXyrm~;kxO4)E~?CW)Rq=w_~my|ZTB#n*X(-@e+KdJ1d17%F$EZ&pZs+1 z)wt#)fJTr9uvw3zkpQ+4a~O%XRH3titG6|AE$N0Z39X=$m_F19U2YRs8P7)RfVcg9 zI#$Xzsp))B6+C-I|I1Wgsd@Lhel~iSNYj#2HYu;Tw{W4HjVCabOPZ;@>YoOX9%hk4 z^R1mw{{+)zd)~=U(Ck?J{)nV(ZLb|ZIrd5?-Wz7uw3@|w5)dDvQ`=)6e)q)APq6KG4>m?97jz&+Sz=O0&ZH+E z6%8jMORxT*cK)e5^=q~Pu1gbea5DW>jM|S^gF8m_dRGtkw6Y}?n+PAyGp6}H3qhWM z7w5fuAO66e2W{8{h<2g?jzy-p&#&LY2L21xI+6ZsmfyOODqQ^*fs6$92Xryk!Txz( z@4N;}JWHp0l)|xk+N$@KD#(qF_->%?uQcTEZN^~5+#cPqFtM~~Im$nta&{>{`G9?e zoJz*^q)TP_@MGNIEmeE`Ma#Cfs9liXv)GA5ds)B_q`QV)7iCu z2-7eFB!vr`Kby+SUg6k4dF*HGC)>GyvR^HEHO=N4m7D0>O|crm)$8!&@b=mc!3 zP826XWYucApL^PD8M-RsN%C5~hdbM!yD~r2A)YDDs8>WtFoRwI8lA>*{1`m<~wZGarS=%CXRgSMQzv;G@K`B&Rl_Fq%GehU>I z4cDjqtaZ8LQDyVQFUtq*hv_FxoV7)sqj)T5e@Y?U(n9Yz&C@qq!O7XFWUpT++%;kS zv`@F))G7r^9R_8gFsz~Vdk~Y-_MJ1P)tyhrxYuqvJ6MPA49S-s#)!5&M@w_0t!YP< z*Jcb6c10OJqn)_S;(@*-`F|sxzwF=3 ztm_<#5WE^H)2TFoonnqCJ;G5sa6i4^RR!_MZ!LVV0P+rXc9^mRcegPcN}LruIur;a zy?(SUTPzy>)9H&C-4D!veJL2R;nbMT1hY@V@7&N+g-j2)+dKJ zOLlqsR|O9iMv@AcEo_>pIrraL1027^GVRYR^K&9;_e_9JL2TR%I7}ixN#gjoW}gAk zM0t_6264&PTYu+IKlNEAsTmf(u}>c6<1Wi4GA!%5V}bNE_>8sqCJuIbeE|#upw@3M zxQQp_HESVR*WKKCXgN=8u_%5CpYK?rTMRiV`c*bXM7}~3zn%QG1V@Vx;F0H}g}_Q7 z-I>chTeoY(B)ki_K$q9*;Zki#CA3UDO)eS#xeU3+$GLs! zdNXv8Mdbsp1r$aNtUu1>dRu;L;XAV7ov#py>NrYv^9?+J%}Iru6Fv5*ulAUVJ@QT| z2ID=xZg(P#y*V5GTUU@{d5_t8P+Sk>cKZZ;yh1s{#3K~Q^ne>4YYb&&Iafl`z zn*-q~QC3G^wZktl$zk8au#Y~7bP_DjVObb!B8{BtysXg*u1Fgfl z1Y!K5*Q3ug$^z_&eOqI!kK(~+L3q^o;|BF+P{8{%Zxg7=k2&~u#>t6{?!kzFOBso1 zR%09V*@$I0MEu>VSn*~WA}+j`W1#snehc&G<{uG{mp5SuWO9fzz^dzZT#m9tl7gcn z?};H5OQ+1v3i;*s+|?J3-?@nl<^F-~FaS4FZw=-q>4x&1boT%;n#Dnc9w45uAOW1D zMUHU#@}CcAXxDp^q=Nd>w33(LwL`_1BjF*IDI&bHJg;+vp@?##^+Ci`t$RP%|8=;O zrMouxE0!D^7UNUjN&n&hqo{-Koz^Djge5J)T-NNsd4DA_FdXNp2m0BvpO+At9Ix=B zH}_4+o-*{p_|RTNq|Y9s>`xYbtSgc)!?ZFyqEp>UiIj8ft{DkfE6K>;9&pk{d44;@ zil>(KOpyy(x>esl^sFwDv@DiX^pBv+0NlX*Bm?37&aSCxmT?4QC>L{$xbo*wCP(X$ zfkQO_ntGxU9FK1XZ*lfWm(09yKb3BVz~o?mvsEr2wN-tLq>HHFaxC|ZS~NIS#x28o;tZVq%V5aY#|<^9_&#CB8nR*L_)}@I<%rujYj#*j z7s?)M1~#(PXM3`imq~7?Y$?14NiH$vUOAhl=`cv#JD>D`DU!(`gghhE)T5LFMX{q8Gr@7k|P?BQ*ZwEfm8P%Th*62&vr`tXX4NtIII zfrL7Vm(+CVG6X*5R))NRQXkBbW??jAPLkTt<_GMl2g3hwvkv~&TcQQB6(_F0qw!;Q zoYpG#*1Q*jo_s<+&8DAXdf(kI3S6qZ`ZPDO17|Th^UI6EzOY-^piA*GKKv_^35*Gg zW~)Sxy4KpmCHYEND>Yy`+L!4h zqmf$*Th;NT;Ysk)%8MdWn*DI%8R@$^(tARvGjH?ivhB@epLd?(*+~$!svh{19sVzy>Uf$h^Gvov-h=&v zk2E`todS}PHF|ze+pu77npm;742-`aC-6>bjRY82vEx3k59@7j)=t`&B` zoOkLa%GG9IFX$@MHX7ta)2li0`poA`Am|manobR?UFe7^SnQg|d!M-qcV<#a5@_*R zk-XophR$rN0&zeRWckjOc~O2`MXsifHnY%Lr$ASQSFV$#O0*Lkf!aMJnvRFkOYvyb zX)bEM4w;&HRb^9V%2~?#TeATO@Q$x(Fi!_J`R(JJ7l zc8=576ohmE>dAR;>NI)1`ma6gJtf`#Y#7R$ei>1rfat#;B7B>#5l%A#e_(4x-lYS& z((%!oIl1cGm3!7al%%u`>&QmUrk@O!oI6^3d5V{e?0#Z?cET3@v7^~TE1wv zGhy2-dX&EUqXdwcBJMx8moZlO$+_8=JXf1SNOhN}H6=A{CL3x&@`|0U6|^>~l3 z&v(yYGOr)JE$70VDR9W;Ho0ck;-oF8_!eV&1mtpOE^929n$6hO2J=NHOdsRHkiN>Z zAXP;Ci(FHXQ%edmYrf{rd-sqv;}17wUq-PHTNMcBs~mCVc*3ox4j@2q{<@acBZW}R znGa}-K<1{Nq7b2b3{5&|;NZ3lmll2YVHKQx^MSjMq)GMQ95*=jv70C#cYv#N+6C&V zLpRLh)xQHN#^*vL=v#+9=58Job)ynvJiJV%o+yL){LC4cTBHJYGX4hhmJ@!%fyc~T z@&~EuX50q}MW;u30lg9<%)%mNg1W9-dj~kHD8DbRPox~)zm(&~+Ew`#orPdPLe)-O zv+Kd3c}`~CKBUfKRj+0pBWMrPs#;JnkTli_;FwdyvWh~2I;e5yU?+ng&YZuzHYhHq zP4Pp_Rv~EnHYhy>7pfB@QK?c59wDh-MQiBw*pjc~?TQDC1aiofK+QIRW-5Mkd@`&G z7Uz~bAd0#oY**6^zXfxKZ9nAW?f+ND#tcfqo>*z(Kg(*>)61C@HMz|lzW0SOr`&=s z2#H$F=}DAWU`+6eNtJ-xxvt|<y={FSg6$s zNg(7+LPVx!4>f47?2#_h%nPKpb^&yyDsC54A5sL*X7!SVi2q!a{6qw%Cg3%{AbPPE zJMdgDiY46ze3qWeQhjZt@A0H60-ShP^l>l1b{`QH`;C?CZg2jD2GGW5EfBVpWt{pM zyJ4d%d8tuzbIooXHjf)SA3voJXps9;Y?lv&?OVf#P7J^ysxS;r?e_^4u&9B8Q-N~4 zr6~rmNs)t3-6{lx5;i7(2nixdgFr;-r6vs#dGsZ+03e%X#|w{Daw4_tAo^RU zMz&TXhIICfd-#Fx z)2yH#=c*hLsgEV(jUl*Q^=| zVjKcffHtd2D1`d)Z_iD`;lId*oo`j>Z|Ti^>^JEJu;>l~Va!MN!*7NyMqgD?(#Fvk-lL%|S#vh+40<|Sc2%mo z6CcBekcbb$fF)Gh&CC0__89IqT6fIdML z#$eR;8e@i9F9)4R09jvKju3O=l~rEwD^^@T&>|a>to;Pw=Gtw1K3t}8`@G*VKJHy4 zAiCx+hEngi%RH`@ADcIB%6lnk9DXe@^S(Nue-L zMTE1zly&i*H$bau=P)c*p-C;v8%Tgb3VQ@l8U_6n+){*=w-nzT6_t41wxz2v;6leh zdjsxQbj>wAn_UBW5o!bqBZI;B&j!FWzy7;P85_V{B(%pCFf+2!sQmOgeI!#x$c{tR z*?MVD(ETie00i&YgVt`XH2nO>}a3HeYpeLYh(=>$#&BO3o7@T zjKy1YkS$rbe6sdO5-(ZU&YI*4ERqN@YDPHH;$U0m9+gn*C>h)31U<%pg0=utRRGeEXS}!V&qX>sHo9edk~>&0T^Kz0;LJy z-jP=N|8w zKCrk4dIRE9%%7MW-M0LY^yEJzxMMBUqpyO4_hTL;3j=3+z4)rGpizzJG^@3c@S@45 zIs1nyUgf=L%b)E-4e#}p!&TFvnWDoFMB!!i^}y3~bhi?QnuGIY<)&k)m7?r06o6k`a9&|F~ z<8GBMz{qFQm9C+Mu=Tj)gQQom<+QA2?56C*6ZIOfH#fwVxEPs-VEqt*y>)*{LfJa@yqshI z%Sj42Y^zcJ4fRuvdPV2s_KQsX%{e33#>JU~oq5g4!FJx~amQ|CRl+k}-jmr%`Gxs6 z6)?&U*W*AFTi>@N#9o^{kn=ghr#ZyFS1Jv6KG`{XtBPi>ZU$!L!Di6L2!#5R@f^0| z_;#i1{2Jhu6El1YKRkA70t-NYF}`F^xDP=&Ghsjz^Ax*K)-Iq5mb)D9x({+Hz<9cjxB4@>oXniu-x3lKQzO zwH0ReG=*@=-3_3#nQ6OdxG*}>N7%-Gwm+aBOj9~!Y@&%9t@QRL>q?)yvrY_$jU`9f zmAW*j{doS9)0{kSu)~fZa3(QjAO$-KiJX4;ENJj@eaSW&I^C4jyhF{sYywl@MI(ng z@CECB_9iz3IJ`f%`2Y_unDWpgik;BFZVO1nQ4SxS=G{hk2_lSZp9x6SOsz#Ogjzk~ zg|daw)HxT(=QQ>P6(l+ie$;H_PU5h><47BP0~j2@+UyF!Qux z9B zz|#+mSJ5@WooXt5nE{8$r6#mbx3q<`dh=ufHuXQoU@^*qrjv>Og3BEA)#!C!nS}%>Q&g zV$||n_{`_R4;1w`_GI?lD%0us4gLw>J3o7Tfc-CJ47$3#WcY77z$h_|HKa?X`Ebfo zqh0@h=6|+;F7%>=;_PJLEA3=}0LK6iX}dHR+R8O?CSzSI6P7Qy`_ z1gH-##X?cL>y@$QEs^T|*l5Si8>=d_f1rlhY`d)QZ1b*8M&^igOA3i!+%OMgr5|FjHz32*EPLs^)FuO1-rU+_3Nl&YsZ>nfr|U;eYI)~5!> z-%Q8uIze=g=-qUU)L|-`S!Umb$`I(){g=Mi%{Cbd?~kOYnU-KuwyJJJ;0ef?jhl(L)WwR~pPSaMo>Q zS`@0ZW9e{P@bwQsDz<>!J*kM8)8V^Aeqmy+ zGmd~X%NOM_wNvCFaC zFV6h^BaG8*H$UqLhw@;s+!4Y`bK5oZZjq8`7i+KA6_HcChYmlh$fB;YvAOHHN{>{! zPkF|iYUv&|xd|INRan0m!R$REQok(a3jL)qzG48OyGDn?B}kZ6pFg$-cwksYaaz-0 zC+tAfe5AMJ*u#Av80n%xy5LOD-Yo$CjzZ8RD(U@b4yV*x-^OF{an7OM$_^2j^MWg8 zpP&iaZ*fIzglV1cYg^hJHK|ukRB)x`-tgF(SySm!&IFCvf@nZw??)pH*yC0?5A|B( ze6b4`j%PpF0mCoi*3uA9lX9GRw6Evqv4>MZMn8Bb<_Nxf4!^h^p#9!^05N!pa1$ld zD)FyS6(hF|Hw;r$7u^HZ>$|N1E}KZXymVChEKz@~76HS8n0kZ4Q2KYA?%tJb5idWC z=Z?n5yX+5!7w@_5R%wX^IuY+b*9im)a(*|@<>ShV5qvKOmtW8{NyLx<)+#pg_li}1 z5pGnq(u<`olvc9WghxLmm^{=A;6-WqNcaRHz1`~l=qsMHQ{3fyW1X}csTho3q7Y?) zgD_zfg9tqM25r9Uu2Soe5@Ep#57j$h&im>>7RKXpVIiPoI(uxretNN`^!0rDOnl66 z`)TK~G*cRjE}GN7Q|IwWZObeG6H~#_82>eR?->UiKzF#hRgPH*OY(JBmTojp#($@- zbg2~ZPwCHj`Gd}8F`4M5#xpR4Bh1T{e|V`oJ{Q1XM+*o*5RFhk5f7%wd$q8JUVtp8 z9D8AIS~BnQjQlm@p0pz;x~w((WCUGLB*ipD7<%|ivcw$jIe*5FNPa|}-W4Qe=N0*< ztt-peio~BvYlj@>J=Kjk&K+P6OCja<1r{+}eboEEM+l)E9jEOGt* ziA+k28*{CVwo-IGy~?@$-olVkc6*&s?H^86BvowLGC|fg4zaKOXDdW# za%DDo`4TLp5HD2sEX2Xvq`K*26T^Vo8;d81%C zc{_YeF3R)TQaW_PadT*QkJ%{fr?`~~9q3ifK}E!U?@aIE<+ci936A~ho=h%h@1uH` z|2M?GXKewUVc&1~MFrm5E26nsgc6bu){4r1TQa-W2_ttMnzLCx+gRhVZ>Y7_7$Hsj znAD0Y^KG6d3d31?8EL0;+x?y)&+mB~=;>w8I^D+=%?c|DJxaL)+VLi7{S1dKN6Uz_ zBq4`+8UYi=h22t%TwwBK*@gT&_^3BqrKXbYVQ$7)_^q4k>*hqLVI$@0FkODx_dpaH z2yM1YoD!4*UCzHNfFYceK1}z3Zei46c>{z&U7ZxyQr3Y`BajkqGO9f5W0nFNm7@*M zUi8)kd7O?ze_6B|R~BVFCZ4ifdXucN-z>Ar97WWazmfX2ju{KIZo8MvE7;4 zjlT`Q4O4Ia;1bcSS%)OzP%2NX*fvnKr~Sqmq?+G?iYI_MP_#Mr&184^-?816dy$mm zAF8IGJ_2r9lC%F`NbWcZ$&kFk1_05`cJZrCam+$X*oDEjuz&zlwislI;v(PH`Giu| zJZ)kzz$Zw|cnf|G-Z8G2qtJY$J*3^kyyvv9C9t1y>zgH;0(Hs{0O}sQK{p^wb#j!@&YS9alh-#Rg{&(J&VR$;4|jcfQ=sgIRF;OWm7X3D5;T2!NCcaRDm;?>^nZ-Y9=;NW5#Q=za1~9^YLii4-=sl4d#f@y zyV=U=tsOGGo_mvaQfQ0b2NxBNtGRVDuOxA&599?|@dzLpH)WKIR@?*aE~sF+GLbq# zBR>4YYX4ScJoso%Su2?xK}KMVaX2Wv*d4d!T)~u7b_Dr5731HdxcxAqqrO|d^Ut19 zt5%+JDB}FKL+b&`*=ql*Dwd8UbAWK)QGd^rZcWiap%6!zN7eQQjNh_G&cHLMNXF&N zy?<>-PyVz#XZjqo#ox0$sTBPs9Uh_P#sc?SyP9NqoFCL{Ft-S)gwqu)EjDat#9jnh zmHjobh;PT`jiE%ZBCcDW=`GkoZlMW?wljyx>ESQk`wQunH5McGfg_XNGD3`}&e+^e zP*RO?q}Va%7Rg%aXSznSepZBaJ_jK~TEolOg;$Jjvtxx2We*Dcv7snyNQqF2(mlsc z-|y^sZ@X;A2r2N?W2pN_%RYmk$80xOol|M}-)yyxd!NJlmB&%(%(H8n!<<1R_Lbnw zejK^3;z)mCOGvL>($gN>KH(Q7h5c63TP2sO34+D|RH@SL*HQwK&bLWQc?b(ompx?k z3pzfrkH1COJPW|b(3udji zp;FP9=V&CfYdv|pW4>1hYuLYk*se%$wW|tRP&u~;vuiN-s1;!6&)Ysi^VU5JQP!iV(Y{-w2b6hcRs+D78| z?7G&jKJsbt&mwbF6}XE$IX4E>T|Nv3@vTrzPIWdc?h37`7WUe|U&UO+ zak{T}5a0UIy)Dx2qo~j{J}xZrasZ3_kMyYzDPckHh}=jocLhnRg77Zu;osq)A`K`uF5LAc-{go;`r;lWFr&PL7 z2H@0kVsF^|8xIb0E9oc8vv%qYR=3z^LYkw!w3KY@J=CT%8~MYJ_Wd81H1LaT(sP@ zLu@ip3B0APA&2SaNB;AzKe3+_>ULuRh5VP3E%jp!e?v6HC&*;%^VS(iQtQUTX z=FDsU6eh1yg2mlhe?9Hgv=)`ktLvJm7USSrv-)#HQEV*9X0H#T?J#g}l8n)FR_#Tk zurIW?`ZeK@bYt2TzUtR$B1VUf>{_!(q#FZ`#|#>-{HK6YQlMG9&EwpnJuLlloS*`|33=KBR9N{+{qDqJ*oY6=}t^NmZww09zQ@CG>ulXmwtabaks+TI4xqy1P z4s*nZJr&gMxVOW8l7CRF(T5E)cYuUJ^#sF-BGtIk#gBmzdNORqOvu|_cPGmKMP#%* zpAkvxM^5xyyZnBdZBNMq{uwu;1_t7E45lsY#ClkT4*R$Iz@w+@jdpX*_Bon{Gf1?A zU@W9A0|PGoy#${M#pp0+@vj-1xMynt!ctplEJNa@5 z7bRiLaE+%A@42if3Rm^c;5%p#x~NXsx3n#4iWdFU#VYjgUCa8Be$$;!Twj_-J_qFm z5}oL4ag(DPVZ9=~9l6=Cu@E4x^ImpSE#Z-#xzb_Cj<8HWUrJX#vl z;!J`9c6%Fs%TLU^6=~lPSEn+bR~6UwZJ1L~5W-PiE=#wp{@F5e5c_BST~nne(JY|F zAA*gX@ba$lf`E~;;^v1du$gl(kfG@@TIT*zlDos}ZVB@h>pM$CqcRBVFSCNmDx?|u zZAvQcrityc&l-fId-(DP1BzOqJkl5i&4L?7gJL?s0?ee}y#CMw91^8IN$c-QbFLHt z&Kd|#l}{3<{1xp$PjPb8Ine8)ms{NIM*Qt9`={EV0-6>5hwl#Zcm;!)5SFt8wgTr` zpBH~w6z3*2w+8BuuRQ$705^6;g;m7xUQ3HQR~J5@h2oe zWmD2K#7kQ`0rXu7CdX@q=6VT~lAc~zw?uGIuo-}8f@q78TY7wvf#(H8z$R)t%eoso zqmq&P!%)3-rvTV(o?KsUwAE zpexQ&Ce2~H=7Vu%W>l%iIH_Mht3`bRnU0q00C>RSfn}kbi%pRmvT?ToO!njaI8EIM zey>qWnM&3ENt)P&Tz0nX@f9IL@;dO^+z~PlWJC6=NhzNFq@+TXSxvU@3)tYVp`I+z zn@6LR`z88J7O^mMihif*Ll1a}Z#aPRq9%Ql0l+YNYMb>s-_(DFT<{$^h=#?U0ogs{ z(KQQB1n6Q0F}(e&`fRq4{MLL0ChgxAE4v7|il@)fz?%8F(`g-;T1@;$e;!&e>0Tta zcjQ@rsfw7X>rxPy!_lI-Ugq||XYW8YlT?CPN|6CW-CA)$JO;ebZtA|){TJqGg89Kc zzFd3lv5V)kAI;l7$+lqrga#-=Fo1wlU4IfN8>_L8pH$8rqAh^Ymo!~!b@!myCxovaRf#KJbTqPR^*uQu@l8RzbLtho0C?R*C!N zs6FxAto|)ERH`QdUUf&M_n5^g%Jo%6dAkj=l`Kbuq{*HK`%Yg>+aOh|{^0ukB{3(FM?EpBxv2WvAg$3KTuQ41(qI71(FeW_bA~@6aZ8R7vroa;>s2|SN#!WmJ zq))eGdMnMQ)r-6w@jBa%&D{ul^Ch~IM-OKZedT+WN+p+UA)*=AYrAF=cQ<^3-sFnX z@xI+IcvsPtKU$64whovj2Il*hfBSRQRVMR2h8_Vk-m)`T?H>o2r&M*DPDR^l{Nas} z_Bf1-y_*HJ{<3^JOQ8=LmK4gkj+7J2kSnQ+Lbwdi00Rl%t95r~bKK#=B$vN!iIbUH zLAG)oPa{3^b6g5O92LDU4Rc+l(>?E+vF*#TY|Xr8DwA7HoaZ2O0FYT`Fsr?Tb# zJGNlSvGz*|xJ53?^KOW_;xR*&ApGG+5Ut|Kc95{l{M`Zva-1+kFq(HqurZ^{z4?E# z`#9GLb8;(jg4@gavGw$7LG zZdY1{HtOsElpYGIVv>@CGRF)%qx4WEaJ!Htvg&9ki2QRHE4!gmJ3ws}mPHeF!{A2y z`Yu=%@hm8gi`sbb%@^Y~_>x8CdvradHE`Sqo(S9OGKNKp+Xn&n?H_yP{!cmkm>nuK z_SOdG39I+y&J;J1Wm7obY181_F|yv|99HtlYLDkL)12@OonjzdpLC}gS0di2Lg_N? zKq5CSl#^U+=DtiP>O_q&+Wy7_^vmTPl>`3vz3b9RcinSF{=jB1WdC1+)`5cNG# z4~1B|bM5CHm@8|(fY*XTx!@pBD!_}n81QOtN1o^JAg@bWCMbt(<~UpzA9r&WFPWHo zELmt8UUia{v%d|9rcTn<(+lV`u}1elK+Q_X^bane+(I~2D`Dy840!Z z3x3xo74a(C3{-9e!%19{w2rb0z-{vU)r~s{0Si|U$Ixo=HaC_J1L1=(f|a)i-Fo;dkILiJ#glh%Eb|sewO8HpPnBe3^1e*Ta|#k>YF;QK#@fDpoU4zm0IpAEp5sX9TKTE30ZF^Yjpx?1;aMJ8^7-WM4i zmDjrcr%L!xtj9AnbLB4IK1}#hN-!n@!$Ig*TF9gA;wo>e{1N@tw!8v)ADgD=m7`af z;OkowdvCi_?^Yd!*m&}|XpwpScDpi+~&Cs2V4xKWa7zO^_Bm1 zZ=}Yt&z6#7vEi(36FMfwrt!3N_rw)TUTG9s(|fk^bFDMpBhB3|PqU$^14#D@I6J0e z&Gz0*XZ3CaOS|Oi?{1P!c(^g4mGhXl#p~iMT*@49-p{tZEp!2R?pW5*_pBc#i=PJF zbblb1{8&<2Uaq)ON$JKxe4(GC?8bV`L%DGa#Jz+VmK^RT=Cd;&wH5cA`q5;?yM@6! zKQVhui_)pPr2WlaQ9qWCmO5DSiedePb@8|0k8Qh;80W zf`OH1J{hfM!=0xyhT%v+IyjhE&(Ub6$Wl@pyTtJ1Z<$t?rJLUrRDY4?_>+ms6oCD| zY0v8R7FnT_Ri78G=1TPqYzB5uXzmTXCl%@7hOepr8E~Jc)bQ0-3y`q5OCfwE9z$(v7>+ORYep_4PXtCDxP<(@fi0)(ApAPl@6%fn`$|V zW`L7>h&shmN&nX+Usf=@nLb{@gH3y8WD>>gtf$zMANb7yLCRvqXree~o#6f6xGntU zJv^7x$s|RKBKgYXeVFpHq2=?T0pnTAxkim-x~~=*Sqa&^7Pp7B5~7KPxs$aq9S`#OqEKs zj_=nY3#w>xo6u?>MYR@3>wDUEXt~GW3&IB^ZSjNrS8OaM{^6)nd{XIPj>V;Y-BQru zWjdA=J>f~@|7t4x<;HHqx3+Y@?;Ofo#XaTYaAnFeBxQ3!jG?&~a&BOraiHzYb9U zGJ=1bb{D`Z71A5BNS!#I@yPszw5Uc{=cGPr)Co$EfCkDHxW}pwj`*h|f=E1JAOI$} z-w@Nk=N~o3zr{YCSM+_%+n#?EIqWbETYK~2pJY{jVCgHe`n;;OJh=nZA(a^9XA@~$ zLrqX83u=T7hE(qd;pr_EjdC`;=|eNT)pg(tddP{(n*SHd=f*VJL!TykV@?Y9UuT3< zzcFKqqC=*{Ne~a|O3Cw*osRZ3F}(2JIO?Ar%5H}LQh=lT=wDkTD0-EwKIqfM)3jR$ z2})9eURHs`JE(JG|LnOw_6|~M2<+jBezp43)7KVFcgw7Hm0n%$58O?744rVDLsF<^ zx@l1bf;k(w9%)QYo1F~HC6eHSQ{MtNNUK)xEB`$#8Z!6bb z&!CDoct@psXGA*+YB2e%!a4>FPR#Vu^oNSC6Q(O~{JvNjNE2noDQXqI9j_T4!O?hYijlSt zhb)#c+TsP#1fq2JlLhAvK=DPdD)$AD!;EBQ*S!QR*ES?L$^Sx8f|%Gb(`k@%j=)VL_m%f5J| z*p#mtjyZJNO_@WKt{D60GNi9b-C{+%xBuIC%o@Z}d9WzOj$Kt3bFjV~w%>(q=a9g*0^07+gh~FdfQTbDD8N)6yrPrx&-0{t07x#J5 z;7YMd1okH*y&DL63&OaLIo%Q!>JY=|7Nr5mL``7)A*j!SY`0SSU-UrF*Y8MI@JL{TBtK{}A)f*LN$}FJ5>9sVxB+C4Z~^ zDrFy;IvSdkj^VDD9-q3~WAS_5 zY4y0s8}qf9Z@&}UD`HS9!GY_U@|b6q^tUgOPMk{>sYn*hKt>p-ea_G2bz_iol&+`H zGs&VjT0*^}OW#?mV$ByD2pRaHfm;zEtBsr&1hh)Vxxg38_x!QaEZ{v3nDBWH=@xaG zYDwVpGeM<#JyY9^X29zz)(jI6!*Ou^mwbM?|4@#`m*SKG-wTMmNfb8Sx=@ZPw=4MG zDM3qf8~kFkq~*Nq0iQf+Hjj)&lwd89}a zL3&32?VEuq$`Iy=KfX9Y>}5+A5+SXkq*da(-FN-eZSQ3bFTw4+whniau-$Y(Y4{nQ z)}cDClVsUl7yc(YLKMjY++}_yl$o4DM6t zzR_$}$gL!Z1`EC}7APY#lPB^98lt|gWq8;_$3=so*L2QS_x_1NW@^?gat^AtM9)_< z#uGfT^(9!6fx4u!l=zNT(ow17(V)|OKsa-VTjto%7Uxs>T zx+G}m1CLJ2;P|oLE=1KDqx>DT-j3vD&ikV z@t91Dxqtn0;rwek@c7K+!Uye8!@(M(B|L_pazn-QoVo1NzcWuFTu)V4)8HQEfA(BzNK;mst#{ zsmk#<1XZJ2Zrfhb=}(je?f-{`yCg8gbT)(_Xt&cm>Ag`d(H*MTo+D z9q{JWKVHIZ3wumcK`Ju<(}mUOoFD{z0CRY?UuhGN-%TKASfll2Cg@+e$kwrMiA5Qo zzf#N-PMf!A`dlIA62dvuyDEh&fm5;{hM-w3l$;0_;Xrc^pMIhQKdL14`Q6D{X#+s= z;i!cPkLZ0WlWKjLjt_(bFIagw8*C%ya+Us|Khkx8LEGV^&YwhXq~5FHQ7l`qt{j2p z$x9x#W!4<7IJJWI%&*M_*#*dryKl$3rk+}`%caF$*qX#5iT#vg#Gm7D;+lNNEJ=5w zX7gQxc1T4#zToJ9t*I6ZVX@-Fa7fOyR)J5f- z^&=!v5|qv8(T(CZ)s;+!(`RA4T#Z(2=Ik&RW) zl_VmI*{0QhVH>2hlGnQa3UhP*{xnhb4qTYO`j9l0UX@Wkv&#NR|J?2PpAxy4V{hX_ z4g3iK+2N@ZDhE9}vYc+X*T|3u05$8VDe-y&0XB)9>rrpq>d2t{AT&oT-}aYZCO%{^ z#U*}%^<|Hj_?%n-3wqs4soQprDla~0lH_y6F z@B5Pv7~PRNgD{~>=8)2FcBS$i%{m|e@iuI}wLqDRdgY;MD9cDZ%CqEi0!;vf>+AZu z^QoKZ+%!)zjYnhiDKW{B%*X?0KGH4Z)I4E03f|U3P3%N_&ay#k6G4LJpl1#Y!-NOtm1%N<&Lm2l z&lZLHqBzTa_*=GljR$35{~0t?CF|w$+51-Org|q9Q(!Y_jU|jGd>qJO@Oo8f@W))+ z310=Nz#<~G!DRD;o8@#4#{nQhVS}Bz%WcWdk{BJ~_d3dYOqSoP8217)8k_j2zQ82% zSjyeQhue$=0W%`3T8AXlpmy=9>?H1P_L2dwlpq2`qxv?4*pv&017x2>0w*^HtydV! z`OtMKD9<@a$Pcz43UnV_V3AhYhr@E;A1B!45AS1 ztY92SntKO`IE_7o%JTCQ{CQ2}JeaDEurQaNfrl$4D~xUHdFEDzNtn)Dlq?1Q`oZ~4Lmh=GYH-TNU5aMRG3Vu@~9zAKpSwl8KIUuMf>l6!|(Zwyfn4e!( z2EI}{&Sgjj%3UIh^$TwOQef{21vo$y2^kOj-B*anZ(gYY6-N(ELfI_cY@6Z4Cbwkc z^|j*TK-H|31yvY&E~tZwSQgCY$2KAPk-d-#3(yc~$VbveD@lBFN%A_cbl`f>_GN*8 ze*INxL|HSK<)z)a|EUjmmWoKl-5_o`8Om0xKKZpSZtAHSAwuWAcGw^(Mz7bqV{tZFUCrhNPH5flo%fH%|2U%8Wi?aqA0 z${K&D1F*$c>3G;I4pSS1`vpMsZfyG8m=M()O?YAp^}Jk?MgDV;Amg$kb(tLd1GW*x zTi|Ksde{5$ymDNSzv`C)G^=G};;2{Bs`hr+XgbG>{x5bOORQkSsh`R@D*zPH+qL1I zALmRwMx273>CJwK&t%Ljv&RKuxWN(=P*~(hMkI0l`qo#A6n7H|?5Hh?l1f!(rf3@~Nku z$xq-k4T>NiA`L_-97fU+3L7I8A58PW{;vZE|8J_beEIH}fmtv?;iEh~QdwPwzoQvS zx9W~(FX^GnP&JFCtJFID6j1?2%qGaS+9)5(M^oSXa*TeX#TY&`QOIC@LxuvaA9dZ- zX9i2F>4yewQ&FA}JaGe${DSYV zk!)8(WRh!T(p3p`Ec;u@4E*Z-eSw!V->L{nm0*YTEeZA2XW^rPr|ofPB*{JytUI zyU;>U;@+HJq-7bpB)$5L!sNrHT;tS(a`ai`vCV^+K+I1GYRp1262Khzd1ZXhM2F^` zCyg*RKM$=<=G;aHhhnF^x9xsFk;3b)s7SdrwW_c%yeVH&sfcrQqpK)l@1MiI*&F%} z)e9su&tWXg!W~Tv!(bZMM8d>JMBZi>HH!>Q>`EOKIX)*9-Zy|JzesU;SFc#G6q#e8 z8>0u;J+HeBlFR*!kPY^0XzLwnQNcks<&39dbt1}Qg#dPcmg6k%z)CvHb2m^ zy#H%RXwj5$cD>G0xsMo0VFG@6 zKF5)XVDX_IF_`j1KEh;$-5ELL`2zAm7pD%>b88cqq@0->#Pa63CX@S0pff0*;Z;e+ z6QM0$N$IxNq81upw|;4LM*3}i{!orHY1}Cn*Nm$j(*i*`S0*CXk|t#u^2{p_I~u0h z3cZXyZ{D&Yu=>-GU@9@8$1$nd`pT-;#rZWa07b5o+u~OR67H!BAVAJ677B1ezO!%f5uL$? ze5OXCOd{p_{+()Wy1EquydQtX#T?a)mklEg#VEfYd^=4C6bt)-}Wp%KA4kI~Vm$j;$ zl03CE^!zs|m)2BhlAo&iAw~j+kU}PM7iKq?_$FX2oz-C&;3ufP`9wP~U$0q$v;-k) zN|=AD$QM^J%_Umu4`l4AdY)Wyz^qLw9titTQwk+0l3~z3hW|63-C0mMyks31ols$~ zyVSTkvFcv3L@bo87myTI&t{AAAfuFHPrBFwhL3Z2Z%-C!bbs<^Rkr(pet3!FDo8x{ z5b6>O)gIC`6o~~CEVOoR_gUsQ4-W#49Gr`h1Oj~gCc_6WzcLT%I3w2X%IJRR#$kJC z4C`!>ii6ilFaEGO%*ZJCf;lUXGJErd6h$#57Ixjl0DL`&x9tWwQbo;8Q1C!VvaH%s zGpl0|$ow??7I9=Ub|07P!(QChV448|fb$#6C~;_gjZy&oB`?nSuB&moiE91L~{)O=ZqKj_ee7TDpQzJ~dPFFU3FUf(Z+m)%A;z9`Be2vPk< zXI7Fy>CoClRPXRZr86t3Mp&(Nvnks+dS%Wl0q50rf`+>_*WcR zJg?h%ruPyjFi&G9h`EKQ6})$zZ-|HU{tt^hM^LOG{eyYZkuJ5>1Zd>F0X8)-$bJ*w z=-0%n!KKrP{gulSAt@Yf(HL)$|JXk%ZEm5Rpq^wQp}cq0X-J5*5h8naBpq+*PNq!1 zIkOMFuM+3q0Rjegl%@qegntDdn?ApI?9WvY9c91#IVHd=wqHB;@-+;o$<#SdEE+-N zym>-+Yvq&Hn@r&h<&`QniXN+Y7W;c^X#ldB$PNT&f^Cox6(qPvbvv^$S~k58@HFQv%?$Vn^ZrSH}_ zzW;zOzT2f}56G^n@zThDizo16O*oA5Y(fEMQV9I1DXyW@TbNw`D)oR!mxV=vL?E?# z&=XNSDzv}QMsdQ-5_hM#a=W!h7tg2&vJ7M=9BGN$s}o&x8`Di`xTLt^#Jb-vxkr_y zaEp0hn)~rR=c|MK@LJnNhXNg>=4}Uj=joBFxjpE$H^g3bYGo{sg4o%Uz2u1PV8PJl zS~5;OQE_k&&me`>5J^&Sx4~e%F#SeyHhblVE`La#az_<(^~q1|A(0l;1sC6y% zSHw$@u@-N_Qr2%2`gG%~TRv)8pmfo5-ao%4yFEG2%yWE#!K*wey9ym$H%xU!I?_k~ zIk5mc>DYZR4rHTyBZO1kh{Um#ZM03&YWGWxwfh7{5Dz~Zyvjaz>yKPI4$}e4yI^Cy zuZI9m>JR2cSq8ynGeHXl|AVtYo{aM)^c)_E5dv)O2il>OJtC^EKXk`C46#n#%cN$= zhfsSyazn_No0X3%G?Tu&Hk^Hmh-6&=JnOLLtG1+N&dy;Im3uILCCXvSBe0vQ#n)oUAbo=*yy|`8XnQ)6Y||T86zBQL@sxJ zfJD!(*FE7>PRHhpb_B|IX7l_Sk21MGx6ZR4!u^sejpJXG+3LK0Z@?&5uUZFQC&oQ9 zSCFmx?rUNjIfFf5_3>QbrTD`e&LcvUI0C^xi4~?(SFQ<&E2l8aA%8!R@rSc=+oc-}xJ){)N{6mSsL&l%a&;Kb*V@ zp;c$!VAfY2T6(;3Rr~~3f^!HvL!z(V5%x^346|yV>>wCp`$s5*Un%>7oCnFoq$1Un64qfw4uqBhLotKaL~)xz8rE#z2Pk>y^Rh z`SaX+cJl_pW}wmt!ShjnGO~JkFrJlMGkM;}(){sts#DbhNRbHayi60#_>02yPt|iT z^pMQ|wKm+~NiRtx*}g`C{E?wK_x=0=-fPGx#nyQ)&mjmbQd0Kt3;;t4!f?Y;eg93U z*NeK!rHLRfM)o`Q#DZ?7#gaN=acoOlgq-NjT-1OKs6KpvZ_jt&b38iW)p~rUIr=9Y zv2nJz4-U~}CQy6Q3&&-N1_w>Hw&RuUoILN;elF84XF!TTa};k9fRq z(Q2Qc1716cj})!gYxKO)XpFIVh=3U+!x7E$W`34@NIrQX-e5u`dW?m|qNi|s1iH5` z*e8$)+}N&9wQ4tk>!kHZini^obMw%)oG&gn0>h+}T-7cRVbD3G5<(Iv~eHenMeAsmLC`X3(dAfK||o3=y9Ae2}!s4)_q zL>yz3yFQT|OwX9cl*IG&QS|iEUvs`BHmW7QZp|oRGu&-M;<6|;Wf0$@&!jf-OW@fZ zxaLWTZmPg5vBTh%X1;W%1dO+baqz-rBURl`E9cl?P-O^~uV2QcEK5c3bvm;&1qH%< z_|ppoiUr>Q2#wDnt}l zrY)*Dtj5|1G5J@P<#v#2GPtadU*23`(f<{iHp}mX;?|`ETQsPOlDo~4z01~uO&JTk zp+dXqrh*KDWBZvMt@IUD$fiG#*R=O{ppEptSExDy(Ugy%wS%C&R!g~hm?_F-o0K7)y^+FFwU96-?%_ny7 zh@O$5X2T739`0uv#WKcfZm7j4!ld*$(U2T-&e^4?*}T$i^1P~6a3q!Rn^)eR-=v_~ zIDK&bZ%}^;1_sOfaYJQJ7fZsvvYu?CBU?H58jk^{pCU(4A-=EpJ-^0mR%B*Bdm1@9 zB?TnuNZfEYaa0OwZ?1XQaZ*5W0_BMF-Z3&c%pymf*a#er*FGJ`^d(z*7BKpPW%;H5 zg+VujrBU$@z9CYl{R`zNHXJj~J{msbE;i8}AtnZH-lGPjMi%kdiG4LVZ!dQ(I1a2= zWr;y69q{-*34}jm_L4dinqos>w(n-)P$Dfn^f{rL7S zT@@|ce1Mxp%G&?$SjWP#+<5F@GX*bkviN6P{@(0Oo5P4)6CH5(%-4gm38mGpX8jp?p)~$pG+F!E375) zrd`tQcGeLZRNM(5zde4+CeYZn0zzs|7f8LLMpZ|l|0HxtY?(URD5-t}>k^OH8QKo~ z)n@8ioVwk@lka@y6je0$13p8t8`a7C6`9-CmtDq>k-oL3nO65$Z;1>7Izx;sJ|%FT)6 zByfV^Vf)~8wLYv;P>oT1lu-^kXD};gH;h1ZyzYBJMJO>L0O~LP)(+*8i8#Jr!d&3z z=nr1?ZF`aeSQf^cs=oEE+vXq5^BTn|1n;$b19`=yt1n#q)@EwV-5=E&xJ&w;Etx5; zX_aoRu0K@nz8KLnth@nn+mi<6R$t}1T`%L9-Riw&5vl7onOV!XQ}-y3%6;hr51C&w zQzcitEJ-A(5htj&{<;$DM%a6L#swk9+$c_-wu#1vs}G=y{>^tUYB@q%TV4{y<`uhS z#PQRx(p(&ph7-jVAp-%wG)lK3nI*1)E6HLl6}OJ37aOb~U(k{JwqUCe0~E)x;DLM& z$kxwR6lM?9|N24Z8p2q$m#k51j~v}?nHs_x@6>L}V1Mqzd(&n|PSDhQoLJz{+e?0K zR5u;(eXx%GZ|&esNhuAj)!OK0$f4{OiIl*XVJ2ZsO<&ISjqBg~SZ0{>I$^q<@u-#0 zt0AOT&5!(ULm5li3fwGkYzR@De=(_Zbynpy$6UA)349Wgm;Z944P{!};w;sxOU-n1-9O3Uz@>#uQg4ApcvBT(yh)Ww~?b?TD z{Jc@qY(BES^*0d08$$FbfIYjX)Ctgv7{GZ^ljk>>h>1{aFVfSGf~RZ_C8j(;0^pe5Sd z#CL2@OWM?VEGmRl%JN@7(!Dz<@j1@Q6sf0Jp~|1YCMV1`igf&!P`l#D2N?KW3%fyy)U>t=2(uu3nRQ!p*Vze;C_7qly>sh&q2^1H&gno+F(h_5(t zxUvHXqHJv0qh&kZ`>*f37sALDsA2V{6Q^4*Kkd@*9isb~4z_9A+h~~M5oxa1iPy?n z^CQm7p%FVzzkn|y!qJUU!YpK2-*o_~q_-oF-@_BisCM$J2e`HIx!PY(S|E@Q1L}qJB296vZ~82s~x4pQM9@IJZhqZPUa91Er_<{A~S{y zdr9n4c=(!+^S_+^LE!-w)BYE8kC~)_SkA-|wQ*KpN0GjkN1-M(CCGCsyQp@Fred{_ z*07KS2>P^U$Ufx3h5-bfJ$;ji++1U?&)IT2pC7Rl|A1Ft`>(y{2SEFfyq^|>=~UGe zd{OAmA9!U(D=}}B5Be#{;Y{EYHV2C>;w!JMX|HR|4Tg_cU6TW4BK$*=I8`i(6^?QP zyctBNMZkE?Pkk@eL8JK2bCJZ72u^R?7MHNYiSDq*lHJG;laI&SgVcvA2eAM?=AZe8 z*u#**{LZz&Uhop?$iuoNihe=*58zU8JG;sYJ+V_<4{8uaY_5*sInmHYIfhZGf%)91 zZ>D7AAWy?a+4fs`&v!OUDZamf${7|NEI*-ks}#fn1N&+@lM#I`jeJ86(tGp+%oexS z9Aq+1T`rI9g|F&Ev+Ot9V)3S9Rbi5+N26hFhC=rPbzRP=rGpf6z7L6FA`mXxlsAGz z4k!V#h9=E{Z82rjXL|FCO<3YK2XKRZ$YA0KnI0i(^=9ZA8tO_jO{_k7anrO_Q;oZ-;$7wGWa}Nn9BUD3xObkdq!Si~i=MOa{AokQ7HL!Piz~`!> zC2mWKqtX+>jFiro(7)S8Sq z(vHak%EHc51v%i9!he~T>sK)@3v|TW2l#swpW|sPdJbe+VK;oO!05G%4`#zi&aLHv9G^qgzE5NjB zrxlU$=M#$b3I{@7`d(fG&rb}b@CBRa=&}JKKPsv;Xu}9X$N^q556auZitgxEU>; za$^{vurOdnJsAQJl*F5<{fvUy4TA=zq^z7`^`)T*kA_9};LB-jmPV zqo@!>i7w`!EQEqR<_k4@n*5Ca0vpx_9hKo|81;l1WhMZyR)TS2TH7CT&5EZ$^cmw~ zK@S^AoNE9?g;*cXECD_)1hFXj7IaqQ9Z9+$?=z9}PWV5;CWxSVj3_XV7mv03X7Ng= zsT4cVKV(;qwHoo3l}Atx&VpS$35Bbt-@0f%WXyB({vf z>DoJ9|HwUmb05_dSwSzMv;4t<)DO-_rH%bHE(~!tKnoE?bI0}`V|%n$FX}AVwbEYh zFHoHh%L0?yDG&^R5IRwpz8Hopc5hcOQ?06=@ij!TGnSMs2h1C_^kd+FuyTJgRTmwr z$?8i1Fj)-1vupUrpds+$mb9flG=4@NLc7NIjk|81ci0s9&bRz2s%}^fc4*b3W(i8? zsvm^c}yrhLg+S;`m-1i9-D|T|-2F{{w ztgn3Dgb@s(&v-PDvwT#pb|rRO)(vRc)idyT6Ikm(fU?19h0HDb<}Fr8pUcRAn4Ip? zk`lLm9ujbhWwy`~ZV5H$=imf-5?mamtb^BnQ_HB(637WW;M(^MKkG9cBoI-B>YCNJ zp>MVNvP|daOW=`oEh67X#x+>12B!!pL);`n8&-eLG=^R_dM5Z_nD;X{{FrkO%e7Mkn4*={3lk4V)WxS0Vc8 z0M5v}-kQ(C`Q##jai5F?PEVQO4UCW*RX8a_equXGPGW(&PT|xfwRAfA0i9PMmzqX| z^JE3V)P%5faruKJeEvHlQu z?a7um2F*2|g@f$Eb68go!WE92Iat=uC$%llKj4xu#?V1Fo5AU*u4{IPsUJ4fKqqy* z0}Y7I>ScHvc*&j|fEz5WY#=eFzM#5+S`cJhK+H8Mu^&Bvm}qKMzav{R?iX?y08Go9o6PZO5ZR>R#&t9LT4i4glStxqdgd^stoKXVEJ~?}e z9Gc)?W{AfD(vJ!vKVX?TC3)S4MVbd==b#m%2HO2Zs;m3ccv`U_wbIr@5UsvF%;H9wa#{4kyTg)}38ndZw+hI*2VEFS50{;JZrB3flp$+hnn;VpdS5oA=lX1Yd z+x?N7gzOjQCeb}N5CFjOuoBDu(3bRA#zX~-|EA)khkUh1rX_VR<~L7I{oSjwA%Kx4 zu|2XR0&&4e4c+?my{gj)l$F7X(-vP%`a2ld;(oi^d7U5-Cu)C(r^NPNu-sE)gTbn- zJV|`53VjObFHiKIeYf-g3_$AqyrfZzx2gke?~z<#ma!?@m<%$$Hv+OSn_sam{sN+c z89gQ;4|B)Y#p&wrpz5{0hc24-{$s_ir~N~S3uITooCl)CGSb1p+1SEdX`q_BS)9{P zS4vvsYbDq9YfqC*URap46P|CFXVcm7Fs>CWetWXvHvQYAUrWgJJ;7ycXJZA5rP(F) zA9kj-uQ4=m_7*n%EBwmG;UV{BS7_#o%i*f?4)}Tqv{{E}mx^eV#~j01^yd5x?EF;; z`PC9n3;3a(5la;ts$H58&eQ6}B0=}uTaBlN&eIsJVpKXL#Lw^VH36rgs$DrUbX_b# z`)5XEs9t1mXpSfS4ws| z*O=g4(Pu2tsQ=a-pVTkb)+zj&K|H}s`O041-;{Qz_JeA+pW+WP)Kg{jicYXc=*P+z z%%MxPe50CSa4^wEUYoOv6x6u!&flRzHxS`>@ru0h!N0xb=-x!Wl@M?uPGm}>!K*45 zA50Ufc#L)bItYUPwUP16Td1hI+E+%P-#fw$p&zgsI9qd+0P0#57=I-coQh(P)$JT4mwg4pB_U}Ww2-P@gL^n0%p2c#U(EHQ`lk(`7i=UoU(%)HKI_>gLn-_|()cxZ3wc;h z+b>#6`eeg=;YH7*q~)$z9}Qn5d9rV4=$`(p1cTZ~vpksOwtgX8Gb3s$V4yf)<)X4W zz>YS5wzYw4t%Bd9ONLz?S&d~?#%{t>p!LguY`iUQ(V28-`2YI>E`E9|I7&pMfA6Ag z)bP;v0g*_p-QBf8bv$2W4leq}GjUkw`3S@EfDg!pI3D00B;p@=wl&*Nv|;KkaOAR2 zQDRpy$2fV@`A3s1KknTN5O{=>C0JbiXe}T-;zLb`uVK0PW$m7eK1{|H!P_YAOB=Vr z{*z!I#ZKd{xi#FvrPD5^Ajj{ttD=VEflDB-sQmtzSQ5bg{#(12wFEOJ?rMBprY904d!0tB=`8y zO_{jy5G;SI)g;65oaJ-?hxK&s3KK2+wZq43z9G!4uTJL6uEJZ?I`jfa>}P#Q!5-9? zL8g=Lr^K-WVOYN1eUGT{w^r`lpqC>M31(Wvc?r#H?Ee8t*=YZrd1-Di;}aVG_>nlg zqw2Ma7AdpL_#I3k?weYU0qqt*yTTf>WN5r&t?bdmpR%T&C-YZ>OObohsV0zx*F2M&e(@PN?yiDZA`85 zU0)_k-q(=TfFMR%zvk{REfJWwzf76szWa zO0w29y0v+k#EXKtIC@#ayax^?8;OApm1mFa7vid97R-gK*ej1=f%TJ9j$UmhEx}zP(1f^yufC~>Z`Zdr#T z7{tHiFg1R4>hq?4t*=OZ8^u(aix5PjV=nXl5fIr z0z&8ceb#dsS@17+1?BRh#pvHAy5(xF3`cZ=e)pgI93`dKfra=K=(! z50-VCg*cfq{{bQ%LMIfq%k!JGgX1%NRZ)G-6CjBR!PNmkfA$?yJXJHS zI%||6X%U=Ho8Um>1OO!1ZJoTDjUM*La!l%drbVrP%cgU#bH-NG@)u>up}U6?2hNw1 zBloyz0G=j0k>z+|C$KO&#Za9~C>sU}pbbU&C$ai$h!*3Iya(RvO7n33U59M&VKPTv+DP6VBl{3~zbzJ&-lw&Y{GZV6zTdxvqeu(($=<3a*`Y;tL zpZC@hGwvaAvXOwM*@y^nNgD~IN1f;`iOwm6>%77|EU%Qc(YN_O?&Lmn!<(e+PYkj^ zBg?r!Jz3^%CCHbj^&jXxu;)=UZ}8?CyGbKQkQ*I`wp^XZe zLB?4~_PSZzQ}PLsMY`5om860*UH!17Nholpi<%I6LWUAy>outT+)+ahion1!#qkq#@yzP^vX{LTN&^MKdmu3KKNuSYzYvQWkai5r zq+^NXgG}?Vqhl;TvKJ}PBr?eCTs8y5y8XZ{FIg`y!^w$?m}>-<&2%q>xx$DOnY?3r zuJG`mH(HZA!t~z{aW~crpzj6L_WJm3?4e-ubH<$(Fvv za>?j2NjOr1bZo2_2S=(?QGaS;wVudQ&Zs=&=COqG$nI;|Y|OGUgI;Wf9{zqPrvT6Q z5MV8+edB&yz;k8-$Xpwimah5>B;|9u_NE* z-}V@@dVv<2ciQy^=>3z*hX;E3+6yC+YSF$vrcP!l!ouJ3?@w{UUF-B~Qcryz*+OgQ z=2v*g(Rc4(Vzl>Kiy{$YR5|0UPG^j6c+7Q2Y!S;Z1NszIW5VJ^9Lr?JM{HktcQ4_| ztNH;oC&j#6Q5TSB@BwAt9Cr{}wNRSB2?DZq(FX$MXS3uGYj?*ASaHt`_s~<;S~@}S zHYP;t+ACJm>5_6JmA{%IymYZKXQ9rO&VBFq5*;LW31l`S>#f-0S@w`8uqI$(8EFTC z07DtG(~8sg5)c{VVlLT~v#>qtAK03i-R;`v69km$z0~e{?20b(AxZ!ZPuCpxkK;Wa z@HOG!k&U}ey&t_JlL_$p3w_(g+bsWS>%`mG+Y=!-Wc7+6TEQxvxikI+90zZzeoF!D zjc{lHvw&(b$=iaw4%WyIH=pXd4rsYyl=^tQ{_`r6^-#EgeaKT5@6JYswQEdaQ;b3{ zGM?zy_7O6(8i_=VP$28q_V_#G7IUy@%mRe->uxGg<`4$ECN?VvzU3JiYryN^92vqV z^$1ewi>dJ3|H!CS5Uftv4%5|ABPhx_e&3N3; zVd6|P5iEMTuW<`-Nwve*iE+f+)xKEwXng&>cOt&z#=eW{$1!TC!<)^vdYV(ZZ&L!W z*cyU62ZSqW!%kbM$QPcPF3*5lZi%n69%n*-+VCV^QrAu73T9^QnRm0v3iD8r(d7qV zES<(I%`jnEfZl)n549KYg8_zH#M}tI&#_&Qs=yEF0Z@aOGX@&ktZmP2BhVd!C z_W6#gqN~Z(&1&wIQI_mxWBWak14gxhZ}df^td|KdlLwl9g@=6zGjYDqBspLF>L7$5 z3B<8EMC&?T^0(^W2uSb);1d{OLmB?RbXL<8A~~T)#Mt z6q&K{J>(L{B<;%4zRewlQvSj3WB+nb6w?fj*|ETdGO^lU8pO&Vt(+5^qKl+tYYCjp zL?1;`NZ}ru|p#`nJ2|YoU96WIPEHodc--oXIqX+~5e1WeVNiO53 z20bo)M4gwFu!Q=c;~8~st598W?QMTr6@P5^t7?lfRG)KLtt!NCL2XA7W+NbmyO;QF z>H<|kP=0>`ukwY28aGE6UY>2AdjGwz%S?M-s=n`Pa?9}%T-+*tt~20MuI~W}Afx>r zz4ttC9GtQ-uyJJ;#dOB+R{TvPmVTt11;k+UPS+f=$1h8$csECew04@imzG+lt%&7X z%4Ig7cpy?(ETTAU5C$uyi@dF57&?10a@m9IyDlt!i3;nNqln%S>#%r=b>U9hgr_B4 zxP>l9fE}FXDX$jhcpli=tUV*fg+7;Wjn87|oAS*uIaEt!hR`@I9W7QGyL@kB^A;&J z992~oK`A|~+Yl@p>r34Or^%1>eXfs;X}DEmI+0G}M8$b&wbzyvI#h1JNBASxH?y;f zY*!8*9PE(VL^x+60e)@Tk0Ae6-?r*ml1RfPjT7IYqFp30?8NOe-&N9&mh=kPG9LIq zIEeH)QK%Gz`ZPT}^t$%E(u5Ku^CB{&C)zIDPe?ya(B8-^Q+JL})^)Kdh$$FXN*joYP5txs4iT1=B>ZI6x zS7d&IphpGbU&|kZH%i$-KlxK zZ6l{cq|AB&JQ4bi3eWxyQ9M}ew@5H|Ug;NBlOxNJ4!Yxku!zRPQSFS}si#WVC~~2T z+tQ@k$xWpFCT;2ls2yqG9sVSwDGU4y9&nCXjxW;AwnG5kNL)t-7B_$F17cihR4(?u zf-Sec|CMLcu~<|GJ!_ri4%76uQ*r8zHmC3+W2)(EBK?XA zI+p=lG}HLSwUDl)Deqw-K5A%-5qe&8_dw8ueNhR-0N+CTLn zE+%-&!6u%K z+8naGpA!Xn@A#+=tTCr7f-H;zecQ7MUo=~{Bd!e~KjImq(cPgP0ZG=P zMf0Lw;-F^FBQ*c-rjgjd`#SGU`~~hNGGh|OGR1M-6RUaTYr^zFgjb8DAiWvHhpP2G z!f47E%A}j)ziFExZxzs@f8^Gwhzn`t@a1~WF!Cm;y{LXYr-pES}I&_iRuPFB8TUz>b1gDwGkZE`}|& zdj?W-c}=)`XuZ#_sNJ=nbio*}$yj!d=~A@qP{(XtTzl`>%+X|mbJaaFv%SjOiR00Z z4kZ*qMtob<-ucJ6dit*pohQ`BjmOB_vaK;aFTqa`R5hgn(njc;ja1)jpT@#6J^7=5c^S6=H9*S00S)t= z{ukP&I$59ie>=?Pb4sq0fP6J!kWQ&dF8OIcf+fVedSky6HOh|O{}0?Llh^RJGeC?Y z{}l`Oz;h2aM0}d}{6whY8fGxlD6!+RuGB(MGmk0q;Rgy#hIQ~a;Ny~xHvWlNYtAW= zG@Ra5Y7G2HiXw;|Z1`NFy*F9h!7 z+c#FKWR#DCUGB_Tb6*`#wJwClkUw9npf-H$!T05)bxY3{<$u3QGqlG>ci_y=QaZ@S z*6hLvv{L#Z#kFY@N0RQ57=tyP6bSGF!|iq5t^a^GD|vxs<670gJbZ8ILP7u{+9b+$zh(&ATiOoF;Vqh}aqjqXAcb9U@Qk@0`17b~; zlxu^Jnd{~{HQdc)jvkcvW-*7C4+!{TpW-=v{}IjwkMh2&kXIZW8-a+{X)yn?4XJ2V zBb`E+0X@YMNH5A=QEhXck=2H_a#>JQ2Q0IEd?}9Ux%~92F0579mNF!O%!5L|%-5bd z7;B`n9@^H9JT-lCg11VT-C~@4C#=oZg6+~kH z6|52u+v9BrM%D2*2(3aENTC=6QYt%(tJ*WDQ0m7nZC5fUfu+@3n|sJo`KNE~ASQP1 ztoSa$Q(;VUz9F^}lWL#U%{*j782x96$;rRCh! z>bKgTu;pq~5ns+e6*qAxSyu z$>&Qx*SJ<_doBqkQep30ub$TsLS3M3Vd$8~olWNPekW$dnbyemwaMHLnV6%{wYuM+ z%mh3;eO@*UxZY{2?t-1mbmjm=p z2;aB7d%W8!)RZ6<%=lU$dI;}-0 z@Ba)|u*FndB0r@f_XTAo zvzXpBby0g*v5XN_hd}bWpu@0x~CavlL5P;R>bnu=vxW-P|`2F zsvgav85b9J-`uL0N$<7y>AfFBI=*)aN}F6cxhU7h!SDE(PBU=MqPtOdb_8@Np@DzY z?iA&gxoiPIpk37qi1<)gL%f7FY$u&q$Z;_--Ru6SsK$3miGNMjMPIP1RK&CMvXpB} z^Ono2A1=eL=ZD^`=b%&8Klsv1=nIkAag^7p99*TrwQcK`^}tw^@HDQ{#K>00hXF-z zd$Rng+D@&Ib<+Vu+W%?kMzG}b9|0g~fxMv$%e|UTH3kYsL-N@4v`NfblN42LgL5>w zg{Tl|npd&HJxf(SkycDJCEj_{jmwW}4Q!lEPR(UfR*ci%5hlMgon((BLi5!pg@ncY z_vO9Maca>>Wp{%_Pi>ZF@nOqXIym=xHs%u!ty8Y#40Mo+EZET*Q_LWvxwf@yIxUNXrb_q0OOpZ;h9z8I#r*XgHCcUEeJu` zG37%JSM6K*Oh{jW=y;3TEUtHjrl&zFa(4Dv>m{i9RL}k9H4H}7D-^3IK|vuxFL#Hr z{o-o$EBxuSWm_hl-JbomA1NZc;YVj3S#rG$KxM}r;O#6BL|l5Kkg`ZVJdh%XLGzu~ z0t6E1e1-8mF>YZVEfTWKKf^hpoN=-8QIuL_e$vJ)cjSA*vCe z)uxEIg0ng-l5(Jb%7@eh@r%%=0`E#6n{RC=d~03duK}U~D_~Hks{Y2Fbt=G)idiRQ z1P;b?VO^_1@Joy!+cEz5phw9~$cDX9@ETl|e=`K^w8oK+05T2y9}bVnso9)eO|mVs zTe<8S2uSZEn3BKFW7NWv6oa-9yohbT=pZ{G>A4OCY6T}A3}4z?o@Gwv^nYNGU4j;N zfe0`MsPTh|;a6J{1OYi7qtrY5_qJ+Wg$pPUkt(h0C7B%E%h5hWE_kF5iK{O+3<{DxI1&*g$&m zfH*v!EZ=Fc`U*vhbOsjw4w{4TlA+VpL}UpXCQ7~&#ULKD*cnDwK+;7Fzn_TvR${MU zmJ4WGUv`}p7X4JAZkD&=k$)PPl1qJkz3{Uupqs?pg z|7ApTnWmMii|izw3Vh54rTpok;|d|ugEdiLu)uf_IMA0Dd@CA)(-nD8%F!HMcn4y? zEFaZbBC$Y*UO)ROjCXGw;EL7$)PR|bRsiAcj97hYgFSaca8Rn4zE~{Z%M`=%PZE#m z4EloAw!OghxFf7M`htjHM&P>8z7d8D9x8Ae ztCij@yG8Cu`P^r5H8r#>^`Pkx5Bw@um8I$-MoH6bPz&wOvvh9X3$HB0)t0rR?HGfx zqq)=N*mgckPKft;34TuCWC7)fw9ftu@~Rns5R!_Qir9@x9JNjaQXQ`@TtbPd@lXm3 zaZ{#C3GB|i5!gsvdaSo>gbN*8_9Qgkx4=2p?6FGOjq(C~huA|^-w$Wy4NurGHy?$ridY-J6B)@qZoZ*jS}q~}Ph3&| zRqE30dyx>A7MBJQP6aRNG^~Ogef{P8jzQE4e)LgDL_90U&O-z*QO{A;))ngi>5d=lj&{^km0bV&3@YYBO8a;c1<4jmT8>Ptewd1c$HNOSn~ zj4y2aj{&)iXZm+h-tZp>}chKEJXm~k2`>Tf1*tY zz54|DWgNNyi&!sQ+6LRrdruKKi@sE*0mI~y`rA}Y4q;$ntGS3k7!};*Xq{$&z<*FiECG!ED^j2s{`1Kk)i2tg2pe`Tnd3h8cIe6532&wzFYipga$-r49two zj2JR8S2Pj0nS&=5?o1C39SApK9E`;!2n|`F#Tg15S%8mPq~ABIR5&#Z9^3d<3>hHS zKsS^i!b~G3$S4{i)zK+ny2L=<(12zPA>SwI<*^LeHDt;02nMs5*BCp7wb)m`44o`;+H?)3I*h4H3dMWylMGKoA2lv+u zk|Ye+gFZL`E?g?^s1wI_`+fL-2~!)IV-b`Ah5aH{XeGk43fpCBdiq9&f&FLED{9`O zI`XwNEDPcH$us#=$XtrD>snBD_ z{?PJ`DMUkgU)6dQhmyn>L%x#0fji`7+L3>wE^O_R;q}#Z3O_YhJiD~)^0maR2x~6>j<7&0}aN)tb{C=5p>FkFcC20~zD{_iAa3np$*U%ndhhum)^t z<<>$z5Az7Y1YJ`a;rKK<$UJSoBfZ~RTZ*Q7q<61JyM)X6E|i<8lRS@);qoZ$sD*;l z?F4$MQdCL+EP>)@ z>H<54FQlo|>L)_vF^)e1TK%+ii0XC!vodMNA(Bv860XB+kfC@vr8vQdK!YMiQ-kgA z?)%!Fmzz&@X*}z?b5%{kO-OXC#_kkhFw2_@!}9G4c!A z)Cvxn({4xSOFYH&>zJ`fSDk{}gL3KhZO0l8lAMRf%&h(aVU1Oikbelc-KF-3N! zEZAfJi%finX_v$6;BX{h-8(4iW|qP7bUd5W%7Q5AJ*6ix7a@uhAE6`S^0=zgGX886 zC0KoFXnfZt23*#%7a&>_-wp~}5tti&*o)8byMN{3=k?c(dpO)M$=y^Hasvjn12}L8 zoS#J)^<&w-`q9$Vldw%_G_mcrzVC6K@KzjaoSRgil1!{P5fv(cIhWs)B#esj4J}g@1I{sr| zw9(dw(QKR77063hhgtgq8$X}&TErD7T})SW67wA)r#JuOo!@Elh^Y|lEq+i>5}qMSp8v3q$Z@@| zaWF0vIH)_b>@aYsha38va|iBo!Ic`UK=y%m;;r-oLVIDp+O zGX|nX7n^SJQk{dP^1NQC#@H+ODyRRQ_I9s$Am{+j8WD^M7d(lnrpc-&8Qx-;OR3)a zIjh+HfphWBL&d@I#c1r&N5oJeJ2-p9^)PDp@&pis21&({9}sCL#RvmmJF1c?CVLYr zflV~shTSwsrBzQK@#~HGDb6cMjq5=+GQ;Tcye8uzZt_$I%19?(Bw|kW2@1nc=OcTU zr0}3%4iQN{evv_evl!(dch==PSlMBTUa_#)c69pWM$YjlZxZ=-Q9Cr|wG}A_#eCiG zPC0{Ln-(r=6uKY+(BF|qh}b_kFpI@U=G-wzD{xpySc+`3!|C?+z%@$S(Noo(U#9F#Xf>U>_Y=rj`WYt(BiCmCc1Wtmf0#jQh{%YFBUldZ&wP-`it2( z!brP+eS7ftzD^_xfxE?P_PdkFx3#%&2h!Op?F)SJ2Jo-Kb=h7*gPKyWD5FlY{?eCOwrfUT1-JUCb2A z?sTFK7OA%UFIn`Nzc!ve^p96Sq|uzrm29M}1~T7kaovv2o8*a*tT5)Qn18R;@lS;{ ze5#3Ug1?_v?4=)1>=uYwHNk74lLCDPBQEze4|v(x!LJs$53liaT8zXyC_PG& zw*ECGo)ofH6_9~u-KU1_XLaSes3TqK<;yUn?6*yUiA`n!u$`|A}dbEK9`v8~Fs6l=tL zCkM92`uImkfN@yZgUp`Wm5&ox#F-w^8ardMUf4;k7E{tfNv%_v%h@ z-(BJTL=8Y)?8a}UwCSh!UiLE}L`}0TcF~IcHiuweI!Fg8_ao@rJkCgp*^z1z&vfy!m@@+FvybivdO(InqE1jyGS%Z z%^!X;#2_^r)CxeJ&TRXBTeO2_NRRnekZawx!FGEXtaMnT-7!0>9GJd|n;k2Ke}ezo zHbe?Hx(|2Moex%N4@|j@=`Ndnv`oIHmSGf+O}6X+t74Nr5d{a332AGjlugzp*)GFV z{42B0@tM)78pvMvKQe8VVfIX{r^JPA_r{ttUsc(Fsu2+xorDWnaY`*cT_X z1r-4_al9?Dr>%cAJ(25<%|ragj*v=*Y#VdFHK?Vx&SM0K*7ttCy*!{{InwrP#QcB9 zZi3wf2tF5;W7J?oE{+Z5c{9k8VZ#+gFLMZZ$g%3@&NeC9XH_0+fJ2>|+$B=4H>N%c ztgRe~f6dRH*~(jR(Ku+$vQ!3VFU{w}qf+#};)DV~*2pA<^>NBEkDrwN*kw_cTziZP zHCAeSXO{Lfvh%X|?E(TCbWOrj#@C7%Vu{%W`mV7RDHM31*=Wsqa(l-U++-Rxdsv}X+Ld=VZ36AMf=@IR++YBfHlB-j3lJI zFjRYOIL4}7XUqyEjlSa{s(+Ex2>p&Xzd-4M263D`QxqbP^VIV{4a0wbUyPM%&xH>= zzwa$>U0+v&d8{t);oxMN-COwdY57?lsLRY$7ZbT6jw2^SGBKPk=3ZDH-^1H-O1qW_ zSlr?h)WAlt9EUC5A~w&7rCfMzNE^!#cv9}v z`*W~=an@>07RrFy2uK@3;DmYjQ7enYp`-a(-w`aF47n}3L>*O40)feN(&lI~D5hV1 zGgYP|%JQv5ufT$%52`|M^9xw*8~9(!-?~v{O^RDV&(ec45z3|mSc|{#eR)Z}fT)2rH2-JA#dUR%M(kuIDM;O2j^8J!9{ ztQ=Rrgg(*ji>*eK!1LaD=VPxnSK~R1jMN|9Qq0WBte$rSR=Dz5`&Z}GPo4#I^#Vj$ zUU^7a=hZsqt)$;IS=p_eh;in64$u%3fDQ~YUz&26g>*bN6MneM zuVXKUZUTTHQARWKi{Y0{3KxY>9z|sM?LVEF#&Qs2cyG-pjJ8%_a|ieQO^@c9YU$GU zF9{#sXo8&Ka3KZlxy1ueCo3M$nxj0dR8E9V^RY zg4QiZn>|EtOlT+KITXYmIDY*$IvC%1L_|#8el!W2UpC5xc}Vlab?N}0C3i2)L+v$Z zb3hPc8!-mkI}tm=56r^DJ!?jMND5**1=re`|1y?C zM`4Q#HSAWaf9!nNCwEOmda(aBsh2+ai(4AO9i9{R^){$I47u#|;JUY848}zcy#*ST z0Q%ueXxBfe)IcdDKt38z+3N`6bp1vYQ5)2`{%p<)`eV{Defy4jrHg(`*nyBaw-KCr zt62(e0lS6XQgg?2nPy>r8pK|@m(2z3)f5IZ;*g^V{M3#Bd=2*iz>KhIm~P~%<{(9| zP9LI-4^e~|6=4ID(iEqfxas1|N&_+E_w@1`3mihB6|8P^T`XQKK-V);3a49^`H2;Q zL*mwSOY+ToquntS4W33I9vfq}52^le*=&h~hhL@+UT=vFLqTTv2(r%2y*JvobM2KG z0opRPlk^-+B=rPH+b^g2xnpZ|3z#f6**RApxf+h!a4=RMW$SynXu;^A+jo%X=wBD( zU&b8O5wFow9r2o$*Wl{hoiX8ryX*dE=XTkt74jbhEIwWBTpnf0danh-B)Y7PU16hf?+>TdD=~s8WSosY13Se#zoat~Sc17|=Km@qPXK-b>W@$yA+e$Fx%i zKE;lJ%nt8N(wy1hXGFyEP@3+0#uyi&ZXa-4KEr55%5ib971~$OG2tAN5%u=z;oXxI zYCN~bQ;c?zS@SF6CLzHVD?*hNMZTik8dxRTej$7Wp&41bM)#SFF=7R92i}cz2HLu+ z;_8qvQzizWQ`Duk)+e0C^ELK*vt*xmJ%wwWvRZc2>Gpn(1#7Pd^Kdk>SV})hAKH>U6o6qi^j|y2 zL64shI&9`Kct>!KU;3QI9n?t_E;eC^LOOy~{Gn%@Q(!6HJWeNGb$J8- z4397B394r}-gtdblalkNvU*vu&U}rx4EUOke>s5D`gq?NAI_uQe+TSjNBNKT;fA0N zrZT76@w(R&%I{)yIH9~`BM+MtK{&({8H{!Ey-=JqZViEW43vUqaTb4CV})nwIbVjz zz*C{}i!s4sWdP5qSx4`)g>-DX=MkE{`n70n*H|j3oE=l%gIppw~BU-0l;`ZcaThy?LkPMPh$eBsJ!SIZhTZY@5{fvzOUJoa| zHA|4}-eo0w3|<=Hm;LaFw&mqEzth9P@*3xtZDL;JCib=UJPuEaIks4-Up^e>0&x-|k@5Ax1hG6qHzmG(%%mNss5PFXE9N-wEXFgUXuT4`g zQX{5OP2X8EM4{6rA=}aX8j#{&LnT!q*yHV%hU&ofey zwVRIq5d?i)43HMirOB*{Y>w@yOh*Jo{hn5%Fkhk(o~w+rslh!aPX%r3kA^B;)Xv*_ z!0Q2IOP7FR`ku)DUfb1bo2zb*T|8LpK;Yu+B6*bKu8gaO$tOj#{z((|G&3$8p6*QZ zZ~-Z%2jbI*v0{-yAg4}QZ&EIs3&qfF_Uq5v@%4UF-yrtaK$iPPWVpw+(~TWnm;v(; ze2>@IH`)`A5T@Ln_1`)SC7G)){T7TQd0uQDwrALb`C4oKZTw=VG0@~cwc0r$lF9)K z&E$ireeT(h$rqQ83>24ljK$@pUFhpK+_n_lzPDE!SDT^hn@&fUETARm&1Ev@TGd3K z=h`kzH1suR#ryWVu5efx6@R$k7XTC&3MzKW{wmRSMK;wUSAD}NDq81W$FQXjX=~bQ z2-#z=HS|zvPdXP+)#2pKzLJs(l2u@Q8?z0ZOJYZTEZ!ZZ8o3=8lO zp1Wk?WJQR!2yW%E_m*elO@>9WPhR$88rl-GOJ>ebceQ(=Wo_lyAzh3uY=bMq7j7gQ zs{W86OO7WMe)>eTCAKu1N#z)+Lx;t!MB4_uFl%fPLMyp_jJ_>7GbS?%XezZRo^ZIH zDEk+3_h_{GKX+;Gh%je%( z&8b(4@rhk(Yd9_@-YYSgin-+Dx!JqiD3vrteRRuvYF)5iOp9eZYxX#3qfkM@5K z>zj?@rVB)UdrA+7$|?rn{3&#DKH@FO>}{&|UFqq^YInah&kmz(IrGQhJJfX39O*aC zHbS;=`VQaoFlu8K+V{O~`q>Z6&BUIIwpyQDG%0+r9{BQjk_GUc95;r%P+YkX%doMC{+9EImR`mPh$5B% z0N3UDUFqJraKjuQKj?nV{#OlSdzAKsLD?Q?EJYDPl^aEC@+S+4N4rI(Te|e~_wBy+ zf&;SZHJrn8V^F=W>+c7bW&+ZXgEk)4KJ^m#-hTjAXbV&XF^`EpkcvXr9%50O$qtD_ z&__aO{*pbV0dsBunr%N1ygRw@vv4E=Q|RJ{`CqL$*vZovL~y`qV517cOhS6{MMR>& z+R~YVYN-y`Xkp=_MTW@&`k-ajE^gNY(R*n&(s|SaZm*6{M5k*RL zN6EviYtNtnq|>1UQjKGre&T#l+x9fH_|hIe?cw@al7RgU^o#YF&y>zB+oHbkle1LF z@?8ZRh#tg9^|o!|5+Y$ThmVj;DO6f-@Jc-MBzOZB_DhrLBUhT1!5II<%$ zD;Mw3;@gNDh_Rxu9EKCIr&HRyJc?o%m_8p&3Y+QasKgXKdXiDQ7~Q(NJC+F|v=V16 zmBvQF`th*vU1nYxe2(bk1!0|hxOjkc+y`Mr0U}_36gSQC?+JD4X0HBmz1W2JtkE0u=d zS1sl@jfeh>Vor@(pDd6BCU#~w7gP{C)}~#?=L@-brbX`8sWm|YW8M$+REhE&zP2c0 z$9lX9AlIT=n9S+K?Qw{wo=Lt$z>UB8BY;hxl>FCvkZGVS8CgLWbitnK`0(X~iSAD; zqxmB%cn{LVXkV9hZFxKf_S5!Pl(m&d=@$J$B^tn18t_vo&<7T3eW=){{QKQc<}D*%^CAJyM?b$mt#)#7WN9~8pY8Y*^A z48=?TdASmBh906L{uo+k|c0`ZZsvg-SSrd7|TgUMug;2|0ek$U|wACvL+DhIZbkU^pkM zXb;p682F&lqZlD7{mZTZv@}YR5)3;OWvfL5{>|-SGcE@2(XZ|lLS7H&Wh_bs6x4;A zh-K4?1@Lc;JkROS1A&lb=@??^_O?)_`Ym0ZvzA$dcVwNN#j+_W#kJ#qB{bZtm2v4S zb;xOD-N^>tylOW6lI@*y)))_>CHqDNYQ5Xb)kYZ4k_r;&rnK+hc-w-r$ij zxx7W@A|ws-`AM1wowLw-zmO4>2aTih7DqhXjUI_MA8@Yx~vN#(l2PFT%0zSC{aL; z3nVISpTjw}uFc%Abn}cg+ob0Q7EUe?#@1*y$7M1nrXA1}@RArOi> z05NWQe|qGTmZlVgWmJw5iCMG~RGG#Bq2|dBfYo3NqZlW1*e`{*CoM{Vxu;hjz3;}{ zG+0Y~;USW9^H28I0k0HtPGY$B7aP55vq)rTte|?)Mngl*ALUx;fEKLzYI(g_w~tZ0 zb-KyF2f}TfgV){!z=V)*EYXr6em^i4K2Y409g7VVvOXMSr z=-qNDQ4?w5y-@+=2rmcKzM&PX+T2=M!r1+(iyR}V=vOI3zQpI{Uh1O>uysDq2mq&a z@A3|#Nk<3!ag=Ce#lfDP45O!Td9zhMu31NjoKVb2#Q#|@&RUyLL~qNq`Xw*AK-6W1 zjoCM%#Fi72w|ep#FXsDm`kU;MGGdd}#K$$ejnM2&lh`yM2$aj+_UoKL?V!dL{X7bV z`~Sz(Ff87i$JO^GmZF^u*!JXHS$cR%-At|22C{-zyPkXo5bXU1dT&nPKkA>b=pAE# z`3uldX}SBWkj(d3TS@?oPERqRUzc`9Ntp{Byykh0BC#vR&(wje-;k?eYx|I`+YNKy z896*O@FHh_vQA*YjGokMFcfhD*U>-{3Gj<9ZS^(TFoTJ7+yxzXWZ?YIvZ-Js4yA?4 zyjSe?Z2zr$iaVffIM<4*Vy1l`>9^<~{ng;77;;x_5;hs5|5mi=AKb-Rg^Z^`#Gu8M z;-j+KKqR2wwQm9)lW*Q;EUMttRXkbE2OMyq(NeByU9pS^p(S+J-2Q~T?ae1BrZ%$B zPl;(!&6H!Y*%aX`Hb0$b?kt>Rq5r_by|E(~^07D;z6xI(>4gt2o_36Z9(Z_-pB4o^ zIC+{2T*(n5-kCZ;j7iF_VSy+OlR-#{P&2N&sRUK6sCA&j6qYs2o-}O%Z=g!@kW2r zR|XUaWP(!?5wMeCBu>*?Y8#X|I;>e1r->*I@LW*%zZdxWZ0x~Ciih)At`x^(Gkf#{ z=31E->`m%zfL&9CF)JQM1K+9`767BC2HQ@#F99TmD1980Dmp)~Rzw5l&<5!;wI-3qB!*fj)YDiWZ-aDpsjOwpbp**F6Cf*L$h!&yGn*b^dX9Itk`S4FwgHOo znaKTM@nFwIjuTtgS|rWpRJi00sD=(d!nAWb+r%EqGnwou%_Y zDpk-+qGy_xTWh@m^ye*+bEFRLIgq`BXHRhOkh*SO-sF9|65Jdj_=n;BLq13em*2@Q zIUKZsO!@?;Y%!Hj_hv5-#kAw&lR zE;gi_+sA9zE@gW2=P4;jhwvitq7_^>laA76X{92Q)cv)hrJ^2%QT_+xCBK=^Pncyy zEC7QxYyL5B{vam|o#;A$f>{suLGi^~cZW`f43WW^-ou0*nZx^QdceA$_~EG!hS|G+ z!tyV`;PWhTj3a-doeLd7>YCz|soL}0Xr`|8z(c=UXS2g-$%WQ@>0E&{%X#&eqr@Em z^Ihu2EsOC@zwVo|S}8qb*E^+T5J!c1P8?7o3sZ-9;44qxm=Xr>xA-wMtTjQ_pj6{q z0#1LJr~>2nqU^(Y;wj=l1_1%wyD9?oQTT7gbU&9QR-n%MQ^XlA2qOVR4OjKU>U8SE zf>wURq(i*`b{%&?4Hrf;5Ya;?1DfC`>M_zMYbM|GW7j z+C3DL5%9kEvZp04>Jmr|?GXK^4>!-dn9_sa$qhi*bC!^-h7LGR6}aUo3w{Huezd9k zY)-|{BJcc4kYUi-XPuUut=FKbwdCCFv0B1gGWaMo3xW9YX;^&yEq>mG5wGndPVW0; zdz=ZH5z*S@A-e)S*mPugY;k+5ai%ggsU86vv1){bimSId0hzx9)C|mqFV^{!Tk#r@*Vk}yk2s{6nRf`DPQ72ak~lyk zXpPQus?nfQRjqG`{ay99wOE*hgd6wrk&9@Ttc3fh{5LB(I+Fx>61AY^1P?g4!2lCY zhmG5<{7v0i4CZ~97*i7@24b^_>BoNhSP73_+bzm!JfvU4`I8N@G@#wWWZ2AdEgv@`Z3-|rew$wZahU$E{sIP4aCe>$}nV& zs-oTIxwDWPCko!*5SQGCogRh!tSkFLv;(F@_R^j$HxPtjIF;0)Hoiwffz}m;s5)$# zP@~;_SsHc8lYh_g^MqnIlo88Re(nu|j~aSG7&X)J2?os!4E(8OKiZ|I*DyhFkJLzg zqe8@XqXR-f44s`p+x`ImDSlm^6Oq@w(~pKX$MeBIz_MO>rB(ocM&O&c7w`LxOgNz# zQ5=v3rw*A72!#k!qfr+!LETY4fAI0x2o*W?isZgCc0FGVi7~V0QpscE7imH4SUw;5N=Efn1nlU|AN9K$-8s1kJx*^XQ;lR$;g~ z-fn6-g%?fpxoc&VQ`)2f8r9TuUz>q!yAb5)(Ogp-dawW`tcykBKC0(Zl{D-ZNxXVa zXr1NelTIS)tp%<04`_x_mQDm`-ii6S`)7>6CKK)&mw?at(NOzL`5!vxx@*N!JLpc5jKElxfa$ zDG*g**?pK+3|IWlNQD66Jm9H#R?afz9cif~^AnXm-uhhSjRHpAPbnU#w%UFu;Zmb# z&b%;tE;~h@#u4x^Gun8$cAIOq66!Iosoa1 zbEyUU9VVkkHog{<(Ce!vt@x*XALpUPO>-@m;)X%-M|`R~2NecA?15O&cXT{>%J(en;_cY( zFj=;83J^J1Nn4YYpmj6(cLfckdL12VpB+howYxKqQy`!uOr3Oh{f zinD%U6ZcOiH-6#1Vvf3Sf+HC?fRZo+yEgb1jM4-ztW$u=4TOIup%%JP*L|M^%@$8+ z#ykc_5Ji>;1><)jdS$RZgySaSy*@Bj2zu!s3#|jFcpO)GuK^P2ykd*F+bNwi0Wc5| z+$)s4e4_5Ysb=h`uuC+3!;1*`6dY4IxyLYpZ*bJaFir#lTbRd8a8)<7DZi#2myB(E z3$0Xv7m9rmIySmYj2%Hl{Xkl$!VWbwC0-o2#E3}u_1U<1EQP>Oi;6izl(CJ z=A8UB`&D9%8%jL1?tWTTCZW-4K1 z;3Urm!?04Kn0C)9NiD{JBok=l@7LQ~Hu?v_UQAb39=`1*gLF`&6KDI;dbci$NS^Nr zP~1WUl6DVtXYEJ>Mp=hRKg5wdtsltTLi9OnH?2)D9hNz3uj}Ze$aHY6U`(T&_Rk*9l&=g3y4+`Wk^adq%hVSmb6$ z9_7dhG^wW<{VTJicg+&hjQpSC`!W^m2hOs_+~2ulS!hX-6G|Jy+d#ynjR%W64}#p5 zJK&>bBUg~_AR>R*Ey7lD%Qb$A2x$o-Czk26F;%pP9Y5Gjdv>^o1p)c%MPRxK)v;+G zz}nY_6c>>CE`|i#}la1S)(! zQj@~Ab%emPwX${_C-5H;;0-vbL@S;z!?w5w4!5k9izLNspW#+BsQd*x&kGyyY2|(j z!lDxAU6;OWk@lASZFRWY`?NEm*NBj%|1FLRgwGzX zlG|1-!M(kSO-bBqR=g{AgXoKwkIKuDnZhGe*n|dBamG8Rs0T`@6>S~0{LBYk7ax&} z-X+B>sG**lAr7J3N0$PBM+JXzY>)t60Vp8A1eF*0kWngGcQu`5eS7s@@3KNNC?J9` z@#W?CFdMj zx3X3#@u0#N=|?guq|24rLg%`S$GzMU4>&>{;P~T>Nc$>wrFq@rP@CNWqHOt17?MKr zqSbu^>D<^xO?tGRE&S+Kf1J63^v4*ph!nKzk@X-)a)|c;gi{tG*gjMcVwa3>Ye@5M zgltnykd8n>b#3_g2j@*8d?^j4v{i|IyiMSC@mwvAh3X}u`Z|r++Rt5JM9Q||oIJ+4 zwLG|yDaEodqr;hnVvg_uTK9;n<<#Lo#B`hR-m)mYBTdlx`X~koX*4G1HI)h;ZijHq z>r0nv_mYMVhVsUuBViKSGD7(ejTUY@nmnv~C0^W9$8hrdD6e$A+*Gi%2Vnj)PwNxU zcL^}4X&$FsiRWaf&7tSIEkTgj8lY}7A*4Y{!~V*{l#Z$_oXDVD^VNn`S;CZH7e33& zU-j&6#)1TEO^dPz84Irc2)g$V!a*Cg=br#fdj|>TwR|oG6c9Y(#;Vt&$86El|Kwmv z6e-rQaA&vc&un*`kqFMT#t;&E#j$U~y}47j;>cOgwf&kNNIK(r2@r%NG15Ufrz_j#5V&;?WZJ|9cmzhxeNV2?anFR%YPXH#(;quW1 z-V~qsVX0*{)~VtQ+ZKzH11ei(M=JWrGXnRiUk&qA0(36&9slWY6{i*Y4{*lq_E{QR z_Cm-D`R|ea?=x<+^dtQq6meUj*Yqn9L4W=Za=eu{ktHt7DbkBzcDib&LBI)wSd}w+ zPk>3iD-;1Pgp#pDEo2&L6c{UEREN5#H;)nw!zQ+g5xrZ|y@p7hY) z1unIeL&|k6Dib3^UDIal+P8r;!FaQCeu2z-alZ?&@^+)>p5U0p11eE6tIc?Q_|t+w z-M(uqHr5ceoMfU%tRPscjbK7Iz<})}%m)>l!y|+SwconKj&(5(WZhN%lMj|q7} zT<Gq}$7U6Yue!DT$?@8uBwE(_I9_K31)Up2RUPFels$6@BmMvaFM`5Q%Qs7i%YtJgJk_vbs*Bvd9EJyMaYQ zFi8gM6Y=gmp_@i)>aV|HfL2;~b1%&-6!%6A^eW=B#E=qE!1z?IURSrt!RXFT2hwWH z+Kc^NeV>qpLX+2sB{6Dz>EhHo96k|JNZVZ^FQZ4n^=%>g=e{?8^KK!fdBPy;_~l?| z#ICwSF=Z<^eUoNLoqGYpj}2&C?Yy=A^zGzIqGiiIF^BnzS8|;iyzNp3`C1=Z>Hxhf zXh^Alead+0g94uhvqIu2yXGq{fqwZFodb$=X=_))u;zQeZs=zfux|0=WWhVGp*2fV z7usB_BwTB=NP?uRM{>ArukaSs!ELA9PD5f2gi_zT`t5y%h^7s?>NiZzsugi9;TrPG zq)#K|Ao0P$bQJoi`QhBmox@AFDIcfCcsKjOGt$5|p23nrn*nddzL1>~!_4emY4n^Y zkM+`pg2bsz|Bhv_4R3Ii272v~Pg+LDoueG6mG6$o7q_sBKDP)2J3)avk2VHg zZv$SxD$WoYOJVt&Q+G2dyWh1r6+Cjf5&Tk1 z&?dK%2^y}?6K&sb8N$>QQ5Lx>kZ!z z{gio?EH_sj;JLa$qQ1Yoz3}v=W9u*FIVAeT5)CgmF`{bw(|ilC>zAJ%J>u_C2*Rkk zB_93@6dTmdXurgT($zP{^?p<#kPk;BjaxELsJ(QhG|qm7WU-o<3Ok?I{=K1r-TUG+dNGLyzZHiny~jjZiKu=3xjk24}iL3>Xbtq!WSav+JdFAesbx z0}yOn7CVaR3<+>w16_lws)n)`A@_zWdvGA9F_Q#bm@Yi-W8iMdTT!>v`-N7Aa^ zxQ4Tv?B#AkyYF=9QiG<8G1Z(j2k!y6Noh|QCAx|$LEWb*3p7`a4@un`0~l-@iuW5x zjPz!e&sbDvo^B%?s|2-8v*5VSSEr|6$sS+?0N3T&uT$NA%k33pVxNnu@ja(axDN~X zNJ#*sPt@k27IbH>>9cunXe7sQyT>;|X1_H(57wGk@;b8!RplLa)$iMk9HJ@dHk%JKtpVwp+T-vM9X>nH6kIy+q@1 zL0VA@tW}zJR)D7+Y)&f#l?(Q5n1K;?tsoE}xKl%9<_p-D(>KVwc|G3m?csmc*;CZ? zA_yS+fo=q@%i&CRUez+V6gpLq!3Z$F3;jX1C$QY_PQa1<;#x5c8mrE0uQ&cO1cWbc zdxbD3jocG{aTuR65bFdGq99qd?wp}_Zzr{BdHWy2}QNGvV&U>NTSTT^*h*7 z&67d^AmN0Y+mxVhSN^jDmvN$oro+ck&J8M*O!{yyUyu}k4GoV(Npzbm-9k!o#kP^W z?K*hZD|6nuxv{Wp-Bv&Z0~#Y@MD2~^w`+Z*KW_7_s#*EQG}E_LbICsmFTmyeLob-l zClj1XC4ngN8r-SMja&K$jem2|Itn*y*(FAfY(-a@;GOct81iu>2@W31x<@aI3UxaWYJx{*sl7KKKj>yb>L)@nE(zrqN-=<$8JBmAvmUO<$k?8qK z#~W?Bk)wPQH4-0oL(!5Nf`jJC2DNDFU29g{HR&QqLII{sw)RjjbSFCR}>vWtz6`i2Z*ob{2gS}js2^HLuxKx;Q+F76{GFIie1`Ghq0Uh2t`hg!dHTKq{deI0GL1}Sz4=6^gk7xXm zaJ48>BI8QPpF=5jbx!7aL;cwj9@3NK$v9(vlo#2g11mR_NbZ$Yq5nA$JG7q$Zo2V2 z3&e%XTwFxnE-bP*`X{=k5(|Fw-fyI%)WaKqVC*zd5i}SQJ;!rGbHbulpyk0-xKe+; zRX7%&A47)UZSZjkX?zJPFtB$1;}t<$>`4+lBS z!8FIotd>`WS@B^m^R;oXAfK*)Eo{Uhl2(BBB6xjcL@ry>j_M^!WAjoD>FOF zg?_91EhLdv;)8*&Yw*2b|5F`Y-ENY@e6yq}C2R*38iihy4cPCjq`?NLg#mmB@jk#a zGK8-kL`)l8IEJbD(Z#f-m4N|(6B@pTah|A5R@&B<tpJI&66!iXttJX=M6^S zpP|VKfte?Ld`8lUVsr~?+{?+w55}Eh(wFnzdQfF58<`^`xDQ`41L1~uT(tStA6f*d zC;6*-TX5Z`6;2@&=T!X2RS#rFr)}#wZ2j%(TGAQ=LH=g(h#@k6bCI1LjG%-B3Q&VN zNcU}2aSz|05bY62Qwdna1)decd`~UcRzmSPA;a$ym2u4j=A(c~(mnYW z;=f9WeXE|g+oGD4GF6)(Qxt{RB&J69jcWLC8RX&J6a$ZQ_G1Af#GB9LKcnp#uR16E?ZttvKDu^$`F|@H3yxh!SOSr;hTlz`oh?e zE{BJggH}brp5UvYYZa24b!mmbsvJowmK?ptX1UN{< zt(IwDgB^!Z9uSf+*AeKs@38FNxbMzMq+z`E7Mr9ld$#6XiYPIrt!T!~7d^kCSH&@^`n>Y;7O6a*S$~NNqfz>z>9`Sjfb^7jIZc zvIiCm&&^~9F~lN-00mU;0^GCnQSj26aDem9tif^HJO6q1V4_q*&RCPKdT=~(8R9`c z5CNP0yefNO&N3g@K^+^+z~`_bCIILcsdfJKn}<5T|u|SXI%j|2vfpOCteE#KLy4^x72&5(dg;+LNMg zfdHzA@8gLz*9>4u?mIR}4NlRt88lrYpo6B8z+WN%D`(JkI!WCw;Lp7;CcOZg#sEqB z7WZjLT0E}FR#0QX0zJIO(GVayL2=oUFypJtZOUUg+$IW7TUdXf%sierEuGa^s&+Ak zadBLTq4QjQ|Df8D{m$I3NKD+6@UzZK6IhJIT=@O)Mfz9FDXgvR5ts_(S9Z|^up}!e zYN=<7+rIPs(b5c))3AwqA!%j>ZURRx_nGi|al`lDU(S_Xsplyaw{Ex}*09_1w-;IV z1{eyT&|^|S&8;JxlO&}+`#?Ny5NdF%E0q{tV@lZF`K_MTlF!0XCT=}0)=Bd!D183daN(0&L zosPESs<~2FG`FyWR$N8Wb70)9+rxf_k`TH8CHl~NeeLVS3c#1ImmB<+p= zDdo}h`gKfM@eT@5cTM%_r5W>2D_8gm&3V?Spm|fJ1+I^ncA6DS%i?8l0DEKqI`kA|J8cpnJ6R*O-_BeBLa({)Ru7^coW8!H%?#(zy{#Gz9 zS@6Ez|JDq(kh*uS6lCqsuyIY*+7pxN3V-9;WzkyP*zU|K(U85sQ<)aJ3dHKt^jzk# z+~+xFyS(lP&rjhz#CfC5Qjr$7_TIXyo&J$2CrQYb4%`<2+8wb@xm~=Ti>h!K}oP z#TGaqvvxt21>eDd_g1Ik4%caqsV{CrcuxLBaCz9^=>TLw%S_S%3(thl;qh{1R5CNz z2sFDX5-C9V55-Th`A}Nd*jci(MK-Z3!RQ~r`i^VnH!|>AOS(?w0m1LEYUU^;&o>%A zn7I#G$FuotT9B|wl-tMfgkR+E4hu+BGUR~=4$O_j@gAx9bSl44+3y0`Sd->MEqz8Hbhgv7R1Sw1OHE!wzP!o2*;mB{e=kPVxWJ_;^Ln0|EQL{6HY-Wl0w8J3Ge~ zxaY-){l+4qGg`A&9IV2O>=|;R5Yc&oXZ9OdMp6ygFUOamo3d)2AvRS%yd%{@MU=6u zG}&NTgfH-NBd>XbrMcrL{9ery>AjF9-#FV^YlLy%P-q^=f=v~W`sp+kpWE+tK z+r7n3Ts36FnexI^%HFV=RuBMr&7TzZo#qT}yXa{xkS516G-uk|Z6{~49Xgyn>L>qW z>PGN=LmI9%iCcO(-p`HV4hb*K6+%|RKe^8?ws(oO{2mg^&8R)^(*dc{qCE`UC_E(d zBUT}`h>LK{T$=`v;_EG$SR?mowr%r^SfWT-P?2fa%186kpL4%}a#xT2yUbipHNVw-E&ey-#My-;37nM86TeD0_$%^#aroN^UP)W)$vdor#g(?R*8^)4G1 zcv_FpF3fvTn0xlI-*aV@A~yVt5NeSa_9XPnvT?4@e$z-1@osg;!h8s7-A2aBv5RVEsEVU@>X~eZ*duMo z<*nfc=I_Ud7y!Ts0Yw;tk*A&&b>7kIPE4G%^Zxr1Y*$KU&acI(O~R4^mYik=bRbKp z3p&twia4{XTn2A5wSp++7IeffQ46{IQLem<7>!xl10PlaD)qlqXaIn@Z6fcNsAHzM zJRk~oM}(;bd3#gRS&lV;nUVQO^WfDmA7zdnk(q;#TE|@~Pf2%BHeE>7jcBj&Di8Q2 zj|CEmox_wOwtkV&ExR%%_$%BmUSY#ge&mRWpx#Pc+1z!-e+da>K z1k+%mxfhKS64ET&$9hPS|MfpCOl1Mk(GxSVbWfm(tnBG+V5IBC+aCZm+0)$u!&&=e zHzHOyB?b8XBNdWl%2h?k!rwVyNz(^G0U)ioc&x$i0`L|Ty=IAU{ELNY*Bsk+H=NoK z5ViGKi%LMu;;rtRFp{r=Rr)=Png^!t9N$4+XK_5Ujr?!-u34#$dMjLDAc6_Ri!P)Z zXr^3gh#}HWbQR$eLKdBDebZ<<#8(By(djrjI(Dw7w7mn5#Dw-`XbzW%VpvpU{U>@R zjq4jKYjU)^xoRb&-pyzlEsEu2lm`48L<^MHL@)Jc2{tk{cH1$1*wB92I3t@={=;$d zkCJ-5Fuho`91$x!Z70uce#PzQ2-E{I|Kyj=`x}{sO;~R^M+}pQgj@Md_&G)n2GCXi zPc}quSj5E4A5zfw2^)wXEmqI6l9Bncg=aIK#Ec||M$&*iISPsbF}d8Iih7DKCW2%9 zuv91g_PEyl(o7tK&$U?+^Xp`=-G8w(jv~snEuJ7WIJU~|{G~j#s%%M5aZ|bE;F=?< z00Jx#XUm5l5=5lP+8|SJstRy4wBjC$Tz5NXVqrDy=aq>A$ewlj zHOx!c-(`FBL_3&tMz!H)ML_p+@OnE4Z;ZVhoU(B)0ri$pFZu`=nA=5<*o6=fK5bMt zRE7`%&&omnZgh%S(%U+r$x1M%=Np4_qR?*0tFBPy7`_pU8;>RCVQg(Y#rAiM9Qf?vj=rVs}1w9*AaM7gA&ox|V zm5CYs>Q*FlzF(rD)1;nb2qUYS7k8I>U;98GBEr_x0@QtI(&r3ph|`0f@x7x>JDd_F7wgO z-Soln1(h!Q{jMb%DetD}NYp18mTx6AK5JR)Bu7y0x{&6PtTh zFW{=XPBx|CLpdt_nBKsLH!%dSl>_j~gzlFP+x z2nZ=h)Yk*mGZ@qXtw+3qL@U*cD)utKTtA?n-hajf0*EpZle9?y@h3kN_vDkcvnx1p z=n{7=KJ9?x8PmDp36^VtAZQeE9|eO=>NNYJhxVW=4y2yun8iMst#+?VbAXb=@iwnt z-Ao1xGpuH{(L`6yFL$<4{ch1n+xmk&lBXbfY7WudBRq+lDDPrq4ME23UXdQd0=MEy ztW%dQ@Wdq=|EL^KiG=51SGlVri@I8LZF>9VHE!8GEyqsBk9GpXw|fEzu}ZZ+G(8iZ zOCo*FfKL(nY$QNs2==@If+9eVh9C!qCXP5{vt(!8(VwnBmtrvEXw{LfQgMDKhUJX2 zKda1jYTGm2PSEMm1Iw``1y52kN}}lvc5SG4UkZP2yZSDfw9 zu>3{)+N+~DMlVyq}Vs9;~v)s}(h@jOL1or`SGZ*9Aw0D>S zTt@)j)=7Ht&N0&!)TziTcyPW2HxoLSXpzj%w+T~{sqN#f4p4ra*d=|w(=6KR051<^ zM{`zVit5SC#1_<8nJFnq#i6pCVPa7(Ya{%p#zv4byOlDnUm7l(8%8T-cK24A3`D`X z&B-P@9g^Zr#I-f}^TfgO^@+)xQhi!6@eEJ+omd2NI3pc}aXXcM+y1k&spij>#exP~ z2mD#IRZ!butLeNN8%r#vOBVykim`L8X!JYySX5eX!Uvt!$WELCt+yh1v1#)S^Q${Q zLf?-_XY|6#zn$`&#mKSIOmyY0IY@UO2kfU@X^SIv+KABeN83LNU)!j=za#^s;#OBz z8^quIe!nI4Qy$c~N6}?{Vs;!H8y%-ZC%ObuJiNTxd9AeA{rjY5oQizCHENoa%siV) zg?2q_xi7;vbpvuGYEI~(vNaV>1L_~HhW@MTcb+QPdh-0T3{sgu8IE^+p*J}z(4uw9 z@%_63)beBd65tDEE~DT`j1=~s8M?WPMxe`@-2J}uMTYI6dn|J04S9T@fW&33B)(p0 zf5*=<130uw>L-{DVD8QA4Sc?lgWGCne&s1W5Ro60_+!$Xoz1LZdxx|~feiQ8t1O)o zk`k!tEJA0+hs=6+DM_34&V~Hd*mG$NEJlDz+}jnm)sszlV@C@?Iz-_XNy?YmZ%4oKV-|1C4%mXz+>tkO=(}2S`x) z(j)B^)~i0@M+XPcvh#|gCzj^B$r@;7-#Ctjxt=dxYF6RC%x>U3lm$D1gw+c|mLk*g z7QuY|U&UEsXPt9i+~nz5YBf5?WnZZ=a!g9KZqG}FJcxU(+#cc->J%kOkypyaN9hWR)c4tTJHtKNRmY%BI|L zahoH5nN)jtu+U?4CBJ^9uXlyb1nIpMWNEl^gc8HzD&j@A_N~^r^8YcPuUztym#r$E z7a?3Rr$5`eu0yD-yZ8jxT=#8pzAZ_TUnue6xOT|K!bIyhOc3h!kDec(vQV4aX>>M{ z$TR<(6sm_Xv6i!Is+Tn6u@tezccg#^O5d#~nClg0ZYVIU#|fp#Xy37!aP=6XRI=au zHawUFH`xPHEPoK%vigi{4q^G=>S3YwIF}ge&wL+gHMb}gJJ(hWQ4i0_2sb<5hs$?D zw5V>jj!FmQJqPGK82Y2$8?>fQLDNPK>FgV-*AEY|vBMy;YQX1imZT1j7*nkV{(H-! zj2!%)00kpl@Q&uAE(L-&c$yJ;C!#1%rlUWLVhEQ)lzjXM14RF|s9vMpJ4fa{tOO(YCS?b zsde?p%08*otsLENUeWb%NKl^8U>vXp zHNa#FAkMw%o3_mDj%}gzZ$we|ZoF>25i!ERT97|UmRr8ild9+2Bq36a!u3vGzRmqE zaxOQk`}5;*)^SzHPjfQW@8S^5Vh~ue>tFRmxdkr!)|KS&0pEwGO%L#@z%>2z)*eT&CN;v zrr^7!6S1e?$KWImodHx7A%pEbA%ol&kKY}o`vOCyBF$qEl?M+_5wMuw-k=Eg4*=j< z%NMqXxp}?a5phGWNXT>=1M>F9>(pb)rfKf@)(s%e@Oz_oR~V8P3&E>GkhM=mdyNQj zST*$`dHUtJwZ$AtrK12Y$b3Cyo-|XN`Qq{Bjhz+9?Js{G8z` z@O8@su!YvG|JM?(c@ke}Pp3DJHI_IfD;iRaTh~l_HN(Q;@Zlz>9td0mg8CoOp@^3l z^TU1tbNwxGgw_%CA;ORjg|aJ-4w!-J01du(HE59TT;yN0Nusee?vmN`tqnO&q1hV-g8hAXo8 zfOb4y1wd7cxH23Gal3AU!ua1qoJ3h=8)KeJ%%8-Io?9~!k72KYrTNDb5m;{7BgUQ3 zDS=HV++W@6eBPo0iGhf^(;NT>Qs01Q!;|##HW$KWlyq?)h78IOZvaK{QagE9XS7*m zi=YreUSJ6zx-|pXF^4!@KXe1%tXi!SX>!m*#S#cjdk$DMlf(ZoJq{gUkP@wmG=uS- zvaa`P|MKh(6Zj!i4y1mk++KTwP}^ion+Z{46s@*b36`72{6_8yH3}_$sI^<1!->L5 z=}JfxUiaI>Pgz3{tFgZ)njvlB#91gC+{LT3M}aWT4N4=LC(6&7b3bis`0UY6?^krS z^7^>_VW(!TW*`Fq$QUv*9q;^-%bJKqp!vej%v36TB~4Z%zwJ*LtZY(kSGHSQkXV|9 z(1p^FZIZ(TxqsnfyCI6^$q8U-NI+zuQIIqtVXYU%R$$i-K|2y3IH^P!WC3s?3ZlU}9{kURfcft} zDWg>zrs#Y41wY}PZ%td3t@T$TYwyXP^DMR@MWyWuK1Bvb0EnDUoVdT?!zX*v0isR! z@Y?{Pug~TNWwn6S>0)f!X3?d2mqbch9lMg}ub)=U!c$CB#9w@@a*>Ki9uj(61i#_o6>%Gz&`|ysN_9%9>rizQ|g@@Fho` z)5oR%dJD6f2D13Wjg5c+P6C_&2H_qPd@iLi(vZO;ozOs?1g=)kQSBG@3q(=+Bhv1kDOm!JWLk<9s zl=zO{$7>ngUcYb=VA0kHT82Q~=OiHqdP@j#Hh(AP@p{?RJ%}P}wWjSd!no#&?j_ ziwlTF!*2$2Kjq)VAZM2vOLu9zEaHFC0%AE9f{!Q}f|)jO6(_(WH1u1|0(Vd#j5Rq5 zQ2qlo`p&Ciy_j0d&m1@CP#Ka)!Vp&lWK!y?!6ak?rVtDnogC4PLJaGm)=6GcNd}TI zX0QkYuAG;%6J&Vf(X$aaD~iL!{TTV)iMnJP5F)C>FEbEr@R0chOFLU^wsfahgJC|} zDeeS}C4?jVkK^1foG4JCpv_04^(9d(9nX(teA3VVw%~E}g;mQca8{`Dbp)9-xm06V zu(%YNnEuG|YEt{x2nnkrJf!jNkA>&s^Bxm2ji3%UVep0D)r>~lZ@sYyye z)iTZ3+Ts3p=;xm z%SJd-*{ui9)qtSijiOWzAp+`&3;wQ|P`>m7DF@y37>Ie!K#vzfQmPm?H+gAFohLF2 z?JPTqk23RW$eqEv{Lel2fu6u^;^RrytW6qS4=<0UqOy$m*@Sl*c^)5E7A;Z%ChLs( zwMZ)S0vcl3PUxQpP%c#E1xe6iUlSqt&&+cmia;PO;^ATgn*g3rW#T#V&vW+08>^0AGD^eFK9-cU;;ni`PIej(X$9J zSyn_>1!W=w0oYY?3A1?_W7lb%B}#mDnbFb8t!K6rcX5V|f&>ASYHVdlq2TR_B#bRg zsW+cI%2NB+yL%ZQw?^~a`~O-=!1y3+;?XA7M6E!A_G^m|gidfkvkMGxKE;9r&-+2) zMukuC*X8fdo-lW9_>mCPkCi)GuoPwl5(TK-Q%n;28Vmy9wpMuf7QOi-Hj9U%tf(RF z=mUaP8IZ#d5IAfmx1TIF=K{qevZrxbDFLPh4RWsQ&N-8ow?u`^IJH#Tnou@2vCUNo zcXJu2pA_XGKqeEspC16@6Q*8Mq_dn8gg#{9SX%wb)2^fQ^ICwy`0|(yGSZHF$f3cxns8#?^|?-7hO?|aT>-dM zRPB?;2BDa;cB$0hE2TQGUq_=EgJ^qahjfDvvUsJn-;)3>JGkwYAZmk*rfKaf)dYvE{9M8r65dY4yXtsA zG8(UydBvzZhx|%O2JzSo*~v9yRZ2(g{Xw!>?6glFZdfa2mqwZh{qHIJKXEnsjh5~! z$&2W=u-w^LnD|x|ImPmOc9XCLTE~^xnwkNL-;{||HUwx11P9zeBag;pXpJrD80aJ* z)nm+o%@U^|W_Z-X5!^D7>_F^@$G|oPZSpz|m-=4t3(tjVrjxQG?w<{){cj(nfZ@}= zdRRb41dY&~z8?fACeg}vYWy()jN5sVpw}rTh814(!F^g6y`~cRweK}Ny*G+OU)9`SJH36u3f~T)cW{(UzRe1A1@t{Xgj&Pu$I}m4<|6}yv2cBHfp<9LAp~BvgA0q_OOc>nC(Mtto5RpWOzfEPy{X|sODnJG?l)Rs#kxRNyRB%9D0S=t3k$iIF3fDsEf^dKNV zXFfD}y^_*KMOu}B`OxH@*_0t3LPiNuf=VdYy-){A!6sfp?E#2_KK1JKY|YC)Xa?qc z8hUq@NMmT2Y50HIRMJKH#Qo_A#%ua^W(dvU@}%4vs|&ws&A3x#Vx$#P?lto4D@LvUwVF%?MS%SyB{9`o9J zZH$0)!w#>ur-Q$q?zUwh72fc3Q+3Eo7D9bAQ}+4xbGZVCSfD`%ON^kHsW1afHaEtn9zY( zdjHMNXTi}w>Bk$l9Ts9}>QA!{A@b!xj9Yr{ml1&8ua|dK*xc}0Sml_^cH7Sy-Vt=H zj_IUB9Juo0EC)LZH(}pP>O&zSRP3RSS%cd@@f#oYu+m3PI3UmJag7>mmWuuo&eLYE zIWxj<$UVX$;E$#(18|rs_Dume%1NRrV0UF|8zC88oV68bqOMhxUrVBO~&91sCo3;E}VZrW=gTlf=$M*gb3IZpE{7`ZbK=kCER7HdcJ zD2_-FK^V=Iu|L-IIMQDlydyHKBqJuKoiV-?WLeijVsCtPmmBx|UsOl2yYn0JzP}p^ zmifF2zuy5_EG`)1%{EYg!6eZlX9Iu(*4F@6!xY7)ShaGiG9*gqaN&1r4AELbRLkLb zerOi@N&9wI!eSaQ%-zNQU+uz*bbCQxE0RR(W zQ>>P8r!a34H&6r`B$cQ}a8GI>!$AZOjR}6SaKCvjrJcQFn6D;G46xys^6rN)qrB~V z+NO8~!bG=6D0#YOsn$Jvxb>O&jyFkDtxVJcs#Dm7*{kCs$9J9NAhgUL>D5p2G_EWZ zU_*us7%&N35WZEad759ckP9ud%yuo2QYme~+jr4gcerKz>?_e>0^=nH)Nh3nR<1yP z*o|JE{8|Mn%MQ9EaqFX%m-QMA8d4$N2%fL;b7M7L&GMrS5@VGPD~c%wsn|oO2u26rspt?H zaR9loj}2R+rZAT-y~Qh!FS4`cAgGik5ChLu5OvqC?DDQExk4s*A@Xo<-x^G#)oE2l zzZPi{U9drB4W|7uga$r-M{i*5)EZ@?IHH228S6xgm)X5LFK#+Sch#F&9rR^&Wm8u3 z0U{^%BCz0TDy#^1F%U&iBrnhEQuD`h?|A#5BiD!aX}myHSaT;^FrH5Z!r{_CBL@)W z-W{eolV&m3-WF!hOk_V6HeMKr`ED9i{2WaCyAFRMm^mqZAEzw1(N5Bl1o7qpxLRMp zX)(3qI_w=Nx=Cp8Z5U~M0SZ9PB;`c=NoNP>8$sJMbTB>p5{L04Dd*$J0p0ME z@L?RG8gj`xLs7dg8RHa3h?xtYE9E~{?*lYj{H1#%v;y^0y?mKL_;WdAt8NAMGgsDD z4qWK4qb!I97@Z{eNbFzybH%MjL>?mxN8Q9|3c~lq7GI~QH?O1neTI(GWLNbOD|u>x zsEjyuQ-jb#fX6@8Q9CL2Uuyg6Kk!xnxH<}SXc;;8Oq)=l>(&;Qk~lVRM6Q1o@>y0# z@@@%%nf@Cj4Fvw5jACBr;=_R2`1tz@np2pCD=Fa?sN)$i@b%#kU^CV1_y}qA5RpPp z>{C~;Kj?*eP+YFa(jdcwP;K93_w1BO7Vo$DlEnnD62kN8Rm8gU2FOK?MPlOaW0+`7 ztk>hMF*)C(0G66sL|VV`(aVg!ZnGVS;gvJ3dD6{O6}&>P60IE*<#T}QAXXv~gmWKO zJc&LiM6?s)!PNHi%n66$2K~Z79};z`fxhE6*a1_hC5OSJzj5s zfIr{FM3Ia9xijgQiX$_@B>a<)#v&f)>Ue*lT)|kWh>4umRA07rQIFWw>-Vt)5kiaGiZ;II4=5V3zeTYQtW;r7)5)I#R?zqyE6&&}Xe zZA8ek#S6;xgvzB; z1>Kg#Y=SNNm1Mc;J&ZorbE%eMidj-;BCIkcFVWU}7}z6X8~MEI9i&roA?M#tx-;l% z@IM2jRl5}zjkY@-A1SB&-0av(5DG6W0t~^J2_gX|3xI+kph=!^8bS|K)OhIg$2k5; zNegoZyr0CAUVCM}*24iQa!7wbLAfwdO`=yq7g#QZmj;9dO)X6(fWRdvGBDj9MTI$j zXPT0a1F=y4{_!G4AqEVlY_F$i1CUr7n+9_4th3)CG4G9`KHmzl|B-X zjRpY%5Cz*Tz4K$A_SwZmIQ<@S-{d96FW)$z@Hh81IfvKFx?_C?9gTZ{V`M-R5g^TOCAtmj3h$mQoo)C^5(EPELYdi51f|l;r|oAlpRXSuG>hc`UBpqKUxWq2K?-jGffHLP9Nm{|Cp)>? zS)u&BvFKCcC2?MRLAMC$(9e}MPebU1=?UpL&18;F=gFm0Y4~rgtqy{ieIqHbXfrgW z0F2DY3Xy|QD3BB*NKnEmCP^|d@_?`~tn;Lt)#v=AYd@M^cI}=kXr-3Zc>KD&*>PJ4 ztXZDYBG&0X)>|if%FnLKSvXT)AD<`ojPs5A^{+u_(PvCp{5zA7Z$hhZbmL$E1C*fZ z<_HyOC{7X}c&x0gLgdX4zhtFhB=FI zdQNf2WCk4uzB%zih@Keo-p(v^KxIskjNmvAsn>tzv4^_(HjPZnP9VREDifPu%?dmh zrwC=T>tdVOA;6v@9HZ@UI>875N1+p=J-XZr_}m*FzYS<01zYt-6Tk-RQv{;H0C7hK zs1iGkI{Fg|3EI;LMk1!dqY&RJ+96FD_n=82&q)$x&vJp-0xrI8wU88;5Mc>zHS^=YlNi{jH{-uPU4 zr6*@0z~IgDJn!uYkq_U08KDWCUgT$5a)w})q(;<8~64;RwnIK!81j53RZAe-i4+H={hs20z3$)vEA;tHsh+ zl7W{%)Ay+H{lH$u|1r>#}(n<;e zA{Po65yZy@tUD>_#kdET(RtjB0s{ljByvg?NjTwu~X;>C}?`Qz)nB zOKXBg!tpt6D&iA_=RHoZ@T3*vBHOzaU_EZ-<%?gfJx&cphzt}#Vv8%_CTV*%fNn2^ zgH^4w(mEf2TlOZa^_;}t=u47$QcF~nLA17dBuHU=Uyy)5ZDzV9%qgjpamDKc4=*gV zN53^99 z=)KNk`()h6%2&T{hE^k1HB+8X)KXd6SoEwB(PbP`6rMv$9^B9`WyOefD_tbh$lBp)Lf&1^;CJo2QBH6;h4cY-0kF_oDaLg ztM~QS`@d<9e`jXdd?<-u9W0lZo)J-#sa&@gFCKu}#O;QF{0#0C7r>J<;8P_n$nb5& z6N&Ef`NY3_<3q3#%?d^}CSuJY7QQQBvX)Wu02c0gf^!eU+~UEGVeq|8Imu*Lcl zT#4lY#z){$J({jUmWOO781G^zuL33WNXX>@10^%c|CdMc-GR>k*Mv z#5*AG=hlBO-oz#+{%~ZOmsR%!kHt~0GC%)Wt%u?`&-4A@S`IX;;w& zr;hm#GhaF6oJI7&*<)Sm#-6cwv0&&Rm#wMP`_(8jlDIP`Saa#`tzU1Nztq zkPJKa-Vcqpbz;_S)UqKW+ch5am!K=B-6pqoB0@uO1Q`Kgb?a7sYc{&}!bU~<3OCYC z@h6U)TjJm(kXA}l^c&76VVm|%a-0g|ouurWb9m=<#9sFXLVhsfa&=E*@3#46^F}tE zVOU^|a%DtNn8-~5>?U*X^!hlg4QtCfMg_D!D_^MfVQM|i&k|#ez%IYCXyYC(sRP1| zIsto2naH;AQ2~q!4tr&==E%en$3@#cu?tP?x7uF;)Dy7FHZGrtw8EGHaSwZ41^xu| zdQGxW)AW-(GTq~Zk=yd4##DNkE3Ih4JiP$5IaKc*G-O2uEvEC6-~uX8 ztoj7mC(Z1aJ&~k$p-6-ZO_5c zq+@&O(VkaAiMeB3c;x!we$PvLS%nW#_}wg+|8X_XB9wX2nl1UT4ddTT^_aVSrOot0 zh|B-YUI9D8`?sarX>X4(W}LpsZe8wmpRp@x=#Gcsg}nqsa^AAyxajYw#H%n1p4-5d z?}eiW%>O%Z&a+hxAI%|MZ~{CBUDZY> zW@t#S5N>UWoq4cbKI>9m{#A>m_d43cD+khZt;jy?n9-f7M>j;(F{(Kw638apO!P4g z@v}EfjXIU)R^D~Zc%|Hauon7*f5EfVADMPY)7sXZ*WVd7}_!^hdxg3ad36@oSF_^ZmRddLt+aU zjazXrlm%7tArES9_9_LS!mN^MHWx(#iZTYGp>qK!Rhp}(s9}gOkfMn~OxOhY*s79S zwHxb7v=#V$kqiMITWiy2Q;N~)Jlys?L_*3j5KP=iTkl=r201mN)1kIM3mrPU^QH(#9?LVW0 z-#taY$uqs20065MKO}#<>1|>$e7cl`d>l8b*??rg-5njdvmX52bS;@VBZ?zI10WDY zgke=tC@={GY8Xj?k~2{i^zEz5szSwLliOEK>MJ|V+I}l9O`9DWjf|nQ*3TtPkM~vl zVRu&W#h7uQiV!xk0-aR`V1fuHs;m&v^dE0rB;~~Z#P#%>U)d#C6x)DUD_)GLf_|rR z{$u({p_K>H#pP-+sXwE94ZBNITF&E9a!GIkg~x#e)aa1~1|W)RRC4~T!?Wk-50lNlF1|+$l@U(?9IE+r`lAb~7s zadRX`)Ru2xm{>3}RaXOIpvGKYwYW&V)5LsZeIVC2uU1}Qo`uqt5z)AK>Y@xHxozxyUNpcL4FrzaXc+F(jH8;zyGmN8`_RsI)bR-jZa0`je z;6wczViClH;KXuYAVS3nool{MZ(#!l;U&^zOzRmL!$2^j7A!VlOya7Qpckfe=8-UD z-MTx#lmLQZ2q)_d0BXUIpcy~rucPj+q-EVSp7f7da7nmd9q%Oy1YY`=H=a@IE@Gqh z=BD#;-3i=v6aNg#U;ZCJ0m~RjU(tWTxdK3lU?MBz%%%-l-QR7cVja}0)Svy!l988$GzQN z+chPM2@oKWB`}9PR`$XfS39K;A6o$`wP_py0g>j_n$;%$SKJfwYHdLgQ`uAwVhGHh z>`HmGeu3#RR(+HA<7F|jX%@6w+)5OP-|f?0=j10|LHa+;_hEh4?aWmga+v^g#K5V1 z#Z7sVNOtiBf4IH6Sk=InK{&1$I8k;i0qOm7N>$ zMnDOq|BwTa4C+xL7)gG)XtThRAI~4*MQqehcnfrWBM2b)1wtAXX5-VdbJX=7h7a9` zn2k7c65xdL`Ob1%XC=VQDJLYg4oykvNyQ_0t55rK`{UkWkFJJe7@1MAEYCMjX@uz& zP%6JV$9sWWam@w~6l}vg)xMb`zMv%e*;_b_91~4Vjf`-4-{;?gp8t;Sh|Z1W`1M3G z65&QA@H9Mdsa$tF0_(NyHUzPZD3E00gYs9fE(D+Dk6hT_!lAtpFh3npY&q_843rDx zwq>3SQa36cmJ4ms&(%8X&6tCKad=Hj2++Ci4>2q$&R5;nK)0j;XObZx?M} z>hk)O6AVgq4pXAX_MvaS6iCB~wB-huEDmV~sQj<*O&JxSy70=kVeR$wV5Vyl6d`ae zhsfQ@ZsGvM?I%iQC0QSISeYmr^EbY7BGatP{Ixx9jYHTLbx-w%JysAP9hcqJO6 z4V`0U`Pu!$llluULj%})s7&e7Q|MpNApJI)JgSK|Cq3A#c*LpuM61kwA97UEcHvqW zc)Cb)-vuK^dAjo8nR{i!8ppW|AMs%DH>^nDR%vnyYfR1@)LcaQxapEM>p;&Yx^1Jk zJbsl${55eYS{*+CSWC`Q{2!P^jC_d~Us#BG>8t8g>}R6rhY&Aw!ShAj_qEsgwtbBg zI-Cwf7K)cM8(w2FfiIl)a!?hhyY`V!`}@==PHcYEZ9C)8py()&SQF-+j}>-S1xFtC zt-b2iH+R=1rM}JYq1M}7ZtgJGQg`;`O3gK)T)W>sQK6_}v_;u=nZld$=fj0vc8m{! z`z(I%>`<#pnq5vT?xPvbR1RUynw1q9HT6w41XdFwxKUF*=j2Qi#nb_g{U?(1vPuJ) zvmYD>3HT$02pGI0tHVzB3jt>}3{Rw^O>vROv|P6mmsT zu|xW)z058C-P~{_*`yB+>e#huX87>_A#4f$_CT0trA#M~bL7wt8qX6R z*^%!pSiK0T=|`G6mlWyHVj9V?OiPmLdC3-K#ak9uj@v5`I=Xy_-MPfQ0>aAiW?CEq zqDQn#Ymg0Y{KsqjO5>)#Yhq%!ThXI(frwsFl*_p8Rp+Z`Jh-|&nJq>+76Om0uN03u z-b#T{X$@(bMw4MQ0OwJjCRQzxf2@3C8Z2nnO*@%T9Qy6V{q+37q48W_x=o99COBN? zVouV9?af%eidj4?3w#w~!5Uo2*!6Wobt-_bt2w&zA!HwUbmpSCAR1}tKJy+J90gyz z>>7CN*t9(=0)$B{g6Qgc8mkAJ3>qLP6thmfA_7Bn+n8>rkx$`kuRVNY6b+E~KjX|J zN1OF#;IOH49_VFoloS|T5>2-*bJZjjIoqia_`w?%OR%1oiWKkv7ji{7P>{<+KrIDD$|D%1wpeH~H;6EbxFERlDSO-`4 zJ7PT^DmtKpODJanY*nSJuk`9V0Q`D!Z~=L~xR|}#@rD|#+rMrv!8VPfR~w&!FlX5E z6>MTI;AArn?o0`$L-8;GDf061S@Us(s`QQOtQXzG`uiY98&m6$hc+MUr^nTSyMDM) zQp1<3m3~pk>JHiC_2ui8pZ8(*P9PX&^IfzHbX^7Zo3QS?oKe1ox`>{Ssa=}Q_0_;E zHXu;@b&!1%5GDrg8+bMj(5vhOZ$J(}!Z2SDGz0)ZfQG_~J@zj;hA5EyeKuzYu3!d` z4i~Y$4$utvb%zqR4%)`bU+**V*%I_?aIu~}(INZf{J3gj{9Np@y_pN!;TQ{q0YN+L zXGOCI;JYmts0o-n00Hhj-tD+Q4=fMN7(zVQUeNu)%aB(rXq$={Bmm-2vv@3j zg1;XuKV)aUUTwSvfOZ15LED=HUa)}wMAtPrUu}CCIlh7eHp#9yf%ltDj;*UZqB}q* zXyHTWYairpb>$OqaecrU1ns#4{mg_8yv}u*)kC&iKvO$98@y+rUf{qnw5zFWu4}<& zDlXvaNX2IW7#;xBy4q?x0m5b*$NRuWP-}3%pAqD)E7^p2-~jyE=h4vvjGKRe_=sA` zZ4Q9NvR6c|wrv`(PU`plHqPq2!H|HJv(=VO5NuY|3FywUoyieB00Z8fI8SVi3=9+w zzyjuH@1lXwY>-O40cZnC?ELuO?!a4BJ3tU@eMbO%13K%?yNc$82Ao2D8X%j{{7t)M z$lY9ns6VXX;8HC9Z0iKH>9gafE6g#T+<65HSU;gO5&7gy`S?V!HLV4u?7IM;1U{UM z06l=PK(Xj;SO+CWh$yJuum4c=#Ci60157Cl`{5GcL;1-M=Hg;12J{*j1HwQ7#vSX$ zEMLl4OLEDur(~$;`v@b9SRr{z4Brb07U`6I#qQ!41k}UAT$0jo7KLP?RyZ+ z8`>lSdF=>Dg8cpn?OE-qX}E=ficNrLkh`<;ZRwG?YZ8x;+7{mIyw!@d%+n|0E1I<@Pmk$q_o!|rT1DN${!@}&*rxRtn@5;l= zrTbz12mZQ^w~2?>`V{D*s23*UCE5xDLB09>7Yx>*z*W#H=&o<-(tV-MxksxnS;fc^ za^}lwq6^q*}emNkwsQy8KgbnL$U`7C z**#DrNCXT75>VgV37CBZg8O1uI|jN|`#hK+fq-|YEo+;!;)U!6Ctp*BF!9n@}zqo-xnMXcvgaL1>n&&P4I2Wrq^<01SCZEj+$zuXDX{7;)! z=XhNj`nRp2B2XzE_W#WDf12F>0s%qm2CnAH!P|?cwM7yCb07YHg#SM&ycsv&Fc$;j zsFf(+BEFK6QfOr&$^W(kn6&ut#s4q=|1#VE%jIEmF@!VZ@%^?A!Nf#l$wQs|e_a5U zmbUYJe0*d8OnA#hK#nq(G8co?hjb-nZUj`jbSebd5Zk38RV_XS*^vJkgzzC9b)hm3 zL7DG=N(l@J0403fn8gpNp*(zxO1W^Ai9A*37E~mOe0;WcB>>f0OMH9)99KdvCXeNR z0~r1b_)0m5ztZ9OMl2U)sbgb!Z2yyo$%jb>mojh509OK6f=O_VhKY*^_g{Z}27G{& zY*bVp9{{cdIpn{Z|0Oiv|IP6M1nqM+QFE!`daDkVVFYmp_pOfQxYjMWWx6}>CEZk^ z)1etT>@2kAiX}|+vxZnKI*?!L5UljJTUa#mPgklL{@haJ3J;he#5@VD-h{9pTa zxX|HPsuVgT93hE_94;LAEps*1vQgBqUA(CfMFeDVY5)#e+E93HNm!IPz>yF=7hW74 z0njS6LI=k~Wg03JqU$OxsRo#iqH1Blpd?R|pbL|yi-;i2;T>iYpC*lf=TZMe7E<}4 zH;&ETOqZSkQSHMWl?2|nG+a1fdYYfh8XmKmhAIOA+4PSsmFaM9E)|jLWEg5FnT+_P z{&&yGa1RO(Tx?s!PXM36#ozR4caDC~>D#i@-nwqyw)_9zyjr7>+7c`RYm&=e4e{+dg! zQWlQQYBv4HNF%VD3lLYQ88*1otnU>PCPaeprPHTynaI`MjCv)Ck3NeFLKts6-_^xV zs0(r7&G`F8qedQ7l@={@dF(EGg^f}ixn#JCP4yFl?~jGVPT~_sjD6lGQf?OY^95|- z;njCP?MS2J3LUJJnE}#H*#uDRh``}*ty%aX76!aYf?VExtvcR?yb*_hCEEQL{6RNW z0OLP{@bj<;OCDrZ_4~s#j1WQ%Dm+USYk;X~3{G_}Je&m$;`iV~T!1QrG%BBS2pLH@ zAM)k4OP-hKMHb%_t-aK3`{&1Ddt<=YrxA&!Jc*f+0eiu}`Nvq!^*X$6VF=a^)ONQKeXlM)V z)7qIHC<|ZLvMqRR$qKAy>{Mfk?@ zAEh$esZ%e-)MJ&6aHCop&7wA^hLY?z755H!FuM}3xtdr}e=*XH)<`LEQYN5la`~8# zE8sp!bGFAte@ieV-O98z$J#;BS7puh3W?OzSdupN$DdV4i?Y78`;)692WEEVijG-LjDTF+JOLPv-Wndjh|3>OM#{gOw( zLyv)>IJQSagGq*=L#SQbK(e4mXgkCD;gs^Xq*UBo!rOZ22Y4=tofe+mA7s|DNcBJk ze?fk%_|hSgr-p`^>X)`MA00b1zHk;gg&}UnDn9%pop3;TZ0_mJCPDhIIQ)Kf>*;S2 z5{PkkcW7D^sx5m-ZRYy1=6*qSvRZohv756py+|v!(MLEKLscYGyhq#&aeYe%X}uPU z)XX0VwS)A@azeJYW{rq2%92hDs-D;(*cVQ;IAq)s@KpDHz7=AWTNHF-f5akAuIB0o znOoJj$tqdQ4YlUUB~r}INk*{}5dzl{_Z=hjDQ2$9=(S}o-<@(9GN4@97FltWPh*5w zsBAsS;kT$C(Y~1_xRf`^_U4ZYCe|~uw6Mx&RnB*2W=^fwiCcSXoaVSUVJ8&4(yt9O4O*Q6GadFel7G^`;XY=KdNak8 z2(9BHBg4Q?ZRIJ;p?8m=j^UF2urwKi5gH<`43tL{7s-`e!O}hF!?hcbnfsBnLxY0~ zC&@!4y*tcP8AZyJsu>((iOe=>Jx#281cT&gA*804eBnOJ0N=HWw#9zTE0U7I^IgN=UKB3)XT(0tX*HzHNcBwjQ<#JVeT}Upc-c}0oCZ6QS9LRaO7VfD^B zIM1mSA0sQKNY?&eisi-_%BZ{03rd@$$1oj6*~e4>vSDT~^45d%c(!Ymh5aA=1jn-J z1Ha7Ul&MX1DUbyGq4(YB)~(%o!56isy{|_OD%zgmAJIqKP5E7aO zprb1EKg4AZ%**!iAx%od%X$yk!qx2Y#N-RPi#Qxw)uCWayj&Y2>~VJ)g&)jXhHJzH5n znLGuzbgTsEGRVT)2jH>h%6ihT{Y0s3YPv{oJyhduS~^lm`>wnq**fWMlevz zw{iAk+z10XXDA~h2SCBxA?MqzFFcZJreB!~?FFAx!Srf%(gAPbx!@q#xnT_~a zIx^$~FJ)K8(8^90oYW(1ON7NiL&M8{Gz3`Wr_G*5AoW0qNIr9p-QikSSD)*eqyCHA z-{XlzH;xAFVO{zSf-9okjIE6wj9ui%z{P;jjjr4kwAEnHH`*;)ON(JpVt_-XOfclg z)MG_UOf#{vXyvMlGPBPyt(I&a`i*PrcMK%b{Z#cuk9i- zJ>l~rEuM`2I)XSnyl*76@*=Y# z<%^aPtsg)5TjXmuU&4-v#ZJ}0qvID_;YU(y=hQTk9@MURwT5eBs5~7t$n)a1 z)fb4v`8&+4=+x^%;E9GiBqUk!jT+GEgczr=c3GHVnRwjhHqk<+s_*a%J*~WP*^uhQ7vRY2+PmV=Mk#B)rd3}~DpVpzRu64knL7<>Y zl}jSvq@|WDsbHH7|DznsN1!^)4 zs(B93wiZ8y>qrD{b!>`VH&z-Ru`Vx+ax%(#BQ?A0VHF*fx3^Q~JAxe;a}_Ew>~^l#bWYawlrPXStt`WZ5vdzXiGQe~jJ^dT z!uOoxyqGI)Z&_hgJDYv6kV}`1X6EC_ixX!U^ps_T1^3sLi9Xm7wc#Th3?|uS3NOo= z4%Lnuy-0njbbc9@h33yaN83GI=4)=*oEBv72gs zg+I`%t*$t!DPYWW*Aoa4RGVEp{~IygnC}^=?UYU(9nU7?>1LHRiVRRqmNAt1%D0~v z+Ai#4hGt5xPAG}`l?0J80T%%@(GsmmbPq`^P=8$&IExcPz&a*3!qwX(&$^{;?)X** z@yBbe!$?n$kx%a~4V`3-`i3#hMAi|gD$fxb#}yQXP5s>vL2;1}DXT~cG(c_0oFF_2 zxOCA^O0=hM0|e>ySboY?Js~{O>Me1)U$O70mN3sI;5TTXfRmFVs+H?m-?Jj+$`SZa z*KcB6ohTNTv+Dj5V3e$P1ZrXA?B3Q!(l{(5u~w2R;iqOsdm%CnTC#|sm+61U{lLs} z0!O{Oqgf|bEn3KjqRc~{gfWF@i5}xg3%52bh$GKiU71ss-A+pu7p4{+p~TU=tK!!l z^wis&5?G*Q@wXPm-~M;A%%97I;aCJCv|SJ5yzN24)V?m&cVNgSb;skPIc6F)9BU z_PdU%QE)21+t;!m92(L3{4>`>fac0i?pQU=#--g^I)vd59F)<8S{+Vsp>c)Ea##wu z@aIl8O{6o;b&}k zet@oAPcgf&RZJ3hPlU2zj*gL)4!G1|O>NhVEV5@V_;IH@**T^j)~G^wwa0^D^|dn7 zP@EOK7QE9TTEsjrc;v}~3vD*Bt+A}v;&;#yYb-G-7V|)~VJzWl*8agIa}F0}euL7j zy*;(KToz^c)YKIX^0kr7y+@mjlH~`&*f|iNb!csQ%i08npzOE(@=;3K*<=5dV+jsg zY&`&ly~JdM%NdfZq1m=0O zH;b_X+*Gs@3guORDeAlqZ|HOIC>@PR#KvnZF7oe&k&J+Ng^GA0$e6LzMjYasyaUh; z<1&)qm6luc{E>)Q3Q3ltVf9mnnx$I?4&Ev8*~`lgQLfk%V_xxNx__x0BKF6OK~iMT zU8KT!WID0Bcm(M?H?1Z&isRO(&g5K-g^L@AwgNPXgaE64&x zogFDiD}!rq9AD70e^M`<{3CF?7bzW(TFFRw4i$lKdMDA(EX}K|TexGQLsk7*v6t@K zJ)g+HEV%|q(mqCsaV?R66A%Y#GF3252A6Zc8C9ov%~LSoz_X$=de?RM-@ktXVe^`@Z`c6~Lu(LB3XcfI zui6#M4W%Z}OrqI&9#G!{Nz}L4>kbIllzvn(OU9Oa!JbeGGvpIG<^w#AsO8K z9hHnbOxi(=1G)E4eOXmQ!j}6IWvW0ygydl9*7}-XRJ2yoho*VKBXbhT>faLgQw>I6 zFK53#mtgkXaGDrJ7*1hPCrmY>jV*fUPhmVSz4INfe(~BN&V8sc-u+lu3BvpmR#m2N&c){JXk(9L!S;n|2{|7^~7M{}4S-}*ATi|~m)A?cQbU}xhL-cGCY z_BC63Cz6@#3M&XJ3t7_s$$k10bme64=80v^f#1rr0&_&phs;ybXwM z`?5LA=bmkYgNz!z14LIdm1Ssw7uk}pz3ChwcpdYP&GFvBx=dKth)O^nz{ts z=r`8~V@4AmkKj08k1*2NwU7DL!}G5}Y?|%Lv1#$H+x{+gSLQH5CDrLMYz#8vx})nRCDC+mhw))oinAyx<5?H6EaStQSjRUHIB$4-b_&>Ads( zog1+1^h7U#P0MUW`eD=(>Gbbm4ygB+1a^i2@d24mHXtYRP54O3NBpssB>%l6Skec2);-moFnO5z9(qD||)0Rs3|LCLLqG zUZ@y*xk2H;_L8nMr1m>zN`0h!HvWYj{@t5@`%5~V%owEIrBsQE!cl>G*-n&TB3e*l ziBl4a7U92R9kF~ox&w^wKMMO=>}}rJ*fJVl<88UNpm2D{%bu{T+6zX)1qiT&;HiiIR7owaXrYA@dw=9CSP_YOYe~&Y9Qu=v{Iya5 z5s$)d2TLgEz^`}&%_wJ}#rkoJYB-#i49TqRtH#+k~D0;XwLTbu88VvyZog2^ZJD$v>@}(;^SJoFDVY%oRPDN9DbK z02s#nl{io~l0SaqyuAM^A@3zs{@CE{K%r7a2V&Q(bsfpc455O@D^Bs6h@pPhb#d|x ziok)z>jn1_R_xFT{#4BvF&N_eN! z;3G0IQ}=nr6HNmo<~aqIM-jxiK;HMDMzysFp&C-dP>;VqnMgJ|0ans(Yi`|BXob;# z#BuFyz%%qGS2mY?XbVij#CDN>TETaMiml6>zhhU%8ZjgMr_ku@YNoY0-rG$@i1^t0 z0AB*Sz&VY+G>l z<}U(KecWU@tOV&h1_F9^l!T7JhSv<$J9$Pex*Zc@_G?+y1#_9LX)$@q@bSwZhjXpFspdMwG2y2 z<@tY9$N+{=pBcYK1Z&cpS&i~&_Q&4aA5r>W5-6srF&loy91UTy2WBkk);;$jN?vjz zkp^*2^r4SW2&%eRVE()$PR23c5R&v3JP*9x zAN#BTr_W6=R_zwH-;0PaW^D)ey6U*K+M|fbQZs(>t4n|4yB!vH7>PfFz0(V@MHl8= z5Fs13OUW{XpOuR&Ko9u?Y98mb*;>WmLjoY5l`M748(OKTOfn3wgm0uSap^pgE}b0F z#9ePV)W1-L7v}syTl%*fQ%6FA7!ViVGAxH~5d$`>?!dY)SR@!ZexzOC{gFBgqh~~; zx_}n0i&4p_jq)Q1Xz3w=c)ZdXv+3*KkaJk#YUoVf*;edt>N@oFX_YBzExy{IN_-5* zTCUajaal5iKYE>~(48haVB9794ag`FzDOGX~@NY*IT9xbGaU|8-eu10*B?aKe_j!|U2(I-~BM{aA};vj;=%K=SPEk z7MH|P6B$R;GV5`s#&$zi8Fmul1$C^5c8UkXm#}f*0PxYFrC&EsJex5N^4Ud=?q4i_ zX4WiiSnCJ&2BU>#lfG7SvII|gcWN3xkNkx zljEeChQ^CV^UU8WEHi;jYBjKDs%*~BSbjlt6hU z?uGDCKSQEbNhA@#R54%jr*7VvaT^W`e~6QvIJ)x@0?;d+eeCzFO(@XsBWvv3 zIw-+uUOUV^W^}I|YlqNgf#bE{Fr>W|n>s{sly7Hp)4BT|%E%*(U9FZ1e7rxUl9Cpm zeOI*1pkey`5i#tq>GZUp7(?U-+q>+;)5xNB)pA4=n@Cm>#>cGD&p5W#+CnN_t1-9 zLLqNPKE?j%Ml)gFpMeT6n{=(_5uG?h`u!z}S}}gvE++i+8U1?)kBLBOdg#!iSJl6S z2VNT=e~JjPwWQB{h2{LgdsF#^?Z1&!x9KMg$ooILQT>TrfH&O{9X)*vVmUtB-xO{? zR5e?W+c(767{>=7BEm2}&ST=?d?6u~;YEQymdNF3w}#RJcYa(%Q)$KQ=f;-U?3DzU%+zSW<@R=}xL! zA>Y%z#lv*>+agb9oe!A}$P#K<@@nIrCX@`)CzF5vC$FR@A$bz%rC_=%|1eFWhv<#jM!izqmRc0%y-nw7D?Ybz{vl4E=*bZn3$qqV4-+!mS7tPL z-r$Z$P`CzuXcwZ7N)?kIfSzlJEN4}fFZ<&*>1d28v?5rz_<~L%t@L&+x!6d43Zg!0 z%3jkBD-!7q?zO$ryK`D9TQS-(6S9Udb>$>jJH}!yRY)SMr7VkAwliJht zXFgoDNTu8sq!BX0Cr#7*F=pz4i=6Z@dexc9m>qE|k;H$X^)E7a;z&SU*{=>{umL3DPbNEAvZtG|7$jrNV7}n$ZjKuJ9 zpl*p~fOF^hI!pFLO>J;E(?Sf3_e1Yrf5gYOwY|cVhOCNPGpgKDa=o8Vz65LBvBOg3 z7ST8x0mA@$F)_uvUXNgDs#9; zAA0jw%a-zEcg-!1e31m4%5M3+d2}#HtW>eIt`nK7A>|wH%oO5{WoC#f)vwY_&!4%m z;Yi`&p2e~Pa4B-*aDCWl@(*TAyJjDZ1lq{f*!4dqN9@0KmkJoq@?EhNS94S|5T!6a z`TzH%U+tdb+}lZZ7izBG%8(ZG7~l0=2M9zumFNo~leW7LqDgQtz}QH0Z6rkOGmLb0yXbRqYu{ z*6@fG%yi~+XY`fG?!{z+D+CaZhH5AFFJILo{LKD8oD|^;qe>AWerU)c8N|A!MOkUX z%JC?{aYCV`o1!s*a;A57&Kts@YTT7TDkB?p2;g1|d?m>G{Bq{hkUv;%rl7IOq0H^_ zimO)wzbfCqM8{={Gn43>gQiCo@cD%lEsN&+fPL~ng*C!L#rtXpeAUdV+i(A`Qg_A1 zwVnB8R)fpt46bCgyX^ZaU+}O9R8iRovFA#|cXqFHSedqP4=r>%&y@vcYRQi5(WB~c zTadcgtVsl`IzT_!rY3rQ#0eo*LlxgNgrs$seB zn~C;Q{BJ;Fs{=yluz5gaQ1Sh0%>HioL3S?zo;I7$p2&nwt2x`~uB_!Y`wa zwPS2vI2oZ+=WWG|MOdGBt75V~|GOvi{GC=92!A8CBne?ne)VGb7y1|{StEl_GXKo@ zD$Nc-8MLMUK8690Lda&Z+M>4CKi5Gx>RzhH`IW~A4=&kbplct<^rv7<564_c5~~_G7LT~stU3OaE8S9m zP3I_j@FOjdOJ~*}Fkln@O_UU$)q^1&AyxuBf`|#7y9d=5+bi7o7!go0ehaeebUBg_ z<3YI-_PTpieHC7p9cb?Rc=Sg97C+*TqC+gLWF!`C`8KuBwE0l|v`0}V7!^=gGISTjG$xJj zm+p^b|J$!U9bI0rgMT6^@t=2`XGX~ylx9ZmQSK8rle*QIL%JfSM#osr` z&@fieTQKWI|9uXYAZaz`4y-Xa6kKNH$TeMo+Eu9>f-?@t=D_fwrjBUwj}ftRq~zH& zZEJ3L4&_G(9Z_;y>bz?a+) zqG~(^ld>qM(CR(oWkKhcx&=uc4ZDw$JBN=mdY@!a@8)mDQ70#-hr^LgNq7O12k|sW zsu}RZe|4EUb z*H12dJB@3x#%RhV>idU|gtPwDWBQ$(4G~%(V@#{2%FvxFQB%#JqS3=KSVmCIXN2>G zE09P`Qllc4Nsw?^TVo6};n`A|Nl9qnh|fplmLMQTAV|iF%cF8dP@|&qX#Tgj=@bG9 zL?orq5-Qvfj98=`)w&1LIHqQ*ZzY~dX*H!x-|!gczj@^W&m67S+8oQ+7gq{`wV}Jy zqS@IiVTIh9yfmr73p2~doGTk%c2W0o7dY#( z#2}D%#iGt;-K9V8N-&!z);|vx%V_T3DEL#S6;b%5ii#pnKOY)}epJg^2NYAUNNq=r zfOI@2BRk|Dwf6_b;8_{GlI>x^<*KA@2ul#KT;Pny z#z*BHGhJ7U2+{&nPd!U?f|{1dU~;#(3_t6Oul@1HF6x3dv*|6g{dks8m2D!knG@@Q7&TkKy8-neOx@e{VTP?JBUx z(L+pFq?d%$>xhi5hZyA@DVs;Sd$i{t@;ZiH7|DJs@JL(Q!^w9ZZYrvyD{!>1=|Xf< zt~oP*f1BB2imYVfyDHa& z^^Ia-&~)URh@v6Sb8o}EOJP-~qt2ME5egRx*ImRF|2#?4FF_xxH9>ph@VJxZG1uh_;vLaw z7ULFA<|dMH3PV~YPWD*IKX5CVi?2>hs8>@p1jy~Z`93*R-(2h3{chyV#0kS=l-dzt zsfM$*&e|jVOyqBR9LkD)HjXbAs#TXmebdFV+Ml5y`7o4}t(j4{8V*SEb?fk!I$%TS zp0R#jK)jR)LFcO7nEsv=r0`iw8oQ#Es8RwzwFtiz8XwOv?;h&+#hwa&523mH)bTS{ zh~>x4;CC~yR}|LW=KMF&KVB0}#biaBW8 zpR=*8qitN(d5jbfULdDO8vDbNr>At9LmiV30{o zEU;YrC02i$TgVR*ln1 zPwC_H4|ebBmAu$j^555a9TdM1Yhod2)-qdQNbu<37oHb^qz}KsX=vv|t#S6S1VBqH z$W=cm4LLVvUH9g!>lu4cSoTAVzBYC=U%eO8WB6kKU690M`aTrAGQhDPeP9y`9^b={ zTbf9zf(x=qjk?uTW$kKP(%KayhF8hX4m7sTF$B8 zCcvewS|&azbq@fED@ilog$6&V+)YZSssD8f176AXL*%bjln$9lR|nTbtW$4M5&med zO51nwhLLGLAtO1uMz!!GvWsPOO`0P*Z-PN4M1w=k=);y z^5Vvs#_Hyq!mnR1!;sQgWF2>Nyk{1{(je`i&|!iEw>W#lquR+25Ns!JVtNZ&OyTmlD>ZmN8fzYsG|L-ydXbZTWGM^@+_T& z>j(({4eAC2DJkVI(NzA$Y1B@8vx&&W?9!S3I`*YlLFyXVmJjVLXcok^4lD?#hg;L( zLQmr*g#QE~vnJvcmMO|(JTJ0yZ;M-_z5HWVmGw&iFQqrQo100wY|WSLZ6ck9cH=+H zD!p~w2fG%oa)}6a9DRwFn0f*a_$Y#|zi6_Wj>Kqbo+wTEB^0$}cnO9hA(F8kgvq2b z%fpg3^qhd+0Bv!|`WF$m8w|tX63d-o%E`sZ^vTf5ENoK+2%#a_3LY5WqL@H8p^Sb3 zMI$;6-PJ;Jf`-yElD0>?oxr|wzw}ZL?gx&XX+QnA^WYJYXS_*{(XcF8sT>&(dupS% z`3eJxH|LyqZo&}z7`tQ-zk@DK^CURwXj?85)gwD*Y6ou2%>lq+?1?`XR(nI*cBGz= z@q)nfTLH@Zvcw--Dz(b>AtC~lE^4mR9?x|aPm%fHbe%Gp9hz$29`YxR*G_s|exOAC z)^kJl6}TJqAv%YpmSQ}WO~u%I#b9T_C?Um-L1IpH5+45HR_!~^GCa;#ADW1Y(WTQU zTXuEm}w9YRv>2HU5az?Z3 z#Tn}2Jn95SUv)ppEG|soA?59N8c`bboa@H_=UVcOM2(@}Y@bh1M(d5t31?bIgZOUz zN@67p*7UiS0BU_}3;YkL+qaYv$$C0g#TNxPN8^tb>4j+V<3jcpUf!2|vzxLOL`%mJ zk;~*cv@D!A17%ryho+?`t;h zTWRj1g0aiza~qjc@5CsrS*UbZ{|7BV(!Xtb2ewoBPGyck8OfhOA`!2orSb~-5f)4x zYRY7qWP?obUc+%Pk-wmJ(;-A5(`@y^v=1>gvx_cbEEGF67FCjzYP!I=XD@4#!wU>2 z;(snsuc{wzd<-`pj`XPo49M%R@STjYOVuGtce*YzdX|-m%L3MC?WD2GXn;m<5cu%A z?efAcH5N!n;wwOK>LK>oYmYp_m~+Ucd|YD%RhA19a-m$r5Wj4`sH(Ia!42C6XMsup zFlEP(%lEOvKF#;bt$y3RB&{#vB$fp>Ti>x816;{0aZ?scxMXZtt9-GfT0gyeRKOj1 zuq#R3mqhZrOJU19&$}Dm0<2m2MBO+5nrUuYW&Fs_8DG%Mx0ctTW7SgSdN(E^F(_p@ zxf$}-CtN7x6wb--EXA}K3t>L}!P7Ae(~rtD4ftr(9C($@a9Bz8{*DbVDpnKaR;+7v zb(>tRucl8*Vn6_>K=(tn`GjsW!GZ<`EB!Oyq<{{h%T~Cko^jRlna)C^r2|o9JCXv> z`k&Jk$J(OGpIE|Kxt;xT{(P#AD`KS;^%1a1*$=NyFi52W4Pn)8TE?v$#CffYYwN0ad`G{ zrWOtXg9iEut8sL^qrDaYG>?@2;bF#}dIoKx*Kj@`GpBf(A%&PBr!pB>4rT*`kl108 zw`mi%1Su+It~A)u%sZF9)zrM#35{BVLdaT)vxKji&u;X9BA$?g!w1xt*U~O}wo2n0$T1}^8yBY^@v7#x~#RwqU z9;J))hP&_>5(w97tH581mekieHiW=|pKg`+fpbMNRrkSpd%l^3 zj`|I6L^y<6PcnjW zeIb@*pS4uNLmW@wZI6+-&vzL5c(5bBa2U2w&pFei+|KQX;lCs89jAz%l$Y~KMTm9@?jHm@=T&`)R)9>-&<_bhW!i}4qh+KJh&(|nA?AET6r=rNO6q2 z66sn+1A~ERI0<*CzR5L?=5$0sf%jvQ%P%{RgxD_lTxiAZSDxYpzz(L`)yC6DF8HF2 z(y>tvJ1bS6qmw-C0|w%Kh6h2%1v(EGdm7Yp{vY{TPBG^5*x1O<$hY&n<1 zKTQeIH``tKm#wvCV6}h|)_do$b^IeLO%LA;bIQtc%jb&I{-+)c7@WU{tU%y<*?0Au zcPsM=THe%0Mb?4R^4|My5vCL&4{(M948(jH0R~q=Xf%XAAEh@HGtfQ7oaw;%@*Jy! zyxgsimVv?{TYSYuH81|B;EJ9gjLkq+T@hjfhKv`+zWY(E$X^4IhjhdUM3z&zq)a77MY2#yCk&mf7)okB%q;TIw$}}7FQ53cKf~E8|suYwyDLLEmvw@lSEl;$!X5(YbJ}~ zqzBv_K8za9xA^;p(H?0ZZO`;cdv3)B8Sogd#m$)iaM@-fslg{#&wAS|9t~!WYHuz* ztJ}uP(MNW-T{tOzk=MimWws55pucRrP})tQ}B z)B&Ds+`1R7`Kk4R;{h?+eGy|!`ZD2(>UdecOEI^y1P82}3}pY=HlKLaS`;o{NMGb? zP({H-$eNg*si+ z$At6<-Kppsj-E}48hy9{Y?z#Et_WC`@eTQSLVz$N`?&l;2dzH64BPDbVEF2Ps%PRY z%~HDu25HEBtZn>Vmmddk$!m+RFY`$-L8fK{#9W-%{d;()o4024ru2G&25iPN;JIR| z6oLkUf%tJFrc71kjK&RKT2UBacRrLeJN;j#$SfYlFY2l=NO{5T8<~M|Mk{C_7Q()9 z>k(fAwiy6)4Jwo*g73u^w4n?g8_n(f-{uV)P5AxN0|1&w`gq%I;db2{iK!3c2oK+< z*Z-t?8n&KG#f!gDRAZEyNo|aEx|RB_#tc`qsNFvRgRk-T8g$%!R9TeZnF6WTB29V$ zT76I@x~XttK3ON^?A0dfqdH_MrUHhd5Hp4V69TG?ieS432@#{ZP1g7NTTY74YN^Z0 z&wcK-%+H&@9|>HrC;q~wS<{%aa4r~2aWWkT`;z>w3PqB^;Zc-!?zD1PLO+`y*%QPs z=4QuU(7_;F>>Z)sISQ)YIh>1;Z-H9#I8}fA+-5H9B)#`bj)r_W-u?>~uq_X8ACRv{ ztfmzqXOmkI$P5k!T55&zR8vLM+Xd12EW*tkGy_eLVPgG+w1CjU;9Ya_^=SIlwb#vV z^E?g(WNt2*gV|f=2?}Voc`bvZY>fmJxsnB0*Ps@m=fqjoVl7&h3-sYOXZLYL8L&`# z0yKA-+}US034|hCga87lCV+qd1!?DPcBxpPG4$@*f48|;>r#Z(|EU@_(^K=E;majRR>%(^v$*U3--B5jnXYX$dF^9V@sdJNK_rG9D23G^4CZoNmo#!8RZ zHi}=`Z;pJ$sn^-GMbC`Ht%4M&+7vf%$LbiqrC&%G#PsEL=JTK#1(*siZwd=>a&U6( zGQx*ieshak6XYtYq-LS=W`aHv1Xu%DNo)9A*dU_L5^ufZ9A2G5 ztwI`ng{!+!=>Gf9r8)Sp`}2OuUB+`mKqes&0Hs|Kpfb|wLAW!xK;2jGkL!LCx+_a(E-#tT$qG_Gt~HYisK9{ z4A_Ghy$)0U!`~^nEJn$etAlru?kw={#im|<6i0spas&m7-1Z-CIXLWMu#8X8fJ6sT zsnaTmu2$GY*Bq0kd+4M(xgkoV%MV&_uPvBXR#~$zMU6aeLl@WNFtSv7iWAc4eq111 zO$IkO+iO9(JOjGy;}FmoBL{H^4(Tm|R5Y2GYvH{HJi}xyRn`35U-`Z}d_7{!#6<3_Agbo z{yC0tkJ0G#`AcEtRPldxkQhfHX zj8@-Yl3&+}Cd+m2;qd78#Dhm+_%`8Um>{y&=sBlhf4C~#Lz!EMDBElpHIa()ez6ul zd4tO5A=?QfO`zV)?uFfR?Qa{TXV6NMxnF>-{;W-Swf6Q`=j3?%ZEpSE-Am1{{^hX7QWGk##Cp8}oOS?L5-v;@?Hq5PTJa6)KxjLU**-=mwFn=HJ#pef5sa*A02k*Cuuy^d!bP*g1oD&aQ zx|bZYZ|uAUiYG|k4~_QqbzG)3$kRGZvb%FJ(JAgLpvQAEOmVyxp}VwSUku-9ww%Gv zF$n?!Z3qC+4j)LSYs6fq1j2lA7)qGexY8d;;D4~LJ<+k(uT3ftBuJ1PFvc1y9PyVK zky;(LA@=PX7HknTgj>Dyx0zc_Z?9LR{X%_XYt5Sv-TtHglC-kZ!GIZN1|HBk-O%HYx-6ik%z z6b5Zme=uXZ=TGhpN636Xi3k_^g3^~9@m0xedA}Z1A<%$KI+EJw6OSW^`}s>vgMCkI zoCmt~)2;ZuyzLc6lQ2w#hG9dPn}Mzh@?EyiM)s@jjyToc1vmTCmDvtnBtsG!jI}8* zi*3p{se2Ib?*mmVpYOKjEn)}g-4(Z+0(pSV;)BRJ2Ti0U3(6z7y@283PunOIc59LA z<))<`E`xQMBT@d&s8tdh_*Y*&w`l?)4nSBT;#EK*N2Kij*{B(}Ia~jTGK{;<^%IVL z21_aVg7SKpL+Pcou1f|&mxKBG>Dicn@{NDUSv$G&Z(t`p{ySf~Yf^0$ z!?URPw!XHkjK-4p>gD>rWj_&t?_FG&ygGgRtQ>BQBa+vMpzH|Yqky9i5|0gTM&iid z=uj&TRJ>)L_SyEVdDrsJk;#Sl1Aml_QJRUdi>Xx0P;sR^9GU}@(c2MdWp+hGrWwXX zsrWsCV`y525kWaz-GoEz@*Y8+jG|oNOv)Kpuw(j$7&h|Pd=V4kaemk{mr3RR-;3ma;>nUQVvV9AMFU?5n^Wlv`Uk4%0Zd zi=)oNqOrI%%6qk~R#|0&)}33Ipkd5vn^UWBj_nm!<%JQxN>d{xVa;1^wyzkVFN4$9!!=WqrLmM3GS^O)+$FZHu_5sLf=uau^lz0A!MW)~GMos7_2So`e<1lkAduM~^pc+)1Nf*% zU5spuDI?s2bnUevbwOBqL9RSnDH=O@hxo&W9Dvx6BnXugfXP*aAs#kDPDVS>n9EBL z!WMxyOC;RiL)XqNB0U*F?*72}(u=SFsXy9_=x<&kUy+`gD~7X4(v5eK(D^q_oe|cJ zfrk{Uo%p0h?Xj7E_A9~cGm*?oGPf6=(1#N_uah=>(M!%#$x0J*ma^N&UBnl}v)^G53IP9U0WBJ)YL5`T;`nU3MG& zbGEd>>=+%bj+6I|P7E48# zeO(_2KhM(skdHTuCH_-Q)vsM|?q3vRmNfduMbY=Nh(E3ONc7Po z8$y9!D?YNtcgCIo))Q%E-bH4~bDGjgI<`($fG3Cv)0_=u@4ciY=K*rLeZAu-0>a^! zGSbzlPB-6p6rLHDp>>Yllgh}s=xjPEY7k9N#xF~{rqvVR^hrKy0hTvdy14yGCGw#G zb{P|>#9-3+b!cpIUZ+e~M>eB^?HS4zw1x}a97zNhGX$NVm z7)y5w!QR*pmp_1qF+(0ey16R8SDcDNH-OkX#;DiZ2l{7O7Hq`7VX*Hv8e2w3McteAN#G7@LpwZ^IVM^sM~IcHp{W;fvwB|uC?EjQZiS#u z*-aqQ!rNZVL*Odwnu=llR_LBLZ;E@<43Ab|#H@a`kzUsYrPud274vd&pF~`J&Y8?E zoYvnO)(?@HT(oWM0C|8j~w`?X#6iwIdVFd)9p>@)T7(paDR@Xz$^`|C=Ov zyh73G+}+#3KOkiFurVL1=_=)&K$tS?tA?~`WgGzqrM_tEwjs?h#y|GNyk9_dbYEz$ zGpvIX`35u(dgE{5P*O6O8$^8l_Bn)cbWbK+04QV`TyIp%V#Ek;^Mb#K`qY^D@ZN=R zbv^qxDt(#V=TcomkAy^C;Vx@ms$Z{o@BWTQ%^XEv59K{kwK5GVqWe(m`23|N*edg5 z&Mj3+gCB3L8H_m88yAmX>~E;}jT$9XW>b=5y$XhwqpZAuqeB^Cp9(P$?i(iQGyOYm zGCd9Wdu7G>qsYe^-seaEjI-t()6LFsY#wSlCE^tO2JdI8=5-@x##czdd5B6ibfCQW z`F9q4cG^b{Q(^PL(d5jj!}iK}yw*0;tB9d4PuX=*pz-}K@+y_v(>x*hWjcLmNjYtcF|`9&Hm9UmGOMPVwmI)+Iw<;>axE-A;h7(L z2!xYfO07%(U1xQ~<2U|l-ObATv|u1tU8Si!jUHrqOmj@05|4?1rfOl2> zkm8Pmk?U2bzTZ`fUX+0NhYeDyTK4jYEc5XDt024LX%0&>Pnj%9OND8DA><0i&QtPlXe z?v9WBiHyGYk6(&-yvxToOi~8;TrWciFfLBORcYGIN+g?3V8+96IGT9{cyLSwGA3(nwERUKU0;uq7>~)Tf^SC`noqauK`+{ zKQ2OL?ZGP$ANGpKiC#Jzlx(31W9_*DWNsosfE&T2>fI~ZOp?0i3!XUUG{I)IxkgQv zLN1Y3!=fYO@Fc$hqWI}FRU?#y!noofi9L160uUgFXBXZ*Tj)8O13OrHl)d|=)%SxJ zwQ6sc_Z>%Wu=Jj+XPP`CBmaIh0KRs<1lMFj=h}x57Hj#Q*A0f}l5OvDs=C?4ns#SW za5P@8?Yl*+xd8`4#|Bl~ELsy=p0yGjS%VU2kX?QC@jvxP-EiZk>Xb{<+GRj^a=S#T zOpom0Y`Z4wt%Bn9@@3R~k5fUNNi5y9+6tzGGxh7L5TfF>&+F;3qThHs6K-dhd^S!u zYD_ZJ%@a9$Sf$Wl>2Mo9m^ys_7G9lvP8sGl{_Ri!a3JtV;*u6KycRRv(y&b)cqWcP zHq!vB)nUG!7-wW%tJ~)n7N^~_)E=qs4*&I3iq&c7KV=KKuk1U6fdi2$X{&8Gg7PLa zX@~VF$=7xY+_yajeT5_egC-q}Zl)E{?64aWYF;VN4gVXk_tjuRwLp~C8wnjfX28H` z9_J^2aL44-53Gl|RtoBeQTTbCC2; z2-CLnbldzZeLGW4EKBBDk(W9R0jFR7mz=wuhM#u}Yo^zL?w+rgBUo%@CgA z1rdOnxiF(`5ql?Y5E%6XgLh~@IS?FPPMGO%9tPIkl_-rN@A&3I8ssx7DX$p$?Feqf z%4D40eesFV-AXBZ{xrQS&P2wO!Do`gR>H)e&g%S90*YttHBUvJLQWCe%ESZ5Y_7_6 zgY9;5$eTGn!oVYSqs+9bxtO|q+t&q-cgKXV1G^-#xy~^<)hf#H=k)q+)N## z5IUrQFkry8`81_NN_w*n5**kLM$U^yWe)a)&5X zM|71HFys?Jpbufi-eiGVPDZ(^-Otzcl=u#!2MHk+I42%;`7Edqy0x^kRd{iiGWD_IiE%!m-J;M3#7Y{GP5$_V^D^V zu5&;H8J#JF5t)RJuV{F{EtND6jr@;hPWusT=GSD^NjlgF*_+x7T%1%1$zOg;ncUW=7ZQzFYj&Fj38Zov_PAPfV| zbbX2m@U2;PZhjaG)uob#xv|XAQ%qF?MwoyXGcn5t4rTdX0bq+^`DO7eAE3J4ty{h+ za_2dF#eiJ>i+W6Vr64s9%9X!gQLERm>r$A+B(^%o3g_RdzA=Fa^N>Kq`^L3U2v&{o z>Y9c$jinmD>bdk8PEh#%+pKLyzH`Yz8V0s$OK#VspOv+T+t|=OS9w=$8|2I!?meYY zFafC!D&%!(M1Qi+Z8pKzA2~gOBFRNgyDEkEXSUltj=IQlxE^Rt)$SJ`$ki=Wmr^d? zHq2k|LEtzUUzY0izBGvMHD!r#j5%tlqyjA6o|eAGwla2JV1xX5hXYB1!}d8e>8QLO zs*Moi1keZVdM>-8xlOaxZxYnMYnmEJdvF77BvK?U(PrkOP+wlEn6QG$yV)11ywDYfL<$T>3-dUZf_84MyLqq-Ccl z+lV*-D1^ore&g=hV-z*vi|XCe_^thV?*!GzrT?m;U2G%D*H^@1I+j6Qs0s|ctQ)#g z?|Tp`5FiN)?dtwFuLa%=9zec`*Y13lkkpd}2b?HoGpDekt>fa40&)r|`WavNqtVfN z`C(jkf=2y^WOZ+z3JQBlZuf=h#76r{8BrYwBa%XdbLXn?4+v$a3_yDPqwK z$Eti&9mmMnrP?IXXBW(NwGn^tufvbF?`?Qy{41UsyM^^Yf_3cMm^YGf3xcv9^ur^# znA!TUj#xW{!uJ1O5*JL>YIl0bnkHhk!jWsw{n=RY8EM#Uo;&kFg9`$3(18#aVb}r< zVq8Jy#0T57c=YQ65d47pf=%&9$)z9{dmS&7WV~wSKqX{bD3$Rb1?ME#o)8*%_42oq z*F)}gSW=1JVaTqfgZyr8&1qyW0Z1{qoFBdRiYH*|vpD&SiQV=35FrfE0Q)8?dp7X$ z_X%0gvObQVvgIL+()edf%MHb7IY-A9-KQPSX@aIbn~O&3sij2MhU~<=h7JV~{C#e1 z zJrjzJJe`y(AVp9>+{+UpXnz`UhvpuM)|2#4>9`#bw>}iB!6i;HoHQo8A?DO&SaT!p zn|ckK;ltnr2B3jLn1_iXl>Qr97<4$pjb>YG6S(1@{M&9SGz@emsrqaI-LLq8wxC6} zip^Ctt;vw<;T78e>nqpwk$Eya87g#AP$H~k8KB#-F zPq#|1MASn>jIfeJT7F}A&n!r1_Ht?xmGp+CW=@*QOT+?sx4?fZb3(;m9B2$AI$ei- zib#%kq@URVK7b%I${`&w^d0CO*Mo3>+k{9xg)l3oviHNzoAd7HGCW|Vl>G*i`-;=; z1Tx~|D+ZhyJz|aZu(pnO4;hIbPLJvUxj5i>v}`q#p;1*{-xtCXlC^vU9T7hjf;%hR zk7Tvj)1CLH3H`w_X3;&yFAYXnwP4W(PSE@3*eRfKZ^odzVQx&>!e_mi&3eNc zjEO1Ujlr%45FEkwsJ1nFLkr>3aL~h%T&IaSBU+$%5L>qTrtT({M-p@=Y57@h>R`8X zoixt#?O#`_ZZ|n^?(E~g%x5Br1I~K#eePoYQ*E&TX)WhH2Doj-v>bYcbLyek?vO)f zhcO6Coc=XaC*9vfjBa_?)&~hyYQEg!pu$O^61i9^u;o26|9}IvrAaI^Lh}s+TsOGu zp%zH=sK1@(>RFe+-cv_-pO|G|1v8CI}VN3J=hh)5I*g!xC zLzK?<2>VcDKV&#NnlPUY3bNLx^u^h9{U6ZU>7BersM$?FyQjIGdZ}Ep6QvThN=#Gj z5&m>?J#EuBcFd=Js}Tg44^ofT-qjS34O@_!v0J1wfxpQ*;E_`878S2{!yV(v-1UmQ>MDrzLQ(=dR*6QhrxR6C&NULWlg_SeOY%vxa z-Xe3B5OglzVgp3MPSEtCp>&zl2TpTs{~~ai8oX5ay@_V3yZVO`Ysr@z8l+zNtlGgC zo+lCVw7j~>H)mJxz2c>g?6Qawz>&eWCC&JV_)H?y3-EeZWp>FZTiK&ZEmJ^=z zIBrd!M$i}v<9Ft)>u)Y#DKE35UK)C*-0~I5Rb0?!#???WQ89m1$|%#`O)~i@-hn96 z7v}pc;`tR$#%@^W8{D0AK(8z;DS!ueUXevxIL%NW?OoLMGH!BArYE!c^misTA_yO5 z3cL`sOiP*kYS<(Xzs#XGVWGQJza+uygt^ulrz?0;RWGF$y|KeY1Hah>k@W$1Ib3uD zqRqV7CTGNG4#6kELMe#ovisb)f@wGHT<7ZhS;}87P?{~lCsORvq5P|j==XPEdHzx^ zAYljsRsjN?jgzRaAYa0yfl(Xkoap;m%;xxO&SINb0I= zd|>MjrOXqpaK4fT&q!R*GN0e12hmjH|(%V0S)* z`upf$m;*_LGFOZ~d!w64^FADP-DcMkS}J9OZqnz2mDFe(8M!;hS`Kejt#ay7zfne# zUCLs4VIIh9q<_B5N>Q zNr4l1_0+IO`u#cR{zjcPSfTaC+Q(}-AF=WSN!%E0C4cNDWDH^OxQ*l)p}`9PCw zljqH^z|PXl$|XNCTHbkq$$}1M&~fWnDm(SAyuD9Jo+}NcfI-7ShYrGdkoEP15HRCf zIMQpwvRbuefee0SD{dZaBFh;{pWmaV_*leMHlu3mGHZHwXZFZio>FhAwP`~KR%5b= zv9aBJ*Hq<=YRfOQgc+!6qsu55-I~>iu%c^dw4MRhAV5XsU^jCCi_h43(}Q}cpf%6d zN)14ujfpa@<|e!rMgeV|GQe=pS3Dr=JH8P*E%cuylif;2vyPTve?ZeS3(-;C1`gFU z1@nuk`78@QQB!c)XwDqWE3Oi|B~PT&L(sLIFNqqf>iB*3EZqQ8dY2EHo|t0nYf`qL zTwQ}J`OLO#914+>VxAj4F&s7RPoj=}E7xXhwgG3K%vteP+K1h2WNEZLzYm-dW2WZH zPONDiXwRmALcg|m{j`+UR+BhbNm#J7oG2!DT4y$$RL9jA^vL4^Ys*mjRmyj`MOj!^ zNg(&XG*lXhRPyg-pE49&Q?vdLD_*ueQpWm%jvYgH6RG|{pQ!V*P1S^XnI;AVsl!M2 zDsbcR5He|7fevqLMxzjaKA9NOGYWnb<77{6c-k0pUr-3lRjcQyM}XLm#!Hi1WI*H7 z#EeNd{oX?uf4}&u+$03^d3F(bIJQr>FF_%|5A-%%w7!}ebB0ZG7ID(AB_PAmNew)A zUtiBG`04wEu*=Zm@vih=gxJSvZ}jfyW+$nmc~@mPdH-YefJ)37VgAP;WLL*&!)}Pd z3a(B)xvM~Owjd&&O?E;siVy>De=b#|3aE8W^l^9#iZsmbK1(`~g+Q4R67N-Tjnnv| zrYUOK$v$8Mw+eAeDxuY{XL=vn8B@)ac0hw`&+5wDJ?MW_lc0M1B101h1*BtDwtj*R zstUY>Zd!UPzONb7ZQ*SU4?Qg=x&k?Lw^nBz0qGKg{DCI`$$}|v*Nat8*VDe7JIxU& zE~4E<*;b3-E%*qQ`=%s?k^%Ajl_c1Yfkh?Y9gjHb=r>+{|9tDT0yz4&2(73zY*amw zl}vqa+99^0v+h%Y5N*-i5%!%_gR~ziT{B5MqM`Ruh^UW$VOw%sSn8zn1}k; zoY~aU$?PC{B9WZ*<+@6LBuhFTlfJ9d*yOrsC`7W0^o#ALN>-o&#K@pz zNDQLZtgTtCP?^~j!!Ef@J?rN&y?Rn z6%5f=9W57NLm@D@vJjTiAHlm8+sW&;JuyCQ?ojvXva+e`w-XQb@%kF86n7s_8B5aU z@9^7>R7+{tdk|d3I+RDARu>fVVD8Cb#}ALoSr)n6JaRC_PM6yLaE)+~7(wgD*Dwj< zE$s)+6Xr5YI1$<5|9O&Jl&Z9qlsyBM_`Wy-Vohul5AN>LP1(l+aGA1MmubU4!`#V~ zPi-OhWTr;lcd~~S$$G9;)kZP4CF_q&^%CH0dTKkFAbH39i{%Qz6WnewYunH8kq#hd zD2Q)!&4oivc=tg*Pz>(n-;J@`n)R)if27W*)A$nV1^qFld50rVX?H$mp(UgM(Y`&D z^QvJ*jY#{J>1BYik#)OGFllsi9PZ#sLYxc^Ydgkj2T@z)Hyhhlu_I?G(N9F+ESIE# zqWu@AIeS@PP6iY`W~JhL^R*oZH%g<;_#hdtp&e=hnQ_7Ex}6=Rq;O^#2mw=K*0_vq zlw}c~8p@sIhS0>OZ?Nx$#Km-IX=K&n(Aa?n1`;eHkJ|v&|LaoZd#s81shMca&u^sR zL7qUI12NJ@=h|w+)i%Uefh$YxH#P(fQqYY@rkDkNd`fc*w15Fd)^nDvFFG(tmXXPp zJ1Db#Ra^f8xED=QUUN)VEnrsE08-#(%N-6ZN;ry(qe_m*0@ikXf@om;B;s|CkefG- z-He35!(-GFVqEFi?aB##8q*(R|71%@uM0HL4HZQ4B_@+j;G|En8JT9SB3-LD4v48Eq zY}PRNIco_m4WLVeOULoYh?a*=t-MKa4V>%VA7xE*<(X$gTTPA&M8GB?QLqqMTvwD* z?iYHMH}4rt=-GHa3ArCGY?G#UHBwHbpy#lW-Yod{suwC8n;rqV!sNlU%f6cUrQouSyud*_ zemh9{5T0^pU};b6jET5Z>1yTYF{2FVyyVRnCjxdE+D#Q#8A<_9fL zg}$J3wu(xGxA$tUMVt`C$eh9pR#SEymVv*6=^mpE&-q4*U3^1`KoIKn#lT;CCG>Y= zSS2n(8s{OxCy+fo@pFZU0et}(cgHC@F1i}~#vCt%>DB|fw+#3!^W4@Kr*_>g*R*_# zQlnlQ7rzlCemNV`JB~Q~G-|Z71}3x0)1T_ROX!GSbUn@)1f7bd1nc=Lw=!Ipa;zLd zinZEnrL$!yp^h`V7WR9KO8U>Xd9U#WU}C&T)o2vKG^y@$a5)`+B zmu=5=gL38)CAAi5$hhYnhMiay^D_Q6*JHL9Sk6By|73ew}4XjN>s`AOULEWwPOs_m>P%0&Gv+Ucor9P=vmPDZwPn$2zvoG@!CJ5=E-6`}pg~to<<^PHq zG~ChKsO{5$(3K&agwNMI28P8Vb1C$h5ixXR9BGou9+_zW$D@=`FyraIMBU9nMA%3s zn*PUd=ZGIJ)5|aglt)z7G(R&pY=BEMFE^yPP~$brKPW1P>giM7=df#YE;)-}vutRm zGy05wnA%Y#$L>LmC(2!HfAs^whyu&)MGyfNcC;xq&I*wJhv8lZ>$rVg7+2)oAFCEo z{g(69s~;8TPDv=8pw)V}4N&U5yjneh1Z^S91U8tx^Jy)-h0)74kcS05LgBw5hGPsH zMFdrTj$-aZe;inOKXC`!>aAxs7CRdwV1?{E@xKcRMq@A5&)QaLC)F^c2CE|vjc1&$ zWU_J1Xt|oVrxc3jCd@^D%E(m{@fb5uY{mV@@m$BTfNhiU8;tMcxeIC=>nx~<^(EH_ z4c@gJOBalJSdFUM6)eq!q6JF1bKw1P#Z`+L>6@M&Q#qpkIT#iO2Ij|^v7_TemNyND z?E<6!PpJNWzs1!()(cIadgYmKCxpz1lt5(Np*j2+5N$P7!+4QZL=ji|aGV^s{0`b7 z@5+A<7|$cM9!|i$-Je0{V26bz1btU*aN2gVwe;i0?4J*iweidZU6><0{Ja6TIW$r0 zTs4@zQCn_JcY_*onMNf07DW~sdxO+;DQ)2>aI?lIN%x?~7TDYbvbadItk<0*} zh5+4lXg6?0a9;=4q8Hb^<2e&~?PG3OMbb+uyXyY%pgAs9tr=v)t;jF`puc$B<5J(T z-#mVr?O4{8u3<8cHiAF!(``y~Ka?6wucKb{MZsa1Z+x+76xEOJGfXgO5iIC!?EN-H zhO6rq#(=hr^6*DflAbSuF(H$#)Q}=cDAblp<=P(kyxDWiX5qCc8_;%mfRb8RT3}d$ zb9Pwgx)y~y<2;8bLJ~%)(+QlTJpS+dw^eoW76iR5IgMwv#>%6hAD4spg}omn>Wj3d z&*NuHHPS!O$nSXb2WX^M51T`HvJ;e9wY_6xJq_&=?-faGY=){eOj{yn`_-g#y>yv=H2UOdpdYAZ{?Mp+n5>HOb8Czj69^_CcB1 zB{e(uEJqy+90}eIe7b(aB0?Px$Zr?yMN#hz*4t?Mb)f0acOr9EWPWF_nl+W(gBOlA zEozkC+zo5gF2GNL_DEbJ9PWKa3HqNs-@nWIg5R>-GH17WIOzJj^)J^L@OeI(qX^Hg zgn~2#S{6V7Bt~D#bUcg~b^Ec3oRt6po7EtLXj-}h**PGGJ_~-O`tdaA^Zz~dzI=Z& zEB0+2x^-#LK)M_^ju?t|A`U>v3TA=LbtIXB0pWph?@Sk3sY!(AEn7B$eH1OZDzg8` z1?%IW0K{XbdCCwDHF`q+hNID{^cuf+IJnlJ5}#N*H^4BCPVJqOqhuo>nZ_r{G_1iY zws1nq1S%3H2q=aM5R`79taPxpJHJ!{FyEyh{Ylp^zuQmCvai_SD5)O?T*?_>R=(*L zAvhU&8IcP>b_CHJ7@adlb%1%o-s(FS>}}VRHo@`J85;R~cmz%m)qwr+b5tt$uw6yu z_!sMm0(u~~@%q14_WvQ>9&s%7(DV(%yVhCUd=xIr(|!YRLab*r5NHTO=@L(<49pRb zR09AY0Y10^0ERdiGXX*}0U!e+BqYk-7=-~&9Wa3rqMR=vw=4k$Ypl&CQpH6Cs#wIo ztvr%J7-RuC6oD{cqOlbhF2zY@0_&I~0Kf)jV3-<>l9g2i@S{fUs!l~;xg5Z`5u3*@1W9ypS9B7DECWSd z5bp3zhz>;5KZe20aXjr06hMholse=c!9F9Lv`d3P6(CLG z0?lFqkBnCY!zLWa66z0Yvo$@H2+d>FVvh(~e+=<~lujwSWP z02~8@qvS9q&!@S;Mjn=*7H)&GSCRCJJ(Zz|ukWuAyJsCIxSOr}O6G%6(qFb$ms#lJPS&9>8Bu;cF2r>c`z-nL+ zGlLI0W~)dGrs(r+95dC-&QjFv$&jbxj&?(paN)3zgwM+<6v>?{M(`(-r$SGp(u>Ba z?c>{kK){VcI8>YoFd*n_ImmRr1mqUE>6Tcwv$*~&``2Kn%odUB$-p8MHXIQYbIPKV zL2-mmllcd~!b`c+SUC_JLTfsa4({C0i>GfjPt+gv551{(S=IF({Oty8fq2|px1}ft z`|qIea3)wu&eT;TD9R~nzO$++0Qp>KBj;JWa*zw#^w?$Auw|o!6__oGuGxZuXj{8m z)7yRITNr|vB+>MbhK_hiX7U-5>~{*diIy`rR}?Iaw2R3nrQMb{ZNCquGKMVpTY4um zZb9htM{th`=*o^g5@y)bDImQWda% zU_xz8@OBGz!2jDl0OQY~`x#u*^(MZ3#uYPSub6(+>6jXS5|!rXt~G4f-XVP2Ik%iz z#T){npu8KdGz`6C=09~CUfCn$uSk*A@a3|SDir5iO@n!nnWW=?pRo1}kxku1mm%m@ zve53GJrQV;+VPLz#VlCyL@5X`GhA-=mh+*SD-;0_Q)pl}b<6no`#S@Cgxrx`*PDE; zcRdO(=!wA*UN+AT)P~l}Tiz3J7yts%aEo@lx1X&5^jeda8P$Y>zO~`coadiT(TXa- zN3FYFWBmv%%#WNtZ(6f(3);t2b^U7p)fu773_=rCyn1h-4GHUj7T~;Z=YsJgM%oc1PKZ;*@ zhyWihU&HR`!>nCkD7$1k5wvb3y-N4u0(-^*(a%*TD|0>j0TwF0`ROf#m*qiJioMo{ z+7^d;|JEKGsnXc1AnAQDfoZe0?*Hh4&bsr@vt8>^{$^esrOP+nuS~C$raOdPE!sth z={{bxKMMnWudtZkQz!wowx9NIM4S(@9V{ggPuTpiYI2vs4-YgUQNg3XqTb@-wi$@0 zrGkheU|@IET_KuK0bX_yGMm1Z+q^AwOZ~y*SvM5#`V%qfc|sgn`rfrgU4*-ypbA0T zuzpNTLGsZ5X6T}(C<`Z1r?hS$LH!T_K|sF0O~@u1bgKPQpc|ajCX(^Hl(?6rE)Pd( z2mC)MVb<&o-IkBH!I&jf@bMgwW+>nF-qU&wOiFO+^H$QoIBxt;2t!~8yvuE&b>q!n zb+8>Uo~IDmds;O0s=Ku-RG0^5;g{11NK2h5!d##rr1HO({|tMn-BH2Q3yMrok8^Xr z!O7&~n`D%{ySw&-NUoKU$KNurjz8zGqZ;ED=fOS(0CJq2MWXa z`riNNHXJOXm|P~Cpr$XOp>2B5J&fUt9d(Fzx>38S-o5XfZfC-!$#Xf%{NLz*#5R0I znyfL&Tw0I=xvRN9_diu})Of#4T(YnfjWjOB0eBwHf%9!Ms!1<7S2U+DwzTc2Ji1gy zXIv)7vXi=(-R9gt07mN(9rZyBjSXaw06bC*k1C{I;+xV6b!vPB8&4k^%DtC=BeweY zsW@+_vRj}jPCAbshd$)cvLfg>Y<=99CDuN z6;&t*HcrZh{6kdC9|-x#=z%{kBxebN;n_*|-Zl_(qP4(FUi-16R+_BZPOs{ErNaywmNsxhfvYF(rmUj(8Ez@{+dHgzl-FFv}$gwmBUR_j!?oAb;Nydp(q0kqB(}K`I z3>p+}Wye&N&ikjG%<4w#hgh}|c0I;guV$~JiAVnK=z2$rJlm$DpBr-+nMIzQ{O^3m z({OgBK`}69O=&12ro?qFEFEy)E}Eo*N0I6FmuFQ|<#q7JtgS z?H3Xv*excYzTd+uloOVKahsO_d?b3DS6 zw6NL422|PQb00lTwH`O~R=VdfS&%N&T$`Z&3R<*n#Zquo09{$>PVn*mX|s+YI2XLb z+}t**k(=*l7;e=;_P#!M?Zn+fC=9JAaA^jhdwPx-*p?U%)4w@1l2`*8?%W!poURJU z0X*y#rRsaNUjoOuu4dRZ^gU~92ylk?aV1nM&lL}MoHfi{d*0b{MYMoC_#646-2pbt zjUEEv*k<&3zgG_<=e7!N)4y#jpWt#(0|J9RQ=24v7wmdK$fcr_dG5hYc2t3XER9m( z)4uhy-XtX1&x5u6Kc$KCuhmeW+n6dFpQR&OA`EvmZFyCCFycNzu7d}`%<7uX+*u5m z^J)VC*VVPW_xYVAcIP1LFZR=LUyq!7WJ&HJfE{h}{W^1~pzbbL^j1yF1UKeKEIIaZ zlX}D`KHof5bH9J;Rbk|Oq=@dfWduzXE588;*1&^g74GtHc&!Czpfu}5*MF!`Jea8l z2=Owzd~z?g$LTl)s;VE?E_Yl*t5nN=(=yD&&VG}&U*TW>+S{u3Il48j=V!L04i8D^ zc&8i~Gb1om{SL0*|2-zFsKVR5Jw^Sf0`tkmA7w{W#mb&rsau^9sl1(?FgcxmD;g|d z0%3u7u_@T%o!LVxNGQeghmd5CvvjpZH<{DvA^*H#EPKzX13n1S1-ch@19*fa8%}+& z1^p#1&cDB}Z0LxQ&wjJ}@mZeTsIAu%oV=2={W7e^X6u;dwax<}J2sxegT!F<*>00z z=eG#GE+athOf2J}#o{KU66@-rjYU7{-;(G3>O(J0NYnqE%Sjps51<&PuEe83B-0jf z1bi4hQL*vX%(I1tRcnCruf!-12x=4n5@F<(swfD6`tWd}&Y_lS35JAUupxF2lLj(c z?;AFClsO#Q61-SQUCN*O41<76CY{g| zO_sq-+Z##33Lyx^uz_7DfbM-qT;BF8)5qI%O4vzHEH{}4ucV8KETMFbgM~+KcjU-| z@*5)>dT(*NQ4R^ghWC(rx% z)M7Eea!+JH62Hyf(Uf^BieTU2v^m!r#XLu~Z#pPl{v1j4@C}ZBd%9A7CE}Sj#+=ar z<7>~Iu|OCtqYfMif1B?ND@>B~jHAcu0!YgP&aN0S#@o;+IN94k$J7ALQv1c=*CQ|S zVyhGnYn9{#Dbo0?SCt>pyLJ<zK zs27I;zd|o7TlKvB9G)@{@x!#yE1amR(tO`UvOnZ*x^N)He2~7xu0xNeu{t#^y9_NU zf7`na!y56WZMt?x$5NJ&GS*GP*HC+EqG5jx>OC%dnZ3Fw@0T|>8kj@vQ3@SCbq~%j zX${4F;!#J3lq_w`Js}6AM;zI+Ms&nB-XuO1HZGez-3J>3eVCanHb~!lD%kI%tfchr zvlCBa>DX8|xZ((!>s^39c|_-Dchh%TW~ysz!j37aR23M((!x-YSTcZFf2AkQ(~a_n z4b#qVa>iF#Q>QrrBicAG`86&3nkO(vKtQX(`ao}Bx%NBj8%l~~Y6WH){ZFr}uZc9j ziMf1EQOKlxb7%Bxi8^_){Cct?fX z_|I5fnrtK{Vsuz&`n(}k#gZ8)J0XDOX1>WY@m}$)2x3Jwy>9O%`}?Q;Y<~Am>ozPj zo4?GgOjv!A`Oe1nZ__#*vMe?ulM3Lc_%jz#QG-RQJYI<$EZB1RPwr=GI5?=NK`4k@ zc%RDU{1!FfPJ|ROvV!^6&CH_;vFD*eJh~mA=#@LvPIXryk{LCA!y=@2_4kVJjdf1& zmz@}v-X=i&lv_&RVvx?c;!!B~={hYBY5N{id4=hns+dP1ko=_1hK7X)>#XjxTAthW z$N>fnV%5Q!EY%1+5BiuA%g*D`QLZLc3Xh)@UtQvbP)pWLy6S-x8G=Yx+C>waBF8r2@UzX zg19(PqRrw24<;@*FTJ4;9+a|c=!U83G=hp^n(pL8TKqp#$56aDK-(&!75+osC}PdC zrc1H@@Ds+E$ANn8&FIVI!9#)Cy`?9(Y6mAbfxIfT3Zp4EG*4})9X+4r)%%Pfl7avr zDQNdy0Ud0H&9D5Pr4@K{JonsU)K`_s+rIO2-Z(v5$!L6KNUi)P_}I!AcA875mY(Kp zuaV&b?$My7CAiD~kWDJB^YeMa|U;!Wm?q-Bre?#Eh3>q3AVf zN|IhT_ETsogbpadOTLbH$ZY;Wo8tKn%&nlS=gDb|Q`-SI2xHemY2x}^Azu?Y=M>qm z=>hEkn3}v(_g6T13Q@Lalm`FR#K^N=482@JXjjwq)VgdrD%C`PA8sEnxjeC^ zS`Sb%Z zgbM3HRH#QZs?og=3|ApqAW+)(}584?O# zv*z#Jvo8Ul13xV8_Iy9(D5K;bX11uo^+2J9xb=$T6VJo9)+^aT1}*-bl%c{-+~emt z1M4;lziCdT7<4L0H$mqWm)CEPM_(IKPJ^=@+5muBWE6n0opIp@Mke7ir;LbmBAq~| z5z~ht`<@vRKE6IzB^1egT-fMky$e>1J}-iE-|F4M70|K+f#Rvr+9ASb=FK+SX5^%r zYUuM`Pi$~jDW_`BWs|6YyO%jnL<+tH!l-1?{c?Ho9Vcncvi++Cz<--}a#wfXa$?(Kv>Og%JK4L`*TOIFLS zhfIZ)%?LK50)9DckyD=t*OrA38o%XBqcS!StPos;MyO<^80|havm_fe32|&?-Q;PS zV;~g-b9JvZ@9lTX17N)f;&uTxiNfYfbxid^X!_g4fZre`_pIFhb2^)Yvik~05SXEJ z?VYt-I}SBZpk0zk;pVad+oE*LyT=xxAP0y?g=cOkY@RnF(d3;`^%746j2oTO^`8=j zYAIb-v-4MCxbC~ag)PPW8TIxh;WIt_WVhWNF=^sWV!-glM}Aez82a=R)^V`Xc0i*G zk!0a=^Ry)V$6DW&73s6!-X&PwD|7x90N1cwR5zzvJ&$p9D7i#<;1CfQV59SRE2iuF z++2^%L)Bado^Q{v<~T-QZdShC$L}@gws!ZNTvRH{cd(#pWLF=X44|L|bT)m}40$8Q zhqv*l0QiwDo76ieiNWmA_WES$k<{GoJbxHs25NmBYXZg=4xpI*dR90#PU96KI;-0J zf^~sT1PBJ)-uc`xSg<_vyY!8?Jn%TslLCi1eaYq8Du~!wL|Wq{3C^@J@_1*b*(WFo z9BPVU_P*ln1EL3(L*vh|#w`KAR{Q2?${=;hm{7#zhh+!5E{jIXvI7glxAvSQOdSR5 zE?d2}4h>#J7K9-+B0?xGsLk5eP<-NYG5i3K{GA<9=~b}{%1?|Yun1^q$9FQsEjj^l zO$?)xgz_Em2^;NB4($AoB9Hlb0zqbGvGeH}p^XOy~W zOLmDmgE1W*Pi%uyQD~-yN94nGHFjqf2nO*PzJQca(zOnSOrl_7bu;F^gy1 zaBsu$Z~1w`fKRhl8Dj|aU+nh@J;3Tps_mbv%$pKVo&lRNv-yqVvO%M&KsRml(|L~BEAIDsyfhUYUVnt}to)0`TWC9T z>vPafk=Nnl%W{CnBwh$l;Jp%Yq zd^GQe<)Z;|!dUAyxt)i*G~^tFHezw+g>0+xJua*?mU}}FL`r5k-&3dtyKbzAbFXtD zn29?Jdo$g26V1QoxdvLZ0y2LUC82Z6YI3Uq%X&|@X^=@}Uonna3~@o7OT7&tefYbR zPjtTO00p+x^}LuAZ)M_n{=O&CQLWPYy5W89dvaC+t z$sr*GVjYi$vZG_<{%XbjRbEqVmZ2ZW1)g1i|c2iw!N!%n^@LcKl_(N%*2? z>$G~IS_}>t%j^;q#_mz*uq&}rIgs;lL|k(hQF!RK@?=7mf5o8 ziV@7HW)P00ejhia>h9#Pe>(?u?#9+|e$;(DSx@@J%>Nx<>ujKYwFVCnl(T-Ga->n-InZsCMEX|&FiBi2r64K| z3o4ZjM37h-5Nf3)X9+YsDp{T4#CX zSVv@x*mlKuuV;#*6W>|XfSNzY=EhUxXyEJQw>TppYDo5~HEv@=YpDo5^`w|yePPWA z9vF>H7$cuQLIIUG^xsCv{G*@~sATd%rV{!T7Cx>!1wALEQV-mEH2RH$h405TC%{X-1160K`YJBp*Z0ZU z3+p{tzMRZ=c<#k6sr3Ba#w5uVr-DPS(5o%$cUBUYNi2x4l^vpy<=k5NFtj+8V668< zMb}B4j7z@xc>Cl#4(?*NnM}tVR=mYG_C92v!q)j!7aVmw$OY%Xzg5})NqEwf^3mB@ zHuI5=6kT+oz-(4leXgTN?5ea?Li?s^(5doR=fcs9=83zA74sWoQC-t*eVWD-43l;J zj1VTTiTy_`UvcD?`vW`(K}z!Zc7h0pjvU}U$o>@VS0HNGHfXwUbaBYi5Styxjqp77 ztu~7V^TtF2o&bG(i@_KZhys8jC=Dh6d{YgIqjA7m+uxYGXTHX+8q@S+;ud-W8l*q2R zB^J7?{B5nNZ;mpA2)*V&3natGeyJZhS<1w6cMN<_61v&z-TE@V^zZzHaYJ`nD#SdO zK0LgTiBK7sHCN%f{OFo5Wl>+wYtOt|g^ybSkga*BaSvDOv)jv1PdV*ZdKw6L`;8mt zy8NLsae>D;d0b3NcYJ0s7xcAkKRM!Z^+zCB57Pm9YtCnm-J)VIJJsR~VuDl+i=d^= zm^^QOhe?>a)SjdWOm%;^+hoHDhsI^$!&uvQUEC%whR>HK&!J2y3!l~V z$uZI1DYdVp`I}_~)7443w?*&)tu0Q@<296V64jeKtY&e86e#DI5S}CpsX>UPf`p=r zGld8a?l6^yM`a87_B6^isFtyR$b^%TscIrX6Sq3P;I|GT z4|Fw)9G89z#(z~=o^7%0ir^@U@qwWbgy>Q_%|P^fciln3q85d zQce$heW-F%fnm_^`J0ecePqvJhh~7|q(kZ+Z#CjV!kTLJmo`^_Vh>0h6Z{fKyoJTp z%NpU+THy3pgUJ-$>5L8|4G}@lyr! zZQBl67ua7X2Sd3-!$-s>YB_ua?Gw#KnSE-KH7M9mQ}0idcr`ugyP6BW6E+MXpaAWqD|gNqkOa% zbQrInG217V*Y{Y$hm$n-r$A0K_1!JrzJ%n~M7) zCk;2XWD?~sdRaNpl{;(teX*4*W`8zBZEB^wOtZGG57?==1Rrl*ss5m3g>B zZnZ1<%qSf90FT^l&R_BOE)qxvjJ@evCp3I6WtX*lYb3Xaa07d(+&R;k$5$!loNT+n zmeus^&1k8xb=gYqr`AX``r)3;?Z26FWEG}b3%8SoI!8B=2tgjMJ$xg-o$Lw9v>a3l z&*ySVC(XbHaR+1r(0~{gCl85ABv;mx65SGg)ZpiF;>WD93R`?JnkQ#j?vL|KFp&WLab&0&r8 z7P&1(e85rb)Lr?rixS1X_x5qJ{{EM`D&dHKmx|JR-OTgyRBQ#C%Y=NK*Ki2}hCsmd z#igud;ew{9shgl-0~`Vf$S#G91&acNsLNd0LJF`!FlgBfOeh)z5H+F}1pE2!aedm2 zD<^nPt=?DL5jv_w`f5Sx8XT%ZTmb`xJV&4{qt&{{ZWWFsQif`z(ju$Ql;M1PL2F>k zd~yy-J);>LjyJ8d5uaJEePZB5#lb8G#x8$b-je-mcp;ysUA5)@cAM6`{Iu z$pOw05I_&nt=>#NlVywioENN?z84w=SG4PBq z!papLHgi0>jXtXH7F9#u_CXA@S=`!Xz1SMn^CY2APcSt($4MpKMn07IV_Q>^VCZqf zsvK*jcDYt6b4b-%X`%jXp@)X+S5RHI0q>_ZjIM2S_26;1?R=u$HIe`**4&?_Pxa#x9ohVF_qwOW( zEqfTx&D{S*(+FC8am49rXm_M`VkX<1$@B1DypznHDIJtJU-0itv~O^PUTPGj?It`_ zRcOzYH5<-bhM`UIHHd75a zZ4YnHe&o_!{s#1kGs;^44^Q?~qFLfb{==L^5$W~lg$R?2eb4xwIRDaW!NB3c_o^ku z*m-L#U5ZZE{hYZs3uSo_4xHtBlX(gukTq>tCsAmuxls{c!AJ5TEz(v_Z&q=c;$e!o!F>-B17q52%0u6tF~Dfl;U2d^n%1VSrIe z!~D1k04J?p#;Ak!z{4uNDq*!ugD;O#nLOKt4vys;A3Ly08@6KcYyIv;GHw%;$5}u* z6NzER?daP`^u#fe{=BA}V!p!QoYPUiE4koxa5}mZzRN`T>u<5qbBrVbr$9CsR($j{ zywz%ag97IrQ-}rHbf%Kx>)}Zz14A1bk*G<%<7^1Qs$HW|;@KxedIAd=I2V&Z1+6C$ z5g(|)7*D@NE3;7#XE@o^_}O+B^ghb>I`)(|oq%0tjP6_aBH}<|>R@dv7aP;J(nmxv zRSK5kHK`E-%SloryW`5H)bQr{|2$GP?3M4dav(8kJUGD%JAbl(fUr^O5)CnFdJ?Ex z-Ad5$g$RJHJ~_gTL*}KJGyx>IP!IV*CzyddNa27>48d_k&L}>v6I|JzKdVYOMtfru zvZ=^MT1vO|ABOj@%U{uCerN-qRz3Yxb+OcB8cOyt32ric3a>sq0#Trzkic&}hjX3F zF{c%5DxpnvV+Ucqr7Ax7<74|o2Wd*=F`D}`;A0Vs75}viV4vEU^S+kt#=$|5kd&)c z@l*b#$6}-1i8kr*Ol}C*-(fw}EsZQ7t1vJ5xLJ)+ z5+-=JYH-|q@**cyJ+<-QwYU9hBXle6qP!_XtQ;?&d|MyftfGo^E&5xZYgrOzS;x3H z_kqMNCbC>jZT%xDi=WRB<)*0zd2~~o!Me5f&*XB~;tN+o=W2EZ!@7RLM|v4vC0 ze(m@zIXol)@(2wBesOOv!Cd1`Qqb||`(VP(Xz7id!)N)Y6RRR}w&-n8FAe7|6LNJ!pv!8b3mP?KFs~qV)l9JjfJL~d zgR9;D=W91AQ^&KM8u<*b+$bHah!p{7$_Kf_zfEdBVEUV_Jb1DKsP z-VtTKa?X|A>B|K2LuzJyz?B! z$9Osz=4(FWlY@mFc8q=JTF*HMr#-DpAe(W1J}pPM=g=UNsQtYa*JG7x)GDxn{Gtp2 zwu`{7cnnb5b06=J&_jk^NEpML2G!ov^58GHS7pGtyA)VT**>Is_z}Fo0-Mw;gt z;z`%TdgyH`&2r+YNO*Lk(G5Ccm@r)Y>(6cD|4WNwi8VtLWKibth@7Z9I61XWa>Y=L zDAH!g7(Z!5y;k*?JeuUgX#ww#XZQM3>={=wb0&>JgL5-5Ysc$Uxv&E=Gz&=wFDyGz z2mf9fhi90ob?s7iCpKngZp7_ceckEt)JAT9ryfnqU7@pk^OHx3Mw=EQALvW!0KA>e6mF%HJf>_*!kyF5#7i~)T$JQ(1K6v@MB9vmU>5#URa=H5I-_f7+&di@`cs0%*&x=s-}(Bl1q`GT&Z#um+g%)VvpR zxcglTK~)%rQrH40amhu@K+J$a$E+C`Zu+`9LhC#fUze%tDe`e^Q|z8w4Iy4A&n|-( z4?YyasVLXI(6l08vaucYeQ0D<7d@gj?wb;0!?WPWM2@we|0;MaCz-Dn4rqL}(as@v zSrLYHcu9cd00G9*{5-TgL8k)8b+f`GPKMWEmPk+_ zAydW~D0IJeUq$T0>a^c2jq|TQ2KONZ@6Y48m*mK~-Z0A*F6li+x=hZ1HcBMLl^LYh z6JBcqxgnZ@vYu&uEOb}Xezj;=V0C~Xz&qqp2K7e`fcHXrhf!I(*axj};N6oqHdOd1 z0hF*HxAkl4x7BHWbG4drV4i3LaS&ou$8Z!2jtDSZDX~xxc?Lj*ywGclmKd}@R#|P{ zapjSjT ze=JCx#SZcV3|07yZ3E`$bsQ7>L= zeT1Uie9C&WIdHFcG}ye)sdyn#Jc3c0vj6TzN=}7=LObYyl!&a1Yrr5Ce6JZ{jY0tI zCIW_7lPVF6Gzt@(AD5jSLty@L^eQY&z^&>$QGwiy!C~*WtY=bhIs>^IH%UJ>@;xBv zX^Z3j+eJyYDKVq%)Fn5LufZukbF~U0Guj+D zOH#V-A@FN7t#1t6mh~swWmHfp+DMC>l2Q@O@e8s0Yp}p($#)272n?F--6*oCl(L?+ zfDjiUD@8Fe01@3Gvf{)t=c-1AI#9}aPZkiqvlLJKURR+60X!4yIJOSfx0ACxaKOd3 zGaE>@aNP_U{s=*gEXsZfe$f-3vbqRUn84#!)KR0KYnR)TCV=_fOrJ*~Scb(=CRVzx z#ZH;hroNF5z;RUICa1K^$xz{lR}SKI`rS$%VnQrc%#Q{TL_=MdN3_LPqi5P!`1V~6 z9m<95M$ZmWOG2Gni4L!)#-KL=^Fd8NuijrEY1vau1d zikqnM{4EO_pv&e5(y6M-jK(}~WrSiI4 z&&FBrSP!=9aeHbCX8^-EA0XKO+(f1d;yYFpM~UEG8TT~67!m1m*o+hnx)ZxMtI6{D zPuQBqV%6KPHtcFuFt8#ab1+0fwGOqM@KjfQ;n(=NY-Z?eoB!VgL}e!$^_2zDt{{Xy z0R%&TO+a?|dXfPN-jo%82j0cE0KLqxJ&%j$&jM^?YOp{K3k+DB<`I$P#lPo*D8Rcn zX35rirm?qhG}{c4ER5WS_D|kj=W?F)#=KGK<})1D8b;loox($NcK6?*-o=fYS96N2 z25PyG9=OO4ayD@6Z?jRQxm39AJ1Aj4_UZa4%80YC7$PE)t=g)<5Fi84A|d-> zNU|N9q^HsXlD!M{&S6(dszL5rDk>@@Bn62@gC-0^AEuz2~@dDQHCwmNPM$Q3tm z@XY6DF%K^q|LXLw$6JXf-EnsI!n*n-VaF+Fmh3TwPw0&-zmB>UvYB?A`Wh5Gr@=l_ z<8kmM=TYu1cb%ZA2>^HXK7me9JJ7y1Q~8S;Km#TI;cd&|>V}hZnb5BfFrw#;+%bF( zMDU?sr3!Mw%XO(I@4fRFg9VnC)t|;=Y7X#P|L+a+p|uo1+S*SFkEgKpQaKtubiAD0Sh^%S0YDzU_ zH0I6)W}lCIFy*%Oo(P4XVkLe1!UGZ|*uV&Y<&Qtk9_2<|9%SPx#pJ;4A$n8J!ZF@CvSvznvZu7c1pQvcPG8?!4G zn__gW2}(g{k6vYfieS}T+Y?a|qx51*)!HIWfIw{5YkW^M7VuR|AXjgOG&k(tPHsj# z8h}qTd*7Y5FY5F+pa%&AhUk;1xV3b~SIz8A^oFrxbK%x_lCHgzg3kMy5OP6AWy9l0 zNKq6un87c7-T)us1XvA$5>Qw|s?}CMoY4Qqz!3P7#JWbv0J7UV9`+?dU%$M;RL@9^ zF@hoqV`WBHVbAHW)I}-Q;SG|0#ojMHbow+It?SEIK~=YA9RK#?BCzdzUxcyDit+qA zdpxu2Kymzzok6q%UeF&eYHfE|6qG!>S&ec)5EvVLbjKc|&CWCmLc+0G-B1rRkVuL#=y65+A_#~)rrF3#ysD)7V3aUt zMv*KUS(s>HckqS*$pDChU_?T#Kc3KN^NG;kA%MkWvHDi|8XlX?aw6C-?$-a0s+XgV z4cx{LID%RZ{{B2~Y&h_=9(d6OXncJYFqik*32lWwxL}jtczG2un9GdX8zNgcZ`XAG zDG5Pko_$rwXmLjf)zRjf8=1OVf^lyL4CMd3mH0J{Y22jNVd_0X$Tl#xot!kmOl#27 z6`=Q0t_lFgz^*!VIBy*yv~PW0mGNHSAivh!xl=bRG+m~NeRVC#4;_QRuw(brJX!Z3&Ic`g?B8ow*=l{g?$3*_kzNY>-?nqtG;>MnL2&NXAEa0 z{_<0daJ~j}$__iGtzi{SRh*{f?Yf=)>oWj>18x4&9yVk^MVli=REF*KxxLo&6G40I z%t)Th3#cP^PPnae(c}98!mHn0yEPUQqMS5jC+;${A!2g=j-cAfL46-TzEq|k=6()g zM5N~OqNh=$V{;Lf7norBJW0DY>Dl8(BF%KXpz3)2xJc{{;5$}aR+Eg=Mw18<=>7db z?>nb3XLHSjnjr1OIPUKm0o4upOjrKL&T=F3k(0`K9FsIG3SF;;b?BZfFDLOniT$bq zdbsDSAI^Q^dg9-(#@LK?q0-w2@!Dsl|2YOfsK zLLb^((u?}P-*^g@S*lmdMFzMpBIU0FU{9TWM6wOp2In(2L(cs7;e--P~^LounI zk(A}!eZ8G4T{ zP)g*Tv_ZjCY%Jn8D!Ifp>ee0cAlOv>op}_c$Uuj6+eewBnSbsZ)=nY1OPDxN!q_&7 z`5ZeG(E|oIIP8Y)q3VO;&VQFOHkz3E)cN%zBe$HpAt`t%j*ZmpE?ss3qdxh^b9x~L z5F;}C%!io0Ie__njRmE!Q*UY^m!92GODf$Qtl*zA$FyH#$j{IBOkG#|cn6@9G;reb zKCe*z(};w4xL`O@M{0Q)!drK?bGdU`M%cafIU&3BsFOoMILTy+YtA+U&8+^QY`7U) z5V<nZ@76tZKx{Bej45lDbX;VKfMc$VuxcrLS- zFJWVdUNb6c`h%#c#`v()+-XQ4J~i4XNYLLr3w6`Hs$4t$abBa9((+V6G(%DY5}sYiC+UV;DZ6r%pDdZG9eKT0fw$=h}6LU_RtTwZCe^gQ*P0i)flewzswJw0^9%c2Bz$ zJmHZBTWq|1{qy)`_;uDmU%NIU{AV^7%>);6Q<>%KfP(RhQd7BtEjT~&uW9MJybT(@ z2aYcfr3X8OL$bfBE1h#9xg}WK_hD zVN71na~69I{F<4YqZ^9f_MYKT)G)$3U@bCl=rLvxK1TBYmx)IfDAjX5)*LUPWt zVJO!_J^^RdHyF{4ZoQRYPBXdO!O9=tzz!bNn3H3xO^u()Nz!o(3UKzEFc-;Z-m-xe zz%qkAep={$@?ZE|k(yZmC?e+>kb#)(22%I)WB~Is82>(f_F!ZZMDyRVU4Js#7*gQ9 zutep*dUI>1KACQM%K=%(u*~(Dnmd%pFRpWvDV2J%M!&;ErG;B1sO%6V#l7l<%|eA;34EdHG6Na|Q<{aqBAYrA({Cl#fgUoMG> zAQ@;o4}L2Tki1#PErbvnnrw5!z0PwinAxi^Hz%MX%{u7TF{KuMKe**p*@}|8pW#1& zw6XSZfpEMjJrpmUW=Q|87xy0-U&DlpC}Df=S+u`5a>bXCPtJ8y*!FV+6Z9n%)V4gp zn#hS4uWCLu#gKn-*Ac9$il0dG2Tu zA_v>Tg&$J9d^b3nbO5~$;;fPBL{5Im*qV<}ntqD+p#EF?`Muv}eyEzni~w zr@*b()QY=B)1W0Sil=izFhoP_g~gfkZQre{$_6-xysm6hKU_jJ7#vTb#cex~A|b2p z?=FP#vSP)9eMV2MjFDFbwqVE#!UHjjI2xs!yCl0B(YdbH%KeqJD%Nt02 zXcoB`O2M$r6(x*G_23ZWElGDvSHjblj}#DQ*mk3`6%b+Tc-RmoR)`(obApk&OcLTuFq1s{2y6Lu~JCN`E)KS+R(gm>OW~B3~ zZXw#6{sy1K`%}IedFYX>cl)q3Kbyidw#2*GM#j7EHpLO;Ti$;SP+Mkj5b zwlMXk2W?jH!sp^IQ#vvIRf}&W8-YH|27obKo$N~?!!ahX>Wf{#c~*pJxbV)gp|e#W z^x7WIB5dcRWFIPTY9+41#H=UPsL$DFeM40#nu3>MNjgk8Xe$_WJZdi1F$JCrSxT6` z7ZZbaI3_=>ZgCrW3TzzAo)lMPF(stpF%l5%b{TtJn7^V;h{oQX^(^I2(f~a`!oNO$ zAO2}*tX7@CxB-JD4)>@eIse#iE0M{SveKM*)Yo_+9psyLq*<-s&?KG^a=x%p{a^KQ zw0<>koCW}P-rwhn!B|pcr${bh5LtNJ@Gnf=l-dwb%gn%yqU7gj&VVsYf7oa5F@iFB z)8;-b+9q zOvA%#HU3{+OGCl<(m@dpwF}6wjZAf15fIzpmijAq|4FMxHY_b55dvAg(k!Zx%VjDi zf4{E+2V!zjMa&SclNGtHz1>-?Z2VE0$cR7J^44LkusFw=6Eq(macpzVVsBbfHKz6S zx_gFeF^HXh3D;=BI$*Jd81Xv0G*YV}_A-(ck}qy}tylRnbpw1TWnq)Rq#v9FP>C{&?eyLJi=a%@nDpw;|i%+FRE>FFAQwOI=)h z7m}CRWbFVXcyH^@`itiWuu_Bo2a*XK+dc|Nt7w)CW|>d~BoDhca@s0xo2t<g;8$%|xvsT^f``5*xlNMk;MVM0}@_$aqoP=-YuQ$TCCVx*}KA^P54@mF0Izbm(^)St8NmaCJVow4Kzp&aa*~ z?h<|0Pus!^FXs}$aXk+nb%^h|C(gC^1|qy1vLWeB>fzaKSXSa}d0T5?vJz15vSdk_o8mQDiCo>8}CU{J>C<7GG_) zxJaS%pN#MW1JnXSWTVT+kX^#aXzdn$ENZ0>fU}Z3mZU28#_OE?R57tWKE_-*W~@A^ z2`e3vexCU{m-xCiX^UP%{tc?AZ%JuquSe`yvEnX7L<$X8zEQl20O|AK1`HSoiAVKS zXo1CVI&_Pmh-RMV36frD{#fdL*Oop!f<6;wE0HJ8_TJFZ`QqhuBz}#bvoyC)C!ht4 zP+Kq_$f1J~0EQ2za6mD9mxrfXC135M4;90h%pPc;SCB7~>8sVg?Au3-?~%j=$FFcI zCmYeJOuZRyPx~92Ez^D=wvKp*h?h4klV zTfd#cBcZ{yWSrl%^51OSH80z)f2;TfHbXLKk4I5b`&4ju{U5JaD0DkOu){UXXi<4# z9C6ni;96_70YQZ?c`%K>z4@UQoXD5&Ug&`&NgoOjKFS|)5+;dd*P*@uZknu!v{D~; zS(cGC(3s6hKBclBYx`bpb25<8ukEbV?xls=c^m|1{CGo3AV7H8q%< z<$J#8b!W;eO3FBTN6{{^(n3Mgtv=2TS)hfX^XM!Go3L`$p-lp{qJ|gDBun_+rc_2r zQsNh3C0~Hlh?zSor%$Ii(P2?i1EEao<*0~C!r^2&M1LH|_R+&sY?Et6fUK`|<-s>Q z=dMSWZi+wsnDs--L{Lv6pMBQZ?@g8u8(GO4pHHlEvuxyk)s#NmWVzl;xgHbE!+Qn$ zhLzi#)1`EuILe@Xy=3SWzrp@NCMm7t+<&N+x3BcJN$r!o=#d4?BOE0K3lY@*uOeEW zhtiTByV(kNe$2e9_dHSg!41r7I?`dRP<^&H@5dHN^4(}!%b*|$ETM6jm zn)aNJM!8wSSb@(q)!OT%qJ)mC-b&gNgLEk0vRFC{{(0j2|_lu;sJc=lT|r zZx9J91O)JdP5}?o>ExGazB!bDC4~PEPsY@&R2XEGRYa2I2iB~bDfKIu@lbH}!*opF z_+dD)d=x>EIueb`G}9*^Sf13rp--ZDtGec_9R127ZEJWK7_hE*;9{+9ZklX%1TM}) zt!tZk=&s2p&($7FeTv;+p5Ij7GV}J=*zf_$VyFU4kd{9d)q1Z;KZ)eD@thLu{3Oks zROuhi_mz7gTefQnF;)gc+D8$FFImm%G}o36CF zp19q>zE;PV>{7`84Vgqq1r-YfRtVRv+q8H=NFQk|J4;yTLMnI z>kSO>p^#m+;_3cEXu>$)FMYrvcaMQPOWNT^#Y~{?s*Tg(E6ChFONKpPE56Ku3!n1@ zqP>Yld}yhc8%#}VPE)}uoON6^B_=nw9tOBpEtK@@EGCp_JLrL-!tZfQFik_X8a?et z7s!4)>{YE58@lFnyT}Dlhh6Fi^fi33fzV({NDH*HUzc_Fdjqg9f;-t)3;-{LX+-n; zy_%_^>!$F_gXv;50IJDv4>=jMO*LZa6kqa3+(Z$HDoB@W9oE70rq@K2H7*c2H{dY& zPoH~(%go6&EQQSa!c(9~`%5LJsvow~`wEh0KD6%cSvO^=&1@fs0dzPj$KtM~0;gdI z7kZ5ZQYD&NXXW-suQ9_%z38JI%clqr-_6b!vku*LpT-*$^mFqw@ijFkTwDUz{zt=H z*{A~M$gf08VF3FB#@Dgpy|sP^nLApOz*c3e;Wk zmD8#Ua3D9SS-!qX`+T1Io|!LV6~5i)ysp@--^eb306fNCr=lzx9!nm7>UO;9t#|#H zQVz{a!)IzECdpS(-q&)|8G)>_U><|vhF1BWYOdpyq-=&v=+FLzSHp95x(CRD%zSHj zxYFV(c^pGcahsU*9#GtXqVG#3H*^`Lr<%_fS=XRLnzN7-bTKHR@-;Y|n)ff1pG0uBq&7>uRo zbop)DJ1^vkv*#{LU9(VD4~?&DI@6Ktv-av9?3Qv1)Sv`g@zx5MGa@vh0R{jikL+Yh z7*wxX=z8Nc66>-OQ7X`a36wk~w&{<}!_{m{-ZGB(kuA56eA`*gtiatR4ukdJ%{oSt z~aXXPZ)(`>H5gQCRIIaV@&Dv3dn*T`Fk?>BRVEc zPl~#u*D|tm{$JY~%kCvLA=Th~<$xd=yx?{E=w(gOumoe@gjmv~+6S3OUmoH7A;Le& z;!;x}M~sqA`u+_!{4|{O24yB0NOKIk7%e+VqtcX8JLaEHcMc)Fz_`#A0{nBZ8MOzo zy;OZEyYOpKj#*~IoMH2*_|s_-Cdc*2t3f&I#BTo)g15`Y*32lzLLD3%DSrEia~WG*$zC_4F5fFHh2wRl z{X&;T%U6?=&I#*c5I@9=h^`0jYMzUc9%UTu6PdDHKPdTi*Rgh=yF2PAs6p@Pc4odo zqPaDmr#oY8Qt(9IBTd<^5ja4{W|TAu00!Tolfql6$K%jjly=ybiN66Hjs4o{%V|1&+5cV_w-i9`VaN2< zA7(lpy*3kEmAG=^@#1V@aWS;@tXg>f5#!4{#plD^DXVr!zGGAtFwwZ9kt|8~U6@hH zQ48+5gVp1aFRFHY<*W_?rcxiH?$yp-IkK~rI&_S8 zrQ^3`{P6b&)&>LdnsX@tDU4UJvWhAT_h&#R2tomZ$e9Kp*dUuE0FX5J9%}xzRW*PH zYCxeVBqV78U=%P=uMAR(i_;`9zqxSKds;LS>pNB$G-^!#Ku{4vI3B3}U@AE59xpZ# z&IR{(Vee3Xu37H>)c0`3gnT7{9B^l*c8=1JX7IKsptGU?Ye6ix{va(FoUEv>7yxMi zZ~zNMfG_6U-E-G~9>$H=@1pj!5JH398mUX%`9pg*2ny>>>P6$(>&k3UB`Ncaypx}o zg;DD6o9(4QPs~CaGW)Ze4ZZrhEThxk%K|K1L&m;SIz9#=n2$>crm$q#9z2H zh-*vrbF}leA9^V9zy)=!iesfU*r#fVLu|144E*wq6@t8O^sFEL$q-4?AJ@RL72@z6 zppp7G@vvZ>_$LNAO&k-fME$Wz58aa_rsZw_vMukSJE9F;x3n53*GZIIPNWL?ChJ< zFkRyNa}SR=G*B;5IEnUu)NMEqgaO0h5~QA~DFHr{(PAQx?)e$Et_4^M@*D4RUF;RaK}iggbqZJdyxqd=|l@EkIY`iHF} z5IF2s?r{%RxCfbH!5VZ8=Uh?+Nh2GN zZ0hgA-*N4m^KSFl&~ee0!fn1RNltVw$;Z4K=$=8Qzq*mZ>&X)O(EQ%O$V`7h4IffM zbM5c1)R)Pq2G61(dSS%JiRaL04lcf`8jpb*K0Wd65^Sh!iriKyZ4wiq1v+HER_rb+ z1$l>ivUKpZnwFAJq{Hft&b}kFT%vXnX45qpPLwbN1i!GDowTV?*<+Zr4^IE*dWiRk z&uhKJkUM6gyC!AWvm4ZNYHjQ^oS9JI5`YTpvwO33f??%r$L<%WYk#%OB_Yk4-g?>4 zQI~bUX_McR=B)K?8)Q?p*i`?^xrI+ye9hhZ1W#d0v!Rjl|1E2~qEOTJF5&i4mThQ9 zQ5~1N;4$@B%-*wl$Za;!Y3yIvq<(*1$*KP+UE_}@4$k*3(#3nlpi*pV)VMq$_VbbI zf-cnVUA%~22lx<)CHkZwT+@KBE&yOZl~xGvP^=jP-oKCTON+SJU{aGu8r+69Je1j( za1?GBSDTB)d}o){f6#Xr-UU&2Y2D}7PmjdaxlVYaHYP9gj<_{>474{dpP^E}s4j#_ zF&lFeAx{3g`Pg)n%A+Es6mpxChYUXN@$x;WSqiz)8}hi`gu=+^7dap=cT0-fwSPF)(+FY^XKGN zR|dK^_afbm^?lC$)w-WFj3Dw+5MCM2hvzF|yKmX4b18LbZl0afNyIm%cC#>{AV8>+ zHwl~VWbt9QzD5a(OmV*WjZN4{DG&FyJfVZrS=q%(NM@ zj5Rli=N9-4(E$S^*M&3zp(w~&@0C#KqT8F1Fn$cMtMP*BZkQZk!3kQKm=f51(HE^F8H_wtw8aYUx$$6v6!=e zKMx;HQ_#AbvlRssxgQ zMwAzFn`_fvgr~UHelMQc)N{Z|Ml6>Ry3QE?zf4wm1Lvv&r#4q9EU7kF(cKT$WZ4g; zCYeMN_qt7Z=VRx;v@KhEH#3_!2%=D&)JB$>C13ZB{5dIt-JLp(#tDuil#33egJIC? zi#f;rLu^?s6uKVPgzgeUSO;%bKD|cXSYR2WY+(P3n`6_;#PymnUK(E} zwW9}>GG@6sCoqJkbG&w@@_<eJvt{Obd@bFMGqlqMZW(4$s&2#`BM9*gaCm0CA0jQ$bt`6Y<~ z95_BtnT$<7csM*f8vld3G2 z!P=sANuy`FYPV}qP2xumqr8Ac*xkhiM9ZXy1p`Q8h|`7p?&ri|Bw8>iY3sgu9Se6h z$BGaQw1QC*&0Mbo?iXX2G%D}N2RJHJg)QDuBS7jV4A6xuvsN}lJeTTy(3`csw7u_o zKU4=NbHfc!&w5c7#3?EX-F*p{j~Jq1^g2~|_$oEO7YKTs^H~76V^5T02&fb8IL5qn$ytLH(X=$!D6GbNuW-; z#na70!g_5^jcJ5LCO}+(ct-7P{IL>}{`qZytoTeLD>w`!!Ga5%diTgWA~B$)q8`+q zDaFF*F6R}VJk=HF>>OXl=eL>0JMb_Cu z{)uX?6Ltv*J@;7fCHD!c)LZD^o1)lhRDrIErPaNFm+*Z4ut2NG=z#~65dcul;OLXd z4k8!^8P3EERD>G#R>%upTF2TNn8UrWyKjKlaL4xV-lrg=K!;f5PYY{4_i-6%gx{5+ zvDKG$e}^v)d6vCfqnVqW@$f~CMn@ZmbCR*X>T*y2eyfnDxaEsR5IUlcq52~SCCV?M zsAW&08WW>+LvycoF%~p$kbsklveTMZkcpHT-Su01{gWHmnZZL$J=3^9T)gdZ`RH;{ z=f`ZkL^#zXzYHDx>qg)zy3YA;#$F6fm>LWE&cqBvHJ1H3P$dNn1XI5 zV+SqMM`zXLVrunH(q3tP0wii9R`DzM{Iq$#@7gs*zg6ab9hD_FYZX|aBNi!G1}^y! z?fz91qqQB09v9}8J++%NZx>NMADpNJ&{sQ|BrDjJ^!7aMk^pEwHCNYAvr({J-+5rc zVZh{R5m(B9#8Wg->kqb>aCVl?OA|H{sKQZQ-THy&h zN2$NyJSH_wg@ETiMN~JtiwS~F!=u_smb|e@bwR3V=$%eNNGFx%4=GR}^lh*9%e7@s z>%@4!Eq81e)bAbnILkU^b*(bir=u3gr0LWql*iL?HS3nI={`x^VXiGAV{vj+eSLy! zky&yF!>Ew}-KaPMG1pIqn0*4th#$SkW&0FM8nlA_{SRPP^*7-2l!@EZ!j$K_|08Il zEc9cG?lGzsfCE`PRx?Tzl6v_dbJneOmBOJId}rgAB=veypkkO{%`{E^PMdl6=m@Ib zs}>BL1#NUT6hq`0uv?WS=uyKqTn3`XKv3Zj=F~0cq2xoRhW_NN53F~Di)C;^TCh~^ zbES*up#cK$NAPbllIRAvn)@tloxaHxoJ%u39zXO=Y?1s8TVoyN`R6T2=8h-fk+0^${40>D)T2A})*8g*Wg zP$RWA94@uSjNIf-rjalVZYIOr`{_inh34!WTlIU-wE(-Gea1SSWIuu}lC}U?73%iT zO6TL^IWmhxq&j6PQs*RIg8_aM>huh1z?0R=ta*SH@|0eEt1%M+z4-ZrQ|Nss)hq_G*Hm-c)P&n+38XTn8jz`9S8 zu6^3Rb>JK+6V(>!UnORbuXLwQ7?q2gs2G1nmNWK+p^yi6ez0rm<(Ead^M zW5tX5+`F-)(R`J^|;*;TO`A_a#;Be4Q? zZ}ODf9-Ag38ErhOIPz*U*)Vq|>kl?o^Y%89vbrc|5y^T_Fw@M;$7E4De@{^Woo`vA zo9LD-I2VNEjzHN+1V?v0ksaa9iWiIC8_Z?z)d>95MMV5GI+blbvoYx zLGM21q&+g-tGo6z>OAuB#zH3=4*-x#mhPwHnw$9+lfLhUR>u6LhK0^<@btshnR_m- zbljjrYlH^C8sa!Ju(SrK7FELmU8FD^Xf+5>Zv6?G z!Y92F#-4&aT8b6er|3X!UI-I2ht4a^fKXuG?p>t{m6WqUC?mEMUJ8*~8(yd}R!X~S za!|hqd_pAmd~LrD|H#ITe?A@9L=K!NcSUe(d^J-_{(9X8R37f40!VB!`LZhJ{d){C ziaP7UN_7l%MMg~KUs=30{V#UvtMsHxDny55rU)0e#O}Q(q8R)ig}}3PmiT3=C^5Pk zfFgG7iEIyDD#P|*YDpdw!0MMMsLMpj{&T{}KU%QYN!XAT(F?EjQ(!9Z!P}hEaKTs0 ztJw2}MS{d2T;AG^x~NAPPbBL?0psPhZYh1~Tr>B-)L_RpH@(?koscMCe_SYg-%lfu zE%~@PKRQ7!-jX)p`1?O)hK~w9$T~sCW7afDD0)t0I*dq3S8x6wfnFb}0V-)%1nP7Z z+Fs3FS&l6|1TW_+k=;}3`FqA8%8fVazO@9O6?yGI>Sfu*&1sb2%T{kp>g!ngSnxta zy^=_Gs(4YJ$u;J+bfY7urA2QXi&~!f6(&DOXMd_3S9U3+A}_*X>%+Am`oM!>uo|(z zSK=wy_Y~*`x=OQ zq24?&uJcW{u*{X6;Mn};bw>GMiX-(mIG638FZ^&G_(V~0cx8rkx`^Z&NO5bSH3bX= z;g2)X{((4R!Fygn;J{GyeUMU?6}9+Q3q|ZSy7u2~Og)j1yXv=%Yn?cx$xku&@R%)P z(9!NHJ)baT)0Go!2|8z-Z4;>DCqmIukbqc-D7jG46rOxSd7(BdFG-P5E547MxP_`m> zt^9B13;u*0Dv;1M6kK*`y&YP2Rd0(tA4m7|qx{sr(_+URr~F*<1`syj!SxDaoeHYXf(Qvyt0y&bLufYEhB72Q2G`NF|PVZZAPe3H;N|oq&*~ z^SVd85-FW&s0T{_5?*hW)T@?T9OZ-I@*laojeGna1EKg2HLb2P8pvr{$*W%bQZr#2 ze2DQrI`Bj98DP64)J{8{&oJtlVHDDpMUo@hk3VX8cwva6yBO8X?~LEktHpimqs>Gt zzoRNGfzn4)AF+0K_B^C!_zVHP4GFFg&f0tCSGmtgIo`iR(d=(Hb*UFRPh*E72*c6v zJ?qTNZ;{}*trx@QU9hz0@FTCgM;|UUX?84pzInX%Bp>Q)N5NmrfcY9HW#{UH+Z3$U zBu(v3!f2mA=Ve!ur;b8X*7M6idZknc-o`XNdE+m}qRLvO#(JhpJL!<;!zNv9AWF$vA+IP+il{oy;2e zo(I&UF~drj0#y8Sz(bO?Cv5atf@9ge{(zq$5NEM#AH_Vyr;|(Ei6Hkd+z#c(f4xnC zh%WHMe<-iDXutMsK{mpaj{ZIbVIP0it~1%jU}_!!VRv3@v6S6l(&MD-;Mt@A0rJ3) zzxJxpg#c}=$lRKGo`9V?qLvN3Ysw5f1M4p;t862l!x;*h{_oSinQhGEH!ma~=a~29lF}%#H zcVs5_yHjDYrxB?O5QoS76pk!k25o!i!o+J}1F4Dxp#F$qrk|DTg=Tnl49&@#+gXVR?`b_z0H_+ zL1&!TVV5A!N$$hCnO|Go@*v2$th9%WY><#Kn$<>>t+?n@2P8k0f5nXP`423d&cv{4 z`jRqLm~{9#oy-v^MS5yff_+rNs1$2B9$%zM#{P}e{b~ArHF^sA$ zn|K`Uz&$4aM2uBTi$VFsiE=z@_l0q&X1h1*W{e`qjA)cH1NYxG{KLn|fvH5Nfg(By zDp0~}Nm$rS9*drQmn#9tPhwP8XQPaVh$YOmP9y3q;t~V(MD~$_>6tYGfd5K5fl(lR zf)b(Z4S|Fi>M|2hu?~?7RKY)Qzbyc0>}z{aOD8j+nYP-UT-FsKT+dzQc6Fg?rmkm^S@pGO{?@8J(rriMU5#&Y+C^qnDr;e0Z;Dxau0FYU93^vO4x zqJ&WBjqr)ph6cdK02b4Xa(?dS%q(Xr0e`Sr1!@}p6+p{=p8ja8RU>E<02kgGtjTBJ zGAPa66j!<^7nfJnvX1<>^)ykMd?j^Be#8R}_C{Y_mQ`)Zf#i&u*I0rGp4TfnbJ1!KtP_UN@xHyrL zbZ|#V@8eO?s+?PN*cnoQWLi*+*U55HJHU2tX(SPva$35NE7?RP(U zhf9e z#NPI>WGA1QKcL4Q(3K&ywuL3%{iziY{`(iU2eU8FE0$lue;(w9I-i?B(2Lo%ZR9G+ z>y_Ut+s4%%8I;;)5YCu^j@NVfxm_zTkiZYiT_2)DsL-c0!U9u!;xH#>G%a>imNBP4 zB|WVlO)pIo9ymdUsUwcCV3ns#JW+BT3||fI9>PRla@G7sn%@-!w4pSxKP4+h8zjQa z`ez?cJ-oC1`^hct3)Eb49ut+r)!~A`(!t(O^_`L6$7=-XwypDf~@Xolf0wpP@y{gZ($=W|!p+qY`!=}qe5vi*`w!Ai_{ z{MSHT{5U`Z7-U2B$h)KvXIIK6*$ophQH}3yR@`Rv%3=<>G9j z7|vUV1l=$Vc>$^d?gRpYzhNWUbs^$~4a(!bxZ85`9x5aer2B#I>vI&}$zsA|1w70q z2{&U9k`X;`)LVda@E*)DR#sV%_tX2w=YB8KLlO|Gq{2ApXxj7O!hK zw_rWCPgPl24Gby;){1oAh3SKcem3H=$ehB#&Hu!^1$K}BsF_Ems#mtyW^FPpY%WCp z(M6q18#6*~hzSMs!h{gkfM5jynGu_c5O-QF6(vG2-M}GmVReIL6cLTkNHQj8W&B?h z^5Q>Fwp}L*56xWf)V$pVy)I?$G2u8Wdb!Kv;-`Kyi{fy)QW?x1-qJTZO3q;(pt?ru zD>b@JFGuwDCo$ij)WP?u-RIo{;Ai5cR6~q$`~|6 z_soZnP;@jA>Jh9C3{i@$e=~c!~nj26H zbq1VumSRhJem?hab$Xkk@IDM#o)R^RgY7h^{_n*q5SJFQ3mT`5UsJV3SKc=t9bIEz zF`gD)4!|5R4+0DluMCT2Q_BRrKpni;qn-OBJ;Uw<3FI@SX!CY4HRAq-`LbHKA>se} ztFy=RZ?4;$C8$}EhLXS1DOj8(96U)<-d{_8U_6-t#4@6T0XOs>dy76a%4&0TOQ>Lg zS(JXRqM|6}Xw+tv=G`cyyHeU*HS$jX78Ex@McjaaNyxr63VzMzHhW5slptt?03@LM_20I^r z(x_2*hy!R69AKvmYP&ygSCe((>=uryuM$AoQ!BiN830452HVMd0;KHJW3@g!L9GU` zBF521%oAXhDH{JR;m(4_;G+@^iueG;s@4z}!tx2j0fnETRoQN&mH`{@qY*i+o2*Hu z5D>`KL~&&jfWWRAk;9G*0l~ZtyI;qJ15qF!u&Sxqu`UQ%Dm7cpI#2OrJ-;2*U#{w* z+fb84s%`cE9piQu*I~2O`Hl(aj9{!eZ|;Giy5$}$ptmsHR}|KpU+J=`TQQjiO~gPs zK_f^8Foa;u|K1}dPVJ-Q^hy4p-waCv)>5+p+6K_#tFNP;=jC`Qq!lboKBAR~p>6BcvO2%pi|6V+KXdbW@8y{- z0bj;WyH|WJS=gl8G!4=pMIrRg1ae*67072k6Q4_1OZsEqtMVut+G6d0tB&~5*IwuKH&(p9Gh35YCJg66 zixiz3&uaeN&8`jqP2c9d?42B7xBN}~B}YMrzx{fEohUnt;-x($2I4kWa#PWfXTPL$ z10Z@u{5yFJ5^Il#fSSu2IPBQ3`??xRM_QhzWW)4hIOYRfj{+#fzD(vS%wYc~vVKvAmEwkA3(F?n{Wp#pCYhOq0lIm7m zW*ZnydGqIf1#t+3s~lQ1h2T00oq6#B@f#0pY%xsvnVt$i*UaofpkFllAm@*eXg5r* z!p_L%eK&`?GlcvE(cR{nR??G zY)Suz`R5c;tJx@l)10n7L#t?sRpsPmcq=6E2RN`Ua=zGxVku$(3&0IN!>N2b3hWkG zDaI4Te3b3}<)U1Y0X}ye%1+M*<$YwRlSo5&=gOm!!B@_>6JfF($vE`2Fnz~#HTYib zrE+zG(6T_94vkFb##(TC9@72Jf+g7fJJxnKS*L*T#BHMtS8IXeg2X4(K$XP1?X5Y})y+PxTk(eVy-?CX2 zo23|$S}(2JlO2_9EZbJ4MnRP@SO81CK0t;m>HH;5^PpZwKE!a88JExlZL0IcOu>D$mEDe~ zanoIB>gI^>UM|*!_{kU?NMn}HqID~X7HUII&3jZpOoz~IiE!pjC;vQA8=ovt`Px}Z z_29G=p16-h1EE|81ZV?9%**bO|EAxa?l{%K5P}HeYYoLtyjyKa=baU2$v%{pX(jL5 zyUS>vKu79w3PU+rpgH=A-+06J#?6Vt)Zk15>g9561M+E#>+M8x><$5g0|6M=;#qL! zSnH_f!I88%zeJC(!uGWSzj}we@Ebw@d-`%HuAa!dxr^m;k`A~kkd{RQ0x%%f!3G71 zz*RcY1XnnMVyygyaS@~4zHc!1P;-?o_nC%Mg;ZS5_SwM?=wuA=gIc3k7d6EPXIn}{ z^~ba!h%gZXMCp%b5+je)F`p?rGmc8g;grc$8S}U9P$oQiusdZ;YYe9*XMJ?=etyhp z^%Rs`Iq&L~D6e@Oyn>VX<_W%hCz&y+Mq3EC7M7Q#%F%fAJM5y&G6S!hm#+~l=gx2E zaBMhY7(TZ4O%^&L%iYvB&w$7suubjtJ7`|Ds%_ZUrJ&Q?n44Ql+U+`4 z+;?b&*)N6MvkMB(BeMQVCz@Hef{n|x%mQc6_2vhru2f@;hh%jAoXHVM?I&VIW@zzh z$c}^|><`Rh6RprmS)wQZi4w8z-S16an)ImduU51ymC~!Ya~l$Y&AcBbR2{u{5J(m zL{@sl{U6qP)@EzxQ4@8+Pejq+5e$#;Mv4I2Zwi-D&GvA<07iL*RGTffW#oqoXN3i) z5HgZDQmXIHpSr9JAix3Z>a#OyTp_RaucDpG-2j`xv@ZSI8kk58RO8|=6YF})2X6F8 zfDra^%HdSq2lL0!jLP|@uv+vXVKYpGNC8D9o_Q2-$3GG4G=>0Wec@Os#wB9XqI$0n zkxk6)n}uQvxZR23K}G=|YGo@fcD$@Y4_ZnzxFLP+ zd0557Y2&MzHJeH6eRc|N@8eccZ2Og5^fI|9?1*OENG&Q6&XfqVo>J1p7%4^2W1lm3 z^c!>$Ml4n9G$QzGop*m7^ciqBRpGHDuFD!4Lw{|;0GFxmZ`eo|Dg*%d`N44m3m22$@cvNv*9KlME$Q9CO54M2HV5i9d-;6> zspO4e(=cxmeFOCCbz%Yjsz;=~*8u!0{e2eIP=Fj!&a5+(y&Ic79hX}l^WsEjeRYj4JHgS_^DZjpnIt^CjK%geP75afmYbf>H1etS z3q5#OE19|uees@~htIO$X5Pm2;n^svB?KS1*{d45tOBBPUnQ)6e`4LSAj|$S)pkJS zPi4~#cloE?6A7Bl8I8Y#=V8wk?FWM-83CbJ@n-XcNjh?ChjxMMa~IO2)vsuj8=^(|=>#`ShPaHs2F)Gew2%YE+~etSHI=9`;k@pfwWK z7%?uK)A{soO>_u8_Kn;~w=%P7JVTU{nm_2CptjlwzI7xej(cIUTTwW;k8Z5gY^Yl$ zBh6TYhc*ZiK?Z&ZR}e*nUrce>AwKkIR2aNcjcIPlwwbx`L@%kb%}g)&b-ubr={Hyy zHcN5c9mD#d9xD|BKPd0RONI?Kc2$Q|#ten5vh0jXu-~VO2!LaKG4NpnnZ+@kz1^Rh zqWU~-=v#9gl~dBWg36J*solxSpGAf_5HsLUF1gR_*wqhtI=iy|q{cek990BU&p*>l zL4d{M4n&Sz9rRJNi7c<%Kcu)Qvc8qRHEs;?BiKu$TB{E{ zB5q#!8AOt071YXF!xf_K5~OD@{7b8saLjWH<`25~Fx=z5n#oZ{s72+5n{sI$UD~^F zW$C%!XZ*VFwm&a;xLCWM%l;|AT>-gKxwM>8p`pv^7^Em;9%i?BGgv)*O9jDmJWWhu zL_M@}?j@HZ|A}eIC;@o3diBV<(9K;nJ-OQ%C%#-Xo98t-Mw{Hq>ZTdvv45QM` zBrAuw#*1B2I^S8L@5F7o<9&vk=;`!Gvt9&UH#p2YhfHI@lP+nt(px-S=}~s32=^#T-{&*KS030)&C+Sc{RSib4rS&Dt0-Y*F_UxvEH|zB2Z}d zUkc7nh3DO{)1jjn1G{Xp9U(%(!JpsowD9SNpFZn0HwgXlb?0M5tpaP8@ir3~9fgI; zo+-+{(271a)$&>0BtkfusRXpx0izuPHz`{OmeumLApA z7azlf_tB2Ep(tJ4>7en)KKOj)q7*dEoi+||w*=49Ou4Kwf&UEU!-^2Sc=x78-NzU<;|b$RnQu151xUplF<- zquIkw0%O|XQAwMpcC9=%2t6;@KryD%m zdD_S^=-rKpM*p5q#{JWx#`J1|YJGZ5^w##&7n4^{4;HJCzm2+^5{SD6j0)rcn)LAa z@_OF?lWc2?t{!&P&yZ)!*5kk*srReRoiebkr6ZLa3+?V=O^Df4(d>_pk-Lh6j46PF zE9+!onmMj+vd*WmTG_ydLk{%g=lZA;GKD@7MT!a8o@|4cqsD(hucPf?z>bZ>ZFIZQ zJhE5-Z+YKiiCj^EQVDcsu3yea-X!W!H`AZD+#~{k6C9U@*uv2hkvDYC9iZMnxhQkS zm7lJh4OMz_x>b8w_Ls${qdO5vdTkOr!)3OSUNO%W5%!=U_Q>b%6Y}hUy>-e&SS6!! zSO-!^Vz&!o)m|F~1dN<+JA%OM_!sj$9dk}_;}@s%Qm5>Q6Z3pw4BEl{2X=se5K8h<@t*U0Uns2qXlx|SNU3A`~pZztOqlYv0 zu{2dA>o?f(Z3{7l_52#QR5~YUc_W7${f?4nW@%H}JxUHS!_eF-R~|fB>z&3Q8&o># zAG+417zBU-H^YVn%N42{XL<@5RugUkv^kQGoT4m*00uD<>Y%qpKjifN)7|Shw z@htauj=21L;yOW(aD07>YWfL{3vbyudO^*U^PcJ$+{6Uje}mb-{jK^Yq-SE(bZdXD zK{5KUdP?N<%c!sp{^ijA+Tm5v7WwssoWrGvL8ZT0_i=i}VpqD-qSG>g@3eda z*3gZ(dV_k8{hb8!uC{dOz{99u3cz4JWQ%6;fW#aD)8e2%6BxN1{q5jfsa}j>-VEzp zv%l-L9Fo3i{{r>a@U-dU{K&)nlYl?;Dmn$hr@DZ$3z0RA1|pz1*4KTuK7&wT zSNs^0VA`zb2A%glD{3)fi;!HQw+;lm!ti^Q==HZN8Uaw7;W9z$WY%gs2>z6mZ602_ z+pFYCNXipZdKlsX-j(*i*<4lK%_V*L;PcR(ruh>+uEmNtZUgKw!T|i2d*|9=9L~ah z`Y3CU2-$7N*W$goZkJh28qOp+I1K_?6Vf7CG{FI3cr6H~y8aNC&2V~paYE=$iKVzrm5Bi0xG zwL4r}K765{BAD?Cx1q}R=Szn3iUnHkgn<|Cu1HGCl)m2Iu2$YorTDg+j?QkI%gBq^ znnrFD!OAJg^tzcGrH{81skXMDqDrNe#_&(snmix+jbo^W$R^2N-!^yg2V8qT=w4}E zoefLFG2%=1KjG_@pEL`wjllhW&Cv&m(v~ZBzJVDZ=uZ++tO*O0i?%hrlLG5_%*eDr z4eSL7H721fw61?@`C8!9u2NOSY=}}iI#!!{gYzIT+Wk{j6A2RZBLsG!oP@K5=K9TP zpSY5-HzME$+{55#Us}tktD|1{VlgIer#l`sLW4xT_3@TspQv{M;u@D48(Uw&t3N9X zQ85%=xpt-D6kqAvZ=Q07Yuu+YOfiF=6XD0}R4 z{nqs(KE&TP+iU5_I20eR9-tKbM~q-DuQ|6AfH$XK0%OT`CMlT7?FOa&S4*_31Qgfy zR>gugzX74O`a1!0yDdwu7)Ty)nd0DJz?cLpk_s#&SwGoZI=Lw!kP4E;jC>9dkX-(! zJ7WQoa{54h&A9hkp=FQlHI(mv+*YiCQ|okCu4OK{8be>izvA9aX*j*I!4O%hW@+wp zy`@nSEn+(O!AT#H=4M_fM> zENF4;sveuzQm4xHZ?nZd{kHm(PEVSUpe@S(f31Ep{By{V9K3YUzDkc7I!oD>zZoXG z$Ok7!-w+^|WagBHEleomUEob@M|jihCE){a(V) z?iTx0Qq75Sm-nqdZL^N~SN)g9>flv;P$p0&0x5VO((9V>->1D?29e|^ckhfcJr2)217}rttvq;o3NOwi!@;re(h^rLw zFVtYC2^ySh6rq$2o^b`d+=lV+U#)OGl%jm>WCkl^&O!;jbmY@ZHq!%b-h@VUp2(ak z_{!bHsL?GrG6R1~Sk?rE#tUnZF z$6O%&e*+^%;#E^Me!wa#(T*20mcDxJa-+xN!F@X$h_8bq>Z$sN_dVT4`=eWQ0{vml z)Zp8*dK2lmwABkls74sIFBR%L+q>(F9>eBWm;XAX4U1xCt$s#8%lpr0HLPpU{r%K9TN>@_Bj@`~a>xW@(6H`gR zz##s@)4-tK*552qFlbd>L$rWl8NpHz()0lUAb}?^LA!34_6IAFf4n5}%uf~{5H=q5 zgni(3Y)rV}%8*>Y;q@*(-)=v#(HJa#H`8COAN4};>~&HY;F_K2fWk{vN>$AQwLr}$ z&-vIaueG}!aM-*a+Pw=IXfJJIEsR4FnWE=R(7j23{@KgU!T;d?XW+NuE_xCF)t3U> zy2fj+-eku-fjJ=12YZ3vs)1rE6jL}cu*^%>!6?>rFtC6rte|r8OJ7O+>=*l&N(6~S zHgYu(IOUeP-F9pyk?LIZ9r7S|W@Uh@g9(F0&c!AG}+bS2S4Y zO8|o~)+(!2r@%1v)_n1+zrP^B3n8U#qtZ%AZ5ZTeLHYX*VKh%`(KGfmp2S_Ti4I}u zG9ZiJlLy~wr7Qlq{_JlDG_IlP)ZGLH_yp3X)_2;6`ZnIFOQYY{YO)rgDDr zV7I}w@x(Yi7hvCJNx))is!^8uTTmc*VKJ?Qd)<)G>=R+_92%Ei2Mm`?8p<8%Nh$gK zHW287`AQ&|t0~AS{ff!i<#e+YM}lRBdaa?;F6eURlKJVwEe`Q~>pw&e_lZIUk=bh6b72M07H^}2kaHkBm*=xe8|!2|6GLrw5H zxA`j5^I|n=v2X+i1@D@<5(#46EU^n}g8*8C`>2NyguokTMBLU zWVypAt=awP&d%QRCKviHy^L`rZAYnCG<)xk&?^Z+IF5B5zCWnJ7UATLWT(exS>{x4Efbn%F^g2jO|!$vb^O4Ap+vfcNX$G(OirF!m+R;R(|Ah3=oH`c z*GhAKfa&FiME1JM>84!%f2?%jg2pNbKVa^lQ^?{0R@f|eoxs$8|1@|Gg4 zhJL}{wDj^&nyIH|AxdJ}gq1?-t@mfV-sj+T%8{8x^=+%J$N9&cN%$wWhIlA62pPz@rL)P&fe$E?dGXYg72*qh@2VONh z_Jg7)p81=rl2P0#rd6WkodquHya(hXFoEV$apbY~kF#k=f(j&}DU>O}IXn|jN~)9L zq~j}J^0mtGuu!u5Cq&+e*Ed&{ymiz5+D?*unOX}5&Oom5d<&>+oH~!~#Y&9}8hW^T zi%&sG{|LmKiP7zirl2Jwq-Je3fKs{dBz$UKvGKi!6JKOn|L&aucC=kWiN! znz+r7tZSw^HXv4U+IvIN^SIy|Fv5jLU!?)*BP(G9_GE|G9F6X!4HbQj$Vd}1eIQ;z zk_&6(`K%jzeaB*spQ|GJHeqt@iF(tiEYALQ_2Y_oyPeCgwUsYFiCru>y5?bql_A^C zm5I7|!%8KC-|L%3LG1CfA`!m_Vm2age^{>da^BjD@0>wT8`8EgMJDKQ+0Y6~0o}OP zh^>E3Ow4VonPSA9&QuJw20?X&xnl|Kbt$&|1b=TywR%@T&-;tO`POE74wL}VXb!d6 zLl6ze^}Oh25>Hnua*K#TrzN~{bg>2s-?@!j;r;n#+O+CmGQD_fEk>>t5Q-|H6bv=z z+>8_Dkc^DuCbMti2zGsALqYu@SsP?Vm9FcY^I$5z->yZpg;UKtpzz5pb~HIxtuOzHXz zR{nT|>>gL+mTo-m`T32yMtM3*8oU9at$Q}F+eJVC!MxtTToVc#5_Nj{+8r+Jp5<7D72K1w+ z8{1s`i;I!Ow5!fj)Q7&?4@4Z-MQS&Nk;zvJrRvm2rc@lsSNm1R=06qrc7bS7`5q(8 zPHiZc$qql}aoI9CEbo1XML@8#3$9%)IUwtWXZ97qhBhOazpGtQsm;49g}st`!Th;< z6X+06+{NRS^s7AxvH1%G3uLnS_g3YSSNAmnbkm0`XIB^@2+o27Kq%Nj%LV|#3v%Qb z9Ic;=t5~bI{poO-WFU+XZcYYbW0Py(WEUU_a@elGTR+rxv)Lv*t4BRt!tPvi=qVOf z1=o^UooA_8UwGlx3BgHkhAjy+DAnE}P%a3!{!>BL1rBQi-&R%zbHOtcNeACr;|Kx* zfqCxLX5FE{d$BKK^=Zs(Th0^V?E8oBb!+?u;s&04nLfj;f_JukG3}L??Q6OW*vb!X zI2~}3Sa_MML2CT?a=Ui381}wmus#UG>`JIzTAvsm`@iW<6*1~TmIgl=HUEsub1aZU zG&8N<(i!PH8Z?rh%OdCyOTG{YGKPU=%;VD8_%-nN+(0@nS@B-}Dh<#0CoFj2!3mxZ znl3WNKb}ycjLtVh`O3znCZ zv~yNEV-(WLf^os(X=mLQkT*Ng&;cH=aBcX@od?-ijP@_yQ^$6t9VZDxTIn{Rmz1J= zn==hpdYhUEj9`Oo3Q=HDF^|)GS8CC`cOs{)W{{ax;AlS){q$LStE~kGmb$RzpYIXa zOEE6h&!ob;@k5sb{>kTMyG_4l%yFmu;4dY2+(s&5e$0%Yq!vcy&AJ11Zk_}#?bIpI zL`#*vI_g?ZQ*%?dMb7`e>z$2*=k8L>&ZQS%MY_EoD?K|f!Jptxg7m}=19Yxi6vq2w zS0RMC7Q~3XLTQObxP`#&S*Lt&!X+S^;Qn)|j*^Uss6)-HD7+_rifKs5TespL-PuZ`o8 zqzUMu?6i!@P1kyGkjjVlZ*UULu+! zkQEMWDp~lIYqhdi@_8g2pRSu|J>*=4zqPicA`uglL$65BB9m+q~ zp$*^dWRv-bOPt_Dh#@~9JUQHa zRlSyJrewH2M zr4vd`oFg44U@=JtshK8kbZXkRu9Kt z-+i@9w_(7g$@?KOI0%CR%fm)j>;f*=Sl9Gk+<6epBlBQ<0xN-U)SIJWLLWcr+eToj z%6nDvdp8Vj_P(xT9rW8+{!E%QmhH&^<-Lm|wIIk~@p^ndtq{TF_`k zNr51G^h8cSh(|~uRvsgpNN+$?Xam6Pmi>>_3Y}tjPHV)RkvcmE47T#V;yjZE$6*Dn zAGOQ~OEsS|q8aF!AQFgPoR7q!)D}Vxxf#|JDZ7q%ewY^|vH)^gLWj_^#w6G5lT{*^ zpV_T-wd*V&-zlfq%mZhqJG#Rk3kUHZ(m`3Z54=fl+I1<*e!?MO4sy-Dj!vvY7kNF2 zc{a^x3CBX~1oAjIzt<5Xx#TeWpsdq5m zAKHiq7W_|k@emC?97NC2P+c}EFJ~K>PbHlF=Jct?QVc}|Utq5paNB+uC`UX_?8YuE zPIe{)Gs(@8K8CKunJ(UnT&a2Zx^6q=Bz+sCLc>X7kXRl>4i~2;@fMA>=;LX zsu@iAoBp-8fdRVeeCfWO_p9`DpI_R9pG}1_i`xaCTY-|`5oG6;3OWxnwEWM)S%S(jJA6lC zwTb+KONc2|vF)DgD7l(f3f&{ebkG3aj$ZI;OOYD(^-#ZuG-B8uZTQ6z?>gI6jZ*#5FsA% zJEU@RmI#72Vl=SIL}q-*HO0lvatIT!Su$JSR1sP8(dZpGmd!g%M(J)BaPq-lG~SOd z!!Mt!OCIXVD3=b}-!r+VUECmICJhkZ%VdkngCm%>u-jxnp3*2rVH3~3$=rvi7u-lf z>vX55P3jXY@Hm%~6PS*cXLU*F+Y-J5ITmL-ko%rLcxF0;6T+F%As`TlsL^6NU0^Xv zMwkP`Pn;fcAh;lE9hq}$WSV-u`@40!AS(mAE;hF?acX$Q?p9Hnaw1|;?4yV_+XDFC zOmXX97{T9NXu9hE{hS;EhC;2ItdpIeO(F3Y85ah%Z+=ZKG^*-Lx49kT0L&XYtj%tX ziXRVR09RjUcaFawaukzjCIFWNc-4O3^OVxll4q3E1%DadYYC+=Oqa%hN8JIEEw~FW zuZ?gAMci_<a<Z=G45&B(4sH?YFmgiq-7LEj}gAsF+ z>mwo!m7XFg4(VlMR{gHromk@^->PRD#RLcKa5~(|CYN$$?y-LmnO}>3qN&6mNggnz z4_W$ptUy5hguZp}CBH4WXZ4pN@u#}5%5J_`V@&%_vtaH%U-GND$vbHqIJO^{8mH0} zFSve+?hdi1#S&1Y*^%+fj%C{kJg)qL4;ks;xuL+1oks@UV2tcm}Md2IzX?6-K-9&B3vtWe2p`_k+le0ZEdZE|LX~pBQg;fn7qG6XR$LEF@;_q;aY!Ac8j9X;S@Bf_cSk4& zP9dv?QgS}TXXIC-8E=2s9edgx&p3lTd64*xiT}8rV|OQ^pC`F!ziph+j-UlwnWDA*-H=ArVeQk;fV>03R+la;8xQe>$8>20#Un0-jjso@G?A= zTnZTJKD0sX`V%n{c##n+E|KX)88*76BZ0ttk;Ck*_q4De5m=0=7^A+Hx2e&x?s2qQ z9A9oCWh<|dKdthzQav2^Jxm`uB27G&l_L+yZgaUXr{NiD#d5SyhdYM)me&9sgr3C< zDCc<=sopnvITDcq5vKb|Q>^S>XPY58ay8Y~3Eo)NvP?SgEC;%)OS$b+e*EaJC%Xmw zZ}gI!^~90*4Jmt`-3WbuxZK*~n=KzjyEKgk z^9tTY)LsAKA{7tdaAr)<4lAkY{I-by0S!x8-Xw&Fy`@vCdK|w@tGOLbWYIAr5-YsY z+a3DrCt0`!KvR^E>AEY(c7=QV+qV%XLKr?l9~o8Q6tWN-M{*6ab6V_=)Ry7NTh)8# zyRL7&ZX?~tOzRo{B7UqHLhSL|+OK|S@NkcGiD8IAv9t7ui!GVTiHtC{`a&3=v^{DV zlSuZtq*DUE|4hn67B>!8&G`s@CieH!LMUQfqQCVka^lmHJsNlM#Tz4Gy75G)a0~f{Pz#ed4|apN=f_#D5H<|4KkZ7HZ49^ z0Qtp4m6W&mGtjgdU4#Q)UI>d_!P>uUq1&eWHfBxjm11i!_b@fK!={NZA?MRe`AuVR zQ1!)7SqIY8Ee%fJ3lKxXZ(N0jX0)3Wxum^IQnO^(k_LSenB6E3B6`jffdJJz8}-HR zV#pQ%OLhFHJv+pf4BR%K!r;_1sQUKyq^|3M)*84)c#_J?$iN+EEQ`+F z-?*tm8~*efP{?dU$(5o1X!toJDQd_zzioFZ()s=19Sc`c^2Ma-UQ(~yTSv7uH zy&{BbHL$v#LB|gQ50j_0Cp%Y1t4V$CmB(Z4K2taU6@n`;EMyoBQYc*B6e5uArM4fF zI04vg|4ThVCaOR7Zs%f6@hS|FWR%RTA3YK|sd@S&+$>*lz%u<`OrKm;7QrOKCV28t zeda|N4bQjNG~I50UHnH@B_ z*vlImBSuoonxzdlIl7#N00GZ({K^~*$@O_uTkPrIxq4g;i*?#_(`Ye?00HiFMg+$& zj@fy|InFreEfUPQG&XlTz9o|r6)XfqHw1SQUB^#m-Qe}>f#=b!;|Cl#V9Ks*^pf6S z&X6#iNPdpAq`syey~tS9m(p3OS>mt}Cp~ChqF+-&b8*g8lyvXawPH%DL&m)ckP#m_ zdApOA988bmk&}JjW3Me4ZJ`6%=r)dtKNJ=>jmH|;>&M1FW`}>SEt#wNXUzi#-&qjpONmdrX-F(Usp%_#f|Py^B=NOOJ&<6*s|73H(@?;e9P+P(yz{R!wuDl z5hw-5I^Y~ZfKdsjO;e)B1kYINH6uCvQD?rE!)ROcny@NuP{0A}%_RrxqswWmvu6Kd zVxGLl?D(Pi)Ls65<-s2ER}y-QptGL#Ya2jxTxt?TBS1I=7xVVjrZxkafRg9)gaXiB zA=9bNz{YNrTbQK_>2Uuwr^`&t|1ko5I1W3i7+9|p+$f%iRKz>G^CEh|M$Zx2#?5yr zDS>;U4&}1wUCW*=o}|2Ih3~lGP4DKikx$--F7oNrqmy_*y5w!*bEh)h3OAXOJ+os@ z1IstV8#V}Iyg80 z$G)gG^F{iys=SyOrlDaGQ(;oW2wz4FG`3tEXrH(fXd8f=)~V6Z6r|n$1!rZa)Ux%) zBA91fITF=56oLYW&13j}0>u(Ft+z$aXCkIo*M*K$BIw23&Q=jTDWO?x5^32nl<=gw@rLzg( zUZsv)sr=?CzYd`**!Zg}rCwB|n#62t6punPHGU#hWPR~SGbO8#{$~(f4DwPvrc~P0 zYZo74!xbB^x9S%o|@SpOkQKngw(^BtT>$D4pQ5$Q60cheez9hS3+>(&*S8n2cct zsEt0=x=SU;pjU$g_)L@}kq>@3QBpkmbLg+_bTg=UtT=#7lln-ZdX8vnQs){B0U9jb|^D<6Zc_zEp!V2`|s{-U?joV{o{oevQ1 z5KPX+U5!k_qGBiglZ(SF?TLSv@u7xb9%owCtJGrSst z+P;#*mhZckrwL?37S%rGy$D$6XoHwOF#OHS?t0(%tEFajd#;_PpY5bev$<(Is!LQx zo?qq|QyJH_CaOd33e*!0XC*OKxJj4~&2wY=ufCAdZ3gC~r^Q|dsEiTk|^!{?g0w`E0n9JIfjq5}k(g?(! z>awl8jd3V8a3UZ=U3!j*960xe0U$v3&(ALJ#^%nRUjMxHAdjQ0NgW?QhRl4j_?mV| z;H`|p=7(r2o??FJ@XLk6KV6oQy`!^(vv1|2dUPs3UO)wjiD4xIL{c;A=N7c58x6WX zFOc>j%4oeuU$g#{SlJ$8Ciw|!W3Zud9*DOUv81h8b{{~Z_y``ibS;H7dQUo`RLuZ2 zCm}>HjEKI8=Eo}N0iU@5XRes%h>Eip`FeF;Y&?QeEE&@U5MJ4_5zpfrt5HH;W6Sq%$4VRAda_v`rOzLNpykSzKeqI-KWf_1=Tyx`K z|56)|eY7|RHk?v~@}{oNJn?p!zNSs95hMPCekUC!e7liO+Pc*0JGNn|5j$v+W0*ZQ1JbVifflYe z+Cl`y(_hzn8Lye@i>+awB6p#@)5B-y!}% z=Eq6r{V`W2g>eK|Jpg%^P|8$Ly|AuST*Z-0z~7X7#aQ$%n=viEv0?EU&*R4Ho{IQ` z9}bfrPE}4a36CG7bNdWJROXf~rK%msDwVW)G`v!wUI@IAv!C=oCL>}vbhHcFI2azy z%7xE0Hwbb6gKm5Ld#XKkMZ`=@ZR8ZH)fVdFE9c|be-HbEM!oZp=wOOJFYK{O_P_R- z{Eqo3H|{0Jr!nuulaJJoK_tu%Av+p15qt&y{M`zo1ajZ!>)77N)|A)7LRQBTM3ohu zpa!elgi5+H0t~nXstNirak5c+NXSM9mVoONSDbK80YyI;Qxq0cRONuaDbsC6P;Fc6 zTG{`s`OwI-iqsAg?_m0lu!KmIRp)wt7m3R7X7tqeu%dGQXsSW8SQTPV0$+Db93v<$ zEpx1*xYa90yK|bsg2E4EeH|9mo|U~eEquTk$1-s748=K~q8j9N;Cd<5=Kku9W|j`AeqN;p(y@fUA>(DBdh zpq#BpcyQhYW%eT&ik=C8Um)21Xp!tlJXp*!eW>>argrKM@=7 zm~`o3vedQ1R&c*8E@h)C8_VlbVUNB3>(ZgqjOIn9vBQ?4d!_eUBiIv|zl>pLcr?sS zv%B3=yXY z_84yliplq}_L<(p%V=GFYO<9*1yhG%JLP5AGVdAXX(>*7`VuhPHN28_j)wkc6$jU; zK)LT~e@oH_k~Z9(SU`3);BYR-EWj9XI8)W^`j%!YG5u`e54YH~*L6DQovKjmNRr3} zeapqiNtWb*0Fafi8Q-J}zNS8Tc|#tvWLQ52v#)M97r&9#$F>VVo>uPmA^wW>jIzp~ z;<<|btqIhSSGMAE=+j{?YwePudgS*)F%TyB_28Z#OqW0Fgv#4*wV@uiAzDk$?U#F* zT}y2Wur2NZc^y`7%q>n#^JKX;p5mZfu9oh1$KT9@XLW$nT9JB>&MYuQ#|0o}8!YXi zZV^pOS>vFkN`t)m(nRQs#hv;r4Uo}0$+vxw{n)G{lCQ}Zop#$F(1$bdNi-rL$4B)9 z1L0nB7_px;E!zL*Si}HypwV0{g)mg~IH=uu1E+2Es1iLlea%o{T2gjvJtjE@_B4LY z({~#$8l09_Q&)0MVAoVT?Yg;tk#Y`rzhq?{k5zh@g8$LSYoZ`v)+%Aaq!I{KdPC!% zZ%xm~x+tGxs!nHp7f^>1Rxb7tsciGaK^9*GFnEr}{#=bmDG1(OQjx4g{*o7zosbx- z`C%(FHst-O_7n#v2Ke*2X@A(_j&zYR9=tcm^>R8e>#r^hM_I~fOsFm0KflGrsrD7n zG)-FTiJtqL`MybgbE0`{mfGq2I6_@%{_~sD7{Z4`Xh!qi(xx8zS*SGU*dB4>Ix5#8 zeQw>+Av{)n?O(eS9olP81MYnp!@u2oDn4hk;^#JB__uOa8j}@{RPqb+1PkE6wqRM| zmbbCf#g9nAZ*3mZ`RyM{X&b zQgG97wi&Ef&1Exkd-@&V*&TO>+r?hk#~d#DM~r2(&CiH_j7fW2J! zZ6@iGeL@JY)#Dr3BwmKErLejm`+X%_=62P}8Eff%IsmZKz1(Zr*;+#G%k6Rm5I}5m zJ|^gHch6%WE*r+%v$=N`Z|i>V^GNbE0OY#|N5=Ef?4ZD!r;iL_rQ+J>1zC{SIe=%_%npTc`m%L#V zR^=Vc7h73tmNS#{#zziyWD9ybTYS}TBmzcpfWjNqj??Zz1s7LxuaB%2@2HDFnOHDu z`jXffaY-4_vyKmsX)mnerYlx5tWtu4u_b*SfDRpIoRVvmsc(#>&jl4*EHv=(YC4(} z&%eOK3qP|qlX1ovtfHIBxOZl`BOMN~c5hH{TZHW-QDk9LMOKSF)>k@J- zz-_6xOr)wG^|b&wSANhy&cX<2fU#H(&sJn^7wMJ1WPmSbL~B= z_LgpodbRd^aP#~+QDx2+?8H{S2n#lJPHtsNSKXySilc8Zl$cn{N&(SP0l^((#$L+f zF2-Ki9S_#8EIcBH%5E5+Y&r0fGzwofx82N8~cvN-){RxV>c*cjCMI zCK&zr_5{t`Po*$h>%QNzl_t^LI&{SD{Vo8sW!g$?VJ<4k_rS8DX> zER8A#sb_nD(6z3djESJZp%(Ci2nZkod>sf5+To+pJh^!B^JI;T+D_!PtI&9DBP_y- z>TQ6ZdEJpC#m>|mka3yM;*)`X$6{*m6f*{H1`ud5|C*#1ckf_dfOqI75-!`%ZHdJe z`nFFh*N%OF=KxUrdt0YT7ym$$`a+RrF;30IkS&c?PpF3px8cxPp{KdO<8M!xYLhC+ zzBbppA~u8Og*-@#r=$3XMhR9zPhR57a4f2Ij6bg%GL+V+t8*65fPY4c$?AYD1(4Gz z`fYFT=ibTlL{CKsTwb(%9JNjP;Spqmjx^#G(yq-gc`HB#r`G_m1OX`q*YGAYzj(GQ z-=0@T;I{*V3%3~wGIL)7-k`on-sy5a87EvtF_)XALtYgrO+^3+qt9kV$iS32!1H}p z7Wh74Z|*3vG|#uXd>)!pxl*{ty+W_)oa@{_X^Zl>>aB8!fJ=4<{e<=rw-e@(IUR?s zwLG~?!2^-0miS%)@?s>rs11HRbm{RrMzg{Z?+6Kw0b9(62j=MmHYo?SVzzl8pOt7} zfg})MzpM-gEeODIMd|JTHZPC2Rb2Lwej_@R;zN|sCSR9&s2Jj_H&Sp#q3boxmpgm@juz&~z=ii*xKJ%f=vCP!og~e`(7&3Fi5XkWB+v34M}M=Jw%1uB zX?5nQxN*pRj$kx?tVjphI=|nOTJ3=%zUPr|h>ekq2cO^W*zr7`QJ}%QYOq#29ZUN6 zP2*){ESB>0&zsVfiDvnpwPnp|7U0xPOSgvqSa!hl=RE#5CV!H@tKPtZ?MLIy z^*?MscU!2$vt`4^SFX^zgZ@KMzU*QnYkAYgKbjh|PD*7NPG`dWMUtRw0VwqdTpD}p9svK^(=};1^J-L zIZ_MUEMCnWtU&E_n)TZ4WirJib=v{}68lyt)E(T|N?od`ZWWpa?9`qL-%II2O>K!_ zAldtq?$|Ebio+Y%`34--E-BA6k*CzNW zA^~6^3YGz6VVZC7X!U$fVLp=nWYgGlnTD%p21@^(|9P;uv1u!_zMc>Ft`j+Zwa7pp z=%T9v!uP<7>>Uom_%Fs-jZdeW^D9OVY5cits!{&ZVbZWO}NA(3fm#I{% zyPT8O8Yk|YsgYbMKe2Z~;284O z6w1jLu(wN)Q{>oXayy>%Pvi!_d6S$KXXlhU0sa(>1C==PMjDNHUetLvkMOyp#wG2D z18#d;C;6topvVT;CV~P}ZeKe4_L`IxJ`D_Ia+gcSe{|Eyji^N1x2irehPZ-yb~mvo zp#=W8tSLy-$iGRkNE8S{00LBAY_CJA@_ziG&y8J=nB}q=1_pQic|u+vP*TB;{|6T< zu;NAE*6;L6VyDWWIRmzAQzP%lkg}Q~`{p(R{z}@^&N@W7X36{0X|nS!`pQlz}O4rITRMZz97J!0&Q1@!AT|K;VFb?Qtt{>NB zm2FndobMraFNpuwjed%R<<`!u-LstLvOP+?Lp_yVmJcD*DK znH#Q){{;qx9Uy)xCK!?@l}4Jv&t=Fs-n+4;(-pv|0du*B=^P7JAn}IeKgB;;G2ieL zXjKmZ2r&N5b^dap&6uZ`7HmmIyay!n&$|n>r3-#;Jog;rnc-m?ZvB>=zmvNeOq$Gg zqnj$P95CG9*S5>6+VrvojsYihkL2B8*B+(zhxDodPC&80pkIv$=w%4j@=5jfu!N7>MpW)s~4 zyH;Q;W(}N(dQ(M!To`cVSG;9Fp90sKwaj2r?_MAbo233oS92KKzr0X_1}Po@iqeym ziX_D0A~}blpz-h@_g9_&d;45}?48PerVcbHO5|Y%4>6t z!Dp16@fW)j5<7t!tL(Eh3t?ey$%pN)>NL!_%j;t7*dnT4bk;>F-hXkc&BAB3<6Amm z)tTvSk`m(fGVU~sutRK6?{y2M5dH`h?+speDO9`HVSrK(l&I*8vU_GS{>X7|COv>Aw8d;P@c*yIoy7Ako^pa)**6 zhYA%P1{4vmwxqps2KQk=Dtj5yNP@m=YZCTO#@#YEO{xmdT;b~a{+%~++^^lWL_{rK zAwFvjLa+Gn0PzG7;d-vO7|=3Xo}PJ*%B9w^MW&~BYV1e3z?JTjvU#%15Fx((RH$wd zLX=?kg>QhNN$sZsU-A1?XY8_I_ARd1c<7=`z58P+O-~h+EP!F?nVrH8yT>W2<_KM0YExj8ksNHDQ&mE z{`>*=Hs7l|6NX02V(}l&6%8KrvRDVd)G4GXB5cPbgUz;5JUeM33oMarN03bah&1zM zOKqO2Fm*e_3J!Naqd|Z2LSvH>U?SYnB)s3eI0LMAyE^Ta)c}2cB*|}|9WD?uPXql6 zLm$G8ZHfNb`^u_G5-=wYh@|$9m3an;ya^eUqgi{&K;wky`tyZ5fRMAyq1@s0=NzwU zC0-%JJ75yIs-u-S>nJ`sYy{;)<2ozuUrac>wCkV*ET#ltlv za-Ga4Ann5)RiC)k4Cd}YWA_OqFiMmq8qe2LwR0I$q!mZU*bt;!;VF*+h~LN7Jf`FA zUytAsM|NcDEy}RcN!75rp>?A8Y8y-0OG%92G$mJZYV>UuSz#b_>6TwGnC3Rx7*oRN z1)Z#mW-RY3_p|mA9OBQB4T?lEPI9E90JWbB*mm*+J@bYn2&jYY9T>geoAJ2g5_Q>` z^zu)H6U>xa>u$KXPxbJH$^t|Ss+l)`tYxRG@8}O<4+sQcfdd5_mPAR~C>^)WcUaY5 z)@sCY%|i)-K_nP5K8*<*gCz{i7&<;p2{7nk73j@Ifs(x)8>112VlNz(B#y6*AVJSV zgO6Fp#)?^x3*k02h8rslg2yzZuA7+^gvB(~@U3oQPOD<9Z`HC~q_-@a)z`Glp>rGQ zWNjoLIH#OBcvc^eiTCLhem?%wUN>(xJD1N^sMhBN~^8BBe*gfJvV_rkv4H?{(=`+;^Cko48jDlrg=17N2~C2=usHH^%Gk*~ zG=mWEhp}_^0mq62yMDxes1~j3{%*Glj=rT=RH07Jp!9J+!3leVEI^U9Sl)7drq5Q# zUIhf%;MuVhnai3}UuotDndGmd6DY*WV0Ohu^jjO;*TJN)!`4Yx9Z{grbzwjNKyxj` ztQA6@xpO77*=b?f;JwrHvi8+;;b7=vvWi_gFgY$}f-;COW|rts0{R9DfcvyG*36)# zC+at*Ycy&I8Ih0%MhqD9&^)Q1n@nvJ*tA`?wfRI{$pftR^0$G@=t013H_H&;K9z1{$bjzbL|C&m&dWRHXu?>>^%Tr z$iPZKE-kk)Yt1m+*!og;{_X4ABg5_E{3^amUnm6G!qo|b8mr8vSa4;Ny zTY!VlRT5kq;v@`ezuaDxP+HB@jE>=#cF+C3QY+E{nT@If3df(e#~hNR0W>rA)oVGm zKpfL6Rn^lX&2?yGLQhvPU;s!vM1uW3TB4x&=ZlAI$JOvr$RL|1fz!*XC~06zN*U;d z*{b8*f+{mzF&Z5TKyU`Z#vY{aH-W@;bA$}~`Jplr7;debVu0AQ5j6wc+#5yd(dws) zww}_TERYg|z=Rzwx;PhoRGW2exs9{@RLqR9X`$xT+;4HK*wo{_MY+0AII&Zjc3&a@ zV~gL3Q?4j2#09XT1c0+p3;u+;>4y@Z7CS6wXZSjUa=^0J<$CLU^y4u@K2<|tf983Q zN#o<+E&}(OTHsO8m*$r3x5gV6)a}QzgkV-K*^;rY2P^QOVnc>dj*4GUf->Lh6a+2A z4Z0G`y`06ii5{;+r!3Z0JsK#13uk6%FebULuZEiS^25OKLoDsRNc%@Q>GJ1lbp9tN zHt)lgK>#Sghw&9_Vu=TYKt_cGgCjFC2PgmmEa5n1JD#DJ(FBRGq<;o?e6+hMI5oX9 z3@iH)%r!M`2^&}zR(5h+UU<*nqJ~2$0?j2oe;Cb>9OG*F0ScB!%W+v>;}Cm;2PM8K zP*F!m%8euT6U;mIw})FnC@l|V-gop{_Xh{UrmrDcZ&|~397TWh$Y!mTLDH-n4FuW- zYK)D83Wn!7>UdRqX^Rn=gqa}0?2tGn(n2$iq7GZTAsM5wLudyk<&aIg{Kc$FsD8B0 z45E*c0mqkd(sY>Q-S1pe)Flx)~{G$>6bnnU3`83KfNjVwHzCK12;r0k=X7Dnx3UWj# zO9(0(5b*{kIg-$;GAE@elE~zuk4-w6v9LdKu5f{mwSXzyMyL2WEa27Y7|Dbil1BVP z;0iA=KTI+J2S=htC5569zPz~_2~8XLQGt` zHDt#*@^6>a4r3M%Ynci?6!^l7sb z%KRt}>nupcCc@pyX| z0GX3SF1&E6it{}n`F*p`ObB%O62@-(UrJUN=mD;*bNix2Q@Fkl8AKx{a%n*^Kq=jwY;1WLOP@j7gc+yuJzmD*`k zF+3@NFKd@wMr(aPVIryOupy6`H^1x7QYITt`ynp{*5?ba))=%uAg(%1)zphAHriMXsX#8}n!ws0v z3kB|P6C0x%)jtQ)+H9uS(RPr5+_Q>woP1yt@%73IZX7a9gq4@=Dr)9LGQ#(+>op4C z%yk9M#D)&Ac`D7S%^cBRybvsh4$!0XTxcD;L}n%{P%A5Bpkh?Lf3VqPLBSm2ca9}> z@o&l>8g2TZbH8|#OwLl0h&l2X#b2vP^>re5aEow@_1}_Ax}LQJU6dd86wv+0h=hL# zH{)=^z5Q6yk=Ail%9#(m5{Au>3=Xp}5T$C;fmPn}H=qku<3r}7o%Ebb;rC7WT2FU( zyX6cRFkmckRVMaVt>3O5g1+Iekz# zqVqDLl?n%|U9q_ZDsYACNMxJQ`{MFJryvL^{e4b&suhC*3T%jVR%w5ZO6rszeHsQK)2S-?ZgDA7igZs%X{y5*fmT}LSr+TJi{L7)M#kN_%rA|T@AYY6~^|2H*dO47d_il8wzP9*X` zh`~M_Q2}j2qzE!#bO3-hL}VXL%!JZNBn&PsH%h}O-~oc9-rEoi8h-7$89H!r*aKX$ zOu2Vp^$`1bF^O5vnlDbp55s{DqOnAgdiU+0rtKD`pr@$n{$A`8V$t51(45mHQ_O%` z{A;=PsB*2Hm1!%WGf{Mg-`H!m0YE`|ap&N$U2(o-6jyYTfPraMsraH|=I9bZzo?u8 zeYPM6_hIA-4REddR8Yq#~|eTBDHI!@_)w6hQBUt@=QDJuP2V5gq2&H<}6m+3nJ< zPp`uI6Q)kv4?mM+Z)INLHmEu7eET7_Y-MfX7^viB+-FRww>Z#vyf{Ol{|^;X2aWu3 zB^rv_X0dP~Vw2npcbm&Ne9Dk$c((9^Y_*XliDyZ zXL9v9VmPgnI_#+WdfHFg3>y~g4R2#hg;AK*IrQK%(TXp_&1wmPXn#s zc%12{7DMMF({okjf7rZpJ96Qk_}#6=dzKr`FH6jx8LhnA2?fy=E4JM8Eu)7LVD&Cn-2)7U(iz#;{2nHV9FQ31v$~ZMJ49FQ7hQ@;dmJtJdM_FXB zc%pS=WLhw7))hzSse1bc!rEjAjKP@zHQDIQ9)9oogdp>&FaZN35HV0VAM&@bNeJ5X{gO%oZzya ziND*a+o^jh500pY0lpA%z>Eb%P%8~5kvH={U(xmEAOR%@p5GIn=x)!De^FWWbq<#~ zM-w#80U4@`Xbey*8>kI=ty16LB9JBso(l<^;e3u>DR@H@tVqc6mMc35c{3`muwD;& zLQRT$uZGBqLle8TZ{VS5wc2TX)%+EGmD0GxT3Ie;r@4gLNKDKd&#|P_z5Y0GdZ&LX{QY5g?;!A{=oF7hYPKV5jjm*AmAd^1Ho7 z@8LKt6!HeCcAnZdON}mL7Vj_OD(^T*j+o z+)b|!>EbBwmB>K&!IU^(y5~gbG%9Zo^r$~MyJ`~7Igl(6ZWEDUAnWJxHM5CXXrRZi zo(k6WyK%17et+!BD+%r!s&R$A5Aoi_#)y*0K>#E4F`wjBXs4QH&$+1#@zu)S07JZv3kU;7;rNz2{TWeQ8DfgZ!f%}w$mW> zw_7qWg#w*N16!wzl%f1bU-_qrBEq=Fl@Bns0bw4tNw~)7r8}vaJT6)H^I%|;3A6l` z*h8r1xADaRoE71K0`>Doug*QLRzB3V9zRX97%0Q#m=jq1hg=annF&icAQ@c3pz6Z5 z%zpGxzX6+S39XBtfuuxEwsAKl0zyoKvzibLl3)aoN(c(+jR~FJsmrX;XQwOVB;kP( z4f~8wIkyH705T3TWHWevRi=$YdE0`bgnLY&2pj=~0|rE8M>yg?&JvNzegKGj{nFE3 zOH9M;V-RQ4MrA-i)GcRu(IJ+55NOtTri`VJAxFAdjr-a;UK$QV$N~Z;CZsM3?&?C> z3+oEMH!F*^>u4I{Zzj(|pkuXAoBBT?>ZA#3p+GA&ZxfgyMm{UBeE(kdp`H!b|7SzdTyqFuam8hoi-x3gwG?SzhH1a^XXs+2(^Am5VMOUooVxjHVgziGi~$5e zK`AIwYzCFi4ex()UAq3QU<+V;lvvhAgB^hs2R;IL^J-X5;R8Z59NTD7zOg<hl0%R6W73vx9L{qv@DeG94`(0uM|Pg6syFC7)fudU>Bk>jyZxi)Rc_n6M zoN(d=1{i;hzj~5>SNp$_)|g(Zh3d^4lOmN@Gb$Az>WLwFjw252wtWw8FwtF%tSku@ z<-;MbP&Q=RSpc$1ejqRU8Ywq844QyFO@h@nxX@82-HywALu|BvsD7x%gTN-EnP21Hw>_#J&dlsU3yHv(>rPytgMi33 z1Di(6dC4Jw0Q?+UJ5k}^q@#IF?uuuCWwaWBSYsV8WL{trRFR=gb}O!1MvFDsWhF zKD-$F?1)sniQ*EwwhE@m&%6kJVZWA1Y>dp+hWqa+d! zIjyFdnADY_1J!e1%g}WE_>!xt5s;UA0B>*uXhlLkb>g6> zeYku?-W++w2l(kN(xZ~v5}hzIn%*@x>C-pp-hQWW5tXTiG+o6D{^8;5Sp3xr#bSgT zBZ$QIz7swQwf0;MWVo0xfC!QSY_niHkRtc0DuDpa?8pWr2$F>qQ9xv&u`?h=(Mc$y z1yG<>(HaNJn%*Tpg#RQ zXw`W^0!tw;rzYZG`h}NwqV`uh)Lb2V>1?1y`OAMjw}h!vG*ILSJ029Pf}TVk7oMi* z;B6UXINN{gqfkIM1VrUvo{u4A0Ei`HJV@7oXZZ#Yfq@e4$OHh_xZ_f=AkfUs(Q<)sSf&gRA`Mk! zL4cd5xR;es2o0eDDU5gwfX4s`5Pb$gu@C?{DhL&1*#jiKB_NE9iO9&1U=UCM7>qlT z&HxY~79s=AWM}#5J5#iff4nC<{bj43dH?e(^JzwC+{nZ=k7@K;4Tm9$L(R&FW^1a5 zN?soaUFsymO7=~op~d-W_D~Uz?lr|;3e4yZ^CC6&SNnODy#h!ogALf8A5WUZQ+!FWg+K)$%>V}6w z!2?Z?vsJZT15_bx;yQxxfsqK1t{=abqniO6+QRf9c?hIBlsLN30Z!mvX`b=geX(Sk z&wmxi<0yvcO>>t}nMwVdNQiKUzNQZY4~Z#Zc2gP^JZPB|Jhq?kxiZ_%W&D=W>3+n) zxYE@wQ^^s%*$$MvX1Bswe)rKs9z&3oo56RTG5(A65MrH&p7?H4ClzlBkren(f-SKt zq(E%|h|ZD|9NH&xL}`uJ2)2WJ845Np++tW1u2RV6IFZIm?9M*smk!wL?4wZoDrH<@ zi^Q7*Io#`^I@s-m1Qh4*Aj|wZ@Hs`<(I}VXd~ZRSW&Lr0Y&%>Te%qWTqQR%ssWXH$}5FBAC%f} zWBC?PE-pR#y=o`w8=}cM^K7CIw+Gg7K2tMxR((UE%`ks5YQ;X+*lsp6yyU(7Q9y`V zB%eFxA*hm8vtm9nkHTfl*Yfq%ON2i%<4WKV1$Y1+9Rzo@AR2nCE4%8=uC+>@vO=OW zxoJsY2f&EU;~T6c3Zy zkY0ry8;e5$w`w8!iJwJ{C)m$$8=AyGGO;9ldnfPzI<)p6x%sK=4~i268g%$~->49E zc%KC(BpWmh%O=BmZHjd9yIY|YKDILMt>pdhB{ajzDAKAM1?3C2;UMS$(_-@V@*D@y z1rr}3@XS*)G>DoGl@MSZX(`Vb;fjRjXOkhquT~ho=aYf+A|L|>42+D7P{IrYDz#hg_thrV;HORbZY3wbP+${?nQTm>Ibk;X%9;#7nARQW z2>DQFA+MTkifsjQEK_EUq0Tyx;WSz3U?o|yM`*mou&A;UeK=#2tqD<)`-S5xE zZnYDH2bo;$>r0Scv(=xau3fWS35()6#UFrVQtU)o#XndG4!Z+bBZqhe{FUZ|V?nVW zE{}sFfZL9^j7Z{dC=QO#j-4Kh)~S?l4}yw}8zp|>D*E%$EH8(@o-PCMY&s_AcIQ&e z#qP}~<8y1l(X18^Fs^U{$-zL@Nq3(jwva2^_(-B;a2rn67jEgrM3wSOQhaCFi!PN{ zB8gY{pWn^b^AD}m(#)BFA<>W$)b6y2Do&k0CZPl)!9kTLABQ6rxiH9a2OCA(zYQ+0 zEbEst*1%5&jU7A%pKodwJj6a07R@CuMS!)rdruF-v$`Pc$=Bl1?PVjoq(+v0IW-NK zTL_v?Cragqb_#3(KjF&2SS`7*2&vphB#dcOyLnlft*FR|h-|L3=H+OKeHN#V4n(oT zOK^E^Lj-UE;R2DG;_=C`0w#bUAi;=41Og*88K1<-LNH`PSqLCTYN|;pauE<{P>>Kt zKo~GYN*NQgz?E<=D03}wcJ(jVou3Vv012} zP0!I|bXA8AlDUcO^`v`?e^!k*%9uB^6;<6fg1NrO{8f-PY)+V1C4uEs)cJiqt#f~~ zk&#(Ydz6Kt|5brvKJ{i*gI^7|1ZNh^(~30cETe_w^Wqp0r9CJ-x5f;OEz3@nXeuu- zZKn2RsN$q0oLP(ry6Dw_NE!mpk`i0*?CA#|<&GX9sr*1U@F_6(A9tMz3E4zl3#(rf zDEP=xY4u&5-yb(U7SuHxJWNpOFiezJTP6Z(i@A>tZ2}6#5B2YT9SMI+y-ncC)ViUT zA}3(V6Hz|?MBHc-U!n&!YID?0u6XFJ_Ggt)ysmm8e>%shM(Ce#aPZ~Yli}pheuZtB zefo5__s^grdBSVos^n2^6ZijnE;Y)bqwnW@-qyHF*8F?45Y*Klmr|-KPNBN!ify30bc(zCk47h0Z;gf<-`roOJV z#cghI_xQ%g(id<a^a`CG(G2xZh^1c{JZP@pdvNJ%wYr&S6}lAZa*^wVBP~*@1Y3 z@(dU`T;z1f5Z^8C%3J6f!%SbVzP_&dBRk1kv+qu@3^lCCq6W6t`MkE=9WIwmq!KOt zu65}T!hdZ52|`rDAG@`OiULGn-?J8JFjJ5#_uPU}00Utsf*-K5yf4RdhRTNZ5UixB zZOGbfG-O%j;K*2f(#!HdF+&E6QakuQp__aOQvxrTp`Irp^eDd}x|Uabn923Jb#uIX zC&{PaGcTF}5^C{`1~5MCk&#I8K&p`42{e*7WMGBNh=E-}0tsvh{DBx)fffbIU~(}Z z=q>FU5t#r@06(L02nD?`c|68*iRPltVw|PD{Do^?1irT?)$Ttq2$Ux>Cu0i{qDm`) zJ$Z@7UR~_{?Z30n-mkfbB6hPy$7Sd5bPpTt1|>PJ4A~zK>CqVoCpvwkaIv)z@um)T z%ku1fSZb@n&s*rba5#GGz9nhw&shXG;ZGsggQ*mEv+viq58U{JrKBy=6)mfOb3((O zO3FH1J69cOd?}l(j3%l}$?{0tn#{dDXQY~kCR#HqZ&)hBZn6$xjMZTwTjIJYzvCtt z5lJiDVIj*liPN#bQRa-|?|UfgO^s1p_|q!?>vIe6_F^XZDDC`ZcJ`~ET;U4s^Qo!K zyACkGg5OwfURm7NthkBA#gf=UX?DvJu7})6c&x8idVO>9c86U``JD+9#15;@Xh~M$ zqUQDI#%0amS21(%#%jONW;7=4eq$7=<9@Sh+|nbkOo8SE`)p=f*Vi?=WbGFd+0Wjb zS?BsiJ}QL%#85~Ps4|FcnCh)Q{yJB()Qf)G`l;KT(Xu&`i)vdUa_gkw%}NKg<1yOm zsYM)eeV%D5>=sYk_bBrMK96<@gds+!or)s-F1wo6i;K{FLV>40o4pM0fqp9y|VP}Di<|Y1esswYL3F&Iet#$G(78)7-4Wd zEf-raooH)KR)~ED+nrC%XQDlu3Rxmj*#7Y8HUK^Zc&w^)PWa_R+2Gzk20D#=aErdq z>%FxehNuO{!|Gl^L)!W7E=I;wPd>`mylp(I`F>A3Hr4L6-VXlP{OyXoPqS$*B>gns z@ETFL&#TZne(?2zyI^_Mb}@$%9TywzdFvGW^21~5oENTX8g-*zPhgOcME zPTzPrJC~u;5e&iY!=toSvx+$^0dI_f8IT^jEh0n_5ZwkV5rK#<0X>~>gV)$9D4RI; znGzyx6bJ{z5Xs(v0mKBWBtnQCKOmBpEz*$LnxL@rpIzI6FlI&p12aCvAf-Ni=->zc_G{<$b!c6b2840s zVT(+jBP;Kg9eV8|05Zn#o2`7Dk6@2v=KMs>6KrU zem}QVxF_54rzZ4g{tb?yf&>{s-*6zGFbtGGr)O4|7PP6uj$dgqOF*yhZ)w@Lp}^E% zqp`|Fx*8P^wFN|W`H&Hw`ysH86X(6<_h;6ptw>RxIXHAY62n#rjx{`E^bQjuRy)*a z#vj6E5C3wNh7jyvG}2yZzrxa=NsV*rX#XVERt5%AtMGXj&rhbarXxjFxt%Ewg3q~& zHlvv8FeGx>Lc83;V7gk-iq4iurcJHpn+@yi#XwzwTdU;!EQ*8|g|ZT*S4H&~&N0`^eU#C1Vu0=$gHbU13_1edGp9o_wsNPK7*0- zhx7sOr3Bj~YCO(Bl4o($nHG;|c(PU~`g^m?9IwX803Z>72t*=Lm3m zSf=l+kDHI)0WM*tYatI}!P8lhq{@TdMM2qVf}J|J$Mp9BrT{tMf`vN5?Z7w4TG6M! zAherA(-aE;pt2tb;0S9B5bad$^x??Sv~KfG)3SMqpMlM7Z*uyKyDiYQ$23EkACr+!oTwG_InHMS@JbkNaXSr+(0B$Sl(B}Qd#~QwXcU_g zr=w_9Zb*`wJ(Gi8`wh!_&kn$dm4KsG#@><1+jFK^%|j3zp^IzKp@hJ06A$X2mmVM) zc1_2}O=bQBL%J^h(k+pK(6H-+dJt=L)MW38Z`F!|RR4s1 z>-FF-$eNo;cyVMTl7UVSnG|U`D|tO*647se-drHYj2a8 zVCoukxr*PE2$;AVo+Ve++5c2ivADll!=*wS1O|SIo-d=_OD)#cUrJXV@VN1;myw;8 zD{ZdFc|^xP>8t0Ib{jpO!_BX&%yjZzAefuxmOO|D#QXv+djeT3^amB`M{D#(%f{}4 zJMk!AGO+cCnWA_KEL?z>0-^jR)1~i+ND_8*5son(jE|a;ZYbVD!g2erhu-$f)`?JvB@Ol0`Uuka3HHo38KLhglB8eUj{)}!7Hn?Wp9|a!^IAuy0FAg$hpJ|QCH#_ zQd674cd{fAl8bK{4{#_01VMv904^T46s8y76f_1(=Cu@o;j>2_$Af`$HI37@VS+}2 zwAJzts167t9RYF1aek;~-|qdjrygDzj1SCfWfzoBdrj!kKy@t+ivT(5uMoZh5$9BA zuVRvoLfjMaG=_bhu$l74A?RpNT(wUQBw-4&v}@G@lgqxGL;2iojCnf&F9gH{M@|T;oeYqxZ0sr~r() z65&efgP88NA36JUOLa!;jV$0}{s#}1w@z7uyW zA!_$DkoPML@ROpzA9D8k>Iz=SU@ex>Bv+Pf#9%X`n!!{o{HYq)K2jbh%Z}y;c zs%S!VHbwKs#s#{Z&}*36tnJccR4|Teo|^>-58N>R!Dw2p2Iqirx#JkKwcPO$29ZJf z@@PjfPIh+JKOJzj+F^{9icL!>yl!4Wt*4&w2jdWp5cEdDqLyx>qOFx1^}k=%?smP5 zrE0Yl6d^L%JV|@dhB1c*VW)4Q41q(ys1yWILQs&>fn|gZ(5$#}3p1q0x9|+nB=$Fn zNl3t-Z zCv-Lb*pEQpgRCOW>+tNZN#G{M+ZmgF^NS#nHUJj|i8G{;7$=ysU|$&9Uvz~SDusqj zOAIX}j?us7Hj{8)e+FXiB2&nU52!!@kUj}vvdeFAt2MGCk_l_E_(Um-Rxl=?=2{UY zl9QpG;2!I$O;s1U z7uZKO_!qJ(E#|7Z4`m>?0bKtDk$ zpb%z&?q~oYAj~BQBQ1(7dzX552P2p2+FNV81Z?{NZ;&J`BK;$F6XJ)QzslwOWR4mEat${B{~@>n}buE}HpA zKJHNluTjT3&=V2cquob(MHq<7oj51Af{E;pWIpuGC+fx=I{S5J6NeHC17XJoHSI1> z;DrO~!R5AO!Co`tp_@t~U>&JUmXQI zB~(ZP>w}C*g9LgPvLII$cy>+z0qMBrdV2Y~jYaXCbc2PdUk6ri^?IB)+^#di^SS2M zEmr>z&g4^sF8V8lkNc7H#BTjPmWV{_$*b97RcTjiFB%q>D%M3qi4Y0`ogm+d!$T>5 zM&X{Q5!LBZ?Dj+qo-#Q8$H^PA>LtF196W4Z&3nJZX-fx< zzv|6x`=BFT71Kmw21mGB!yIr&#~y1vdZUz8dnP9#S2;#f@ai~tg;7_j$w%<}RJt}- z(_+2H>-^QJd7QA7pDSRMzieQrXU;@9K+q5SnkT6q;!UWwC|de1cb+2d_~g|vpvw`aH!yms2Kb~n3++uIhDK&R5M8@BU$35fBZ(db#9dr(4m>H7@YrIN-YV zSODJNNgwg1>1jYBj}B~QDjB~3{-Lz1(b)ZRLDjfwZiNNr&&sIo^Zre~LdZ=A{aveIT??2AmV%XyFgaPY*O9ow#F`F~S!GQJW(f97s>j?7W;^ZatuiD%BfP(VcZ{cZ z=Y}OB**uDw<)yrrPA4jCgSCN=l_0IOw2Oc_<0zUpIm{sxxLrWDFQ1BL)ne`<6Z45E8QaVgqGRrcuZ_ln`J*@2N(L^-z)N!Jo3BGo+26 z9d{9}RD^Cvi2Z}#;q)2@K9y1j@#%(GX_4n}$blkTmq`h4EU};Ml<8?KQ@dBQa}DR_QW{|96j` zH+#&328}W^24s2cW6dk?ZxFOq z;y(Io^`0jef4fKBFL*|vX1nMY2agl}L9Ulmjl6kKcvt{l8+sgp2&5h@=j#I^Y^&&e z@RaG28J5VicD!)tTSnjUMh$p0fDk7cYI0I3CkJGS41Zp}oB=R?HY<-yTc^TV0i3=u z(Tf1p>af%2$+zRF4i01=YGFX4fWk=zK$4P4AdLt?8ghsw2x3hGGhZSlzq%FZ?C*K1 zMuTw9mfJ77d%(E4gVRAI#*(=Ovwr^{(xYtV>M31b*BP!C;PU1jOalf)EFj9LFbMRS zRt$&&{37dW+QoFYef{lO#7#Hyd~8;PT+crDH0b$3ugI4D)j+h?;=h_6oP1_{dK?08 zK*O?k8IKV?#)!yq&i`Eo4B^ke@4LOVIk|&iD?(+P+Lm>bXcgGa&YRY->OLTi)UWpJ zGKSc(iG?lxD9cl>LF*gl*r3cm291(HpeTH%UVOASEpR|A022AYLwM_=s@bi?79i#j3u?#) zVzHH{2}}qgAhuaNra_4+$^`%@WS}x67zStrW4?ru5fCy7Y9kQSgy0ec9=Y}(&()A~ z5o|#`J-upiISS1SliG9yL_19#eg8a8=zxZ>+ui{JyH?2oQXmq`Td2ipmu{*ow+rqk zlL^=7MFB%F(lCHX0LX|!ZTE6nds@s06=#@$5=@XpLQM%Ij<4~KY6GFkT%eecd;RHe zRF<;!gWE`)Rwm{SKz&Gsxj~MCA4cl|a{*J%^3loLXv>}zB!gzw$v%CD(N~Tx<$2h< zYJ!ZNVp5*9dgl9LnvQQSTj+mrMdC#Qv-7!juR47itZ;2bI{%>JYQk_4fzBvf3SFh0 zhWt~T`GHE6gGt&aCnvce8};5wSaii)7){Ado4Xjj`Ik47`AZ_4+EDxmg;8_dPVsBRq|q)K#)QIu zE8Q>j%)SQ{QwUR<+qE3sH*(3q9Y#YJ0gmBoPYXA@kd=T3Adbh_4afm{bV)t)C1ZX# z7uK1%EH{9VD(8dmTG>TLtACg5U`wbdQlFv~aL@Z`hY23S0~tE zs0d$zI8Mtkx*H92&?b+eAHZQplgGx|@1xUfeQ&A?bjIM-@qAqD63bjR_vho@9C^j_ z-^OwS8v9(S*;!BAQY-*CK*zriHHyoFK5R#Qor~sS%ZF87e$4nKh^sv{_++V2W9ZXN zEWTe;8iS8&zTu?FSqI@LtPp8>sKv~24#+aJE~xt-JTx;2YRLsRPxVz^W~UpdTrm33 zkHk3DkV?%4%U_o}3ue2{SM!+5Req4t@-4CpyHdMonz7SYj8bB>uDGmmv(%}1f;>MHp@Bn2kFD=OI*@6~y` zNpJ*V$MH3{c_Ggbnn%MDwC>8VxUKfj71C2ty_%<6=ij(g?&GA0oqe#s+f#P7y#2>x zq2I9;?99L&mhXCVwqK+~QuZj1O9U2SfdagOJr6WAQQrqBZ|7I@0FGGc=oU~ltAej1 zT$zd(fG`E9040Gq+#)vyciRL1lTPF!3~-c*cn;@ow>6w%(u&hLn*UHu4AUH&g=c>j zueX=@*bPjRGlqsQ%t&CuB29t#UR+wNsoc#0)06{#fLcU!K5grh3BaSX?EL)J4VC53 z+s>J1-*tOnu8T5@!>8}d-odQWMfDS^2hB`PGW*{^n$c9D$GS(BvQWnLuS1N6QWa?F zy`x%?>Ce_*mBbv>!oL#$R4_oE;#7Bw6^K4LSh$a$5WA?rcF>B1i~wr#9XbiquzSkbW;mpYpCx&2NY12rArS=X4N^IQwv?cCLB@Z>@R*d+tYg$y}^D`$IR&vWUS`t18E5EUf$Sa*lX#*d`l992We(Qy+q!=#97d|Io{3#J0cH`NroF+ z$bqMxB-<{fce#b_?))rnHG9X8_Nf&^I*-kQrg#@MN#`|-ozV=w5AE}CqlO?iyjt}aGdl3+g1=16S4aXo)ez6<4Zkg zQJL)eStq(n>sc&_euS(Qq%V{AA=O9sb8;lF4ciOmlLNh0h?Srp@B5Z811h#rhjuL> z#nthL=j0&(Kv4(6@*3u7d@0MKy4Ev{x!Ps}wU(@7MG0n(nfvlG$#6j zQoBLQi%AvLBfncwTOGho#`9(o=p<$kNc=TvT(Z82oF2=a%?lbL0OY`kuj{908ckPi zNyzD+t)o=o2M!e>`nSOHZ6H2dEst+LI{yL@2A|$F+nk}8Cb+J34~}EYy$Jx@hh@)k<1Vpyn6aIRd%gu|17PUXUck!r+`m9R*)wC6^ens zY3~s0sdzyQhA1w|v3CB(cY-~NPQb)?CcZMozkfSgN_gwEx$tKJhu_peXmbF)He^(7 zzcOgHem32Z6uVq*$D;h~ZOyy*W&g(v5S2Xm{y@nOJR(-+qkn9P=ajnVHvnPIRS#r*hQ$C=_gKl6zjAIP~>G=0r`z!et^bie+gQ75bXyG^a& zhzY|XQNDOT0m7Cw z3y3IL?7{+Z*LLl&gCYe%d*k@wF@%!`4?{w7{%z3Y;LDxXhZ23NF$otURv*tEK zopYoiOfZP@PcIpAL|n-Rf=T#2KefyT7y-SE3rc4Vx-a3dm4)uq`3&&6>POY8%ZK8AZ0}^DG`w1&^1dCKb$}BGwP4^SDreY=D{|HD8EV5-sBG8+0KAOk#mot^SDdw)GxiPQnyWGUv}E}5)nF*w{~vr=R=N@;Hseql)pDgaFBt<@S6%LX zDu=?7ihF+z`^EzwW>PXspM8DXqTlN*aG(|i zGPvoslTp2W>yQ`9)vvp)y5BTW?2C8nvZ#PdVQIZdZR<$ZTlI1JI~m zZ|R7}WLKNBzUM@>ST+J3u~8~|yx6qGnt30LmQuPunwVo#<}s2!+^i>?vZ}Dwwc_q6 z+X<5Jvi4n_@;jlk%#vos^bNLoEL$LYx7B^O+dj0#&mfzp7U2z6)&`VMv;2k-(rZn& zbph>`sxbfdpAP-YvvRrXzx-t1o%A@9wc-+=06nzde>!K|E-Yap{|9sM*dV>C=u0bw z$=yeUPtth%Xbn!y35 zD;okZ_I6j)F+2YPAk%LGGElO^UDr4fZN(M&{5=n_R6MbMj@xq+-Ei>BkZ)mt0LVXT zJS$MFjvexYz5M=vlO&ho*9eyTP_}(b7bCZMnoDG#hBWSecNZ3E?c0ym^bK?2c1us{ zS%t|pNCKOVnYnhiP9(%1|{+3;uXPJ1zCrc{xza z@1nGqPlNVO-!|GFOgK&YEMbQG+Pi7HY!rj0KQ4&?3x*P??v1L*5R+&fhM^%0>0GdB@;_ngd0pgr}P0HmnF#({TlC-c0qo#Hd|5>cv% zr->WaHbSH=+SWVq?mZ0u>(QK$VEf0)_6*IQXUT0d1VS$W z&{O7&wZN&WG#K1R!bvsaX%$+m*X5ZO;|KZnCS-X`>I;Mq(9x=5#!WL;MU}WhpLqX` zO@8*eNoa-CA<}3ehU|&A*C!VdAPUt&Kv;i@8@v;Ud>)N74d69{WGi*k-*n|9_@#IM zjxGCuFP&Ecz;n{oAd~F0S10J3po=@h?l-bB)i=DB<6 zx!+5BZA3T#7%*T#?d?XwIpFul`Oa5?>uEo(M`84~BN%nARi)+`W{*OX>9|yIFy$$o ziS?-QszEsg-Tu5-$U!V7x{CLIy!TGZLWA9UTYj{JfEX}f6Nv;60K}vrC;$@QYzvl?yEdL7TYw~U%E@Fr5%d{c@kd%_OTFdNTFNpDmB6n&~UHv)Ab3wOh7;Grax$g^_`g3&8nE1OkoxkhZzp ztCe5;(1313pU86r2o>DPP}I<5;(`LNSyVWam@(!6L=}qs6f7N3E|Rz*24oC@fIL7E z4;bH)s0cBC2|>@1fb68(gPtz3o=8i000G(ykjinMCN2n z!VoCQWRbh>^qq(n+E5V?sb6ljQUM_>3cznW;TIJE1WF?7@#L1jv#4fOWVX?$oY(Ku z)juQCP(PoAbW9o~AZlfdXDBjjy7PPzD6JW4UHC8_^DsB`8|Y09H3+F$SudEsx2PeR z#G~|KO7pNx5pXVCP(hC39Kt^Tm!Z<@zSZALZgaT2eSzZjyop1m8SgDo^U`-Ny`T^Q zHb{6P4%+l;Eo#FG{)DQ*BH5cgTgwYEcDxv7WGBTqfK~CJ7vXf~e-!mGC{Rmlw2gj5 z{Tf>RAAt6}{=1q4adA5z+d7^GM)(xQ&Attv_pv|gD%z#E_=P3!$|$Iei^tZO7I&^M zvHFs~c62hZU`D8I@&|eNk*9W}!$_D78nj2PzAs+2+!)78%SH1LeyJDa5?MNRtd_qw zW*H`~zd@a9!?KZ%YqauSi+m}2n}qYgicA3J!Wl$Paw?6U?Sc4-!&6_8>48xKV!Zr& z*rkT+d&n5EE%k#^p|%pMU8mnkRvMYS5~8L+W09}G4jTADgK(ZK$)0P#Ws?vfxCPf7fp>lYZELBJiUx=LH_1dFBPQuY&wXEH zrqFCEL`?>{*J?Eryjc|&d;7VD4S>k8?^4^Vr1!ik6Z(yC7+<#c zUsE9n>*Xve`%hb!n@oimw&JiI(kObQ92HP4dZ1 zYCq4U^dJxn7&Cx00A@Pq2s42(p6z3|YcEYiDUlh5WHZe1o>f&*s5lT{n}EgjC4lOV zMtiXm|KYh>lJ(Tl)US@7o710Ww|>K7+rjT5;2Mz_0t5sg6Cnd?>8#Fg!M=bpm5Xgk zeJ9J#%$)BbPg_%%bhu~?ZM(j#`zh@9D7{>|_%m?lT~zf$!FifOb@DGtCd3~2D0zM+ zUN8%WV4Qr!(2GTi2J@vT#aAqJ!ewBGY0pIj4$K;Y`Z~zyLrjFj{*I}oeY5%?7Cg@W{7(S=*nWr`-1dnB~>+xeh=Sw{QYpEc3cNO{bUYn&{E)b3E-O#tU4~yW%m@ z8~*9%zK|0W0030u1YKhQh!qeS2^KO7kNH6cK!U*{6yI8Z)JeUYcA&*)`r^h zrT0wtnwH}(KRywvJDabY|35S~FT}K+ji?9=T7AYI|5@iwmvG0`k<+Xv9`XdlZ}kqU zpi+bzL8d5zS(yzpRzR^iA(AGr*O>Iu@9Lv;)m3)c7f^)06((8`5gUvHF*R;3eMkcZ z>T-=sLXLd$IL4;CI}`WULMzEuKGZEJ`~W#0hF%&>4f||cf8+@@oS8qf+2WK%f}<6Q%6g&&tP)xeh8 z>^mmZnJ}Zo`mh^(-|@pQbcmmJ?SjVV`?z?}GP~H26sbK)acJi*)%{#Z)hqXTFMKis zK%ei$-E;X$uJ&eA7@5NFL;pn0xU-e@Rd&B}6?=VxVZmGw5?u;p6f`-w$sz_4MPt}m z7K~^5gdZ>M$9vTd2wK|ri!MNP6ct|gbQvIY18qIJ?mgT+0Lt#vs@L%}9zuSXDNxFD z_LmqxCaw5SO{6+CX)pYO2+-DH!E4a2WGAkIFM8B`T*Q;AXk=%w;3`cH4mteuw{OwH zwNH3R2cV5LyS}0@`pxnn2M$kf4wPNAE4bKTOe*;8N*+CIEtQC!kKh$nwgfPZ$^(Xj zF7juF_Alwnhiy`Cb&+{&mhv#1MWkWmr3`gh13gC9@w;=Eh1nr2{m?qN{DU{@eRzeL z?-N=8pSA8zfQ~Kgv?!KTSgtL9+S~aNZB{@702q+Zs?+QgQ_Sr|zk4)GAPj`(;d9jV z){5w@lpxYVSaLVoqtF_Rl@sx;x!f%NNYo5C5l%7R*xySg5n5FU&qfuQn} z>)HA}<^V7=U|`6fxoP=qkVFWm&A|Y@+yW!pA;m?ht*y`OCf0)~JqZJ1u)j(d>#fy3 z>PaaJ`s;Yqk|-d74%eUg_h{{z9f^DI*|}0W{QZkIv&Q6=(#Tg8U8?eWu@syHi}O-T zeU=bO6!bWOKV>8PYgo`YInDUqJA;RNN-i$72h*WdVg&u`Yf04hyjCT#wJ7?1T4;rb zHK9QPtug`P($9-Vbf>{^>38iGKJA@u0AgTUkOh&&3NkQdmD}re^NdRZxiJJpI*jfK z04QKbK2{sqJxc+dFhMp&Lmpk_W493!rT`$RkRl-5n1cpHK%Y+#X>rFcK!!(IMb-Ro z!;t1Lren++kRTk4Rv|ViAPgOM0L6(17AYr}ZF-r+0`_3cikLm9e=~Z+>gF#xzFoGyu3{vEVgSggCQX42r!=v?)oPzGcPV^T#i{7}(VBHgP6KQVIWgvCdybfVG#T=e0|dv{9gcDO;UXYvz8qgMN-!WcBhQmD>tETpFAUwZQ}AK}bMY&jTEH3uwCJaTFBS@A7B4I;-TLbt z{R;a6@>}&O?ld2>1+?YATaF^Nj{D%`;WR&hN9(K~U+RWMg5Sc>*nm#GKGbOB9KUuD zw4$&2H!)K>Cq)?uGpIeHIHNrDFP-4K^1HbQTx-jEnmk|Y3ARz zzZlqNq-J^KCC*lrH(GKIJIc1pSAgu%?58y2I`oSx$FIAbiBaXEmM-#-m9Zzr;JcAU zjlF{$MyQ3hiiZ2tHs|<416us6utB*s1AQkf&(clp<%{^Sp6Wm}b9blxuBMYb&L*2$ zLqGz{-&7ea8nm4`^deT!tDj#Hp6ZBjzydA%7XRillWl^E!WfVe2uv^Jo;kBJ7TK-& zcM|^PMW7&yv8o%U`rye@PHL*yXTcB+Tsw|N1Pk`~W*b_* zS{YzmJ>7FhlT9yHWWeo|)u;Ye#!kxT_k_~yaTko=nG*FcIg%;p{+ zAP98bK?1caEzp)z=|G5Hyw$D$0MKiIFetdO(9==H3=t5De!0og;rW-`M)!G1gpY*~ zq(Hf4dC`270tAD(0ayDF^VsShs4R+>FXIJKT3ec=S`d|p5VhqV0RZeN2nZtw@!cf^ zcUr!_OFdr_xl85q--+O^Q5pR+pFyw$fFyj*xx*sZ@GT~o8w=?0Ug`FxT;y%~C8?@& zIk}tAWTjw5f^um@(<%2PW-EjdAhHQ_RbEV3C>e_m^RX?(p$c{wG%rcX@GgV){wl2e zPV5TmFi^mo1NPTkdRjpK(jziAF_Zz^Vsu!NC-ruJlS&d$vKEwug#-sRnYs=c#_uHj zPQN4VAM?xBmZb%~TDaW-3=)8w@G!T35PO~fg72!z;?G&jxYDZ`)i)gWl76X}Q=F`x`#BZ-i&YJ2I_ zTtNnzYWKi)`#`!{Q!$CCkCu;Gwgl&&X7|#nw7|8&LFzlk0>_5Hk2p>i-7v?LI{@#@{V)>@g4pVKy)egkHV+z ziQsn2NCzj?wWup;?V1bVi)glC`Z!Jvz31Ft1sm2U876A*XqEsaZSrW?R?Ch{!efh* z*Qe$Z#XHN~Fsv46Z+hMhW1(D+spnv+$iZuiCgI(rQ9f-y&Z8VFTGq9}yNrTW4&b|bpTf+;bBi<)_?jnroxRZ1 zd;32ix1RbIUyS^Fgxmt_GyfB9f(d{yEuspl8tHdt;z8^)eS~b)SNUVDzFaf>_1`O7 z!D>Gg{H>8B_(77srI=zG0+G9+O=oa?BQP=D1yA5vJ}M&U_PTrnJ@S8E~nM5PeSUWwS<{l*mh_=Be#+pG>8LIwgr( z;7yNY6B@!&+K!Ts?XrPrqnmza2XY`Y#Qn9Nrk>jK6oSxRhwALUs1O<%GI;L*t^>G+ zn%Ef{OG@DmiJaAc!=BYlGGpa|g45Jfk>-WB@1EluXbaV`t>r1sZ(aU3~PIc7(cp zd>e|?%~6haLiT0iQ%BH1scSvVDSG?xCtu};v!3WmGu}=<$9vREzk#Cmi=?KrYgxIx z=eJ>xy8Hm=7%*UgnSHOW=_k9^66bj5*eTv>ul?V>?I5mlRp%Yovg@DxKin!aym!m1 zB(5?agtpEH?G(X3ax*nuzjat&I;L0ly?A|{>1AO4V>2^Nb=$x@(~vsti_pPZ zp&iI*D{--5iE$yPC1zNi+H2Yct+W{@9XBq;VUFdsco;RA?2J*w4(_@0BfFn+q&^`otulTw zS(F`dDa?1JXXOe}POP>x%+#TTGhnLskLT^b4mGI_&`FhQ{K9fgZI8P3^~)a?n1jL~ zfBZ~i4{ZnWLdmfVL{7L{g0-Rdi9S2-a!e{s5?%E~-`52mrTfjrW63QBthMu@Q4B5F z(-k5MC1Tzyfx3YWKSQVNyYvKJo|(2B#Fz2vVz!8SJyYt>smQhY8&cG!zo8<7#Vo@+ z3N)q<-u7&w8enjup*;+Fv$w7Y?$)U<8I9^R*mg9zT{v$ew`&nisfLDKP5YFw?L;i1 zzQ!mpGu#3QL>76he+0B-f&16(I5#iUo){Teq;IJTKPu6YedO;!kP?{6&*Ek&Mps3N z_!eNH3jYwA`}jp}=R5vYQyewqM&lay4lJ0gL`fWLm~JmostG{^m+;G1Zam)7TBLKK z+mG~}sC?fEninNa`iz3j_?fWY>GkboQ+D}12nI^@&b-vNMom{1=cZg?k}(x*gI)WD zB5x-T0m4p68h)uU%<|age`%a(CH*T^D{iV7XdXXBX>GCul;WT?ptB|^&HNGjz;8Nc zMVYB&$CP}1a0lZCCBaPrgh$aAE9h+L=;%*Q5@5q~y`YcA<_Q~H)>?lOr zjiu4Ccp8C-_n8YM_N)wBcKCS<)F`?2Y4)#Vc>N{9kNrHNe05cLM)`WT5Efd+<8(+A zztweEsho<@GQ<7u9iWG+O7iSz5dO|jiThy&vv00)zSTAOen7uZO~s*r(1*n?cbC{3J(Bh9o@LXnzv4?o>?{4PoDRw zb;nobj`$3`gZRbgS;nh%&$(1GBp_}_ApIC%Q;yxN;sSm7Mq8B*XyXMa0NWJr0)_Dt z_})0Wjm$$3YD^O5>t0k9L~%y%-2$i|AZ3iw<(tp(KM~cc!qT(faXQ$9X_KG^L=4Co z5qu1QK>{!gcg9%(0`P!l=`c`Yqf?NGsh7%yT!tC`gm#roR7jQsJ_HkL?DG~uxeZay1+ ztZd{1(BS?^CmLw|jycR!)tXwP(Rj`kk>5ztkv(ne61CR>t{#M{XTFNvP~_LKn6)5I z*e0qoUxpo1CulW*`{Jx2{sGQ%;}i6S!do!A!9a%?|*6Dv$chO|JsbLD2;W(9#s4G!p^ zsZX9{tJ6^iDWWO>7HCg_Ne=bHCEP`f15fy4lJ9YMLpAr|9Rn~loeZ1=-^JrWd?ViJ z{N0P04A=+mFOA{eP^S%Bu|}91oUaZxa?};p&Cx_mA;YPbvQ1jz`B=WDO@=4-&4E7!Jzy zODIx}DkU59{1$jujr}4BN!P5n4nxs0`xD3@$gen7CLnx`-$v+LR-8g%TIJmbpf5K; zDA@b8$Kh_sBga`a)p&KDU1VrxzXpMpq~#9yaD66YsGZc*H#N zX44)}vP>VFXg4H$$`qq(oi{%LfhG7MmL1n4UULr-Cg~(6j?a$~jJH(rSUdFV;TGt` z-jnu{p__^KC3`oR+1oVc4?WInhXejN6CG0-SAI9MThSmms}jY;0h=sgW#6Vddy7Tu-5BE9h>f^%X|(r_;!VzFJ50_wEx8>uzgh`>JQwF2sSF!&rHU8c`R` zXQnb_?lu7h{XyqsSTAuyLOYZReBZyv(p2NpP*=L-zx}{Vd^q2jL9HYJ$Kh!8FvOVv z^m((qKO>;2_xUwsi)7DC+ZNr6)sB0bpAOqke5Rd@C*kD{+JqJqIxg_z{^mYSl zSg0#Hh+v-qA&YF$td6)>p)n%YzUb0^H)Z_Ya*l` zr%rrcrx}&CM)(S!tL*u|$)TMf&`Vjh?(Vdd$$hKAzjUf@v;3^Lah9TY2tgAl9kgp0 zPD3;g_SJWH+BTyj9hU~|FDpfYKp+W&B~hEe>@7~hpY^WfX*zncF;|EnBF(`<4ZPpZ z1KUAkD8m1gD?R{iU0v}pMufl|{+AB3XJplb|I*!YIXKG!Q%zPJ-A`kr+Z@&Itt?@{9_i)va1-ghtZA z{$0(3^hB95hLR}W?N6V%@e_4ylyMKs;TYNwNBYxw?VCKmI-VK<-mC)!`WWRmY`7WE zHK5^XFnE9|=ah&A2tl!pjhos%e=IbPaRajU2*)n9bKuL7gzw&L+d-T*Y-5Fp9d3&D z{<4|gfv}hVP|Tkg#7RiSj+KodY#%_?Q503F$TcLyb|>Az+YHYx0E~b@WU#;tY!NUL zruLWP$gxM<*|h9ugOK4hMgRlGP`z*Y^=8cI@m2sX&xo-~3JFUX(mwy%fkT?tRk4HF zAQ;`-)54G&r)RVm9xs+=WI!JV2uv`L(TPH|I?u|7PGyM?2HA~Y*QK>E{#jVzGp&{z zsWo+z+5l}%^-tuP5u)rX2BZ6C@(AR9>`fF_7roZGu_r*0zgPbf1_6Ua3v=M_mth4W zS2HR>c!p^Wp8>mMrTy(PAgPW)8&Bo<&KT~{=?Y9>yngg41l&J7SR5)PNb?rF699#+ z3_wee0Vs?y%rU#zuVmJ%P+szFahde3!wOQ>N};JmNVQ^y!QJ$jHB1F0XaEBBEwoV5 z{B3VDF%~f{ck=@JWx4AzoDsDm{K9edUtT5fN9d4AJ)QlF@tT6gK`8IHi-u` z5d9PCAW3o4%TAjFHAiZ`K~bk~=9>I^9ehg_!Id^O&p( z9BmxtY!)Rl`d8sprE|-%xOXH)8z%wI#0dngUG`{qNnR_bmzIcaZ>hVI9%#wnu_}A8 z(}8JqZA@h9yrEG^+70N5JewJ2$b;*jBhj!{sE~nzjqPo5Kl3IBS`)ph7tB4IDfK}{ zK|l@Hc^o)ypt?w5i|`nHL1T-nIS!~^5RD+`#F&3`OrV)sdR^9%xX~Q)ser{ch>HBn zvajAz3pAe76QmpWmMs_hWkj4aJDZ@?+N9Qexb-^%}>U!yY(5v)HCXX)7#5}N5! zwYmtFYQl{an3*q$N1dbnQZS5(5RRSue#>r8x?iMYz$nwYi90z*{b$@BzQTTEdsIBx)URwt9 z$Q`+_%TfuXVIC^cloj3AXNo9z1AE)}su8(|59TIs&}Bp1e0v)w^FW@{U94E?e0zPy z{FZX>6WbXkMW?bTMt^T_E%x*jyDPu}Aui;Ufh(9Skz&8p7z~kr9a$QD#=?7BIQ_Jh ze+GPM2nG1~o+16;ySu7@7`~z&(6_$t5Y4tkjV$m)OdmM2gQvuhV%3=2XT!v-AUrDY zYnENgZvFc13=tO1{XX9FeatmR{c6IxPCJNdiuI0I4%2T_S3&aLeiK%K0OPYePyCGj zo{2;LL0*Jd&n4KaJruYv4n*tX4WqWT9=1={q(@ir%%yRw9LgX3V*XORHvw8ZDEg&d>LTJ5J zk^4{sDu6g(z}qFqGU$y6aSa8o(yR*tROXvNtEn4&q!lx|gQx+0@TZ)j`y8cDC&?9$yfgk%{#JL!}WW`lrYG?VoFMV~QB1Vr*^9s+vp0f-5AOb7v3xpK9@rU?D{;K#P!! zt>(@o8!nH#!kUk~fP__tK_eEK3;#HG9Eqnktp>ztkCZj2$Z}n>kRT8ZB43hxa{V+c z!%aKDGU@i?mzYVVo~?GLQy5~|P+?YHNZTN&_t97#nUw>YX&8*ZH${x_nG@Ua4-a63 z@Joj0Z=G_*6w5BlVqFX4n_4!=Y;qR{;w4G>a3=LQEu;qqpd3epAtZ(PJ5TuhTNgSV5`;BmsFv7zI{g zUplr$8L&L~&^@D}0l-_r&rV}pL2{L{}>Z)Ha;g%cymCNgNmHFIaaBd~hxHgP0#-hw(FzTzUke;e>>+9_c z>de@`$@HW0VE(Bp%EO2>QkS8TVR~*cJXIM_qsckA^g|>LCR!ji-}bVCYWXbCJn&Ry z9xuEM)?I+rgAF_fKUowBHS=>-VpE*RaQ>bzXQIaDW;nPt&J>NPdD|U z(zSeartn1hNKu|S$%!M0w?ax*S_>}S*NCzKR8@3!Os$olUwf;q zMCOLd^?2%jgTZB7tC&DG1duJ14UE`OpG>x7#yq(BH`>*;B*O&fcs=Y6VcnmU2|Q6D z&RXX=IRe$uwm&LH^X-t9_4-NyGTv(8lC3-{Y3(x*VSrZJ8BKv3N(ok|9X$3Gzr1{+ zl`7>3?~WlMRB=)It~u0(*;^&)Dms)*^qim$2{1{d@_An0Z@|8#nCzNz_KL3EoW2$- z3vO}|_sA|#Fo!A!wnNeNnzGlhEl)|m8wnRf{boa*TbViCzq%RMXWm<;On=U&<3_4t z#~VT(tyxl3R!p*<`jT?>yIB-WY!f4Wo(Jj-iT|(*)^4z@0Dw+>pHpx;fm_cjl*Fv$ zw#QJ|c1DJM09NMrPt^!%(OM871^|#)T!Y!x*LLa!eWIA8M_*fvoNhlL3Yy_8oS%5j zt#xSZbU$GP9)vv!6fnAT;Qp)a$YLqz`eSxToeS7{VlMo^TzLK)7v{WFdaD7kR~ zzo#0AM%gqDZ9x3B)_I*tEqP0&PG*bcx#eN`=iK|w)XVlOQOMBkC5v5&Qu`$bIO?T% zUesQRqDax&NCj=7A;!#G+Is*L*5@&)*3cMM91ttP> z`;4Kr`?e@Z0=b|5sBk!#s976b>T-;t1NdMy@=rSJD$UttXF~C*ipR;Y1qXZfp{Nc=V zRw4FU&wJ!6)b;e^jaWZEgW!K<6{=`hS88s=imUfQwRC5%9&0H;%t~*?NVd#31FyvR zBV#OfhH!wd;F)p3b&s!~kqv3&HZlofo{oiO)3*MK?DCB?PPRkRU}yRt#WPc9rshR) zk)w>@w(KieOC>(yorbEbDNv2ldRNl!MNCjs;ilZx5H&bSGT!3z6Y}XgOZw(D%k_#G z`0L50y_{=458|N1`nehKsNRJ;_70vT@uxQ$75xPcU&lw}PkPQ{mD7GO)3kwOr?Ch18L4Mu^fZSo9mKx!m1KV9||z8qw;xZ)5%67$VX7Gbs?stluoLEco& z)kkCA?Z%!|XR@P=T+_~yR~#5u4syys&86$ao~ay^hm@_`*)tTDwP?e9WEsHps}H4&qz!ddf7CGuf|4zRtY}=Nse$(fM5y$Oif+MP&iRN{*=I5499OOUqK3seGt^0OsNQvh-cDWRyEx1%JMKK6TQpsaS0Ii z)X}2{*1ukRwZ%h{{o1|Q)!mOH;$b_|qFWO;g$-kd3H`R!U;yYNu!n*ZoCJlxOFEs+Zjj2o%7(>ROlDpuL&#MCjy@+}d%gr3rDaJRx7ixx z7XP4}Xqd30l0TiE$8ztVDH@;FclyYtXKPm=_KagX)u^OTPxAsMt@9S&K-RrOfvvFP zm^k$I8PcyBfM5QYof1Xq+*4tP253||*9RB;4)m;ki~t!+m$&*&@ESpTeT+!g7Ep3K zq1mzyc!)~|A2?yygAAu-o5ZH;aVE?UQ_Nqo%*=kVYEEb2-- zgt?&qsg!?Iq(mCtc zjzUy2jC)UFZR+J!sL0(x7jRKjZgM^5P;P+}v?Gl>x-Jse?RsDJC7ns9;a8TRSFbL( z5Gzml9FvUnWvW{pXFQUswXic^vgC|OZ(Hj=V%c|aHd>qIbmZD4E&(_~1MrnX1J6KH zrCJX!u2qIu-)LZNI+f^ETOwjW!pMo*T^7TO*01t&9Xc#qC$<$x*^S|#eyw+q_K zu54{H>4H%m#8>AviB}qI)zXu5$fZ9ldqO9ic)?bz;TYg>?_$VDD9-9mYk-I??AN=FO*g##L4m6J^F!93TC)uvqg$)GF1IJ`8n@lx};}$od@=JOPKhp zei`+o7N28oI3ZaSHdBRd5_EZ*4L<=m%{d#HGAf!6>iK=brFL8qUR-2R#&k+pZdmIwHrY$AMrgU$H@1aHSbVy@J z%@`Di4^C1@jJ&$SKM@oB4h=CJ#Av0%qV?>%LWVqsQ185>8;MSjWUovE5wiZ5(0P+wHgsUd?prUB@I zWF3GV14?hO_c#}>KU9PtS_V7~# zy@MNFri)}eXCaiLhbnR@m?M4>4w1`eQ3(q1wlt4%2S1n5Sep8cV&nN~NL-gJw(yYQ z^#l>1%rbkU(zfPhx?&^As7RLQ2AmlqbOn-%E*jHMQ;s@o`W5DmF*ms&U)YrHJ!cbS zLuPTBU3F{%kU&g2q>)jaQOBbAq9bt{_Oa#v>}Ep85{NWWr?~{kZFRQArN)ooWjDAC z>b()#4xcj3w#nH@VK~$(H5o)E^gp#Af1Ul3Av$vm%bw}$A5n5waz`eTCFfH2Qc-*_ zS#lJ74$k}K&uP1Mk!ByNC8RCHx=l0qBtDp~%J$huE(h>D4f10Q)#x6xoml)d4&XvE zI-r*k2{*Wsc7bD5o(0PN$kReMn?$)@U z)&D>;K(FEnoQ&20NU4<55{e<_C|`TRuA|Y0r^TXNNt|&)duSr{1d84bKTDVh`kDz@ z^;5u+R|-lA0~)yf=x^mxg5g!`cvBqTZlIWz-BKRO2vf212SdRvtacW6{U2xD$>-x9Z5Z0?Y$yeS*{XunO$2rV&#P1|U=p9}J}HJ?Lmk zTL-jc45PEd;|l2Ffqu79u7X^hH-VwU-l=$KgcY85jpp!OxznV*!mIGjair@J_#y1y zBin?Qlu=>#U>o>IkEZbnmP$Y%24qk{BwFAAK|sF0tF4H4&}2Z%ZMRuhbjc3Kg#JYc zq-E1LlO~?wP3&_6kU(#MKm;a;ftd#+g$O7NBdD``npNphv42zsjSL`KfwYW32%;#& z)?JdpnT&H4()^W!36zCNLQpvaP?R?+#X1h<>slLgSY?Unpb-Z829i_s4thK3x6QH< zvHc3Z0sIsxxdI~Mzqny|O10;496%vbuJaD%d54gXXy#yQj0ZvnM0tcD!I7$gLr5eU z1ekH}IwC$!i*K>Qi2wl`#EA}963cC67Y3BM9@poRX{>99>q_a_kDHw87__u=l#EyW zQ~UaJ3BHJ4z+}$6E~l|nZD0k65J(}MHIg);09z=%bd@)Bs@w?05Q1*vIT9~paVdEf z3aWdrn-3>@fY;G~8h=g}U8#w1GQX5tQ+fKLwaYX3(A?R)9KtD)88FM>3>dv=SiP!R zX+%Uon*wb*BbSP|bP$rb-*9aSTRj(m!(!xyiS(=(-$g|dd*+7*OH%&`l&As>%Ux zChQ*fUeLmZP5fNQ7qwmsp{dG&vkp7@}Pzx8S$@I@pIaGE|yQhV@zWyikY&&(8`L2 zi{GTy39eIDw5StxpGy}97J$#Y)wO;#bPhSsw#JJ3rSqoV*<8{fJO?#xxx|eO0tsc1 zgE%85+C`9VZ;S_7gvV-^e^Y7Z_9Do3L9YE$D{j;wtqaKwNJ*)SO7-E$IeQp6yk<&C zYjJ%&kRKudA_b}t0KW~^>@x;?L+ znqa9~Wn{@EbT~jE3+|(a_#wBblm2(OzchWqG`3aiLZPYC=HWJ{0-3hceG(@$0fyf;C64B+v$`6` zy;_A6z);Ss=*c6dX%aULd~jQdln-PyMj**y zXo$e~!X3(F?Q9DH=(Ujmk?9_B1*(evF}BNhlb{5u@hHDyjg-YP*{+SRnSX3ccR4-g zG)MEXzuAn$Em@SO!5GUhJOn`^LNH>LC_vZ*2itf^Zmcv@5D8h^WS6%V-Y0=_56w$K zyIydBcmkGMAdvTx9|BZUwJ_Q=^_?E7oN-hkO0Noxu=!&zj+1204nSy)cvB@P=mGB# z?tqM=igM0jb{Tvsmu~jy`DlZ#4JSrw?gaEl$@jQWbO_ESr!g^)r+}KX*mRQaU6~Di z01cmb<~2eLuZ5Q8bi-+^Ges6)gj~~h>_pz}qN(Ygyfn#>Uu8QKdPo0c>cf5&Ql0He z*&#xQe~YQeajg6P5HzbDbF{FaPbN6^uQ{EWDM7#-!!S-d2c=gpctBv#)k>s=FmQxc z@15{Mj#Ch8&XIeB#FM@8kM+(AXoZ3g+Bv_8qmC|=_#_3!1Tlmk-P+f;cdLGg|E9br zH99Ib4fF(~nhnn zM6-2NJ2*JKDE~7_OP<{o<*Cyu3JE-q2hh*@-}c0{M+wxbq$UD4(x9=$qN-uo$I8O) z{@QCd?qT|CBJiZu;~1k=e9q2E?(Htgs5fq(bE-Em8#LXiNN0loBrSD7pl0pWP-lD& zJaq*NAIF!zOKUh;GGkE&98SFD8}m?6sOS&|qd(FjT)j4nPNdv9F7_1On?e1$IzMd9 z%ZSmwL2D1i1Q00F0GC!uayVDehFyhO~`MC!?i`qniKMgg+1__P1SFwe|(A>lKroj7Wb zkqB*s@VgeC2v9InFu|(=p=Je>xTDgcy^aa|Nse%026&bo1qeRi8=P^*2yt)tj$IQ1 z^J?R_xX&Xw!Br3^Q)qoY{{@Z1CIm7mL0}jrSM{;er8jE;P5xdn$$Z~iqR@`yCoujX!0=R z!9#n&zVEJK9(e|7ZRMdruNh8R96$p#@f!$YV`S$R6vDSOtFkCGgZnJF-pl9lEC&co zITKR~6lfH1mmpw}E1$O*Ox-rJ&7fq-HB%5fi|i<3nW%$?SaBDx7C>xM6X(a>T-gE_^78IvfQr+I;%a4l!TosdtpDm zWKdGOo>u|&NPf0FzkDh@q4hFETm1YX#FBNPNWLyYGc|uz8tp>LWP^Vk6Hjtp1{r^( z3R;%T2%>A|izvT=5y9HkxOlizoX@B1H~~c&Zwtgl@HMU?a-4XRr&(EeW8BH5T(^Ik za**+PQQFq5F7^U2N=j3oB_A(-ZuY4X`#bwZu%p(2tS|+OajVRc)4RyCV99H97-nEf z8r;Ho5?~L^hU&s^0YAv1M4%EYh3?-mY|g-Np5-|d-5qvB07xW|^+#$ih!qFD`r#IK z^U(^EaYimNt4LcTrGgzf#wf?46Sr-5_b00)>Tj3wa9Jf4xl!ka1!}}6rW(J(zqd-b zmuZvBk10h1jJ!b(UC(mt@lPku0gA!#!KdG{83LaFMw1UyY>6}&I z9mKd+Bw`r9W&If}vZ}n;IUnIi_#Hl(8V}rQQE8TyNEm08phkH`p@;?lyeHVU{X9UO zM}-2A111o~M^oppUPcGIMP7%yLfYbGJ;0XUX-aZae2~Qq1tl%63Rkt^^X>H>jic>GRpvui|0dH5y zdRkWrc(Vf+uxW)z%vNS&*%%9K=7_IA-icj4=6xnxye zz74t~B^-g&AS1|o2T$DBalf6?Ku8|A2bd~wgb^s0+uW>4Nz5uO`Z^M7J}YE67J&ST zV)#`3Tfc$Uc>e&+S;1OxaJkd2x9qJGI4;x0TyO4_VZ8P^9$+cp4fg(Z2G=xC@I%}A zV2IIE`ho8lu32(tHEZ?c9leNzs>E`f|9WPIh)oHKJKBnT+IWD?{?ytsBT4BBucgSR z0>+4uKP@`N1j{CH4C?#0|H3Cs-VopOH_pLZEucdRtV1DDx&evbt8WSOBk++s(T@)K zyTVo;mpPgs9@+n*zZp5~1#o0(Hg1d(yuAU<&6o1LCbKeCBQ#oDJEyx?LGHh4lCR@RFqytvp?_CW47vY#~L(kf-j%qM!B7+ zX3=Gkr<*Xp)Ip1=JqBWTdDTD`F{N#n?B?%K;|HqvPUU_#jz=r$*Y#N#F{)w3qc!Ts zC&VaKy6VfNREj;JRwevK^3gY(xKW!^!PsZ!-mA@iBRr%k(sfH#99L7EI^!cb;r z0!+?@aoV39P_c)v5s8Gk!3p~!)7f9YM@LSgy5H|%7I6xP9FVxDLI7X)HrNUXEsDp> zzX&9k=`Z6&$;mv}HV4z+hZV4iF(**%ri1OtGq5}^X;rS`B6`2yk;w|>&Ur!7pZ73) zSN&d^GJrMrSCa?Zyq}lp17n3GfvRcZZrWg^eZ496Vo&M9ae6mx<&N zaTdn*>^}I=5lntj|2F9xZDhm;!r+#v=kmNVqz^30Qp*pKgM4S7(d{;p#hHW8C5d(f z002$ZX5W=QCf3WIvI$&m>hFi2!Ni|DiR5cCa(h^pf8*$b7VG;5(HeuOb#F4$?A;!8WHz^& zY&rQ>v*x}jS)Q^b)VEnHrutNV%7#@V|5D72XXg06Ni>%Xk&RBe(9F7GyX@NF-U8!| z`k%x<>K@@JrYrCzo*H+8asf^1Z)4+tQ|2c-fRI^N*?zHDe>7}Y6SkPC5 zrE0R628*~PG2Tyb=GvB{K+U`9Q-mLtWtCDcA26VFl_Hoq17W=!j)1Rk2uM8D%eZBoFg7?$MwXwQ#$8%`$u`{CxM<{4eE(x~h;vIL`kWys~95@Q07skG=g>@B%= z1~z&mXIdH*E7~l6krH|{pIio^v_cuccq)c5nRG0Q9zXrHxKTj0IcX<=(M7IwGwSw4b~rc0;V66eeVeIpT@OD z$$7f&Ty|#;PMoLW-tB=_o5@ntGESPfBWV#&mJ^-c#FKREKK~KGO|cn%OI11;{ijx! zgQ+a9g)N}QPqZSRp;Ky&m8m@DsFIhnW@h5EyP|#C#yX{SO{;w(n@7dol|G4)Ccs7P zU8krgT#0&udrD^nVRt3pQ{G3R0Wa!j;o@&MJ&Yvb+hG%e@G-9XO%Mo(SWWwTCxqE9 zC@yZfkc;wW;hq8wRt5lwR`ZBaJ;V%=)j@=sqNYN+V9g^fPC(gBAOs$4%QmtVLI6<7 z21~rQj=aK9?*qQ62OhQ6M4_ zxhcXV?-l4ph~|V|>u=NdG40FF!~F~${sK)|fS01`KJOjTr0cHGux>CMt&$Avg3j1s z8_PlT*ls2Z!miCpFwT&2wd;uvLxu&*NA1L?#1xGrJ`{NQ+%uX?+hm$IUz)Jb87ej! zKhO=#tjCKt&}C&Q68^T8arhBw;1Ac5ab~aNvGn>qvgBq+o(BlfL}g~+9h!%!B|mKa z^$N4(DuVu6%U)<7fVN0r5(Vkp+V7=(T~wP-*&!NvxD{nHtM3x=4=$^ZL-NA3t&Hrx zi0Uzx9czIO0>|zy8)9Pf)^4=-v3!2zJhs<)MmT>MN@EJ560~pdj$7g*5NK3QsIZO7 zW?96L6lC*RYS97IySwXL7~-)nJdOe23u9qV^fZ4CBen{(uG4F&NpkdnesV}7x~LEg zwfFIu<2Ws(m|PIU6yN4k@Xbt-;xV*bd;>ja#*L)Vr&mT2HdlxyhlTTWm8pTl7Z&Y| zuib#-Ihg}vlO!fDKacTeQYpY>h^bNY8AsYoGlnmzTee-ex#$knn%^IuN_*A$K6<^G zZDLRi(t=?9y(uV5s zMRkm?8?qu9LhOMcka|Mzr|90z!$fVItIp)GS6>DIS?EisesDXL+yX#w;Q=UpgYq|XB4G^U zr^D5#K$mNzMWy+)_;HY34|QLf0Q?{wxbzq0P5gzlz1I;NX7Gy^V3U!|3y_jhvUyis z8AHy+Pj}IJ{PKuo(DgS4*bYw!R%Alzc)cQLA!vJ0G4RcWcFjB1n-xEO9%ifja<<3^{|_hpAB>H7j@;xprsQf(7i&0pw&@=w8d zWVGP}d8X^5?odSMNs0o(rkOmWJ2SX)PaL0;_C42iRlML{gCX-{bxo&@w+UNeLY`&M zz&0Pdc#7N*Z2KPi3L-W^EYrS)dvp|xG8?#|$gMU_KQAcy5jU*g)yG_E3M&L`Ii1|z zHjnXt6wdj?1xn!8X>ai#7gUI+xjb+it4@{{@1DO@BWt2qKqf%esF;kp8}x2B!+}1g z%v|^Zv2ZQ73!s0v7o5GJ@=ah|{TtUZ99@vK*sAum0PM>kxXPtFUdR;vUAlpCnr#(o z#@AvEWh7(G;t-UKGY~ZNaI#CP=NF}7ej9!63q?}F5i64$`xh;wPvfZQkzN>5O_0TD z6sB^;?JvxllDCTi{{7=5J6w!)#E?kXytOvArZ_&&9}%3xS@%bc?nQhl+25Lyn(JGX z2j0wzWs}BW@JK;}Fl3GhrUarmrz|@RP=)|Rq>i|@z4ggE8`UH*Fo&nC;%+FHfz(wP z-%Aa_anWo1NM3rFU>dd%adR7w9>JNm@UcI5RbxzoRVt<>VXikEV8ig!9J>s88nN*p z;Wz5qJ{tPL=;=3wX0OxwLZw zZF~kPuYB|RFSk$_2IPR&-Z)ZZRBa@K+%vfuTLe{M*% zi$20U@f#0}j5hXJsp5g}A*V$WI07C{-u#vT)_+m90bOVm+x%Izyq^?0VwTMtz|}Z5 z8za{;KsIGO)C(gbYW(R*U*H08(cJ3i=TYQk8_}=xBQSdHse|-{{L-K1^&3LQ6=Ia z_Aq1yMjItnH(a47Va(bcnzPR``{bJ{xjwOd(V2>~W)%Fl-y^Vf1IgHJ!9GSU=fQ~` zd?AJ-JDg_Nc{e7~q%X`_u-RZIyn)b1ZEfvs&_9hIh`>hw-!SchZ8cP?Hz%@@Gi2vG zJT)Du;_1q;*uf_kw>YgwKeJ+$>#F~<+a=PmhK7(hqF)eGk(ZamH~>88 zm~dz7t0*e)tf+WUls*+8qY)326f9MhAy5toF4K3pVQQS}ds>AgoSGfvDSgy(`!_7I zRTE+?=8WEt63M!pP^j&wLG{PdgiYzPvxjx^kYg^MfsJjcIlLfbF149#jwK1M0g)ln zK4OkY3gb;0b&2y->S9!7$?kvOloox)G~mVWU&!A_g)$>TIjRnd(rlTQ^rb0~0sYv0 z%4SO57r-i>6WXn4Q2}JR$_&=nr1uxKa?<+c#aK{y%a7O{zl>t?{r^T9cu4pJh=sEX zPQa9h^Dy+&z6f{wT@C%{$ITCHde2{_DxP@k?*5tcY_sdg4pyaA?xswg>6#%i zI&;1TOs0XKMuS}R(v!M;#G}bnOz(P=GcPDd8p%D+zN4-EOulYYu*3TAPyNZ3qnUw? zd6XbZqhs+;DU)1yKg~JayRkXlvMT{YUfaC;#rcdLYD$h=2pvN{C+n7CZm~ zP#^(D$igN0GfB26BpMYBKe_dwfGZ3W9=B37DBKsW86bf5zYGF^%QTtcv~L!<==$;A zAJY?FiQ3uKo&nWJO2HUJ4z5JyBwl*SIIAR2l(7@=(7A-sjg6p9)W-r&82ywKVl6Kn zc@~f0(Bji3sn0^e04O)Y=(k|}8bpd?d_~D+287f}lk0Y2wNMgdeisju^9y4vo_BOV zE%Oe>m9^2QYPB}2i3YO+e16=foSNGEc#{+tzq7kWn254EQW!4gl3T+SG~M&4biTq;b55A?Gfxfr^Y5Uko}!Hfj~Z zQk33y*ZP*DDh@^8pO0W}czLz^2KdX8(GJeC9*&P|mGshXfJ}q1qyE#&6LiuDALL|M zJg+dMBJSckvZM)%(M*{o(L+kz{g;|yX>ghJ?M@E^jR&ki8`lqk*km#xbRSJFIDmo; z4_1kGT#x(Mn2Q^CDyD`Qq+@SEd`C{qx(m-VOIH@?g>2x+95lXK!m_E|M(=JX^){slR)8lw+hlF92&%L#|gg`h>8jyfJXry9gOs7IE^G#N^|GT;nh_eTP!T`&N z{c(!$kMS#Z-iMB|!3nY6E3Da{%^$Sy%6LT(&UUxFX=(aR;ww|&*wd-rTqIGYxdEH< z#WIFXx3nRavV(T-FxHEeq8B{yw<-Lpljd9*c|%c1sDBY)8P)@VM7O>S%z35xNHqiO z(lz;9mL}624atomU#QsDzk)^ihmq=Q?$Z7*UZcEXsSOz)(ooiGn_DsHJ5lIdZ{tT+ zcl8^ritO}h*~7=2=cr%|;EfXg)coxlLsaN`Uhf-m^gUmkw~S!V)5&>$wzI5O|dx67DUPgbjO!0|``J-*4 z%L-}3ut1h;7Gi#ue~le4qkMVDwSb0cQ&Q>nd+fNe5unWoKr|r(7b!2=+#~GYG<-^) z+pg%=V_18JM-$ud(>b9T$qQ&63PErt`Ul4O+sY6DyP+v1Qwh<8S zFP5HDJN*{l18%WH;Ld~|nym6#vlhuEQX(mz24=kiD^8A~6e#>Wj<+M}bG=+v60c%o6I4qtchH|Bj=tM(zgOBjL8Heg(`~=}7I|AZ zjziytX?d+Z<%c=@xO4heLIdKbH#v-h__5AAg%uc2pP358Ekq1-2B?TeP8-G}BH>qN zvLi|i$iO$V52ipUp+6|031b066UmYCF_W@7INFsR6UZ{)eyWv-`G+9*!@X=Z3i4pF z7Of2Gf6$2c(ms_$tEQ$?%4BSvbkmlb+h@@W;-;?D75|EaY28<2-FG^}ozItC$Ro zIhX`d3J;Clp4n5I{+W-#9soi@5d;)T$UeXQzop%kh3-U=6NpwlNA;>WTxCOx2t$8M z_`A3J zxX#;Uvi@0t9p#S)V|gE$fttqsUhcoIa*5IWTN~cX*fxdmFiv<3!CcC*^XKp&7-OJY zZ@@RZlZY)I!<5eV9dsKTwN640IK)5N=R2VO&*kV)Pc^MohS#SS&blSb&hd};V0Kh+ zK#AKCK?$u%vfGuY@NMWLH0<+jZ^F&U1Hu$KWaPJ1L~5D(*CA(ri^{t$#a%js-! z%R`aMH0DWRK`cN-t``jFFNFoT=xHgq9(KUjo2#>{ITnNMKLh?gD^D$E)s@sW_;i*& zfYbrA59X3?%U&naXN(sl&_3c#564iJct&%6v?xN7joS~OmwylOU&HkP_rP;Xy1^=7 zF>75v^^ENCR0iYoOSrcc1aG1dH$~~hP$Zmoub}dJ7^0bI`?3#PBr)~ zdq?8%Q~GOUo8K7nOVubYYyfrC!G4X8X1$cu={9v_yUoM?db+NnUp&+uaJk>pwKnF59Iz4NU9*C3Ud_ZO{!YV=own9~Kg>slA> zAL>)TNsHTA;R4knP0C|Gp!E7avZA?QPFU28W#@KbQ$n#qhc&$30UC*>hW8-=$irKR-ql}i+>Ggx z{bj6t%I=a0k+G8pMvda#VRkC$U^`6d(T+%x4~zxx;xOweG%^TFsM-%Z-!%cV6B+rV zxos$m+Dgs-*J~mE@b_Zw>_CNcd*_2GxJnAE*o#(5Gyn&U>6F<8kMOmFs};@j;2aj6 zTDEwz)idj%;FcjS7oBF4?D z9bX7#NbK;-QAny$7Ug%&PNaU3^@#{oWe?Yp+ty*q<} zNtqFu7$4LSsTr9Wcl&SdHI8gHvXeT`=YgTGdT)O__3m=B-niJ_K?;QYT-99^5T8}lZ5(&M52shFN76y3A;*4KjOuqk}+&e91O(Lvgmx` zsroPCigJNAXY8Hm`b}{%TMx+?PJsT6TgLtQ)H^o!cjB`|@)#q?kNSSzybI z5Cbr$9&Ydn-JG;2V`h~fCRq(v-meGtxfUP8q21KHi0x6RBE)65;~DVM-iuEg@qd&A z&erjs_1WG1z&2%YzYQSg;hoy9M!>FPuiHC4n!kR=+jKBkwrnH~7WDZM44?OuyB&5a zu;8?56;r3)xdJ)#+_stsNw@KIV>wB6%=s(Fp2U}Qy?C41y?9RN9#V8P7zJSl9nPoT z_ny=8pE_PW4`GBDG8kY>1OPh?$LaYC&u)DvUD3K3=B*D&|w4%--+ZQ0G23iH<>*#S!aXTn9o6Y1mE7dN4C1I zADOFr3KUKJBk&=R4^)Pf@;5klbMEMKJj9_0CFwbRa-lw;;I*MciaAe%2=`!#iY|^= zb$z_#*zt%YY^_lMMTia=@hCn5ICB;G*N<$K@4btV=v7yNl`Sjmx2>}>tzD-*+^9Zs~TTODY7I^+i62E-67tX7RT8!uoeBAbV{zhLo773e(E{)&X zoTBF9#Kaws#n@|XaAFJh!+bRl3zE=#{|4)^c!*7%X4*W9Kn!omYITc;!>q1<;|HUo^%^2v7hR-$K?}pTk{Uo?8T80IG#gmJ9rs=D z9m)9QqvVR(V{I`(IUSVr&pH86I-oE~AmNF>$GfZmPrxJZblg13de$KbYy@g%?-y)f zz%q5d&|EZ>$774a&|$|grRk*|gZ_=7LI#{A%j6BW5tRbeKAE$BK>}|{CYo9qg3y5D zkiTLol?HA{Dr^3Wda3Rt41`CrtaX%9;PIX0wnT(@ohKPigXi8kU^bu1m5krNl46<( z)BS_c^-9wbTF?d63?SEZdpu)}TlFfl0c}vq{0!DS*0c44Ws^lm#ghYv^4?l^7IMoy z42*|+p`*230&>~QW zG^Yq2jxpIWAlbS4uBW17n1QA9s{xFSM5(cwN62b>?RLF=!U(ZhQb|Yv1jUYx55f$> z%1sLw#*8u_iFFIR_BT@4!--)Q|La=~@&xa>91qcIWQZ-7x4%()UUc-dsFbrW!MjNqnK~mKz)3o45A6>_Bw>2fUr|bsBzN zp$xh;pCsMa-~_@H{8s$CDso@ubr5v1GJ-m3Wk-J1wFg*Gw2^#sYvZ0Q^(#{8cZq8Y zh$`56x-ch9QPCL&zLvJ?>CT&JtXRQSD&Vq@5hNo(t>(`^dY5)8f-m@C_& zmyd72TtNLl@G(U);(NaFXC*;1|AR@ofuc+zgURBA)$8ii6h35i66>U6b)lZ(wVpxs z3*s+rkt(zz;bH=}ffJY}MciDq-VA`?1A@$)yXJXjsu#iq81AA)RdxA`E z+|Qijh`i?qoYO@t@%tli_i{K`F1P4dKJGhbrl&_cd2^61C>wc&D#G3(21f~RqAvG0Xc zfg4(Z#bMuNI}fgq5ixh{C(M(& z;{P%>rodgMgw#l{{_qVK8JLbtkK6TvIAS=8ON^RJix=IQh76fD)z@Z0+B=ja-;B{RK z;_6x$$;z--|)1*kg$V4O0yt=^7y9I z0a6D5a9D&BHx;c^P}MDLUN*uEWP#h_$I+O5z9{W}m6|h82y=%o2^NtJAF_MU(rLWzU{0-cbQ@cd``F#PwpmO75P=4<&Pn<=f?2L zL-#|f$UVsf9KerIPvU?&VIrbuyBMOiL9ZiCWn3B^+|@0$Z4{gv1<4}gkD)UBFbt%z zZA*tN)9Hytygh$K3 zK&c^rGmY4`0MVfUO8mEo;o-^5Bs_1Qm{XjZ-eTGMTCn3cv+HKEg&~yB7>S>?P((mv zoxay_pe0?KD6IjkV^SyzFHjk3rcZZJ*JM+YcCssBeb^3CuKd4eR4XMc$7*#h)1esx`=yuFE-`#m`!|GhwU8a)^Md?oaT zR?*a05nJPvcVsIUrr^Nx!vqloo?x02^Q-;5X+H-ZRL2e1io<5Pxed$^A`?BjHAW?7 zfcI`iL*FP3UiTv11PIH+J$X$ttNXjPYI_}G#9k3WA8y_(FAl&S`ZUXpwj%CEz7W-l zGQd=8s1Db%5MYRgHI4gF{VS?I8_D2WVA?uEg?P!hPmHDOW1k*czO7al?BOxFtp1C? z9#~{J2t*%WvAO$$f0(^d*gXsy(rh_IoN_H~eRA<98ApLVB}b%Kb{SOS?~tyNkgVJ^ z-#^hhou#er?)zfRc;)DW}h(j*dD3Atr z2ms~9ZvZNNn~QKt`<#bouuJDJkb8#2TjqDigQg_WZEgy_e*Ts5QZU34IQQk=T+JpF z?Rd^#VtvUY`^In@ho~UVt@XaPXD960YvuRQE+sUKKEU*s&4Xb^ft1nWe-{&q;2T9> zG&I1c*fsFJD>0(x5jg^Y3M06w76AbnN_~VN$`HuHN(%#vu>c9sFM5xdxastz6PL+u z4t=U5jH}wiTHTN*$JW{rRFDo^NSoUSm6(50i~+#T_Ok=Q~_mvvzRp&{PCu`|pO2)dj zS=0OKlz}A}0#2_y-a8nh2|$_RdFLh4w87P!E7t170+K-j@$vd!`d5Qr_|)F2BUCH# z^}qQ%oF4%59hHl7)S$iHG;m4UZ+Egi>GId_3a|0~7&uUML8C#xlJb8jcrK|dEqa>< zjVptAkNJ|HdpWGolD0ajNRr*0@;HR;di&No27Ps!jx|lhfs|9(x5)knIu_Y~F%#Zq zH;7xG`Ob!K8e`Ttz%4Z>)OV|`%SMNPQaLlUIS4K?g(a~A4zCYF@yqHy$PoH*L*w7{ zU8I8Ys+Qh%VH(zptO({rwcZF}g=EzD{1N=CoaUi^E%X1><2-A7-{eHRHUjr}=mf7Q zL{e41!z8jCYWFP|B%6y#we3tHy@Olje@b7|f~M6c)KO8SIY|WMeOM^AmY^-dQ?2nH z)o4ip^_jbpQU4mF*8Y|DH+OuGt6U=6vFd_|EUCUehX!C@!$cR|Wc1yN{r~7t=N4nX z?G;@L{XjBNeEy7PH7|v=Q{5cWR5mbpyiHW}>j&E1*l7R0hWOz0;m1bnO@;+phEfRo z-&xD~T$hJywF}WKx#0rN%x-O?8C0>4^D>6lbyKol%W-c3CQDrI-PH=59*J_Dv}&{C z9pf?D`46Qf;Ji=nq&vYKxP5FkV&EfSZ*y6{z*oRf^0jL`WKRepIhA~U`ayhHy;47s zm9OSFy}nldNm6!quIel<2_G`Q6hQT`tj7B4OJB>@>om6(3JUuQ^7bcQiG@p0JUt>||X>@K{ zd?ep)`divsdsFPVib>mSEXE2GDkTrc5c7z}LH}b=O=mSoI*;3#BqPs*gisrU>rcs2 zN~b*DQ6MOqs`3S0;={>mY4>DW(XRV8We}b}D{~lXmrgUM@Zc$o#mZZ$(Ut*z^248H z@xw0X0E51rlX%i0^hP2^nOKEeq28kB4JdKS?{&R2dl2$h3IiL0^gS&2XdwMjt)u94 zgbS4VotcM)RGV0xIQ|G33|Ia3vaCU>Tgy@BhAz}M+MoR+k#nbz9_E(lCA-VKI+O{k z;HbJDg<5!n^uuH4jGp0d80P4{4u7O5$@gjHQ(khJ&Ebvjjh-DK_&+oVlE$~KzjgJ` zsSu)kI65RXx732(SQAnx*dy<1!b$XCI>?q7m|1HT@n9<)`(#%vED71s;zPn6sxPav zE~iJKsrgQKHCpHO)_-x3%H(tZ1*k>V`9FhoN3Py^nD`QGg8i2phHAsL)}A~*ZWt`N zE&{_=WLS;LJqH)$$Vkq#m{gPSRvlU7F2eU0WG&__U{Kn2V~UKE{4I-HUB2fleh|9U z644ImxIl4ItcU+xzy?6DWOb-8AJ+gwEB=W;&TmFIdNxX$?KCF4 zzp2pYN&b~G))`Z!vN`viv2AJZ#!q!AJ@v-!?gs~%b-0@RIL8slK5@Pt`sS3-Iy^8z zK%fP>+E`sS%+JFXTBiQB>03vvU&HZ^&+(Sc9a3n&)S6N1(0DRb=bel`Tg3zW z!pJi7ejm|$Se%;1@)oY8X~Cod>8E_4eh4HTl_0VkZ!0DvYXdRpz#f8Jj-{>2fA7DS zKlI)A=1Vj8b55o@gfYsCTEF}42wMPLet)dxRoJVZV!+vcG99~$1Ycy|*>}#EDZ&H5 z@mJ&}FXAg}$;{n(k_<9tqudLQbE{=HKMb~+VUB59*F{7#sI_4AI(|kSh!-mZAk#s6 z$@rj@&0JOamZim)u!791&2*+BUX=$y^=@7t=d6?Snf4G9nCccTapX3X9tMZ6lXXl93X zSS!-PWpd^I+sRiYiRs^mkCw<^lf%S?VyNmc6}ukng5OP4(ySfcGYvVUgxZa7N+)zkr>(wu@+<(kn4*#ghbBSU*@;VX4*Q2?JM8J&F**5%8yM+de`jT^8OnDSAJ?#hfnWr_&VuR0 z!6Q&TgFjb(rp$4#ECMO~Llzp~z7fMivpsE1cYb3DCoef(@MNsX(fLX?n#L9xpmYmwxb^@vGl)rD1?8H2?1T- z5W&M3cggmlfDo{O!-wREzmJmGTszdIBjnh{?m2C*1~)gaY`zWmhc)|jq9;pwe%O33 z+4|PLXW(^{yu348OO8-~;Ke$99>4?q^D|e7)rc#LmJ~=o_hvm5@n`5F^+}x+S_u2q5Pj~p3QG> zrrW6kfihv(>#BE_DNfa(*hy?xN~-;i-5=O)>VZb!1!}#8RN{z4Bs|{7*+~ zJRu)t($iF4>8wUZ33EJs+hGhX0RRqRM(l@92nfMT(sI|+%6|90p#qD|DfoFzE|7IA zN0-6jDua&3$?NfA&|aT-NHWLt$!pi&Fenl{qfJ@2K*oRpWAi{t6*9b6`XbZygL<1u z>1^{WGq=&~xSI|KbJ`;V4T(`f%JZ2;^aKDpDwaqpf*^7p|vxP0dwLNbaqc| zW^~)J(Poe6?Ycm?ydb_X5N*Q<#9IUpoI)J?f-+t*4bHBrba}5b5!vNcts6zBEudAS z>;e^M)|idaq}#@DS!hdteN$N9q57W?N!=MfrWc1XVp-Q1A&Ru04jp}(l;_foVhHO! zr%$wI!{SE&zl-r(VbCO^*eF|3<*<&syt)G#u`rFm0_Hqgw$ILIcTIPcc@tQDsCMth zsoP)#(qSL#&>?$B=Hr_<2q~y5P!Z3i>I7r0Y5jZZ;s&G%^yHRuEz85v7;MR#tpFoH z+`oQ98%uTe%%_GuCiX6$W@l6*I1zM|P)Y0w3`TRs`4l9Ph&w%r z4`v|OC~QKpHU0&Av~DJR&4pSJiZcV5yliSn4EqO#!$Zt1{KFQmI>YKaW7r}OP43h{HUUr$S#x^&XAs%u>H}Z zFLAedZ{t*ZM-xkzVrI%*8@7c&asX^ROH61*c$hkJ2x6s)Yv47*UFy7rQcO+za{;Y#)w@GbDpm%DNN z{o|jEu0CnC3eChRfXf^D<%`B+Fe*C!OA%d>XB9b>V#+q8l!D%XYfI+^EyoQ2^cG!z zn^#Q0Qj(aeeXK<-ch)};hQ#mS{27r$U*(EUj{*LNkAPAL1xgr~MEWn)noi%l5?kq} zZK_he!COmNu}?nXUB>kYHV1NX5u8yuO*dhVsXes>ctnoaJHoSzILtgqk%tj!(fbd> zK+0F6oR;F;8|7E|EqK{(K5V|b-HJZm&f!B=uDi`)Az3*>w=hkV9|LCO$HOBC2#~(F zdRE{UXqJrxg~9d3I+UiKT6HK9V-7t^sZ`D zKZd>^a5$ zr)^xo>7Lgm+`j4cw_A|YK zF{z3qyxyxM^ygQ|mJ3`m-WNN}IUg{WTMrq1iJr90jj+F29z(f?wp`KD-(jCK^$Gs5 zfqsb|m+bepHVQR~2Zpn9iPEP?`N9E0E}z=om{bN<>O$@ZS1Bbmy+aYKQ{|6mWjepL z`J)rQ4s~q(e~kg4eTNkB*mbm>-UPZAIGTgWL~|mf!MI%JQ)Q^!E5bcG6Rv+Bl!?MG z#}yJHN?QtGzRmYJt~OJl#OA4TTsA!V*v!k zvQWkj8XNOip!<|qR0oEo!HIZhM_7-hh3tMJ_FhL0uM+4BoLQLczVmqyy{_ri5?mEm zkr61&Fm2zE}l(QOK-Grm8HKUF^X3;G=83k&!lp{b;GI5^u}eD zvvVh>PCpr2x?t8+J%c2zl``Ir`dY0_Z}qXRZ5D*;5yjHBUcLf=4NUg5JHmi^r7h(? zyaqbV?@yI0xhkB%iP_S1ogP`>hDw>PBr<&9R(LJx| znzG{L2O#%ZmZ0s4o-|NUtQq*`_C7yNc)1G+m1wD$j!Vo3ctYznvAuEXl~TR4T`g)O z;@7m35T>-VRuq4X0IQeW6jMkl*>7d;qsQ2esaUZYI8si};FvtO?vHiy`J4#XG1AjO zg6a@!-9FH~*+X7Z*Pbya!9qE~K1SCacOl~ReZHx7)!BI5#VdPloQ6pV_-DwV(QPLJ zsWnuj)$LEdjO8!8ow!%xZK%17B?3hWTn_O#O5j`@8WqqNDcs>F#WLuL-)6bHm&T#c$Vk8WQZ*+Ws%z^# zVd3N(11zp|Q|3QVLBni5wfgdxthYN9$G^R; zI!L;Ep*y;A2I{n^6YMtt?dM)_mlfsqTe2tsdUA_H@y(h*IBH4orn;2O-@+?$b4<1= zXJ`%Lr@dTE$nvEcS<;NFXS6yL^e#z0A?im6HKuj@-h7jH`C7GftwZXJcPleh8zCw^ zS34vx)~{t2j__I8>&9u)9#y;3B=aA6H?M=`_R6$2H>Q~{n-hqqI#W@@*9fT@WV%J< z#>?T=Q$Kq-ms^5}&m`zrfkn`jL+idt@`>!}*}?5wO)&LZOja0QV*|g^ySHD9-LTfJ zvq=_vt5{F}KE_3g{b@|tjL3b$n12^|n$50KhjI9BaG)Xv40;`9cuAWUUehuOg9hvQnH zx>Vi7XFd0)3VBrvLz-_-N(jgvGLUC`$?7*l!X|Mf####H;SU{eGyg*3*ys^<=%W#v zSzjJe6r!3qJ`KoaFr0g@r7rpCV-LFBYRLHg`pswQ4{sZvt#eoQI?5d`Z4~muNnu3(ewcvEE~2f=n2`6Q^TR5 zv{4n`gKw9ILw&O~pYzUp0Lp-aFE~m;xUDKaR+sXWUY0B)52y19inhacXCReV+f=`` zA;t8UrXM1YwF2sgGVep{mX1(0LW9uBHA;$6VYjvp4@#{=l!Q`7%-Z3k;IGnVer#3? z-3L3?Xo!U4#hB>1Z9n(wH4BP?ptM(gABq7X5%r$zbQPMJM`%z4V`mTMPN(TUi?RUJ z>YcC=(^bvn@?NJPX(j$4(8O)J%iQkzcV);j0g(aL37YV_DOo2qd3NpjUwRlKfZ*#% z-pp9jceaC8Y7jG*X{eh#-o>-ZA#?e5+?-Us z$g(#4m#Cwn0kY;Jug8KdB}f%6q$ROUyQ&UGD=ocJ_FwY>WOviP6C;Lzg1 zC=gEBv>4xs!c~7LS_+(sywkNsYAlayWa-a9|6l-(Fq(NeY;YTGAk?SnGQ%(uWa0cv zGdO`o9qw66D*vAE#W``Y3Mhc`1f#<3lUca=O!oM!WAi zRqSvyut;hE_w2-oyKLtWkB?Yzb;;xp6Zq~lfJLgRD)Y*oQ)AgV`K)1!8t{NuYe$~F ztq+^g(f-vSJ&`|`T?_hryll+T2L#zHQyXhNjIZ%zfTaasSE)u1MeBH0Dh{jw?6Qfi zh$ceKX~ei9qLVRdvj^;Bi-naGdBL~U{FM{H!gNlhBMLnevbd=r>|EPm6nh=(0`92I zVeOp1QhqeBr=;&tIoN94l~NKG+>D9OxNxau3D&v6lbrg=;&Nm50iDp?L;O4?qk%AR zr{7A?Wv&x*9VGB16Pa$$Ci4Oj#5B|4cKCtLrs3yHbr9Ou6O^*^%%kF>Hbv1=xOyI} z)&z_Sy=M(|t^6u8pxhf85(lR>=e%jz(5}DLk`B%#T}O>nM3^uLOX7U*rfU=N2{gR3 zIH+SRQo9q&%&?5ZcNya=shchLL?4=8^2d|CouXEWDn(u{1$yN*^-5KD{*-hFrMZOU z%{6{*Mm;@Er8IUL1Lv=A(VWRSbD5zv{KVxvu6y5pFsRmo1TAQY6}tL;t??|BQu5{| zAO&-Dd!v{8Zlu30S5!Fl|A@_8sGob&P>-VNmqiBz@%a-tdTNY_#O5QtdQ{CLiw~|o zM`orfjj`6Y%|qAT3_<=Bz_;bF{r`MZ_AZl^fpxNRb|kmK1iC!nk_UE(i$?mWEPlBL zFB0p(@8Iu3i6M>fhIHHX0wbY8LLmI<3zWGx$Y#$0l)bvyxi=}~ z2^FtT^Lg_g_ys*A8YQ_1`q)JmbM++%Q#z}^|(Al23+fGf$732NE}&DKY+ZdXg>(7)8PGh)lV*!;WAXq_m}ueUWX zdWO^7sJZ95eTE8ilbi4k*hQoy%*@ZI>mNvdnr~IUY;RLqxWXx0PN(MI%dVR4KC2_3 zxPh94Vj~fM^Xn4dC~F4jC*J3_VQ)NwzOAM|YhZ=H!0ciKq|_?d*)|&3IFl6pJ&DvA zlTp_1+`xPM9B&Z>8ec(X=avrtX_tF-L&3jeA(OPFROS#c#BCpB$fY%&{!hiFig_fh zl3}}eXp)bfR$zsIAxcyCr{=8h!6#x!EwRj9vuFDj?{k_+En8Al?Gm<{`-iM_LiYdP z0N9600QTzk*K4vZ;a>Sp^03US%Btu5WF&DVi^kyxylOK?cV^yRxp$E=@U<868S~Pd z3GZ%Xp-%hSYtJ*s-5!nX4*U|eFO>$s#|oWd0O-|cXXM3xPiDAv)h_2??^q)h3l9rY zuh7dg%jzs6H5RI!r4t%Pf; z=gr^+UFce+{gHXa@gocQ2>+yQ|FTm)!9|Xh-aVMZ!qi5g(a{Y%)MAm`1NeLSH*)*% zEE~4?$EyZo$It;EyN3Lg3e=@Fcrz?b%5P3IGu~6W^eEe?zzsKutZRI0x<}Cr$ z#BJr_L+L!E2{0z3OmlgHtjffc0(bc*#GTi?vPa8A-iSN=WWa`BT~WQLmKxgfWN2wF zs6h8YZr-{=@Z{9IgS}R7gMdWq^ME9OT1}z5ki3xKoPoojDd2eTY4Kxt+Ai)@K?P1&Z>3;-;u@O$?xRonSiG%9xsUQ$o&X0 zq1gc+TVoXhZSCL9349r9`-^2J<=2G`7go_FS1R9`kQk(sx{i4VZGr@(g43tivin5# zoMiAtHufq8fk-9w?K&LsKv0v~l+%kR(YJ)IA2v7F&wD<$=3HSr zr!7tJMg|V7?~!aM3F%#>F=IMuKh2v*2U}|GvFCi|*p7(XpYeEJTsK|zfFC)3fmQ{m z$k51i)CdDGEz;8t`r?9Nk*9Xqk*_1tsQlu{Ybkj+jz}e#sdVT>**1r1Kx0(Nn{)Le zX4FloZe*WfwO;7)pSjNF%=GY9DppbQ;fV$J_?5O*HI5miO|}wTdjuU#I|lV{HEN3qxi1?C6Ds$= zADvk8=gw2H>yBmT)W)Gh!BE%qWKkcPkOXBz>bRpDwnRB}G(fUILt(n8Z0}RqLtu&5 z8b8PWHu_%$*xtYqa1jEiFpw zM05@N&dX4(mkFfud_M7bqqN9Fz4)(U>%cn=@?8aTV~kD{t-@MDu|Gy1$)x!ggGWK$ z1D!n?-Zuhl)qH)@{;|^q>b~OkM*dp2NhXEOO z>s*|cSarDe#Ejz4w7F6LUI(yr^Ek?ovV_?)i9><1Z898Bu*sDjrFIZ7P8qycyH^4| zi&!!~4Ne`YtBK8TPV+R6mzz5|>b1GP*<|&^7&cfZRGNqqFPU}!?EHQX%XDM1zJ zm}2#F`rlruQi!N@d+K9|OdA+xC4CQwq3^lQ-Oy`U7deLhk2OBv4lc6~8~pw0xzb~v z1Hv9_s#dnXJQ>~;phF()Gy*85`I4kwm_UmN1)g3N6nCblt~*ip?{S#w+e~bfgFJ}N zQQYML4@b&|gX#ZYYClt=K%f%*sS*lF2jBRuBIhNd1#;Nar)IGpJ{`-hm)gLT%!hzh zJu!^9iq$eD9i4=lmj7lpS==w8ltD`TpZg+EH_oW-7( zbiT8t0HKj`9vxs~2BQe*#nFjt<=Td?C+?x0H71s#IU4}`kMIQ4R@8YeE$BhLtwGzZHJ%#6K;9UNK z1=7aPn{p`tt1$iMPWX|d9_7f2t4>erajgdUDWcb?`nNqv$f(XN=zL=e+fVxrLCl^6 z{rG-{6gvl_JklrZh!4eu2Z>T z%Id_C>0-%$PymW!xeTxt+6Gd(!lsB!KYiJT5xN|>QZX?XBo;LBiFDWcvc#gR9ZOe* z<%z;F9=EpRKmJvOh+iekL=N=z@$1;zq^T#hTWjc7h%arHLFo;<lxdqu9NBg|X7-yP=use$+$SDmyA5jX?GKSMHu{Lu8N^Bpzqm zH%%W6P0=Qck=F!TsUAyA$URj1e_YbQPzNPyqIv}Z4~M$2cDfog-@2S*C4#?qcWf8n z1;D~Loze|#nkm<-vV^|oGnx3s?uoeM#Cm)7rw*n}2Whf8tfaau%@m?t4h+(~h$v5# zh^Ru8`Q7E6Djc>;f8{bt;kX`K-lS)EXrYygKrQS~nLg>Yd$PwLdTszXDy8SDp)20K zB<`n@UKJ%E^K8rSzD)w!XIWP|Xy40)zfu1cE_PT}7wl5QkFN!PELbIc7G+TWkW7~E z9A#GX%#f9HNr$TpA(rtI7zFX|9~r}=hZ`42P9FD2JwLX&%4!D&`qSi7N;N2E&@$DD zp!IjISlF$BvX#ic;IpDV#Ma`f?42swtT*05DdiZ0??voF_C@ut1v|xX)V5m)an(ur zM|O#$7uuW1b|@Qn`cN9@#6fk!bWa@f-DUv}x7#-|# z4civA{78*ipkqE`o#9G4at31tFMyNQ-{-T{B!f8%K~F+=m{&TJi#71;Xpgta=^dpZ zJCpB>VC9~Eo^iKj5k1G`fz;K68A6zbVx zvG0sj#--br*@MprUBp&v4sw|S0Um#vD5k(ZonO7!#)!80D8c75odtFf8P1N|66TdQ z1T03E-E_eU=Eyz_9T56@=^ykdoDF8~Cn5g$9JAtdisVyQYN?9`H>#ZTXMxFqK8){^ zWOXVW9`X$Hf^(kM zmwe&RWuxM)`1!6zw6^y%;|onfctNogAX(HePApP#}#U&tDv8>W2r6ecvY)# zn(jqg8&sdE3bfh^c^AF;b+~Be%)xKOp@>R#lcr7PephH?H$k8W7n}`nQw1$j46P zfi-J)YyPI<4_sqoCdOX0y@$UppCSk(Brz_QX4Mt8-|D4cBjfD{FydzUx?D00_7Id9 zDj`OGJ!tgXLt@^X@NXguy_a-$q*fJP7KO4+=VsDA|V-MAV*4<}z^^R48mP7=aAO557mt{YM9- zK+=<^YDi1~?#Tc?J2`AZl^a!9T_9SmW8NrCz@o0NPIj(vX5|HU*-kYAZHwE^%P15A z_eHL}<{N^u+h7Sv_t@DFmo_}gz1P_H-*p9+^FF4P;W^!TH=92gCB?xo8 za8y$lIUfar;^ZnCX|(&EBKd`7Ufh8t6T@4(I3|5Bm(oFZPr(b%P{eF) z&;Bd5+)VXyX3e_L*@hLhTvZQpsC)wm47gXO zm#?!w< zBL4eG02s=)MyD6;9crzCX~M5|59$3702Og?X`Y?4osqN3oPl8tr!=4< zqLOoX%)oJV4OHTV42oIKm)xv~&fzI1bDp^_3o`M(pVfWuL$i0}5SXFxP+uFb{0dW+ z0Z;@$u*rLO1DLAbu2+X7W8TcK@w-HN5%Ju!$7`p#XBUF@nG^}PzPNxl*xMp<`Tt75 zs=}$9ocHqDs+^wz!wp|O#DGwgCBPg|AU34*?fxUvnQ>4A`vM&BpcoL*XHdAYy41#S z5)@g}i)-mh^>&m>=?yyB-PGE<8Q#VToHfNg#`O4^!{oZ3>~FZmfPE*ncxb) z;t`p3y@mA85}iMs>q}%?pVOn8VC>xzAxRdGeZ(DgLt?<-x#FwxjXOjvjy`+Wo2FBfJr9JKSmmw{UNa`;=H?a~cePVPLiHiwgtH%G_w;~}ZI75JuZ z0%cB?(4~1&v}=tETV*qQE@jn=(cp-3L|wQjl9MPb+4e6gYUHLV;%~~u5z9zGmmF*O zw?k6P;^rFt6Bt5E`XZ^Y$9wDsD}PFN6y}Y>M`ac?QDuERZ+v4OxO1K)6@jv6)O}!fQs1anMjl+DrDOhkne~`gnmYJ_SU$(b|LCm=XTQX3##v=!Th%VcGcIl7L z!RSKe%Y;&eOeV9=HG&}KDrtW4u!Qf5mg#%c57G%^rLe3@omQx1T|-ESoD zj6?Dm*?-GUvy?;?w670eJIJfdV3E!EJM-$Pioo#nR!1ap+O{spuI=o)P|eF1$AO#Q z%-bJvSN4gw({)q!djS}_?`kOzCH16)4K4>q@xqHN!vGE9ga8L(4g%?K9$E3V{;I92 zln0|8Rnx!qsXVM(?f6q!Hb`0`f@GaNowe(&9jptngJIa%J$kij6U8sRk(P$vQRypb z2`5W;U0QBt9(^*}&6di7c~9YnWwbG=aJ)lbfMLzs@ZAJa4~Gn>-Mf6*oDAVmqNmrz zVz0_rE8xZlYWci-f)$oR5h3?$GFbb-(e!cMr-Kq&7?cDj4VHoMA9mIM4jGqfy_Azp+^aAW0eE9nOP22tFo1 zFx(hG$!K&48{mX7a}t*4>5JX&`><`eNun}H)4HjrEd&i7Ki3Sxyd%cwukWF<6nt}G z7f-dlW_wkn(n!hnSr;+_S>(#bN>IX(soSj~MXo#pFM!^Cd+EE|I?7?k1iH4gu*_C# zi1Xz_yf)YEo4)~0bU>%`;yi}MGt2sDUEjHa{mow&a(&8Ym(vXT-K;b{Ki6ZIF>_^V z*rIFzs|H^HK)_b*J=v`iHGi$xHQ-8}ftP$^7%x~}J1i|avs60 z+yQK0HdPV6na!8~EUA_p(185_YOL88mIn}-FAl=cvdM!mQwP`RkasQj%K+8W-K;lA zR@&h3rLgrXR%q29VbeqW@Tnt5#R|d879#syQ0x9wsYgrY;XaYh>%nIcS%&N&;WM~n zO{kb771v2{dqx{p(RpUnf@Y6CCSp}3tl=O>X#bo-+%~w)oUT?O;SLO zKRr>%S_0QJ=j8!vsz^CK;`GPTvc?w*Z*d#}XH09Po_&z7-J0821%-YprJ^@(O_l zT9fx9)M+!q5$N0!83?r@ldgR!Dw2am!yzE0t}eI=rM{>8 zC)kaK5bvH5Z@zZNXh+?tzQkjPitl(0n~2{0cq&iHC1Nu+-ZNj{<}HS9Q5Z;lZ%w7I z+PUi)Hg;{qXbF~Rs2{xP#FkVVL}mahBYHSty|#}tR;AbA#Bq<3c2y1dZ*4zEl<`n% z)t))svUn~g&Kwso`ex!LD-oMYJ6ZPk}eR*VFmfotlYHV`YeHhdbDEK`3Potr6o% zcW|P`)*|13h;g@mdcr{*f*(+U;iQ=MK$5ORSXd$K9WNot*@PKqa*pJz3zA_wd zz|^&t=@Ha_>rLl0{~`D;-Vm=w&hux&`^AyN54mQJ zImUZE?&qDHK{0a~$Tbt#O-Lffgu(%XMN}e+iPtgv!o_<^~P#v|9&B7mIKp9(eJO7Q$|^CxcoI zdv?E;H>kNcuEovi$mSl!T`Z#go|&wFmr>UKZeiJs#_Oh1<@R`N28>Qw!rLRzFS#0B zJ?N?En(Ka#L5e@miBt*D%%U>Ca?p!q#Sh^U*d%4Sxu6cJ6nQa_&oVo%Bpx}Sb|sCq zPyBHLS19)jMe=K`9YNLp;p^Zu??~4@#s>s%8{UvXq=dIdTX|c)@_isYDOUAptYS@s z6w$E=9dBTdqijH58b?%dbL>kQpeg#;3;^K`ovj&v3>v~^DG;W7uI`Qk1%^4%UEN;& z>WjAGJC|wKA0%M2;rg=y)+7L zc+I9@Ql#w&vhVwhF2-*4&o+yP5m@?_|GE>< zuLT4bJ#r?F)m+B(5OsFn2wSwyv|~)L4<-X2PX)-T5x4Y1Do6Gm$i#Shm9B^_m^mjS z(fpNEb&&p_(^W&B$!OY^UWf`C;o4|eD=)8OvNAV>G;fb;kka3xS0Vi0e|-__u2&m4+r^l>Hj>Uj?24PFY_ zHod*~+1(-pLj`|z|6il-s=~K?q>9Gb2XuYC}DUUfc9CMbQerTdWP30 z!rDc3)zXj#K)xoBkOB$(z|ZNw6enHs)=uYFIn_iW(7%yUmO_;>K?pP!qGmWRf%h$= zDiy8Ln=b50AQ=iBV{(4gq@szaMQh9F{JgYY`$yjF+HZ@#9c$%I7rBRx0Avkgp}gac z&bQs#({)})mixSy5W9b}%)KO-Als2k(%OJsfTQx4IeN$QFA6-fZ?A&zM}-Db#(;VYgw4Ii|U_9CU{Aw(~ z^%xfyv_@$)+N~?dB*pGH7rC|lF`$?YwX%%Gsqj#=Z5Vs9*!*%N+~Cl8^vMbg$U^oX zQ9JXnnymUsN7^zK+l?eMNzTC4*o-{Hj9W&W8#p*pqWNf=SvU_qp(M81e~Hsz z2(U=!p|&zq6I62Fr)Dei1NNR4dz`>2-&CoWwE-Cm1EPrIr~9RLIwbJ-l-eeWC1<_@ z(K;p2U7W?!RcKewh;M%N&VncW{1vszVRi}oR1MJj#EJVBFCM=tnfYoVuY^6I|DtEm zO{#Uka(OQ>TZ}39-hk$U?ErvLX}@4wY`Y&Nbe&`Q{!&04XC(0IJs9ORtD74M2k@9Z z>7)XA*bjGKjB_zaCHJ5Rns~T(;Dvyx_wjKW&S8MjO4;xgq zNO1*iB_iZRDkc>{&GtAwaGS_*v zJRl28YP0PgokxiDTEAc>!+ix6j;As$H>W8C*EVoIut2|o77r~NxYs25QDL8nXxiu| zj}in&`cu9%DCGxrARHv42L~1XuLvW;4ZcYgj{0)vQv~BVN+k(eaHyNKKgM&Ub5Y#r+J=&rih&Gf8f|QVtK#&h)fiar`+H+LGeo7p{bBYqJj?(lI24z)(Ha1 zY{z{lIM*IXeVMd>v~CN%F91e9ABiamHXZ4M*0PR6O3D^@3Do%5(B`jAt2CFaBiFuO zBUBWU4nsEaB+qqF1TfuRSPSY6+ZmE=_@A{qvywLEdi6w5=8pOhh^WPbADHDSEvV`G zIYXnfWb^+V*PLLvMhd^Yg)+aT&2KB#whP7q!wi27GSzm~p)PzK>4w`kJ0Wvm5E_OP z?SG=DPIUe}g3Xr$_8!37>v%UZAr;iVmwPD3fjZjH%#$EgL z*<8Ka!C8p>VcO4degB+4PT%#N0)qp~M@SB9u!Z7=^Gl&`uKGr18<$K>lB|(5o0zH{ z`cVK%@ud9amNlThEElY>uQgswE{hGkJByx=g0VM4HNT@qjIuz3;H{TGicoNG$hvQ4 z*W+}Uxf#i7^Y9rdtU?Y_l}U7zcqhzJwtr->tJeT=KTHpE%RQ4EQg^V3!y})ziMK?i z7&(Eq79E_Knb;o(R|YPLZ@;x@1yEFvqQtyCFZqw{Mj6QE75_TQpCXDpkkFq^I`P#K zwM1M2wJYKrte9zOHi1tI4&vt15iBtN*4di*{j5h z&EQ}oOeg=&T)JUEkJM-$C~2D0zI{!p#SDFH&JO#PS0b7dk5iLMQ2$UHD!lIEBU~)U zn!EV6MR#@%tiw&3aO} z>Fo})ax9InzO=AwkNYPiy;(G>KL^_M>XTeqN)O;)N`D=vYVUlxoX0sxc_zEHD4`{3 z-90r5PbQcE2nm%x8vT8@k0zBtl0VLMapz~joDFv0vs%nDdM9X*R9VH%h&f*c`}dXm z%MG@(DwdXa(^~846_aFHJ@(WN*Z$qpxkRi6vf7JvE&}?RDB(2s+E2N_ zdB`iH54Rtmu|4@$k49c-KiLl7$}ZIWja6vzkkMTU>>j*9JUC!iXH$>1>Q;*YWt0n- zy#6Cm)Ik^B+f>$RyPX|jEuju;T5Gf1Pmak^+E&j0Do+A+`_A1lOWKiy_T7P#wTj(?n_b#7K|9|QW(gP*fjRd?bhz@ft!#nbtIY$37 z9R5{X96KUz7WzvAf(KBg2+kxL#SqSDE?LHHXPL<~4R_C@)m^D2=3#mVs{J^Nkd}B` zeRd=H#jR^OT@);xQX1)SqcGkryOj;5WwmD1Hl%i)epEKQLa7MVdU*X9ed9DBfi#Fy zO+v$5mr@vMMl^uKY^>H*-OW4NsIy|nRDX%AI&yFXv;7x^(r&VPGoD}DkFSGV@A-z3 z;Wg^bJtUee7T%B^uO^vD<7o1kX(X111!9po0^;4h136^*y*ez;I`r0+fgnK%@(ZN_ z@$k?nLXK?H7Y7E4GJs?j!aR4YY;V(djlfUxzV2Xzh z{t{lQMDR-7jLapA^6Ot;D9KAH3zDvdeu&>bhS~?Sa!Io)L&{`bkVBA`4CqP z5W`$=Jh9Jn>K{HFW=Jg^kglt7_L3bX*tuvpyq5gKS%MYizP@=Os{Weq=P{ z9RjK0gQZN3v!vH1IM!NWL8e$ zklY!;m=&meJ&%D^A7uB_94`5sUZCn1;Bw|+=CQfnLpi4+f+~Y#8Eylg0v}apd=&4d z3G(=v-isaIIKMwG7X$MV}c)usiNozghAqWk$f;`JnmKBO;& z$@(vR$L-Ori+c$|Z1*5ZGViYsKcdD}W&H+zFy2!E2>`QQjuo%E7LMGtw z;QPe!|7T%}yL)1)sAc8o(S1#}QEzq#8Y5z>=<+jLH{T>gm-~%=3$yycVWt#{_uXGPXe24I zd(+!AVDtWc(V3hDB$O}#>Z`p4e2=Mhy-DMiACj^)572=eB<=m@z`?YJT2}fS!CucL zAk|)}6o*Q@)#|zIej`_kAE72J68OUdB+gL+_`Pond+UCHhZ(tFG9LMm|`tmV^@>= zV@yoIA&s5-mR0`WF2o$#AqOpYY|LZjDV3(JLj=fBK}MWf9Eesg!p4Q!oNBH2^;i$( zmJH^iZ4J@*jLEy}8GdI`&AC4!mv$DD0OC94%_|ugjJ$HoGF;56v%gi0$XccK+?BL; zEUHy)#<3maqd07~7yvk@_R${r%(RAhQGEOC{Qj@FxqpE3pyIi;BvPY0dVd|-gkLsu zCJZlb(!qQx2lyl26!(vl74}Xu^y9Ijos7Svcv=YDXrdo~A_b6s|EM5s`I9karCe1# zT90p8jop9AZMrXtjDF~&0W&E0FOBX!DsrsHITL%kpG81?PSW*ej6a2gy$V*gr8JJL z4Y?j?RX;{TkkP68t-4F>Z9hyXV>CQVKLrGi77Z=qFaQ$DgQ((tVMzo4)IoZTCotA} zd>ko%xb6Hyvm8qj0Y0IJjzDLS7fk-MRk!`){7em)&0rFhbjNjvxp9p{^5L>JxT8Jq z!g$`%ZcgX4EZD~sit;XSr<7$7ne(xF9^4u~PHF|Ldq0AOJ|x15oH!fkDIDO#daWlzc?bw@DhOWZ>EKB6uZHh71DkCt& zpFX5cNSHfh&Lj^*`OT_I@l+;0&FXYo;qC(SVw)TMATd$_-~oCkMCL zJqzuh#e1uCkpW!^CGLg;gjfmyC?L^0&f@LpacRQCnwj15OyPi7IQIR;qasRwJb%M_ z8EaC3`E9D$c%$&SdNB6!Dw5=b)Pp}=#-GW&v##mgB=uZ0fbdOf;R+cxS0JgON64XG zUT38q;5*>LBbzj~i1)SIFXmahXNVNenx*+#eP|JsnC?T;t||C+S~P!b7pVE8Tm~?+-yaAad;)TMC`_AcK~brIIhOIdstaKL6A6sL_eQd&QC^VbiYTh z{J?c}c`;z>&5?~ZPpL(N5jp%ZEsU;Go^-ceEK6ZOu40YmEZ%PSop1V=uP3ZjK*^u7 zIny#hd7Rxd>EkCTn{m$0Yx7M92YqKLkc8n(8 zN4o7CBUL4&{ralU{QQ(%1f489vQ1?));t*rpzaa)Vy$428rkl+Djj?7SSOpHUvkV7 zSyOgf^?e&z#)aCbR!pQoq!4PrtD+Y-UXPJ%Ty-P1+WVKF)n%o78DPH=!_Vw61h1xQ zRy;e`QKx~e-Q$hRP>LXU3>-Kk9+d<)>~atBBg0XXw{6;uQ~_#e3c3UQz6CgHHA+% z=%{&2!#ucR$~xc%O8tE#ziDIFqJQ zmjy&xa0GFQ3=}I3GW&_2Joha{JE1*sqG`_u92O!CEw4)-tTJ5MS4oY_b z8HOK>$$gJ?zL@X|T{^=3ryS@#CRqUq}UQmaqgoSOP? zl%N;9=2$Sav{mz5#N`x>pu!X4{3Lx+ZjqiV+<1eHJR=b|U<>%`3ZdI*9S+VB*Vhiz z!qZw!bY;-3sPA2!2wJmfqDSMgaCXFrwe!H4-z-&L;>RW38%SJg&jSF z^5B2LVfM(OQgJAi3+FCV=FpJLdaXlVctd1-zf_{ylCcG>@Jv0T_}kic`1a1XyIC^| zwKTm|pJf|F=C@p#OD1yO2Uha$VKU?aau0rr4T{@PUs`v-QZo?1Koi;=UiVR2Xiy7BrAlAg{K)=39~3%SS^?rEOZhpJY(%R%E#JsF)Pgz0 zf5lHK-?QiE0)ez+=74XO;@j%SmNm;@I9FI@X>M0x{B8q;OF5sCT%9_nIc7wil{oZJ z3Wa)abA+8WbQmLVxVa0w&gU!I@2vN0EuROB^m(7K-PZcq4u^NTX^_Exm& zHJkv#vQ;$_L05q6pKV?YH5OTj(=#rUp5n3LofG&d_8~tZ`-1ib>fz}=>!PuHXgbcs z{abz`hFyHO1l%;GNTPQaE4n5tTp{|r9TS#)YBl9Y<9~sY29-{5&#TnJUIP_S9&|a< zxz-(Xn0rcwv>Jv~RS81))y8LD6QWknl~>ViVDr6ftB zyRbeCwk{Pk9IyO(0hsb<^jspBz_1|^p;w^GmiBXQjkCX0d-b*gaNuE1D^lmoY$XQvPvXO|T7hc%RLj}dE70pKO7?<5osaP% z#HWb4B^Lz^L&oGgIUk`x3FXyp5 zB*`zVYvsw2e%k-3jAWw(*g5scv`+G9rJue341YQ;lqQyfC!M0MzPsc*s8;0p=GA9x z`UM}&E4fYzpfyAA=)>hEc4SX}cg@Tle#cF*Fv1g=9?@u%CD`&BVGt* zCvt7I`sNC6vXC>{@5j zt^;u&%?b|pRQkSRt#)tVU)i_#oJo_TZ(GD#)KTj}^Ct@Y-^zkGeigxm)WUva-JU3Y zFygIe1w6%G?Cy^%G>_z8x7VNz{g$b61VXKG?HQu_g1-Z;&!P#Q+a`x6t^Rfk+cbV1 zdXX#AO5*Ia(W8VVQw~0=PQ6NOaBpJj^YLEwPRXJpXL?zDoHc)9yfh3oLoe{U{&Zm` z>(q`Uz4mY0*aMkyb|2~}5=Gb6Q|UV{>Hm)VPWlMAU`P*;McC)$feYiL{qH1Db9$1p zwp=7j1IM}~=idcaU8ksc+`i1X5I`FKtMg+%k(;r4kbGyH6E95QvnJoOxf6p~r<(HQ zg!Ns2qs3m@E)^sBpSah`7K_aZW_hQl_gAiiWsWkpz@HWf1cB%QOrpLW=PxI6Clgj{ zv_AGfTLtZniYdWhW@grI07}(wxGIC4M~9(c%N*IolM#X0y&aMpLaY=*$tszCOeLV*cOUgiy#VMs5B)&JOBz& z_=gA7F6(RmEwx&%CE*%@C`2s|sm1{3A^7y#LpG?`kqS}##tD=8Ao5RA8kSTOv|zaY zH)f~+j;?sP?a0?=3<&5I9E~tt5!vH3ed)$fGoZNzSXsTba&V;K znRVJSusokgE@u-4eM?pc)YM<&9v|tc$n> zuzvf>2_kMcGOc?KUB^~M0Kx$g?;-&mZr4(?Du|!H5``RDHdgz$z5Iv zW9<;7y@JoV$(%VheJeBvvU?RnryyLiVi}6&} z{(=tV#OiJ9u}~qvRC?815K=%qDax@xU-vPKO^rxa^?6lJ!l<)>ZHB6h3w^cR2FVjJz}E*XE|qt+J%$w5ti7K1%l6lcQOP zQMgubb5UXCyWNzi`l;wFzDRS0624vRk+_1NTZ>e(m72BjK}zmeC5bg@-$Ib`+#UuUeeYR_x8*Tb7tYW+!&t$w zX56Jue%+&oh6%`kCjFjyFO|3M3aKekw<1sKBJ}hl`{kFSVRLE9`1Ml>R%p3|Q~sRj zTk~-n{_z>j@QpE8$YYL@6(^C{l)rB(k+gdt_U`e*QdyCla$!WiI}o(4 zou;y>x6q4q@YGV%j*az8V>FB8qdEDAjS1xOz}tqR=J`UskQY9F;-zumbluL!J+x4G zA*XhmllcYN70Cs8tIMpDuN?g;wCQPAHkYfbglE9;&e%q?62xFcHvd&Y$5y>ua9;^- z$PyNMMcYIAkEFb=esY)o)MSWWq-y_ zTHC~ZF)u2U8G{@VAoDIjNQx*ZP8_lDgpLs`a?bk2k+hWpZ&BfMD33_jJ}F;IH!RYN zE}rUaPo9%QOcku)0F1}V};iq_VTE1?T7d6#I*|LH~&d^O_A4=H(oUV>eb5V3*) zp!djpmtG(z&PoHb9_`;WrLU8J+L``SHeQ9mieR^{B8Wv1>aSjgz=Jd~{F?_lw@5Y2 zG9w$DpL?&dIV3_5uup?@P>P-UTd^Kg;?^1box9jyW$m}WuuM{ zHq>q3Pu=S?K@c~%nWMVdWi(xb(m2=`w5dsm^hHDap+(4_aKXHsnxfLvHDE^uAPed>Q~ zP4!)w-#(~yLrm#Q`+5ww~Ix#DYwP7Bod%Z!U$a|6{aqc%VW1$en8U^@- zA=OU%d~kg~QX^VQu?jo?xu=KogZriDEF<1S#pg=NguZ&VrcuSKCV2-jXeT7@NuvWGQ9 zSWV$JD>`G~*}r>jGBPg_&)WO<_HL6Ryy6OC_p?>n%^$bipkmu251p@yM?-89>Tn|%S#;T0=gWA(K#)27W_*DAh1 zETRvj5NB4BIC`(A-x@5oOh;IiGRR$wA;wmB{cgt)5@;p23;nO4%D_Ga*$0FW-=xdo zw_KwTe)X9|q>C@D;NfAqNx_UeuCUv*l_+~6vsmfnXa5I8H3>|GJAdDO8&>RrqR?C^N=6m=6$%aSH?eFWG`9G5^ zcVb2u4&h&clNWgrR-IO>{@~eKx0W9M9fC5X@P< zFkY{xETVTuT7*Z~m~vrHZ>9B_Y=<<+2jKN{A}U>o_*#i_$(>;srnQVvZ-BcD2|%dD z_2KjuNP_LS9yP`0uhQtoqK&~UM92%Cx$NJA0#MgJCYX_Lb@ZRe!u<|LKpMZj){1H& z^sncn1TWvQmg(rAj>1zo$dyU7@GeKb@gVmnc|lZ+TWlYa(ch*&Z^$qQEik2wT+G4s z^<2i^rNdY3+)bO+KA9U;4Iv+;AJm)uNMD`31KU^nD3>bdy*c){P&W;D9}kB=d+peP zmbA1_h@||FsT^W3J_HCDjt}N;Q8iq)E3HP?Aw1PpTS-kAmK?8a?oSLkSjWm1>MqeT zB@H~>meh81jACy)=NRiIBFZT6C~7SL0h2FL1LeO=(Fy0oPE_v8^w2U$kI&kGqI@#y zg__a5?l~5e8(dx#sPF(lCM&vP35uZchV3uUgg2?NI>I|Q2s*A2c}0O|JWQTv&WS8` zZd{B>8}L-krn-h+K(t=4m+>Mxtu^HY`Om~JgUqti8Z;^2hx>QZXXgaHSX9SQsl=Z@ zUeLAbH1vnY_hKl%VfO3&25LD4`p@?vXH}Z5?8$t;D{iqbZlApYw@UUApTgpjaFAw< z7lp)25ZTHbAh6#rhWqb0)nrFTq>0zq*_i@st&E;JDC{!;MV}6CuYog~F*7A{ zU%xACsRVYL&IJ*eAF*kNi7nlo;OVEBL@4;pD}H0{o`zLTb6qmlUjtK3Gzm!Zl>o?$ z8Ye}o9Q??2m^22q|K+_2;;Hr|XK1lZ4`WTF%T4gBbM3skmNHgYy@}*4qY)z=a5Krb zO|L1XRZ6L349(X6im&T0abbV17RHG>_=iZIjCoi3X>)QY6=>4H;^jX!xCuJ?8jf&L^VfH>^;L|UOg*<#e^(b1N zsd5k$xHlL27)XQdSN)w1o7D%}>m8=Y6;*TV8b?~A!F5^~PioXUp1drIoyu_W4VZyr z9{sk;2?0U+SCbkmpU!LOC3nqim8LPP>QQurdr(uPB?Kayt?T87e6eq>#*9~CK&2`D z)P;@yR06PR;;wL|2&owF=)_@J$+3!44VqN(12%HF8pIFz>grN)L!$;1<+GKwMz z*iOd(&>Y8U=<6IZt1p2sVzx zwNjy?)%-YGnq}Z$M)abdbBPMKPf9(tqJ_(Mx!~4B zeP{zuL#6?+^ew>Z7Z@o#@Jsb9A_5%ZaRN2+WI}`UxM7<-EtQT65qe& ztX)KAm{`DsHHJ*$cjPxIT*c*eZ;CU5N!Xbb#p{52*OE1_d=uNzuRAC_@h4!z^P;)r zvEhkaKY<~;ogmw$KaA%c(2<73k*sFzX03hy5g6OF9n=o*X%+MR-y*@i%GvW7#RS&V zco8sGT^x`z2l%sYId z9$A@W_^fnHbfPk1qQn^X0q&FEYCl`no&6{8oe6}A2N?0;3VZ{80^5Tbt!kd zuK4_Ws&E99#I}!AA=fPazSR0R!P{`pP0dfnWgm0LG?o||;$$~da#W*G+|98-prtlI zi{>L;54j-ZZ`J1XN<0J@Hq0!$$ig_eVL10X_@~f1Gn9W^95Yj4r7KEcv8lp9G8h&(aN=@abJd;{- zU4s15zKtTAp2shCj@1!rF#QWptvfN@&UwRQ)lUPHc(8 z0>ctkH9t<>fjq)@$;tZ4Y4U;_+qeX02?z5=S;+}kwL14D(xdk>2iIn6>K%(h%ThxO z`C7_DRueIuvv1)Xw+S6|Be4lQPvx5N-0YxIBF3N+Uy1C^Wd7=5)lHv}`NLo_L1OAt z*#3{hR$-*cY*c)ILDlP4If^X$2S~L@I*mCTQSGAf4qoECQ9r*fwv(jmSu!2%GoNDm z?@qr2pnL!oOT-|G{&=yZi)NdTAGdsIEOnlg0&4lFJ2=0C?Q1w53>yy1DLz)BSHS5P zBl4VpH~*_F^n#!Hu-CZ>#Q0AmRD*2K{WgcEmimeC?`R4-MQ>53o32bA04z-y+ZO!g zIodBp1IGqTf+se|R7i_!HrZX;6aKRn`dT!OsKbSlR8TcIOth-!;|ktbU=(eAc>sqp zR77L!G5vpWsJ3l(7kU$=AR#h<%_+3RqCv{Bn+pxk;4Bnn8T%^VH_{4)N&26Ua$Z$5 zze-KN#0hd7m2SN%gOIoOUhi-7$jMMb&9=no;xNO{#;?qIypBi%{lLr60Bg)AHFt9 zAu^35Q(XI_(`bolvDMcZSDMb`Bde%xy3f+ac?m9Fmb?AP}73mHzf zg5@wpuXV0?B=RK?XI+@MzM234W7;=ggIm9l(rH%8}WOgc!L3W*BwV{&aP#;+yX>Dj^d z96cq_L|cS=GQiI7&$jm;Bi`rW_4CQyEUE_@;Sa8szxiUbjixwp2PF*> zVyf)%!8j((MWEh8qvw8J^I@ZF3hWm(>}juk2lU^Mm)q~e(J=hprWIJMai;`N9I?~_ z_-QyzLGWC)Y|X7|$(m}tGp4ID#E0TD_HMBNyDXrVdIbHLt&c@n*eHTn zAWX*wD^+E0Q%gM6K-Z_3SEA~XoUlDC(KkDs)fN6p#+hw7Y$?3GQ$K<`@1BiLTo2WDWTuek|S(B)6r}tYpn2a=FIceLUB_0h!pjMp6{{j zTDkp|JYoE8-M$zSS`r1i>^uCU5iPJDPIHI=e_^kV-!u=3oDYqWQ=eey>JgxRpL8kT zq<9FayMhsye)!sX0gS^B@K0H;Z`DC+V36%;&o_xIh}(1wexvZl=N$PSOsQ7`wL-oP5xl(y~Kd1ej zc(n85^px%2sy@G+f%V(bO2K<5Y5!$q{Z1aeRMVi$zY+oQdR*lcKT+&rMV@G20X+CH za2h~0a3L{1Hph8u>rUt-Y${)tb;dY!TGONTIine52H@I#_%j9J19MrdU{rEUYWN5O zpsL2FhpdDfC-?Au1RzbTc%+yqf@Tz4d{DmQfS~vydZZnKn$&G|Epu}x7O3q9A!}~} z^!?5BYvQa2NUhBbCay``6LfOC@&?sUhB}B$l=2NwxA^Zu0bYLZ(utpUzr8!pFA3~s zA|rUI<;z`@da%zIc!}kXI_v^_S#uru5}%gK(NyH>?)C{jHT+S5dd9YKl>`c%^Nvh0 zwDiTmK3qF61wAG}D4;vl_i8{`c@M&^`&=fl0pY@=1>R8=qfD%IrCtpMZ-sGYEriLd zD*_J^Tc9IfVa(tH#8TETxzM^mC(yU1eWM}0z(mtk%uF{k%b=NPNYV@YT(66Pbzh=# zKD*`kkawn{d(Nm(9+-+FfxjqnNXJe&a8M5e{zO&zoBd=p=AY%R*$+`jXJ6tjI z*2@w43*%{J{<;rlA(Cu7kR;suMp3+r1eBg$X4%E4`uNC*bU=h{d$r#(`oTziK=&T6 zSE=;fTJ$WEg1zGQCCteOrGezNPaB-?UGbnoo?6d(PCvklGr4Ay&i#9Gb_D*WnD$Ho z24HVfOTiEfB(7%AK0EnH|8G@*-bRG0Y<%GVzs(}Y$&NeJ(WPf0)Z=HXLf%L@+FlV- z_XReMM}%+fWZ`iXGxcP%6%aXR=sRzQZkYBA^~M7PUV@Ez=j*_FQN|lRI^hJx2-V5T zfkcr~oEC;6TAAxSw@U@uApirGC(u?v*Gj_>^Sn$MTHUFf=k45L2y{F7nJGjF2iz>@ zK*51R6y607#G=ibZ>O6eE$f|S^T=gJ?Pe!r0QnrxG~xebFS7!#>q;HAP^SV)hT2f> z-tE>4XLRznn4K=$2NXNCaJ6~dE(IZy={~dx5%PnI`V_$)V|OumqU_YSu(K$Y!`mrp zAq;_Njdm-HV#=`o!VVh81hqbjt@vNnS1zeQu$WR zs4lg6i6Yxp_>pAf1;gn+ve|b?U|K1LU%6E zbrbP3t0$HCa&U%8HW|RDr5sxKt6qmBqf+89kf0Ts^fDD#MY<|Ew0~T%4_`~D_4!R- zX0Rf7ZwykB5S@iU9|Rv=p!)reY!ekC8|fD^$sb0j zzeUgSCP7WEHGwb`A6mPPtZ)ICMQCzWNChB1z)#GcQF#aMyWTtsak;zS%j{+DJAa_n zE+=BJ@GWPwIb$~=3l8uklVNuzj&tVg%P)Am;umd6 zCL#TKH1KV28#exlJA4bK^J_`fH@{x4u3syuMtXi!%})X|VHk2UR(+%@pVeK*rI@1z z7c>2{`{y@Q)FHb1ONv6Nxkn|E#?IHOqT<$<`E73_et#z%*$4alm%GT1(=a`?O7o{C*4y*IAMaYm|4@dAMw3I)rR6CJI-9i!FBA&#b4-26b_9zwp022cLiQ({I z3-rDZz3xiIW7p};#&0!GCIBLgAG8#`=E$-lAG6&7%3OiX4^>A~EO)Xe|1%0$o5;n} zW!93k;{M2S3qbKk+gswX_E(6ZAllS8_?3ynpVOGxH(2qx5)2Pc5CoGCawEikdnd)d zzkogBi8Zuk5 zqIk6PD?>tv^6JjJ5?N&WU*Gcan{)LvwZp|_)I#C?N6NG=*ea;KASS^=DIEJkrEPM3 zLsJdxTdoFgOKRPD0Pb_QAxK}om9!OsZM(K$YtXWc#3uy@=jxc6*wLClX0kfLC9RC| zVS?QSp})k8?_Ti@#MZ2w5~lZ!0$|BUSaC)6QR#7IY~%RV6Er=TLT0UQKD9uJEvdyv z^I|aamTk&t@XkO1>kHI6!~(E|IYD_DvQg&&*h{)KSs@Vi79d-wn^*bmYJ1qM@^Gna z;+zffn^X4yo?54VZBjcbech}rW_>})WOB!LbCK~}LsS}V*_2rCis+uk-{8$>e+CCI6!mNHiwWN0;fv9WZ)=Q_FJ3H(?e5YOdUgHlQkRpU1 zYQ1?OXReIsLlc!5MlYPge3Q->bym|ay9tq@LguN0mqScD8xz$09W`ALe=ZZBk4h4& zO^}q?U2+yWP) zcj3f#_YCu92@kdjP&GW^?o!2jzmhxi<>{5JFtsD#Mf1$(XP{QQE>H9%u>TV5$Yd_K zxp73?Q+py05|R8;wJW0*$@x`Q`OZvchW=!JD8}y?>@j-=S+FG1^nZGCu1>jJaTqlA z3$10GDoc7k>a6tQy)xQHKkeE3__;p!U4xTiSB9zvdwTBQwtA&>(13wV!`hbo%wP7` z81Koj&kMP)?EcwUCanj}z}SSONxkv@`+^}N6JsrGD4s?GsFr_rPP0bnH?RL!k3Cfn zph0+kde*4?V#~)COH8GicmR0ON#r44q%no}QONO$G1u-8TjgNqBLpbYfo2e7$Xe#rnK#tuXcG;R(b} z#XTqb>-YU|#rtVGAgtEjS#}fvMZYrV#QDPO2IUL!iwTTjyo-wafivv31O|dT*=iK0 z+mXoZ`|{{BIm-NCmR&hx6nOUOJ`nG#0zcB*5}9c3CIwi}Z7$Lmh4~GICj?ac%vQ!o zzdjr8KhXzq-G=s=u)XXM`r3PVQ`OJ?WS)I4^$eDR+)SwSP}zN9QKoZkzFQ}X-Dg^* zvw0<4_jLHlBJH`NCpQl}005dpdQq7s?hYrH4H~>PpD$Rgs7eGOw_=yQhUL{36OvyJ zH88SIITO!4+(F*QS+|a=e19B#3mGL`W`X0|SvX&3>lc%v_%QYzdasDt~-} zBCb5i(|b`eVzNn5#Er1VIw||~YX99T#7`)!o>Q`uEDk#EJOSsIs|l%Dwkv;b@mwY_ z2QMJ$n=~QpLkh%mfSB~5&)YfF+|WieFB_q3&7C$a;9CIA>eMC zq|1=S!lmY94~w%>Q`nw-TbMCscV*OJM~F!INhHW?fI`{!G>fE_Q;4f_U*yg$`zXZp zFK!)ZqaT2&P#OmgzjwTruvBP*Y~-(5sMYWwndGfI_bBg0Lxj&|l*eU7j+^ZQI_l}6 zLem{m%O&d6=wh1UsqjRF@WPn$31Y`qdfTIWMm$rudiA)x7ovQzkgzb95RqW>yE2Hl zc||YZ?lUUiCI!8V@KdfVfJ>{6g9Av0r!j#llRw7ZL6-Gb5-(jmA}~O>>kK^6f?g0 zp6cU#fXXGb`GDDx`uEvzKz(i=Ka*kosN01glz@-(2pt05nk|1Wm{K-)WK}j$;!(s; zT^o0?Qq4@9QE%Cx`)Nbot-rb&wjST0b1QTm=5|Tb$#ZMEb$!h=s9lZc+5`eFS5~Av z;E~1p)g!OOJCx-fOaRg_g%E*P%5+z$hZVQHm`S3KTSq)$7xanB;*yDPX0EkPSWto# zLL)!ZMXR3ExD}s)n0<}>4R>^H4{;H(Hp2){EyJp`lA=buX|^HD>?&fJYsHYs>}s&F zk=fNc@8^>;KFrrt`4&uQ1=ren5wVaP{3Dw>jnZC^DkzMM2bJu_k*7hDE2NJd!)D`q zUt4E$IL9!HQ5oQPu_h8&{#&XSb&(8NR)V8&ytGL7N;(S(lq6iqn2hJ1PkI~gR=adw z=~egNM2awk`vpiiXh zuAqj`B;pYPA;7*?#7aL)0;m3>#AVi4|47-t%_Xtk(Bt8mn05+eJvZ3_mGN3_Yu3yr zdFFch$>orN%RD%aP8;$5u`BZ$K^F$zh+$=DH2HA|3zFNLsr~Hr<0t>ik~YVLZ@p!-@6eREg8z@xO~_CHyIa1#r;#2BA;j2@EY&HEK+HBigr{ z6H&sY3dGXO*U>3|Z95eXb!F`>{|+f|!Ga)oGsyixESdDFjt&NFth z_G|t`jd#6t^j5DRI{T@LbuaTf6+Ku}jnnVeh0^IR=R%%&Gc~@Y=^vydt6@sAg`&am zxt+-Kn*D1H*WUSUFoM8&mZD#|^nhnC*tXWtl70(c$ZNhmu0xo70`IAV3mtFs6_5tt zjb}U3C2l`>u|`|xI7qjv)h0JpQZ0#$_X6$8AsQoOQ*S?fYsz%l9uvX;3UzkRc*`7M z-TuN4DP_*W7YTboB*h91n*Bd*Z5ldDmuN2D8Z49l@E!boT%=9^5ctK zsYiY&ocfi0IZLtcJ=|QtR^-4pP6t-LZ zYBpYK$))sN2?^i5N|2VdMH_Sn3qL|`q#nurS_M0SRon>6$OAJ}hmEz%v{+rP_E6HF z7m-jEIiFcNl=Is%sAO3X@^2HHf}gkJQKGA2* zoI0o%b0ODuSubY0&VL(tTfuU@qv}f?A9~DeGLw=i+et~3cB=90P!+t_qmywoN7h=9 zdGF5wAdkfM-QRoO*p~rN_xrN-`yuX^6NXzSM{jlMQo}g9W>&r9F(w$UUvqXO5p-FexYAwT4Mf4x2T!FA=6a^2MaF~xjKDJwJXmtvJU zOWniY^5bgyo~$4P=PPU95}XUXVjr)sRwuM;*Lzizxc2T!MN5flEK8i7)yJzyz%GKg zfRwX(F)*;| zlRH);FVs2x+xU5q)u3py-djnys~VOP&nd^>pDT9d2r&c5OZm53yaW3F<@_xh-3?)1 z4)Exv!5#9teC2&X%>p7$llLOU4t8g$H_S3p`mG>SgwgQ4GJ@;5bNW$Wc)4Y_OC8h^qPlVuf{x)?=@VZy(Xb!h!ok$4q55m4FnMC7=_GDFtD1K{o;(V%C+bd`ee9j#ouu zVH$k(zNNK~#xJ%QcX3xwEdOKc^p+$9*$ybOd{koGNRKN6V5qj9hRvW3O$yUS1Q-3h z2AM~A;mTXVUq@uhHjiqXNYjy2PD@63_M%Z8|FR>2i24!=otFiU+m$^Gfe)0CxHPL- z{;G~&ANAyyzvnnpoJv(J=c0{!&LGz%g9q-e(CfiZ9!#aAFHbXB>Lsa&z3qG*FlbU_ zMJKK`zT~M$x-7RzGWwrneMO~n`%Lu!9s?__U()k#R+CeyfZ%er1yuT=TMSh!+Quqp zGKp5+!EBfBsX2h&AEUS85-@BDzg199Tj_I{=C_j4-^5)E^OaUD7uG)FiixN;HD4%? zEfANgN(~pSr5Gr3rj&J}n#r!B_5(-cfuv-=r~yXqAnSV&M71``B<1Hd1QL&N?aro) z@ddEDCPP0Uvp}FF@@~Pwk5XR=kL#Irs?W?W61WI88R|7EH2@mLk%R1P$~5xrYoca_ z34LiJ9W#}$T&Am`=bJj5gw2ycP*pzAA6|Q@=cV?mhl-DXgJKR)HTL;Vpy)3?Ba-Ij z$G`b54_suyv2DdkK(f1#xk6MrU^Xqqs$cfVTrozzC{E#db(0b-8oBTvd9j}(oKj|P z_P*S=7to^<=R`CA!Wq*3enUlse>Q}?1H2jin;QcK60$L3vP?aa_&}vG`o%Mz_bbtz57OzK;90%i4S>=bKp&=Y+c(ISCR-ESi%K zy%ITj(zvQoO{GujkdSyq8O9e!r=^(=gF+I|5{nj(T8F{oWL_yZ&ix-X`dYarsJoc@ z_@_6tN5>E#CIpzspybUvH>XbBNAFrYYUF4jf6lC}NNt;b2jvd5>fpx!x$*6cPzzxh z(q-(u`=Qugl8Q}8n>&(OUz|;5%~5{1TeCdDtDE&rCDIJXaig!+0OD9{=4% zPj&tDQYk(&i&2?>;k?=$bYtok;v~0vsL!$NSR{nKa#pI*s5$&SV`xS-f9VbP%kEOw z@M{ez05x0)n3#Xp|4CD1bg~y0>syg(P|L$)*Xh&@Nv_OKcWw!EAz`V2v>)&&M_?_4 z9{^60Oo91NKkeT&e53QnwP3NGWWeDbMj#cSppX;%v7<0iObSd`EFh1HQDOf%*2s9l z-zX~W$hwy#1!1zH6;Olr984ltxC>R{N#aOB9SrlM;09_+e4|3u;vr-wqMwDLkJchx>@cf&d))^R8fm)MJ}5zP z%~oMhlVe4`edm^1JF7^H!4qH;X3h81iE-q){F~N=b$P9vrHQRuz09D`Rsk5YWQ6M=oyB=-b-InUB+UyluG z_oRXQ{g`6Uq;%9kSzV}gjH8=08H8DDlS&zu2kI_yg8_@+bdyF*2wJyT#!*r_d(-TO z%lF%RWVM{%01+fn+lOC+W6Gd6Nr7AiLgbfX1sr)0OMO#{2x!M2yp__DblXp=OweE&bEu#oN{V4<|O{YSYK7J_}pG; z$Px_iX#sq+71*{dXY_%{f;)7OyUE~a)4Q0mcS<7`U@}5iCog||Vx#4YKKvx$Teu+J z-${OJ^QJh&YqIGSl?7szi|kHDZQEE^D26+ANX3K*!xOjcG1!E)7Jc< zE&o_snPI15z|v0HTp8Z>Y6&iOdwRP8f%4B9i=TQU7T_u9KAH%I4^9p! z&ZvHaS@ai;m$md5O7&fm)@$Ug940J(Sd&An0eYSXUx|J)jxG8NgMX4>;KdHPcx5O( z@3ijC{ zGXkXiNn0@L2vX4GCs%HK^*K2P=y6goa)Tf0dX3!3r92j}zoUjIoE+7C^j}|6n^LDx zRaXH^gGnLZyXhyhBaSolzuyE8Z|nqctyu3}o5ine+lI$s9BUGef|jEZQ{1%`Wuf6dE0`K@BZok~uhP4pZ`&U7s-1PA^!}B9 z*^4i2E5w*Ocw~@3XX%646}e593gA!6>b|8qluG8SrRu7XBm-y#iNj76W24 zMp&05DEjX;jVT*_y5N+FVp#AEN_A8|`rwuxQL8J*Yv@h6pFbw!>Nks^&fC2A$^B8p zXO1-J?mtOEq=)fncK^7E3F5sN_Ku|BA<>FrvBHVGFjnSyvhLuUbTA_XDH^~e+Z|*p z38pRdXGU5tZF#poV_ml8Lf7XB(g9lzXA-xJr;c*adq&9Xpy$``ZeW!D*x0DE zIESW%FR+jTmVYG*JHa}2Yi*MbVH4f957I&Zl4KeX4CDa#tz~@v;{Gl7G4wxmE`0Hr zE;}ZBl>_nDUr%pMC(spL@W@fPHRBc;dB7Z1HJ1`?S|CCx2@jC5}^)<1{CUCag5gC$V8u*6~z9X1b zh_&W=_ukK~Bqm!ws&dxr6YP@CFr*?dx{dgzv-Mfc?$=bkxQd_iA8bRMhU(To)iFy8 zJ!adV;0mhx#W}0DP1CHbbhz<|%+(a@gU4>g>yp>&Q`xidSD)rm;Ft2Vd zcq_byTHGT~bHum-BM4j~(UOE=|&Tlo| zOpe=(NWfEAd6peIJXw*%TsAAqx$ztu`QM%jv-fJbzm4VQ8q>{WRCzhAHQhT)pCad} zp1raTgC+84(FoNfta+~ui9qYDSM!^g?!DLk+V(2$>o?qM&*SxPTzo3aywhGEw+%~2 z+15w(w~xW5|A<4_FlHl6eKRpN8wCJERzFFq{>h6cuj`Ilo_K$Ik(MH%2&a>G4p(R4 zFJHahE9?^gmr3;H%L{>b$*fr5)veNkB^hSA?rQ_EIU3Ujs1uApxn?~XaGw< zw7>hvm+dF~-!?8JIc5g502*QvUwI5zy-`CC z#6<9^;|aqWh63H?uCVN*tJ*@dJ11|h_c*i{#-9-VKkt0CpJTcc-f7**C@&69?0s^R z*?uPiTH#+G%$u(dOlQl%_e&C|c9n$aMcnA8R{rHL6N@mD7%wAU9By>2-RtHGJ{t== zzl93#2cH%6=iMnd=`pW`wSfp^_1x;}z(^LCe_{d)b`V`VO`n7qb97Mor&lpTv**S8?b!cMy$gvmhuh za8-9!G0u0MkF^G;f!GO7D}?rdxtc&(O0Rjc$;AHH=b0vH!;bgpIb33ot3B@S1a4Bp z<)>2G4py9gU?i*|>cU%$Go~b>$Je>xQKiC7GFTrVg#*$U12%8$)t`3Q37{kP@D@Ba znAj-C+2|!J`miwoNc)SHcMa0sYLh74Q;c2u3GFeM5W#A|@j9wfTaoKYo~)Vkz|M%L z9eHko^kN0r8dcP%-|giAQzK2tZ&*)3zDXw}0&RBn?Tj!dx#!4n~L#`BEL z8{MFfWbUVUcF@{iJ8Ft<*N|24`n_P58Z+*Y7KiH}n8bCR{GEqN#3CI&X(yM>EhEDh zJQ3fsVd#Hu9Wi~q$N>YS7q}rR&LjepKBnQ_-9wiYd+7#x ztz5>gG>-+LtY_-D!j7)3CK?3-1nkm?D;|cz-_KA#DY=Ay48fMX6kHZ$SuN_uPLVl6 zqG@nqYpO{MRrmkgAAY1(hiXY0L*BaG? zp*+i^Vfm;?R_MpR_pP}s3fWU45$0XcKJs{9?*wKJlP|9J55DG~R_BEffp7=44CG2G zs5y14#4ra6SMtzu4^%0{=**yt+h^w@jULyfsV%O((!vb`=G^G2RWmo_=4afPpzjH& z)3&XA%I+s4cV~&l_LUa<%%be^wo7x0UQO4CAm`bgwEh`p|Cfjb2*wVkxDGVK+4qT!?+oxTeT$QN+H$q%{a@= zsKh1&Y>-=c3k2Ss=J6HzM#QcZd!{vPs=X$*mV;+|UZt^F%~~;r?e!J`GfK+jP?S7 z*+@~?&&g{Q%+j$!%^N-+RdFE+Kpgmrtwo^Fp(HMtLA$MxtVu!BT%@wFfG@%&iMnst zTr>ZBT+5ePo=nLP+p*$Jy2#7kX|?CFXs*~|a{a>baOR(l`60`BKT<~&woDh1by}AL85r%moDu z3tUcDUr5hIGvh4|m0EFQ2k_2`CkONZ(F$atT`UNgI_=S8|KdhBR^>4=Ti9(ctM$HJ zorSSfcjO>4l+(3Bx*JYk62Fgc!f>9koh=Omy_d>Pa+MIV_R#iJ;?*OsvL41Nxs5j4 zL3{TZ`kU-r$bb?+W~B5)lB?}Q*T2_WxRNm(;33^=L77Ja@J1}+DxupJSI=~19!0qz zr`u1cEk8O>EFt==2HnHAKJ!?k`2MoJ!x>@5_!Udu^iuy=YQHm4>+=_T2HEpY$*o)` z6{a0!ZDh%wVufG66Pxw+?Z_n?MG;rHexwPonh;|c0%3~lyXMYTTXJD<@Xp&;et+~@ zE#tjpSIsZxV}G9xIJ9VBi2*j60HTT}rk#gXJHK$IkiffO4Omb}Ey58S0dPN|zEn8V zD!-K|F!9yN@H!>~l!t^NZ0v>CI@8-KIA!El$6iaXJ5r0=TJq#Rtk6@AWRl+#fuW7( zXr)6)&p+oz^p#mN?ts$bY_Q#1)U+eW@sp(;I+l-L!)3iOoPhE{Uv;_zL)AW&y1iuK z-WrtfR zs#!yIzBOyK3QH9Zz&f=~sf@D^^vL)AAF-0#RyZ(`Pc0NqSM&wbK+^rg={jlTjt}&z z!N^!M^womv54j_hYx&AD!G-@KI?_|No8cx1Pq!}y9ZkW^hsT_pok2kW@zWJ5a6y@H z%y9k#%d&O7yn)`Fa~JuPYSxQZ1UWIUs(=p8EPlNfz7D@&pOs~)BCNm2`|vNV-Q$3o ziBf)_M~g6|)jiSsyKi!JHlr#@hq+6TAxC_%oc^|(@UZ(ln)9$E7A#xFSeL!jL!GaM zmBv@EruBIrDYd5dlhKqr@FsT53qAtY!a>*Ub--=&NNs;ECx12}>$ITy%X}|wSUK4- zVW%kz>U^P-@Fp)>n!YR8`b#VHDXAoa6IaBknGt75wRUc>c1AQ{7qmZ5@5Y&8aAmz2!kKCLLO61V3kTHk4Uz3l_9jm=Y`hpG z#?_q6uX8^)CkX+CBX%NhI?wOhMc)I(Zm8f$5XC%PsLQc9N{s^1JA!0?#s1!KNd?1T zoJ{HL0IApJfA}aefaca7={Fv4BlRYATf4e<{h_L$yLBpD7v&NGM&4Mf3Y=p$rrVKU zA7$$QNWF=3t}HWh#6)!#H&_)igv!qAnE-^%ZxpR3{iRaJ>xN9Y^9)6z^s1QYvNt#j z*bEj{nSDdIe~vEXh!C*3YLm)-nU|md)X=m=+4w?7fGjV*@i$3%{0IH+S=fLbBh|+z za*{o+Z4?OhR5Bn&#ESKhwYq#&D~^rt)@(C$ElHiL%%haAnpm{a^KSm`g&QBHqspCr z+LuzM7y|(q#M*ZkZ5Kp8XhM7X@}=;1%*&C~8DN!GD(^TI3UQ{KGs_in>(5Z{RQ0o*YQV@Bm+p;QI9@PiK^$;j^-cN(}8;8z+_yPH3mEf?)!K$qy|^W zk3o_dnN?W|wwm{rC7Uj%fS*s!$4pY?i2eHw+PXngb96qtQ8v0f?Ght!qVBD z{3IurjtB`wxe7!ee3e?MjH_7_etEFCdsE3^jLZja8W?;#e>cYMa$|?r|4{9>Xl%rx zN}D7)dBz>UVxYdsjiUEjQ=G`UZFbCp4|@fsj+PYpYBG15R!%_1@*FQ_z1Dvr_|{@0 z;7|p)zOBg+K>%Z2v8gE|hh^nNLrRiKvS-fd1hFaQj6qQimEs*Y1wXteVqiY3^*Wz* zohsiiT7GFqXM-K<=_jC^^KC0`Z|3F2ZyHkxJ#{Qj49f@`S!=$jeh_EycYgejn*lr;X3WU$Osb@F?WwJYdTrlU2mr<3y*T3J1 z8tK&I>u$N@k$JnW=Z^D|(WHr{v!1n5$}^mq5Vx;HzG8GgPT^;p{B29wPCg;LPkk!v z7#~x3gb7h1t$8nGP@Z#+uJ{JoE0dSO#uLTs@G}$$F-@M`(_w5(nr^Yw58m1KkT3B4lt^Y4to=3(`re+OBZ@#$DX^BZLX$ESNvX=#L>sv`=&760ccD zBbR&}or<}+D>Bom-3R)t=A&pT*!gdAcPS*iY%~bA4jw`>UOr|=irI8vsgl@H^8cCP z&b^L-+|+Uni2@l4jq$Hq=u~uq<64ZsT%^`D37FDH%5SyeK*qNg7dfSZY0w!UKIezj zKNuh12L{wPjVy$FQe&X2_EGWTg{gtD>*BB1})4b zcV!>k%2>1v=xw*Mo^7=ZQa%I)X`(f-hidq$_GM=+S?mN~JU!J}dtm2eF@ul2WEk4m zp{6vyCyV%_isjtj8a);qksD^sE{e#*T%qPKsO|P+dYtBlioJsE%EOQrPdZ9bJ>vU@ z9)vftyZ*|8u>9d*q=NdxSq1d8Gb>9_pu50-9FA<+WjwqOXD54P)oZcNDEB0*#?+C9 zaP)$)l{6>-cs73xG(BFIV)%4%vtL-G8XlvG>YC(>WG z)BB+#g)F;>J3WmDy3j2jfU!}u$y}NHPLeFA)3kRSk%T>i-WmWc~vbMhk-+kwHs^KFfPnMq;hqaOgi*@R>!tv!=9 zQWIgvOeT25`jyeu46@lyRFqOT!fiHDEd(1y$=CXi@a_*no?j6{>3`n&{b|b$zq1=# z3aCYG9&7?Ic?+A|pH z$2yYQt=))%qz=KXcZvIOrS>HxQ6!HIi5tE0_)ONunkLi%CQqEyvcV$u&fZr_+-LdX z=Qc(0ob49)C69tfc^@m4d^Oqmz5Xf_ri@8BPESrbsh`!YpZlzh3y7+=GQ`7` zO2^8_kh<6m<0)enr))cyppZv*o0vvlGpGKJU|0}RAiZZx5O9rHCx~3AcIJh$J4Yb_ zCnCU%bR-0#ccw!43o@VGisz0!4|QUf`%2^?k5X}FFEhesyWZ#cXQltlUV$)A%eCH& zl5w=H#1VC)V)YrOfH8&>?U}nVi8fu7Pu*-8SgPjo2(5OKhx$T5=KOa>^f&9v{!A#! zYhEE`fWUZPo0mRO-;BkEtw*>t#vdg^y3leGP!MjmEKZ#E&0{Dm1Mmo^1lUVftoZtn z)SqXMrLwtQhQF}e;`(RHGSJ?-IcQ^aPb@bBlh$l*TRhkh(G^G&-<0>(hDLvA%A=;T zk8N#bKKvFZcgB3wTs!k48t6`0;M`kp86F|Sy+fMB|C<^lj);@V4&N6=QJ!YKxiGX_ zpFm7~j%aK}bqr_+@(x$U)?dXpzCD<;;h)MIdt%Oi>6>y@n=TG_Y`5_DhQ%_biI8 zHg7W_k*TLqP_Eto4hvlu?BW$(Xz`uZbEPFQYF$B)THCPtelV{<%)8svC6hXc=>~Uv zFPMSokMSh}4ZlO$hyFbH`3W zf+(~J4Pj95z_~28rVeGi31a8xNJI{ULg4nxVi9L$w&YVoFTpUUryJT>!*8$0U>r${ zHSltQALBy$nPXiUnvK*R_V*Dg7f`fZwFP>41mr`A*~o(&-i{Z26UG;3i9j+gKWXd| zs^AU$Q2ZZ@uW~T**%cl)e@;olFH(k`6^yT*@64+NUTxoPFTyLXbj~INi&Jfq`?QJo zd^t23y75rwJ{70?p5oU~VX5EbsA<)zGN8A4u0tW`gV{Hhv6dZI0zD$ZK9kykrI!7n zfojqTVyC`G5i|7s^VmOy<91gmj-@q?`auL>qUDdempLcVU8G4iJixa}WnLPhCsA&< zp8F3ab?;ZFR}S__PQyP*VD~|(`UAyq)ZfOM^>%RRjNSW7VW+;f(RaA9^wCQ^8~QkR zusZLEp?_l~di#s#p+U1Tm&!yfqZvm&erD2W$=#{FiLOj*JPz2)(J8&Y5XNXkb*|Q(5N*M4q*W#Nib*# zoiwDuqANOtwm<|EX|~|;s;)#S9G@JAaabZOCX^z{-=dA z+_VX~jHJ)~+;P&nvDfltTZ!iluexbfLA`{8JIv)F!3WcK#$G#{H){zK8C#VldYcxi z45rzvQ2WUHYk}J91r0VdZY*Y}OA5nY)K7GD2@ZhZ>M=xT*h~Jpj$bYQBs}Yg?5+JF zyz2e>F>HPD;7&b|{>5WzF*O$BjYmz&IulT$8cg4LZhMS-8`)ubW=@t_EDec%O)ZZ_pqa4<4xJRON5 zD?Vgx9q~>MWKPY zHy4XDtNqbZ9|K>dX!el~PKR5DN~r4FSMaLA-RCVfL1wOZuI5M+^oYH} zByG*9fkrUQ{r0pEX|0YlW~JLq5GNUNKtH|Ls26oH7I^JTbXAK?AotE)nHXF!L+&o7 zg#n=dEQ$Ei_dJIfONIR#9moV>goX-Zw-X8k?BcsdlXS*KISXHFepO-*!dyO|^w4xZ z@|IFBGo%4^@+y&J*yV(~@3-PdJv`=~x+fu0U<3VO@u?;c=$1RW&(R-dBmz5TQvF>e zbR;js4QQAv&K~agV(I#!M!2BRFjVK^#gtHY`JXIe-NiAdU*eWK@AEsAXHtShdG_KXT6<>1s|Lg*3llof1|X%yq5KJwZvL*w@wB(i zXpC-;M#R7|t1R@{=Sxu7>RP|PDDfyzESYBY?46A97X z6x%2;i)5v16(`}A=vTL@3?rjAVYj!$uTWjd_l@tS`pXi9>+k6j{zZ1D$ch)aY#F)f zZtRGD5rZ)7Ny<@(Dv2JWUP|E=hn7My*+om7CE-}jFM|*QYXygLA~`~aw8ID6_O4G+ zQInCX?K8T=b@9G(-CSX1;dNk#FRcz#X~5knjpwNo*j6piZ!rSLA-tdU1_1^-g#=O_ zLC^(AL=eW;! zL3Prm=flMk>4q6(vyc74Ah4x{Z^&s>xr6?d5w6g?a1(&~f1v)y|(zW+PL_NV7fT ze10hA9E#=6Zj1YO=Vm?fI41ISw(~m`^)fAK%FS#f)xs-qHiE`wr0pWuz}N$Ws33b- zM|6W~iL#|e%cqdJ;8A05v#9$!wP45jQPbx$H^vm7FP~BR^al-gm-153>g!Dd#N0L; zx)r5nE1}Dmf1StXc=EG*2!2-!Sm6>b)I>t{57%q>kJ^pA)3G#*bXeZWHLz5&3_ z7jkY4jmMeF(JEvJMl*Y+;*fTcYLAN@%fvX&vd*@*2qyg|?6$_pkj9UrcCk4Xw5c() zehtP5cVyULVQ`{%veV_^9zYSLpNEks^JQbAIogHWn015Xriv%pS9>%YJ#?bL`TONo zD+}o%)K?|`YyIb0N(0y5MF!c3uDot%!$Y?fGupx)O*T+H`BfhOq--xOFaxqo2?GD{ zG&B^Wp-Y{knW-voM*z)=0xK_#N3YI7*An3wZ?{)`1PdL-h(1}J5_$Jn{0BFWoo@W^ zwUmtVFSE-Le+f_E&g+D-ZQKol4d+mXC>-5PgC^xD#DI1P!OKt93WEFVM6znqsOF!5 z>cFq*@(eyD+WX=R+i9Ssjd;}e&*k79y=v?_1VpN_l)y_b7={B4QPYgOq1?ho=Tf#b z#NM~Q+}4lGKg0YX#-9KHt@Lh{9q{o{jhnz}Yg!let+d81qwrN-0?d0yuQyFZ?F&}| z_^KMfbp-KgKd$JDiZ(+Z^BNI;ST8Ft zcYHJa5GYn^tiJ+8FKvN=#musF|1dr(R?QxtLymb+?!IftN_@J;ob|YY zOhM}YCURM_lQ%P7O1_ePH=4`eat*fOrhyBeQaJ*{Tl4|q{PCK!TKOD9fy19eG+K(1 zno2 z_iZVW&a_&xUdc^N4Zhl%U5#Rf1tj->FRXPzyRRv1JV%tCq4|wJZ*<1zE$G{(K^=>_ z6A{VuTgJ%B<9=EFC+zP1W`S3%>=b7iU+#yjI&MpEA&lrj;vOb`>|X0tI!zp74kUmY z967o?cB}nGz8?yO-YiDfgq6W^>2yhsOo*>h{Wpf%|3~N)-?$+a*7iRo4o27kv;g*d zqd|S_BU2J)HI?TCurSarh9P+q z;8?z5MV5uh?7U6@BZ%MxFqwZ3O#%!zF#ePYq{wYN>xIg`^QV4#BsM}RY8Sfo)ROIa z*R?kf+PaUoD@cC2`M1lWsf@(r|KR_l~rlKDi!yC(b|K!+xe z?5*CmS)kk-t}cR-R!MO>%9*JD08RvQgt<;JX=ZLUBB+}1iVAIDKMaDRH!t!zwFA_rTgU`vSBLh)9{={F>Hd@rP1n1@1%c0ZxiRGnNnil=m7S;aw^HKElZxFRzbbWVPJrPj1acqGz$8;9_ zS!9Xh9p*ko{7-RW92Iog-UXE_nBIRQNP2N1?XH96`=u3?yhemmZ5M$|+(ET!0 zqU|w9dPstT@o^7~O0b9I-Vck`8X5VrU6bXgo-;Sq7FO-wQ(5!U^U~)(3*fG)71Av%CS#u%=)$3QEzWu zLDU+`rV68Y=s0i#?|`x3k3<)<$ggl6?6=6J#wuJlpZ{eB5?#moQ;$)SbDKeGVA0WJ z4W)vZcKAoc5uG+&y+Cez;M4X2Zzy}@ix`VLUr=(J3wm36RE(0a*cx`(y-Wy`AF_6O z*eZ32R4x!&hYkz_YpFB>YJM_M%vxa{|I*4lS-HRLfLv_nf1|4`Ue;NrBfOQ<5`e%< z`ABAV<4T^oWOuxsk2v8cP{0G3NE^&6R^^yASz`C8ZWUfgowZFt7`;XS`a-#a(ckXT zx`|@2U}G5m*oeXXddVYUxg|yQ8sUHMAGNKv(`#o(EVvvU+XzuD8U36o0Sc z-qpjvhxlYG%n@(9!2U682k{R1e-ci$e#RDl)QEoMHU!#(L#Yy}6YRa+PGY_ER?k-0 z>^Ys@<;mwfYSr1-^zj|E*+kSzY*Rc@j+W-sP6XxcdT|m}5c2*Dl{E|d8KEfyZ0M8q zy_oY))DkF&V7{yQCbMmD8a<70JJvLJOOeZ~{3JqOEIMbYferVn@NIuDC#ac9Jcc7y zN3q@Ub}Qj0O$xW-jp{=MUilUlKV0G}h^LA-uMaHq@ZgyP!?!z?P&-i1F!mGs40Et$ zZJ+BYN)tCRULFJ{owv4@_$Rv^%espLRE4~`eZHP#Ye|`4nI?pNczq*zGz2F^_hvqb zDh1K5k3Kkl!ji!zAV8EFls}-Kqpym=2ZNwbGb>p!+~CymWbxVfW)tRts+<*-S+>aZ zuPV#1j(Wxjw+Jpp3}F%fy>qFhtsWFfRo}h=ADz=kUtn&7{2r3`b&bhXq`Cz_{yEMn#>H>l~o+<=Tb(Irk?vT%@Iu z?qYBHEa1J&^b`@I5^B&s){8$5<@_)N_H-q9yGv9=ay@&~qR0@8XU%pq_-CdZmLjOW;a%X(F)P;qMr+(wFsxNh`Yl!LQ}e5nPTWnC!5mv4@P zX-!eF6W6>^eRg7pUtYWml3`_=3rc3(tqct^ZeeT>`e{qcPGsz)sHzl~EJ!+qv#9-r z+2mUvVsC@696jvLJ^s9}80XBFMSlcEA4BDDt?T{~cF>Wd`T0lk+_PD8!5IcoJ8yI? zcWo1YmbRvKowUFj+XM$?Pm`Cw&8jz=`)F_c!{Dci4X|1Ack+yN#hrtaAAElN)AHtr zo$e99Z1X|zArCewKa&aj)ha3`YDXKLJB>G&h)@gfNbpy_)Z;i8eSBNdnX~4V_!oZ=ijmoGh~07M!^iB6Cih zetOGxNr)T*%3gm|)RE^k_@E2I2k7SAinF?$Eg@vX`%t@ObC64Qsov0s#z8nXOKj84 z22!*ipn;%u-1N1HAt~OswOMfh*+a z;~VzU!RNPJz#;jaQVSOtRJt~f{zh@lXGsFURhDkz34D1JB`1!NWFKcT_Sq?3SBAMh z7)=$4ORCeXI$FXf);}2xZj3nf0#K-?>?F= zeb@6eWrs4%rEL-i0$%hX=Uf}@+g2DX|L5DrAYv9Hn?zHGZ4zBknrQOq#SF<6b4HPTTs_WSrM7Rma2Gr3H}T0 zqVR0}1(i}V!Ho-a#4eCe(A%ExY7fUEmxe>0l?geF(uZFNx0bp2;Zu*ehAJRG(0BLo zbH=YGG9U=+Ao8-b$&>a()v651@)69LcaQCs6z^_#koP;5aI^Mfksh0%pV9UUI^>-P zd3RjRMS=R8cNG0GLODQ|4r9J7Qzn}w5uC>J)+oi~x3Hz$SsX4`GTZ%+m}g=jJ;k1E zzP>Wu`vF~2hJvJC@FR13MaR(;dRm(aNr}-ewHk$^g)-JU*>4doUlk!-&jHL#f>^Y= z9HnN?;R!NCGJ`q)Nw~2l^U#7vJm!Ca6kK1ntH{}YnAI8>mENB`GM}CB8E^}399Gxc zjUA`-3t2GrZU`fA6}-65;nyX{{}cb~40vy@e)$(HD(Z($jt1pVI&Z9npfBs5JHbl5 za8I{$0_u{zWcwIf-ML<)4TJ!3OU`L+OSc`Lg$_+_Ph^O9)B1_O(#qMTa)bc&=Yu%@ zRe|D^Q4!{$!M;r?g}|bbUPFny$Z9l|Ob-J*1N?{E*~s|^3r1Zwz+_?7M2+F?cE76u z%SFj=GUxVypEOwOyH@~@)N}1ix>+-8zY3z5ze7nKn_=V6-r>dU8a?^+_KMaA3no$y zb|pzPJmOITO0wb?gGEhkF4=jeNfn;Z#EZDt@W7T{Kqi%9COODe6Yg2iKs;`3+(`&u z1Cr1ZXs>fmbr^#7y`e{b6OvRms1j#r3c`i99vGLN(fUFvP5E_S8@=Eq?xWh&idYzFT%W(-QO=`6TboFVJ za1}?@*MqDMyQAfMMsvsH_h`#digMjlp6$QEada~wM;-3nhP5Bo9m=zSYabwOU=w|i zv~WE`5ZY_7FGwfvw#$DuKHg@S7eWi-S7Hy%J8cOaxQ$%%iVOpSAN&m71J01<`~Jgx z7jO^&18|yx(~T#+_4v!&1Pz`n6Q@_mZ?W#60KYKP!5WL54mgQ}ElW5N?W`eLx;p zIsr=7zwNXprNIhbqh+sV%(U~L*rHF`K^|2>#VB0m6eu-sWBm9wQBPRawXUscpIQ!q zV#Djt4MDE2A(ps0hqS%JzD75m;;Gz;M_yfLZS`wHDrU^RwEh}zP=yW=53OXs6oMEW z?s#zZ7lnKVC~2W+^uFfVMDuj_OG_v+tGPDTm9JF}h8!B~yu7hI-x!nAIq}N|hBsd{ z;#U?tq*C}_n*VC%yGn2J^1gufg6=ep*mTUZ&rBBMda9=$3OVgsqc$u=?d}o)^(RO(LV+~7{-AxA#iYln1{ohd~WF&++F&YHxr6_PQ@7hmD@he>d`gaoLk+X_!q#Q)$ zb~1zfbY59D=`5GR&-nu4P8`aonUe?d84Y%n9YY0Hm3x)vwW&xm)>@A3ugUb-VKO;2 zPej`8bVic2AMLx1B%PfD!pDQsh=zIOdVx&zw71Js46omiUya@E_n7?5=^Hv)H=oNk zsh#N8R=`7C4M*G)LCGcOt~RN)UejPh9@jC3dHqSqJdu)HRlt#k2ea?m3|92b6{};t zt6IM12E&Zvv?s?l*s}IzM*zEqKpc76lcG!l0%mIqZp%N=vkhU_1Xr&rl1~lKw$CV@ zlp(S)T}}&kOuO+U13|A2H#;av&mx$?jynSzKLO6S$_hdzuXBnIt7$6kX&E|9yB!UDX!_q6ud4N2uL{6)vhCQzyIA;pp0pe6dEYD9=V0$f{e6amf0oU{gh|BLoM4qoHAP8$Wk;AA12w0sd zKC8)?i{+>%z~Po;DExNmbx5^?V0uT#5E)GDgy{;(!gzHLIzg$@)p3@3T?mUqLJhG1 z9`)l83=ew9Ih8ml$d{e))60TnroO%R+TI(Jj^HC8pDD|DxgWC$x$ps7^tcQegdnXB zT)&|RR5Z+6IH2ogdCElXN#6RCgO_d1a#D{U213=8R#jY)3}w%Jh`Y~p8|g}} zXV@gVZpU#Fx0%DfCgHDKx<($@UaDdkHc8@~#R5#V`;K@P_BKT-Y*T7w(mCRm5F5y6 z`;i1W2o?%$ono1MS3Y6BmPvK>U)b4?xF=oxBW#Ie@9FIyf*niE&qm<%h+WsMYb${K zc&vFoj=jX}SL~T77i2~6dd#0aN>R~H>_zN5+_)*<$!0_}krzVUbu6LfGcR1L(K(9Q z!*ygt2f4%QI`8!fqn`<>z7sH;HRG7zIc@b^mV

CUEx&4&DAw4lH9Fi=yGsB!@&nz`1B-gaQFs;HJNyRKcE=Hv=2PjbSKThaAJBlo1VRuGiR$km z#RGM2DeLT&#k4`L8Yk z4W9Uey{2YT;;4P3%&K5p$V1L+rK&^zGE<&>w#xsT9W@GBpjI3V(ELkbljL;M#B*x3 z$x|>L5t1cvKG^7NN3MlDvA`S-lr)7?pYNI`RzUzPuRs~onNPh0k~`$DxAPkhq(tk< zDhO>hM;a*EquB4cOBe!O{(;=lKw3G#sRl`!!&-p8Jv^TqRtNoh+|90eiyBR79Af5T z_ky8HyDFsJRxTZVT7LMZCYGB#QP0dsiC@vQ*H`g`o9CLt`z-A}B(pQpx9#5S&P2HS zYXeL){2hk!lQLCnou0QF?1}yQ5|%8!(x9_9A5*@<)^eN72nUoQ6=4X54=owez!4-6 zA;nEtbwDiYF3YX4MVL6CM)VjE5|flos+_^NwX;;*Lz}{xC<`tKcj`S@1a1=7nMlDn zWgS>4^Q|y-&=F|eCEe?Fwd+2cbzbvuXat+OOnCx_Zt<_}fONdS$T!ek(2rMeh^2*S zpXi>F?D6}`D{}C9nusFHBVcN_!8CAVn88xgmFik6ti?_;mSMk;BlsBIH!FD~Gap?w z`roSqEE3a(8LC(JG<(3eGjAN$C)jZR9NDj9*LBJXwL>h(=G_r(mQ;BbGuc-Pl{@Tt zy%zkiaVmri31Gl+HDXvBpkK|Ztl;swytAbvNk&%9f7Z)3KYBCHH@>rIj*6C&XDh5( zSBgI#^e@G}G5$VrHh+r9t2U=XRT#+cH(1J`;k5Yy1kZAEU~Ft?)Olha1 z?pD0W-CADovhJpB^zgN!>?WX@>S1Vy)Cia9v5{*IO>1MpcE^yV8eUgFotS*%G9Ulm z=bdU99B$fX8F-wKbl`Csaxjrz#zSs3?g3CSdI_KbQ6!BA?Pwioh$ z<0EMGuQ6iC2K0bpsxu;qZtNYyTp*fxke*K=(WW;vQqzF_vjTy4#5|l)g&BA)PYl=4Y_uvm>f$I{J2diCuFNpF=PBy7!4l>>zdBFV6WST`J+O0KvaPuu zVC_VaVDa*L*g|xffP*vQ*>qq8F|SXV1}4>OVL<1M{bv?baY)vFI$T3QT>1WWSU$_ou>k`wJA2Dk8or%QFYI_`3@O_~Hgn#(xHeqzXfip-fQlA2+b#f*Mk=#LWih39z4` zB0YgaiB8~3cQ9ADv4G_QTMr{x(}q@(v%JOOmSBmBgUHo%V3z63d?FTFR0uGy33EnO zJr(rdCh@3zP(9UFUGY2da5R-oGVU(K?4Q>=M71f%+UU3xnLd(~78YQS?SUVpi{-ZC z!Jum3gHT!<)uTf6fuxwIX*aVIFCk|3m)3b5b4&YtZyrbGlFz~KIFKMj1%ltmODekN z_3u%6yno7p{4}&?v6sI`UV)HUgx^0D0%plnP9o+nsLv1Et8%Otd|;d=%EG=V_pKZX<}dG zGW?mzhdKC#@GO^7>FA8&CVugLl|Z|5q_HOpF>Wc_!}VFWFx}laVshBF}2(yQc}M zDc|D{4i>QQ5orticEf5_yM8E*v=^#}GbcJe{~VEcLO4QC;y#ZJXOcG5?|JpnC6Pm^ z0iq#0%;&x(9N=CT!zV74*B#Wkr{2}E1dpOGZMh7mT{4%Dv+gsr4ySDU>rtaYQ|o7dQaeT_Oehf|@- z9-M?SHc1HwEH#hCO{V%bW+y81`BEYJm#6rwKxq_@+f{;Va>q5TB# z*YWWVkfKK(inL|3LEK$#C!>yhi55n;!FA8!2UXEz8wKPp@m=-H+(HEMJHAI9N_(EK`W|L}2oCJPMD6v;TT47t*+iT$i*S(#-?CRO ze{-C{O|X;necqwkg{hErQklS6Yuvh05q7td24y`{YI}GJv7od7FYQAV@6UA>b=u4NO_{dc*_Cw*ze=F?TYgR}>t5PgjY z*0(c<{0XbGt_g1@NA^kIZ1)w7oAcs49J7VfVX)x(6JOkqW4OZhwtFiCYx8&YN0y{Z z(R?C-ctwLy0Bn&VI=`YKzbtnDIm7K7=-I;Si9s*)pEhm=&}F2c6pm=0p|^Wx!^LIJ z%qT1+7QD?{jwc}I6_pidekT8>>AxF8JpaOF!^{Bc(|E9b7&ey&J4GsBkxAWfWYuM*Qf|rTy%{u86 zwebf|~l8fVeFP z96B&@;oNyf8prfyj?3zS_;Z|q6Lsh+Z&F5b+KM0n?LkQ{f_W(j8)kHE)qR6B5m!ri0f3xSQZDW&G zNV|MYi*0-HW`e|ktE9A0>JszAymsCCNF#Uy$*yhbhF?oW9W$CmKEsOJqV=vw!B=B- z#qR%?N`#aFJXzTmxi%vi6V=w^uZq6=@_^MExiKgQMeq9gnOhw6mlA{XUUe_@$^{6` zSZB5vwKJ4-t3NK+n3rVmy~6m|>iqHAbj)Tr5mKQl$f5eLoO#30&Qwf-VQVaEE4-bs zk}iB6VxD&ye#v@K7Ojy!$Yf%-;OYyeZyEm!?+920jZ*I5(^k+K5~{a8`p-5KzqHS{ z&O-Cs7Oi-mw4NC?^iZIiXiAcdbjpcfP`+q3=hbI4V+>BTU+tgFl)oi&iWKnS{cq(; z4*0OmXoBV&w~yWPkXd=fmpXu%XC(3x`9x(7MiVo82@{DM~Uj$?@x3X z_2?-IEL2eK*L4$7+whSo(|6;&QEQ=z27nGWv4NX7y0K6@&Ydqk;ul{7F856~;`OPV zpc5uU{Gkv8L~`vE-%NHkPA8H3TN@(@9;CV-w7Y-o{OF^}oR_!BNT%{>rU_NNX zmQR7&40xxBtv)fGqbvP9C@LAyVf_&;AwUqcBdpf26ywHcw|`!~#u+R6fW1H+%)~bu zA;BiL8_Rl7i~S|)jg&^ z+Ii#~0vvY_E3?vA2t*hz5H+kfk7~_5t`KT=7?t7^eYn(>rg>IRfRTS4iGjgy&(t{2 zC%@eMP=G_JVK*p7Bdr{~8QZP9Gj}hAWJqe1t|VsK#gCWArnW0OB?5}eA5X|)8T}sw_Y-|4Ji#JOR!N=0A!1Ddkh}u@VY_@Etj{^GEJFs0q64*MT>aV_+$FWm$`i#yq z9ZB+U*hKe!na1}0wdoh|C~K0G)^AeC!Q4FW%ohfxjq`*d@pR49wvF01#Xf8JV|WrT zD}O+r+9GjvYw7z9qg6!0@weO5^QJDzsh#wx zOg(Oy1xaz8Z5b5~TCoJ;hiD{Ul9!CY;-elyb%jIFav;&0Gx?&5_8l)G-+Z9FCxJAy z)*3dgtW`Z1x#AWtVOV~yegIX31Nqe-#M6>T>T1dK{c#^jWWGQ^&TL3|qG_qOTWC=^ z`uu0^`?YXPQ%Dw*RMoY3i#*!jO@WN3SJ1!NP|-|e|0EUfT096Q7VFaO}!uc=+A3=>*P0wnZhx_b8e|x&FPsF4~7HAq! z1MZ2>Fd!pY9t|0`=03k73?DQZ>;>(_M+iExO59962XNn(^~$70mcW7gvXn-2oTw+$ z?m53o{W}yHc5c@0UqAM`sF_5wpfV0^);$t{00I1on3-) zGvFmDdD9q<(p6#ogW47}p}wYT3J!kN+{qH(*R4$i)3ok9BGd3RDBR!)%K$-u4t_m1 zx)j70vnTns2;Dg;nfK303dSAT7^4%{$|+(=vsTRiTXZb4NJjcs1rTLV>NVrAlgj0C zQ$YgIC+>VH*UA7w^uwLLI=CuKA7>p}v=5*#{ZAy(?2Z2aKyf@TbcU9axWqhVCtd6V z?LTM(oV^)N>h(tJPiwst5ymW>@p>qX5guCpa_7EB<0iRsjV_1G4!RbiB6Vyunl zQZp>9;0mWbYk@oZ;kAhK(7~lOsoEGc>yCb_dEr1IdWyy_^Y?M~X!fz7ZNa39E~@1I ziWf{+8?yd@nC5;&QVEO@;St~-C~P&(hgv{UjY@jY^fQE;^tJZ4grMaA#~v*Dmri77 zmWVWT{=ve1t4O@^AIaPCK14>M4nV91Blr^xjGQv8S)MChy{PVB?F|3}06CXBn_cgm zAQj^wz=k>ZOL$#4KsUT@zU-Kgu;n7orl-@Xx0t)?C5r$90j%UFzu){Si8^2sA5-~E z|C>xeGA!1J!BYmgVy((fhe(q3nTt7ox;WOR9VI(EA)o$|$^0dLk$nHZ!L!jo52JE= zYa4%MKuk*AyQV4P;4}T0Qg8ftoUjN4=S%6(cbrRZ0!}(NocX5hGLdtQo;Mjll}pcY zF>jN4LJ$myFSO5$&>KTk2#lscK8gh&)EyYUkj|~JatHP-=1Vidy2j8lpayq?YMs9w z0zV_?P4g9|{LL^shI--!77z9j!R8ZgG=LGfkBs*o zS-Gow0p6U6(=Ifmz{4Yo7`X3~D@4<5rysc#)p5M{JZ<~&Z4y1khWZ`jNjB4v8ly@U z+b$|b(~zcQgnp)V(x^8;n-xj|GY-!R3hmUFa~KD{M56lNnAtoiuBR{rv3T)DjzdP! z?CD#()DhMz)6V22k9HSslerRvrQDiZm(qKD|H0}`fEEuRK%y87n--t-FNdZnyoio@ z)km#fXfPba4AH@uaDe@CY|cHpt-5`MDT z)u=kU<+R*0v*ymVaOE>&ByVw=wlQR8Ym{9`;(Y*cD28{gXl6XOx*8{cQ(w2;{4fa5 zs6YjY&PvN9YhW^DQ#IH>A#`zT*7A$KoCZ*o^hXnmfiNn6L(T9&+=zeW;1dE#eFvsN z$y}OIi>IswQuE=r2vzIqs!VW-3tMX}?ku%!B7j;ublyf{Q(k>{(VQmYgu)mZ<0v^L zDY)(IXJ;QxSNyt|{O&XFmt1B%#<;ZOxPe}cL7 z4V$ZztuVH%=9pNTr|~;|ZCK2!Q!9g`xf}O+_3GQM>e@+p{qTehOp8tthjkdR_EbE6 zDW@U+wvF=a%o4zwsYxs{ehpEwZfRjW8@WgdS`@$?8EkxI=`v^iP+xt_K}HY^K=kwe z_D^3V4OS^X1xv-%O0q{YRU-6l1*x!Y+qK8#KGUg_1vtR;9>`;AC-$tyrxpSAgSo&K z7nmT|2*^=ItjYZOB{_L-w19l?`?#Q0zksK*p)Q@&dS(rhtkgZ;a@?663?O9t3PIm$ zrMHXK$-mf_TdU}HPxn;YMV(T2VT_Lk#Cp`JM8`ADCEZj|ZOW!Qn}Bh`n&>?ZO>149 zZRt1fM*Os;rK(DKK&_dMX6}ABw@dOq-zop9LzW zAtP(gcfQ*R8k+88^_}9slUFlkGKHK~fhra2yi;3T)fs<=6S-8}h)Lz;sUS_Tp4ReQ zVcORov(xJC+8v-4!%ETyU#;L!^Qfks$WGp~4n#9#)UnFZ6SIUuhRDS`(^PmG>!`r~ z_q7@9>F!v8RWL!}qdYA_SzUg&ps39md=n*iws$!umlL_Qo@e+flme``?68W{&tH}t z{vX?1E4=<7(h$ZY1A~Y_a2k2>6_pyM9eX}lux6h+y%2#365+TgyIaOvHFuqacE`yD zMwXV~b?_5*`IfKcK}shN^rr^q6?=M&V7wV3mRgI<8Q%3{yGoSe!mDiAsv_9vf-rji z41eo#oL?qvBW^mb_~%Yc5GH1%>^rl$trfp5LL(oZQi3EyraI;^(JB4_ZELtvF{{6- zzFJ*#Pb`bpgHdH84*+lx8~HO-;;yRwL*%@B(@V50V|$`YUj{c@7j-I|bf4Qi6?v<& z;AM}plR{Xq4t}{ z*i%kKu$N5?;^Z=*nS;W63in=X>N!#>j?FuQurUh?juC#eHI{jGaE^(btNwcB_<+N`3hcBn^%0^6D{nT^)EFCzK$V=MY*y^!O3Wyv%8Jzp4B<!72P;Gu$Abu1Aij8ensp>O&?R~dNx$`DK0$q{hA1Y;kPodyMaGFl* z-o?6BHv&l#yrA0=Kgq;+%F8}O(yqAsZ%$;*m~DEwqnQyc;BVfOoM(+C{DTt45F)$W z%DqG1qt>1Yf-Yhr)YC$;OT9VUoB2kH0Ws`SM4YXmT*7@mLvmwc4UlXiFGsE9K50x9 z;q$Stq`OL%0gto0yf&h}S1yR3B`;M}tBB9*rCZw;f9{ZhRU04h;S>>r6~)>IVg3eX zJ5AyU2;pYlelrFUQKiEa%bpKMFrmbn=d!}}gmB{2WYaywe6W`(`GT)22u}#1tQgiO z(l{$G`E$&3Pew=9u_g(SX{|WLBK4TT$GgX^4HYmdvrFTTMqk^z763!&&J{bQ zML(gVi^92xvF6NH$G7fjMwu?VrM*VsvZSyn^?3)=jP%c`4#%)Wp5Gmh=?(}u3{=rN z_DEgwG*#BiRx685Oj~^CY($WOM?{-v%)qR4%!}w`I+6{vl_PshN_9p&xQsz3i*3ER zjnCFfNQngQ;JRG58{rxY_s$3@=>1Gr6LCw?4G6t@Fv8XxJCb zYTgq<0Y6;)AKfJ74mDT*1wp26P}nU#ZX0{Mcwvk+1mfg*{(1IZJ-2S-q`}ZbDI>1T zwpg~VJGwa&81EOyJRcu zwE%n;^~czP27yqZQ{mNi8vlq)t;_Ue@>e}!QUwUOlgXE!U?w7wn9M~^NO$~60l)?wJiR$lhjTx2)ThQk+cyFFK$|RLpn;@+SyGS$lX;) z303A)BZ9756C7)=RnsG8cB%ahzGOA(^$NY47EFwqbYkyCdCVlCQp){E!bb$ByTUxJBUc$7M}~q`slN#UFt(?hp2nu$QY6_f6>7Sm*2QH zb`SIj%S$)>ug4v8p}bTzZ4%NU6jBxc@Ab}>fOAugWW>c@6Zq5B&Mj z4A1?1u)C|Va3EsY^ogzER9jjOv=UC35o|qTiz^2NhjEE=Gk09ZvKD$1O1is=As3g3 z>fI#~{TZb(?;_??+F6knOff^{;-4|0aai|hN8X^wRU1M_4eAObk~mdnZwu<7p8PgcgX!hG0WLKtz;+kg>Dk7v!>HAX{gliRASfGd{0q29e^_+08y$lC zfjh{=L_%OwBq1Ty#R%`#k#oVQIGr&2=gmF$yG)*c!NZI0C`}2xgnI)ZmqxpM=*x>Z z9mX3#(x$Ro*jr2XxsLV!AA-8n`*$xiin0uwd%Sc`IVizC5KH*CU4Qu2=R z5UVc>Sak}5u;Zd)n_DYeYTC1GhOF-uEU4bPi4ECj?IBem=6l=q%Z~&D5XnQXF`rz0 zuYAv*$ioF)xs7^V0{NAfBk#Qf+P-|9(6C*VbDrkjk&rVE&b$_zI&AK-_l)x;zOEJ2 zWBts;d4hLUr6u|uJCjmx!D;yf-v?d^BBwtt6^s*lAHU4;J%?SaXr6_&%fr0iguFPc zA;CScsJ6+BLvQ>Wh(K^9P(YpORlAq_BHbjgGHE8$AC-HMD+x#?$4+q#h5qxOCa+!7 zACXf6a{E{e)d5BXNC(=5A9zb5G0=kjqn`i(OS@axes3ok+8!f=ej_H@S*MPVv7m^bs9H!`mx)*(4oxnKWZ-lfxnB0pD4F zEmf@>CT?o{l%uZuD*4evlE_GIIq`7qZEOBTQ!mZK3!>_SAwv~j7{BaOp2+khw42HXWL)|*G ze0OD!*2t;f_j1UDoxc6y*Y<&Pib`5?@1H}dj^2j?pjyXd$zK^03Txhxs1n9_9Nuo> z_940_6ULChKgB_vHv}dRnivyi;ESre>A`cQ_?1Ijo=77I0c8hD5QyJiNtW1{^z{Z$ zMhVi}M7*o{5;QBK;UG@=I*a88g3PxFAnH7oZV=KeNo0O^SyPBE%1b7j=Rw+=o4~5!I;@sVb}M`C%9=k zqz{ZNhjoxTq!#ICk7>cHWbEEh3~|Zp5S5h!ULjPUJJon}D8AsMGL&9&5Cb5LIBw@g zckJVw!|RY9%Hg2Zb-||oA~j8T4};qt;ToWW(`dHfG;6WmgxQ7@_g^XM>dG>htE#gD z*|a-sT#mnPMR`Me`Y@nDI(~l9B|#YsfEM|LNn#cBv`vL#_wDGKMvW6pk2dhpd_=f( zQTnIPHcjkFFLlpHe2mc~k{9hg^9L&OSS$^j4)~<)* z_NZ`5cE71SWagFf+p3mp2{YY4@UI&!uwewG(d3lZU~tK@UAa;MK2ycrdM=kn({)kE z`f9HyF@#4^t>jRYBcS-XoLCtGqngD|F%H$Paa#XOB6vf!UOW=y!@_$b; z&tPGd=z19i_eM^3(JfZCCM5zE^a(pj3rZX#_LLO!&O>uZZqal)wWq8f+vl{j?{Spk zJ}zSi$|6o5duy~6Xi-OpQE%ZsPAQxEd7l;>&KCl zvX{2MiaPd}b@tg$-PC%Iuab!wgzlaZ6VWs**kLYX-OJ+FsH|pYsti(m8aF?i7XijR z-HKX=Wnv;RgH@W$CKqsrJI2RIRF!@DS542=2a`D0_Q=AZ4aC{}#kcy}_v+taAQiZp zer8&{$lZX5tX`+T>a}S9Hdo_UI2N;z6bzV(Hv@m>Uk8WKccyvsC;+nhjZ(%pnfbZc zDZ)KyC_VqWQ|0ZQWOvBEg%8Xs*X?VLcqss#Ft&mG1iNAKsVPn-Ad|wxJ&Wjs(@bo9 zkQw{BMw(7Ph*fm8%@TI}{2QVmD;s>2(^`s|vN5+v61$RnM=U)0A`^0$S=%4U2Vy7J z4|Zm!(}s~2Mn{D+N{}ry&hgyuh20w-PFlfDgk3h4&9vaRB-yg z`te?D-a{s-*9x)O?ev>uRs_(sn0t>|<=MY_L1ksX624U$ZtLZ+)y*qgDTc^N^)lywroXzVS ze)~7_Asq8fO6b~A)pQgp9G8Gsg^1Ixm-hC>m zk{*Q^zESoCq5-@s*gw6Dew0O}s{^)J(Z-{Mg~F4S%6VAAbmg)SgtcpodQ=&5wg%gt z@3a%qgHTRP;Xn4+hP;E>Rf66U!pA;f==)Gmt0AWWcy-GQBNgl5XQS{m#8sP7#>-=K zJJzCU?Xs!!axPU|U?k&-gI3|SBQyFKeKqa!dnk5sMhP6|UyBZ07q_c(e(jSfKJ4bn zTlPTu(`J*Z`L`-Q#PQjGtvF;gZ4;NoG9jC1nh79~BKP{)YT=(+`@YAaPI%uB1m<-* zD*0ZlEtDOsh*aZ?3@z>Jf>=3)Zr89retMfsLzCLZL`luU!h9-97pGI_`cUY;x#LoP z-x9Q}zpOyH#JvrMJTU-CWR5ln7hvp;W%S>|-*Fs&NVz}O$4l3GjAiY7Qk7NY>PYUp z&$p%l<7NMa8c2M^>3?%l)mc;2Hi@#|7?*d?yJC zDHMc=#O(yC$KIv+h8(V_Ph+kn0;%OpBznoA?~%Z5jJ1fRy1M$beG$L)7LzkiXirvg z%X=J?!zC3{)JAjuPM-Lor5?5ZzWQ&_w6vP|2*3|qYw^DaZP)GkHtVIB+A9Ix#YT+b~S2YLNa_{vK9)pV5is6eyEz843 zYm67XE2)`|Un4zR<6loI+JDGfpgiPZ5rmf8o32+G&v(BEwfa<|V`LEP^Jzq>mkW=( zwHya1e#PUBx~A5@gAbt&ruA@@be*RC+wT3~?nFiG{ImwP zpS6Y$tciK;Z)U*6On2D=0*EiUpMEmkr~d&1>1;r;E%4wz0jQYRODWq&2h#kT409HJ zkc)qMviii*myo)Gkwp3qql5?r4}1G>CTQ-4Qa7w-O6K!S{l%bwLah&LtI@vs%~MQp z3ePLpyw^mn3|^7}vT6;BTV57#HAL-66Ja%ah;twq7Tr3Q1`OcCy@g(9w3VDKRT++h z+M`#%#uAf4VeK`p0TiS^O>jK!DBlP!9j=0Ze+kZp+?*H-IxlZJ&!v;w?$aXOTa*;c zDQBx6j;hn)bZd(ee9$5yVu)EMc1Y@KlUXHF9#y)?e3pM$4gmNqcO#Z^=Ga8dngB;5%Ay5MEY& z4Ex>v_F8?RcTEhFit-IfVtm+kv_mUj%Pg9~@uQ}`$N_|WX5<@JAi69^rD@qOk7Nd2tqFFyV0 zk3%&qA{*;kDT4uRMx1*w{R8)K3QwhJWIu(D3K$pt=jlBIc^l-}NE*ioBIoW9#riTH zuZZ8jPpiXnua}y-kv{RFe37CKU3!u3ITR`jw8JwDIN44Igx7(Mq<=uw{g4F z7KWFk-udn-8r!TijWi4o?=d}FkTDu2hn@{3IUK&4C!0Mw&=o^zS56z$miDGyc136! zgCW$joIT%UUmB>xTq$BsQn6KcETW1eE{J9M*{5dxG;UK=x#00uB%#VA&Dj*AzJnAQ z8Z9GcFyqU^0jKkHi+pV2ZyHSVVybypDmtUg;Qa)5S;6T^Xw)F<$Q%9?a#*kNk%Bcm zGeH1h0Ok!_ZpY_mJ{}dmBtqW%`EbErQZPLNxPR&1Q4epn%SXBg8$(Cdv9IwQr`DnI zGrc38NXrY&^lURNcBPgVhb%ALAzMlr$Zx>yj0Mxf+_Xu80Y(q~Z^^UDLTTmlsmMt= z7jj-KW2X6PiDxaoT9?FkLeI9x6B*3kv&Pk(9onpad6xpCkelaA2eWK?Y3qQ05%IxT z7A(TYqw;Mm+sW(k<%bHX3d_9P?p8g=L*}Yd?5}Q#*{3-fhm4nw)8lT|vHcDLYAGP( zlnk*v=Y>Cp5Nj^G07@4KmQh1WkPwo)`!1qwSq~o}!oBHGb1iyXU9PF&?BpW1>sxdH{*TIqBZP1EMQM9Avk#HE!B8v z>NKA(CcfO-Tdt#0wLG1i;e$%z#nC!`2>WZC?Bc;P<5%!2t- zG4}t;`mTWeFewiZJ3Nyg`rYHCEEM5-Cw8u>2wZ%Zr!@K;3;cyNXI;oz+TtT+DkO_4CEvH>332 zDxowdltcWhS%%OWjjhnI=$ zd)OnjpLIVwE#^hn2WI`Sn}XF8zwD-5$AjA$HMPk% zs_SK=8&u7G3@CS$wx}Ivkk?AO+B!(LnOO* zAt5J_y`I=7aRv{(|I*^$fa5F~4AjTUBCmBtB_LX3X#WLBv$6o4!KQ3(sKy_V!T&go z8+j-ojK9Gk)Or7OAlCSbs)x6$5a-&;2^77=hJTmA$yV&U1cv`Dbvr{wl%VLQ{DlL< zX4dVCQRx3|v9Q0;Lp_eJGh6O9gUQupdMOEm0q?)9w+S zU>4(5O%iwSxsuUj8FX7N4Xy8lgcN>m+vNqS)ls)LITjN{8G1tj+0F)MYdc@MsCQ7V zFYE75Do!)X)dLyct@q{LwDzP#)mu7_POBAZfY%VKUBi!+vfxC4Xt5LoM(?xC9ccglc3iI7P%FTIoB*0%o(k&#}I=X{R@5YM_008Uq)=*&R&isLT z{-_|^G&tUZWcZEE(3a^dR6fI+Gq7u36v8MH_g={K;PGR}RIJ)7p0;P}UF|vbn_I^( zu^z&jLZV=8zmlU-D~^xtqvb>caMF4Su7L2Ei8;3fNbAD`wP{S%VLYTxd z&C^ii953Vi;6=3|FH{JaQIgyd5+%rrW-T%1|1*>DICm6{k7P7XW*!!yYs5GOBoh1_ZOg?QU|@ zpPBGrfVCv{AxkspnWxqgu8X)kTU-7AtT?1`(4`cpe&RqUEENEo##ouSR9g~;tTjV> z#rVaIo1;6YYt~%O>Hv8&Tl_gjBf9;5>Zc?gO?5%SECono$Y&v1uay(s&!hlg2WQ>g z8kkPzv<-LuRZ(U-^oLG>FZ!Vyibz6he8#>1gyO;%J0u?scgx$!C)wjk*>8d7LvOI* zSB&Uv^GA^u%!_R}4_$(E%cn==;fZt7!ZvoXx#r(4n44s(Wz}jEXQo*_5l!Y0T|ZFe z=k_&OcEz>d7`70SKFKf)j4&A8L2CT>bHdIm+fw-_UX~gBBV*c|a`WWMf0$T5=I^Tt zCa!qCFA#P??;cX#V?g}F5p7bt(d>0UUVq5t&ytl#LY7VGRuE@|QN_nrFiePPYx83_ zw?TTH_BotIDy5Izy9cN&Tl@R!j8%#2e=u6DlFCq9HZ3c#UJ@H2=epbn^LpY4SeQz} z5|^KHfbsr5lP)}18U2bL@Z6>3OjeUh^$NuyTHD!28JtEJtyT|;c0(owyLQ#*Ru|uvDj2)NW`R>kmN=2!UhwuPDaejl8)Q5C+GZX*(?EQf z4y-B&lGTMYbM^5pl=&AQ%CJ5G1G52LaQLOujUN1fCuO6GF11*b?~-G((V(0T*Dz}% z2T#8K?F%=j*?m%}f&Y3ePDtV!184CbZ7t+B7~}bJ%y7jO6NFyMhO?G*Rdyw9kbfzl z)N-?ROn&_Zd=cVzYHd6oT&X-r6!ZRtVC(y6{49hU?^`K+vf=!p$I~1=$5X8*9IkMW zh-SUrZUuM;Nmb{mFrkzOTuoma9a&od{lW$T`tgVH??;eV5A60(6bKU`-4Ik4RMX1O z+Dh|W@E@8mOWiSOUYq_s<$)(#S*7eE$te9x@?EYl#4W{S)6aLi+T1O-PR3VH;A2t= zJp-uBsn0$K+&YW@fDV!Ik39QZEoYj3YP)<{OtZ8&rL2*zK9t^Z#H%mYewCOYgc2lK zUHhptq^QJ(vJaH?t8wDtRWOgRp+hUC)9>V`!xhVAl93f{w(AcGt1`!c>d3Q8@`7(& z4a8B5<0}g%Ej>8o5D*Q$-9&+_`WKsU zUz?V+*si|6FTg*T2$YxSfbyo@N|Q^2(a-4nZ+*)FAPRZ#!~; z92`F{326tOb++LgjS}#~Vu*l}YPqlLN%Sbk__QV3*RwC7c2XFXoDIoPIS7YaUeu{c zf8CY`L6+=~N~WzJryi{PXkEK7Bpq!oB5!8Y#g3?=_EI30!6vsk>a4KzAeZak-4+ts z@cfExoJWYH@5Ar>1xIO%@M8fKtT5DOf2K@ERq$&CDn-lvc89p)Zl)=_N_F<9d`IfW zhu(tACakDRhzHxxsE&$kI7dY!{%PviR7l1PsV&2uYP1uQS zs>>fjU*SUI3&utAq2HlvNI?7NvX2y=*Au29)o)u}qQ~7;k=l78PCBpa+Y>wMD(0PG85t*_N0{gDs|l?c>Xsr(r z6sCS#WE&DEej57!A!O)Kh1%9hp<^0rdJ zv_GScXdqODqAto*wdPYGo|ZmdJU=2zf}kXOz?*=KwfGaAWQq<=vg?^2@iz=W~iVw}uqr@J$dGIXRDb%aWtb1ol&^rjCV=IsO_4*6GU zF`k58V!m6{G{D!CzZm~(36etbnv(D9cbx4L^npo8kDqu#FF11qDI-GAOMpI!LfssK zxBsL%^u8Jq_nh=B9(L~kkgNV7_kb9(Ya=cZ8d13XMz(!OyFGWrOlew9licT({K^Jx z{w$+6Nd!pI<3o`4Yg2fyq^uSai;zIJkJZ_nmxC3IZIVteStT_Lx`YMqUHGn+QY(i1 zI}uDPH>1)M(}(Qa;o2_4e+ms#S>J>x{1-zF_<;0MDh6TYT%d`IKU!M{!eX>^L-X@> zbm}^oKv`|w0E%s}2?C)gpkdabo5A2On$@PJAi^=-X&SW(7)gh$#+&S`hZeqzGi2Sn;RV{&IKis@LzD(#h@s4xu@7Z;ITUYVowdOG@6%YQPO$CJU2SbtOzMBMMT7KaX01X;VX z+(yVkKSt6AgCx7z2=S~P%DLw(&^~pumQCWzZFf$XxlGb-RA8N0(86%DGRoE8>WtMi z*osS79!c|fVtK@`W>P1LQPKfS7@6ISj9g6=&+_@e6>?tJAC5pfu6rvBFOsI9)!y0A zpsu>vc*$=aZA^u7oYI)fIf|`msg93c_{wWS77`|pdBKrEWWa#X1|IvC_P|_E)<9Kc zr-!_BT}V^4I{i+n@h&`HH2gG>IBK=WwPW~Wa^7On$68X`RtZ?Ea^ zX~^9Oy)6cKDctl)&c64Fa_KJdoWDLPw9oN7bLOmBBqCIRSCPt6m|*CbtL}>neu@>5-}iDhOmkdOU#NbmQ+8 zf3$U>?JKOw5F0W31rMxW6iwS0{{oByr`b0hc$lQ*8w5N}E#uXrCtMNzu1I;pI$a zA$lfNWFpk@y!@6upj~{vl3S2RpD@MBiDX^a49WMWu1PwaLnDmbMrH|1l4z!Ho+7q! z(wlZugTu+uq_I7&mE&8Csur`>)vR)kR={y$gI#V7NiJ&f2ZpiBu{LWjdI(Lk01jTN z=44VKvQN+KGVS%3HQ0jSpt6v4IHb*f4$u%HtA0vDO@|N%^%H;;i0}tAUvrWFnG%e$ znWuZ26T1H0%l0zdNO6COpH(1$yy|r&DMEopQah+sCbk)F>Y+BF@oW=WGpE^EKrcIU z03G&@Ly0v!A##fosnH8)20@#R>d28brvI;%VtqPGn}wn-7SFS1`^oB3&<}~oAsdM- zmpeC(+u%AJeI$oq(4rSq?+_Z%G00PVS%@;$2pV;88tm*@fh8mv778v9aA&aIn;QwXsf#Z($A5%6rZN#p6YDaw2eJ z#)MM(jW+OEv)IsRA6=&xW#2{k2Y~edS%gI@-=hL9RPuo{CnH?}?K!?G-qB8!ve(?! z`mieU&F4U`+zo9nyB7zQRuBg+wr#7}q7DNh>>|ncD-wS>I2cjQhQ+8p) zB#wyQnogSPn1?vmYim;j6oc_IQ#<^!8JlHkEBjNd%?=>~vemhb`>uW&DzvTjleoNE zY?@wUpBse%fs?AO=a1F6l^{n&Jz+O(hf+ec;lrCEg0&lqmN--PHQg{b{IivxvsMJl zOX@1~YW6(%gJl_bE1<`S;b!M;n$3Ic_83jSNyNXRl2d^Lx42%=7BuWc+=EW-`g0p? z1k&^5u`T*YK9>_G9eL8iwy*hA?tq&lo22VkR!zZZIC%r&bD7ZLq0S6={uo=vUhQv% zy@oWJs~;9BXC1(7pNaDbO5=^MynA_>%7G|#3nb7$6_0)<4x zh@}f*8FC}6AC}08$QEYg8J_OEZQSY4BY{O`ylg7^D2c8yGn6{5!JPp@o;Gsa1Ym_Y$p-3EZyGlKR}8-P2HU4OS9Ku#?_I zo#aSg4QMWb9G{%p8YTg=hgDQ-mFlBi^LDtl^e)m7-3hIoT*|udo=w+aP5+~5mN*%8*1ZyMF5Wq3!O{&;`H_v5}8Do<_>0{ zlU`J4^GBl-)r486QVo=n{*`5zI(^SL#DKwx6q&M|;X8E3Q7d*>5qhlbRnOon{-fK+FbtsP#O{9NuX|PXCc}AFF95Hdi5m$an!cnPVPQRWHueA z(dmBzBsi;-yH2t6MOc#Q`axAw)3896cEjA5oT5=grY02jXk-=3_{;}4e~Dn}i`Sc= zaS|Y;`O>ipmS!|l@O6fPZ6Vnzu-U{E8%O?}CA7~KSfbk*3|8=vFyQM(IGg|5d!hme zF_k+s5Z9#tfVjpjhMrx0@sz#v;K!d8Liz+&{>P^5d+RdV)y9SutgR82J19DEbX%f` zX-W8osQLNR%8BrI6<~6u0qOmS?^M{Z{ps=yy`EcfjG1{0--pGomu8_}mjG211lxy2 z@?Mtpon81$ll6&{_=96K62?2?n4dlAi0dR)^g*B2Ap1bUCxC_hkK-8YP|NP$T~fzF zv%@e(JeNEeKPIxKK<2oF*&tH6UThaWv=gb$m#|c%Oom*nJ?j^QF@LQVMN|&&RJtfH zL*Wt1wbA5atX!L=2Wu$HYtA}$VHPsu=P%%2Gv~d$^t%diXf`cL_lx{4dm}fSO5P1J zvAy5McUZz(VKdJ7upM6}iz{HRW#5vT4&?RDEm64Tj(wzyY+#Nt=GO`jSQVPB)* z?|sA8lJ(-p<8`t5-@$oC2I6xW{bkGc?76hc0^s2e>Vyk%v#2@hiuLyPUmQ76sEitp zkhW%9V@bXRL_Jp0kPEW=j6Fi-uEDFSZ_;7|3PXkH88KrW9FH!8wU+31$TJIiUl3Wv zcv?hP5TaEdZAQibM?kp0EukHIrN{Y=r%DjMqTlH~a`JLG-|B{Usl4x!!lINgtyu%3rWFaN{}P2y9&gDk?Q zZtClB=>X6=s?CKOComV;!r_CDNH*R1Bx0^NrA1TpL#k3}**M6k3S48i?UyTr-pU$B zB?d65Haw>gUuJfI!NBvJc|*tUypu1M=SzepUP*FWn1XLt6flMABgRxzGLC)VnR7V2 z2E{l2D{y{1b#Tksh68Xms|D)2aud7XdnB_v3jg)PXnHbkF?U1k0tdjjIZD8FyWjVnt22KREeTG^m)2+O;b+QPY&^i! zu52HtV&111Qt3-V&luA+cpwvOxegM_4{y9>zn|m0;1nC%yKZAkXea`+CymP*8JGu! zwUYKU9s`?YPf=04AM4_H%`DTMS>tX+%Fuz6U0HozP|*8aDzR51)WGc&aHW+aw7@@= zAB}=dPvwKtHVH;VIn;onFPs?1nWbqCLc(C$mSbZW;^pXg_>GKsGFl>rs5{&AFZ1H! z9t%}_hOj?GGvQ>?;8#ehjSURH#OyPdezJ`!J?c^JVNC#*>)?(I5_dE^eFub9L5;k& zGxVXWO!!VT_q7i{WzyryFw5#!s30X0$sy!OJR3c=Mv-&E#fnh{`T?(E&GuZ+iS2XItd=fn4Y zAMAEGY;R?*2F#~%smv9ZuEYv_yD9WiWUb4H)68$l9LEPm)S2wn<03(}_veS`L0x9gXZIPZq4oxH(ZJ=pVsm=!l!<3^Bo(n(jYWiQ zFpzbS%bzMugN5j9JavNKGBD=LCyz=NQmCHEOQ%%rn4-!~Iku2vhGb_?N zCjO!kP?_k*CEn)C`n81=!zeF1c6(&%_>FqV(0yV$xrw-J6*hNN z-Df=yW2Gc1C-SG=W93yfW{+WnL(L2_j||`++K-*D!k=4=-u|6U9OoH;w4ZCq)191E z>^=o3*n}@!G~xuqOsN;3?nYJ+T58+Xf;gommE1+4^`%T9AuXBrCgT#mbzeCDZ`~Na zwojWI}b?97pk>!X_}{Dg9lcVvA} zH{V#!uv;X_0UC=Nl@W&axkKRnv3dHv*XzE#O6XR+9KnoI#)ks{{@`46sHiVV`)2ui ztZfvyv50q`Xb2MjGLZF$@~}r3^F+1FV-9E^)JicD>w>gOS|CblbOnVKzgp3)Z@ZRl z5;s@KD&1f{5?CQJ*&y<3_S0G^=}EASLO=*Yams%w(iW}_BbAV=jW5}bZC37=4?>4UjA8!=&(Pr4>Q(sE>H3_27{IS%4| z{q?|3ROSSu@Aw*<;KJ&%LE0bfy^-1V^Gh6(HmLJfwM@jNYi4PiLWTjKyFt+bYun_p zC&>|)%AaNVg3fM36 zVLOQk<8x7u-!2#zRhf+nkxH!NKT3soM+EFtG9kwO9T=CYkbF}j$M+0BzDM!WGg1MG zSqJS-YVV11W@=M7w-6YQ?c^7j(y$J{!K(9aG9NZAO`suO?;P5H&?4)P29geS0vto# z_R0Fv2d?Zm3e=K+;lur;xaCuKccXPkhO1CBGl#)?EM_2aJW8t~Kzt_~r0oXs@#T_> z89KfEBr1DKoiqe=k>y`94!A^5iKsC*5C{t8fJr=uXy>DWVXFloK-G;cewH&3U0f0k zfIwGT?4mn;RT7~}0S<^)j-u@lz_XO7;wNm{XFr3q;v^uI)xWcu4;!R8y8aT!0#&*A z4nWuVMOUf2Yt$i81*g;ehy;C<_6z+KP=NVDz&@8@{4o0Bk4Doq7J06 zBaBGtB1PDr9B_J`u*vdy#!=`czMmQ9oV7-|92M6R8#4; zY@kf82^b>l3^)UQ^dPjQcO^SP0XhWT9#}vzX$_nGs-U~zE>#=(e+Tn010@4J#*YuZ z13aODlsM?f|LF*7P&5~-?B*}-s+ka$a*37sDV_RFDI7+mnS?7COAl>D`$7sja^JaG zESlajZ*x(aDx_s!BGYOyLeqZz4JLX3k7RI=YpjE@2hWT$%l+$!FEN3^Xa|Wjen%^* zYL7V)66@Arx^?mY!(%902+?v6;VP5ko$<%ctg4L z2F3Rb4hP}uV%JtT;$wM-&R0^RmW+vkl(Z`YS(~8O_>_RxI>klvGmr? zPCj~6PT+%>mJD8r(UhSA2$(lJ;0`Q7gA49{#!cDb@AZaTg5dVSr$%UM0}nep|GzkA zs4V7c(UDm09V^es$PlFm2W7J-t%AN^l-Gr6mg#dv%k_PNr@qDApt`S z@ptU8l{F2uWS{t!V`by_S1xjEh4?rMDpU-{5&z|>EU#vt`uazVyEJR@^6-LuZPue? z@;FRYie5A}>k1u@+k!GK_|7Cr!T4g-ijs))0maarRGqeOaP$JYMLx`4EjFc48XA4TZB*Vl09BT5nh3h3t9@I)4EFpUk=o53wCjq-l z#h}2SP+1M^%*1$8mD8*8N-vn}rH&3^;jDxR3Zkh+&!76m7KE|hQ7dJp!y7CByv0F7 zgDl`_$0%5ICUI!*iONBfB=j^=)XOngv)i#SL59_WH%sQ5>$Ye>EeAbE#3fmGd)lN~ z_z_qS!qGuB{NmvV8a4gK32I`1r=h-`L2KjM7CjO7SOiP>-vRBF0Yd~`U8Li%HNyiM z7%JPf53I}IHG^aoWL6TZfT$g2L$uRL%qkgqti>Bpm@dgc&>d{hEd zF%sAmx*$SNS83(<+E-KgH+RTv_NY%|4lQpe&AfTrhGBYwTV93PrppC@L8929cV0cjILAwy-W+=!& zYRv{HXi(ye1bWpb`JGCk!Kh&N-@ve7$p*3kyrBjXVHp-dK+z7aiAx36A_n$^12AC@ z`5#Xyh-S&FCQpb!HJrw`tdECuKfn|)xTP={ zKNn!rq-TO;D^RXB)+n$fz4VW&{-0I5YJCg3$E;8o1FwqG{h9d1(TM^Fsc7EfFXxVT zr05{wZ8L`1z^=qGOm|EJH~S}pqM@V4$@TJ98?}Yx;E%rUGA^6^pk5INm`UuvxWHff znO1Tz`eI}t8`jc#pD02@E0o_zKR`i}nXNVb&ES+{2>1gO=Zs}9MDC~yMXB{eR`m@< zK#OpJJJaVUde?fky5X|4azwbqQ7MZ;G@BSr*F=FpSM!ttqA zX=+EX9*JNJ_ghMGFw&fbld6F5qwmd4h?&~HaVN#NHsTu63vodF@%^yy$r1_Dg+^xI zGp8X)U~h=WIh)R0gL5TQthtFyc=}+3pIL+L!j&a(Vo-9CLhkap}B(qC8ODSA%5cQoJAu zoX%?oaDYdI7$AZrX4ZW;sOTmXRly4Sz68Vs8qMThN%sgu|AJR95m&H;Di=9J25o)~ z++-Qo>JCN~#ghn}a9vhK1)gV3Lryzh!-?q?QZ<+mVm}#wrqu zg8HdnFW6wiJsrV>(_@*QieZmHlc?sv^ttfe$rtVBh|6#bm>kSso1>V`~#ARSRi!kZK_&Bi%O4(EX5KtFU> zUw)vCLaGF8wsaUooJz8JRFjN>+j{SdpAgqpIgLc zO*q6d3JU^N*X>diF8?s5*f8giWJt+yH}pRl^w@h8x0cjSd*=1E5de#rO}=aZEjp_| zYTPkzfE$>+PZM4tY=E&~r5oPo;%+~e#lMsy+F_;;t4+w8*`=bR{tuw2;4YKDkA?;$Ki9j&t<>0uU2OztMgdcZ zIa@*b+L<|`WeHsvTA}X~&N~gfY(1otY6i_WuLNS?uwF@F6%PpBYTDyv8U_j4l-I)( z-i3&}t~Ggf5zXn^>trL>KNwjGTc6Zs)L^ckX$g!QS;m zC05S@RWyUkM?I68=Oy3!j<}69UG~aNXd{?`{Wa6xSYnS}SM*q5b&~W@4;+Mf1AHQp zsO|IM{@*UjY_ZyZD|P`ZnsS~nVAeoo4gm90sAF#x+ZTUflvKp4(;3X{J8f@!-daKM zrgN2K4fUW(?d5fDK|d9p_xL$L-j63syLWw+c$ZEWZbo*Ldv zQNX-xK0Tr5uFmxC3_(603Rgu|^T7G=P{-qxoNpz-pPi<-zSNv?RQugun_srcFecX! z{z$nyIC}uhfV%v+xfo4p?aGR9oIW-B@5bNe{Of!0=)KdgD^mNOwK#{1V7$|lH?}L^ z6Rzk`$%cCPe{|`lT|Vtba2SM~IsnGcdx1Eg4^6%)DZ%{>VtbFy@;VycJiiRmbt7gJTd4%x1KT`@GR&d1$rAgkh1z<>c%J$ zeek+Gw-Bfy4?Qr)FX)xF<~I#TWWMG(s_6gNhj4PH3^o8Bua>aB3@L1Kz-6X3n-U5J`W+)sI2dUKu>5IJuh3`i23 z<&)bk(?8)3!zW=BJ?S?f&Xy(FV&wk9@B`dlY&?>>Y!|PYOQqmx9G?%WEw%#p$(;Yr z`zt@Z5Oe@$jR?gAi+()R(qvT=Y~YRsk_2b;5U6{40ZYgEJg%zDg0s1mhJcehZfM~V zxU>Djunsg37i1KJ@q_k}1RM`r5M-GU@?71Yk}Ih#dsWisg$ek-ksdh4m>G<;D2$=g zR=+rI;G3>%eeD1jNiZz-*va)Qh&salaXQ`~Qt@%1NUWdJ&@4bQD5Ggpf9TyoxQnbk zgReFrGFfQSP;zxBiQL zn^X&jtDB&r_aVb3$*N_dNP^>IbNbibb6P%Rf=Q{73=R^dK;QzXM5h&BPq0$Mu4Es; zbUGsvEY11=hO(p%1B#4&A1t+pRI?u1&*?q2Y;M8T{a3OJTlJq&AEfrdr0#y-3@)80 z>}V2SSit^J2p?lX!v^t|70LdrkYa*OPT+cuh+CQ2?HKl{ zq&P*q3TIB3V{?374vEB-q~icfHr*xNi4A+0d)ERWp&i5f+tE|=Ky&w)fg~U@fFR{w zxBjU4x-0%8p^>1n!uY;f4|5#8EBk9wY)g{8N;0ST7QDL|nAfQL;Nmg5yYy}d-WeAaKbY9O3o}C7d(Tex%^{2BF4KtOF zsgRL+!dLEWIj-5!dXF#_fE>+h1Gl#9pTw5BQ9!c2S?SaJs7BItiXM{3WtKoKe}K$H zQbGD#E5X!x!7pxTW3HbAtGpa_r;uvo>v1+NlQAtzArN_KNFZ1?Xy7_|uR6J-yKYCr zJt=O^TqMWe8N45hR_yad9E5HQR0Sg@b`VUN09BNsCW_S5w4EY{*1uB6&ls$hzIC31 z6~ay|M9q&#;cN%o3pEO(gmx^^jq2s}OXOQd=a#46#4D6YIV|kK=S^$O$%?OFN|0ua z8?)OjY9iQ-C+jaMLfsu-W%(2359lra5wsmY$1%R51mcaX5bLn55X;7&Lr z8dBr!NBeyhUPC|grRrjR`4`e=WZ|KWAFBv9w$TY5k??BQDjv%wtPvw%?SiZMuOVK2 z`E}CD9W_d@ghzynBJjnU#WU?9etNx6_ReVqq@Pq@AC4Z!R#+t03~!>$+WtR4c{%Q@ zL8Z5x3o3(XMOhK`lQYD(`d}amXsoY`8|qVBe~5A4ut>@%26F@Cj7gj(ERn8EJTySU z&`c5l>90=`(jg$bDpGBZS~i<3oGQpo72Em>hDE}><{N#EXIKKBg}f{XA2-}WUz)0jcgEMa&_qu*;2E2W{7 zK_As;y8J54oX3bk39G^)BCzbLY}7g(5NPfRYk{idVpzndDoh@?WX{LH6cJ^QV=gkn zY(jkrB|qw{w;A03&={F5p|eN`V=^FbT-nnslHG|ylL?}e(n+YziwCN!+7(R*b65%r z67r^_d!}VXh~_$BDO-K7q)i_>`e9ntG=Z?DBdFE;f{wiXjN}k?i1G27|IUoe=!{CC zv-FRS5i;qOJsz>S)T}G|Qc7etoXfJ^jx%WvnVz2p0?|>~DH{})dvRAq&O#~3f|ZP= zd^L4#^=xz%QZtxS+Rjpu#M03xTBAR#*8yPNPaq%pFXp*zn37`OoHufa{h@)Y=IB$V zc;~mKCP%Xzk{6}NB*r#=Q~O<&Mp1F@Fer5ynx@Ms>}g@<i86xnptJ8yvC2Ok>@X2lRX z-_MS>O3$-=U{73qt9%516i*U4SEbp1>3is41n6qKOLeZ&-H;Eg1Q(%RFc+`O>Hlcm? zl^oQcra2e%&TYbzEr0;SxUW@S2GsdP_>l5MFi>uyarqlgVa(eb>CL@YVHdK>H3$C2 zB!QHrF(B#pEsPRT%dXT?-d~)f(GW)RqSLO4B*{_-K2NYi|+4uWAb#p?i&KsO|N!>?sz16?ZY~ z8YNp;c{XUpO&SN=DF2q`=3f$SyI%B#f5N!Iv2Ar$1>U5y!-0E_XK!ib&!pvIbQoG* zoV1zA5N#DU8Ht41Zz|@r?(!DTl1jT0VH{U06nT)?36 z4CG75$?w>jiNqUvkp{!>hnT_UJ^!BgNJ_Vjt#qdPo0NXvmh)z9CrO#Cyo{m1j#1rp zvoz)9C@6yFEF7B*7AFGVGEVMbxF?e8{Rr}}mwl~DO$Y5+hP_aW?Znn3`AXlwRXZL? z|FvhC2_dPIJZ<}vwZLOCmktxHZXv^ZIn(G0^-%4;F3#NpKbrjALq!@L^BTalr(gHM z)@ogie;k)CVFl7`Kp@sk)tdvbGs^{dajF$Ul&c&V)9KxJIgh@xHR6jA1$6 zGagEYVLwuQ#hUJ^YYjlY_9Z(_oEwTfR?`03)-^!{d3QCf0na*bznkUqGV1ynoCBVW zzbT(6?l+|S^pdr3ejl1nS|#>e&VpQWeNZZ(2>CjkUj1Bt`!IQ%q0gMJ;GoDVI=!g> z*{#J5`S5?HW;~p^Qz?M{4QS3HGN4EHgOdO3gWfr{d92Qq8j3oJ(BseK$>nDzI0l}X zR#sHTKc%@1rZkQ=$?@$A>3df>JdF}lnobsJ zXG<_+{>v>qEyL%{*+P~QEEf9NSQJ9bpZPgKjjV?!>RQO2f7>|?jcHuDMQ<00`}Ojp zoytE4YzPXV2giJ(?L}D69zs8P&!lnZ_R|ej31|>4<(m3MaZ4tI#bJ|25ZJxjkEbR+ zj$!PG3==PbhT6OSaPJHgQ|Xqfs$|WZvN!jlB%eT33qe|H?@5lf>GXWl0jXG7v2 zIE7|TW?dP~9m|DiATTszQLD8RwrJQ8Pp^&SZfmj!PLxRh%Y3KFv;D_O{<24lm;(Eo zcpO0I1%Xx@F`v31h3JKFNYE=f3< zoU27>A5GHzuDFS9oUt>)qhR@WQTR4D61AGaj(Z*&C%&}(8%X}$k*t)TBH8DIK&R(L zmyetIBpL!>`#FXODn!^dECZcHIaWHfB!RLUfP(`JAbn?op_IoxeAN<$)PG^7e;>W# z5UxwFFUsF_E5jl?_ijX2>~P;NAgv~PSj>lfSFCb*qac5<#=!%#TxPlDC(;uoi71HU zwR@MJhxW)w^t5t4|z_ z2Q7EFEo7)HyPY+V^+g~yRjKM?oTcLhrdOLeRaK{Wk`OI0de>>L*kL$u|8p|?Pc>~> z5keK7t~RYsvShk$Mxc@O#>`U1Uf?clnT@QMMR|M35He%v#Yc6O!auvvoOal`$1{B? zT0>PPHXKWGchMKj(UN-36{xe#`;8^;iudd|-Y1z6plZx7S@~14$_e?`JNy zZ(lg8J}k)?`Jc;SY8jT*uqT=2H8IS8XdV{zY4mmdTj-^nuqr%-AXTGi7le=1ExX9L z&d0(T2LbLM!^3sSbek0>kExXMhFs&TU7R<2;OdxBnK~-ymYhfvSLwN5kBAig_XWgR z-oyND)+OTM21Hy_jj5@gFI5}cf{L{^t=%G=_iZS5QnB()><{Am6eS{SH&5Bi!ARR? z6^N8mU011p@vz%B09!zT{B)tX;o)PL;DL_uJT;=Xs_S3YRacScY3`NJlzWrADyF(k z(WH$d|FtA1Riyf9QIyBRCF6ZZLCr!!F)t!#RNet8;99_KS$}T`07F%Q?2LBG>@iGp zsD@Gdb#6`|EVBAdK=sh`+QXX}UDsxzFpB_yzpwTR**-KmVT-rOr~+>`vpokY&Ue-h zOM9L@8Hzoo4JMUdv%&FrkxvNtOxT_ZJiRz^^XGalkY++VjaLqMzk^hmY6H3>=13G7 zzcL14DVo=QA>%&4fhIp$iP$T+eP~uTrfbi6> za_}K!2L`x7pnux}b#YJAd&gNx1-xo#+p%r{j!x0w@}|oB(>+6CSOBJl#iWD)0n#8u z!}IgAZ*2m)o)usE;e@gWQyDYt_}yy>-oCXfbIUkT)T9`hF7J0Y{N`&yr&+re*yTg=8e1B_WKU%A}E5&iEQpk2Tge zBl-fwdbIcIji?%|tx1?(kjtQ~v;_dp;YLf(G%$@qSF9AQRV&-#fcI!<7u5eNDzl5M zi#IW^@{;@7dmVPC-SyvQT=5_Ep&toZ>z-v38SE=u)L-5^(m^$ql6P<^=VcZ+mHor|{OTir9r& zov~$vOC#dBjLI^DXN8>lz}_nWh(49YAE^Arii8kfRLA+{t7qxJ6#Hs&b2rTHt1*%8 z&CItS*K2Fg5^-Q0!Jk@NJ?uO$3W;({7#ASiPc&9~?vg-o!%1x6?=$d)%=d$}^CU@E zo4?V4BQreVL<&BHE#8RL=}~IvmUe}Cu{!Fk(!Gvz$}r75Up|UKh@H(GHJJcn0KI9x zD$zd-Ey-3MZnMLSY>HYwX%1&Gl~bg0s>=cAa$w%!U9V^rTHNf-0uuB z5N=fxUvwL>*6x?ewgTe@)c(2x`U_z^b%8*|?RrOV_zYv7#z-q;79? z4@Aao+e}f%Xpg4V`bQC9WMWu1Mc|d^;sQfE{~HZuzqJNV9WrE=l5A39uPa=?qo&I9 zGjp*a(eCkB2#&JFYO9xwHSn|la10d#kl}TEg_$tv0(rsLW$UQAVUoWG(`>#&ndigp zWP6D{^;F>WaO4y?jfNlnuv|}$7upD6Z6d;=_&Q}iBV63OFHqcEvKEz;Zbn!=Wnm5pstd*Kq-)y$Bw`#ldOARo+}CUPu{K zh^ZQhf6H@}U1igyMsSuuecq zEMr^&G8?IFbgmsCBNih1SSj?V9q;^Z!!>RtZV==jM%XJzKIrJG9N)}t?JSB!vCr=N@y73!i9gb-pX zOCd}U-b-4}NGa3#4z`jysrWMc^PFH+_3Du#UcR!Tam!;IuL(Y=4enzqELS`+~veO5P9bfl92eiHha|L~haoBqV@ zmkK&D`yKDi6N_-_+_{s08f-S}k8PC65+R>YB=`MtDA4vwD_7hRoyWXFSojKL% zJ9{(@+>a)M$y>gE0Il?=WC|Y*Kx3QAEzCaUdED73hXNQ2H95VE#54i{3aPV77Z#yG zw&B`9kAYsR)0qW-cW}Tnc#R{HI3EigpGyU^kO<3jx>Sxn9}?OHL#OfIZV;+Kft7%p z8ZiajBHM=qf8UUGyAkGJOA$+!} zW23+o$pLy$hBEP|(YKOYzoeg0-IE_(h(v1_^~Ni|7q-3tO16J!Ep829U0w{xM{#k3 z|H*8Q_IjGbNe>hVgK!APBTjAegubd?TTP`KAvz(;Kg@ahVnE%b2OUR~!$D+EH^$r` z$QQUsl@F|Uf|*k_6nH>E5pDtWVKQ>V&^~J!^!vAl&#<#oO*n{a0iA)w={x=>r z)vS*Ek1_V3$A-+7B5#s^RCT7DdpU24cn~+4fd0W+LGtU@dOXX!7RI*#_p7RBc1Aaz zB$N5-P^i%>ndfNN>jV#o>qu&-K<@Jho=L#`tv&>-oakdEL)1Kyiyr_jvra;I{o_Qp z3n=X2SFbn6?yOM7zB~SmFLXdnVu=>ujlL1<{)|Ts>BU-~#yYJJ*V!lkuJjNa?$NW|9knaae&#Uf5{__)Aw-Uo3t zAreq%D&ITkwF?EUnR7u{8Zx`~ zW{POYCDnVqlw^~iM+iJ%q7Ba@Kh?rTPPG@b0j`9!FqqN_+VY5`oJYGty^Fm0qJT|@ zob=CngmB0etZZP3w_eS1{P?m$LieVWjQOG}aS@k^*|&~bQC%Ph+t$UG%NI>I`YE?G zt_az;0?Fz+<@k0Y!9e~1ric`4kQe8+q;4P&R*tGn`5RH6Y;=oV8q2dl{kS9pgHEJ9 zuvDQao1z!H-7lK3?51#Sf2i(h@h*l!(|3qo%}g#j2ya8hf_kHQ8r53lEEg7%malX2gRJma^M$ z#>LLSw<`mKmz>-93MD5C^>Hjt4Q^&fQsx|2g(O0V5Sz%)xL@LKM9g zW>!9$S_L+lulj9JF4ldEs?AC!E9lfeP^rzV;oj~RXu$1ANIQ^0?S zW*=6#2xE@>@Dss8OgFwJePdX{)cPg}P^?0jx$9pq{@l}f!w^@(F~}bL{?m1O^OHYh zKvZ|hxYw+wCd5rFRe-_tn7*fYn5qc)$(OPcSxm1W}CW$p8Re@rrh);~WhX!)oiiUfEK(m7`T6xs_AG~I;kZ zlMY)a$mx0HA=Wydg)8ZGyz;pB&k?-5&q*tJ1g)!+&+kg7ae?Alu!G+1!ZFCUG<X0Akkt(_$oqV1K`qn>!vR1nl5!Wg~OFf|=!7x-2x( zc2YJE`n`5)$kKWnepR2<74g~w5nW;Z;~r_S_)04Hm2K{vUP^Aro5a=y`7LSh+ZUDF zF76#Wk%%}3B}}nVDXfE1HKM6@EQ!N?e@CA8_DMVEwbuo9f_*Ic2E;shny6oT6#c2~Z(&PW6zarw-OeEYHT42T%5 zrt^#_)hQlEUt#v6ZZe&1m+j_*q&;^FghXqJ08pd-uu9;#a*f?jkO|r1F4?#OfgTiE z2TqrfBIroBe`qw;eG{ZHzT=C57<9~TmBPP^Ra5@f9yt7?iWVNJ^rek@{0AT)|Mp)A zK*OyZyY#GJCHGM=8Zm{bhjB9v7ZIWs~`eRGvzA{`#x$pUm8gmFsYRRx%l z*3j`5n(8I_7vUBOwEnf-bw|0QbJ4y<=Xic~8Ex-Gh5K+<^}XHb9Z1Riastw&3V1`~ z^bI-L|5=BzCyM4(mvoa|X7;Wrh)ZzlOzOK388$}->F!0aHgfkU8~;yK|Lj`vlkOL} z_s3L7sq1C|^C^Ly9dCBc$e6(_=@rUnf(~HujxN#+b2}pT3nC$&HW0dx5+N^F(E#RI zdt)V5yxPEA6+KNUWaU1U>uq|pKXf#29d>5m)9<|1;*PT>Mb8+P4}DI}h2n6R#9kBM%TVt7IUGIC=p6FaBwcc6k?jKOoh_4MXlOl~LBOO0y=WGm z3bf1gne!`MJev9n52cqe`P=jcuKNnI=K91wD2g8pA9|9ul}T590L0lx*Ll+E`SsVj z^97-Szo#wxI3qrpM_W{H!MKco$3bKmMu8=VbwBNdrKDgyUMZmJCdjnasKh%UX5BMF zd#_fYY38e)@%?>bjp#skk0ub9ZSs55SzXK~Y^e>g3B9bv+sV4z8%Au8f@>Qs51R&3 zZ>Wsn|0Zdk+|zwVD!t>pygIuqZZ7#ahlW#0Cmh#dnjA)5FjZEh0fI6XhVC~P2}S=D zFBmG$T-#KOLJ4>(Xk(W!I!9ldQDj>S*nMK#1U4e+dc5~oFC5yW(G7Cpo9kCf7H)r+ zrlX|w)pxs5@i=#&wSVG^59kR{X$iu8y|sH2slGv0ugsg*WXj43=_NVMMSKhKiV>}?{D;}snxN3NcUA4zKS5N z{rMPuLvc2p%xB1lrol~kgRaG&QLp)^Ej0S@9J9$&nkes-1aWB{b2oRTAl*k^NQ*tp zDX_tjxN^5JAcf1|ef2${TTT4&QwP9m-Mr#=8sKhsls3c>ztKp6ik$IBYw9Czr{FD2 zP+K%g#hqZhn>_zFZ!cO?0EK}dN{3SqJ9vd=^yHFm@*tH`PCqp5-Y3u=U`xDAsU|fiMUH%4v3V1}J1V z5Cyyc+j2>vPkR(ZnlK1MAw;Yq_UH8aWs%`5z-}m?K8poJfzQl02P!&|Lccvi#)Tnd zh;pVrjA-(Q)GRTKG=p0AmtIwn=S5sulNs1uF4W8Mnx&O2n z#rJxF(w>9w`0$I*2U|Do*LTT`&mb^EZdmcABX*n)mN_L2VZHX6CnaXnl=N<{J&t=#y4U zec>AgSK!xEi%@I>3dPdXl5>c zcgx#wk%0fc}P|am*$1Gq*imlafqB*RuHl zzm3wy59pWems9F%?@4lHtbu$GJTyyELYVE|FKoB@H$`LfS=L}+%uz@TwO0+&jsEm+ zvmU*!QqAE*BB`S2HSE$w<^7JCrjYgds3HfxYhNWQg`*ATlY3r4cO@jjmY=8Q zVbCkQ>ys>#doe4DT7@%&tG5kt+CQh2IXyMxUBi&B6bU}0ub*+tI(K!38Rrp}2^u$5$2R)f{OUp!Vy|?h3TRKi z5%^oy8|ehBxe^WMXu3tQXsD5xsjtMk_E^fA9qxOJDDk3Tp9ctZp9CEV1P|qTO@tdT zI_FR|uccHt2?ohTt)vOE^Ene?R@9ZB=&@))i|qDeXw{`m|3Al#(MXVPT#bZiSk9EdW<~*nqnJDYz#Zo;&9%gbQst52 z`cX@LFODy3mE5RPz$4G^6>jwJ|GCsd%9D)~h5)tT5nta<-%9lh!buTuGcJhgSG))l zc3!ms?861m?o2@Wd!_HAX<}~Y!x^#^eOaBG>~$ILC?B(3NFqfNna!rO?c>qPar^bH zlM29Gl@1sjDY#@=O*3H)`qmlq&#Ufj04=M;WUTd=u(9J$$r@{UF}kR{XOgzy=pOzvv9j>v5hNk?7TVXzEA3%c*L!AiX|ywbPgNi#F+P zfpa=EUl2W(#HGTi)FYs%>;zsnOTNQYIPN0(AW`O5{Z5QoYd(hL0)TBAY*4r>XAx*+ zQJECu1BE8u`b^by@;2T-DGr#^T_=t(RG7+i-Lid%O-9#s_FnRGtW;o?XXwi^ z)4=SV5CAg9(Ef1N)=KBuU?vzq%AUnzhA_`D<3O(4rrTaRnhh4Bn;-;vRE zPaUJ+V?g|m?L={o__RZz8E9Z^;UVuXCwP-DtVxMzoV$a>UW!@eK}{LX8Ngk7<0A%k z#I?MeZ9%A0xWenZM&|)e;1HPEQf+Vzjfd0{3+2oys|jC^aN5}!{u}^w52Az?&H@O{ zn^QAx=#fM6v1`#=Lx~(kFthlc`e4HGU+ZDIT(lZst|->cp8 zWJsgdHtF!!6ptfDe3lGEgsYOVA0LKL@hlsb39hGFYLJ`J3d;%;;2$P_+@BB9#CG@V z(UU&mhWsHU1O~IbT#_tAKZ87xGvnb0==R+0-}l7`#c2|JG;HX0Whw|ZJw>XV-3sm6 zV&h9jM*q-^Y=!&4b(YiK?jZ6OtnWK#1~6HMja2>)(YOoP12HM^j&I+_H^Sa4pxc}NYo2HG+0Bo@YCJz?Co zl3TZ$beX~ISct|;Tp^-RF~jO0{)z}_Xm^>WAN|^{D{Da_TDk%V^PD@-L4h$^&6k*O z1Qz!dG&1ziKqIz_a>WHZYch-KQORiAThLvKW5|9v)FjBdxe>r_1q03kWgakcsGuqF z=Dj0A$Ud#ld85<9SCP3|ugTgRNu`|9Ci!goDwSEbKI1>+Os@WR2G?T68M;HygU4SO zH|#~$?-nr9L!t?_nahXQU7$^X4r1}FOMvdk#G_5Z#^Ku?M#kQfLa;z4VBItxWj0@~ z1aH;kEZsIX`xtjxq!(4x>~5yKySPgi@_7X$8ch{{WQO58KN4w0 zsyFF0#ayM(N(=3M|7quq251Z2h0fk`CWPsgc%5%@d%*N6y%#;38;UdLI1_br-f>py z4e}jN@E!)ThKl)tt3Da^g=m(oG&Xyne>NaoF6n%=0Ccq#Z9C+~Z8^$EHxp$_Hb_#; zJfQSyxFq8gX%NSq*tLISeJU|(t=El+Q||5GVK{E`W5TjJra;VjFIvm~3r)Zu zN5kL-Q+dljiDlX?aJ8V7eU84ZrQwP(i^sUy=Xbq43qJxu-dj%qJ3z$0kA~jm@Rg}q zE?S1aJ#soPH;i9)9aTIOZ)G6^_l>rzC@9vB>@MPzQt1P2h@>qMV$<$YdVmIlYZ=n0 zl1+WG)=xe$9%o-15n;&vEsEQD%f;098*tIQQx1ok@K1$6>s^v;+jQr2>(IqqYtg~% zSmn59dSj;SR1jDZy|N_I954}ru5yGTU|R6l-dheHaXT31W9)de?=yD3)K+B`mEM{m z)mr_}*Ct<+yz}TQ9gkfYdLStKbOp_cR7r`WL0Adql~Q2d+291Q(jGVpDX|Q?Zxo2) zbi7bQ^XBeN-E*|*6?Z)cw8*<6VAsy@YpD5rGfvdD%)LhZc3C~!Fo?VJ$=q>(E! ze@bsSlGH4}ey8ZWg1j2X#)!GBR8}bNR}LD55@X{^yme zurtz-_X~`O)Se5x0H4B0Rjcu3T$wGl9VMLgnuU(=S%S%L$ zgfLh;+dCKDW_l3kKo5)UjhZQLjIbocE}(^@ zkoK#Lb@`yA2EURjPGYi2RECE$?rSmY&Wj_g=WPc<^1sJ|A`rwCvzuM+Hb8sv$~>`v zx?HwbKk@2)t5d#VIb8h?Ih8h_RQ)hva-_*|DI6$BW48Q@H-lI=)|3c@SSM=h ztFTvCX`GqJsB=2KXUeyNt{!gO9ACkwmG~-dppu)#C4t(9VZiB0`tU zrZ6fKR1C+FEyV``H))UtWPJODlxed}j#PA2PIl^-WdH4Xm0fINi&^!OOf;JB_CnUf-Yp6OA}Da+o!6kP zpO|&xw4Ki2aq4*fQ(uBar3bV@N_XUISgvC16(GUM8L*j1E^=jB!X`L}nEkh^ctZYI zh1VN&#)uDH7i=~j@{^p0jVw)#;tp&YF00XZI&j64q^Yk?^Pe}&F5@S~%12}&K%h~L zn^fJX6rXVxpg9!x-g5=r(NRvxJ-l5oI|uGP|yg?W`7FwnY?ZQ zck*2NVv4v5OF;> z9mD1&53yk72dkujV3xCDZTT$dQ1ko!!&gJgcka5%Pc)b|)sXw6E@I>PhumnVsNP#! zbaM5Ciz}9k>dN~su4euwVVF~he{}2G9XtlqoQUFCuK1JB2^S6_=({F`Bd#~2a5W!?}`$NOKoD37{#ezu_!W?o_{Lly{8dH{IX7rkv_*(q;1UdLvO$30M;tKtBB|K%Dncbrsp2xmo7{x8X?LIe9n)#(gwL@(5d{{d}R#A1WH)ee30%d#RE0P8$=bwd|0IbMRd{-_eG6 z35Wzw1zQD7@wc`qO+!1h>N^}jXYDu?Gy?>YaIilh=gk?gXxh{MJ1WIypS6^+CLzY# zmp0F;ip>%{L^1!wp=|ECzDf^PVqiYA76z0b>btz$WC`?s%n>O|6zQ<{A>E2$9h#og<>ya*v8({$h{YrN%EiP=UPFhuX4$F6!A*DgG|qFdHBU0BuWbse}~+#4D#z<<3}o zQ`{~w0r%%(nN6>C3XLn*N{8Kd!A`TONM2z65~yC4^ulfX}+0Wz=e5{_NWCTVly`` zFTVgua?FY(Ebv6o;EViLcm;PN-DY_!^tvT?sGcP8fVOTer|!_X9*TPzQ)Qw}`%Pbp z6Q7akt@50DawoDkF`7owC^gVPBg;T^(_h3_Gk>jLlVb=BrLercp}U!s)#KWndam?+ zggpVlsY|6Sp{TZ=X!Z)8d9{w$EQO;MeUF ze$LWAe@c|#Y=*i<08~k!EHYUSox**~#dS5Oq%*FS6E0lhZjn*QPh<9cl$0vhiaA27 zTW-$a&|a{w2imao0syake@;>u#ERNOdh5N{K|L0@qDmAYIb#tA@nAUqq9 zG;QN;@?Wh>&aTbqR!0@5fTB75zj#nwFadynj+E^gMNK1$fTE!)28)u22yy*tQ9LY7 zqZA8^8JI#0!I|z*g9Zau=>*_Y=QK$bIz= z>MCJo25cBSw%{-gof{gZrJL?DU}Bnp*fxE4Bq-g$A%k~RaTo^ffp8TwGCo*+4$RG| zz5@wa42i(!RLuV|n!8)APHIz0@aoic5!8B@t|6@6_cd3KtozS9tiU|DukTW$gZa;a z5`cN)1pm11$Q{blz_NvIt7i~djpz&~2;<^>5ty?0-@+A|_lvlH7U`gF$2=}Ko9yaW za|js$5H|WQSZOZ5hBgDFqTmb;<9p8>av&GAQDpWF*gU!`DB* zF}g1biS^uKOjm_cX&O~ETE3gXxKxlaQw$fDE&L^Y8zw781lo`W2=VU4zJol^G8BH>=tH@eSoafDU; zbg&|HJ8Jf72TW6?x@O5Y<@fvl+7d46A#K%xCIEwP1-ufg90F6K=DCH?nAt{B^eD3I zH}wACmdks^GYU)hjcmX$W~)Ea!snC5Bq4Q#H&9}(_XS&xxf#L)>N_2_A^4w+1idMB zqI-=Cva;2ktV{~MI%n-bAz@||sh;bxAL!c`E^(&WJq*0W@#rPrhI2-AW*6y0*rEz} zZ1>;ok4$XWidEl+Z4C}`JA3n-pszByRPq$VSFAV#n=g`3W+xigf2}~_;AEYxwC&h$ zhftvvMwkot!{Ol-ks-M;eS<(c9y5tfI2*0C)vwSx_Z6TLDpFaSURI-DWG1RAmD z6C7c0!3Q51m_w~H!YYVvW%ciiSua(%w& zl69wfz!+nb++;oqG}ks$nXcSZhC+`h=d-CrH|wn&xe5Om&5XZw0!>ztu)2&ooACi= z3Bd4%7OxZ;W+^bog!GV%!~Ew9^WT5bqlA%_j7mE*=}C;3Ci{RO$Z(Yzl7bm}r)r3oLRFeSX0<`x#2%IS8)Qt4l7mocuw@zIS^<^>nI+AfCdCG z{0tw!MRASkbx4m36e9y>;jdbSJhxSIsa{#o-%5__n~xME+s|S_3xm$+u^O*owtDms za&mQyJAz>vpiQ{Vy%XkP^H0;e<_6@lLkqcM{8_nXprY#1N5(rb!F7viRm!GqxS1b) zgVpU(qja|Z)Wi<-syQJ29Mv?R(|D`A`ljWTa9%&P+E0;}rjfbEhX7$7`5cF}yUstP6>>xy zOoy)w0*`Q$k**8ueW|XctwuWQ)X;r4w}I2gOsY?BILx;MleiMFXG5KQC5$>2AjTF*@lQ^o9QiRt(kV-BuyddDp`*h6855xxN|QO8x`6WI##xEI}h;ckT2c zED$%d6*wJ&vWybb*`39Jh!sHLwG;kveX%B48BFf)`CaVIU*ZtVc)EHOIe6_C0GJ^N z=}BcPKH{9}DphHhGeB%ALiTNf>~wCW+aKD`@u!VsBBhT+A@Jmv1_ed-VOaURPoQz6 zKgq=DO`-Sg@1`S~5G6v++|f^|7}#T(^;p8ssaq>9d}>HDE}vOCi^d=D?za-U#W-)p z7xkXI%N`r2jGG`@qo@!3x^Igj;PCtn)bel0O>FbCNvm_B2ot8*sLqqkJ&nA-C|5n| z>tJwpSg6Sy4g@b-=8#SK6v`BM5EZSJAMZtOKOfe5G!@DFO`;;nhb2zo4d)6xI1DCP zu763XY-6|GqUD}mtro#YiTPJQDE@KC`rKX>FI}n~_OLo~3XZeY4u8bDj<`qwIFMJ7 zR6{<@Deq@;KZDv+OIDj(&8^Vj*pw(vm(J%#?Z2SBeT8H6bV2hz_n%ZJdH`Im5|afX z1G^RfW{wi`d#vDfZU6PTL>+L2)a4pNn-+FoU-oxqBXPY4Wsd8uU)b+A3u4)Fj=zAf zs3wlG18Tiui8Af@`pJ2r?QrSBxKaWq0LaD?tbf3eOJp#1iaHUcl!bL*;y?+7S4%+0 zTqX;Ri))eZ;~s^<3o0CKV6ZajkUb_RIAx(km!l^8aO65jalK8U=Mj`9hXSo=tmPh+onvN z*OruW<)HmL#?!5YA}6TGTVB`d5O9I&2s8xlj~tE~^kh>NyCMM8M?nE(g>*t+VoI$q z2`AEe@8l^tdOe-{?=I7I=a1Lm$24di{L1j(B*Z<`PFiiyOi7q2%#SFFK-D7bz7*gz z3sd{!!6LK8lG^W{BFMd-@p13Pli@g&o^jW}L6+~>e`3`t=Kwraa z7`9enY9l09FH&mXomArc#pR9 z&13w27~#^9@|#nbM8Z)C#M7*?5CizlRd0+3bB_KleK7E(gb%8q4A|#-w|^($wzN6S znH&$(9o68466Zweq)e@q{<5c`xvL?p$QHwSreM_&@Tj<}z3n1;<;n#g%Rp~CaImjb zLaE3-4vr))D1X)3bZt|IJ8EV&tz?E-75^D|a_Bad~MMyf903~XGl=I%j#I+-T4a64=`mDc$9JL25d(zJo|-F>@U0p!Ubp#TAG^Ptz-%BE^QhuaDW z>J@k%TZdooPTUMqcxn4GRjE8ENSzS?qX+=c{@)ZluV@$!?4ON{=V5f&5Az(FE*BLy zvZ5Z{DXIJsxI|n2quju7G=zn z8sq&WWOG3v7)hsVThg0U1s$6Q`}V z{#OlOf+JCoQ#+f4jn?v|x`HjYslyg2CTM{NNzQEkr%Oy8$=wS6;{0^Iu|E?m)S)GC z-U`>t@q9JwT`r@qw5>#5DUVy*LK3`;sGX*vnl-m~r^}ekfYK?Nni*jRWc&LduhagrWY<50>h)WTNEOr&FZkdq!TyWc%vJXYVj| zU;!i{C_sT-IrJl!DwllY%U=#WMs$z1IsQ@2iQL?fMc`~xK``YFln4w?EKq=0W`~!!s-2l6p3mDM~j$h8W=>;V5;`pKYL(rEYCP+4^pNX95bbP5E znrocmrPDEJm(`$Sjoos(<&3!IUEnk^oQ@<-XNC(`L-~MS|I5dE|37d$-6pFD`|_JY zb@Hl$Ip${c3do;J=a2|-ibahNiH$(l&B<~<%gtwKw-`GJ^lC#Bk!Mhulx(bYRCbLTb59 zr$mSR?$2F`%$a;`>e8Nn9jSGkF!~%}$)OxF8mfE0>~Xi<1%%~b<<-RsVyu^-fwpjv zqNc;U?V!WLL5CI(<_G3AQ#++Lfv7x$!UQH^Q6I@=g?F2mn-s>$5qc=TGtsGCAW?J+ z`o{=?hvw_i*YaE!BnL)|NWl-YC^z*{{|lF>iWI*0)}FTDtnD*6Snb_9_HlXFHAR-s zW7g2s=GSky9hw{-g5!GpHmb5;1>A7Ee+oU>xcuJzDwC>Pj zYu-aiY;iU^DA1p0YqOoIW4cq2_jsTEji;Nz^vr5Fwc$5#*ZbUXCND^uP*Q}8Ll?TS ziiV#%uJKU|+LnU6Kfo6mrl3kkzJnx!G+jme{5DO7h&B9SrZ$45B8flwip`tMWTQNS zq>~iIzm$RIp*P9?0j)wK_TeLIkRpiGTNdnl21Bc)w9z_oRK)Qc#j;3zV7(!F1F=sN zuVrqRB|R+X$5j;0hM{Dt-rBOoUr8iJ=0h7Vfu&L{eG3wsTfly-N7#uMCKRvbIlpU zE)K&+hLE*l@P%KcVk7WCTDX#R&DJl~S{x1q8$+TrVw~N|DNN@2@J`86$#mh?uO4QP zpc5Md>NTINkt3kDq#Gufaa&R&{6>HN30s1JJjT_+2~#&f;1+uk=C{k7PaN1ohuuS` zsKCTSFzS4{Kksr_cm75dXJUit7`gPUZ&$~*KTn)WGf-mJI6?`+aRq)>-jZf^^==a;n(XDI7siyIXRDI#od0^5T zO?)HB1%K#L{o>zgyC5>z(2?z_ z$6QJ*;r~hQE>y8W8AhW?2q1zggwsL^2j-kO(_`e_balZKLKc~Lh0}OC#Fxd!X&<;) zx@OL=yvB{s=0xcP^{nY~QGde~1hy~%1=7RhduoEH2W1Pl6G zqBr`3q}!RBJ8jrs3^-qWq#@h0{^ODlEAI1f0;a_xZi!s>wxGYW)3E#9CD6@`v}f+% zxW4SF%Ol*Xo80Pr z9Bhge6G8aw+$sm?rpHoW9OVQ~JoLBuSfEe)?`x_1p_VrXqiUud-`d4ny8B#Z7(tO_ zS2#RmZD*0*`N?_elvolTVhiRS0*umM>BVku>A9&nYKgeU0bU4C-Cc7Sn%~5dYxKzUb9KdSmG1 z<&lSO52&tvdC)xO==LaOuu{PTagvhuq2N$4dZPc*{zBIES0)dn09=%{Yc{QE0()sS)19D zNo$5BKK>s{qoe#5D2Q%F!Tec)uG3WVe1#|PVx-zN;DxYgL%GTVro9j8D-HK4Q17|H~6U!PW~55 zU76@EfsqC~C5k{XR$_5c1caDj0sB=a$;i9a8K2E4NP%k#Gt<^vJ}gcCTVoGy(vyH( z$zLu~${81l}%YIN8;os!A4w9)Xr7FX!G)J1f6 z7%unWVCrTdJdiQM@XF%!ca`Ffjj1NFeN_Yy$^A_Pr-)`Uvp<)mSF>Bln#F6zGXDG^rjbMoLNIB`Olvj!Sdz`lA09KOH zNO~w8B7DL6#m$`^q84z0=VzA%ZuuPq%?jjkW(h#sEvZyz<{<=i>e|_z_f#c(x(BHe zI+awZ%G&O;>S;HQy*oApACJo>&3On{TtGoil3;^SQ7?-=9B4b_5+Q30X=C=&3AF}@ zh2G9HBNRu*lB4J+1K`UkH~6ud`lZKizkw&zc2QbTv_FlxV4bM++0TGS4k%DFA|}^% zYQJq~m|P@ly5#~D&qge=^YqZ|e-wqSG)98?kLdz=0-7thkaNxXE6IDk0GuK9*2jRt3FUADVj;kbfFK7&=1uqn zb0jC80lwZqmf^4>#wsFPBjNmxjY^p1|5y42^%gC<-PFlZ3Ct&CVGN>5gQ2+`HjzV2 z*~^!KHvJ8(=&$*&q;hr*8xMQT*^XNh7C)H3i)D0E>unQ#ljhZI);0>ldwZ^Qf{8WS zuBq~DrUu9>RAE3yskV%(=rX^b@?;?;y@D0DBC6uPQk;NXQ%Z^L*DU(F`iyo@$1Z8U z);pu=&7;&~Wd@^ZjJPsaQeTj8%-!vTxsL(Mxi%e}tZTLtxnr=Fx$wS4c9R-+h@tHd z_Q@0zrtRUJj-VIDm4Z**?l8-%o&w;!h|YSPQC`e^tP!Syq^T(?77Xo_!s_B_Q#k+S zCL$zpg~XYKQt05-9wvN7%H7tT90-YHQ+r}8R2uc9ds#|5!EVyWi;eb%tCtHbTjcAxcKjXyGct*j6-m>=@Zs8s`PgsrCPXl*RAnG8%19)(`!+5>G8 z=?g0je!>KEouG|Z=R1yM(?YYw{0BBxUZt2#L4V5o8t#QG{ytTnnp2lOiMlkgFmcZM zN5W!Yx2>BXZ2NcRiUq=lyYxUlQYk9}`-q$WpWEoDai4lj1M7Srv{t)?eNAcF>284{ zE2EvGMl8C;yQ-&`(=j_iBH}IK!@6$5+{T_PX3i0Nq0{Ti;0sTsTGZ> z!*@-#CWn6@UiQeLkk;>%c(r8^@0%*qd?WFsh6l97Ba&>1v@$PIpJ>#HQ$9O7DXD2M z&6D$SdD%lbEunlR$V6FwKqD}mI$E9G%2%+v6=nx|WH>&hS3Wviep_n4G+B{{gxWF^ z+HkdTp;Lz$^Fn1J65I;-=$1_$pQb=xpcvVp7ush9~uayu-4skJ-Vmq$o2r#n-!FN%_>;sV^r z&`tc9i}%>a{tXyk2jzV=T%#fBSfiL=!e)r*;Bz#_Gpw`=x)~jrJpkl*_{$z{g{vx> zI=%J|AhAd>IP3of;0ZU8QTA9z5Cy23H!3MSRN*%Sr+zQ2a8*c{l!`f)=#`7^%;^Jb|k)6V=nWTO0&}1eINF6?=|2z@ZOeDdUBQ9Lf9Dc zM(Av~0@yC;N_qQugrUx!N*;;TE!gtI7AD_1nCAgekhb_sKHY172nQ4MhSW82hQX~M z$u~~R0Ji$ixz;{kCNs6Geo9jBqf@}-D+V;D{dZN!bk&!C0GjI_?M^q9lo7?zmGeJ& z2uC2H^&6#!^!ta7&yX1C4XpH8+estYzs?#ZBX~HgDV4P=YCJ?Vx~8LBeLn7Xh32SI8|<4^Q6fC(h}F>b2v#dkxY(n~moZF0il|ZI z^`ofhtP>cfE@^W&`Evr5L23BLT&kSnYE1zUe&Ug{!aiyiQe0s$OfYN;18j{Cf5Slv z3?p!?e{ldom+3=A=3*Fw{E=6%4@$`3rSr=~AU3z)%GS~QcFR7{CSV_GbLm|JH}uQK zxI0@^d6eKl`Y8(d_Qpdw;7c!*A1j&e(?X8d`2@|5fI)PUA2`W;ljq@jPdaS&jMfVe zjQlXtR5cBxn7u#b_(Escd#tPYOYtb(%~6Z}2eeleSh+F4`!!+bhu9*xUANo@*;Vmr zsRz=yCwiW?vMurU5~H$y45f(h3f^FcmX;k9$PmgVP__165@9ftO`+s@EmJ8)Hqk|=?K`c)2_CREF14IP>Nl?|LnvYRN3lYAn56xWm+(V|eKw8K0t78x&H|a2g zW!}dFV9-f>Bs?WWan{+^+uiKt?d=&(|ri zg$#cprqy+03xgRv?Dq9l5yRQ4mA<8t-j*W5XC4~$C_Kt3(k!5Gek6zAZVE~H!jb#{ ze{h3Egi1slO)y6SWr2KxCEQv8(6U!=td_alp6+0{vG>HJa+-tmcGfkjce)hqecv+a zv>84xgm&iJbt7!T8q7HzQi>bwIAg0Js$vt-v|fx~Q^u!EWCj_JhiF(Yj-=E<)!AUZ z#>@S&SPo2M?O5Or!q|DXDI}B(F~kYN7$ONZPIK^RA+B-3T@*n!^jwdPc!b;_1)Zpz^p~h;xsx7vE^+KT+ zY}FU)e!7uv#wnIlC$oYO-jzn|#b#d&4!<`dBmtP=fMJ9QQO&m@puSgdrqI>-2AHQ( zvgfelQ;Q}dF>7_NbU#?4VX949qx`LYac`~+-t*txY}da04r^e5Xva5OGM0EgzJ47%|h3d}_YU~{?y-E}jJSGhlOb9KZ z7@d|?e(R0FtEMvI0UTakt2jk1nP(nN!6(mtvA)hAuX_X{Q{orqh^eg+$IUVZ-hxh2 z%5J&p*RR$19!X!oMjpj1*B7vF-jzB{MG-JnH?iLYD}V)mX23b8>%$ym8!%5U>O4jMnk**l37zx2(q6v zSovy&PlBnc#CN@^;+1`hO{(^rQ*sLvP`VJhQVp_LU>7g^EB7=pT-hNk4Jil=lnOEi zge)~;@~X@n5QHqcSoqgeE~>XB{*WRh&CN;V$I1#k3>($R4Im%BZHoq8o`^3J&`Wlb zim}84v>OFu)ICI~IrS ziX$|!qKCN!xXq}VV;FNfSb7ssoEJ>03~uz%rA0*C@%$;HyGk%X2tt_!vq{dF7bZLG zLe&J*20>GMZls!3dc}L^q=yj&GKzYVP!MrDqdAaV5v9!k9pAyN!3?x@MYGn1AYAc0 zhPC2TYc~Cs*jbV)M&9`1sCCm2if?!$n!A6wLW_=}CX-E=mX3cl^D|OaUj(ZOutY7c zIEh%h#1{YipSxT4f4h7=DqGdr?pH;G@90NF{4TigD04rl@`Xm+E()|l=-2IzhelGn z6PAD1I0$fn6J_1neJSGY0LG?0s!kLA?(B09yruIv`zxru=6P}D0x?8 zs>ve1REJ|55ZT~}+zN+zSHxgHSgJ;^oop6q;zZ?n$7rv=uw@ueK^QYIt2BFfSiUaRP$;=Epaq@GIcDOzDB zYWAy3W^6e$sLBht0bw4ml)>zCKmwsgNy%+}h*^TQsYAyYi-Yr0A_ot|Nd(et#Z z3!_~kx7;#CijXNs@H+wZt|{YqtQkf?fDK~BeNy0n!cg9x82Uc&f~$vKkyc5)e5;9@ ztZrY&qf`;%buVu`2z?|qS&kE&fPL9U2=a0f=ae8`Z%vruBz%+yl;^O}{C6BTE z;L$PQ`Y)M5H%Bts?iA#Z4&3D`QnSAB+?7)FDwE8F0~XDc(}#o69dt2dtbPu0*x zq=^<>!W8=-cJt;>T zXF_upQ)QIk@#o?9c+(E|<#MWI`oFdT7gCJayB1FOfHP&&YSx7Pr?(LrJo0tN=T)Va zA=l*8Xe0a533=lQ4zC(i$2gQp)65t65;IK-HDlbEac_tG>4JEhJ_#S6ZG^ zqvkl3HzmP!SGsob{Z~$A`43^-tdoV(>lqgdvm4eKx8#TIb!T5R@ytAt*9Usvv~&1h zmx7mELL=T3)b)o2FEkHoi0|o!zOSH$wB)@0mp{>_h9JQdIqJo52G}?Lol_rlSHMO zgzP0#6<3S##M_XSa%B@_jm`7(hn#Y- z3C(nTm&>8rh%<2gNTY5*SJoMlw8V;J*&gI6uyaF+&b=65HzCwMLpMX_*sE!v`|il| zDYm!7TbN6^9TdrVNXWev zygE>tUea)cH=O3InSu4v8s6V43$yrMO{>Tyf>F&?BH8zELiRkPGv=g()+&OcOxvIW zpm{VA_PJj$F@PWiE)2f2=$oV3&K+vH6PtfQYG|xbKUJeOL0$b4_Z$+go0osVMhjH> z|H)#5&Fl8T)jVlnQk#RIYF?pVfK211}LmE-nR6oJVdeqG{#D?&% zb0{RdHSWuHlmcZ!h@_x_f+1$_KQh91q+Wl{OW?NN%1%h{2EPInC2bIOL@nw{S?~@7 zH8UCHi9*U9cT!y-M1H+Vt_}uqKWTrw3WJzFev=+9syRH7n~||b25!XLP{H1=)0jm# zFKRKDjcd90_1z6lg%u6i3`XuFqgz5O^+|7;M6k?`Eg`>jucCJx^}VAp5hPH{m*$r| zvi};p{SRB}J^}!RFQUFI+N)C}XieG2dV2`4!?#1-F}Mi%;zvFSkhFEm6N*T1irD}9 zdzAkm@H}pNMO3b4neU>CH=}`r18?mTg^Rdyp)Lhd$O|Eco?5{9u|tA1D}xR!z|7Z7 zV=A0P0Mo&({3a;hW@Hv6V*GuWWnzsezLfE)5$F>6;+6;Br&E1C0h_WT8nQA3Aaa)kb#95etx`A?SW z77cs|^sFr^Tt#`Y-{mld?qQ3D`2`NiED*rnyRJGM?eY?HWmOsdKvB*waEz^b?N}wYzHh-D& zogv<)SkiO{%6G}TXXdPK+gAeD6?|d~9u`DWi|cyQ0m9$8@~=gUNU;d(00Z4%W;kSp zh#Cbl^-|YfbLcR|6T=X>*Fgs%LV;E`kx#T|POLzb^}}E(zC$2k01Ai!;d0`qkZo%* z0xl1?V&g1pEu!sw7h!2rVF|(e`!oQ8;>3d9!ay~il+l!&TIV#5eDC=$por9gF@PSb zc$3ckcZak>t5m8DHh~WE>$`j6VQ;N&a+va?HRgmDko=YYpn%L$Ltx#%o`H{Ch0a91 z>G$cQfnT+t!iqgRG`F7N+j*S>Ap+p%;sY%Q>`l5s#T=$XjuSLyWQ4wnzOKPFT(18t z1i6#`-4|!-dfs%)G*SrAs%&Lgii8PP;B@f1O7l4^`$E*_(Qs?EbAW1rb$_ugk7sR< zTSe2tq7fk4ncFL6eOrZnl{yeyeq^dQ6&z|{Ap4LjH6GDD3TxCb&`nWFPn3Zt zCE^-VZ;F=q`)|juS!yqpV(i&kE?6u~mtjLVlk}`tvp~>WEDK|F`y& z$^^g>Li2enA`D@UkBS_Axoa;Pw@CD-#LHA%Z^l3YJ!6w-q+jcMUAvM~WX2xc@->u3 zc2h8|lSZjVnTbyz=-+XhNvMn@$(sWedT~N0XJ&{2g#5s5IjBy2MN&0hOrzKpEa!)f1P9Je}uMZ?yQK}{lr4BUzbL-0xLhD zed_g&2$B2etBgKXds;%uq0S3jQtZg$_9GKmafF5GVEZY_iSh23H7M}!HP3F6BehYX z?4()KJ_;naMs^#Y6)~o(frX_29-}X?vLD~JMVEX1w>9k1MUt4|6M#p^$0Qx^*=UEY z5t7k*D4C8+I^Xf6aL5cg*(0!EdP@JqK_QD4+DlUWaCl_CJ{4Wa`|g!EeuU;E=Xn#wDoT644bVWDF6L*dsOpm8krjf$+2 zr{?s>p8DMC%=J_rNU2&@JUsj9cLsd@P5buPU*<7`InQVNP>2u-6V5ieL=Da@!-#vH%WE$)_KY2 zQf;{dlDG0G^r~hP?Px=wq@P5}Xc`R7DL^ALG6J4p)Cwd82+|ZVigA)mj69$$3@cQ0 zl9{`Fr1f9zA2)Q*5wlXmX1ey27C6md9?i`6iVwZez3l{!3Tl0%n6n{i_qmUsS1&`4 zX1$;)6Dj55$iyov2j@9bOZfmSaBy?R2o+f+5kiuhmIgZlK}~+2+~C*RfZ2 z9POd@cVKK>Tm;bjat;OeTs3)Yu7l;l-r&sHG@l9)+{T@00FaDPMT8r1PLLjt>9(=5 zkYTmXsZ!If?$ruGgFNk@N`V@dT@|Re?t#~Y23?jj&b)AvG@!ynfq>Yt4y)X=D{FdI|6Icchr5f& zJNI0dwk*GybJ)JmW3K5OmqfNC4Qy1z-*y>e*voZAP+JmwV#0G-+1aNRZZu$Y09W%m zQh8+o#SuF0zcKwi$VXL4i>KrzhNMsgB^eBup+F8^)GTPGMb^vDSx;0`f_)>2-fJ#P z>-aXjZbk&wy%~Rkm9}KGoUeqTEUgDtWOjP>c*ioKQo)3~EzEgH{f9%jY==W8o)Ct> zs8#C&c{jAsE`m@0osugdE)@)QpSciN9wL)SC`7ypt>fh64%;0~q&__sE$`Y+`dWgD zbOtDb2I0XW3l1&5U~W)QIFI4h3*)z5KbKH{*6x=N!?aVI&7a2zgyskHfdtgNcnZPm zxQe0sEFmi(52Bv1LW1%9Bs=xkcWo`js;^GN;lark`|$P%oe%!pmgbD*%XT)!JVrB3 z=O%7Px_e)k4mA+R-crUFha<#F2qy_C>CO4Fvka1hNF#{C*}LZe@s>(m(1T=z7%&%t z2i}mmublAUjdc64J#X~?%VN1TKeRu>&wn^&1=#t}(Ipi2n= zq5G8X{=wb%_s@RnjbzSm6z`Svf*Cij(j&7b{if9)&G}b0jaE~_VP#AoB!P5c zd6TkNqfeU-pN)@V#`ZU#%j z_@P0C?u8l#*!_}0PXSX>!|0#&!H1KQ@1P^IkSJLDyJ%sfYYT|WoUT$x9HH;6&uTGs zEI5P!)&{aIBo74m7RiWSHXub9&1kG4MT_-Ea&0~I(}x`O*jxl%`)gE026Y*?qaSL7 z3NV98gb(0cIf)kHJ{1E@f0|JxUL8zENlwh>T;P|ZehH%UQXX&k9yAxarCdAbVrYzA2Clj_^N0`Wq zRQYj1FiK(Jk$scjDn8zB2+Rxb@S7lP8JVrilRO@1YWvQrL(rL>HN37H7oiXeKA5O` zy=vQGl0(r7fT?}6_yuQo5$W;^AT=>u3B_9L%q3sT#bv0h zFA-{6O6oy=-61}yJ`#OF^Rx=lb{JXk_5HF|tZk!$83k-ziN&XUb>G{az&*+RDk9uW z;1rVK%^xHEI9&#a8a(=KCFB20WlV zXLL9;e;I958dqkr)IGPpGS+3aqBE0CMhq(TwpZzREa)OlRr$L6Bh~A%b~GqdNw4@W zIdOFq4Ix`!H>IqZh!sI)2dr`9*YytSUZFoP@7eHtto#brQ!Zst$kusiw?usbTfOKs zy08%u8h{|j%FYCO)bx2)clNVWQE~GAv!9{V#VdB_eB852>o=t;m4^*0O(UfSeK0<9 z+5;=ZUr0s&NNnfhcR|49t#5bRE-8*k#`DZ;s^gs**2_KE&pM!(cp!MJ^Kzi3?tJWQ-{!JHvSmtx?YUBZa2v9jnW}v4`&{EMlA7ApJ z@G2PYwq+)tCAH{Z%WcH+)hT4L>sKU>~%86^HPxlZmaTD52)s*&TuB* zpYyv4=kpr>W|2HNZW?4GZ&Eani*&BYq87|G&pA`mMu7^I2I=4m^;P=XW!`|kOyhM9 zZb6$ zW6%eoTSUK?>mRV@(miz-2?`2YYt&PK2)RK6r0;<@z?G^%}RVGwZ8-N2b-7e`Fznu~NxU;`!T=n}?*WNS_qm*k@xYl-xKM z{n*2B57OtQ!x@$zRF{Cl8Pv1JBX_oX7R#&Iv4Tmfo?oFi_~ULn|^k!D;0hY+}74mJNYQFyCQ-qQjD zV-*7P`-)siW*taQilK7*!tdyM%#3dDA2=6`_Pa0#T+?ri(XlG#09f_R$3~yTcK+b7)1frUf zWtW9xLA)HK(|}HtA&75HnYv@?bbm6m2UymMMY=ZAN}4jlnMRxa zPt#wf!ECJv+~X-7ID`k#fFw!~ELC$C``t115vn)N3d@`gN7I0(WWFL{dsOT5wIH-j z!NoF^Uu?vp81Xa0$z!x-VqqF{H#66eLtqOOjZ1Mblm%7tArES9wh9HH!mN^MHWvi~ ziZTYGp>qK!Rhp}(reTOMkfMn~OxOhY*s79Svl;73wo2SX8u__>dDdivl}GTK^>*wV zN4g8++h?gd7i)|Dmz2?VShR0YYDNDI-cMbQ-#pVhv6QR6s*}NfaB~?KN+MLRd?}UC zpPpqF2yi?`01mNa1s20fOQs?U&~o>lenV!vjCq9^+Ab=Pkf@`R~ z4-Y@{**P(5JLTTp#u53aErN?|3$s;;Yd5Hi7S7Y($sz4X+YI`xbIUWnK42tR*%{R2 zwbi86fXdAr0cSV@L>3w?m618O`lk%pJW{(=`lhspu?xH(heX$r!RGqy``|wWOXO$F zgE1Z}15bI-$=YzkVBJ|Yr@}f4Wq>ra1|R{6V?&FXB08S4dgQ{vfs(4Y8x;mB+V!i! zMQ&arqTA?(vAt@l^91xR6nKoWMfWASBjYT6dt#uBLI~x;Pfq{w&&zcNrzUo-Xz4Zh zQe^^-#%srID8HxLusO~ynJe48JP6({%kbAmKTjwho;q=SNG=}KQOlgY%y|0$BlP^j zg-6u>Qg9+@XnvPM%J2mrs$W8vR~!qZt@>J{Cp(JV;P8q7$bkk#+YSH_y@Zw(E9#_~ z@h+=0-w#jr4H>5xdyhsqh{Asrz^KpZmw1ettNpmByWMz1KlWlZ_IOe!u#{#wf7SNE zQb=~ZBn)c#$M>Ucq2oZc`{Z{@@ayVKEN0A{r!wHvFA=N{R2H~h;HNF8?W??UDnzkr zlBClU3Ns842Cp*`i~yGJAId}o3#t}KMaK}xk3)bPTA!OC=YBNl z!fKydxZvK(-_a_&@mVBb38&<6DdOX;62jSemgeUfug-&YMpIc8tF-!&rXXm%*-5cR^u=_)6b0dx*mZufSCY7d|D z>0l?jiEg#o8j2vQ|K>yFmekB7$!QeoO>U8;25nojVw>5r%?XLt%h;HBy&@mzV{i-f z&zZuiN>Gi!h*uL)I3tn>K6nOMM4^cPh50o>ffyw|QQmd=xlV%8 z*R5HREM*}lbM5HwIFci0kO$UxU-s)lh7E)!AWSX? z5EK1_D2hFq*jbnu#l!|iG~sr1&`GCap=Qdz`npMsv?t|X%0OarrLIgsUVDCdIMicw zFWMKN$_aDyOYpK-0ZQdwpT26h?LE~CY8F|A5ttg+S1Fd(_J$b-w(26oHQ)8>Di9di zq&nc_MOli=@@Oj%Ez%v14A57hpNQpnK)3STGLu!-Gnl|H+Az-74hBy9*n%z^fj6Uq zf^m{+`%+`M*uPNd$FIo7#n8MOimRc;w4zECYwx_S-{TglCh_Ba95Kkeq@&yZ_{G@3 zFs|Bd(-}h2BUuU%N$IpWkQ9PO3UTvSs+!wboxC>J=KO2U$lFSl=rd%lA40oPW^__k zBq_k0A&H1K8g8inb=!P65naYLBe)n%@;{}+%v4=0H%*J7)}{MVP*&uEpWfE`jI%+6 z`3bB7jWk5Ras0%BN?KYI4Yz{l0hdN?6kL7XAHlrLiOJ|D!mm}%YZ-Owy~J`23T~r~4k?oEA5g4&a6SgTAIJy4xiG)NT5(G|Dg>YVFS-qf>toT2Dhkrr-++h0|n5oL?Z>jRp+v(46`O0OkHCepqD#aDsDJTLL`>8}s zl4g9f?aX+#rY0qoABdF9LgtWnkR1)gbiz4_uO($b(zTINU7$Vkb-O%UY4VuR(N^Bl z-JTlq*pQOHrx=~r;xELQ$0E;}@hrbxK=SN0gfhUW9`ZDoe|KoHbrX`?wy~S2c(w*m2o75F?LrnCII&dV?hp=cnHZr<^zWFixfSAa$MU3m} zU(@uC1pBjVHIzm>H>-Po8`{clO=;hGL$HBVkcw?hC{Y_0JFb`qlfwD!fza}6Ew%gm z&BR-D;k?dmOB&j+50GLPfSd4Q34U@+x^VwCMEKdH=_%!r7Us!=)P|anb)ThcNSOj5 zq>}i&u_l|!P1>wp(A~iOipdkq2gxjKj-<*iEVmwEsmLl7&4Nu8 zMoVSwX_C(mi|jb$`I^uUJ!H%M#j zRAVx(vGI(ncyZ3!XHvjB_Sp&iX|fgrFkgQue^NSr9nJw@Gb z*oT_z8Xzo+Sf^f*0Ux<-%QsWUr}DMSoW3cF2E==x@um@>%=)t^>cp1^y)e85B}Nzo kn|-^i^)V5>4a|^u;T#rEvZ9ZU6z~5Raz!{$kU~dNtd~TV{Qv*} diff --git a/files/c/bonuses/10.tar.gz b/files/c/bonuses/10.tar.gz index 4f4186ee54aa8bcf1ab63cf8f8a3141c24597b1d..f37edd19e19fc3002b2d38e9f01f7bffa0323aff 100644 GIT binary patch delta 18572 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 diff --git a/index.html b/index.html index 4837f85..3cabd9b 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + mf | mf @@ -14,8 +14,8 @@ - - + +

mf

blog and additional materials for courses at φ

About Me

I'm working in Red Hat in the Packit team and studying at FI MUNI while also tutoring some courses there.

Content

On this page you can find my blog or unofficial materials I have written over the course of teaching multiple courses at the FI.

Mastodon

Feel free to contact me on any of the following Mastodon accounts: Fosstodon or Hachyderm.io

diff --git a/search/index.html b/search/index.html index b421733..1385633 100644 --- a/search/index.html +++ b/search/index.html @@ -2,7 +2,7 @@ - + Search the documentation | mf @@ -14,8 +14,8 @@ - - + + diff --git a/sitemap.xml b/sitemap.xml index a74e3be..29b40a6 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -https://blog.mfocko.xyz/blog/weekly0.5https://blog.mfocko.xyz/blog/2023/08/02/copr/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/1st-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/2nd-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/3rd-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/4th-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/intro/weekly0.5https://blog.mfocko.xyz/blog/archive/weekly0.5https://blog.mfocko.xyz/blog/leetcode/sort-diagonally/weekly0.5https://blog.mfocko.xyz/blog/tags/weekly0.5https://blog.mfocko.xyz/blog/tags/%F0%9F%8F%AD/weekly0.5https://blog.mfocko.xyz/blog/tags/admin/weekly0.5https://blog.mfocko.xyz/blog/tags/advent-of-code-2022/weekly0.5https://blog.mfocko.xyz/blog/tags/advent-of-code/weekly0.5https://blog.mfocko.xyz/blog/tags/copr/weekly0.5https://blog.mfocko.xyz/blog/tags/cpp/weekly0.5https://blog.mfocko.xyz/blog/tags/iterators/weekly0.5https://blog.mfocko.xyz/blog/tags/leetcode/weekly0.5https://blog.mfocko.xyz/blog/tags/red-hat/weekly0.5https://blog.mfocko.xyz/blog/tags/rust/weekly0.5https://blog.mfocko.xyz/blog/tags/vps/weekly0.5https://blog.mfocko.xyz/contributions/weekly0.5https://blog.mfocko.xyz/search/weekly0.5https://blog.mfocko.xyz/talks/weekly0.5https://blog.mfocko.xyz/algorithms/tags/weekly0.5https://blog.mfocko.xyz/algorithms/tags/a-star/weekly0.5https://blog.mfocko.xyz/algorithms/tags/applications/weekly0.5https://blog.mfocko.xyz/algorithms/tags/astar/weekly0.5https://blog.mfocko.xyz/algorithms/tags/backtracking/weekly0.5https://blog.mfocko.xyz/algorithms/tags/balanced-trees/weekly0.5https://blog.mfocko.xyz/algorithms/tags/bellman-ford/weekly0.5https://blog.mfocko.xyz/algorithms/tags/bfs/weekly0.5https://blog.mfocko.xyz/algorithms/tags/bottom-up-dp/weekly0.5https://blog.mfocko.xyz/algorithms/tags/brute-force/weekly0.5https://blog.mfocko.xyz/algorithms/tags/c/weekly0.5https://blog.mfocko.xyz/algorithms/tags/cpp/weekly0.5https://blog.mfocko.xyz/algorithms/tags/csharp/weekly0.5https://blog.mfocko.xyz/algorithms/tags/dijkstra/weekly0.5https://blog.mfocko.xyz/algorithms/tags/dynamic-array/weekly0.5https://blog.mfocko.xyz/algorithms/tags/dynamic-programming/weekly0.5https://blog.mfocko.xyz/algorithms/tags/exponential/weekly0.5https://blog.mfocko.xyz/algorithms/tags/graphs/weekly0.5https://blog.mfocko.xyz/algorithms/tags/greedy/weekly0.5https://blog.mfocko.xyz/algorithms/tags/hash-tables/weekly0.5https://blog.mfocko.xyz/algorithms/tags/iterative/weekly0.5https://blog.mfocko.xyz/algorithms/tags/iterators/weekly0.5https://blog.mfocko.xyz/algorithms/tags/java/weekly0.5https://blog.mfocko.xyz/algorithms/tags/karel/weekly0.5https://blog.mfocko.xyz/algorithms/tags/postconditions/weekly0.5https://blog.mfocko.xyz/algorithms/tags/python/weekly0.5https://blog.mfocko.xyz/algorithms/tags/recursion/weekly0.5https://blog.mfocko.xyz/algorithms/tags/red-black-trees/weekly0.5https://blog.mfocko.xyz/algorithms/tags/solution/weekly0.5https://blog.mfocko.xyz/algorithms/tags/sorting/weekly0.5https://blog.mfocko.xyz/algorithms/tags/testing/weekly0.5https://blog.mfocko.xyz/algorithms/tags/time-complexity/weekly0.5https://blog.mfocko.xyz/algorithms/tags/top-down-dp/weekly0.5https://blog.mfocko.xyz/algorithms/weekly0.5https://blog.mfocko.xyz/algorithms/algorithms-correctness/postcondition-ambiguity/weekly0.5https://blog.mfocko.xyz/algorithms/category/algorithms-and-correctness/weekly0.5https://blog.mfocko.xyz/algorithms/category/asymptotic-notation-and-time-complexity/weekly0.5https://blog.mfocko.xyz/algorithms/category/graphs/weekly0.5https://blog.mfocko.xyz/algorithms/category/hash-tables/weekly0.5https://blog.mfocko.xyz/algorithms/category/paths-in-graphs/weekly0.5https://blog.mfocko.xyz/algorithms/category/recursion/weekly0.5https://blog.mfocko.xyz/algorithms/category/red-black-trees/weekly0.5https://blog.mfocko.xyz/algorithms/graphs/bfs-tree/weekly0.5https://blog.mfocko.xyz/algorithms/graphs/iterative-and-iterators/weekly0.5https://blog.mfocko.xyz/algorithms/hash-tables/breaking/weekly0.5https://blog.mfocko.xyz/algorithms/hash-tables/breaking/mitigations/weekly0.5https://blog.mfocko.xyz/algorithms/hash-tables/breaking/python/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/astar/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/bf/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/dijkstra/weekly0.5https://blog.mfocko.xyz/algorithms/rb-trees/applications/weekly0.5https://blog.mfocko.xyz/algorithms/rb-trees/rules/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/karel/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/karel/solution/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/bottom-up-dp/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/greedy/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/naive/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/top-down-dp/weekly0.5https://blog.mfocko.xyz/algorithms/time-complexity/extend/weekly0.5https://blog.mfocko.xyz/c/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-03/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-04/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-05-06/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-08/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-10/weekly0.5https://blog.mfocko.xyz/c/category/bonuses/weekly0.5https://blog.mfocko.xyz/c/category/practice-exams/weekly0.5https://blog.mfocko.xyz/c/mr/weekly0.5https://blog.mfocko.xyz/c/pexam/cams/weekly0.5https://blog.mfocko.xyz/c/pexam/garbage_collect/weekly0.5https://blog.mfocko.xyz/cpp/weekly0.5https://blog.mfocko.xyz/cpp/category/exceptions-and-raii/weekly0.5https://blog.mfocko.xyz/cpp/environment/weekly0.5https://blog.mfocko.xyz/cpp/exceptions-and-raii/placeholders/weekly0.5https://blog.mfocko.xyz/weekly0.5 \ No newline at end of file +https://blog.mfocko.xyz/blog/weekly0.5https://blog.mfocko.xyz/blog/2023/08/02/copr/weekly0.5https://blog.mfocko.xyz/blog/2024/01/28/rust-opinion/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/1st-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/2nd-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/3rd-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/4th-week/weekly0.5https://blog.mfocko.xyz/blog/aoc-2022/intro/weekly0.5https://blog.mfocko.xyz/blog/archive/weekly0.5https://blog.mfocko.xyz/blog/leetcode/sort-diagonally/weekly0.5https://blog.mfocko.xyz/blog/tags/weekly0.5https://blog.mfocko.xyz/blog/tags/%F0%9F%8F%AD/weekly0.5https://blog.mfocko.xyz/blog/tags/admin/weekly0.5https://blog.mfocko.xyz/blog/tags/advent-of-code-2022/weekly0.5https://blog.mfocko.xyz/blog/tags/advent-of-code/weekly0.5https://blog.mfocko.xyz/blog/tags/copr/weekly0.5https://blog.mfocko.xyz/blog/tags/cpp/weekly0.5https://blog.mfocko.xyz/blog/tags/cult/weekly0.5https://blog.mfocko.xyz/blog/tags/hype/weekly0.5https://blog.mfocko.xyz/blog/tags/iterators/weekly0.5https://blog.mfocko.xyz/blog/tags/leetcode/weekly0.5https://blog.mfocko.xyz/blog/tags/memory-safety/weekly0.5https://blog.mfocko.xyz/blog/tags/red-hat/weekly0.5https://blog.mfocko.xyz/blog/tags/rust/weekly0.5https://blog.mfocko.xyz/blog/tags/vps/weekly0.5https://blog.mfocko.xyz/contributions/weekly0.5https://blog.mfocko.xyz/search/weekly0.5https://blog.mfocko.xyz/talks/weekly0.5https://blog.mfocko.xyz/algorithms/tags/weekly0.5https://blog.mfocko.xyz/algorithms/tags/a-star/weekly0.5https://blog.mfocko.xyz/algorithms/tags/applications/weekly0.5https://blog.mfocko.xyz/algorithms/tags/astar/weekly0.5https://blog.mfocko.xyz/algorithms/tags/backtracking/weekly0.5https://blog.mfocko.xyz/algorithms/tags/balanced-trees/weekly0.5https://blog.mfocko.xyz/algorithms/tags/bellman-ford/weekly0.5https://blog.mfocko.xyz/algorithms/tags/bfs/weekly0.5https://blog.mfocko.xyz/algorithms/tags/bottom-up-dp/weekly0.5https://blog.mfocko.xyz/algorithms/tags/brute-force/weekly0.5https://blog.mfocko.xyz/algorithms/tags/c/weekly0.5https://blog.mfocko.xyz/algorithms/tags/cpp/weekly0.5https://blog.mfocko.xyz/algorithms/tags/csharp/weekly0.5https://blog.mfocko.xyz/algorithms/tags/dijkstra/weekly0.5https://blog.mfocko.xyz/algorithms/tags/dynamic-array/weekly0.5https://blog.mfocko.xyz/algorithms/tags/dynamic-programming/weekly0.5https://blog.mfocko.xyz/algorithms/tags/exponential/weekly0.5https://blog.mfocko.xyz/algorithms/tags/graphs/weekly0.5https://blog.mfocko.xyz/algorithms/tags/greedy/weekly0.5https://blog.mfocko.xyz/algorithms/tags/hash-tables/weekly0.5https://blog.mfocko.xyz/algorithms/tags/iterative/weekly0.5https://blog.mfocko.xyz/algorithms/tags/iterators/weekly0.5https://blog.mfocko.xyz/algorithms/tags/java/weekly0.5https://blog.mfocko.xyz/algorithms/tags/karel/weekly0.5https://blog.mfocko.xyz/algorithms/tags/postconditions/weekly0.5https://blog.mfocko.xyz/algorithms/tags/python/weekly0.5https://blog.mfocko.xyz/algorithms/tags/recursion/weekly0.5https://blog.mfocko.xyz/algorithms/tags/red-black-trees/weekly0.5https://blog.mfocko.xyz/algorithms/tags/solution/weekly0.5https://blog.mfocko.xyz/algorithms/tags/sorting/weekly0.5https://blog.mfocko.xyz/algorithms/tags/testing/weekly0.5https://blog.mfocko.xyz/algorithms/tags/time-complexity/weekly0.5https://blog.mfocko.xyz/algorithms/tags/top-down-dp/weekly0.5https://blog.mfocko.xyz/algorithms/weekly0.5https://blog.mfocko.xyz/algorithms/algorithms-correctness/postcondition-ambiguity/weekly0.5https://blog.mfocko.xyz/algorithms/category/algorithms-and-correctness/weekly0.5https://blog.mfocko.xyz/algorithms/category/asymptotic-notation-and-time-complexity/weekly0.5https://blog.mfocko.xyz/algorithms/category/graphs/weekly0.5https://blog.mfocko.xyz/algorithms/category/hash-tables/weekly0.5https://blog.mfocko.xyz/algorithms/category/paths-in-graphs/weekly0.5https://blog.mfocko.xyz/algorithms/category/recursion/weekly0.5https://blog.mfocko.xyz/algorithms/category/red-black-trees/weekly0.5https://blog.mfocko.xyz/algorithms/graphs/bfs-tree/weekly0.5https://blog.mfocko.xyz/algorithms/graphs/iterative-and-iterators/weekly0.5https://blog.mfocko.xyz/algorithms/hash-tables/breaking/weekly0.5https://blog.mfocko.xyz/algorithms/hash-tables/breaking/mitigations/weekly0.5https://blog.mfocko.xyz/algorithms/hash-tables/breaking/python/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/astar/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/bf/weekly0.5https://blog.mfocko.xyz/algorithms/paths/bf-to-astar/dijkstra/weekly0.5https://blog.mfocko.xyz/algorithms/rb-trees/applications/weekly0.5https://blog.mfocko.xyz/algorithms/rb-trees/rules/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/karel/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/karel/solution/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/bottom-up-dp/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/greedy/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/naive/weekly0.5https://blog.mfocko.xyz/algorithms/recursion/pyramid-slide-down/top-down-dp/weekly0.5https://blog.mfocko.xyz/algorithms/time-complexity/extend/weekly0.5https://blog.mfocko.xyz/c/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-03/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-04/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-05-06/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-08/weekly0.5https://blog.mfocko.xyz/c/bonuses/seminar-10/weekly0.5https://blog.mfocko.xyz/c/category/bonuses/weekly0.5https://blog.mfocko.xyz/c/category/practice-exams/weekly0.5https://blog.mfocko.xyz/c/mr/weekly0.5https://blog.mfocko.xyz/c/pexam/cams/weekly0.5https://blog.mfocko.xyz/c/pexam/garbage_collect/weekly0.5https://blog.mfocko.xyz/cpp/weekly0.5https://blog.mfocko.xyz/cpp/category/exceptions-and-raii/weekly0.5https://blog.mfocko.xyz/cpp/environment/weekly0.5https://blog.mfocko.xyz/cpp/exceptions-and-raii/placeholders/weekly0.5https://blog.mfocko.xyz/weekly0.5 \ No newline at end of file diff --git a/talks/index.html b/talks/index.html index fc01bdc..b54708a 100644 --- a/talks/index.html +++ b/talks/index.html @@ -2,7 +2,7 @@ - + Talks | mf @@ -14,8 +14,8 @@ - - + +

Talks

Featured talks I presented on various events.

Shift Left Testing with Packit and Testing Farm

In today's fast-paced software development landscape, ensuring the quality and reliability of upstream contributions is crucial. The traditional approach of testing at the end of the development cycle is no longer sufficient. To address this challenge, we present "Shift Left Your Testing with Packit and Testing Farm", a talk that introduces two powerful tools designed to simplify and enhance the testing process for the upstream contributions.

Packit and Testing Farm provide a dead simple way to build and test your upstream contributions against both public or internal Red Hat testing infrastructure. In this talk, we will explore the capabilities of both tools and demonstrate how they can be seamlessly integrated into your development workflow.

In addition to the current capabilities, we will share our plans for Packit and Testing.

  • QEcamp23
  • virtual
  • 11/2023

Packit: RPM integration, all in one

Do you want to automate how you build and test your RPM packages? Do you maintain any package in Fedora and want to automate the releases? Or are you just interested in CI/CD on GitHub or GitLab, Fedora and integration of upstream projects with RPM-based Linux distributions? In this session, we are going to deep-dive into features of Packit that can help you do your day-to-day job.
  • DevConf.cz
  • Brno, Czechia
  • 6/2023

Also presented on:

  • DevConf.cz Mini in Brno, Czechia (3/2023)

Credits to Paweł Kosiec for implementing his own React components for talks.

;;Cj)$%dsEe#fcp=v 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 z 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